Từ điển trên dtdd

145
TRƯỜNG ĐẠI HC KHOA HC TNHIÊN KHOA CÔNG NGHTHÔNG TIN BMÔN CÔNG NGHPHN MM BÙI TN LC - 0112013 CAO THÁI PHƯƠNG THANH - 0112031 NGHIÊN CU VÀ XÂY DNG NG DNG TĐIN TRÊN ĐIN THOI DI ĐỘNG KHÓA LUN CNHÂN TIN HC GIÁO VIÊN HƯỚNG DN Th.S NGUYN TN TRN MINH KHANG Th.S TRN MINH TRIT NIÊN KHÓA 2001 - 2005

Transcript of Từ điển trên dtdd

Page 1: Từ điển trên dtdd

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

Page 2: Từ điển trên dtdd

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

Page 3: Từ điển trên dtdd

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”

Page 4: Từ điển trên dtdd

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

Page 5: Từ điển trên dtdd

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

Page 6: Từ điển trên dtdd

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

Page 7: Từ điển trên dtdd

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

Page 8: Từ điển trên dtdd

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

Page 9: Từ điển trên dtdd

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

Page 10: Từ điển trên dtdd

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

Page 11: Từ điển trên dtdd

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

Page 12: Từ điển trên dtdd

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.

Page 13: Từ điển trên dtdd

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

Page 14: Từ điển trên dtdd

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.

Page 15: Từ điển trên dtdd

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

Page 16: Từ điển trên dtdd

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)

Page 17: Từ điển trên dtdd

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…

Page 18: Từ điển trên dtdd

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

Page 19: Từ điển trên dtdd

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.

Page 20: Từ điển trên dtdd

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

Page 21: Từ điển trên dtdd

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

Page 22: Từ điển trên dtdd

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:

Page 23: Từ điển trên dtdd

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

Page 24: Từ điển trên dtdd

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

Page 25: Từ điển trên dtdd

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ô

Page 26: Từ điển trên dtdd

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

Page 27: Từ điển trên dtdd

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

Page 28: Từ điển trên dtdd

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.

Page 29: Từ điển trên dtdd

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

Page 30: Từ điển trên dtdd

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.

Page 31: Từ điển trên dtdd

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

Page 32: Từ điển trên dtdd

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

Page 33: Từ điển trên dtdd

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ề).

Page 34: Từ điển trên dtdd

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ó).

Page 35: Từ điển trên dtdd

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<10> 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.

Page 36: Từ điển trên dtdd

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.

Page 37: Từ điển trên dtdd

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);

Page 38: Từ điển trên dtdd

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; }

Page 39: Từ điển trên dtdd

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);

Page 40: Từ điển trên dtdd

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.

Page 41: Từ điển trên dtdd

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<256> 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”

Page 42: Từ điển trên dtdd

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<16> 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.

Page 43: Từ điển trên dtdd

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

Page 44: Từ điển trên dtdd

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

Page 45: Từ điển trên dtdd

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<class T, TInt S>.

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<TInt, 100> aMang;

CCoeControl* iControls[ENumControls]; TFixedArray<CCoeControl*,ENumControls> 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

Page 46: Từ điển trên dtdd

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

Page 47: Từ điển trên dtdd

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<class T>, 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<class T>

Hình 4.9 Mảng cùng kích thước, phân đoạn

Page 48: Từ điển trên dtdd

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<class T>

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<class T>

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<class T>

Hình 4.12 Mảng packed, liên tục

Page 49: Từ điển trên dtdd

Chương 4 . Kĩ thuật lập trình C++ trên Symbian

46

Ngoài ra còn 2 lớp CArrayPtrFlat<class T> và CArrayPtrSeg<class T> 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<class T>

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<TInt>, RArray<TUint> 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<class T> để 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.

Page 50: Từ điển trên dtdd

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.

Page 51: Từ điển trên dtdd

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.

Page 52: Từ điển trên dtdd

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:

Danh từ Động từ Tính từ Trạng từ Giới từ 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: Phiên âm quốc tế (nếu có) Các nghĩa khác của từ.

Bảng 5.1 Bảng mô tả các trường dữ liệu

Page 53: Từ điển trên dtdd

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 1617Việt – Anh “không đúng với đặc tính của một ngôn ngữ” 40 3560Anh – 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.

Page 54: Từ điển trên dtdd

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 9Việt – Anh 1204 13Anh – 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ó.

Page 55: Từ điển trên dtdd

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ộ.

Page 56: Từ điển trên dtdd

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.

Page 57: Từ điển trên dtdd

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.

Page 58: Từ điển trên dtdd

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.

Page 59: Từ điển trên dtdd

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 – Anh 5238 1827 (34.9%) 1993 (38.0%)Anh – Anh 22180 7486 (33.7%) 8121 (36.6%)

Bảng 5.4 So sánh tỉ lệ nén giữa DictZip và Dictzip#

Như vậy có thể thấy chuẩn nén DictZip và DictZip# không có nhiều sự khác

biệt về tỉ lệ nén.

5.2.5.4 So sánh các khối nén trong chuẩn Dictzip#

5.2.5.4.1 Kích thước tập tin sau khi nén Từ điển 8 KB 16 KB 32 KB 64 KB

Anh – Việt 4616 4363 4168 4029Việt – Anh 2053 1993 1950 1916Anh – Anh 8510 8121 7805 7558

Bảng 5.5 Kích thước tập tin sau khi dùng Dictzip# nén

5.2.5.4.2 Tốc độ truy xuất

Từ điển Anh – Việt: (thời gian tính bằng mili giây)

Khối nén Load từ điển

Chuyển từ list ‘a’ sang ‘d’

Hiển thị nghĩa “a” lần đầu

8 KB 734 109 295316 KB 734 125 296832 KB 781 171 298464 KB 953 250 3015

Bảng 5.6 Tốc độ truy xuất từ điển Anh-Việt khi sử dụng Dictzip#

Page 60: Từ điển trên dtdd

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

57

Từ điển Việt – Anh: (thời gian tính bằng mili giây)

Khối nén Load từ điển

Chuyển từ list ‘a’ sang ‘d’

Hiển thị nghĩa “a” lần đầu

8 KB 703 93 23416 KB 718 109 25032 KB 750 156 25064 KB 953 218 281

Bảng 5.7 Tốc độ truy xuất từ điển Anh-Việt khi sử dụng Dictzip#

5.3 Tổ chức cấu trúc dữ liệu hỗ trợ cho việc tìm kiếm nhanh

Đến thời điểm này, ta đã giải quyết được hai vấn đề cơ bản: vấn đề tổ chức cấu

trúc lưu trữ và vấn đề nén dữ liệu. Ta vẫn còn một vấn đề nữa là tổ chức cấu trúc dữ

liệu hỗ trợ cho việc tìm kiếm nhanh. Một số cấu trúc tập tin hỗ trợ cho việc tìm

kiếm nhanh hiện nay là:

Tập tin tuần tự: tập tin này là một tập các mẫu tin lưu trữ các bản ghi liên

tiếp nhau. Việc tìm kiếm một mẫu tin có giá trị khoá K cho trước được

thực hiện bằng cách so sánh từng khoá của từng mẫu tin trong tập tin.

Tập tin chỉ mục: khi mẫu tin có kích thước lớn để làm tăng thêm hiệu

quả thao tác trên các mẫu tin người ta sử dụng tập tin chỉ mục. Tập tin

chỉ mục là tập tin chứa thông tin về vị trí của một mẫu tin trong một tập

tin khác. Một cách hình thức, có thể xem tập tin chỉ mục là một tập tin

phụ mà mỗi mẫu tin là một tập (K, i), với K là giá trị của khoá và i là địa

chỉ của mẫu tin trong tập tin chính. Ta còn có thể gia tăng tốc độ tìm

kiếm bằng cách xây dựng tập tin chỉ mục có thứ tự để tiến hành tìm kiếm

nhị phân trên tập tin chỉ mục này.

Tập tin băm: được sử dụng để giới hạn phạm vi tìm kiếm khi số lượng

mẫu tin lớn. Thao tác băm chính là thao tác phân loại các khoá có cùng

tính chất nào đó vào chung một cụm.

Ta còn có thể đọc tất cả các mẫu tin chỉ mục rồi phát sinh ra cây tìm

kiếm, sau đó lưu cây này lên một tập tin. Cách này khai thác được ưu

điểm về tốc độ tìm kiếm của các loại cây tìm kiếm nhưng có nhược điểm

Page 61: Từ điển trên dtdd

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

58

là chiếm nhiều bộ nhớ (kể cả bộ nhớ trong lần bộ nhớ phụ) cho việc lưu

trữ cây. Theo thông kê đối với dữ liệu từ điển Anh – Việt gồm 68.998 từ

thì ta cần khoảng 3,4 MB để tổ chức cây trong bộ nhớ.

Qua việc xem xét các cấu trúc tập tin hỗ trợ cho việc tìm kiếm nhanh, ta thấy

kết hợp phương pháp chỉ mục có thứ tự và băm tập tin nghĩa là thích hợp nhất cho

việc tìm kiếm nhanh nhất.

5.3.1 Tổ chức tập tin nghĩa

Như đã trình bày, phần nghĩa của từ sẽ có kích thước biến động. Để phần hiển

thị nghĩa thêm sinh động, ta thêm phần định dạng font chữ và màu sắc. Do đó mỗi

mẫu tin trong tập tin nghĩa sẽ bao gồm:

Phần nghĩa thực sự của từ gồm các nghĩa con. Các nghĩa con này gồm

phiên âm quốc tế (nếu có) và các nghĩa khác của từ.

Các byte định dạng (font chữ và màu sắc) tương ứng với từng nghĩa con.

Như vậy có bao nhiêu nghĩa con sẽ có bấy nhiêu định dạng tương ứng.

Hình 5.3 Tổ chức tập tin nghĩa

Page 62: Từ điển trên dtdd

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

59

5.3.2 Tổ chức tập tin chỉ mục Trong phần này ta sẽ trình bày cách thức chỉ mục cho các mẫu tin nghĩa trong

tập tin nghĩa. Tập tin chỉ mục của tập tin nghĩa từ điển là một tập các mẫu tin chỉ

mục có khoá là từ gốc của từ, các khoá được sắp theo thứ tự tăng dần của bảng chữ

cái. Ngoài các thông tin về từ, từ loại, các mẫu tin chỉ mục còn phải lưu thêm thông

tin về vị trí bắt đầu và chiều dài mẫu tin nghĩa vì các mẫu tin nghĩa có kích thước

biến động.

5.3.2.1 Các trường dữ liệu trong mẫu tin chỉ mục

STT Trường dữ liệu Kiểu dữ liệu Kích thước

Ý nghĩa

1. Word Mảng ký tự Biến động

Từ gốc

2. Attribute Byte 1 byte Tổ hợp các cờ quy định từ loại của từ:

Danh từ Động từ Tính từ Trạng từ Giới từ Các từ loại khác

3. MeaningPosition Số nguyên không dấu

4 byte Vị trí mẫu tin nghĩa trong tập tin nghĩa

4. MeaningLength Số nguyên không dấu

2 byte Kích thước mẫu tin nghĩa

Bảng 5.8 Các trường dữ liệu trong mẫu tin chỉ mục

Hình 5.4 Cấu trúc mẫu tin chỉ mục

Page 63: Từ điển trên dtdd

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

60

Khi tìm một từ, trước hết ta khoanh vùng phạm vi tìm kiếm (thao tác băm) để lấy ra đoạn buffer rồi phân tích ra thành các mẫu tin chỉ mục sau đó tiến hành tìm kiếm trên tập các mẫu tin chỉ mục đó. Theo bảng trên ta thấy trường dữ liệu Word (từ gốc của từ) có kích thước biến động, ta không thể phân tích mẫu tin chỉ mục bằng cách tạo thêm một tập tin chỉ mục nữa để lưu vị trí và chiều dài của mẫu tin chỉ mục trên vì biện pháp này không khả thi. Ta chỉ có thể đánh dấu vị trí kết thúc mỗi mẫu tin chỉ mục bằng một giá trị. Nếu ta chọn giá trị đánh dấu có kích thước là 1 byte thì mỗi từ trong từ điển sẽ được biểu diễn bởi 249 byte ( 256 trừ đi 1 byte attribute, 4 byte MeaningPostion và 2 byte MeaningLength) thì mỗi từ trong từ điển có không quá 120 ký tự nếu mỗi ký tự được biểu diễn bằng 2 byte. Việc phân tích buffer chứa các mẫu tin chỉ mục bây giờ là công việc tìm vị trí kết thúc mỗi mẫu tin chỉ mục.

Hình 5.5 Các giá trị cần thiết để phân tích mục từ

5.3.3 Tổ chức băm tập tin chỉ mục Việc băm tập tin chỉ mục là nhằm mục đích thu nhỏ phạm vi tìm kiếm. Tiêu chí

chọn hàm băm trong bài toán xây dựng từ điển được đề nghị theo thứ tự ưu tiên

tăng dần trong bài viết này là:

Sau khi băm, nếu lần lượt gộp các cụm mẫu tin chỉ mục lại thì kết quả

phải là tập tin chỉ mục có thứ tự ban đầu.

Việc tính toán cho hàm băm phải nhanh.

Ít xảy ra đụng độ (giới hạn tốt không gian tìm kiếm).

Các khoá được phân bố đều trong bảng băm.

Page 64: Từ điển trên dtdd

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

61

Do tập tin chỉ mục của ta được tổ chức thành các mẫu tin tăng dần theo bảng

chữ cái nên ta sẽ băm theo các chữ cái đầu của từ. Như vậy theo cách này, hàm băm

của ta có thể đảm bảo được hai tiêu chí đầu tiên đã đề ra. Ta có thể băm một hay

nhiều cấp tương ứng với một hay nhiều ký tự đầu của từ để có thể đáp ứng được hai

tiêu chí còn lại.

Thực nghiệm trên máy điện thoại di động thật (Nokia NGate QD và Nokia

7610) cho thấy khi số mục từ nạp lên listbox có giá trị > 2000 thì ta bắt đầu cảm

nhận được thời gian nạp từ.

Gọi: N là tổng số cụm. minS là số mục từ nhỏ nhất trong một cụm.

_

S là số mục từ trung bình trong một cụm. maxS là số mục từ lớn nhất trong một cụm. maxc là cụm ký tự xuất hiện nhiều nhất. 2000>S là số cụm có số mục từ > 2000. Size là kích thước bộ nhớ bị chiếm dụng bởi bảng băm tính bằng byte.

Ta lần lượt xem xét các cách thức băm có thể được. 5.3.3.1 Băm cấp một

Các từ có cùng một ký tự đầu tiên sẽ thuộc một cụm. Bảng thống kê sự phân bố

các cụm trong bảng băm của các từ điển như sau:

Từ điển N minS _S maxS maxc 2000>S

%1002000 ×>

NS

Size (byte)

Tin học 56 1 246.39 1405 “s” 0 0 336Anh – Anh 38 1 3209.53 1325 “s” 19 50 228Anh – Việt 29 1 2379.24 9406 “s” 17 57 174Việt – Anh 68 1 1340.38 12813 “c” 14 21 408

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

Theo bảng trên ta thấy trung bình phân bố nhỏ nhất và lớn nhất trong một cụm

là 246.39 và 12813. Phạm vi tìm kiếm vẫn còn rất lớn. Hơn nữa số cụm có số mục

từ > 2000 chiếm khoảng 21% đến 57%, đều này sẽ gây cảm giác ứng dụng chạy

chậm, ta cần phải phân hoạch nhỏ hơn nữa.

Page 65: Từ điển trên dtdd

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

62

5.3.3.2 Băm cấp hai

Các từ có cùng hai ký tự đầu tiên sẽ thuộc một cụm. Bảng thống kê sự phân bố

trong bảng băm của các từ điển như sau:

Từ điển N minS _

S maxS maxc 2000>S%1002000 ×>

NS Size (byte)

Tin học 802 1 17.20 506 “co” 0 0 6416Anh – Anh 608 1 200.60 4186 “ge” 7 1 4864Anh – Việt 198 1 138.55 2328 “co” 3 2 594Việt – Anh 1050 1 86.81 7626 “ng” 7 1 8400

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

Theo bảng trên ta thấy trung bình phân bố nhỏ nhất và lớn nhất trong một cụm

là 17.20 và 7626. So với băm cấp một, phạm vi tìm kiếm và số cụm có số mục từ >

2000 đã giảm đáng kể. Tuy nhiên vẫn có thể gây cảm giác chậm đối với người sử

dụng khó tính.

5.3.3.3 Băm cấp ba

Các từ có cùng ba ký tự đầu tiên sẽ thuộc một cụm. Bảng thống kê sự phân bố

trong bảng băm của các từ điển như sau

Từ điển N minS _S maxS maxc 2000>S

%1002000 ×>

NS Size (byte)

Tin học 3991 1 3.46 211 “com” 0 0 39910Anh – Anh 3906 1 31.22 3800 “gen” 1 0.03 39960Anh – Việt 3211 1 21.49 752 “con” 0 0 32110Việt – Anh 3755 1 24.27 5984 “ngư” 2 0.05 37550

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

Theo bảng trên ta thấy trung bình phân bố nhỏ nhất và lớn nhất trong một cụm

là 3.46 và 5984. So với băm cấp một và hai, phạm vi tìm kiếm và số cụm có số mục

từ > 2000 đã giảm đi rất nhiều. Số lần làm chậm ứng dụng không đáng kể.

5.3.3.4 Băm cấp bốn

Các từ có cùng bốn ký tự đầu tiên sẽ thuộc một cụm. Khi tiến hành băm theo

cách này, tập tin chỉ mục sẽ bị chia quá vụn, kích thước bộ nhớ bị chiếm dụng bởi

bảng băm sẽ gia tăng, điều này không cần thiết vì băm cấp ba đã dung hòa được

kích thước bộ nhớ và thời gian nạp từ.

Page 66: Từ điển trên dtdd

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

63

Từ điển N %1002000 ×>

NS Size (byte)

Tin học >> 3991 << 0 >> 39910Anh – Anh >> 3906 << 0 >> 39960Anh – Việt >> 3211 << 0 >> 32110Việt – Anh >> 3755 << 0 >> 37550

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

5.3.3.5 Kết luận

Như vậy, việc băm cấp một và cấp hai gây ra cảm giác ứng dụng chạy chậm khi

nạp từ. Việc băm cấp bốn sẽ chia quá vụn tập tin chỉ mục và gia tăng kích thước bộ

nhớ bị chiếm vụng một cách không cần thiết. Ta chỉ có thể băm cấp ba để có thể

dung hoà đượcthời gian nạp từ và kích thước bộ nhớ bị chiếm dụng.

Page 67: Từ điển trên dtdd

Chương 6 . Các kỹ thuật xử lý ứng dụng

64

Chương 6 Các kỹ thuật xử lý ứng dụng

Khi phát triển chương trình từ điển trên điện thoại thông minh Symbian Series

60. Ngoài vấn đề cấu trúc dữ liệu, điện thoại di động còn có những đặc trưng riêng

về màn hình hiển thị, bàn phím… Do đó, trong khi lập trình ứng dụng cần phải giải

quyết những vấn đề kĩ thuật chính sau:

6.1 Font chữ tiếng Việt Trong thời gian gần đây, với sự ra đời của font chữ Unicode (một ký tự biểu

diễn bằng 2 bytes – 16 bits) có các ký tự tiếng Việt trong phần mở rộng, tiếng Việt

đã được hiển thị tốt như các ngôn ngữ khác trong những phần mềm ứng dụng trên

máy tính. Ngoài ra, những thiết bị kĩ thuật số cá nhân (PDA) khác, như Pocket PC

với hệ điều hành Windows CE cũng sử dụng cùng loại font. Do đó, khi phát triển từ

điển trên các thiết bị này, vấn đề chỉ là sử dụng font Unicode trên các control hiển

thị.

Hệ điều hành Symbian – ngay khi mới ra đời – đã sử dụng font Unicode làm

font chữ hiển thị. Tuy nhiên, , các nhà sản xuất điện thoại thông minh Symbian

Series 60 đã không sử dụng những font chữ hiện có trên máy tính, thay vào đó là

các font Unicode với ít ký tự mở rộng hơn nhằm tiết kiệm bộ nhớ. Do đó, nếu sử

dụng font Unicode sẵn có trên điện thoại, chỉ một số ký tự tiếng Việt hiển thị đúng,

các ký tự có mã lớn không hiển thị được.

Hình 6.1 Tiếng Việt không hiển thị tốt

Page 68: Từ điển trên dtdd

Chương 6 . Các kỹ thuật xử lý ứng dụng

65

Như vậy, để hiển thị được tiếng Việt trong ứng dụng từ điển, chúng em tìm

cách sử dụng font Unicode của máy tính. Điều này thực hiện được nhờ cơ chế Open

Font System của hệ điều hành Symbian.

Open Font System là cơ chế cho phép sử dụng các bộ quét font (rasterizez plug-

in), giúp hệ điều hành hiển thị được nhiều loại font khác nhau. Bộ quét font là một

DLL nhận dạng dữ liệu của tập tin font chữ (*.ttf, *.fon…) và cung cấp hình dạng

ký tự trong font đó cho hệ thống hiển thị. Nói cách khác, một bộ quét font sẽ giúp

hệ thống Symbian “hiểu” được một loại font nào đó, tùy theo các bộ quét font hiện

có mà máy điện thoại sẽ hiển thị được các loại font chữ khác nhau.

Open Font System hoạt động trong suốt đối với các ứng dụng thực thi trên hệ

điều hành Symbian. Khi một bộ quét font và tập tin font chữ tương ứng được cài đặt

vào hệ thống, các ứng dụng sẽ sử dụng font chữ này như một font chữ sẵn có của hệ

điều hành. Cơ chế hoạt động của Open Font System như sau:

Khi khởi động thiết bị, hệ thống sẽ dò tìm tất cả các bộ quét font hiện có tại

đường dẫn System\Fonts\. Lưu ý việc dò tìm được thực hiện trên bộ nhớ của

máy điện thoại, vì vậy các bộ quét font cũng như tập tin font chữ để trên thẻ

nhớ sẽ không có tác dụng.

Tất cả tập tin khác tại đường dẫn System\Fonts\ sẽ được quét lần lượt bởi các

bộ quét font. Nếu có một tập tin font chữ được nhận dạng bởi một bộ quét

font nào đó thì font chữ này sẽ được nạp vào bộ nhớ dưới dạng một Open

font. Những tập tin không được nhận dạng bởi bộ quét font nào sẽ hiểu là

dạng font bitmap của hệ điều hành Symbian.

Khi một ứng dụng yêu cầu sử dụng một font chữ với đặc tả cụ thể nào đó, hệ

thống sẽ dò tìm font chữ thích hợp nhất để hiển thị.

Dựa vào cơ chế Open Font System, có thể rút ra một số nhận xét về việc sử

dụng font tiếng Việt cho ứng dụng từ điển trên điện thoại thông minh như sau:

Để hiển thị font tiếng Việt, có thể tìm hiểu định dạng tập tin font bitmap của

hệ điều hành Symbian, từ đó xây dựng một tập tin font bitmap biểu diễn ký

Page 69: Từ điển trên dtdd

Chương 6 . Các kỹ thuật xử lý ứng dụng

66

tự tiếng Việt mà không cần sử dụng bộ quét font nào. Giải pháp này gặp khó

khăn khi phải tự xây dựng một bộ font chữ với nhiều ký tự cần biểu diễn.

Một giải pháp khác là sử dụng lại các font chữ Unicode hiện có trên máy tính

như Time New Romans, Arial, Verdana Ref… Những font chữ này đều

thuộc loại font TrueType và bộ quét cho phép nhận dạng font TrueType từ

lâu đã được biết đến với tên gọi “Freetype” (www.freetype.org ). Với sự hỗ

trợ của công ty Symbian, đã có bộ quét font freetype.dll trên điện thoại thông

minh cho phép hiển thị font TrueType trên hệ điều hành Symbian. Tuy

nhiên, khi sử dụng, các font TrueType sẽ được nạp vào, gây hao tốn bộ

nhớ.Vì vậy, freetype.dll mặc định không có sẵn trong máy.

Chúng em sử dụng một font Unicode TrueType duy nhất là Verdana Ref (tập

tin verdref.ttf) để hiển thị toàn bộ ứng dụng vì font Verdana Ref có kích

thước tương đối nhỏ so với các font khác.

Và như đã trình bày ở trên, Open Font System chỉ hoạt động trong quá trình

khởi động. Vì vậy, để hiển thị được font chữ tiếng Việt trong ứng dụng từ

điển, sau khi cài đặt font phải khởi động lại máy điện thoại.

6.2 Bàn phím máy điện thoại Máy điện thoại di động Series 60 cũng như các điện thoại di động thông thường

khác, nhập liệu qua một bàn phím số với 12 phím.

Hình 6.2 Bàn phím điện thoại Series 60

Cụ thể để được ký tự ‘e’ ta phải nhấn phím số 3 hai lần liên tục. Như vậy việc

nhập từ cần tra trên điện thoại sẽ rất khác so với nhập trên các thiết bị khác có bàn

phím ký tự. Đặc biệt là việc nhập tiếng Việt không thể gõ theo kiểu VNI lẫn Telex.

Page 70: Từ điển trên dtdd

Chương 6 . Các kỹ thuật xử lý ứng dụng

67

Để giải quyết vấn đề này chúng ta xem xét cơ chế Front End Process của hệ

điều hành Symbian. Front End Process cho phép nhập các ký tự không gõ trực tiếp

bằng bàn phím được, bao gồm cả chức năng nhận dạng ký tự viết tay hoặc tiếng

nói. Mỗi một Front End Process cụ thể là một thư viện đa hình DLL thực thi giao

diện (interface) chung Front End Process cho phép xử lý các sự kiện phím. Ví dụ cụ

thể Front End Process mặc định của điện thoại xử lý phím như sau: nhấn phím số

‘3’ một lần là ký tự ‘d’, hai lần là ký tự ‘e’ và giữ 1s là ký tự số ‘3’… Các control

giao diện nhập liệu cùa Symbian đều hỗ trợ cơ chế Front End Process. Sau khi

Front End Process xử lý, ký tự kết quả được gửi về cho ứng dụng chứa control đó.

Và các ứng dụng nhận kết quả này không quan tâm đến Front End Process nào đã

hoạt động.

Như vậy vấn đề gõ tiếng Việt trên điện thoại Series 60 có thể giải quyết bằng

các phương pháp sau:

Tự xây dựng một bộ Front End Process, cho phép gõ tiếng Việt trên điện

thoại, ví dụ như nhấn phím số “2” một lần là ký tự ‘a’, hai lần là ký tự ‘ă’,

ba lần là ký tự ‘â’… Giải pháp này gặp khó khăn khi phải tự xây dựng

DLL xử phím tất cả các phím trong điện thoại với một cơ chế hoàn toàn

mới.

Bắt sự kiện phím của control nhập liệu, ứng với một phím đặc biệt nào đó

sẽ thay bằng ký tự tiếng Việt tương ứng. Cụ thể như người dùng muốn

nhập chữ ‘ă’ có thể gõ như sau ‘a#’, muốn nhập chữ ‘ằ’ gõ ‘a#*’. Cách

gõ tiếng Việt như trên tương tự bộ gõ tiếng Việt trên máy tính. Chúng em

đã chọn giải pháp này để xử lý tiếng Việt cho ứng dụng từ điển.

Dựa trên giải pháp đã chọn, chúng em xây dựng một control riêng kế

thừa từ control nhập liệu CEikEdwin (một dạng textbox) của Symbian.

Trong đó, hàm xử lý sự kiện sẽ bắt các phím đặt biệt ‘#’ và ‘*’ để nhập

ký tự tiếng Việt. Khi khởi động chương trình từ điển, control nhập liệu sẽ

được đăng kí với độ ưu tiên cao hơn cơ chế Front End Process, cho phép

việc xử lý sự kiện phím xảy ra trước khi Front End Process xử lý.

Page 71: Từ điển trên dtdd

Chương 6 . Các kỹ thuật xử lý ứng dụng

68

6.3 Các control của hệ điều hành Symbian Ứng dụng từ điển trên điện thoại thông minh Symbian Series 60 sử dụng các

control hiển thị, nhập liệu như một ứng dụng trên máy tính. Tuy nhiên các control

của hệ điều hành Symbian có một số đặc trưng riêng so với Windows. Trong

Symbian, mọi control đều kế thừa từ lớp “CCoeControl”. Các lớp control cụ thể

(concrete class) được cung cấp bởi các thư viện đồ họa của Symbian như Uikon,

Akvon…hoặc do lập trình viên tự viết bằng cách kế thừa các lớp control trừu tượng.

Bản thân UI Control Framework không cung cấp một control cụ thể nào có thể sử

dụng trực tiếp trong ứng dụng.

6.3.1 Mô hình MVC MVC (Model – View - Controller) là một mẫu thiết kế (design pattern) thường

được sử dụng trong các ứng dụng giao diện trên điện thoại thông minh series 60.

Các control mà thư viện đồ họa Uikon cung cấp cũng theo mẫu thiết kế này.

Trong đó việc thực thi các control được chia làm những thành phần riêng biệt, mỗi

thành phần đảm trách những chức năng khác nhau của control.

Hình 6.3 Mẫu thiết kế MVC

Model: phần dữ liệu của control. Thay đổi View khi có yêu cầu.

View: hiển thị nội dung của Model. Gửi các sự kiện phát sinh cho

Controller xử lý.

Controller (Observer): xử lý sự kiện khi người dùng tương tác với ứng

dụng thông qua control.

Page 72: Từ điển trên dtdd

Chương 6 . Các kỹ thuật xử lý ứng dụng

69

6.3.2 Phân loại controls trong Symbian

6.3.2.1 Window-owning controls và non-window-owning controls Window-owning controls là các control

có cùng kích thước, vị trí với cửa sổ hiển

thị. Các control này có thể chồng lên

nhau và có thể di chuyển vị trí trong cửa

sổ cha. Hộp thoại (dialog), trình đơn

(menu), toolbar là các Window-owning

controls.

Hình 6.4 Control

Tuy nhiên phần lớn các control là non-window-owning controls. Một non-

window-owning controls có phạm vi (extent) là một phần của cửa sổ trên màn hình

hiển thị: thông thường là một trong nhiều control của một control kết hợp (gọi là

container) trong ứng dụng. Cụ thể một ứng dụng tra cứu danh bạ đơn giản có thể có

một container (dạng control kết hợp) chứa một listbox các số điện thoại đã lưu vào

máy và một textbox để nhập số điện thoại cần tìm(non-window-owning controls).

Trong ứng dụng, một non-window-owning control phải nằm trong một

window-owning control.

6.3.2.2 Simple controls và compound controls

Control đơn là control không chứa các control khác, vi dụ như nút lệnh,

textbox… Một control đơn có thể là window-owning hay non-window-owning. Tuy

nhiên trong thực tế hầu hết các control đơn là non-window-owning control.

Ngược lại, control kết hợp là control chứa một hoặc nhiều control khác. Control

kết hợp còn gọi là container controls và có thể là là window-owning hay non-

window-owning control.

Các control chứa trong control kết hợp thông thường là non-window-owning

control và được gọi là các control thành phần (component control).

Page 73: Từ điển trên dtdd

Chương 6 . Các kỹ thuật xử lý ứng dụng

70

Một control kết hợp muốn hoạt động phải viết đè hai hàm: “TInt

CCoeControl::CountComponentControls()” trả về số control thành phần và

“CCoeControl* CCoeControl::ComponentControl()” trả về con trỏ của

từng control thành phần. UI Control Framework sử dụng hai hàm này để điều khiển

hoạt động của các control. Tùy theo như cầu, lập trình viên có thể sử dụng mảng

động để lưu các control thành phần hoặc sử dụng mã nguồn “cứng” để thực thi các

hàm trên. Nếu không có ý định mở rộng các control khi ứng dụng đang hoạt động,

thông thường lập trình viên trả về trực tiếp số control thành phần trong control kết

hợp (CountComponentControls()) và dùng câu lệnh switch (bắt đầu bằng

case 0:) để trả về con trỏ các cont rol thành phần (ComponentControl()).

Control kết hợp có trách nhiệm nhận và chuyển các sự kiện phím (key event)

cho các control thành phần. Việc xử lý sự kiện của mỗi control thành phần có thể

thực hiện ngay trong control kết hợp, nếu lớp control kết hợp thực thi giao diện

Observer ứng với control thành phần đó. Ngoài ra việc xử lý sự kiện có thể thực

hiện trong lớp control thành phần nếu lớp control thành phần do lập trình viên tạo ra

(kế thừa từ các control do hệ điều hành cung cấp) thực thi giao diện Observer của

loại control đó.

Các control kết hợp có thể là control thành phần của một control kết hợp khác.

Không có giới hạn cho việc kết hợp này lồng nhau này.

6.3.3 Sử dụng control

6.3.3.1 Sử dụng tài nguyên để xây dựng control Cũng như các ngôn ngữ lập trình khác đặc biệt là VC++ 6.0, C++ trên Symbian

dùng tập tin tài nguyên (resource file) để lưu trữ thông tin của các control.

Tuy nhiên, để độc lập với các IDE khác nhau, tập tin tài nguyên được khai báo

dưới dạng văn bản có cấu trúc. Tùy theo môi trướng phát triển ứng dụng mà tập tin

tài nguyên sẽ được biên dịch thành các tập tin tài nguyên nhị phân tồn tại độc lập

với tập tin thực thi chính của chương trình (.app). Điều này giúp thực hiện ứng dụng

đa ngôn ngữ dể dàng hơn, chỉ cần thay đổi tập tin tài nguyên qui định chuỗi hiển thị

Page 74: Từ điển trên dtdd

Chương 6 . Các kỹ thuật xử lý ứng dụng

71

trong các control của ứng dụng; việc kết hợp tập tin thực thi .app với một tập tin tài

nguyên ngôn ngữ đã biên dịch sẽ tạo nên một ứng dụng với ngôn ngữ hiển thị như ý

muốn.

Hệ thống tập tin tài nguyên khi lập trình bằng C++ trên Symbian bao gồm:

Tập tin nguồn: dạng văn bản

o Eikon.hrh và Eikon.rh: chứa các khai báo và cấu trúc chuẩn cho tài

nguyên. (có thể không có)

o AppName.hrh: chứa khai báo kí hiệu cho các tài nguyên và các định

danh lệnh (command ID, tương tự như VC++ 6.0)

o AppName.rss: chứa các cấu trúc để xây dựng control cho ứng dụng

o AppNameAif.rss: chứa các thông tin để biên dịch tập tin .aif (tập tin

chứa thông tin ứng dụng)

o AppName.loc: chứa các khai báo chuỗi dùng trong ứng dụng đa ngôn

ngữ.

(AppName là tên ứng dụng)

Tập tin đích: dạng nhị phân, khác nhau cho từng nền hệ thống

o Eikon.rsg: chứa các kí hiệu, ID tài nguyên chuẩn. (có thể không có)

o AppName.rsg: chứa các kí hiệu tài nguyên, định danh lệnh… được

phát sinh khi biên dịch tài nguyên; kết hợp với các lớp control để biên

dịch ứng dụng.

o AppName.rsc: tập tin tài nguyên được biên dịch từ các tập tin .rss và

.loc

Trong ứng dụng, việc đọc tập tin tài nguyên được thực hiện bằng lớp

TResourceReader và hàm tạo ResourceReader từ môi trường điều khiển (CCoeEnv).

Mỗi ứng dụng có một đối tượng tĩnh CCoeEnv duy nhất khi thực thi, đối tượng này

cung cấp các tiện ích liên quan tới giao diện của ứng dụng như lấy graphic content,

font chữ, đọc tập tin tài nguyên…Chi tiết về đối tượng tĩnh CCoeEnv có thể tham

khảo trong SDK Help.

Page 75: Từ điển trên dtdd

Chương 6 . Các kỹ thuật xử lý ứng dụng

72

6.3.3.2 Khai báo và xây dựng một control trong ứng dụng

Tùy theo loại control mà cách xây dựng có khác nhau:

Simple, non-window-owning controls

o Cấp phát bộ nhớ cho control, thực hiện bằng toán tử new

(ELeave)…

o Chỉ định cửa sổ chứa control bằng hàm

SetContainerWindowL()

o Xây dựng các nội dung khởi tạo cần thiết cho control. Có thể thực

hiện bằng một trong hai cách: ConstructFromResourceL() (với

giá trị tài nguyên đã được đọc vào TResourceReader) hoặc

ConstructL(tham số…) (xây dựng trực tiếp bằng mã nguồn với

các tham số chính là giá trị tài nguyên trong tập tin tài nguyên)

Control kết hợp hay Window-owning controls

o Cấp phát bộ nhớ cho control, thực hiện bằng toán tử new (ELeave)…

o Nếu là control ket hợp thuộc dạng non-window-owning control, chỉ

định cửa sổ chứa control bằng hàm SetContainerWindowL()

o Xây dựng control như đã trình bày ở phần trên. Tuy nhiên đối với

control kết hợp, thường xây dựng từ mã nguồn, trong đó mỗi control

thành phần đơn giản sẽ được xây dựng từ tập tin tài nguyên.

o Kích hoạt (activate) control trước khi sử dụng bằng hàm: ActivateL().

Trừ khi control kết hợp lại là một thành phần của control khác thì

không cần kích hoạt vì khi control “cha” kính hoạt tất cả các control

thành phần sẽ được kích hoạt theo.

Sau khi khai báo, cấp phát và xây dựng các control như trên, vẫn chưa hiển thị

được control lên màn hình ứng dụng vì phạm vi (extent) của control bao gồm kích

thước và vị trí trong cửa sổ chứa control này chưa được xác định. Kích thước của

một control có thể được xác định trong hàm ConstructL() của control đó. Nhưng

vị trí của control phải được qui định ở control “cha” vì đây là kích thước tương đối.

Việc xác định vị trí hay phạm vi của các control thành phần được thực hiện trong

Page 76: Từ điển trên dtdd

Chương 6 . Các kỹ thuật xử lý ứng dụng

73

hàm kế thừa từ lớp CoeControl: SizeChangedL(). Đây là hàm được hệ thống tự

động gọi khi kích thước control bị thay đổi hoặc mới khởi động ứng dụng lần đầu.

Ngoài ra, mỗi control có thể thay đổi những thuộc tính khác nhau để phù hợp

với yêu cầu của ứng dụng. Như thay đổi highlighted text color của listbox, thay đổi

margin cho textbox, gán biểu tượng cho các menu item…

6.3.4 Control observers Mỗi control có thể có một bộ quan sát (observer) để tiếp nhận và xử lý các sự

kiện phát sinh. Các control thiết lập bộ quan sát cho mình bằng cách thực thi các

giao diện kế thừa của lớp giao diện MCoeControlObserver. Việc thiết lập được thực

hiện thông qua hàm: CCoeControl::SetObserver() (mọi control đều kế thừa từ

CCoeControl nên đều có thể gọi hàm này).

Lớp giao diện trừu tượng MCoeControlObserver định nghĩa một tập hợp các sự

kiện mà control có thể gửi đến. Tùy theo loại control mà Symbian cung cấp các lớp

giao diện observer cụ thể, ví dụ cho listbox là MEikListboxObserver, cho textbox là

MEikEdwinObserver. Các sự kiện gửi đến được xử lý trong hàm kế thừa

M…Observer::Handle…EVent(…). Lưu ý, ngoài các sự kiện phát sinh do

người dùng tương tác với ứng dụng, các control có thể gửi sự kiện đến bộ quan sát

bằng hàm kế thừa: CCoeControl::ReportEventL() (mỗi control sẽ viết đè

hàm này để gửi loại sự kiện thích hợp cho control đó).

6.4 Kỹ thuật tra cứu tự nhiên 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

Thứ tự tăng dần các ký tự theo bảng chữ cái Việt Nam là a, (á, à, ả, ã, ạ,) ă, (ắ,

ằ, ẳ, ẵ, ặ,) â, (ấ, ầ, ẩ, ẫ, ậ,) b, c, d, đ, e, (é, è, ẻ, ẽ, ẹ), ê, (ế, ề, ể, ễ, ệ), g, h, i, (í, ì, ỉ, ĩ,

ị), k, l, m, n, o, (ó, ò, ỏ, õ, ọ,) ô, (ố, ồ, ổ, ỗ, ộ,) ơ, (ớ, ờ, ở, ỡ, ợ,) q, r, s, t, u, (ú, ù, ủ,

ũ, ụ,) ư, (ứ, ừ, ử, ữ, ự,), v, y (,ý, ỳ, ỷ, ỹ, ỵ). Việc so sánh hai chữ sẽ đem về việc so

sánh từng ký tự với nhau. Ví dụ chữ “Lộc” sẽ có thứ tự nhỏ hơn chữ “Thanh” vì

chữ cái “T” có thứ tự lớn hơn chữ cái “L”; chữ “lốc” sẽ có thứ tự nhỏ hơn chữ “lộc”

vì đối với chữ cái “ô” dấu nặng có thứ tự lớn hơn dấu sắc.

Page 77: Từ điển trên dtdd

Chương 6 . Các kỹ thuật xử lý ứng dụng

74

Để có thể sắp xếp các mục từ theo thứ tự ta phải tiến hành so sánh các chuỗi.

Trong khi đó bộ SDK do Symbian cung cấp hiện tại chỉ hỗ trợ hàm hàm so sánh

chuỗi theo thứ tự mã Unicode. Muốn thực hiện so sánh các từ theo thứ tự bảng chữ

cái nào thì bắt buộc chúng ta phải tự viết lấy hàm so sánh các chữ cái theo bảng chữ

cái đó.

Trong bài viết này chúng em đề nghị một giải pháp so sánh các chữ cái theo thứ

tự bảng chữ cái tiếng Việt như cách trình bày dưới đây.

Để ý rằng tập bảng ký tự tiếng Việt được tạo thành từ hai tập hợp. Tập thứ nhất

X gồm các ký tự thỏa: không có dấu tiếng Việt và có thứ tự trên bảng mã Unicode.

Tập thứ hai Y gồm các ký tự thỏa: có dấu tiếng Việt và không có thứ tự trên bảng

mã Unicode.

Như vậy tập Y sẽ gồm các ký tự sau:

Chữ cái Sắc Huyền Hỏi Ngã Nặng á à ả ã ạ â ấ ầ ẩ ẫ ậ ă ắ ằ ẳ ẵ ặ đ é è ẻ ẽ ẹ ê ế ề ể ễ ệ í ì ỉ ĩ ị ó ò ỏ õ ọ ô ố ồ ổ ỗ ộ ơ ớ ờ ở ỡ ợ ú ù ủ ũ ụ ư ứ ừ ử ữ ự ý ỳ ỷ ỹ ỵ

Bảng 6.1 Tập các ký tự có dấu tiếng Việt

Tập X sẽ gồm những ký tự còn lại trong bảng mã Unicode.

Page 78: Từ điển trên dtdd

Chương 6 . Các kỹ thuật xử lý ứng dụng

75

Khi so sánh hai ký tự c1, c2 với nhau ta sẽ lần lượt xét các trường hợp sau:

Nếu cả hai ký tự đều thuộc tập Y thì so sánh vị trí của nó trong tập Y. Ví

dụ ký tự “ư” nhỏ hơn ký tự “ỷ” vì trong tập Y thứ tự của “ỷ” lớn hơn thứ

tự của “ư”.

Nếu cả hai ký tự không có trong tập Y nghĩa là thuộc tập X thì so sánh

theo mã Unicode. Ví dụ ký tự “a” nhỏ hơn ký tự “b” vì trong tập X mã

của ký tự “b” lớn mã của ký tự “a”.

Nếu ký tự c1 thuộc tập X, ký tự c2 thuộc tập Y thì tìm ký tự biên dưới lb,

biên trên ub của c2.

Biên dưới (lb)

Chữ cái Sắc Huyền Hỏi Ngã Nặng Biên trên (ub)

á à ả ã ạ â ấ ầ ẩ ẫ ậ

a

ă ắ ằ ẳ ẵ ặ

b

d đ e é è ẻ ẽ ẹ e ê ế ề ể ễ ệ

f

i í ì ỉ ĩ ị j ó ò ỏ õ ọ ô ố ồ ổ ỗ ộ

o

ơ ớ ờ ở ỡ ợ

p

ú ù ủ ũ ụ u ư ứ ừ ử ữ ự

v

y ý ỳ ỷ ỹ ỵ z Bảng 6.2 Biên trên và biên dưới của ký tự có dấu tiếng Việt

• Nếu mã ký tự lb lớn hơn mã của ký tự c1 thì ta nói c1 có thứ tự

nhỏ hơn c2.Ví dụ khi so sánh hai ký tự “k” (c1) và ký tự “ò” (c2),

ký tự “ò” có biên dưới lb là “o”, biên trên ub là “p”, mã của ký tự

“o” lớn hơn mã của ký tự “k” nên “k” có thứ tự nhỏ hơn “ò”.

Hình 6.5 Minh họa cách sử dụng biên dưới

Page 79: Từ điển trên dtdd

Chương 6 . Các kỹ thuật xử lý ứng dụng

76

• Nếu mã ký tự ub nhỏ hơn mã của ký tự c1 thì ta nói c1 có thứ tự

lớn hơn c2. Ví dụ khi so sánh hai ký tự “q” (c1) và ký tự “ò” (c2),

ký tự “ò” có biên dưới lb là “o”, biên trên ub là “p”, mã của ký tự

“q” lớn hơn mã của ký tự “p” nên “q” có thứ tự lớn hơn “ò”.

Hình 6.6 Minh họa sử dụng biên trên

Nếu ký tự c1 thuộc tập Y, ký tự c2 thuộc tập X thì làm tương tự như

trường hợp ký tự c1 thuộc tập X, ký tự c2 thuộc tập Y.

6.4.2 Tối ưu số lượng các mục từ được nạp Để tiện lợi cho người sử dụng, ứng dụng từ điển sẽ hiển thị sẵn danh sách các

từ. Nhưng ứng dụng sẽ không nạp toàn bộ các từ có trong từ điển vào danh sách mà

chỉ nạp một số từ ( tùy thuộc vào số lượng từ của từng cụm trong bảng băm, thường

các từ được nạp lên thuộc 1 đến 3 cụm liên tiếp nhau trong bảng băm) sao cho lắp

đầy listbox.

6.4.3 Tùy biến cách thức tra cứu của người sử dụng Người sử dụng có thể chọn từ cần tra trong danh sách này bằng cách nhấn phím

mũi tên lên xuống hoặc có thể gõ từ cần tra, ứng dụng sẽ tự động hiển thị danh sách

các mục từ chứa từ cần tra và đưa vị trí focus đến từ có liên quan. Khi người dùng

sử dụng phím mũi tên lên xuống để chọn từ cần tra thì sẽ tồn tại một thời điểm có vị

trí focus nằm ở đầu hoặc cuối danh sách từ được nạp. Lúc này để có thể ấn tiếp

phím mũi tên lên xuống ta phải tiếng hành nạp thêm từ vào danh sách hiển thị. Để

thực hiện việc nạp tiếp từ ta phải biết được việc nạp tiếp từ bắt đầu từ cụm nào

trong bảng băm. Điều này có nghĩa là ta phải lưu được vị trí của cụm bắt đầu nạp

(biên dưới) và vị trí của cụm sau khi nạp (biên trên) trong bảng băm. Vị trí của cụm

Page 80: Từ điển trên dtdd

Chương 6 . Các kỹ thuật xử lý ứng dụng

77

trong bảng băm được xác định bởi bộ ba (i, j, k) tương ứng với vị trí của ba ký tự

đầu trong bảng băm cấp 1, 2 , 3.

Giả sử tại một thời điểm nào đó ta nạp vào listbox hai cụm có các từ bắt đầu

bằng “imm” và “imp”.

Hình 6.7 Nạp từ vào listbox

Sau khi nạp các từ vào listbox ta phải lưu lại biên dưới (i1, j1, k1) và biên trên

(i2, j2, k2) để sau này khi nạp tiếp từ vào listbox, ta chỉ quan tâm đến nạp bắt đầu từ

bộ (i, j, k) nào.

6.5 Kỹ thuật phát âm 6.5.1 Những giới hạn khi xây dựng thư viện phát âm

Căn cứ vào đặc điểm hiện nay của các ngôn ngữ đã biết các nhà ngôn ngữ học

phân các ngôn ngữ thành các loại hình sau (phân loại ngôn ngữ theo loại hình):

Ngôn ngữ hòa kết (flexional): loại hình này bao gồm các ngôn ngữ: Đức,

Latin, Hy Lạp, Anh, Pháp, Nga, Arập.

Page 81: Từ điển trên dtdd

Chương 6 . Các kỹ thuật xử lý ứng dụng

78

Ngôn ngữ chắp dính (agglutinate): loại hình này có hiện tượng cứ nối tiếp

thêm một các máy móc, cơ giới vào căn tố nào đó của một hay nhiều phụ tố;

mà mỗi phụ tố đó lại chỉ luôn mang lại một ý nghĩa ngữ pháp nhất định. Ví

dụ: Thổ Nhĩ Kỳ, Mông Cổ, Nhật Bản, Triều Tiên, …

Ngôn ngữ đơn lập (isolate): còn gọi là ngôn ngữ phi hình thái, không biến

hình, đơn tiết, phân tiết, … Loại hình này bao gồm các ngôn ngữ: Việt, Hán,

một số nước ở vùng Đông Nam Á, …

Ngôn ngữ đa tổng hợp (polysynthetic): còn gọi là ngôn ngữ hỗn nhập hay lập

khuôn. Đây là loại mang những đặc điểm của các lọai hình nói trên.

Để nghiên cứu từ vựng của ngôn ngữ người ta đưa ra một bộ môn gọi là từ

vựng học (lexicology).

Các loại hình ngôn ngữ và các từ vựng của từng ngôn ngữ rất phức tạp. Do vậy

việc nắm được các quy luật của từng bộ từ vựng của từng ngôn ngữ là đều hết sức

khó khăn. Việc phân tích một cụm từ để phát âm thì càng phức tạp hơn, liên quan

đến lĩnh vực ngôn ngữ học và khoa học máy tính.

Đối với các ngôn ngữ thuộc loại hình đơn lập như tiếng Việt, một số từ điển

được xây dựng trên Desktop hiện nay đã giải quyết phần phát âm cho ngôn ngữ

thuộc loại hình đơn lập bằng cách thu âm từng tiếng riêng lẻ tạo thành một thư viện

âm thanh (tiếng Việt khoảng 10.000 tiếng). Khi đó để phát âm một cụm từ ta sẽ

phân tích cụm từ này thành những “tiếng” riêng lẻ rồi dựa vào thư viện âm thanh

mà phát âm. Trong ứng dụng của chúng em sẽ sử dụng đến kỹ thuật phát âm này

cho tiếng Việt.

Đối với các ngôn ngữ thuộc loại hình hòa kết như tiếng Anh, ta không thể làm

giống như cách đã làm đối với tiếng Việt được vì số lượng từ rất lớn (tiếng Anh có

khoảng 400.000 tiếng), hơn nữa tùy theo cấu trúc ngữ pháp mà cùng một từ có thể

phát âm khác nhau. Ta phải sử dụng cách khác đó là dựa vào các quy tắc có được

khi nghiên cứu về tự vựng học. Đây rõ ràng là công việc kết hợp giữa ngôn ngữ học

và khoa học máy tính. Để phát âm được tiếng Anh, các từ điển trên Desktop (sử

dụng hệ điều hành Microsoft Windows) hiện nay sử dụng bộ SDK Text To Speech

Page 82: Từ điển trên dtdd

Chương 6 . Các kỹ thuật xử lý ứng dụng

79

của Microsoft. Với bộ SDK này công việc lập trình phát âm đã trở nên đơn giản hơn

rất nhiều. Tuy nhiên đối hệ điều hành Symbian, hiện nay chưa có bộ thư viện nào

hỗ trợ phát âm giống như vậy. Chúng em đề nghị một giải pháp là trên máy chỉ lưu

âm thanh của những “tiếng” thông dụng (kỹ thuật này được chúng em gọi là Text

To Speech Offline), khi chương tình không tìm thấy âm thanh trên máy thì sẽ kết

truy cập đến chương trình trên sever (xây dựng với bộ SDK Text To Speech của

Microsoft) yêu cầu lấy dữ liệu âm thanh về (kỹ thuật này được chúng em gọi là

Text To Speech Online).

6.5.2 Text To Speech Offline Text To Speech Offline là một thuật ngữ được chúng em đề nghị để đặt tên cho

kỹ thuật phát âm mà dữ liệu âm thanh được lưu trữ ngay tại trên máy chạy chương

trình phát âm.

Như đã trình bày ở phần trên, ta sẽ phát âm tiếng Việt bằng cách sử dụng các

tập tin âm thanh riêng lẻ. Tiếng Việt có khoảng 10.000 tiếng trong đó có khỏang

8.200 tiếng thông dụng. Bộ thư viện mà chúng em sử dụng có khoảng 6623 tiếng

thông dụng. Nhưng việc bộ thư viện này vào điện thoại di động là công việc tốn rất

nhiều thời gian (do phải chép từng tập tin) và hao phí nhiều bộ nhớ. Chúng em đưa

ra giải pháp là tạo ra một từ điển âm thanh dựa trên bộ thư viện này. Khi đó nội

dung của tập tin âm thanh đóng vai trò giống như nghĩa của từ trong từ điển. Như

vậy chúng ta vừa tiết kiệm được thời gian chép tập tin vừa tiết kiệm được không

gian lưu trữ (vì thực hiện nén từng khối theo chuẩn Dictzip#).

Đối với tiếng Anh chúng em chỉ sử dụng khoảng 4.100 tiếng thông dụng.

Phát âm Tổng số tiếng Số tiếng trong thư viện

Kích thước đã nén (MB)

Việt Khoảng 10.000 tiếng Khỏang 6623 tiếng 18Anh Khoảng 400.000 tiếng Khoảng 4100 tiếng 21

Bảng 6.3 Kích thước của bộ thư viện Offline

6.5.3 Text To Speech Online Kể từ phiên bản phiên bản 7.x, hệ điều hành Symbian đã hỗ trợ giao thức http,

điều này có nghĩa là, một ứng dụng trên điện thoại thông minh Symbian Series 60

Page 83: Từ điển trên dtdd

Chương 6 . Các kỹ thuật xử lý ứng dụng

80

có thể nhận dữ liệu từ một trang web bất kì thông qua http. Đồng thời hiện nay các

nhà cung cấp dịch vụ điện thoại di động ở Việt Nam đã cung cấp chính thức dịch vụ

truy cập Internet qua điện thoại di động bằng PGRS. Dựa trên các điều kiện này,

chúng em đã thực hiện chức năng phát âm trực tuyến cho từ điển như sau:

Xây dựng một website không có giao diện cho phép phát sinh âm thanh phát

âm của một từ tiếng Anh bất kì.

Khi một ứng dụng nào đó (đóng vai trò client) gửi yêu cầu phát âm đến

website. Website sẽ phát sinh dữ liệu phát âm có định dạng .wav và gửi về

client đã yêu cầu dưới dạng dữ liệu nhị phân.

Khi ứng dụng nhận được toàn bộ dữ liệu sẽ gọi các hàm âm thanh sẵn có để

phát nội dung .wav nhận được

Cụ thể, chúng em đã dùng bộ thư viện Microsoft Speech SDK 5.1 để xây dựng

website phát âm. Đồng thời cài đặt các lớp client nhận và xử lý dữ liệu download từ

website cho ứng dụng từ điển. Kết quả tất cả các từ tiếng Anh của mọi bộ từ điển

đều có thể nghe phát âm trực tuyến.

Page 84: Từ điển trên dtdd

Chương 7 . Phân tích thiết kế ứng dụng từ điển

81

Chương 7 Phân tích thiết kế ứng dụng từ điển

7.1 Giới thiệu Ứng dụng từ điển Mobile_Dict xây dựng trên điện thoại thông minh Symbian

Series 60; cho phép người dùng điện thoại chọn loại từ điển, tra từ và nghe phát âm

tiếng Việt, Anh.

7.2 Mô hình Use-Case

7.2.1 Mô hình Use-Case

Hình 7.1 Use-Case diagram

Page 85: Từ điển trên dtdd

Chương 7 . Phân tích thiết kế ứng dụng từ điển

82

STT Actor Ý nghĩa

1 User Người sử dụng Bảng 7.1 Danh sách Actor

STT Actor Ý nghĩa

1 InitApp Khởi động ứng dụng

2 ShowAboutAndHelp Hiển thị About và Help của ứng dụng

3 SelectNewDictonary Chọn một từ điển khác

4 Setting Thiết lập các thông số của ứng dụng

5 Pronounce Phát âm từ đang xem nghĩa

6 LookUpWord Tra từ

7 ViewOtherWord Tra từ khác trong màn hình xem nghĩa của một từ Bảng 7.2 Danh sách Use-case

7.2.2 Đặc tả các Use-Case chính

7.2.2.1 Use-Case “InitApp”

• Tóm tắt

Người dùng khởi động chương trình; ứng dụng tìm kiếm các dữ liệu từ điển có

trong máy và hiển thị bộ từ điển mặc định.

• Dòng sự kiện

o Dòng sự kiện chính

Người dùng khởi động chương trình trên điện thoại

Ứng dụng tự động tìm kiếm các tập tin dữ liệu từ điển có trong máy

Hiển thị bộ từ điển được chọn mặc định

o Dòng sự kiện khác

Ứng dụng không tìm thấy tập tin dữ liệu từ điển nào: hiển thị màn

hình About

Ứng dụng không tìm thấy thông tin về từ điển mặc định: hiển thị từ

điển đầu tiên tìm được

• Các yêu cầu đặc biệt

Không có

Page 86: Từ điển trên dtdd

Chương 7 . Phân tích thiết kế ứng dụng từ điển

83

• Điều kiện tiên quyết

Không có

• Điều kiện kết thúc

Nếu use-case thành công thì màn hình ứng dụng được hiển thị

• Điểm mở rộng

Không có

7.2.2.2 Use-Case “SelectNewDictionary”

• Tóm tắt

Người dùng chọn từ điển khác trong các từ điển đã có trong máy.

• Dòng sự kiện

o Dòng sự kiện chính

Người dùng chọn một từ điển khác trong số các từ điển (đã có trong

điện thoại) để tra từ

Ứng dụng nạp dữ liệu từ điển được chọn

Hiển thị danh sách từ của từ điển mới

o Dòng sự kiện khác

Không có

• Các yêu cầu đặc biệt

Không có

• Điều kiện tiên quyết

Có ít nhất hai bộ từ điển được cài vào máy điện thoại

• Điều kiện kết thúc

Không có

• Điểm mở rộng

Không có

7.2.2.3 Use-Case “Pronounce”

• Tóm tắt

Người dùng nghe phát âm của từ đang xem nghĩa.

• Dòng sự kiện

Page 87: Từ điển trên dtdd

Chương 7 . Phân tích thiết kế ứng dụng từ điển

84

o Dòng sự kiện chính

Người dùng chọn chức năng phát âm từ hiện hành

Ứng dụng tìm kiếm dữ liệu âm thanh của từ được chọn trong ngữ liệu

tương ứng.

Nếu tìm thấy, ứng dụng phát ra âm thanh tìm được (phát âm của từ

được chọn)

Nếu không tìm thấy thực hiện dòng sự kiện phụ “Pronounce Online”

o Dòng sự kiện phụ “Pronounce Online”

Người dùng chọn điểm truy cập

Kết nối với website phát âm của ứng dụng yêu cầu phát sinh âm thanh

cho từ được chọn.

Nhận dữ liệu âm thanh từ website

Phát âm thanh nhận được

o Dòng sự kiện khác

Nếu không tìm thấy âm thanh của từ được yêu cầu và máy không có

khả năng kết nối Internet: thông báo không phát âm được

Nếu quá trình giao tiếp với website bị lỗi: thông báo lỗi kết nối

• Các yêu cầu đặc biệt

Không có

• Điều kiện tiên quyết

Từ điển đang tra phải có khả năng phát âm (Anh, Việt)

Nghĩa của từ cần phát âm phải đang được hiển thị

• Điều kiện kết thúc

Nếu use-case thành công thì người dùng nghe được cách phát âm của từ đang

xem nghĩa

• Điểm mở rộng

Không có

7.2.2.4 Use-Case “LookUpWord”

• Tóm tắt

Page 88: Từ điển trên dtdd

Chương 7 . Phân tích thiết kế ứng dụng từ điển

85

Người dùng nhập từ cần tra và yêu cầu ứng dụng hiển thị nghĩa của từ đó.

• Dòng sự kiện

o Dòng sự kiện chính

Người dùng nhập từng ký tự của từ cần tra

Dựa vào dữ liệu nhập, ứng dụng tìm và chọn ra từ gần đúng nhất

trong danh sách từ.

Khi người dùng tìm thấy từ cần tra thì yêu cầu hiển thị nghĩa. (Lúc

này từ cần tra chính là từ đang được chọn trong danh sách từ)

Ứng dụng tìm nghĩa của từ trong dữ liệu và hiển thị nghĩa theo định

dạng đã qui định

o Dòng sự kiện khác

Người dùng có thể dùng phím mũi tên lên, xuống để chọn trực tiếp từ

cần tra trong danh sách từ trước khi yêu cầu hiển thị nghĩa

• Các yêu cầu đặc biệt

Không có

• Điều kiện tiên quyết

Không có

• Điều kiện kết thúc

Nếu use-case thành công thì người dùng xem được nghĩa của từ cần tra

• Điểm mở rộng

Không có

7.2.2.5 Use-Case “ViewOtherWord”

• Tóm tắt

Người dùng yêu cầu hiển thị nghĩa của một từ khác khi đang xem nghĩa một từ

nào đó.

• Dòng sự kiện

o Dòng sự kiện chính

Người dùng đang xem nghĩa của một từ thì yêu cầu hiển thị nghĩa của

một từ khác có trong phần nghĩa hiện tại

Page 89: Từ điển trên dtdd

Chương 7 . Phân tích thiết kế ứng dụng từ điển

86

Ứng dụng tìm nghĩa của từ mới được yêu cầu

Nếu tìm thấy, hiển thị nghĩa từ mới

o Dòng sự kiện khác

Nếu không tìm thấy nghĩa từ mới: ứng dụng chọn từ gần đúng nhất trong

danh sách từ; nhưng không hiển thị nghĩa của từ gần đúng này.

• Các yêu cầu đặc biệt

Không có

• Điều kiện tiên quyết

Đang hiển thị nghĩa một từ nào đó

• Điều kiện kết thúc

Không có

• Điểm mở rộng

Không có

Page 90: Từ điển trên dtdd

Chương 7 . Phân tích thiết kế ứng dụng từ điển

87

7.3 Thiết kế lớp đối tượng

Hình 7.2 Class diagram

Page 91: Từ điển trên dtdd

Chương 7 . Phân tích thiết kế ứng dụng từ điển

88

STT Lớp đối tượng Loại Ý nghĩa 1 CMobile_DictApp Control Lớp Application cửa ứng

dụng 2 CMobile_DictDocument Control Lớp Document của ứng

dụng 3 CMobile_DictAppUi Control Lớp điều khiển chính của

ứng dụng 4 CMobile_dict_list_view Boundary Lớp list view hiển thị danh

sách, cho phép tra từ 5 CMobile_dict_list_view_container Boundary Lớp chứa các control của

list view 6 CMyEikEdwin Boundary Lớp textbox dùng nhập từ

cần tra (hỗ trợ nhập tiếng Việt)

7 CMobile_dict_setting_view Boundary Lớp setting view dùng thiết lập các thông số của ứng dụng

8 CAknExSettingListListbox Boundary Lớp listbox chứa các setting trong setting view

9 CAknExSettingItem Boundary Lớp item setting 10 CMobile_dict_text_view Boundary Lớp text view hiển thị

nghĩa từ 11 CMobile_dict_text_view_container Boundary Lớp chứa các control của

text view 12 CRichControl Boundary Lớp richtextbox hiển thị

nghĩa từ (hỗ trợ tiếng Việt và các định dạng hiển thị)

13 CDict_handle Control Lớp xử lý tra từ 14 CDict_index_array Control Lớp xử lý mảng các mục từ

được load lên danh sách 15 CDict_hash Control Lớp xử lý bảng băm dữ liệu

từ 16 RDict_hash_letter1 Control Lớp xử lý băm cấp 1 17 RDict_hash_letter2 Control Lớp xử lý băm cấp 2 18 RDict_hash_letter3 Control Lớp xử lý băm cấp 3 19 CWav_handle Control Lớp xử lý phát âm 20 CWav_index_array Control Lớp xử lý mảng các mục

âm thanh tìm thấy 21 CWav_hash Control Lớp xử lý bảng băm dữ liệu

âm thanh

Page 92: Từ điển trên dtdd

Chương 7 . Phân tích thiết kế ứng dụng từ điển

89

22 TextToSpeech Control Lớp xử lý biến đổi từ thành dữ liệu phát âm

23 CClientEngine Control Lớp xử lý kết nối với website phát âm bằng giao thức http

24 MClientObserver Interface Lớp giao diện bắt các sự kiện khi kết nối với website

25 MyUtility Control Lớp chứa các công cụ, tiện ích dùng chung cho ứng dụng

26 CMyZip Control Lớp xử lý nén dữ liệu theo chuẩn DictZip#

27 CZLib Control Lớp xử lý nén dữ liệu theo chuẩn Zip

28 TMyCharCollection Control Lớp xử lý so sánh ký tự theo chuẩn tiếng Việt

Bảng 7.3 Danh sách các lớp chính

7.4 Thiết kế xử lý 7.4.1 Danh sách các xử lý chính

STT Xử lý Mô tả Use-Case tương ứng

1 XL1 Khởi động ứng dụng InitApp

2 XL2 Chọn từ điển mới SelectNewDictionany

3 XL3 Tìm kiếm từ LookUpWord

4 XL4 Hiển thị nghĩa từ LookUpWord

5 XL5 Xem nghĩa từ khác trong màn hình nghĩa ViewOtherWord

6 XL6 Nghe phát âm từ Pronounce Bảng 7.4 Danh sách các xử lý chính

Page 93: Từ điển trên dtdd

Chương 7 . Phân tích thiết kế ứng dụng từ điển

90

7.4.2 Mô tả các xử lý chính 7.4.2.1 XL1 – Khởi động ứng dụng TH1:

Hình 7.3 Sơ đồ tuần tự Khởi động ứng dụng 1

Page 94: Từ điển trên dtdd

Chương 7 . Phân tích thiết kế ứng dụng từ điển

91

TH2:

Hình 7.4 Sơ đồ tuần tự Khởi động ứng dụng 2

Page 95: Từ điển trên dtdd

Chương 7 . Phân tích thiết kế ứng dụng từ điển

92

7.4.2.2 XL2 – Chọn từ điển mới

Hình 7.5 Sơ đồ tuần tự Chọn từ điển mới

Page 96: Từ điển trên dtdd

Chương 7 . Phân tích thiết kế ứng dụng từ điển

93

7.4.2.3 XL3 – Tìm kiếm từ TH1:

Hình 7.6 Sơ đồ tuần tự Tìm kiếm từ 1

TH2:

Hình 7.7 Sơ đồ tuần tự Tìm kiếm từ 2

Page 97: Từ điển trên dtdd

Chương 7 . Phân tích thiết kế ứng dụng từ điển

94

7.4.2.4 XL4 – Hiển thị nghĩa từ

Hình 7.8 Sơ đồ tuần tự Hiển thị nghĩa từ

Page 98: Từ điển trên dtdd

Chương 7 . Phân tích thiết kế ứng dụng từ điển

95

7.4.2.5 XL5 – Xem nghĩa từ khác trong màn hình nghĩa TH1:

Hình 7.9 Sequence diagram Xem nghĩa từ khác trong màn hình nghĩa 1

TH2:

Hình 7.10 Sequence diagram Xem nghĩa từ khác trong màn hình nghĩa 2

Page 99: Từ điển trên dtdd

Chương 7 . Phân tích thiết kế ứng dụng từ điển

96

7.4.2.6 XL6– Nghe phát âm từ TH1:

Hình 7.11 Sequence diagram Nghe phát âm từ 1

TH2:

Page 100: Từ điển trên dtdd

Chương 7 . Phân tích thiết kế ứng dụng từ điển

97

Hình 7.12 Sơ đồ tuần tự Nghe phát âm từ 2

7.5 Thiết kế giao diện Điện thoại thông minh Symbian Series 60 cơ bản vẫn là một điện thoại di động

với kích thước nhỏ, gọn, màn hình hiển thị giới hạn, bàn phím đơn giản. Vì vậy tất cả các ứng dụng cho điện thoại thông minh đều phải tuân thủ nguyên tắc thiết kế giao diện đơn giản, các chức năng được thực hiện với ít thao tác phím nhất có thể. Trên cơ sở đó, ứng dụng từ điển cho điện thoại thông minh được thiết kế gồm hai màn hình chính có chung một menu chức năng và màn hình setting bổ sung:

STT Màn hình Mô tả

1 Màn hình tra từ Chứa danh sách từ và textbox cho phép nhập từ cần tra

2 Màn hình hiển thị nghĩa Chứa nghĩa từ cần tra

3 Màn hình setting Lựa chọn các thông số của ứng dụng Bảng 7.5 Danh sách màn hình giao diện

Page 101: Từ điển trên dtdd

Chương 7 . Phân tích thiết kế ứng dụng từ điển

98

7.5.1 Màn hình tra từ

Hình 7.13 Màn hình tra từ

STT Kiểu Mô tả

1 Listbox

Danh sách từ, cho phép người dùng nhập hoặc chọn từ cần tra.

2 Textbox Nhập từ cần tra.

Bảng 7.6 Các thành phần của màn hình tra từ

7.5.2 Màn hình hiển thị nghĩa

Hình 7.14 Màn hình hiển thị nghĩa

STT Kiểu Mô tả

1

Richtextbox Hiển thị nghĩa từ cần tra

Bảng 7.7 Các thành phần của màn hình

hiển thị nghĩa

Page 102: Từ điển trên dtdd

Chương 7 . Phân tích thiết kế ứng dụng từ điển

99

7.5.3 Menu chính

Hình 7.15 Submenu Dictionaries

Hình 7.16 Submenu About

STT Kiểu Mô tả 1 Dictionries Chọn từ điển khác (số lượng submenu phu thuộc vào số

lượng từ điển được chép vào máy) 2 Pronounce Phát âm từ hiện hành (Menu item này chỉ xuất hiện khi từ

điển có phát âm và đang trong màn hình hiển thị nghĩa) 3 Setting Vào màn hình cài đặt thông số 4 About

4.1 Help Hiển thị phần help của ứng dụng 4.2 About Hiển thị phần tác giả của ứng dụng 5 Exit Thoát khỏi ứng dụng

Bảng 7.8 Các thành phần của menu chính

7.5.4 Màn hình cài đặt

Hình 7.17 Màn hình cài đặt

STT Kiểu Mô tả

1 CAknExSettingItem

Qui định thông số dạng radiobox

2 CAknExSettingListItemData Qui định thông số dạng textbox

Bảng 7.9Các thành phần của màn hình cài đặt

Page 103: Từ điển trên dtdd

Chương 8 . Ứng dụng hỗ trợ quản lý dữ liệu trên Desktop

100

Chương 8 Ứng dụng hỗ trợ quản lý dữ liệu trên Desktop

8.1 Giới thiệu

Ứng dụng Dictionary Manager là ứng được xây dựng trên Desktop nhằm hỗ trợ cho ứng dụng Mobile_Dict trên điện thoại di động. Vì hạn chế của thiết bị di động ứng dụng Mobile_Dict không hỗ trợ chức năng chỉnh sửa dữ liệu từ điển nên mục tiêu của Dictionary Manager là để đáp ứng nhu cầu này. Các chức năng chính của Ditionary Manager là:

Import dữ liệu từ điển trên điện thoại di động sang dữ liệu từ điển dùng trên Desktop.

Thực hiện thao tác dữ liệu từ điển trên Desktop: thêm, xoá, sửa từ, compact dữ liệu từ điển.

Export dữ liệu từ điển trên Desktop sang dữ liệu từ điển trên điện thoại di động.

8.2 Mô hình Use-Case 8.2.1 Mô hình Use-Case

Hình 8.1 Mô hình Use-Case Dictionary Manager

Page 104: Từ điển trên dtdd

Chương 8 . Ứng dụng hỗ trợ quản lý dữ liệu trên Desktop

101

8.2.1.1 Danh sách các Actor

STT Actor Ý nghĩa 1. User Người sử dụng

Bảng 8.1 Danh sách các Actor

8.2.1.2 Danh sách các Use-Case chính STT Use-Case Ý nghĩa

1. ImportDictionary Import dữ liệu từ điển trên điện thoại di động sang dữ

liệu từ điển dùng trên Desktop.

2. LoadDictionary Nạp bộ dữ liệu từ điển trên Desktop để thực hiện thao tác

thêm, xóa, sửa các từ.

3. ShowWordsMeanings Hiển thị nghĩa của từ được chọn.

4. PartOfSpeechFilter Lọc danh sách các từ hiển thị theo từ loại.

5. AddNewWord Thêm một từ mới vào bộ từ điển có sẵn.

6. DeleteWord Xóa một từ trong bộ từ điển có sẵn.

7. UpdateWord Cập nhật một từ trong bộ từ điển có sẵn.

8. CompactDictionary Compact dữ liệu từ điển.

9. ExportDictionary Export dữ liệu từ điển trên Desktop sang dữ liệu từ điển

dùng trên Desktop. Bảng 8.2 Danh sách các Use-Case chính

8.2.2 Đặc tả một số Use-Case chính

8.2.2.1 ImportDictionary

8.2.2.1.1 Tóm tắt

Use-Case này cho phép người sử dụng import bộ dữ liệu từ điển trên điện thoại

di động sang bộ dữ liệu trên Desktop.

8.2.2.1.2 Dòng sự kiện

Dòng sự kiện chính: Use-Case này bắt đầu khi người sử dụng chọn chức

năng import.

1. Người sử dụng chọn chức năng import từ điển trên điện thoại di động.

2. Hệ thống hiển thị hộp thoại Open yêu cầu người sử dụng chọn tập tin từ điển

dùng cho điện thoại di động.

Page 105: Từ điển trên dtdd

Chương 8 . Ứng dụng hỗ trợ quản lý dữ liệu trên Desktop

102

3. Người sử dụng chọn tập tin từ điển dùng cho điện thoại di động và nhấn nút

chọn.

4. Hệ thống hiển thị hộp thoại Save yêu cầu người sử dụng đặt tên cho tập tin

từ điển dùng cho Desktop.

5. Người sử dụng gõ tên tập tin từ điển dùng cho Desktop và nhấn nút lưu.

6. Hệ thống tiến hành xử lý import dữ liệu trên điện thoại di động sang dữ liệu

từ điển dùng trên Desktop.

7. Sau khi xử lý import hệ thống trở về màn hình chính và hiển thị danh sách

các từ trong từ điển đã import.

Dòng sự kiện khác:

1. Người sử dụng chưa chọn tập tin từ điển nào mà nhấn nút chọn thì hệ thống

sẽ yêu cầu người dùng chọn tập tin từ điển.

2. Người sử dụng không xác nhận việc chọn từ điển thì hệ thống sẽ không nạp

bộ dữ liệu đã chọn và kết thúc Use-Case.

3. Người sử dụng chưa gõ tên tập tin từ điển mà nhấn nút lưu thì hệ thống sẽ

yêu cầu người dùng gõ tên tập tin từ điển.

4. Người sử dụng không xác nhận việc lưu từ điển thì hệ thống sẽ không tiến

hành xử lý import dữ liệu và kết thúc Use-Case.

8.2.2.1.3 Các yêu cầu đặc biệt

Không có.

8.2.2.1.4 Điều kiện tiên quyết

Không có.

8.2.2.1.5 Điều kiện kết thúc

Nếu Use-Case thực hiện thành công thì hệ thống sẽ tiến hành xử lý import dữ

liệu và nạp bộ từ điển được chọn.

8.2.2.1.6 Điểm mở rộng

Không có.

Page 106: Từ điển trên dtdd

Chương 8 . Ứng dụng hỗ trợ quản lý dữ liệu trên Desktop

103

8.2.2.2 Export

8.2.2.2.1 Tóm tắt

Use-Case này cho phép người sử dụng export bộ dữ liệu dùng cho Desktop

sang dữ liệu dùng cho điện thoại di động.

8.2.2.2.2 Dòng sự kiện

Dòng sự kiện chính: Use-Case này bắt đầu khi người sử dụng chọn chức

năng export dữ liệu từ điển trên Desktop sang dữ liệu từ điển trên điện thoại

di động.

1. Người sử dụng chọn chức năng export từ điển.

2. Hệ thống hiển thị hộp thoại Save yêu cầu người sử dụng gõ tên tập tin dùng

cho điện thoại di động.

3. Người sử dụng gõ tên vào và nhấn nút lưu.

4. Hệ thống tiến hành xử lý export dữ liệu từ điển.

Dòng sự kiện khác:

1. Người sử dụng chưa gõ tên tập tin từ điển mà nhấn nút lưu thì hệ thống sẽ

yêu cầu người dùng gõ tên tập tin từ điển.

2. Người sử dụng không xác nhận việc lưu từ điển thì hệ thống sẽ không tiến

hành xử lý export dữ liệu và kết thúc Use-Case.

8.2.2.2.3 Các yêu cầu đặc biệt

Không có.

8.2.2.2.4 Điều kiện tiên quyết

Để export được cần phải có một bộ dữ liệu từ điển trên Desktop được nạp.

8.2.2.2.5 Điều kiện kết thúc

Nếu Use-Case thực hiện thành công thì hệ thống sẽ tiến hành xử lý export từ

điển.

8.2.2.2.6 Điểm mở rộng

Không có.

Page 107: Từ điển trên dtdd

Chương 8 . Ứng dụng hỗ trợ quản lý dữ liệu trên Desktop

104

8.2.2.3 LoadDictionary

8.2.2.3.1 Tóm tắt

Use-Case này cho phép người sử dụng nạp bộ dữ liệu có sẵn để thêm, xóa, sửa

các từ.

8.2.2.3.2 Dòng sự kiện

Dòng sự kiện chính: Use-Case này bắt đầu khi người sử dụng chọn chức

năng nạp một từ điển.

1. Người sử dụng chọn chức năng nạp từ điển.

2. Hệ thống hiển thị hộp thoại Open yêu cầu người sử dụng chọn tập tin từ điển

dùng cho Desktop.

3. Người sử dụng chọn tập tin từ điển và nhấn nút chọn.

4. Hệ thống trở về màn hình chính và hiển thị danh sách các từ trong từ điển đã

chọn và hiển thị từ đầu tiên trong từ điển.

Dòng sự kiện khác:

1. Người sử dụng chưa chọn tập tin từ điển nào mà nhấn nút chọn thì hệ thống

sẽ yêu cầu người dùng chọn tập tin từ điển.

2. Người sử dụng không xác nhận việc chọn từ điển thì hệ thống sẽ không nạp

bộ dữ liệu đã chọn và kết thúc Use-Case.

8.2.2.3.3 Các yêu cầu đặc biệt

Không có.

8.2.2.3.4 Điều kiện tiên quyết

Không có.

8.2.2.3.5 Điều kiện kết thúc

Nếu Use-Case thực hiện thành công thì hệ thống sẽ nạp bộ từ điển được chọn.

8.2.2.3.6 Điểm mở rộng

Không có.

Page 108: Từ điển trên dtdd

Chương 8 . Ứng dụng hỗ trợ quản lý dữ liệu trên Desktop

105

8.2.2.4 UpdateWord

8.2.2.4.1 Tóm tắt

Dòng sự kiện này cho phép người sử dụng cập nhật một từ trong bộ từ điển đã

được nạp.

8.2.2.4.2 Dòng sự kiện

Dòng sự kiện chính: Use-Case này bắt đầu khi người sử dụng chọn chức

năng cập nhật từ.

1. Người sử dụng chọn chức năng cập nhật từ.

2. Hệ thống hiển thị hộp thoại cập nhật từ và nạp nội dung của từ được chọn lên

màn hình để người sử dụng chỉnh sửa.

3. Người sử dụng tiến hành chỉnh sửa nội dung của từ được chọn.

4. Sau khi sửa chữa xong người dùng nhấn nút lưu.

5. Hệ thống sẽ lưu từ được cập nhật vào từ điển và trở về màn hình chính.

Dòng sự kiện khác

1. Nếu người sử dụng không xác nhận việc cập nhật từ thì hệ thống sẽ không

lưu các sửa chữa của từ vào từ điển và kết thúc Use-Case.

8.2.2.4.3 Các yêu cầu đặc biệt

Không có.

8.2.2.4.4 Điều kiện tiên quyết

Người sử dụng phải chọn trước một bộ từ điển.

8.2.2.4.5 Điều kiện kết thúc

Nếu Use-Case thực hiện thành công thì hệ thống sẽ cập nhật từ đã sửa vào từ

điển.

8.2.2.4.6 Điểm mở rộng

Không có.

Page 109: Từ điển trên dtdd

Chương 8 . Ứng dụng hỗ trợ quản lý dữ liệu trên Desktop

106

8.3 Thiết kế lớp 8.3.1 Sơ đồ lớp

Hình 8.2 Sơ đồ các lớp đối tượng

8.3.2 Mô tả các lớp chính

STT Lớp đối tượng Loại Ý nghĩa

1. MainForm Boundary Lớp màn hình chính của ứng dụng

2. EditorForm Boundary Lớp màn hình chỉnh sửa hoặc thêm từ

3. DictControl Boundary User control từ điển

4. MessageBoxForm Boundary Lớp màn hình thông báo

5. ModifyHandle Control Lớp xử lý chính cho lớp màn hình chỉnh

sửa từ

6. DictHandle Control Lớp xử lý chính cho lớp màn hình chính

của ứng dụng Bảng 8.3 Các lớp chính

Page 110: Từ điển trên dtdd

Chương 8 . Ứng dụng hỗ trợ quản lý dữ liệu trên Desktop

107

8.4 Thiết kế xử lý 8.4.1 Danh sách các xử lý chính STT Xử lý Mô tả Use-Case tương ứng

1. XL1 Import dữ liệu từ điển trên điện thoại di động sang dữ liệu dùng trên Desktop ImportDictionary

2. XL2 Nạp một bộ từ điển có sẵn để thêm, xóa, sửa các từ. LoadDictionary

3. XL3 Hiển thị nghĩa của từ được chọn. ShowWordMeanings 4. XL4 Lọc danh sách các từ hiển thị theo loại từ PartOfSpeechFilter 5. XL5 Thêm một từ mới vào bộ từ điển có sẵn. AddNewWord 6. XL6 Xóa một từ trong bộ từ điển có sẵn. RemoveWord 7. XL7 Cập nhật một từ trong bộ từ điển có sẵn. UpdateWord 8. XL8 Compact dữ liều từ điển CompactDictionary

9. XL9 Export dữ liệu từ điển trên Desktop sang dữ liệu từ điển dùng trên Desktop. ExportDictionary

Bảng 8.4 Các xử lý chính

8.4.2 Mô tả một số xử lý chính

8.4.2.1 Import

Hình 8.3 Sơ đồ tuần tự cho xư lý Import

Page 111: Từ điển trên dtdd

Chương 8 . Ứng dụng hỗ trợ quản lý dữ liệu trên Desktop

108

8.4.2.2 Export

Hình 8.4 Sơ đồ tuần tự cho xử lý Export

8.4.2.3 LoadDictionary

Hình 8.5 Sơ đồ tuần tự cho xử lý LoadDictionary

Page 112: Từ điển trên dtdd

Chương 8 . Ứng dụng hỗ trợ quản lý dữ liệu trên Desktop

109

8.4.2.4 UpdateWord

Hình 8.6 Sơ đồ tuần tự cho xử lý UpdateWord

8.5 Các màn hình giao diện 8.5.1 Danh sách các màn hình giao diện

STT Màn hình Mô tả

1 Màn hình chính của ứng dụng

Chứa các chức năng chính của ứng dụng như

: import, export dữ liệu từ điển, thêm, xóa,

sửa các từ trong các bộ dữ liệu từ điển có

sẵn., …

2 Màn hình biên soạn từ Cho phép thêm hoặc chỉnh sửa nội dung của

một từ. Bảng 8.5 Các màn hình giao diện

Page 113: Từ điển trên dtdd

Chương 8 . Ứng dụng hỗ trợ quản lý dữ liệu trên Desktop

110

8.5.2 Mô tả các màn hình giao diện

8.5.2.1 Màn hình chính ứng dụng

Chứa các chức năng chính của ứng dụng như : import, export dữ liệu từ điển,

thêm, xóa, sửa các từ trong các bộ dữ liệu từ điển có sẵn., …

Hình 8.7 Màn hình chính của ứng dụng Dictionary Manager

Page 114: Từ điển trên dtdd

Chương 8 . Ứng dụng hỗ trợ quản lý dữ liệu trên Desktop

111

8.5.2.2 Màn hình biên soạn từ

Cho phép thêm hoặc chỉnh sửa nội dung của một từ.

Hình 8.8 Màn hình biên sọan từ

Page 115: Từ điển trên dtdd

Chương 9 . Cài đặt và thử nghiệm

112

Chương 9 Cài đặt và thử nghiệm

9.1 Môi trường phát triển Đề tài bao gồm hai ứng dụng Mobile_Dict (thực thi trên điện thoại) và

DictionaryManager (thực thi trên Desktop). Các công cụ và môi trường được sử

dụng để thực hiện đề tài:

Công cụ phân tích, thiết kế: Rational Rose 2000

Môi trường cài đặt ứng dụng: Microsoft Windows XP SP1

Công cụ lập trình

o Series 60 SDK for Symian OS version 1.2, For C++

o Series 60 2nd Edition SDK for Symbian OS, Feature Pack 2, For C++

Môi trường lập trình (IDE):

o Microsoft Visual C++ 6.0

o Microsoft Visual C++ 7.0

Môi trường thử nghiệm và cài đặt:

o Máy ảo SDK Symbian for C++ 6.1 và SDK Symbian for C++ 8.0a

o Điện thoại di động Nokia-QD (Symbian 6.1) và Nokia 7610 (Symbian

7.0s)

Ngoài ra, trong quá trình thực hiện chúng em còn sử dụng và tham khảo các bộ thư

viện sau:

Bộ thư viện nén/ giải nén Zlibpp

Microsoft Speech SDK 5.1

Page 116: Từ điển trên dtdd

Chương 9 . Cài đặt và thử nghiệm

113

9.2 Mô hình cài đặt

Hình 9.1 Mô hình cài đặt đề tài

STT Tên Kiểu Mô tả 1 MobileDictionary

Application Package Chứa chương trình ứng dụng Từ điển mobile_dict.app (trên mobile)

2 DictionaryManager Application Package

Chứa chương trình ứng dụng quản lý dữ liệu Từ điển DictionaryManager.exe (trên desktop)

3 Data Package Chứa các bộ dữ liệu Từ điển. 4 Font Package Chứa font Unicode hiển thị tiếng Việt 5 VoiceData Package Chứa các tập tin âm thanh tiếng Việt, Anh. 6 zlibpp DLL Bộ thư viện nén/ giải nén dữ liệu Từ điển trên

mobile 7 Zlibce DLL Bộ thư viện nén/ giải nén dữ liệu Từ điển trên

desktop 8 SpeechServer Package Chứa website phát âm cho mobile 9 MS Speech SDK DLL Bộ thư viện phát âm tiếng Anh

Bảng 9.1 Implement Model

Page 117: Từ điển trên dtdd

Chương 9 . Cài đặt và thử nghiệm

114

9.3 Hướng dẫn sử dụng 9.3.1 Yêu cầu phần cứng

Đối với Mobile_Dict: hoạt động trên tất cả điện thoại Series 60, gồm:

Nokia 3600 Nokia 3620 Nokia 3650 Nokia 3660

Nokia N-Gage Nokia N-Gage QD Siemens SX1 Lenovo P930

Panasonic X700 Panasonic X800 Sendo X Sendo X2

Nokia 6600 Nokia 6620 Nokia 6260 Nokia 7610

Nokia 6670 Nokia 6680 Nokia 6681 Nokia 6682

Nokia 3230 Nokia N70 Nokia N90 Nokia N91

Bảng 9.2 Danh sách điện thoại tương thích

Bộ nhớ máy điện thoại (drive C:) còn trống ít nhất 300 KB

Thẻ nhớ (E:) còn trống 300 KB + kích thước tập tin dữ liệu từ điển cần sử

dụng

Đối với DictionaryManager: yêu cầu máy tính:

RAM 128 MB

.NET Famework 1.1

9.3.2 Cài đặt Đối với Mobile_Dict:

Cài đặt font:

o Nếu trong bộ nhớ của điện thoại (C:\System\fonts\) đã có các tập

tin freetype.dll và verdref.ttf thì bỏ qua phần này.

o Ngược lại:

Cài đặt tập tin vnfont.sis vào điện thoại

Khởi động lại máy (có thể tắt rồi mở máy).

Cài đặt ứng dụng: cài đặt tập tin mobile_dict.sis vào điện thoại

Cài đặt dữ liệu: chép tập tin dữ liệu từ điển cần dùng vào thẻ nhớ tại

đường dẫn E:\MDict_Data\

Nếu cài đặt thành công, trong Menu điện thoại sẽ có thêm ứng dụng

Mobile_Dict như sau:

Page 118: Từ điển trên dtdd

Chương 9 . Cài đặt và thử nghiệm

115

Hình 9.2 Cài đặt thành công Mobile_Dict

Hình 9.3 Cài đặt thành công Dữ liệu

Đối với DictionaryManager: chỉ cần chép hai tập tin dictionarymanager.exe

và zlib1.dll vào cùng thư mục và thực thi tập tin dictionarymanager.exe.

9.3.3 Hướng dẫn sử dụng chương trình Mobile Dictionary Tra từ:

Sử dụng phím mũi tên lên & xuống để chọn từ cần

tra.

Nhập trực tiếp từ cần tra vào ô nhập liệu như cách

soạn tin nhắn trên điện thoại.

Lưu ý: danh sách từ được sắp xếp theo thứ tự chữ cái

tiếng Việt: a ă â… và

sắc huyền hỏi ngã nặng

Gõ dấu tiếng Việt: Phím ‘*’: dấu thanh (sắc, huyền, hỏi…) Phím ‘#’: dấu mũ (ă, â, ô… và ký tự đ)

Lưu ý: Gõ dấu ngay sau nguyên âm. Có thể bồ sung dấu sau khi nhập xong từ, bằng cách

di chuyển con trỏ đến sau nguyên âm và nhấn phím bỏ dấu.

Hình 9.4 Tra từ và gõ tiếng Việt

Page 119: Từ điển trên dtdd

Chương 9 . Cài đặt và thử nghiệm

116

Chọn từ điển cần dùng:

Trong màn hình tra từ hoặc xem nghĩa: chọn

Option Dictionaries từ điển cần dùng

Lưu ý: ứng dụng chỉ hiển thị những từ điển đã được

chép vào thẻ nhớ (E:\MDict_Data\)

Hình 9.5 Chọn từ điển cần dùng

Setting:

Default Dictionary: chọn từ điển hiển thị khi khởi

động ứng dụng.

Remote Sound: nhập địa chỉ website phát âm từ.

Lưu ý: Mobile_dict phiên bản 2.0 dành cho điện thoại

dùng hệ điều hành Symbian 7.x mới có mục Remote

Sound

Hình 9.6 Setting list Phát âm từ đang xem nghĩa:

Trong màn hình xem nghĩa, chọn

Option Pronounce.

Lưu ý:

Chỉ có các ngôn ngữ hỗ trợ phát âm mới có chức

năng Pronounce khi xem nghĩa.

Phiên bản 2.0 cho phép kết nối Internet và nghe

phát âm trực tuyến thông qua địa chỉ được qui định

trong Setting Remote Sound. Hình 9.7 Phát âm từ

Page 120: Từ điển trên dtdd

Chương 9 . Cài đặt và thử nghiệm

117

9.3.4 Hướng dẫn sử dụng chương trình Dictionary Manager Dictionary Manager là ứng dụng hỗ trợ Mobile Dictionary. Do hạn chế của

thiết bị di động, Mobile Dictionary không hỗ trợ chức năng chỉnh sửa dữ liệu từ

điển do đó mục tiêu của Dictionary Manager là để đáp ứng nhu cầu này. Các chức

năng chính của chương trình Dictionary Manager là:

• Import, export dữ liệu giữa Mobile Dictionary và Dictionary Manger

• Thao tác trên dữ liệu của Dictionary Manager: thêm, xoá, sửa một từ trong từ

điển, compact dữ liệu.

Hình 9.8 Màn hình chính của ứng dụng Dictionary Manager

Page 121: Từ điển trên dtdd

Chương 9 . Cài đặt và thử nghiệm

118

9.3.4.1 Import từ dữ liệu của ứng dụng Mobile Dictionary Ở màn hình chính chọn biểu tượng Import trên thanh công cụ hoặc chọn menu

Import từ menu Dictionary.

Hình 9.9 Chọn chức năng Import

Trên hộp thoại Open chọn từ điển cần import (*.mdic), chọn OK. Trên hộp thoại Save As gõ tên file thông tin (*.ini), chọn Save. Dictionary Manager sẽ tự động generate các file (*.ini), (*.idxa), (*.idxb),

(*.dic) và hiển thị từ điển lên màn hình chính.

9.3.4.2 Mở một từ điển có sẵn Ở màn hình chính chọn biểu tượng Open Dict trên thanh công cụ hoặc chọn

menu Open từ menu Dictionary.

Hình 9.10 Chọn chức năng mở một từ điển có sẵn

Trên hộp thoại Open chọn từ điển cần mở (*.ini), chọn OK, Dictionary

Manager sẽ hiển thị từ điển lên màn hình chính.

Page 122: Từ điển trên dtdd

Chương 9 . Cài đặt và thử nghiệm

119

9.3.4.3 Thao tác trên dữ liệu của Dictionary Manager Để thao tác trên từ điển của Dictionary Manager, trước hết phải mở một tự điễn

có sẵn (*.ini).

Hình 9.11 Màn hình biên soạn từ

9.3.4.3.1 Thêm một từ vào từ điển Ở màn hình chính chọn biểu tượng New Word từ thanh công cụ hoặc chọn

menu New từ menu Word.

Hình 9.12 Chọn chức năng thêm từ

Ở màn hình biên soạn từ, soạn từ cần thêm. Sau đó bấm nút Lưu.

Page 123: Từ điển trên dtdd

Chương 9 . Cài đặt và thử nghiệm

120

9.3.4.3.2 Sửa một từ có sẵn trong từ điển Ở màn hình chính chọn từ cần sửa từ danh sách các từ, sau đó chọn chức năng

sửa Edit Word từ thanh công cụ hoặc chọn menu Edit từ menu Word.

Ở màn hình biên soạn từ, chính sửa từ. Sau đó bấm nút Lưu.

9.3.4.3.3 Xoá một từ trong từ điển Ở màn hình chính chọn từ cần xoá trong danh sách các từ, sau đó chọn chức

năng xoá Delete Word từ thanh công cụ hoặc menu Delete từ menu Word.

9.3.4.3.4 Compact từ điển trên Dictionary Manager Thao tác xoá từ không xoá hẳn từ mà chỉ đánh dấu xoá. Khi thực hiện xoá

nhiều lần, sẽ có nhiều từ bị đánh dấu xoá. Tập tin dữ liệu phải lưu những thông tin

không cần thiết hay còn gọi là thông tin rác (thông tin bị đánh dấu xoá). Để bỏ

những thông tin rác này ta phải thực hiện compact dữ liệu.

Ở màn hình chính chọn chức năng Compact từ thanh công cụ hoặc từ menu

Compact của menu Dictionary.

9.3.4.3.5 Export ra dữ liệu Mobile Dictionary Trước hết phải mở một từ điển có sẵn (*.ini).

Chọn chức năng Export từ thanh công cụ hoặc từ menu Export của menu

Dictionary.

Ở hộp thoại Open gõ vào tên file, chọn OK.

Page 124: Từ điển trên dtdd

Chương 9 . Cài đặt và thử nghiệm

121

9.4 Thử nghiệm 9.4.1 Kết quả thử nghiệm hoạt động của ứng dụng Máy ảo:

STT Tính năng thử nghiệm Đánh giá

1 Khởi động ứng dụng Khởi động nhanh, từ khi bắt đầu đến khi hiển thị danh sách từ < 1s

2 Hiển thị danh sách từ và nghĩa tiếng Việt

Sau khi cài đặt thư viện nhận dạng freetype.dll và font verdref.ttf ; hiển thị đầy đủ tiếng Việt Unicode. Tuy nhiên một số ít ký tự phiên âm của các từ điển trích từ freedict không hiển thị đúng.

3 Tốc độ tra từ và hiển thị nghĩa Tra từ rất nhanh, hiển thị nghĩa gần như ngay lập tức. Tìm kiếm chính xác tiếng Việt

4 Phát âm Sử dụng loa của máy tính. Chất lượng âm thanh tốt. Bảng 9.3 Kết quả thử nghiệm trên máy ảo

Máy điện thoại Nokia N-gage QD:

STT Tính năng thử nghiệm Đánh giá

1 Khởi động ứng dụng Từ khi bắt đầu đến khi hiển thị danh sách từ 2s đến 3s

2 Hiển thị danh sách từ và nghĩa tiếng Việt

Sau khi cài đặt thư viện nhận dạng freetype.dll và font verdref.ttf ; hiển thị đầy đủ tiếng Việt Unicode. Tuy nhiên một số ít ký tự phiên âm của các từ điển trích từ freedict không hiển thị đúng.

3 Tốc độ tra từ và hiển thị nghĩa

Tra từ rất nhanh, hiển thị nghĩa gần như ngay lập tức. Tìm kiếm chính xác tiếng Việt. Nội dung nghĩa dài được hiển thị trong thời gian chấp nhận được < 3s

4 Phát âm Sử dụng loa điện thoại. Chất lượng âm thanh trung bình. Một số từ tiếng Việt nghe không rõ.

Bảng 9.4 Kết quả thử nghiệm trên máy thật

9.4.2 So sánh với các từ điển hiện có trên thị trường Hiện nay trên thị trường Việt Nam có hai ứng dụng từ điển với chức năng

tương tự được biết đến rộng rãi là TMADict của công ty TMA Solution và

MTDEVA của công ty Lạc Việt.

Tuy nhiên, qua tìm hiểu ý kiến của người sử dụng và chạy thử chương trình,

phiên bản MTDEVA miễn phí của Lạc Việt (download từ www.mobifuns.net ) có

nhiều khuyết điểm như: bản miễn phí chỉ có từ điển V-E, dung lượng khá lớn 5MB;

giao diện khó sử dụng; đặc biệt thường xuyên xảy ra lỗi làm ngừng chương trình.

Page 125: Từ điển trên dtdd

Chương 9 . Cài đặt và thử nghiệm

122

Vì vậy TMADict là lựa chọn hàng đầu. Trên cơ sở này, chúng em mạnh dạn chỉ

thực hiện so sánh cụ thể đối với ứng dụng TMADict.

Tiêu chí so sánh Mobile_Dict TMADict

Tập tin cài đặt

Một tập tin Mobile_Dict.sis duy nhất cho mọi loại điện thoại thông minh Series 60 Có tập tin cài đặt font tiếng Việt riêng.

Hai tập tin cài đặt khác nhau cho Symbian 6.1 và 7.x. Trong đó bản dành cho Symbian 6.1 không có phần cài đặt font tiếng Việt (phải thực hiện bằng cách copy vào bộ nhớ)

Bộ nhớ máy (drive C:) dùng lưu trữ font tiếng Việt

285 KB (hai tập tin) Symbian 6.1: 285 KB (hai tập tin) Symbian 7.x: 919 KB (bốn tập tin)

Bộ nhớ sử dụng khi chạy chương trình

248 KB 180 KB

Khởi động ứng dụng

Hiển thị từ điển mặc định sau 2–3s

Không hiển thị danh sách từ cho đến khi người dùng chọn từ điển. Quá trình khởi động ứng dụng và hiển thị từ điển được chọn > 5s

Số lượng từ điển

31 loại từ điển 9 loại từ điển

Dung lượng tập tin dữ liệu từ điển

E-V: 68998 từ: 4.3 MB V-E: 91000 từ: 1.9 MB

E-V: 68000 từ: 4.8 MB V-E: 24000 từ: 1.2 MB

Tốc độ tra từ < 1s < 1s

Thời gian hiển thị nghĩa

Từ điển E-V: tra từ “love”: màn hình hiển thị nghĩa có 58 dòng : 2s

Từ điển E-V: tra từ “love”: màn hình hiển thị nghĩa có 53 dòng : 3s

Phát âm Tiếng Việt, tiếng Anh. Không có Bảng 9.5 So sánh với TMADict

Từ ngày 18/06, phiên bản đầu tiên của đề tài (chưa có phát âm) đã được cung

cấp miễn phí cho người dùng tại địa chỉ:

http://www.mobiledict.vsccorp.net

Trang web hiện nay:

http://www.th2001.net/mdict

http://www.fit.hcmuns.edu.vn/products/mobiledict

Page 126: Từ điển trên dtdd

Chương 10 . Tổng kết

123

Chương 10 Tổng kết

10.1 Một số kết quả đạt được Trong quá trình thực hiện đề tài “Xây dựng ứng dụng từ điển trên điện thoại

di động”, chúng em đã thu được những kết quả sau:

Tìm hiểu được các loại điện thoại di động trên thị trường và kĩ thuật lập trình

ứng dụng trên những thiết bị này. Với số lượng người sử dụng rất lớn, việc

phát triển và kinh doanh phần mềm trên điện thoại di động hứa hẹn sẽ phát

triển mạnh mẽ trong thời gian tới.

Tìm hiểu được hệ điều hành Symbian và các thiết bị di động sử dụng hệ điều

hành này – vốn đang “làm mưa làm gió” trên thị trường. Đi sâu nghiên cứu

cách thức lập trình C++ trên Symbian Series 60 – dòng điện thoại thông

minh được ưa chuộng nhất hiện nay.

Tìm hiểu được cách thức tổ chức và nén dữ liệu từ điển hiệu quả trên môi

trường điện thoại di động có nhiều hạn chế về tài nguyên.

Xây dựng được ứng dụng từ điển Mobile_Dict trên điện thoại thông minh

Symbian Series 60. Với dữ liệu phong phú, tra từ nhanh và chính xác, hoạt

động ổn định, và đặc biệt là được tích hợp vào điện thoại di động,

Mobile_Dict đã phần nào đáp ứng được nhu cầu của người sử dụng. Ứng

dụng còn hỗ trợ phát âm cho một số ngôn ngữ (Việt, Anh) ở mức tốt nhất mà

chúng em có thể thực hiện.

Ngoài ra, chúng em đã xây dựng chương trình DictionaryManager, hoạt

động trên máy tính, cho phép người dùng thêm, sửa, xóa nội dung các bộ từ

điển.

Page 127: Từ điển trên dtdd

Chương 10 . Tổng kết

124

10.2 Hướng phát triển Bổ sung các bộ từ điển nhất là từ điển chuyên môn; hoàn thiện, thống nhất

định dạng dữ liệu.

Bổ sung chức năng tra từ trong những ứng dụng khác của điện thoại (như

Tin nhắn, trình duyệt WAP…)

Hoàn thiện chức năng phát âm, đặc biệt là phát âm tiếng Anh. Trên cơ sở đó,

xây dựng ứng dụng “sách nói” trên điện thoại di động.

Phát triển ứng dụng trên các dòng điện thoại Symbian khác (như Series 90,

Quartz). Do kiến trúc nên tảng giống nhau, chỉ khác giao diện hiển thị, nên

khi phát triển cho dòng điện thoại Symbian khác chỉ cần thay đổi phần giao

diện.

Xây dựng ứng dụng Web cho phép người sử dụng điện thoại di động kết nối

Internet (qua GPRS…) và tra từ trực tuyến hoặc tra nghĩa các từ không tim

thấy trên máy cục bộ.

Page 128: Từ điển trên dtdd

Phụ lục A. SDKs và ứng dụng HelloWorld

125

Phụ lục A SDKs và ứng dụng HelloWorld

A.1 SDKs (Software Development Kits) SDK là gói sản phẩm hỗ trợ việc phát triển ứng dụng gồm công cụ biên dịch, tài

liệu hướng dẫn, ví dụ mẫu, phương tiện kiểm lỗi… Để phát triển ứng dụng C++ cho

Symbian, lập trình viên phải sử dụng bộ SDK hỗ trợ lập trình cho điện thoại thông

minh. Hiện nay, các SDK C++ cho Symbian được cung cấp miễn phí trên diễn đàn

chính thức của Nokia forum.nokia.com. Chỉ cần đăng kí thành viên (miễn phí) ,

chọn series 60 Development Tool & SDKs là có thể download rất nhiếu bộ SDK

cho các IDE khác nhau (kích thước hơn 100MB).

Ở đây chỉ đề cập đến SDKs dành cho IDE Ms VC++ bản tiếng Anh. Hiện nay

trên thị trường có hai loại điện thoại thông minh với hai phiên bản hệ điều hành

Symbian 6.1 và 7.0. Vì vậy cũng có hai loại SDKs chính:

SDK for Symbian OS, for C++, 1st Edition (Symbian 6.1)

SDK for Symbian OS, for C++, 2nd Edition (Symbian 7.x), hiện đã có

bản Feature Pack 2.

Ứng dụng phát triển bằng SDK, 1st Edition có thể chạy tốt trên các điện thoại di

động Symbian 7.x. Ngược lại, ứng dụng phát triển bằng SDK, 2nd Edition, nếu giữ

nguyên các thông số mặc định thì không thể cài đặt trên thiết bị sử dụng Symbian

6.1. Tuy nhiên ngày nay phần lớn các điện thoại thông minh mới sản xuất đều sử

dụng hệ điều hành Symbian 7.x nên Nokia đã ngưng phát triển SDK cho Symbian

6.1 và tập trung hoàn thiện các bộ SDK cho Symbian 7.x. Ngoài ra, SDK Help của

hai bộ SDK 1st Edition và 2nd Edition có khác nhau ở phần các control giao diện,

trong đó SDK Help 1st Edition liệt kê các lớp control do hệ điều hành Symbian cung

cấp với đầy đủ hàm thành viên rất hữu ích khi lập trình giao diện. Vì vậy, phần lớn

các lập trình viên muốn phát triển ứng dụng trên tất cả các máy điện thoại thông

minh đều sử dụng cả hai bộ SDK, tùy theo trường hợp mà có sự thay đổi linh hoạt.

Page 129: Từ điển trên dtdd

Phụ lục A. SDKs và ứng dụng HelloWorld

126

A.2 Hướng dẫn cài đặt SDKs cho Series 60. (Một và nhiều SDK) Hướng dẫn cài đặt bộ SDK for Symbian OS, for C++, 2nd Edition, FP2 và SDK

for Symbian OS, for C++, 1st Edition.

Những phần mềm cần thiết:

MS Windows 2000 (SP3), hoặc MS Windows SP

MS Visual Studio 6, hoặc MS Visual Studio .NET (cần Visual C++)

ActivePerl 5.6.1 (download miễn phí tại http://www.ActiveState.com/ActivePerl/)

Series 60 2nd Edition SDK for Symbian C++ Supporting Feature Pack 2 và Series

60 1st Edition SDK for Symbian C++ (download miễn phí tại

http://forum.nokia.com (yêu cầu đăng kí thành viên))

JDK 1.4.2_05 trở lên (cần cho các công cụ hỗ trợ của bộ SDKs, download miễn phí

tại http://java.sun.com)

Lưu ý:

Không có chương trình Active Perl sẽ không biên dịch cũng như xây dựng ứng

dụng được.

Đường dẫn chứa các bộ SDK nên để mặc định như sau: Drive Letter:\ Symbian

Qui ước gọi %EPOCROOT% chính là đường dẫn chứa thư mục Epoc32 (Symbian\

8.0a\ S60_2nd_FP2\ hay Symbian\6.1\Series60\ (không có tên ổ đĩa (drive letter))).

Đường dẫn này rất quan trọng giúp biên dịch và xây dựng (compile & build) các

ứng dụng của chúng ta. Đối với bộ SDK 2nd Edition 2.x %EPOCROOT% được xác

định tự động, tuy nhiên đối với SDK 1st Edition %EPOCROOT% phải được lập

trình viên xác định trước khi compile & build ứng dụng.

Việc chuyển đổi giữa các SDK được thực hiện bằng công cụ “EnvironmentSwitch”

của SDK 2nd Ed, FP2. Có thể tìm hướng dẫn chi tiết trong SDK Help và sử dụng

công cụ này tại đường dẫn Symbian\ 8.0a\ S60_2nd_FP2\ Series60Tools\

Environmentswitch\

Quá trình biên dịch và xây dựng ứng dụng của SDK yêu cầu có các đường dẫn

trong biến PATH của hệ điều hành Windows như sau: %ActivePerl%\ bin;

%JDK%\ bin; %MS Visual Studio .NET 2003%\vc7\bin và %MS Visual Studio

.NET 2003% \common7\IDE (hoặc %MS Visual Studio%\vc98\bin và %MS Visual

Studio%\common\ IDE). Trong đó %XXX% là đường dẫn cài đặt chương trình XXX

Page 130: Từ điển trên dtdd

Phụ lục A. SDKs và ứng dụng HelloWorld

127

trên máy tính. Biến PATH của Windows có thể được điều khiển bằng một trong hai

cách sau:

o Command line: sử dụng lệnh path (path /? để biết cách sử dụng)

o Windows: nhấp phải vào biểu tượng My Computer, chọn Properties Tab

Advanced Button Environment Variables.

A.3 Biên dịch và cài đặt ví dụ HelloWorld A.3.1 Đối với máy ảo

Khi sử dụng SDK cho IDE MS VC++, việc biên dịch, kiểm lỗi trên máy ảo

được thực hiện thuận lợi như khi phát triển ứng dụng cho máy tính.

Hướng dẫn cách biên dịch chương trình HelloWorld cho máy ảo bằng SDK 2nd

Edition FP 2:

Đầu tiên chép thư mục %EPOCROOT% \Series60Ex\HelloworldBasic\ vào

thư mục gốc ổ đĩa C: để tiện sử dụng.

Vào thư mục \HelloWorldBasic\Group\, dùng công cụ makmake tạo tập tin

dự án cho VC7 (C:\HelloWorldBasic\group\makmake helloworld.mmp vc7).

Lúc này thư mục Group\ chứa đầy đủ các tập tin dự án của VC++7.0.

Khởi động .NET và mở dự án vừa tạo:

Hình A. 1 Cửa sổ HelloWorldBasic project

Page 131: Từ điển trên dtdd

Phụ lục A. SDKs và ứng dụng HelloWorld

128

Chọn Build Rebuild Solution để xây dựng chương trình. Nếu thành công ta có kết quả sau (bỏ qua các warning):

Hình A. 2 Build Solution HelloworldBasic

Lưu ý: Nếu quá trình biên dịch không thành nên xem lại biến PATH của Windows đã đề cập trong phần cài đặt.

Sau khi biên dịch thành công ta chọn Debug > Start để thực thi ứng dụng. Khi VC .NET hỏi chương trình thực thi ta chọn %EPOCROOT% \epoc32\ release\wins\udeb\epoc.exe (shortcut nằm trong Start All Program Series 60 Developer Tools 2nd Edition SDK Feature Pack 2\1.0 Emulator (Debug)). Lúc này trình giả lập được khởi động:

Hình A. 3 Trình giả lập SDK 2nd Edition, FP2

Page 132: Từ điển trên dtdd

Phụ lục A. SDKs và ứng dụng HelloWorld

129

Ta dùng chuột nhấn các phím định vị (lên, xuống, trái, phải) hoặc nhấn trực

tiếp trên bàn phím để chọn ứng dụng cần thực thi (trường hợp này là

HelloworldBasic (HW nằm ở cuối màn hình))

Hình A. 4 HelloWorld trên máy giả lập

Trong quá trình chạy thử ứng dụng trên, ta có thể đặt breakpoint ở bất kì đâu

trong mã nguồn và khi chạy tới đó, IDE sẽ tự động chuyển sang môi trường

debug cho phép ta chạy từng bước, xem giá trị các biến… như một ứng dụng

phát triển trên máy tính bình thường.

Lưu ý:

Các tập tin thực thi (trên máy ảo) được phát sinh tại đường dẫn

%EPOCROOT%\epoc32\release\wins\udeb\z\system\APPS\HelloWorldBasi

c\. Nếu không muốn một ứng dụng tồn tại trên máy ảo (vì đã có quá nhiều

ứng dụng hay lý do nào khác) chỉ cần vào đường dẫn trên và xóa thư mục

của ứng dụng đó đi.

Page 133: Từ điển trên dtdd

Phụ lục A. SDKs và ứng dụng HelloWorld

130

Ổ đĩa C:\ của máy ảo có đường dẫn: %EPOCROOT%\epoc32\wins\c\. Nếu

ứng dụng có liên quan tới tập tin, lập trình viên muốn chạy được trên máy ảo

phải chép các tập tin đó vào đường dẫn trên. Lúc này trong ứng dụng, đường

dẫn của tập tin cần sử dụng sẽ là: “C:\\...”. (Đương nhiên không thể sử dụng

đường dẫn của máy tính trong máy giá lập)

A.3.2 Đối với máy thực Việc biên dịch ứng dụng cho máy thực độc lập với việc tạo tập tin dự án, phát

triển, chạy thử và kiểm lỗi trên máy ảo. Chỉ cần hai tập tin .mmp và bld.inf là có thể

tiến hành biên dịch ứng dụng cho máy thật.

Công cụ biên dịch chính mà SDK cung cấp là abld.bat, tuy nhiên mỗi ứng

dụng cần một tập tin abld.bat cho riêng nó. Nghĩa là đối với mỗi ứng dụng khi biên

dịch trên máy thật, trước tiên cần phát sinh tập tin abld.bat. Việc này được thực

hiện bằng công cụ bldmake. Tại cửa sổ dòng lệnh nhập: C:\HelloWorldBasic\group\bldmake bldfiles.

Lúc này dựa vào tập tin bld.inf, tập tin biên dịch ứng dụng abld.bat

được tạo ra trong thư mục Group.

Sau khi đã có tập tin abld.bat, có thể biên dịch ứng dụng cho máy

thực theo một trong hai cách:

Biên dich bằng IDE Ms VC++ 7.0 (MS VC++ 6.0 không thực hiện được):

Hình A. 5 Release build

Chọn Build > Build Solution hoặc Build > Rebuild Solution

Biên dịch bằng dòng lệnh C:\HelloWorldBasic\group\abld build thumb urel Dù thực hiện bằng cách nào, nếu biên dịch thành công, các tập tin thực thi mà

quan trọng nhất là tập tin .app sẽ được tạo ra tại đường dẫn:

Page 134: Từ điển trên dtdd

Phụ lục A. SDKs và ứng dụng HelloWorld

131

%EPOCROOT%\Epoc32\Release\thumb\urel\. Lúc này, mọi thứ đã sẵn sàng, chỉ cần dùng makesis để tạo tập tin cài đặt và tiến hành cài đặt trên máy thực. Lưu ý:

Tập tin .pkg sử dụng đường dẫn tương đối để chỉ đến các tập tin thực thi đã phát sinh. Nếu thư mục HelloworldBasic bị di chuyển sang vị trí khác thì đường dẫn này không còn chính xác và máy sẽ báo lỗi khi bạn thực thi lệnh makesis. Có thể sửa lại đường dẫn cho phú hợp trước khi tạo tập tin .sis. Cụ thể với ứng dụng HelloWorldBasic ở trên, tập tin Helloworldbasic.pkg có phần các tập tin cần cài đặt như sau:

;original sis file "..\..\..\epoc32\release\thumb\urel\HelloWorldBasic.APP" -"!:\system\apps\HelloWorldBasic\HelloWorldBasic.app" "..\..\..\epoc32\data\z\system\apps\HelloWorldBasic\HelloWorldBasic.rsc" -"!:\system\apps\HelloWorldBasic\HelloWorldBasic.rsc" "..\..\..\epoc32\data\z\system\apps\HelloWorldBasic\HelloWorldBasic_caption.rsc" -"!:\system\apps\HelloWorldBasic\HelloWorldBasic_caption.rsc" "..\..\..\epoc32\data\z\system\apps\HelloWorldBasic\HelloWorldBasic.aif" -"!:\system\apps\HelloWorldBasic\HelloWorldBasic.aif" Do đã di chuyển thư mục HelloWorldBasic nên việc sử dụng đường dẫn tương

đối (..\..\..\) không đúng. Ta cần sửa lại đường dẫn tuyệt đối như sau trước khi gọi lệnh makesis:

;updated sis file "%EPOCROOT%\epoc32\release\thumb\urel\HelloWorldBasic.APP"

-"!:\system\apps\HelloWorldBasic\HelloWorldBasic.app" "%EPOCROOT%\epoc32\data\z\system\apps\HelloWorldBasic\HelloWorldBasic.rsc" -"!:\system\apps\HelloWorldBasic\HelloWorldBasic.rsc" "%EPOCROOT%\epoc32\data\z\system\apps\HelloWorldBasic\HelloWorldBasic_caption.rsc" -"!:\system\apps\HelloWorldBasic\HelloWorldBasic_caption.rsc" "%EPOCROOT%\epoc32\data\z\system\apps\HelloWorldBasic\HelloWorldBasic.aif" -"!:\system\apps\HelloWorldBasic\HelloWorldBasic.aif"

Bộ SDK 1st Ed phát sinh toàn bộ các tập tin thực thi của một ứng dụng vào đường dẫn đã nêu trên. Trong khi đó SDK 2nd Ed, FP 2 chỉ phát sinh tập tin .app vào đường dẫn này; các tập tin còn lại được phát sinh theo đường dẫn: "%EPOCROOT%\epoc32\data\z\system\apps\Ten_ung_dung\ (*)

* %EPOCROOT% là đường dẫn chứa thư mục Epoc32 của bộ SDK

Page 135: Từ điển trên dtdd

Phụ lục B. Khái niệm cơ bản khi lập trình C++ trên hệ điều hành Symbian

132

Phụ lục B Khái niệm cơ bản khi lập trình C++ trên hệ điều hành Symbian

B.1 Các qui ước đặt tên Môi trường lập trình trên Symbian dùng các qui ước đặt tên để thể hiện ý nghĩa,

vai trò và tầm quan trọng của các lớp, biến, hàm trong mã nguồn. Các qui ước này

liên quan mật thiết đến việc quản lý tài nguyên (bộ nhớ, tập tin…) vốn rất hạn chế

trên điện thoại di động. Cụ thể:

B.1.1 Qui ước đặt tên lớp Loại Ví dụ Mô tả

Lớp bắt đầu bằng chữ T

TDesC, TPoint, TFileName Các lớp bắt đầu bằng chữ T không có hàm hủy. Nó giống như các kiểu dữ liệu xây dựng sẵn (built-in). Các lớp này cũng thường dùng thay cho struct.

Lớp bắt đầu bằng chữ C

CConsoleBase, CActive, CBase

Bất cứ lớp nào dẫn xuất từ lớp CBase đều bắt đầu bằng chữ C. Các lớp này luôn được cấp phát vùng nhớ trên heap.

Lớp bắt đầu bằng chữ R

RFile, RTimer, RWriteStream, RWindow

Bất cứ lớp nào thao tác với các tài nguyên (file, time, v.v…) đều bắt đầu bằng chữ R (viết tắt của từ Resource). Hầu hết các lớp này đều dùng hàm Close() để giải phóng nguồn tài nguyên mà nó sở hữu.

Lớp giao diện bắt đầu bằng chữ M

MGraphicsDeviceMap, MEikMenuObserver

Một giao diện (interface) gồm nhiều hàm ảo và không có dữ liệu. Các lớp bắt đầu bằng chữ M dùng trong đa kế thừa.

Các lớp static User, Math, Mem, ConeUtils Một lớp chỉ chứa toàn hàm static. Các lớp này thích hợp dùng chứa các hàm thư viện

Struct SEikControlInfo Kiểu dữ liệu struct thường bắt đầu bằng chữ S. Tuy nhiên, sau này trong Symbian người ta không dùng kiểu struct nữa mà thay vào đó là dùng các lớp bắt đầu bằng chữ T.

Bảng B. 1 Qui ước đặt tên lớp

Page 136: Từ điển trên dtdd

Phụ lục B. Khái niệm cơ bản khi lập trình C++ trên hệ điều hành Symbian

133

Khi lập trình, các lớp T, R, và C được sử dụng nhiều nhất trong đó việc giải

phóng vùng nhớ cho các đối tượng lớp C khi sử dụng xong là rất quan trọng. Khi

tạo ra một lớp mới, lập trình viên nên tuân thủ nguyên tắc đặt tên này giúp mã

nguồn có sự thống nhất, trong sáng và dễ quản lý. Cụ thể lớp mới chỉ có biến thành

viên T thì bắt đầu bằng T, chứa một biến thành viên là đối tượng lớp C thì là lớp C.

B.1.2 Qui ước đặt tên dữ liệu Loại Ví dụ Mô tả

Kiểu enum EMonday, ESolidBrush

Các hằng trong kiểu enum thường bắt đầu bằng chữ E và tên của enum thì bắt đầu bằng chữ T, chẳng hạn EMonday là thành phần của enum TDayOfWeek

Hằng số KRgbWhite, KMaxFileName

Các hằng số thường bắt đầu bằng chữ K

Biến thành viên

iDevice, iSize Biến thành viên của một lớp bắt đầu bằng chữ “i” . Chữ “i” là viết tắt của từ “instance”

Tham số aDevice, aSize Các tham số bắt đầu bằng chữ “a”. Chữ “a” là viết tắt của từ “argument”

Các biến “automatic”

device, size, x, y Các biến automatic là các biến mà việc quản lý vùng nhớ do Symbian thực hiện tự động. Người dùng không cần cấp phát vùng nhớ khi khai báo và không hủy khi sử dụng xong.

Bảng B. 2 Qui ước đặt tên biến

Page 137: Từ điển trên dtdd

Phụ lục B. Khái niệm cơ bản khi lập trình C++ trên hệ điều hành Symbian

134

B.1.3 Qui ước đặt tên hàm Loại Ví dụ Mô tả

Hàm “none-leaving”

Foo(), Draw() Hàm “none-leaving” là những hàm trong quá trình thực thi chắc chắn không gặp những lỗi có thể làm sụp chương trình mà không phải do lập trình như thiếu bộ nhớ, người dùng xóa tập tin…Nói cách khác, hàm “none-leaving” bao giờ cũng thực hiện thành công và trả về giá trị lập trình viên đã dự tính.

Hàm “leaving” CreateL(), NewL(), AllocL()

Các hàm “leaving” kết thúc bằng ký tự L. Ngược lại với hàm“none-leaving” một hàm “leaving” là một hàm có cấp phát bộ nhớ, mở file, v.v…, nói chung là thực hiện những thao tác liên quan đến tài nguyên mà có thể không thành công do thiếu tài nguyên hoặc do những điều kiện về môi trường (không phải lỗi do lập trình). Lúc này lập trình viên phải “bẫy” được lỗi xảy ra để không sụp chương trình. Chi tiết về hàm “leaving” sẽ được trình bày trong phần quản lý lỗi.

Hàm LC AllocLC(), CreateLC(), OpenLC()

Cấp phát vùng nhớ cho một đối tượng và đưa đối tượng vào cleanup stack. Sẽ trình bày chi tiết trong phần quản lý lỗi

Hàm lấy dữ liệu

Size(), Device(), GetTextL()

Các hàm này thường là danh từ và dùng để truy cập đến các biến private trong một lớp. Các hàm truy cập dữ liệu có liên quan đến tài nguyên (bộ nhớ, file, v.v…) thường kết thúc bằng chữ L và bắt đầu bằng chữ Get.

Các hàm thiết lập

SetSize(), SetDevice(), SetTextL()

Các hàm này thường bắt đầu bằng chữ Set và dùng để gán giá trị cho một thuộc tính, thông thường là thuộc tính private trong một lớp. Các hàm có liên quan đến tài nguyên thường kết thúc bằng chữ L.

Bảng B. 3 Qui ước đặt tên hàm

Lưu ý: lập trình viên không bắt buộc phải tuân theo các qui ước đặt tên trên. Tuy

nhiên tất cả các lớp, biến, hằng số, tên hàm… của Symbian đều được đặt theo qui

ước này. Nên muốn phát triển ứng dụng cho hệ điều hành Symbian, lập trình viên

bắt buộc phải biết các qui tắc này. Đồng thời khi xây dựng các lớp mới hay kế thừa

cho ứng dụng của mình, lập trình viên rất nên tuân theo qui ước này nhằm giúp mã

nguồn trong sáng, dễ hiểu, dễ bảo trì và chuẩn hóa.

Page 138: Từ điển trên dtdd

Phụ lục B. Khái niệm cơ bản khi lập trình C++ trên hệ điều hành Symbian

135

B.2 Kiểu dữ liệu cơ bản Môi trường lập trình trên Symbian cung cấp các kiểu dữ liệu cơ bản tương

đương với các kiểu xây dựng sẵn của C++. Đó là các lớp dữ liệu cơ bản mà khi sử

dụng không cần cấp phát hay hủy 1 cách tường minh; các lớp này bắt đầu bằng ký

tự T. Lưu ý, khi lập trình trên Symbian không nên dùng các kiểu dữ liệu xây dựng

sẵn của C++ mà hãy dùng các (lớp) kiểu cơ bản mà Symbian cung cấp. Lý do đơn

giản vì thiết bị thực (chạy hệ điều hành Symbian) có thể không làm việc tốt với các

kiểu dữ liệu xây dựng sẵn của C++.

B.2.1 Kiểu số nguyên:

Kiểu dữ liệu có dấu

Kiểu dữ liệu không

dấu Kiểu dữ liệu C++ tương đương Mô tả

TInt8 TUint8 signed char & unsigned char

Số nguyên 8 bit có dấu và không dấu

TInt16 TUint16 short int & unsigned short int Số nguyên 16 bit có dấu và không dấu

TInt32 TUint32 long int & unsigned long int Số nguyên 32 bit có dấu và không dấu

TInt64 Số nguyên 64 bit

TInt TUint int & unsigned int Số nguyên ít nhất 32 bit có dấu và không dấu

Bảng B. 4 Kiểu số nguyên

B.2.2 Kiểu số thực:

Kiểu dữ liệu Kiểu dữ liệu C++

tương đương Mô tả

TReal32 float Số thực 32 bit

TReal64 double Số thực 64 bit

TReal Tương đương với TReal64 Bảng B. 5 Kiểu số thực

Lưu ý: Hều hết các HĐH Symbian hiện nay không hỗ trợ phần cứng xử lý số chấm

động. Vì vậy các phép toán trên số thực sẽ chậm hơn rất nhiều lần so với số nguyên.

Vì vậy bạn nên hạn chế tối đa việc sử dụng số thực.

Page 139: Từ điển trên dtdd

Phụ lục B. Khái niệm cơ bản khi lập trình C++ trên hệ điều hành Symbian

136

B.2.3 Các kiểu cơ bản khác:

Kiểu dữ liệu Kiểu dữ liệu C++

tương đương Mô tả

TChar 32-bit unsigned integer Kiểu ký tự của Symbian, dài 32 bit, cung cấp nhiều hàm xử lý trên ký tự

TText8 char Kiểu ký tự 1 byte TText16 wchar_t Kiểu ký tự Unicode (2 bytes) TText Tương đương với TText16

TBool int Kiểu logic, nhận 2 giá trị ETrue/ EFalse

TAny void Bảng B. 6 Các kiểu cơ bản khác

Lưu ý:

[1] Kiểu TText16 có cùng kích thước với TUint, ở đây chỉ có ý nghĩa giúp

chương trình tường minh hơn (TText16 chứa ký tự, TUint chứa số nguyên

không dấu)

[2] Lớp TChar là lớp ký tự đặc biệt của Symbian, biểu diển được các ký tự

Unicode trong khoảng 0x10000 to 0xFFFFF (trong khi TText16 chỉ biểu

diễn ký tự 16 bit). Đồng thời lớp TChar cũng cung cấp 1 loạt các hàm xử lý

ký tự (viết thường, viết hoa, phân loại kiểu Unicode...)

Page 140: Từ điển trên dtdd

Phụ lục C. Chuẩn nén Dictzip#

137

Phụ lục C Chuẩn nén Dictzip#

Chuẩn nén Dictzip# được chúng em đề nghị để giải quyết nén dữ liệu và truy

xuất ngẫu nhiên trên tập tin nén cho riêng ứng dụng của mình.

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.

Cấu trúc lưu trữ

Định dạng của tập tin nén theo chuẩn Dictzip#

Các qui ước chung:

o Ký hiệu cho 1 byte:

o Ký hiệu cho một số lượng byte có thể thay đổi :

Định dạng tập tin: một tập tin Dictzip# gồm một chuỗi các thành phần

(các tập dữ liệu nén). Định dạng của từng phần sẽ được trình bày trong

phần dưới đây. Các thành phần chỉ đơn giản sắp xếp liên tiếp nhau trong

tập tin, mà không có các thông tin thêm gì ở phía trước, giữa, hay sau

chúng.

Định dạng các thành phần:

o Thành phần đầu tập tin:

Page 141: Từ điển trên dtdd

Phụ lục C. Chuẩn nén Dictzip#

138

o Thành phần dữ liệu:

Ý nghĩa các thành phần:

o L: là chiều dài tối đa của khối dữ liệu sau khi giải nén không vượt

quá 64 KB.

o XLEN: là chiều dài của khối dữ liệu liền sau đó.

o uncompr length words: cho biết kích thước từng khối dữ liệu (2

byte) sau khi giải nén.

Page 142: Từ điển trên dtdd

Phụ lục D. Các bộ dữ liệu của từ điển

139

Phụ lục D Các bộ dữ liệu của từ điển

Dữ liệu nghĩa từ điển

Từ điển Số từ Kích thước Nguồn dữ liệu

Vietnamese - English 91146 1.9 MB [1] Vietnamese - France 39071 1.7 MB [2] Vietnamese - German 11922 0.4 MB [2] Vietnamese - Vietnamese 30158 2.0 MB [2] English - English 121962 8.1 MB [3] English - Vietnamese 68998 4.3 MB [1] English - German 93279 1.4 MB [3] English - France 8799 0.2 MB [3] English - Spanish 5907 0.1 MB [3] English - Netherlandish 7714 0.2 MB [3] English - Italian 4519 < 0.1 MB [3] English - Russian 3385 < 0.1 MB [3] English - Afrikaans 6397 < 0.1 MB [3] German - Vietnamese 45070 4.7 MB [2] German - English 81674 1.3 MB [3] German - Netherlandish 12812 0.3 MB [3] German - Portuguese 8742 0.2 MB [3] German - France 8168 0.1 MB [3] German - Italian 4454 < 0.1 MB [3] France - Vietnamese 47951 2.9 MB [2] France - English 7831 0.2 MB [3] France - Netherlandish 9604 0.2 MB [3] France - German 6114 0.2 MB [3]

Portuguese - English 10398 0.2 MB [3] Spanish - English 4502 0.1 MB [3] Afrikaans - English 5129 < 0.1 MB [3] Swedish - English 5220 < 0.1 MB [3] Danish - English 3997 < 0.1 MB [3] Turkish - English 1026 < 0.1 MB [3] Czech - English 489 < 0.1 MB [3] Afrikaans - German 3800 < 0.1 MB [3] Computing 13798 2.2 MB [3]

Page 143: Từ điển trên dtdd

Phụ lục D. Các bộ dữ liệu của từ điển

140

Với nguồn dữ liệu nghĩa từ điển được lấy từ :

[1] English Study 4.0

[2] http://www.informatik.uni-leipzig.de/~duc

[3] http://freedict.de

Dữ liệu âm thanh

Âm thanh tiếng Việt: Đồ án “Đọc văn bản tiếng Việt” của môn học “Xử lý

ngôn ngữ tự nhiên” do T.S Đinh Điền hướng dẫn.

Âm thanh tiếng Anh: Được phát sinh từ các từng tiếng Anh thông dụng trên

trang web http://www.dictionaryresource.com

Page 144: Từ điển trên dtdd

Tài liệu tham khảo

141

Tài liệu tham khảo

Tài liệu viết

[1] Martin Tasker, Jonathan Allin, Jonathan Dixon, John Forrest, Mark Heath, Tim Richardson, Mark Shackman, Professional Symbian Programming, Wrox Press Ltd., 2000

[2] T.S. Dương Anh Đức, Th.S. Trần Hạnh Nhi, “Nhập môn Cấu trúc dữ liệu và thuật toán”

[3] Trương Hải Bằng, “Giáo trình Cấu trúc dữ liệu 2”, 2001

[4] Tino Pyssysalo, Terje Bergstrom, Jurgen Bocklage, Pawel Defee, Patrik Granholm, Juuso Huttunen, Ville Karkkainen, Matti Kilponen, Matti Kilponen, Tomi Koskinen, Mika Matela, Ilkka Otsala, Antti Partanen, Timo Puronen, Jere Seppal, Juha Siivola, Saiki Tanabe, Jukka Tarhonen, Tommi Terasvirta, Tuukka Turunen, Tommi Valimaki , “Programming for the Series 60 Platform and Symbian OS”, John Wiley & Sons Ltd, 2003

[5] Nguyễn Thiện Chương, Phạm Tuấn Sơn, “Xây dựng ứng dụng từ điển trên Pocket PC”, Luận văn cử nhân tin học, Đại học Khoa học Tự nhiên Tp.Hồ Chí Minh, 2004

[6] Đặng Minh Thắng, Chu Nguyên Tú, “Xây dựng hệ thống máy tính điều khiển từ xa sử dụng công nghệ Bluetooth”, Luận văn cử nhân tin học, Đại học Khoa học Tự nhiên Tp.Hồ Chí Minh, 2004

[7] Phạm Khắc Hưng, Võ Hồng Duyên, “Tìm hiểu và nghiên cứu kỹ thuật phát triển ứng dụng trên môi trường Symbian OS”, Luận văn cử nhân tin học, Đại học Khoa học Tự nhiên Tp.Hồ Chí Minh, 2004

[8] Huỳnh Tấn Kiệt, Trần Thị Thùy Trang, “Nghiên cứu hệ điều hành Symbian 6.0 và Xây dựng ứng dụng minh họa trên điện thoại di động Nokia 9210”, Luận văn cử nhân tin học, Đại học Khoa học Tự nhiên Tp.Hồ Chí Minh, 2004

[9] T.S Đinh Điền, “Giáo trình xử lý ngôn ngữ tự nhiên”, 2004

[10] Series 60 SDK Help – Nokia Series 60

Page 145: Từ điển trên dtdd

Tài liệu tham khảo

142

Website

[1] http://www.allaboutsymbian.com

[2] http://www.forum.nokia.com

[3] http://www.newlc.com

[4] http://www.symbian.com

[5] http://www.informatik.uni-leipzig.de/~duc

[6] http://freedict.de

[7] http://www.dictionaryresource.com

[8] http://www.wlug.org.nz

[9] http://www.die.net (Dictzip – Linux Man Page)

Dữ liệu từ điển

[1] English Study 4.0

[2] http://www.informatik.uni-leipzig.de/~duc

[3] http://freedict.de

[4] http://www.dictionaryresource.com