Tài liệu Khóa luận Nghiên cứu và xây dựng ứng dụng từ điển trên điện thoại di động: TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN
KHOA CÔNG NGHỆ THÔNG TIN
BỘ MÔN CÔNG NGHỆ PHẦN MỀM
BÙI TẤN LỘC - 0112013
CAO THÁI PHƯƠNG THANH - 0112031
NGHIÊN CỨU VÀ XÂY DỰNG
ỨNG DỤNG TỪ ĐIỂN
TRÊN ĐIỆN THOẠI DI ĐỘNG
KHÓA LUẬN CỬ NHÂN TIN HỌC
GIÁO VIÊN HƯỚNG DẪN
Th.S NGUYỄN TẤN TRẦN MINH KHANG
Th.S TRẦN MINH TRIẾT
NIÊN KHÓA 2001 - 2005
LỜI CÁM ƠN
Chúng em xin chân thành cảm ơn Khoa Công nghệ Thông tin, trường Đại học
Khoa học Tự nhiên, Đại học Quốc gia Tp. Hồ Chí Minh đã tạo điều kiện thuận lợi
cho chúng em học tập và thực hiện đề tài tốt nghiệp này.
Chúng em xin bày tỏ lòng biết ơn sâu sắc đến thầy Nguyễn Tấn Trần Minh
Khang, thầy Trần Minh Triết đã tận tình hướng dẫn, chỉ bảo chúng em trong quá
trình thực hiện đề tài.
Chúng em xin chân thành cám ơn quý Thầy Cô trong Khoa Công nghệ Thông
tin đã tận tình giảng dạy, trang bị cho em những kiến thức quý báu trong những
năm học vừa qua.
Chúng con xin chân thành cảm ơn Ông Bà, Cha Mẹ đã luôn động viên, ủng hộ...
145 trang |
Chia sẻ: hunglv | Lượt xem: 1077 | Lượt tải: 0
Bạn đang xem trước 20 trang mẫu tài liệu Khóa luận Nghiên cứu và xây dựng ứng dụng từ điển trên điện thoại di động, để tải tài liệu gốc về máy bạn click vào nút DOWNLOAD ở trên
TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN
KHOA CÔNG NGHỆ THÔNG TIN
BỘ MÔN CÔNG NGHỆ PHẦN MỀM
BÙI TẤN LỘC - 0112013
CAO THÁI PHƯƠNG THANH - 0112031
NGHIÊN CỨU VÀ XÂY DỰNG
ỨNG DỤNG TỪ ĐIỂN
TRÊN ĐIỆN THOẠI DI ĐỘNG
KHÓA LUẬN CỬ NHÂN TIN HỌC
GIÁO VIÊN HƯỚNG DẪN
Th.S NGUYỄN TẤN TRẦN MINH KHANG
Th.S TRẦN MINH TRIẾT
NIÊN KHÓA 2001 - 2005
LỜI CÁM ƠN
Chúng em xin chân thành cảm ơn Khoa Công nghệ Thông tin, trường Đại học
Khoa học Tự nhiên, Đại học Quốc gia Tp. Hồ Chí Minh đã tạo điều kiện thuận lợi
cho chúng em học tập và thực hiện đề tài tốt nghiệp này.
Chúng em xin bày tỏ lòng biết ơn sâu sắc đến thầy Nguyễn Tấn Trần Minh
Khang, thầy Trần Minh Triết đã tận tình hướng dẫn, chỉ bảo chúng em trong quá
trình thực hiện đề tài.
Chúng em xin chân thành cám ơn quý Thầy Cô trong Khoa Công nghệ Thông
tin đã tận tình giảng dạy, trang bị cho em những kiến thức quý báu trong những
năm học vừa qua.
Chúng con xin chân thành cảm ơn Ông Bà, Cha Mẹ đã luôn động viên, ủng hộ
vật chất lẫn tinh thần trong suốt thời gian qua.
Chúng em xin cảm ơn sự quan tâm, giúp đỡ và ủng hộ của anh chị, bạn bè trong
quá trình thực hiện khóa luận.
Mặc dù đã cố gắng hoàn thành khóa luận trong phạm vi và khả năng cho phép
nhưng chắc chắn sẽ không tránh khỏi những thiếu sót. Chúng em rất mong nhận
được sự thông cảm, góp ý và tận tình chỉ bảo của quý Thầy Cô và các bạn.
Tp. Hồ Chí Minh, tháng 07 năm 2005
Nhóm sinh viên thực hiện
Bùi Tấn Lộc – Cao Thái Phương Thanh
Lời nói đầu
Công nghệ thông tin đang trở thành một phần quan trọng của cuộc sống. Các
thiết bị kĩ thuật cao ngày càng gần gũi với mọi hoạt động của con người. Đặc biệt
những năm gần đây, các thiết bị không dây - với ưu thế nhỏ gọn, dễ mang chuyển –
đã chứng tỏ được lợi ích to lớn cho người sử dụng. Trong đó điện thoại di động,
với các chức năng liên lạc, nổi bật lên như một thiết bị “không thể thiếu” trong cuộc
sống của nhiều người. Với sự phát triển nhanh chóng của công nghệ sản xuất thiết
bị không dây, điện thoại di động đã trở thành phương tiện đa chức năng (nghe nhạc,
chơi trò chơi, nhắc lịch làm việc…) phục vụ cho nhu cầu của người sử dụng mọi
lúc, mọi nơi.
Hệ điều hành Symbian là một hệ điều hành được thiết kế riêng để hoạt động tối
ưu trên các thiết bị di động vốn hạn chế về tài nguyên. Trên môi trường Symbian có
thể xây dựng hàng loạt ứng dụng tương tự máy tính cá nhân như: trình nghe nhạc
MP3, trình xem phim .AVI, ứng dụng văn phòng (hỗ trợ tập tin MS Word, MS
Excel…), các trò chơi 3D… Vì vậy sự ra đời của dòng điện thoại thông minh sử
dụng hệ điều hành Symbian với kiểu dáng tương đối nhỏ gọn, thiết kế đẹp mắt và
những ứng dụng hữu ích đã tạo ra một bước ngoặt mới trong thị trường điện thoại di
động. Đồng thời mở ra một hướng phát triển mới đầy hứa hẹn cho các công ty phần
mềm.
Bên cạnh đó, trong cuộc sống hiện nay, nhu cầu học tập, trao đổi kiến thức,
cũng như làm việc bằng ngoại ngữ là hết sức cần thiết. Sẽ rất tiện lợi nếu có một bộ
từ điển đa ngôn ngữ với đầy đủ chức năng, ngữ nghĩa nhưng nhỏ gọn, dễ mang
chuyển.
Vì những lý do trên, nhóm chúng em quyết tâm thực hiện đề tài “Nghiên cứu
và xây dựng ứng dụng từ điển trên điện thoại di động”
1
MỤC LỤC
Chương 1 Mở đầu ..................................................................................................... 9
1.1 Nhu cầu thực tế và lý do thực hiện đề tài ......................................................... 9
1.2 Mục tiêu của đề tài ......................................................................................... 10
1.3 Nội dung khóa luận ........................................................................................ 11
Chương 2 Tổng quan về hệ điều hành Symbian và điện thoại thông minh
Series 60.................................................................................................................... 12
2.1 Giới thiệu hệ điều hành Symbian ................................................................... 12
2.1.1 Công ty Symbian và hệ điều hành Symbian .......................................................12
2.1.2 Các mô hình thiết bị sử dụng hệ điều hành Symbian .........................................14
2.1.3 Các thành phần phần cứng chính trong điện thoại Symbian ..............................15
2.2 Điện thoại thông minh Symbian Series 60..................................................... 17
2.2.1 Giới thiệu ............................................................................................................17
2.2.2 Các tiêu chuẩn phần cứng của sản phẩm Series 60 ............................................18
Chương 3 Môi trường lập trình và vấn đề chính khi xây dựng ứng dụng từ
điển trên Series 60 ................................................................................................... 19
3.1 Phát triển ứng dụng trên điện thoại Series 60 ................................................ 19
3.1.1 Series 60 Developer Platform.............................................................................19
3.1.2 Các ngôn ngữ lập trình trên Series 60 Developer Platform................................21
3.2 Series 60 Application Framework.................................................................. 23
3.2.1 Series 60 Application Structure ..........................................................................23
3.2.2 Các loại ứng dụng trên điện thoại Series 60 .......................................................24
3.3 Vấn đề chính khi xây dựng ứng dụng từ điển trên Series 60 ......................... 25
3.3.1 Một số hạn chế phần cứng của điện thoại di động Series 60..............................26
3.3.2 Các yêu cầu cơ bản của một ứng dụng từ điển ...................................................26
3.3.3 Kết luận...............................................................................................................27
Chương 4 Kĩ thuật lập trình C++ trên Symbian.................................................. 28
4.1 Quản lý lỗi ...................................................................................................... 28
4.1.1 Lỗi lập trình ........................................................................................................28
4.1.2 Lỗi thiếu tài nguyên ............................................................................................29
4.2 Chuỗi .............................................................................................................. 37
4.2.1 Khái niệm............................................................................................................37
4.2.2 Phân loại .............................................................................................................38
4.3 Mảng............................................................................................................... 42
4.3.1 Mảng tĩnh............................................................................................................42
4.3.2 Mảng động ..........................................................................................................42
4.4 Mảng chuỗi ..................................................................................................... 47
4.4.1 Khái niệm............................................................................................................47
Chương 5 Các giải pháp chính cho việc xây dựng từ điển trên điện thoại di
động Series 60 .......................................................................................................... 49
5.1 Tổ chức cấu trúc dữ liệu lưu trữ ..................................................................... 49
2
5.1.1 Tổ chức các mục từ có kích thước bằng nhau ....................................................50
5.1.2 Tổ chức các mục từ có kích thước biến động .....................................................51
5.2 Tổ chức nén dữ liệu........................................................................................ 52
5.2.1 Nén toàn bộ dữ liệu.............................................................................................52
5.2.2 Nén từng khối dữ liệu .........................................................................................52
5.2.3 Chuẩn nén Dictzip ..............................................................................................53
5.2.4 Những khó khăn khi áp dụng Dictzip trên điện thọai di động............................54
5.2.5 Chuẩn nén Dictzip# ............................................................................................55
5.3 Tổ chức cấu trúc dữ liệu hỗ trợ cho việc tìm kiếm nhanh.............................. 57
5.3.1 Tổ chức tập tin nghĩa ..........................................................................................58
5.3.2 Tổ chức tập tin chỉ mục ......................................................................................59
5.3.3 Tổ chức băm tập tin chỉ mục ..............................................................................60
Chương 6 Các kỹ thuật xử lý ứng dụng................................................................ 64
6.1 Font chữ tiếng Việt ......................................................................................... 64
6.2 Bàn phím máy điện thoại................................................................................ 66
6.3 Các control của hệ điều hành Symbian .......................................................... 68
6.3.1 Mô hình MVC.....................................................................................................68
6.3.2 Phân loại controls trong Symbian.......................................................................69
6.3.3 Sử dụng control...................................................................................................70
6.3.4 Control observers................................................................................................73
6.4 Kỹ thuật tra cứu tự nhiên................................................................................ 73
6.4.1 Sắp xếp các mục từ tăng dần theo thứ tự bảng chữ cái Việt Nam......................73
6.4.2 Tối ưu số lượng các mục từ được nạp ................................................................76
6.4.3 Tùy biến cách thức tra cứu của người sử dụng...................................................76
6.5 Kỹ thuật phát âm ............................................................................................ 77
6.5.1 Những giới hạn khi xây dựng thư viện phát âm .................................................77
6.5.2 Text To Speech Offline.......................................................................................79
6.5.3 Text To Speech Online .......................................................................................79
Chương 7 Phân tích thiết kế ứng dụng từ điển .................................................... 81
7.1 Giới thiệu........................................................................................................ 81
7.2 Mô hình Use-Case .......................................................................................... 81
7.2.1 Mô hình Use-Case ..............................................................................................81
7.2.2 Đặc tả các Use-Case chính..................................................................................82
7.3 Thiết kế lớp đối tượng .................................................................................... 87
7.4 Thiết kế xử lý.................................................................................................. 89
7.4.1 Danh sách các xử lý chính ..................................................................................89
7.4.2 Mô tả các xử lý chính .........................................................................................90
7.5 Thiết kế giao diện ........................................................................................... 97
7.5.1 Màn hình tra từ ...................................................................................................98
7.5.2 Màn hình hiển thị nghĩa ......................................................................................98
7.5.3 Menu chính .........................................................................................................99
7.5.4 Màn hình cài đặt .................................................................................................99
Chương 8 Ứng dụng hỗ trợ quản lý dữ liệu trên Desktop ................................ 100
8.1 Giới thiệu...................................................................................................... 100
3
8.2 Mô hình Use-Case ........................................................................................ 100
8.2.1 Mô hình Use-Case ............................................................................................100
8.2.2 Đặc tả một số Use-Case chính ..........................................................................101
8.3 Thiết kế lớp................................................................................................... 106
8.3.1 Sơ đồ lớp...........................................................................................................106
8.3.2 Mô tả các lớp chính...........................................................................................106
8.4 Thiết kế xử lý................................................................................................ 107
8.4.1 Danh sách các xử lý chính ................................................................................107
8.4.2 Mô tả một số xử lý chính ..................................................................................107
8.5 Các màn hình giao diện ................................................................................ 109
8.5.1 Danh sách các màn hình giao diện....................................................................109
8.5.2 Mô tả các màn hình giao diện...........................................................................110
Chương 9 Cài đặt và thử nghiệm......................................................................... 112
9.1 Môi trường phát triển ................................................................................... 112
9.2 Mô hình cài đặt ............................................................................................. 113
9.3 Hướng dẫn sử dụng ...................................................................................... 114
9.3.1 Yêu cầu phần cứng ...........................................................................................114
9.3.2 Cài đặt ...............................................................................................................114
9.3.3 Hướng dẫn sử dụng chương trình Mobile Dictionary ......................................115
9.3.4 Hướng dẫn sử dụng chương trình Dictionary Manager....................................117
9.4 Thử nghiệm .................................................................................................. 121
9.4.1 Kết quả thử nghiệm hoạt động của ứng dụng ...................................................121
9.4.2 So sánh với các từ điển hiện có trên thị trường ................................................121
Chương 10 Tổng kết.............................................................................................. 123
10.1 Một số kết quả đạt được ............................................................................. 123
10.2 Hướng phát triển......................................................................................... 124
Phụ lục A SDKs và ứng dụng HelloWorld ..................................................... 125
A.1 SDKs (Software Development Kits) ....................................................... 125
A.2 Hướng dẫn cài đặt SDKs cho Series 60. (Một và nhiều SDK) ............... 126
A.3 Biên dịch và cài đặt ví dụ HelloWorld.................................................... 127
Phụ lục B Khái niệm cơ bản khi lập trình C++ trên hệ điều hành Symbian132
B.1 Các qui ước đặt tên.................................................................................. 132
B.2 Kiểu dữ liệu cơ bản ................................................................................. 135
Phụ lục C Chuẩn nén Dictzip#......................................................................... 137
Phụ lục D Các bộ dữ liệu của từ điển.............................................................. 139
Tài liệu tham khảo ................................................................................................ 141
4
DANH MỤC CÁC HÌNH
Hình 1.1 Nhu cầu từ điển di động........................................................................................10
Hình 2.1 Các cổ đông của công ty Symbian........................................................................12
Hình 2.2 Các nhà sản xuất có giấy phép sử dụng hệ điều hành Symbian ...........................13
Hình 2.3 Communicator áp dụng mô hình Crystal ..............................................................14
Hình 2.4Communicator áp dụng mô hình Quartz................................................................15
Hình 2.5 Smartphone áp dụng mô hình Pearl ......................................................................15
Hình 2.6 Điện thoại thông minh Symbian Series 60 ...........................................................17
Hình 2.7 Màn hình điện thoại Series 60 ..............................................................................18
Hình 2.8 Bàn phím điện thoại Series 60 ..............................................................................18
Hình 3.1 Application Structure............................................................................................23
Hình 3.2 Một ứng dụng dialog base ....................................................................................24
Hình 3.3 Một ứng dụng controls..........................................................................................25
Hình 3.4 Một ứng dụng Application / View architecture ....................................................25
Hình 4.1 Chuỗi không thể thay đổi......................................................................................39
Hình 4.2 Chuỗi có thể thay dổi ............................................................................................39
Hình 4.3Chuỗi cấp phát trên heap .......................................................................................40
Hình 4.4 Con trỏ chuỗi không thể thay đổi..........................................................................40
Hình 4.5 Con trỏ chuỗi có thể thay đổi................................................................................40
Hình 4.6 Cây kế thừa các lớp descriptor..............................................................................41
Hình 4.7 Sức chứa và độ phân hạt của mảng.......................................................................43
Hình 4.8 Mảng cùng kích thước, liên tục ............................................................................44
Hình 4.9 Mảng cùng kích thước, phân đoạn........................................................................44
Hình 4.10 Mảng khác kích thước, liên tục...........................................................................45
Hình 4.11 Mảng khác kích thước, phân đoạn......................................................................45
Hình 4.12 Mảng packed, liên tục.........................................................................................45
Hình 4.13 Mảng chuỗi không thể thay đổi ..........................................................................47
Hình 4.14 Mảng con trỏ chuỗi .............................................................................................48
Hình 5.1 Ý tưởng cấu trúc lưu trữ chuẩn Dictzip ................................................................54
Hình 5.2 Ý tưởng cấu trúc lưu trữ chuẩn Dictzip# ..............................................................55
Hình 5.3 Tổ chức tập tin nghĩa ............................................................................................58
5
Hình 5.4 Cấu trúc mẫu tin chỉ mục......................................................................................59
Hình 5.5 Các giá trị cần thiết để phân tích mục từ ..............................................................60
Hình 6.1 Tiếng Việt không hiển thị tốt ................................................................................64
Hình 6.2 Bàn phím điện thoại Series 60 ..............................................................................66
Hình 6.3 Mẫu thiết kế MVC ................................................................................................68
Hình 6.4 Control ..................................................................................................................69
Hình 6.5 Minh họa cách sử dụng biên dưới.........................................................................75
Hình 6.6 Minh họa sử dụng biên trên ..................................................................................76
Hình 6.7 Nạp từ vào listbox.................................................................................................77
Hình 7.1 Use-Case diagram.................................................................................................81
Hình 7.2 Class diagram........................................................................................................87
Hình 7.3 Sơ đồ tuần tự Khởi động ứng dụng 1....................................................................90
Hình 7.4 Sơ đồ tuần tự Khởi động ứng dụng 2....................................................................91
Hình 7.5 Sơ đồ tuần tự Chọn từ điển mới............................................................................92
Hình 7.6 Sơ đồ tuần tự Tìm kiếm từ 1 .................................................................................93
Hình 7.7 Sơ đồ tuần tự Tìm kiếm từ 2 .................................................................................93
Hình 7.8 Sơ đồ tuần tự Hiển thị nghĩa từ.............................................................................94
Hình 7.9 Sequence diagram Xem nghĩa từ khác trong màn hình nghĩa 1 ...........................95
Hình 7.10 Sequence diagram Xem nghĩa từ khác trong màn hình nghĩa 2 .........................95
Hình 7.11 Sequence diagram Nghe phát âm từ 1 ................................................................96
Hình 7.12 Sơ đồ tuần tự Nghe phát âm từ 2 ........................................................................97
Hình 7.13 Màn hình tra từ ...................................................................................................98
Hình 7.14 Màn hình hiển thị nghĩa ......................................................................................98
Hình 7.15 Submenu Dictionaries.........................................................................................99
Hình 7.16 Submenu About ..................................................................................................99
Hình 7.17 Màn hình cài đặt .................................................................................................99
Hình 8.1 Mô hình Use-Case Dictionary Manager .............................................................100
Hình 8.2 Sơ đồ các lớp đối tượng ......................................................................................106
Hình 8.3 Sơ đồ tuần tự cho xư lý Import ...........................................................................107
Hình 8.4 Sơ đồ tuần tự cho xử lý Export ...........................................................................108
Hình 8.5 Sơ đồ tuần tự cho xử lý LoadDictionary.............................................................108
Hình 8.6 Sơ đồ tuần tự cho xử lý UpdateWord .................................................................109
6
Hình 8.7 Màn hình chính của ứng dụng Dictionary Manager ...........................................110
Hình 8.8 Màn hình biên sọan từ ........................................................................................111
Hình 9.1 Mô hình cài đặt đề tài .........................................................................................113
Hình 9.2 Cài đặt thành công Mobile_Dict .........................................................................115
Hình 9.3 Cài đặt thành công Dữ liệu .................................................................................115
Hình 9.4 Tra từ và gõ tiếng Việt ........................................................................................115
Hình 9.5 Chọn từ điển cần dùng ........................................................................................116
Hình 9.6 Setting list ...........................................................................................................116
Hình 9.7 Phát âm từ ...........................................................................................................116
Hình 9.8 Màn hình chính của ứng dụng Dictionary Manager ...........................................117
Hình 9.9 Chọn chức năng Import ......................................................................................118
Hình 9.10 Chọn chức năng mở một từ điển có sẵn............................................................118
Hình 9.11 Màn hình biên soạn từ ......................................................................................119
Hình 9.12 Chọn chức năng thêm từ ...................................................................................119
Hình A. 1 Cửa sổ HelloWorldBasic project ......................................................................127
Hình A. 2 Build Solution HelloworldBasic .......................................................................128
Hình A. 3 Trình giả lập SDK 2nd Edition, FP2 ..................................................................128
Hình A. 4 HelloWorld trên máy giả lập.............................................................................129
Hình A. 5 Release build.....................................................................................................130
7
DANH MỤC CÁC BẢNG
Bảng 5.1 Bảng mô tả các trường dữ liệu .............................................................................49
Bảng 5.2 Tổ chức từ điển với cáctừ gốc có kích thước bằng nhau......................................50
Bảng 5.3 Tổ chức từ điển với cáctừ gốc có kích thước không bằng nhau...........................51
Bảng 5.4 So sánh tỉ lệ nén giữa DictZip và Dictzip#...........................................................56
Bảng 5.5 Kích thước tập tin sau khi dùng Dictzip# nén......................................................56
Bảng 5.6 Tốc độ truy xuất từ điển Anh-Việt khi sử dụng Dictzip#.....................................56
Bảng 5.7 Tốc độ truy xuất từ điển Anh-Việt khi sử dụng Dictzip#.....................................57
Bảng 5.8 Các trường dữ liệu trong mẫu tin chỉ mục............................................................59
Bảng 5.9 Bảng thống kê sự phân bố các cụm trong bảng băm cấp 1 ..................................61
Bảng 5.10 Bảng thống kê sự phân bố các cụm trong bảng băm cấp 2 ................................62
Bảng 5.11 Bảng thống kê sự phân bố các cụm trong bảng băm cấp 3 ................................62
Bảng 5.12 Bảng thống kê sự phân bố các cụm trong bảng băm cấp 4 ................................63
Bảng 6.1 Tập các ký tự có dấu tiếng Việt............................................................................74
Bảng 6.2 Biên trên và biên dưới của ký tự có dấu tiếng Việt ..............................................75
Bảng 6.3 Kích thước của bộ thư viện Offline......................................................................79
Bảng 7.1 Danh sách Actor ...................................................................................................82
Bảng 7.2 Danh sách Use-case..............................................................................................82
Bảng 7.3 Danh sách các lớp chính.......................................................................................89
Bảng 7.4 Danh sách các xử lý chính....................................................................................89
Bảng 7.5 Danh sách màn hình giao diện .............................................................................97
Bảng 7.6 Các thành phần của màn hình tra từ .....................................................................98
Bảng 7.7 Các thành phần của màn hình hiển thị nghĩa.......................................................98
Bảng 7.8 Các thành phần của menu chính...........................................................................99
Bảng 7.9Các thành phần của màn hình cài đặt ....................................................................99
Bảng 8.1 Danh sách các Actor...........................................................................................101
Bảng 8.2 Danh sách các Use-Case chính..........................................................................101
Bảng 8.3 Các lớp chính......................................................................................................106
Bảng 8.4 Các xử lý chính...................................................................................................107
Bảng 8.5 Các màn hình giao diện ......................................................................................109
Bảng 9.1 Implement Model ...............................................................................................113
8
Bảng 9.2 Danh sách điện thoại tương thích.......................................................................114
Bảng 9.3 Kết quả thử nghiệm trên máy ảo ........................................................................121
Bảng 9.4 Kết quả thử nghiệm trên máy thật ......................................................................121
Bảng 9.5 So sánh với TMADict ........................................................................................122
Bảng B. 1 Qui ước đặt tên lớp ...........................................................................................132
Bảng B. 2 Qui ước đặt tên biến..........................................................................................133
Bảng B. 3 Qui ước đặt tên hàm..........................................................................................134
Bảng B. 4 Kiểu số nguyên .................................................................................................135
Bảng B. 5 Kiểu số thực......................................................................................................135
Bảng B. 6 Các kiểu cơ bản khác ........................................................................................136
Chương 1 . Mở đầu
9
Chương 1 Mở đầu
1.1 Nhu cầu thực tế và lý do thực hiện đề tài
Trong cuộc sống, nhu cầu thông tin liên lạc là hết sức cần thiết. Vô số phương
pháp liên lạc đã ra đời nhằm phục vụ nhu cầu này từ thư tín, điện thoại bàn đến thư
điện tử, điện thoại di động, kết nối Wi-fi, chat Web_Camera... Trong đó, điện thoại
di động nổi bật lên như một phương tiện liên lạc hữu ích nhất, tiện lợi nhất, đặc biệt
đối với những người sống và làm việc trong các đô thị. Nhờ chức năng đàm thoại
trực tiếp mọi lúc mọi nơi, mà điện thoại di động ngày càng được sử dụng rộng rãi.
Hiện nay trên thế giới, điện thoại di động phát triển không ngừng. Hàng loạt điện
thoại với các tính năng, ứng dụng hiện đại được tung ra thị trường. Có thể nói điện
thoại di động là thiết bị điện tử phát triển nhanh chóng nhất cả về công nghệ lẫn tính
năng, ứng dụng. Riêng ở Việt Nam, thị trường điện thoại di động đã và đang phát
triển mạnh mẽ với số lượng người sử dụng đông đảo, hơn hẳn các thiết bị di động
cá nhân khác như Pocket PC, máy nghe nhạc…
Bên cạnh đó, nhu cầu về một từ điển ngôn ngữ phục vụ công việc, học tập, giao
tiếp… là luôn luôn cần thiết. Tuy nhiên không phải lúc nào chúng ta cũng có mặt ở
nhà để tra từ điển; và khi đi công tác, đi học, du lịch… mang theo một quyển từ
điển dày cộm hoặc máy tính xách tay có nhiều bất tiện. Vì vậy, một ứng dụng từ
điển trên điện thoại di động cho phép tra cứu “mọi lúc mọi nơi” luôn được người
dùng chờ đợi và ủng hộ. Sự ra đời của thế hệ điện thoại thông minh sử dụng hệ điều
hành mở (open operation system) Symbian đã cho phép thực hiện điều này. Tuy
nhiên do điện thoại Symbian mới phát triển trong khoảng hai năm gần đây nên trên
thế giới cũng như ở Việt Nam, số lượng ứng dụng từ điển cho điện thoại di động
còn ít.
Từ những thực tế và lý do trên, chúng em quyết tâm xây dựng một ứng dụng từ
điển trên điện thoại di động.
Chương 1 . Mở đầu
10
1.2 Mục tiêu của đề tài
Như tên gọi, điện thoại di động là thiết bị nhỏ gọn, được thiết kế phục vụ chủ
yếu cho nhu cầu liên lạc và giải trí của người dùng khi “di chuyển”. Bộ xử lý cũng
như khả năng lưu trữ của điện thoại di động kém xa so với máy tính để bàn. Ngoài
ra việc lập trình ứng dụng trên điện thoại cũng có những khác biệt và khó khăn so
với với lập trình trên máy tính.
Như vậy, đề tài cần giải quyết các công việc chính như sau:
Tìm hiểu về điện thoại thông minh, hệ điều hành Symbian và khả năng
lập trình trên môi trường này.
Đi sâu tìm hiểu cách thức lập trình trên điện thoại thông minh Symbian
Series 60 – dòng điện thoại di động Symbian được ưa chuộng và sử dụng
rỗng rãi nhất hiện nay
Nghiên cứu, xây dựng cấu trúc dữ liệu từ điển giải quyết được những hạn
chế của máy điện thoại về khả năng xử lý và lưu trữ dữ liệu.
Xây dựng hoàn chỉnh ứng dụng từ điển trên điện thoại thông minh
Symbian Series 60 với các chức năng tốt nhất có thể. Bao gồm cả một
ứng dụng cho phép chỉnh sửa dữ liệu trên máy tính.
Hình 1.1 Nhu cầu từ điển di động
Chương 1 . Mở đầu
11
1.3 Nội dung khóa luận
Nội dung luận văn gồm 10 chương
Chương 1. Mở đầu: trình bày nhu cầu thực tế, lý do thực hiện đề tài và các
mục tiêu cần đạt được.
Chương 2. Tổng quan về hệ điều hành Symbian và điện thoại thông minh
Series 60: giới thiệu tổng quan về hệ điều hành Symbian và dòng điện thoại thông
minh Series 60. Trình bày các ngôn ngữ lập trình và công cụ phát triển ứng dụng
trên Symbian
Chương 3. Môi trường lập trình và vấn đề chính khi xây dựng ứng dụng từ
điển trên Series 60
Chương 4. Kĩ thuật lập trình C++ trên Symbian: giới thiệu các kĩ thuật lập
trình cơ bản các điểm khác biệt, cần lưu ý khi phát triển ứng dụng bằng C++ trên
Symbian
Chương 5. Các giải pháp chính cho việc xây dựng từ điển trên điện thoại di
động Series 60: trình bày cách thức xây dựng cấu trúc dữ liệu từ điển sao cho hoạt
động hiệu quả trên điện thoại
Chương 6. Các kĩ thuật xử lý ứng dụng: trình bày những kĩ thuật lập trình
cho ứng dụng từ điển trên điện thoại
Chương 7. Phân tích thiết kế ứng dụng từ điển: trình bày hồ sơ phân tích
thiết kế ứng dụng Mobile_Dict
Chương 8. Ứng dụng hỗ trợ quản lý dữ liệu trên Desktop: trình bày hồ sơ
phân tích thiết kế và cách thức hoạt động của ứng dụng DictionaryManager
Chương 9. Cài đặt và thử nghiệm: giới thiệu môi trường phát triển, cài đặt
ứng dụng. Hướng dẫn sử dụng và một số kết quả thử nghiệm, so sánh.
Chương 10. Tổng kết: trình bày những kết quả đạt được và hướng phát triển
trong tương lai.
Chương 2 . Tổng quan về hệ điều hành Symbian và điện thoại thông minh Series 60
12
Chương 2 Tổng quan về hệ điều hành Symbian và điện
thoại thông minh Series 60
2.1 Giới thiệu hệ điều hành Symbian
2.1.1 Công ty Symbian và hệ điều hành Symbian
Symbian là một công ty phần mềm chuyên phát triển và cung cấp một hệ điều
hành tiên tiến, mở, chuẩn mực dùng cho thiết bị di động – hệ điều hành Symbian.
Công ty được thành lập vào tháng 6 năm 1998 đặt trụ sở chính tại Anh. Mục tiêu
của công ty Symbian là phát triển hệ điều hành Symbian thành hệ điều hành chuẩn
được sử dụng rộng rãi cho các hệ thống kỹ thuật số di động trên toàn thế giới. Được
sự hậu thuẫn của các nhà sản xuất điện thoại di động hàng đầu thế giới, công ty
Symbian không ngừng phát triển:
Hình 2.1 Các cổ đông của công ty Symbian
Ban đầu công ty Psion xây dựng EPOC platform dùng để điều khiển các thiết bị
nhỏ, đạt được một số kết quả nhất định Sau đó, các công ty điện thoại di động hàng
đầu (Nokia, Siemens…) mua lại Psion, thành lập công ty Symbian và tiếp tục phát
triển EPOC với tên gọi hệ điều hành Symbianan. Ngày nay, hệ điều hành Symbian
Chương 2 . Tổng quan về hệ điều hành Symbian và điện thoại thông minh Series 60
13
là hệ điều hành được sử dụng rộng rãi trên các thiết bị di động. Nhờ cam kết cung
cấp một chuẩn mở và hỗ trợ những người sử dụng thiết bị di động mà Symbian trở
thành sự lựa chọn hàng đầu trong ngành công nghiệp về thiết bị di động hiện nay.
Hệ điều hành Symbian là một chuẩn mở nên bất cứ nhà sản xuất nào cũng có thể
được cấp bản quyền sử dụng trên thiết bị của mình.
Hình 2.2 Các nhà sản xuất có giấy phép sử dụng hệ điều hành Symbian
Hiện nay, Symbian thiết lập sự thống trị trên thị trường thiết bị di động thông
minh. Với 10,7 triệu thiết bị đã được bán ra chiếm 61,4% thị phần. (Theo báo
EChip, số 207 ra ngày 06/05/2005)
Chương 2 . Tổng quan về hệ điều hành Symbian và điện thoại thông minh Series 60
14
2.1.2 Các mô hình thiết bị sử dụng hệ điều hành Symbian
Hệ điều hành Symbian được thiết kế cho hai loại thiết bị di dộng chiến lược là
Communicator và Smartphone. Communicator là các máy PDA với khả năng liên
lạc vô tuyến của thiết bị di động. Trong khi Smartphone là điện thoại di động với
các tính năng PDA bổ sung. Với hai loại thiết bị này, Symbian công bố một số mô
hình thiết kế tham khảo cho các nhà sản xuất. Hiện nay, tất cả các thiết bị di động
thông minh trên thị trường đều có thể xác định dùng một trong ba mô hình sau:
Mô hình Crystal:
Mô hình Crystal định nghĩa một loại Communicator bỏ túi với hình dáng của
một máy laptop. Crystal sử dụng màn hình màu theo chuẩn ½ VGA và một bàn phí
QWERTY, có thể hỗ trợ màn hình cảm ứng để nhập liệu với bút stylus. Ngoài ra
Crystal còn có bốn phím đặc biệt được đặt dọc theo phía phải bên ngoài màn hình,
được thiết kế để sử dụng bằng hai tay hoặc đặt trên bàn.
Các sản phẩm áp dụng mô hình Crystal trên thị trường: Nokia 9210i, Nokia
9300…
Hình 2.3 Communicator áp dụng mô hình Crystal
Mô hình Quartz
Mô hình Quartz định nghĩa một loại Communicator với hình dáng của một máy
Pocket PC. Quartz sử dụng màn hình màu theo chuẩn ¼ VGA, là một thiết bị di
động dùng bút stylus nhập liệu qua tương tác với một màn hình cảm ứng. Vì vậy,
không hề có một bàn phím vật lý nào trong mô hình Quartz, việc nhập liệu thông
qua nhận chữ dạng viết tay hoặc một bàn phím ảo.Quartz cũng được thiết kế để sử
dụng cả hai tay.
Các sản phẩm áp dụng mô hình Crystal trên thị trường: SonyEcrisson P900,
Motorola A920…
Chương 2 . Tổng quan về hệ điều hành Symbian và điện thoại thông minh Series 60
15
Mô hình Pearl
Mô hình Pearl định nghĩa một loại Smartphone với hình dáng kích thước của
một điện thoại di động thông thường. Pearl hỗ trợ màn hình màu với nhiều kích
thước, tiêu chuẩn khác nhau, sử dụng bàn phím số của điện thoại để nhập liệu.
Các sản phẩm áp dụng mô hình Pearl trên thị trường: Nokia N-Gage QD,
Siemens SX1, Nokia 7610, Xendo X…
Hình 2.4Communicator áp dụng mô hình Quartz
Hình 2.5 Smartphone áp dụng mô hình Pearl
2.1.3 Các thành phần phần cứng chính trong điện thoại Symbian
Hệ điều hành Symbian được xây dựng để chạy trên các thiết bị liên lạc không
dây gọi chung là điện thoại Symbian. Do đó các đặc tính phần cứng của điện thoại
có tác động sâu sắc đến hệ điều hành. Vì vậy để hiểu rõ Symbian, chúng ta cần tìm
hiểu các thành phần quan trọng cấu thành điện thoại Symbian đó là CPU, ROM,
RAM, các thiết bị nhập xuất (I/O) và nguồn năng lượng.
CPU: hệ điều hành Symbian được thiết kế cho kiến trúc CPU 32 bit, chạy ở tốc độ
thấp hơn so với máy tính trên máy để bàn và server. Các thiết bị Symbian hiện tại
sử dụng CPU chỉ có tốc độ trên dưới 100MHz. Trong tương lai tốc độ CPU có thể
được cải thiện hơn.
ROM: bộ nhớ chỉ đọc (ROM) chứa hệ điều hành và tất cả các ứng dụng và phần
mềm trung gian (middleware) có sẵn được nhà sản xuất đưa vào khi tạo thiết bị.
Điều này hoàn toàn khác với trên PC, nơi mà ROM chỉ chứa các phần nạp ban đầu
Chương 2 . Tổng quan về hệ điều hành Symbian và điện thoại thông minh Series 60
16
và BIOS, còn hệ điều hành và ứng dụng lưu trên đĩa cứng. Bộ nhớ ROM trên điện
thoại Symbian được gán nhãn là ổ đĩa Z. Tất cả mọi thứ trong ROM đều có thể truy
cập như là file trên ổ đĩa Z. Vì vậy các chương trình được chạy trực tiếp trên ROM
thay vì nạp vào RAM như trên PC. Bộ nhớ ROM thường rất giới hạn, thường là
8MB đến 16MB.
RAM: bộ nhớ truy xuất ngẫu nhiên (RAM) được sử dụng bởi các ứng dụng đang
thực thi và nhân hệ thống. Một phần RAM được gán là ổ đĩa C dùng để chứa các
chương trình, các tập tin hình ảnh, chương trình… gọi là bộ nhớ của điện thoại Vì
vậy khi tắt máy, bộ nhớ này không bị xóa. Dung lượng RAM trên thiết bị cũng rất
hạn chế nên lỗi tràn bộ nhớ hoặc thiếu bộ nhớ là có thể xảy ra, nhất là khi thực thi
nhiều ứng dụng cùng một lúc.
Các thiết bị nhập xuất (I/O): bao gồm:
Màn hình có kích thước khác nhau tuỳ theo dòng điện thoại, có thể là
màn hình cảm ứng với khả năng tương tác bằng bút stylus.
Một bàn phím: có thể là bàn phím số hay QWERTY.
Một khe cắm thêm thẻ nhớ (memory card): đây là bộ nhớ ngoài của điện
thoại Symbian và được gán nhãn ổ đĩa E.
Một cổng tuần tự RS232: để giao tiếp với PC.
Một cổng hồng ngoại và Bluetooth cho các truyền thông vô tuyến giữa
điện thoại Symbian và các thiết bị khác như laptop, Palm,…
Nguồn năng lượng: sử dụng pin đặc thù có thể sạc lại thông qua một thiết bị
adapter phù hợp. Do nguồn năng lượng hạn hẹp, Symbian được thiết kế đặc biệt để
có thể hoạt động tốt khi hết pin đột ngột hoặc khi đang sạc pin.
Với các đặc trưng trên, hệ điều hành Symbian phải đáp ứng được các yêu cầu sau:
Hoạt động tốn ít bộ nhớ và năng lượng nhất có thể.
Các ứng dụng có thể hoạt động song song.
Quản lý, cấp phát chặt chẽ bộ nhớ và giải phóng ngay khi không sử dụng
nữa.
Sử dụng công nghệ đã được chuẩn hóa, nhằm đảm bảo khả năng tương
tác giữa điện thoại với các thiết bị khác (Desktop, Pocket PC…)
Cung cấp tốt những qui ước, kĩ thuật debug, quản lý lỗi, quản lý bộ nhớ
cho lập trình viên khi phát triển ứng dụng.
Chương 2 . Tổng quan về hệ điều hành Symbian và điện thoại thông minh Series 60
17
2.2 Điện thoại thông minh Symbian Series 60
2.2.1 Giới thiệu
Điện thoại thông minh Symbian Series 60 – xuất hiện lần đầu vào năm 2002 –
trước hết là một điện thoại di động GSM hay CDMA thông thường. Tuy nhiên đặc
điểm nổi bật của điện thoại Series 60 là các phần mềm ứng dụng. Người sử dụng có
thể tải về, cài đặt và sử dụng ngay trên điện thoại di động của mình vô số các ứng
dụng, tiện ích với những tính năng tuyệt vời như: chương trình nghe nhạc mp3,
chương trình xem phim, chương trình xem, chỉnh sửa văn bản, xử lý ảnh… Cũng
như các ứng dụng đặc thù cho điện thoại như bảo mật tin nhắn, chặn cuộc gọi…
Hiện nay các sản phẩm Series 60 với mẫu mã đa dạng (phần lớn do Nokia sản
xuất) đang phát triển nhanh chóng, dần dần chiếm lĩnh thị trường điện thoại di
động.
Hình 2.6 Điện thoại thông minh Symbian Series 60
Chương 2 . Tổng quan về hệ điều hành Symbian và điện thoại thông minh Series 60
18
2.2.2 Các tiêu chuẩn phần cứng của sản phẩm Series 60
Màn hình hiển thị:
Độ phân giải tối thiểu 176 * 208
(Rộng 176 và cao 208 điểm ảnh)
Các điểm ảnh hình vuông.
Số màu hiển thị 4096 trở lên
Hình 2.7 Màn hình điện thoại Series 60
Bàn phím:
Gồm 12 phím (12-key numeric
keypad), 2 phím để nghe và kết
thúc cuộc gọi (“send” and “end”
keys), 2 softkey, 4 phím di
chuyển (4-way navigation key),
1 phím OK, 1 phím để vào giao
diện ứng dụng (app launch key),
1 phím xóa (clear key) và 1 phím
để chuyển qua lại giữa các chế
độ nhập liệu (alpha toggle key). Hình 2.8 Bàn phím điện thoại Series 60
Chương 3 . Môi trường lập trình và vấn đề chính khi xây dựng ứng dụng từ điển trên Series 60
19
Chương 3 Môi trường lập trình và vấn đề chính khi xây
dựng ứng dụng từ điển trên Series 60
Các lập trình viên khi phát triển ứng dụng trên một thiết bị sử dụng hệ điều
hành nào đó cần giải quyết hai vấn đề chính:
Tìm hiểu khả năng lập trình, ngôn ngữ phát triển ứng dụng trên thiết bị,
hệ điểu hành đó.
Chọn cấu trúc dữ liệu, thuật toán xử lý, giao diện ứng dụng thích hợp với
thiết bị, hệ điều hành.
3.1 Phát triển ứng dụng trên điện thoại Series 60
Sau khi quyết định phát triển ứng dụng từ điển trên điện thoại thông minh
Symbian Series 60. Vấn đề đầu tiên cần giải quyết là môi trường lập trình và cấu
trúc cơ bản của một ứng dụng trong hệ điều hành Symbian
3.1.1 Series 60 Developer Platform
Series60 Platform là một nền tảng phần mềm chạy trên điện thoại thông minh
Symbian Series 60. Platform bao gồm hệ thống giao diện người dùng cho phép
người sử dụng tìm và sử dụng các tập tin, phần mềm ứng dụng sẵn có (phần mềm in
ảnh trực tiếp, phần mềm thu âm…) cũng như các chức năng của điện thoại (tin
nhắn, lịch…). Ngoài ra, Series 60 Platform còn cho phép cài đặt bổ sung các ứng
dụng khác. Có thể nói, Series 60 Platform thực thi ở tầng trên cùng của hệ điều
hành Symbian, đảm trách phần giao tiếp giữa người dùng với hệ điều hành.
Việc xây dựng ứng dụng cho điện thoại Series 60 có thể thực hiện được do
Symbian là một hệ điều hành mở. Cũng như Windows, hệ điều hành Symbian cung
cấp một tập thư viện hàm lập trình API. Đồng thời, nhà sản xuất cũng cung cấp
“Series 60 Developer Platform”, nhằm hỗ trợ các lập trình viên phát triển ứng dụng
cho điện thoại thông minh trên máy tính
Hiện nay có hai phiên bản Series 60 Developer Platform ứng với hai phiên bản
hệ điều hành Symbian trong các điện thoại thông minh đã có trên thị trường:
Chương 3 . Môi trường lập trình và vấn đề chính khi xây dựng ứng dụng từ điển trên Series 60
20
3.1.1.1 Series 60 Developer Platform 1.0 (Symbian 6.1)
Với các công nghệ:
J2ME Java APIs : thư viện lập trình Java cho điện thoại di động
o Mobile Information Device Profile (MIDP) 1.0
o Connected Limited Device Configuration (CLDC) 1.0
o Wireless Messaging API (JSR 120)
Mobile Media API (JSR 135): thư viện hỗ trợ xây dựng các ứng
dụng đa phương tiện (ghi âm, chụp ảnh, nghe nhạc, quay phim…)
được tích hợp trên máy điện thoại.
XHTML browsing: duyệt WAP, lấy dữ liệu từ GPRS
MMS messaging: tin nhắn đa phưong tiện.
Symbian OS 6.1 native APIs: thư viện hàm API của hệ điều hành
Symbian 6.1
3.1.1.2 Series 60 Developer Platform 2.0 (Symbian 7.0s)
Với các công nghệ:
J2ME Java APIs: thư viện lập trình Java cho điện thoại di động bản
2.0 với nhiều cải tiến so với phiên bản MIDP 1.0
o MIDP 2.0
o CLDC 1.0
Wireless Messaging API (JSR 120): tin nhắn không dây
Mobile Media API (JSR 135): thư viện hỗ trợ xây dựng các ứng
dụng đa phương tiện (ghi âm, chụp ảnh, nghe nhạc, quay phim…)
được tích hợp trên máy điện thoại.
Bluetooth API (JSR 82): thư viện hỗ trợ lập trình các ứng dụng sử
dụng công nghệ bluetooth để truyền dữ liệu.
XHTML browsing over TCP/IP: trình duyệt WAP, hỗ trợ giao thức
phổ biến TCP/IP
MMS messaging with Synchronized Multimedia Integration
Language (SMIL): tin nhắn đa phương tiện với SMIL
Chương 3 . Môi trường lập trình và vấn đề chính khi xây dựng ứng dụng từ điển trên Series 60
21
OMA Digital Rights Management (DRM) (forward-lock): công cụ
bảo vệ bản quyền ứng dụng trên điện thoại thông minh series 60.
OMA Client Provisioning: cung cấp các ứng dụng
Symbian OS v7.0s native APIs: thư viện hàm API của hệ điều hành
Symbian 7.0s, không thay đổi nhiều so với bản 6.1
3.1.2 Các ngôn ngữ lập trình trên Series 60 Developer Platform
Dựa vào các thông tin trên về Series 60 Developer Platform. Dễ dàng nhận thấy
có thể phát triển ứng dụng trên điện thoại di động series 60 bằng ngôn ngữ Java
(công nghệ J2ME) hoặc bằng ngôn ngữ C++ (sử dụng thư viện hàm API do hệ điều
hành Symbian cung cấp).
3.1.2.1 Java
Lập trình bằng ngôn ngữ Java độc lập với phần cứng vì ứng dụng sẽ hoạt động
trên một máy ảo Java (Java virtual machine - JVM). Điều này cho phép lập trình
viên chỉ cần phát triển ứng dụng mà không quan tâm tới thiết bị cụ thể. Trong nền
hệ thống series 60, máy ảo Java với ứng dụng của nó (MIDlets) chạy trên môi
trường điều khiển gọi là sandbox; vì vậy không thể sử dụng mọi chức năng của thiết
bị, ví dụ không thể truy cập hệ thống tập tin vốn là một thế mạnh của dòng điện
thoại thông minh. Tuy nhiên ứng dụng Java vẫn phù hợp với nhiều loại ứng dụng từ
trò chơi tới phần mềm tính toán, đặc biệt trong thời điểm ngôn ngữ lập trình Java
được sử dụng phổ biến như hiện nay.
Hiện nay có nhiều công cụ, mội trường phát triển (IDE) để xây dựng ứng dụng
cho điện thoại di động series 60. Xin giới thiệu một số IDE thông dụng: Borland
JBuilder X Mobile Edition, Sun ONE Studio v6.0 Mobile Edition for Java Early
Access, và Nokia Developer’s Suite for J2ME sử dụng SDK Series 60 MIDP for
Symbian OS.
3.1.2.2 C++
Series 60 Developer Platform dựa trên hệ điều hành Symbian, bồ sung một số
chức năng khác như tin nhắn đa phương tiện, bluetooth… và cụ thể hóa các lớp giao
diện cho dòng điện thoại di động series 60. Hệ điều hành Symbian được viết bằng
Chương 3 . Môi trường lập trình và vấn đề chính khi xây dựng ứng dụng từ điển trên Series 60
22
C++ nên một ứng dụng C++ có thể sử dụng tất cả các tài nguyên, chức năng của
thiết bị thông qua các hàm API mà hệ điều hành cung cấp.
Khi lập trình C++ cho điện thoại thông minh Symbian series 60, lập trình viên
có nhiều lựa chọn IDE: Microsoft Visual C++ 6.0 HAY 7.0, CodeWarrior Wireless
Development Kits for Symbian OS và C++Builder X.
3.1.2.3 Lựa chọn ngôn ngữ lập trình cho đề tài
Như phần trên đã trình bày, các ứng dụng trên điện thoại di động có thể được
viết bằng ngôn ngữ Java hoặc C++. Tuy nhiên, đối với dòng điện thoại thông minh
series 60, ứng dụng viết bằng C++ có những ưu điểm vượt trội. Có thể liệt kê một
số ưu điểm nổi bật:
Ưu điểm lớn nhất là tận dụng các hàm API do hệ điều hành cung cấp.
Symbian là 1 hệ điều hành mở với thư viện hàm API rất phong phú
liên quan tới tất cả các lĩnh vực trên điện thoại thông minh từ các
control hiển thị thông tin đến lập trình đa phương tiện, bluetooth,
hồng ngoại…
Các ứng dụng liên quan tới chức năng thoại như ngăn chặn cuộc gọi
ngoài ý muốn, quản lý cuộc gọi, bảo mật tin nhắn SMS… chỉ có thể
viết bằng ngôn ngữ C++.
Symbian hỗ trợ nhiều lớp với nhiều mức độ thao tác trên tập tin từ
việc tìm kiếm, đổi tên, xóa một hoặc nhiều tập tin cùng một lúc. Điều
này cho phép viết những ứng dụng quản lý tập tin tương tự như
Window Explorer rất quen thuộc và tiện lợi cho người sử dụng điện
thoại thông minh. Điều này chắc chắn không thực hiện được với mô
hình MIDP của Java.
Việc hiển thị thông tin cũng được hỗ trợ tốt với nhiều loại control như
label, listbox, textbox, checkbox… cho phép thay đổi nhiều thuộc tính
như kích thước, màu sắc, font chữ… Ngoài ra ứng dụng giao diện
người dùng viết bằng C++ trên Symbian có thể hoạt động theo mô
Chương 3 . Môi trường lập trình và vấn đề chính khi xây dựng ứng dụng từ điển trên Series 60
23
hình MultiView, cho phép người dùng chuyển đổi dễ dàng giữa các
view với các control độc lập cho từng view.
Ngoài ra một ưu điểm không thể không nhắc đến là lập trình đa
phương tiện (muiltimedia). Với sự hỗ trợ của các hàm API, đã có
nhiều ứng dụng nghe nhạc mp3, xem phim, xử lý ảnh chụp bằng máy
ảnh kĩ thuật số tích hợp trong điện thoại di động… rất hiệu quả như
Mp3Player, SmartMovie, ImageMagic…
Các trò chơi nhất là những game 3D đặc sắc trên điện thoại thông
minh cũng được viết bằng C++ …
Như vậy có thể thấy, chính các ứng dụng viết bằng C++ đã tạo nên “bước
ngoặt” trong thị trường điện thoại thông minh Symbian Series 60.
Chúng em quyết định thực hiện ứng dụng từ điển trên điện thoại di động.cũng
chính là nhờ khả năng lập trình C++ trên Symbian này.
3.2 Series 60 Application Framework
Đối với các ứng dụng biết bằng C++, Series 60 thêm một tầng giao diện người
sử dụng (tầng này còn gọi là Avkon) trên tầng Uikon của hệ điều hành. Avkon cung
cấp một tập các gói UI và một application framework, chúng được thiết kế đặc biệt
cho Series 60.
3.2.1 Series 60 Application Structure
Hình 3.1 Application Structure
Chương 3 . Môi trường lập trình và vấn đề chính khi xây dựng ứng dụng từ điển trên Series 60
24
Bốn application framework class chính là
Lớp ứng dụng (Application): Lớp ứng dụng định nghĩa các thuộc tính
của ứng dụng, tạo ra tài liệu mới cho ứng dụng. Trong trường hợp đơn
giản nhất nó chỉ bao gồm định danh của ứng dụng UID. Lớp này có
nhiệm vụ tạo ra một đối tượng startup object. Lớp cơ sở của lớp
Application là CAknApplication.
Lớp tài liệu (Document): Lớp tài liệu đại diện cho mô hình dữ liệu của
ứng dụng. Lớp này được sử dụng để lưu trữ peristent state của ứng dụng.
Nếu là ứng dụng file, các ứng dụng phục vụ chính cho việc tạo các file
tài liệu, lớp tài liệu sẽ đảm nhận việc nạp và lưu trữ các file tài liệu cho
ứng dụng. Với các ứng dụng không phải là ứng dụng file, lớp tài liệu vần
tồn tại với mục đích nạp phần giao diện ứng dụng. Nói cách khác một
ứng dụng phải có một thể nghiệm của lớp tài liệu. Lớp cơ bản của lớp tài
liệu là CAknDocument.
Lớp giao diện ứng dụng (AppUI): Lớp giao diện ứng dụng chịu trách
nhiệm cung cấp sự tương tác giữa người dùng và ứng dụng qua các đối
tượng điều khiển như menu, listbox. Đồng thời tạo ra các cửa sổ view
cho ứng dụng. Lớp cơ sở của lớp AppUI là CAknAppUi hoặc
CAknViewAppUi.
Lớp hiển thị (View): Lớp hiển thị thực chất là một điều khiển, chịu trách
nhiệm hiển thị dữ liệu lên màn hình và cho phép người sử dụng tương
tác với nó. Một lớp View kế thừa từ CCoeControl hoặc CAknDialog
hoặc nếu ứng dụng được thiết kế theo mô hình Application/View
Architecture thì lớp mà nó phải kế thừa là CAknView.
3.2.2 Các loại ứng dụng trên điện thoại Series 60
Ứng dụng dialog based: trong đó View
chính là một dialog. Thuận lợi của ứng dụng
loại này là cho phép quản lý sự kiện, trong đó
có focusing. Thường thường thì những ứng
dụng loại này được sử dụng cho những ứng
dụng có giao diện đơn giản hiển thị thông tin.
Hình 3.2 Một ứng dụng dialog base
Chương 3 . Môi trường lập trình và vấn đề chính khi xây dựng ứng dụng từ điển trên Series 60
25
Ứng dụng sử dụng các control: đây là
dạng ứng dụng “truyền thống”, sử dụng phối
hợp các control trong màn hình giao diện. Tất
cả các control của Symbian đều kế thừa từ lớp
trừu tượng: CCoeControl
Hình 3.3 Một ứng dụng controls
Ứng dụng Application / View
architecture: thuận lợi của thiết kế này là cho
phép ứng dụng truy xuất đến một hay nhiều
khung nhìn biểu diễn các thông tin liên quan với
nhau. Khi sử dụng ứng dụng loại này thì lớp
AppUi phải được kế thừa từ lớp
CAknViewAppUi và các lớp View phải được
kế thừa từ lớp CAknView.
Hình 3.4 Một ứng dụng
Application / View architecture
Ngoài ra, lập trình viên có thể phối hợp các mô hình giao diện trên khi xây
dựng ứng dụng. Ví dụ một dạng thiết kế được sử dụng rộng rãi là ứng dụng
multiviews, trong đó mỗi view chứa các control phối hợp.
3.3 Vấn đề chính khi xây dựng ứng dụng từ điển trên Series 60
Vấn đề chính khi xây dựng ứng dụng từ điển trên Series 60 là vấn dề chọn cấu
trúc dữ liệu, thuật toán xử lý, giao diện ứng dụng thích hợp với thiết bị, hệ điều
hành. Tiêu chuẩn chọn phải đảm bảo ứng dụng đáp ứng được những yêu cầu cơ bản
đối với một ứng dụng từ điển mà vẫn thỏa mãn những hạn chế phần cứng của điện
thoại di động Serries 60. Ta sẽ lần lượt làm rõ: những hạn chế về phần cứng của
điện thoại di động Series 60 và các yêu cầu cơ bản đối với một ứng dụng từ điển.
Điều này sẽ giúp chúng ta đưa ra các giải pháp phù hợp.
Chương 3 . Môi trường lập trình và vấn đề chính khi xây dựng ứng dụng từ điển trên Series 60
26
3.3.1 Một số hạn chế phần cứng của điện thoại di động Series 60
3.3.1.1 Hạn chế về bộ vi xử lý
Giống như các thiết bị máy tính khác, thiết bị điện thoại di động Series 60 cũng
có một bộ vi xử lý. Các điện thoại di động Series 60 hiện tại sử dụng các bộ vi xử lý
ARM-9. Khác với bộ vi xử lý của máy tính để bàn, bộ vi xử lý ARM-9 được thiết
kế với kiến trúc 32 bit, chạy ở tốc độ thấp hơn so với máy tính để bàn. Các bộ vi xử
lý ARM-9 có tốc độ khác nhau tùy vào mục đích thiết kế và mục đích thương mại.
Tuy nhiên tốc độ trung bình của các bộ vi xử lý ARM-9 hiện nay là lớn hơn 100
MHz.
3.3.1.2 Hạn chế về bộ nhớ và khả năng lưu trữ
Các thiết bị di động Series 60 không có đĩa cứng. Các thiết bị này lưu trữ những
chương trình thông dụng mà nhà sản xuất cung cấp (như sổ địa chỉ, lịch, hệ điều
hành,…) trong chíp nhớ ROM, các chương trình này sẽ không mất đi khi ta tắt máy.
Bộ nhớ ROM rất giới hạn thường là lớn hơn 8 MB. Còn bộ nhớ RAM của máy
được sử dụng bởi các ứng dụng đang thực thi và nhân của hệ thống. Một phần RAM
được gán là ổ đĩa C dùng để chứa các chương trình, các tập tin tài liệu ứng dụng, …
Dung lượng RAM rất hạn chế thường là lớn hơn 8 MB và ổ C thường chiếm 50%
dung lượng RAM. Một dạng lưu trữ khác nữa trên điện thoại di động là dùng thẻ
nhớ để lưu trữ dữ liệu tuy nhiên dung lượng thẻ nhớ này cũng rất hạn chế.
3.3.1.3 Hạn chế về kích thước màn hình
Các màn hình điện thoại di động của Series 60 được thiết kế với độ phân giải
176*208 pixel, từ 12 đến 18 bit màu khác nhau tùy mục đích thương mại. Với kích
thước như vậy rõ ràng là rất hạn chế so với một ứng dụng bất kỳ. Ta có thể khắc
phục bằng cách sử dụng tối đa các popupmenu và các phím tắt theo chuẩn của điện
thoại di động.
3.3.2 Các yêu cầu cơ bản của một ứng dụng từ điển
Một ứng dụng từ điển trước hết phải đáp ứng được những yêu cầu về dữ liệu và
yêu cầu về xử lý. Thứ nhất là dữ liệu lớn dể có thể lưu trữ được nhiều từ loại của
Chương 3 . Môi trường lập trình và vấn đề chính khi xây dựng ứng dụng từ điển trên Series 60
27
các từ điển khác nhau. Kế đến là xử lý (bao gồm tra cứu và hiển thị kết quả) phải
nhanh cho dù nguồn dữ liệu có kích thước lớn vì thao tác hết sức thường xuyên trên
ứng dụng từ điển là tra cứu. Ngoài ra yêu cầu dễ sử dụng cũng là một yêu cầu quan
trọng.
Thế nhưng với hạn chế về khả năng lưu trữ của điện thoại di động sẽ kéo theo
hạn chế kích thước dữ liệu và với hạn chế về tốc độ xử lý của địên thoại di động sẽ
kéo theo hạn chế về tốc độ xử lý của ứng dụng.
3.3.3 Kết luận
Như vậy qua việc trình bày những hạn chế của điện thoại di động Series 60 và
các yêu cầu cơ bản của một ứng dụng từ điển, ta thấy vấn đề có các mâu thuẫn như
sau:
Mâu thuẫn giữa khả năng lưu trữ của điện thoại di động và yêu cầu về dữ
liệu của từ điển.
Mâu thuẫn giữa tốc độ xử lý của điện thoại di động và tốc độ xử lý của
ứng dụng.
Chương 5 sẽ trình bày các giải pháp khả thi để giải quyết các mâu thuẫn trên.
Chương 4 . Kĩ thuật lập trình C++ trên Symbian
28
Chương 4 Kĩ thuật lập trình C++ trên Symbian
Do các đặc trưng, hạn chế của điện thoại di động Việc lập trình ứng dụng bằng
ngôn ngữ C++ cho điện thoại thông minh Symbian Series 60 có các điểm khác biệt
so với lập trình ứng dụng cho máy tính. Chương này trình bày những kĩ thuật lập
trình Symbian C++ căn bản mà bất cứ một lâp trình viên nào cũng phải sử dụng.
Nói đến lập trình C++ trên Symbian, vấn đề đầu tiên cần đề cập là các qui ước
đặt tên cho lớp, biến, hàm… cũng như các kiểu dữ liệu cơ bản khi phát triển ứng
dụng. Tuy nhiên nội dung này đã được nhiều bài viết, luận văn khóa trước trình bày.
Vì vậy chúng em không trình bày lại phần này trong nội dung khóa luận mà đưa
vào phụ lục để phục vụ như cầu tham khảo.
4.1 Quản lý lỗi
4.1.1 Lỗi lập trình
Lỗi lập trình là lỗi phát sinh trong quá trình phát triển ứng dụng do truyền sai
tham số, sai đường dẫn… Loại lỗi này thường gặp trong quá trình lập trình và có
thể được lập trình viên khắc phục hoặc tránh bằng mã nguồn.
Phần lớn các hàm API mà Symbian cung cấp đều trả về kết quả thực thi của
hàm đó dưới dạng một mã lỗi hệ thống (System wide error codes). Dựa vào các mã
này, lập trình viên có thể biết hàm được thực hiện thành công hay không và nguyên
nhân gây lỗi. Cụ thế các mã lỗi thông dụng: KErrNone (không có lỗi, hàm thưc
hiện thành công), KErrCancel (giá trị trả về khi hàm bị hủy khi đang thực hiện),
KErrNotSupported (nền hệ thống không hỗ trợ hàm được gọi), KErrBadName
(tên tập tin không đúng cú pháp…).
Ngoài ra, hệ điều hành Symbian còn cung cấp một cơ chế dừng tiến trình ứng
dụng ngay khi xảy ra lỗi và trả về các giá trị cần thiết để tìm và sửa lỗi gọi là panic.
Khi một panic xảy ra, có hai thành phần xác định nguyên nhân là loại lỗi
(catagories) và mã lỗi của loại đó (reason codes). Ví dụ liên quan đến việc sử dụng
font chữ và ảnh bitmap, có loại lỗi FBSERV (font & bitmap server) với 15 mã lỗi
Chương 4 . Kĩ thuật lập trình C++ trên Symbian
29
khác nhau như 1: không kết nối được với dịch vụ quản lý font, 6: thông tin sử dụng
font sai. Trong quá trình thực thi ứng dụng trên máy ảo cũng như máy thực, khi xảy
ra panic sẽ có một thông báo App Close! cung cấp thông tin về các thành phần trên
trước khi đóng ứng dụng.
Ngoài ra, lập trình viên có thể qui định thêm các panic cho ứng dụng bằng cách
sử dụng tiện ích User::Panic(aCategory, aReason)để ngừng chương trình
và thông báo lỗi.
4.1.2 Lỗi thiếu tài nguyên
Lỗi thiếu tài nguyên là lỗi phát sinh trong quá trình thực thi ứng dụng khi ứng
dụng đòi hỏi hệ thống cung cấp một tài nguyên nào đó mà hệ thống không đáp ứng
được. Một ứng dụng khi thực thi lần đầu hoạt động tốt, nhưng lần thứ hai có thể gặp
lỗi thiếu tài nguyên. Loại lỗi này thường chỉ gặp khi thực thi ứng dụng trên thiết bị
thực, vì máy ảo chia sẻ tài nguyên với máy tính nên rất ít khi thiếu.
Trong môi trường điện thoại thông minh Symbian Series 60, các nguồn tài
nguyên như bộ nhớ, không gian lưu trữ… rất hạn chế. Trong khi các ứng dụng được
viết cho điện thoại di động phải đảm bảo chạy trong thời gian dài mà không khởi
động hay nạp lại bộ nhớ.
Vì vậy vấn đề quản lý tài nguyên khi lập trình, nhất là quản lý, thu hồi bộ nhớ
khi lỗi xảy ra được Symbian cung cấp hỗ trợ rất kĩ, rất tốt; đây chính là một trong
những điểm làm nên thành công của hệ điều hành Symbian.
Cơ chế quản lý lỗi trong Symbian được chia làm nhiều cấp khác nhau như sau:
4.1.2.1 Bẫy lỗi, ngừng 1 hàm nếu xảy ra lỗi bộ nhớ
Cơ chế bắt lỗi cơ bản mà Symbian hỗ trợ gồm:
Hàm User::Leave() có tác dụng ngừng hàm đang thực hiện và trả về mã
lỗi.
Macro TRAP và biến thể của nó TRAPD, cho phép đoạn mã chương
trình hoạt động dưới dạng bẫy lỗi
Cơ chế này hoạt động như thao tác bẫy lỗi khá quen thuộc try/catch và thrown
Chương 4 . Kĩ thuật lập trình C++ trên Symbian
30
Tất cả các hàm có thể khả năng phát sinh lỗi tài nguyên trong ứng dụng (như
cấp phát vùng nhớ cho một đối tượng nhưng đã hết bộ nhớ, truyền dữ liệu trong khi
dịch vụ chưa sẵn sàng…) gọi là “Leave function”, và có ký tự L cuối tên hàm (hàm
L). Lưu ý một hàm có thể ngừng (leave) 1 cách trực tiếp do đoạn mã phát sinh lỗi
(leave directly) hoặc do 1 hàm này gọi 1 hàm L khác và hàm L được gọi này có thể
gây ra lỗi (leave indirectly).
Ta có thể sử dụng tiện ích User::Leave() để ngừng ngay hàm đang thực
hiện và trả về mã lỗi tương ứng (một dạng biệt lệ (exception) trong Symbian). Ví dụ
dưới đây cho thấy hàm sẽ ngừng và trả về mã lỗi thiếu bộ nhớ nếu việc cấp phát
thông qua toán tử new không thành công:
void doExampleL()
{
CExample* myExample = new CExample;
if (!myExample) User::Leave(KErrNoMemory);
// leave used in place of return to indicate an error
// if leave, below code isn’t executed
// do something
myExample->iInt = 5;
testConsole.Printf(_LIT("Value of iInt is %d.\n"), myExample->iInt);
// delete
delete myExample;
}
Tất cả những hàm leave, gồm cả những hàm gọi hàm leave khác đều hoạt động
dưới cơ chế bẫy lỗi. Nếu hàm User::Leave() được gọi thì dòng điều khiển
chương trình được trả về cho macro TRAP gần nhất. Một biến được dùng đề nhận
giá trị lỗi trả về của User::Leave() và nếu không có lỗi gì xảy ra thì biến này sẽ
có giá trị KErrNone. (Lưu ý biến trả về của macro TRAP không phải là giá trị hàm
trả về).
Chương 4 . Kĩ thuật lập trình C++ trên Symbian
31
Xét ví dụ cụ thể sau:
TInt E32Main()
{
TInt r; // The leave variable
// Perform example function. If it leaves,
// the leave code is put in r
TRAP(r,doExampleL());
if (r) // Test the leave variable
testConsole.Printf(_LIT("Failed: leave code=%d"), r);
}
Macro TRAP có 1 biến thể khác cho phép rút gọn code chương trình đó là
TRAPD, khi sử dụng TRAPD ta không cần khai báo biến lỗi một cách tường minh:
TRAPD(leaveCode,value=GetSomethingL()); // get a value
Ngoài ra Symbian còn cung cấp 1 dạng toán tử new mới, sử dụng cơ chế leave
trong 1 dòng lệnh, đó là: new (ELeave)… Khi sử dụng new (ELeave)… nghĩa là nếu
việc cấp phát vùng nhớ cho 1 đối tượng không thành công thì hàm thực thi toán tử
new này sẽ ngừng ngay lập tức:
void doExampleL()
{
// attempt to allocate, leave if could not
CExample* myExample = new (ELeave) CExample;
// new (ELeave) replaces new followed by check
// do something
myExample->iInt = 5;
// delete
delete myExample;
}
Trong ví dụ trên, nếu việc cấp phát myExample không thành công hàm
doExampleL() sẽ ngừng ngay và trả về giá trị lỗi cho macro TRAP hay TRAPD gọi
hàm này (nếu có).
Chương 4 . Kĩ thuật lập trình C++ trên Symbian
32
4.1.2.2 Cleanup stack
Khi một hàm leave, dòng diều khiển được chuyển cho macro TRAP và dòng
lệnh dưới TRAP được thực thi. Điều này nghĩa là những đối tượng được tạo ra hoặc
truyền vào trước khi hàm ngừng sẽ trở nên “mồ côi’, việc hủy chúng không được
thực hiện và tài nguyên (bộ nhớ) mà chúng chiếm giữ sẽ không được giải phóng.
Hệ điều hành Symbian cung cấp một cơ chế quản lý những đối tượng này gọi là
Cleanup stack. Như đã trình bày ở phần qui ước đặt tên, chỉ có các lớp bắt đầu bằng
ký tự C là cần và bắt buộc phải hủy khi sử dụng xong.
Như vậy nguy cơ đối tượng mồ côi xuất phát từ lớp C, xét ví dụ cụ thể sau:
void doExampleL()
{
// An T-type object: can be declared on the stack
TBuf buf;
// A C-type object: must be allocated on the heap
// Allocate and leave if can not
CExample* myExample = new (ELeave) CExample;
// do something that cannot leave: no protection needed
myExample->iInt = 5;
// PROBLEM: do something that can leave !!!
myExample->DoSomethingL();
// delete
delete myExample;
}
Nếu lúc này hàm myExample->DoSomethingL(); bị lỗi và ngừng lại thì
dòng lệnh delete myExample sẽ không được thực thi, nghĩa là vùng nhớ cấp cho
nó không được giải phóng. Ta giải quyết vần đề này bằng kĩ thuật Cleanup stack mà
Symbian hỗ trợ như sau: dùng hàm CleanupStack::PushL()để đưa con trỏ đối
tượng vào Cleanup stack trước khi gọi bất kì hàm leave nào; sau đó nếu những hàm
leave đã hoàn thành mà không có lỗi xảy ra, ta gọi hàm CleanupStack::Pop()
để lấy con trỏ đối tượng ra khỏi Cleanup stack.
Chương 4 . Kĩ thuật lập trình C++ trên Symbian
33
Minh họa lại ví dụ trên:
void doExampleL()
{
// allocate with checking
CExample* myExample = new (ELeave) CExample;
// do something that cannot leave
myExample->iInt = 5; // cannot leave: no protection needed
// do something that can leave: use cleanup stack
CleanupStack::PushL(myExample); // pointer on cleanup stack
myExample->DoSomethingL(); // something that might leave
CleanupStack::Pop(); // it didn't leave: pop the pointer
// delete
delete myExample;
}
Lưu ý: hàm CleanupStack::PushL() có thể leave, tuy nhiên nếu hàm này leave
thì đối tượng đưa vào stack bởi hàm này cũng sẽ bị hủy.
Cần lưu ý hàm CleanupStack::Pop() tự nó không có ý nghĩa gì, nó chỉ đẩy
1 đối tượng ra khỏi Cleanupstack và ta có thể hủy hoặc sử dụng đối tượng nhận
được từ stack này sau khi hàm bị ngừng (leave) đảm bảo không có đối tượng mồ côi
Trong nhiều trường hợp ta có thể gọi hàm
CleanupStack::PopAndDestroy() để hủy đối tượng sau khi hoàn thành hàm
leave:
void doExampleL()
{
. . .
// pop from cleanup stack, and destroy, in one operation
CleanupStack::PopAndDestroy(); //don’t need call delete
}
Để rút gọn mã nguồn chương trình, việc cấp phát và đưa đối tượng vào Cleanp
stack thường được thực hiện trong 1 hàm kết thúc bằng ký tự C. Ví dụ hàm TAny*
User::AllocLC() gồm việc gọi hàm User::Alloc() để cấp phát vùng nhớ sau
đó leave nếu cấp phát không thành công, ngược lại tự động đưa đối tượng vào
Cleanup stack. Nếu gọi hàm ___C để cấp phát đối tượng vẫn phải lấy đối tượng ra
khỏi Cleanup stack sau khi sử dụng xong.
Chương 4 . Kĩ thuật lập trình C++ trên Symbian
34
4.1.2.3 Hàm dựng 2 pha
Trong khi khởi tạo các đối tượng phức tạp (đối tượng lớp C chứa một hoặc
nhiều đối tượng lớp C khác cần được khởi tạo) có thể dẫn tới tình trạng leave mà
việc quản lý bằng Cleanup stack một cách tường minh gặp khó khăn do ta không
biết đối tượng nào đã được khởi tạo và đối tượng nào chưa. Lúc này Symbian tiếp
tục cung cấp cơ chế quản lý lỗi khi khởi tạo đối tượng gọi là hàm dựng 2 pha (2
phase constructor) hoạt động với cơ chế như sau:
Cấp phát vùng nhớ cho đối tượng (và leave nếu không đủ bộ nhớ)
Khởi tạo các thành phần an toàn (không thể leave)
Đưa con trỏ đối tượng vào Cleanup stack
Dùng hàm dựng thứ 2 (2nd phase constructor) để khởi tạo các thành phần
có thể leave.
Lưu ý:
Toàn bộ quá trình trên được thực hiện thông qua 2 hàm tĩnh: NewL(), and
NewLC()(tự đưa đối tượng được cấp phát vào Cleanup stack)
Hàm dựng thứ 2 có tên là ConstructL().
Ví dụ ta có lớp CSimple là một lớp đơn giản không chứa các đối tượng khác:
class CSimple : public CBase
{
public:
CSimple(TInt); //hàm dựng
void Display();
private:
TInt iVal;
};
Lớp CCompound chứa đối tượng CSimple như là biến thành viên
class CCompound : public CBase
{
public:
void Display();
~CCompound();
static CCompound* NewL(TInt aVal);
static CCompound* NewLC(TInt aVal);
Chương 4 . Kĩ thuật lập trình C++ trên Symbian
35
protected:
CCompound(TInt aVal);
void ConstructL();
private:
TInt iVal;
CSimple* iChild;
};
Minh họa nguy cơ từ việc khởi tạo đối tượng CCompound theo cách thông
thường:
CCompound::CCompound(TInt aVal)
{
iVal=aVal;
iChild = new (ELeave) CSimple(aVal);
}
Lúc này, khi khởi tạo 1 đối tượng CCompound , nếu vì lý do nào đó mà việc
cấp phát đối tương iChild (CSimple) không thành công. Hàm khởi tạo
CCompound(TInt aVal) bị ngừng (leave). Lúc này đối tượng CCompound đã
được cấp phát, tuy nhiên không thể truy cập đến vùng nhớ này vì hàm dựng không
thành công. Như vậy đã có một đối tượng mồ côi được tạo ra trong vùng nhớ mà ta
không thể quản lý được.
Để khắc phục CCompound sử dụng hàm dựng 2 pha, có thể tạo ra một đối
tượng CCompound một cách an toàn thông qua hai hàm tĩnh NewL() và NewLC()
như sau:
// NewLC with two stage construction
CCompound* CCompound::NewLC(TInt aVal)
{
// get new, leave if can't
CCompound* self=new (ELeave) CCompound(aVal);
// push onto cleanup stack in case self->ConstructL leaves
CleanupStack::PushL(self);
// complete construction with second phase constructor
self->ConstructL();
return self;
}
Chương 4 . Kĩ thuật lập trình C++ trên Symbian
36
void CCompound::ConstructL()
{
// function may leave, as creating a new CSimple object
// may leave.
iChild = new (ELeave) CSimple (iVal);
}
CCompound* CCompound::NewL(TInt aVal)
{
CCompound* self=NewLC(aVal);
CleanupStack::Pop();
return self;
}
Ta sử dụng hàm NewL(), NewLC() để khởi tạo đối tượng CCompound an toàn
như sau:
void doExampleL()
{
// allocate and push to cleanup stack - leave if failed
CCompound* myExample = CExample::NewLC(5);
// do something that might leave
myExample->DoSomethingL();
// pop from cleanup stack and destroy
CleanupStack::PopAndDestroy();
}
Lúc này nếu hàm doExampleL() không thành công do không cấp phát được
đối tượng CSimple ( biết được bằng bẫy lỗi TRAPD(errcode, doExampleL())
với errcode != KErrNone), ta chỉ cần gọi CleanupStack::PopAndDestroy()
để “làm sạch” vùng nhớ.
Ngoài ra, đối với các lớp T, R Cleanup stack cũng hỗ trợ thao tác push và pop
thông qua các hàm overload:
static void PushL(TAny* aPtr);
static void PushL(TCleanupItem anItem);
Chương 4 . Kĩ thuật lập trình C++ trên Symbian
37
4.2 Chuỗi
4.2.1 Khái niệm
Hệ điều hành Symbian biểu diễn chuỗi và dữ liệu nhị phân bằng đặc ngữ
(idiom) “descriptor”. Descriptor cung cấp một cơ chế an toàn, chặt chẽ để truy cập
và quản lý chuỗi cũng như vùng nhớ chứa dữ liệu nhị phân.
Một đối tượng descriptor chứa kích thước và con trỏ tới vùng dữ liệu(chuỗi
hoặc dữ liệu nhị phân). Tất cả thao tác trên dữ liệu thực hiện thông qua đối tượng
descriptor này.
Descriptor không phân biệt kiểu dữ liệu mà nó đang quản lý, nghĩa là chuỗi và
dữ liệu nhị phân được hiểu như nhau. Vì vậy vài phương thức dùng để xử lý chuỗi
có thể hoạt động tốt trên dữ liệu nhị phân.
Descriptor có các dạng:
Dạng 16 bit dùng cho chuỗi Unicode và các dữ liệu 2 bytes. Chiều
dài (length) của 16 bit descriptor là số ký tự trong chuỗi Unicode
(hoặc là số dữ liệu 2 bytes) Æ kích thước của 16 bit descriptor =
length * 2.
Dạng 8 bit dùng cho chuỗi non-Unicode và dữ liệu 1 byte (dữ liệu
nhị phân). Chiều dài của 8 bit descriptor cũng là kích thước và chính
là số byte được cấp trong vùng nhớ mà descriptor trỏ tới.
Lưu ý: chiều dài 1 descriptor không thể vượt quá 228.
Descriptor còn hỗ trợ build independent type (có thể gọi là descriptor dạng độc
lập). Khi sử dụng build independent type để biểu diễn chuỗi, tùy macro
_UNICODE được xác định hay không mà trình biên dịch sẽ chọn kiểu descriptor 8
bit hay 16 bit cho phù hợp.
Có thể hiểu rõ vấn đề thông qua đoạn code sau:
#if defined(_UNICODE)
typedef TPtr16 TPtr;
#else
typedef TPtr8 TPtr;
#endif
Trong đó, TPtr là một lớp descriptor và macro _UNICODE sẽ được định nghĩa mặc
định cho ứng dụng.
Chương 4 . Kĩ thuật lập trình C++ trên Symbian
38
4.2.2 Phân loại
Symbian cung cấp nhiều loại lớp descriptor khác nhau. Và mọi lớp descriptor
đều có các dạng:
16 bit (ví dụ TDes16, TBuf16): dùng cho 16 bit descriptor
8 bit (ví dụ TDes8, TBuf8): dùng cho 8 bit descriptor
Build independent type: chính là kiểu descriptor trừu tượng sẽ được
xác định là 16 bit hay 8 bit khi biên dịch(TDes, TBufC…)
Sau đây chỉ trình bày với loại descriptor build independent type.
Tất cả lớp descriptor kế thừa từ hai lớp trừu tượng:
TDesC(the abstract non-modifiable descriptor class): sử dụng để truy
xuất chuỗi nhưng không thể chỉnh sửa trực tiếp chuỗi đã khởi tạo.
TDes(the abstract modifiable descriptor class): truy xuất và quản lý
chuỗi.
Hai lớp trừu tượng trên được cụ thể hóa thành ba loại lớp descriptor, sử dụng tùy vào
mục đích khác nhau.
4.2.2.1 Hằng chuỗi
Khi lập trình trên Symbian, nếu muốn sử dụng một giá trị chuỗi biết trước, ta
không thể khai báo trực tiếp theo kiểu: String s= “Some text value” mà
phải sử dụng hằng chuỗi (literal descriptors) khai báo thông qua các macro:
_LIT16: tạo hằng chuỗi 16 bit
_LIT8: tạo hằng chuỗi 8 bit
_LIT: tạo hằng chuỗi kiểu độc lập (build independent type)
_L: sử dụng trực tiếp hằng chuỗi
Hằng chuỗi được khai báo và sử dụng đơn giản như sau:
_LIT(KFormat1,"Length is %d");
TBuf x;
x.Format(KFormat1,8);//x= “Length is 8”
Có thể sử dụng macro _L để gọi trực tiếp hằng chuỗi
x.Format(_L("Length is %d");,8);//x= “Length is 8”
Chương 4 . Kĩ thuật lập trình C++ trên Symbian
39
4.2.2.2 Buffer descriptor
Dữ liệu là một phần của đối tượng descriptor và đối tượng descriptor được cấp
phát trên stack chương trình.
Một đối tượng buffer descriptor là 1 thể hiện của lớp khuôn mẫu trong đó tham
số mẫu truyền vào là một số nguyên xác định kích thước vùng dữ liệu được cấp
phát.
Hình 4.1 Chuỗi không thể thay đổi
Hình 4.2 Chuỗi có thể thay dổi
Khác với đối tượng TBufC, sau khi khởi động đối tượng TBuf có thể thay đổi
giá trị (thêm, chèn, xóa các ký tự, đổi thành chuỗi thường, hoa…)
Lưu ý: nếu truy xuất vượt quá kích thước được khai báo sẽ phát sinh lỗi panic:
_LIT(KText,"Hello World!");
TBufC buf1(KText);
buf1.Delete(99,1);//panic
4.2.2.3 Heap descriptor
Dữ liệu là một phần của đối tượng descriptor và được cấp phát trên vùng heap.
Đây là kiểu descriptor duy nhất cho phép cấp phát động nên thường được sử dụng
để lưu các giá trị phát sinh trong quá trình thực thi ứng dụng.
Chương 4 . Kĩ thuật lập trình C++ trên Symbian
40
Hình 4.3Chuỗi cấp phát trên heap
Vì được cấp phát trên heap nên ta có thể cấp phát lại cũng như dùng toán tử gán
để thay đổi nội dung một heap descriptor:
4.2.2.4 Pointer descriptor
Đối tượng descriptor và dữ liệu được lưu trên những vùng khác nhau.
Hình 4.4 Con trỏ chuỗi không thể thay đổi
Hình 4.5 Con trỏ chuỗi có thể thay đổi
Chương 4 . Kĩ thuật lập trình C++ trên Symbian
41
Sau khi khởi tạo, một đối tượng pointer descriptor chính là 1 con trỏ đến vùng
dữ liệu descriptor khác. Ta có thể thay đổi giá trị một descriptor non-modifiable
thông qua con trỏ này. Điều này đặc biệt hữu ích để thay đổi giá trị của heap
descriptor (HBufC không thể thay đổi trực tiếp) sau khi được cấp phá
HBufC* buf;
buf = HBufC::NewL(variable_len);
TPtr ptr = buf->Des();
ptr.Delete((ptr.Length()-9),9);//Hello World
ptr.Append(_LIT(" & Hi"));//Hello World & Hi
Lưu ý: đối tượng pointer descriptor là một con trỏ tới vùng dữ liệu. Khi khởi
tạo pointer descriptor từ một đối tượng descriptor khác. Nếu vì lý do nào đó đối
tượng này bị hủy hoặc cấp phát lại (trường hợp heap descriptor) thì pointer
descriptor sẽ không trỏ đến giá trị đúng nữa.
Ta có sơ đồ quan hệ giữa các lớp descriptor mà Symbian cung cấp như sau:
Hình 4.6 Cây kế thừa các lớp descriptor
Chương 4 . Kĩ thuật lập trình C++ trên Symbian
42
4.3 Mảng
4.3.1 Mảng tĩnh
Mảng tĩnh được cung cấp như 1 phương pháp sử dụng thay thế cho mảng chuẩn
của C++. Mảng tĩnh được sử dụng thông qua lớp khuôn mẫu (templated class)
TFixedArray.
Việc sử dụng mảng tĩnh rất đơn giản (tương tự cách dùng mảng “truyền thống”
mà ta đã quen thuộc trong C++)
int aMang[100]; Æ TFixedArray aMang;
CCoeControl* iControls[ENumControls]; Æ
TFixedArray iControls;
Lưu ý:
Nếu truy xuất phần tử vượt quá kích thước mảng chắc chắn sẽ phát sinh lỗi.
Lớp TFixedArray chỉ là lớp bọc bên ngoài cấu trúc mảng của C++ (wrapper
class) đồng thời cung cấp một số hàm giúp việc thao tác trên mảng trong Symbian
được dễ dàng hơn.
4.3.2 Mảng động
4.3.2.1 Khái niệm
4.3.2.1.1 Giới thiệu
Symbian cung cấp một số lớp hỗ trợ việc xây dựng các mảng đối tượng động
(có thể mở rộng) trong đó các phần tử của mảng được cấp phát vùng nhớ trên heap.
Phần tử của mảng động có thể là một đối tượng bất kì. Các lớp mảng này đều là
những lớp khuôn mẫu, cho phép xác định kiểu của phần tử trong mảng. Mảng động
có thể chứa các đối tượng có kích thước bằng hoặc khác nhau tùy theo lớp mảng
được sử dụng.
Tất cả các mảng đều có một vùng nhớ (buffer) được cấp phát trên heap. Tuy
nhiên việc cấp phát và sử dụng vùng nhớ này phụ thuộc vào loại mảng:
Đối với mảng các phần tử có kích thước bằng nhau, các phần tử được lưu
trong chính vùng nhớ của mảng
Chương 4 . Kĩ thuật lập trình C++ trên Symbian
43
Đối với mảng các phần tử có kích thước khác nhau: mỗi phần tử được lưu
ở một vùng nhớ trên heap và vùng nhớ của mảng (array buffer) chứa con
trỏ đến từng phần tử.
Đối với mảng packed (packed array): các phần tử được lưu trong vùng
nhớ của mảng. (Mảng packed là mảng các phần tử có kích thước khác
nhau, và kích thước của mỗi phần tử được lưu trước phần tử đó trong
vùng nhớ)
Về mặt logic, vùng nhớ của mảng là liên tục. Tuy nhiên ở mức vật lý, vùng nhớ
của mảng có thể được cấp phát liên tục (flat buffer) hay phân đoạn (segmented
buffer).
Lựa chọn dùng mảng cấp phát liên tục hay phân đoạn phụ thuộc vào ứng dụng
cần xây dựng cũng như nhiều yếu tố khác. Ở đây chỉ trình bày tất cả những dạng
mảng động mà Symbian hỗ trợ.
4.3.2.1.2 Sức chứa và độ phân hạt của mảng
Sức chứa (capacity) của mảng là số phần tử mà mảng có thể lưu được với vùng
nhớ được cấp phát hiện tại.
Đối với mảng dùng vùng nhớ liên tục (flat array buffer), khi thêm một phần tử
vào mảng mà không còn vùng nhớ trống; lúc này vùng nhớ của mảng được mở rộng
bằng cách cấp phát lại, số vùng nhớ tăng thêm này chính là độ phân hạt
(granularity) của mảng.
Ví dụ với với mảng 3 phần tử kích thước cố định được khởi tạo với độ phân hạt
là 4; vùng nhớ cấp phát ban đầu cho mảng chứa được 4 phần tử; khi thêm phần tử
thứ 5 vào mảng thì vùng nhớ được cấp phát lại với sức chứa 8 phần tử
Hình 4.7 Sức chứa và độ phân hạt của mảng
Chương 4 . Kĩ thuật lập trình C++ trên Symbian
44
Đối với mảng dùng vùng nhớ phân đoạn, độ phân hạt là sức chứa của một đoạn
vùng nhớ. Khi mảng mở rộng, bao giờ cũng được cấp thêm một hoặc nhiều đoạn
nữa. Độ phân hạt của mảng được qui định khi xây dựng mảng. Có thể thấy việc lựa
chọn giá trị này ảnh hưởng nhiều đến hiệu năng hoạt động của mảng cũng như của
ứng dụng. Giá trị quá nhỏ làm việc cấp phát bộ nhớ xảy ra thường xuyên, giá trị quá
lớn gây lãng phí bộ nhớ.
4.3.2.2 Phân loại mảng động
4.3.2.2.1 Mảng các phần tử có kích thước bằng nhau, vùng nhớ liên tục
Là đối tượng của lớp CArrayFixFlat, các phần tử có kích thước
bằng nhau và được lưu liên tục trong vùng nhớ. Việc mở rộng được thực hiện bằng
cách cấp phát lại vùng nhớ.
Hình 4.8 Mảng cùng kích thước, liên tục
4.3.2.2.2 Mảng các phần tử có kích thước bằng nhau, vùng nhớ phân đoạn
Là đối tượng của lớp CArrayFixSeg
Hình 4.9 Mảng cùng kích thước, phân đoạn
Chương 4 . Kĩ thuật lập trình C++ trên Symbian
45
4.3.2.2.3 Mảng các phần tử có kích thước khác nhau, vùng nhớ liên tục
Là đối tượng của lớp CArrayVarFlat
Hình 4.10 Mảng khác kích thước, liên tục
4.3.2.2.4 Mảng các phần tử có kích thước khác nhau, vùng nhớ phân đoạn
Là đối tượng của lớp CArrayVarFlat
Hình 4.11 Mảng khác kích thước, phân đoạn
4.3.2.2.5 Mảng packed, vùng nhớ liên tục (array of packed elements, flat buffer)
Là đối tượng của lớp CArrayPakFlat
Hình 4.12 Mảng packed, liên tục
Chương 4 . Kĩ thuật lập trình C++ trên Symbian
46
Ngoài ra còn 2 lớp CArrayPtrFlat và CArrayPtrSeg dùng
chứa mảng con trỏ đến các đối tượng. Tuy nhiên người ta ít dùng 2 lớp này mà thay
vào đó là một lớp đơn giản, hiệu quả hơn: RPointerArray
4.3.2.3 Các lớp mảng động đặc biệt
Các lớp CArray… được thiết kế hỗ trợ dạng mảng động cho tất cả các loại đối
tượng. Các lớp này kế thừa từ những lớp trừu tượng khác, cũng như thực thi một số
lớp interface. Vì vậy dù rất mạnh mẽ, nhưng nếu ta sử dụng lớp CArray… để quản
lý mảng các số nguyên TInt thì có thể có sự lãng phí không cần thiết.
Vì vậy Symbian còn hỗ trợ một khuôn mẫu đặc biệt giúp việc sử dụng mảng
động cho các đối tượng đơn giản được nhanh và hiệu quả hơn. Cụ thể đối với mảng
các số nguyên và mảng con trỏ (là hai loại mảng vốn được sử dụng rất nhiều trong
C++), ta sẽ dùng lớp RArray, RArray và RPointerArray để việc
quản lý, sử dụng mảng động đơn giản và hiệu quả hơn nhiều lần.
Ngoài ra ta còn có thể dùng lớp RArray để tạo mảng động các đối
tượng có kích thước bằng nhau với điều kiện:
Kích thước mỗi phần tử không vượt quá 640 bytes
Không thường xuyên thêm phần tử mới vào mảng (gây cấp phát lại vùng
nhớ).
Như đã trình bày ở trên, tất cả các lớp mảng động đều là lớp khuôn mẫu và giá
trị mẫu truyền vào khi khởi tạo chính là kiểu phần tử của mảng. Tuy có phân biệt về
cách thức lưu trữ nhưng khi lập trình (mặt logic) các mảng động đều sử dụng như
nhau. Cách thức sử dụng mảng động tương tự như các ngôn ngữ lập trình khác như
cấp phát, thêm, xóa các phần tử, cấp phát lại cũng như giải phóng vùng nhớ. Lưu ý:
nếu các phần tử mảng động là đối tượng lớp C thì phải hủy từng phần tử trước khi
giái phóng vùng nhớ cấp phát cho mảng.
Chương 4 . Kĩ thuật lập trình C++ trên Symbian
47
4.4 Mảng chuỗi
4.4.1 Khái niệm
Lập trình viên có thể dùng mảng động để lưu một mảng chuỗi, tuy nhiên
Symbian cung cấp những lớp dùng riêng để lưu trữ mảng chuỗi, trong đó ta có thể
dễ dàng thêm, cập nhật xóa và truy xuất các phần tử chuỗi trong mảng.
Mảng chuỗi cũng có các dạng: 16 bit, 8 bit và build independent type. Bao gồm
mảng chuỗi không thể chỉnh sửa (non-modifiable) và có thể chỉnh sửa (modifiable).
4.4.1.1 Mảng chuỗi không thể thay đổi
Dạng mảng này gồm các TPtrC (non-modifiable pointer descriptor). Mỗi
pointer descriptor này trỏ đến dữ liệu (chuỗi) của từng phần tử trong mảng.
Hình 4.13 Mảng chuỗi không thể thay đổi
Khi dùng mảng non-modifiable pointer descriptor array, dữ liệu được trỏ đến
nhờ các pointer descriptor TPtrC. Như vậy mảng chỉ cần số vùng nhớ rất nhỏ đủ
chứa các thành phần TPtrC (không có vùng nhớ cấp cho phần dữ liệu). Mặt khác,
khi sử dụng dạng mảng này, phải đảm bảo dữ liệu các thành phần (chuỗi) trong
mảng không được hủy hoặc thay đổi ngoài ý muốn.
Bao gồm các lớp: CPtrC16Array, CPtrC8Array và CPtrCArray
4.4.1.2 Modifiable descriptor array
Thành phần của mảng là con trỏ đến heap descriptor (HBuC*). Khi đưa một
descriptor vào mảng, một heap descriptor khác được cấp phát lấy dữ liệu từ
descriptor muốn đưa vào mảng; và phần tử mới của mảng chính là con trỏ đến heap
descriptor vừa được cấp.
Chương 4 . Kĩ thuật lập trình C++ trên Symbian
48
Hình 4.14 Mảng con trỏ chuỗi
Khi sử dụng dạng mảng chuỗi này, một heap descriptor được cấp cho mỗi phần
tử đưa vào mảng. Điều này làm tăng tổng số vùng nhớ yêu cầu cho mảng. Mặt khác
chuỗi sau khi đưa vào có thể bị hủy hoặc chỉnh sửa mà không ảnh hưởng đến các
phần tử trong mảng.
Cũng như mảng động bình thường, lập trình viên có thể sử dụng mảng chuỗi
với 2 loại vùng nhớ: vùng nhớ cấp phát liên tục (flat array buffer) và vùng nhớ cấp
phát phân đoạn (segmented array buffer)
Bao gồm các lớp cụ thể: CDesC16ArrayFlat, CDesC16ArrayFlat và
CDesCArrayFlat; CDesC16ArraySeg, CDesC16ArraySeg và CDesCArraySeg.
Chương 5 . Các giải pháp chính cho việc xây dựng từ điển trên điện thoại di động Series 60
49
Chương 5 Các giải pháp chính cho việc xây dựng từ
điển trên điện thoại di động Series 60
Trong chương 3 ta đã đề cập đến hai mâu thuẫn là:
Mâu thuẫn giữa khả năng lưu trữ của điện thoại di động và yêu cầu về dữ
liệu của từ điển.
Mâu thuẫn giữa tốc độ xử lý của điện thoại di động và tốc độ xử lý của
ứng dụng.
Đối với mâu thuẫn thứ nhất ta có thể giải quyết bằng cách: hoặc là gia tăng khả
năng lưu trữ của điện thoại di động bằng cách nâng cấp thẻ nhớ hoặc là tổ chức nén
dữ liệu (đồng thời phải cung cấp một cơ chế để có thể giải nén và truy xuất dữ liệu
nhanh). Tuy nhiên việc nâng cấp thẻ nhớ không nằm trong nội dung xây dựng từ
điển cho điện thoại di động.
Đối với mâu thuẫn thứ hai, bộ vi xử lý của điện thoại di động khó có thể nâng
cấp giống như máy tính cá nhân được do đó ta chỉ có thể tìm cách xây dựng cấu
trúc dữ liệu hỗ trợ tìm kiếm nhanh.
Như vậy ứng dụng không những cần tổ chức cấu trúc dữ liệu lưu trữ thích hợp
mà còn phải giải quyết các mâu thuẫn trên thông qua tổ chức nén dữ liệu và tổ chức
cấu trúc dữ liệu hỗ trợ cho việc tìm kiếm nhanh.
5.1 Tổ chức cấu trúc dữ liệu lưu trữ
Mỗi một mục từ trong từ điển cần lưu trữ các trường dữ liệu sau: từ gốc, từ loại,
ý nghĩa của từ. Bảng sau mô tả vắn tắt về các trường dữ liệu này.
STT Trường dữ liệu Ghi chú
1. Từ gốc Có kích thước biến động.
2. Từ loại Mỗi từ có thể thuộc về nhiều từ loại khác nhau:
9 Danh từ
9 Động từ
9 Tính từ
9 Trạng từ
9 Giới từ
9 Các từ loại khác
3. Ý nghĩa (các nghĩa
con của từ)
Có kích thước biến động, bao gồm:
9 Phiên âm quốc tế (nếu có)
9 Các nghĩa khác của từ.
Bảng 5.1 Bảng mô tả các trường dữ liệu
Chương 5 . Các giải pháp chính cho việc xây dựng từ điển trên điện thoại di động Series 60
50
Với các trường dữ liệu như vậy, ta có một số giải pháp tổ chức mục từ như sau:
Tổ chức các mục từ có kích thước bằng nhau.
Tổ chức các mục từ có kích thước biến động.
Ta sẽ đi vào xem xét kỹ hơn những ưu điểm và khuyết điểm của từng giải pháp
và chọn ra một giải pháp thích hợp.
5.1.1 Tổ chức các mục từ có kích thước bằng nhau
Ưu điểm:
Dễ dàng truy xuất ngẫu nhiên đến một mục từ khi biết vị trí của nó.
Khuyết điểm:
Gây lãng phí không gian lưu trữ vì các mục từ có kích thước biến động
nhiều. Nếu chúng ta tổ chức các mục từ cùng một kích thước thì sẽ có rất
nhiều mục từ không dùng hết kích thước đó, điều này dẫn đến bộ nhớ bị
lãng phí. Khuyết điểm này rất nghiêm trọng vì bộ nhớ lưu trữ của điện
thoại di động là rất hạn chế.
Kích thước tập tin dữ liệu khi chỉ có từ gốc của 3 loại từ điển thông dụng: Anh
– Việt (68998 từ), Việt – Anh (91146 từ) và Anh – Anh (121962 từ) được liệt kê
trong bảng sau:
Từ điển Ví dụ về từ có kích thước lớn nhất Kích
thước
Tổng
kích
thước
(KB)
Anh – Việt “ extra-sensory perception” 24 1617
Việt – Anh “không đúng với đặc tính của một ngôn ngữ” 40 3560
Anh – Anh “American Federation of Labor-Congress of
Industrial Organizations”
65 7741
Bảng 5.2 Tổ chức từ điển với cáctừ gốc có kích thước bằng nhau
Trong bảng trên ta phải sử dụng kích thước từ lớn nhất: xét trong điều kiện mỗi
ký tự được biểu diễn bởi 1 byte và kích thước mục từ ở mỗi từ điển khác nhau.
Quy định kích thước đồng nghĩa với việc hạn chế kích thước của mục từ, do đó
có thể không lưu được những mục từ thông dụng có kích thước từ gốc lớn và nghĩa
lớn. Khuyết điểm này cũng không kém phần nghiêm trọng vì làm hạn chế khả năng
lưu trữ của từ điển và cách thức tổ chức có vẻ không tự nhiên.
Chương 5 . Các giải pháp chính cho việc xây dựng từ điển trên điện thoại di động Series 60
51
5.1.2 Tổ chức các mục từ có kích thước biến động
Ưu điểm:
Tránh được sự lãng phí bộ nhớ lưu trữ do đó tối ưu bộ nhớ lưu trữ của
điện thoại di động.
Không hạn chế kích thước của các mục từ, cách thức tổ chức tự nhiên
hơn.
Khuyết điểm:
Do kích thước của các mục từ biến động nên cần phải tốn thêm thông tin
để có thể truy cập đến một mục từ bất kỳ, nói cách khác là chúng ta phải
tổ chức thêm cấu trúc dữ liệu hỗ trợ cho việc tìm kiếm nhanh.
Kích thước tập tin dữ liệu khi chỉ có từ gốc của 3 loại từ điển thông dụng: Anh
– Việt (68998 từ), Việt – Anh (91146 từ) và Anh – Anh (121962 từ) được liệt kê
trong bảng sau:
Từ điển Tổng kích thước (KB) Kích thước từ trung bình (ký tự)
Anh – Việt 610 9
Việt – Anh 1204 13
Anh – Anh 1334 11
Bảng 5.3 Tổ chức từ điển với cáctừ gốc có kích thước không bằng nhau
Trong bảng trên mỗi từ được lưu với kích thước thật và mỗi ký tự được biểu
diễn bởi 1 byte.
Như vậy giải pháp lưu trữ mục từ với kích thước khác nhau đã tiết kiệm được
rất nhiều không gian lưu trữ. (Nhỏ hơn từ 2.5 đến 7 lần).
Rõ ràng việc tổ chức các mục từ có kích thước bằng nhau đã bộc lộ nhiều
khuyết điểm mà một trong những khuyết điểm nghiêm trọng không thể chấp nhận
được đó là gây lãng phí không gian lưu trữ của điện thoại di động. Trong khi đó
việc tổ chức các mục từ có kích thước biến động đã thể hiện ưu điểm vượt trội của
mình là tránh được sự lãng phí không cần thiết đối với không gian lưu trữ . Do đó
dữ liệu của ứng dụng từ điển trong luận văn này sẽ được tổ chức theo cách tổ chức
tối ưu này.
Phần tiếp theo sẽ trình bày cách thức nén dữ liệu để sao cho có được kích thước
dữ liệu tối ưu nhất có thể có.
Chương 5 . Các giải pháp chính cho việc xây dựng từ điển trên điện thoại di động Series 60
52
5.2 Tổ chức nén dữ liệu
Việc tổ chức các mục từ có kích thước biến động vẫn chưa thể thực sự tối ưu
hóa không gian lưu trữ. Kích thước của dữ liệu từ điển vẫn còn lớn so với không
gian lưu trữ của điện thoại di động. Ngoài việc tổ chức các mục từ có kích thước
biến động ta chỉ có thể làm giảm kích thước dữ liệu bằng cách nén dữ liệu để lưu
trữ và khi cần truy xuất thì giải nén dữ liệu. Nhưng việc tổ chức nén và giải nén dữ
liệu khi cần thiết có thể làm giảm tốc độ truy xuất, do đó chúng ta cần phải lựa chọn
phương pháp nén và giải nén sao cho tốc độ truy xuất có thể chấp nhận được. Có
hai chiến lược nén dữ liệu là: nén toàn bộ dữ liệu và nén từng khối dữ liệu. Ta hãy
lần lượt phân tích mặt mạnh, mặt yếu của từng chiến lược nén để chọn ra chiến lược
nén thích hợp cho bài toán xây dựng từ điển trên thiết bị di động.
5.2.1 Nén toàn bộ dữ liệu
Ưu điểm:
Vì dữ liệu được nén toàn bộ nên nếu sử dụng thuật toán nén tốt ta có thể
nén nhỏ tối ưu.
Khuyết điểm:
Khi cần tra cứu một từ dữ liệu phải được giải nén toàn bộ kể cả những
phần không cần thiết. Việc giải nén toàn bộ làm cho ứng dụng chậm và
tốn không gian lưu trữ tạm không cần thiết.
5.2.2 Nén từng khối dữ liệu
Ưu điểm:
Dữ liệu được nén thành từng khối, khi cần truy xuất đển một mục từ nào
ta chỉ cần giải nén khối nén chứa dữ liệu tương ứng với mục từ đó. Nhờ
vậy mà thời gian giải nén và không gian lưu trữ tạm được giảm đáng kể.
Khuyết điểm:
Do dữ liệu được nén theo từng khối nên hiệu quả của việc nén từng khối
sẽ thấp hơn hiệu quả của việc nén toàn bộ.
Chương 5 . Các giải pháp chính cho việc xây dựng từ điển trên điện thoại di động Series 60
53
Như vậy chỉ có chiến lược nén từng khối với khuyết điểm có thể chấp nhận mới
có thể đáp ứng yêu cầu vừa có thể nén được dữ liệu vừa có thể truy xuất ngẫu nhiên
nhanh.
Chiến lược nén từng khối dữ liệu đòi hỏi phải tổ chức một cấu trúc lưu trữ thích
hợp để có thể truy xuất ngẫu nhiên nhanh. Cách thức nén và cấu trúc lưu trữ như thế
được gọi là chuẩn nén. Hiện nay, trên thế giới chuẩn nén Dictzip được sử dụng rộng
rãi nhất cho việc nén dữ liệu từ điển.
5.2.3 Chuẩn nén Dictzip
Chuẩn nén Dictzip được giới thiệu lần đầu tiên vào năm 1996 bởi Rickard
E.Faith, và được phát triển với nguồn mở. Chuẩn nén này có cách thức nén và cấu
trúc lưu trữ lần lượt như sau.
5.2.3.1 Cách thức nén
Dictzip dựa vào chuẩn nén Gzip với mục đích là các chương trình giải nén tập
tin Gzip đều giải nén được tập tin Dictzip. Dictzip khác Gzip ở chỗ một phần thông
tin mở rộng được thêm vào tập tin nén Gzip để lưu thêm thông tin về các khối nén.
Các chương trình giải nén tập tin Gzip sẽ bỏ qua phần thông tin mở rộng này. Các
chương trình đọc tập tin Dictzip sẽ đọc phần thông tin thêm này để có thể truy xuất
ngẫu nhiên trong tập tin.
5.2.3.2 Cấu trúc lưu trữ
Ý tưởng cơ bản của cấu trúc lưu trữ này là dữ liệu gốc sau khi nén sẽ thành các
khối nén có kích thước tối đa là 64 KB. Nghĩa là Dictzip nén các khối khối dữ liệu
(của tập tin ban đầu) không biết trước kích thước il thành các khối dữ liệu nén đã
biết kích thước bl (bl tối đa 64KB). Khối cuối cùng có thể không có cùng kích
thước với các khối trước. Kích thước của từng khối dữ liệu sau khi giải nén được
lưu ở phần thông tin mở rộng thêm vào nói trên. Khi cần truy cập ngẫu nhiên ta dựa
vào vị trí, kích thước cần đọc và thông tin đầu tập tin nén mà lấy ra các khối nén
tương ứng và giải nén chúng.
Chương 5 . Các giải pháp chính cho việc xây dựng từ điển trên điện thoại di động Series 60
54
Hình 5.1 Ý tưởng cấu trúc lưu trữ chuẩn Dictzip
5.2.4 Những khó khăn khi áp dụng Dictzip trên điện thọai di động
Tuy nhiên việc áp dụng chuẩn nén Dictzip cho dữ liệu trên điện thoại di động
gặp phải khó khăn sau:
Hiện tại chưa có bộ thư viện nén Dictzip hoàn chỉnh cho môi trường lập
trình trên điện thoại di động. Hầu hết các bộ thư viện nén này đều là mã
nguồn mở, tính đúng đắn còn hạn chế, thiếu nhiều hàm quan trọng, một
trong những hàm quan trọng là hàm nén các khối khối dữ liệu không biết
trước kích thước thành các khối dữ liệu nén đã biết kích thước.
Việc xây dựng bộ thư viện nén Dictzip hoàn chỉnh trên môi trường lập
trình cho điện thoại di động tốn nhiều thời gian cho phép, đòi hỏi các
thuật toán phức tạp.
Một cách tiếp cận để giải quyết khó khăn trên là xây dựng một chuẩn nén theo
từng khối khác. Chuẩn nén này được xây dựng với các hàm đơn giản hơn và phải
đảm bảo tối ưu được kích thước nén và tốc độ truy xuất ngẫu nhiên phải nhanh.
Chương 5 . Các giải pháp chính cho việc xây dựng từ điển trên điện thoại di động Series 60
55
5.2.5 Chuẩn nén Dictzip#
Chuẩn nén Dictzip# được chúng em đề nghị để giải quyết khó khăn khi áp dụng
Dictzip cho dữ liệu trên điện thoại di động. Chuẩn nén Dictzip# có cách thức nén và
cấu trúc lưu trữ như sau.
5.2.5.1 Cách thức nén
Tùy chọn bộ thư viện nén và giải nén. Trong chương trình ứng dụng của mình,
chúng em sử dụng bộ thư viện mã nguồn mở zlib version 1.1.4.
5.2.5.2 Cấu trúc lưu trữ
Hình 5.2 Ý tưởng cấu trúc lưu trữ chuẩn Dictzip#
Ý tưởng cơ bản của cấu trúc lưu trữ này là dữ liệu gốc được chia thành từng
khối có kích thước tối đa là 64 KB để nén. Kích thước của khối cuối cùng có thể
không bằng với kích thước của các khối trước. Dictzip# nén các khối dữ liệu đã biết
trước kích thước l ( l tối đa là 64KB) thành các khối nén có kích thước ibl (kích
thước các khối nén của chuẩn Dictzip# không biết trước được, kích thước các khối
nén của chuẩn Dictzip là một số cố định tối đa 64KB, đây chính là điểm khác nhau
cơ bản giữa Dictzip# và Dictzip). Kích thước sau nén của từng khối dữ liệu sẽ được
lưu vào thông tin đầu tập tin nén. Khi cần truy cập ngẫu nhiên ta dựa vào vị trí, kích
thước cần đọc và thông tin đầu tập tin nén mà lấy ra các khối nén tương ứng và giải
nén chúng.
Chương 5 . Các giải pháp chính cho việc xây dựng từ điển trên điện thoại di động Series 60
56
5.2.5.3 So sánh tỉ lệ nén giữa Dictzip và Dictzip#
So sánh kích thước tập tin dữ liệu đã nén của 3 loại từ điển thông dụng: Anh –
Việt (68998 từ), Việt – Anh (91146 từ) và Anh – Anh (121962 từ).
Các tập tin dữ liệu nén chuẩn DictZip lấy từ khóa luận “Xây dựng ứng dụng từ
điện trên Pocket PC” của Nguyễn Thiện Chương và Phạm Tuấn Sơn (Th.S Nguyễn
Tấn Trần Minh Khang và Th.S Trần Minh Triết hướng dẫn).
Mỗi bộ dữ liệu DictZip gồm 3 tập tin (1 tập tin nghĩa, 2 tập tin chỉ mục) trong
đó 2 tập tin chỉ mục chưa được nén. Để tiện so sánh, chúng em đã nén 2 tập tin chỉ
mục này theo chuẩn DictZip rồi cộng kích thước của cả 3 tập tin lại. Tỉ lệ % là tỉ lệ
kích thước tập tin nén so với tập tin gốc.
Từ điển Kích thước chưa
nén (KB)
Kích thước tập tin
DiztZip (KB)
Kích thước tập tin
DiztZip# (KB)
Anh – Việt 11505 3994 (34.7%) 4363 (37.9%)
Việt
Các file đính kèm theo tài liệu này:
- Unlock-0112013-0112031.pdf