TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN

KHOA CÔNG NGHỆ THÔNG TIN

BỘ MÔN CÔNG NGHỆ PHẦN MỀM

BÙI TẤN LỘC

- 0112013

CAO THÁI PHƯƠNG THANH - 0112031

NGHIÊN CỨU VÀ XÂY DỰNG

ỨNG DỤNG TỪ ĐIỂN

TRÊN ĐIỆN THOẠI DI ĐỘNG

KHÓA LUẬN CỬ NHÂN TIN HỌC

GIÁO VIÊN HƯỚNG DẪN

Th.S NGUYỄN TẤN TRẦN MINH KHANG

Th.S TRẦN MINH TRIẾT

NIÊN KHÓA 2001 - 2005

LỜI CÁM ƠN

Chúng em xin chân thành cảm ơn Khoa Công nghệ Thông tin, trường Đại học

Khoa học Tự nhiên, Đại học Quốc gia Tp. Hồ Chí Minh đã tạo điều kiện thuận lợi

cho chúng em học tập và thực hiện đề tài tốt nghiệp này.

Chúng em xin bày tỏ lòng biết ơn sâu sắc đến thầy Nguyễn Tấn Trần Minh

Khang, thầy Trần Minh Triết đã tận tình hướng dẫn, chỉ bảo chúng em trong quá

trình thực hiện đề tài.

Chúng em xin chân thành cám ơn quý Thầy Cô trong Khoa Công nghệ Thông

tin đã tận tình giảng dạy, trang bị cho em những kiến thức quý báu trong những

năm học vừa qua.

Chúng con xin chân thành cảm ơn Ông Bà, Cha Mẹ đã luôn động viên, ủng hộ

vật chất lẫn tinh thần trong suốt thời gian qua.

Chúng em xin cảm ơn sự quan tâm, giúp đỡ và ủng hộ của anh chị, bạn bè trong

quá trình thực hiện khóa luận.

Mặc dù đã cố gắng hoàn thành khóa luận trong phạm vi và khả năng cho phép

nhưng chắc chắn sẽ không tránh khỏi những thiếu sót. Chúng em rất mong nhận

được sự thông cảm, góp ý và tận tình chỉ bảo của quý Thầy Cô và các bạn.

Tp. Hồ Chí Minh, tháng 07 năm 2005

Nhóm sinh viên thực hiện

Bùi Tấn Lộc – Cao Thái Phương Thanh

Lời nói đầu

Công nghệ thông tin đang trở thành một phần quan trọng của cuộc sống. Các

thiết bị kĩ thuật cao ngày càng gần gũi với mọi hoạt động của con người. Đặc biệt

những năm gần đây, các thiết bị không dây - với ưu thế nhỏ gọn, dễ mang chuyển –

đã chứng tỏ được lợi ích to lớn cho người sử dụng. Trong đó điện thoại di động,

với các chức năng liên lạc, nổi bật lên như một thiết bị “không thể thiếu” trong cuộc

sống của nhiều người. Với sự phát triển nhanh chóng của công nghệ sản xuất thiết

bị không dây, điện thoại di động đã trở thành phương tiện đa chức năng (nghe nhạc,

chơi trò chơi, nhắc lịch làm việc…) phục vụ cho nhu cầu của người sử dụng mọi

lúc, mọi nơi.

Hệ điều hành Symbian là một hệ điều hành được thiết kế riêng để hoạt động tối

ưu trên các thiết bị di động vốn hạn chế về tài nguyên. Trên môi trường Symbian có

thể xây dựng hàng loạt ứng dụng tương tự máy tính cá nhân như: trình nghe nhạc

MP3, trình xem phim .AVI, ứng dụng văn phòng (hỗ trợ tập tin MS Word, MS

Excel…), các trò chơi 3D… Vì vậy sự ra đời của dòng điện thoại thông minh sử

dụng hệ điều hành Symbian với kiểu dáng tương đối nhỏ gọn, thiết kế đẹp mắt và

những ứng dụng hữu ích đã tạo ra một bước ngoặt mới trong thị trường điện thoại di

động. Đồng thời mở ra một hướng phát triển mới đầy hứa hẹn cho các công ty phần

mềm.

Bên cạnh đó, trong cuộc sống hiện nay, nhu cầu học tập, trao đổi kiến thức,

cũng như làm việc bằng ngoại ngữ là hết sức cần thiết. Sẽ rất tiện lợi nếu có một bộ

từ điển đa ngôn ngữ với đầy đủ chức năng, ngữ nghĩa nhưng nhỏ gọn, dễ mang

chuyển.

Vì những lý do trên, nhóm chúng em quyết tâm thực hiện đề tài “Nghiên cứu

và xây dựng ứng dụng từ điển trên điện thoại di động”

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

1

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

2

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

3

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

4

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

5

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

6

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

7

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

8

Chương 1 . Mở đầu

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.

9

Chương 1 . Mở đầu

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:

(cid:131) 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.

(cid:131) Đ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

(cid:131) 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.

(cid:131) 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

10

Chương 1 . Mở đầu

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.

11

Chương 2 . Tổng quan về hệ điều hành Symbian và điện thoại thông minh Series 60

Chương 2 Tổng quan về hệ điều hành Symbian và điện

thoại thông minh Series 60

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

12

Chương 2 . Tổng quan về hệ điều hành Symbian và điện thoại thông minh Series 60

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)

13

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

14

Chương 2 . Tổng quan về hệ điều hành Symbian và điện thoại thông minh Series 60

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.5 Smartphone áp dụng mô hình Pearl

Hình 2.4Communicator áp dụng mô hình Quartz

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

15

Chương 2 . Tổng quan về hệ điều hành Symbian và điện thoại thông minh Series 60

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:

(cid:131) 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.

(cid:131) Một bàn phím: có thể là bàn phím số hay QWERTY. (cid:131) 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. (cid:131) Một cổng tuần tự RS232: để giao tiếp với PC. (cid:131) 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:

(cid:131) Hoạt động tốn ít bộ nhớ và năng lượng nhất có thể. (cid:131) Các ứng dụng có thể hoạt động song song. (cid:131) 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.

(cid:131) 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…)

(cid:131) 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.

16

Chương 2 . Tổng quan về hệ điều hành Symbian và điện thoại thông minh Series 60

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

17

Chương 2 . Tổng quan về hệ điều hành Symbian và điện thoại thông minh Series 60

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

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

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:

(cid:131) 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 đó.

(cid:131) 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:

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

3.1.1.1 Series 60 Developer Platform 1.0 (Symbian 6.1)

Với các công nghệ:

(cid:131) 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)

(cid:131) 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.

(cid:131) XHTML browsing: duyệt WAP, lấy dữ liệu từ GPRS

(cid:131) MMS messaging: tin nhắn đa phưong tiện.

(cid:131) 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ệ:

(cid:131) 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

(cid:131) Wireless Messaging API (JSR 120): tin nhắn không dây

(cid:131) 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.

(cid:131) 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.

(cid:131) XHTML browsing over TCP/IP: trình duyệt WAP, hỗ trợ giao thức

phổ biến TCP/IP

(cid:131) MMS messaging with Synchronized Multimedia Integration

Language (SMIL): tin nhắn đa phương tiện với SMIL

20

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

(cid:131) 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.

(cid:131) OMA Client Provisioning: cung cấp các ứng dụng

(cid:131) 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

21

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++ 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:

(cid:131) Ư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…

(cid:131) 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++.

(cid:131) 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.

(cid:131) 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ô

22

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

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.

(cid:131) 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…

(cid:131) 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

23

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

Bốn application framework class chính là

(cid:131) 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.

(cid:131) 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.

(cid:131) 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.

(cid:131) 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

24

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

Ứ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

Hình 3.4 Một ứng dụng

Application / View architecture

kế thừa từ lớp CAknView.

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.

25

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

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

26

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 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:

(cid:131) 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.

(cid:131) 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.

27

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

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

KErrNotSupported (nền hệ thống không hỗ trợ hàm được gọi), KErrBadName

hiện thành công), KErrCancel (giá trị trả về khi hàm bị hủy khi đang thực hiện),

(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

28

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

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:

lỗi.

(cid:131) Hàm User::Leave() có tác dụng ngừng hàm đang thực hiện và trả về mã

(cid:131) 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

29

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

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

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;

}

thông qua toán tử new không thành công:

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

30

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

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

Xét ví dụ cụ thể sau:

Macro TRAP có 1 biến thể khác cho phép rút gọn code chương trình đó là

TRAPD(leaveCode,value=GetSomethingL()); // get a value

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:

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ử

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

new này sẽ ngừng ngay lập tức:

doExampleL() sẽ ngừng ngay và trả về giá trị lỗi cho macro TRAP hay TRAPD gọi

Trong ví dụ trên, nếu việc cấp phát myExample không thành công hàm

hàm này (nếu có).

31

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

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.

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

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:

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.

32

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

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

Minh họa lại ví dụ trên:

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

CleanupStack::PopAndDestroy() để hủy đối tượng sau khi hoàn thành hàm

Trong nhiều trường hợp ta có thể gọi hàm

void doExampleL()

{

. . . // pop from cleanup stack, and destroy, in one operation CleanupStack::PopAndDestroy(); //don’t need call delete }

leave:

Để 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

User::AllocLC() gồm việc gọi hàm User::Alloc() để cấp phát vùng nhớ sau

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*

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

33

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

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:

(cid:131) Cấp phát vùng nhớ cho đối tượng (và leave nếu không đủ bộ nhớ)

(cid:131) Khởi tạo các thành phần an toàn (không thể leave)

(cid:131) Đưa con trỏ đối tượng vào Cleanup stack (cid:131) 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 ý:

NewLC()(tự đưa đối tượng được cấp phát vào Cleanup stack)

(cid:131) Toàn bộ quá trình trên được thực hiện thông qua 2 hàm tĩnh: NewL(), and

(cid:131) Hàm dựng thứ 2 có tên là ConstructL().

class CSimple : public CBase { public: CSimple(TInt); //hàm dựng void Display(); private: TInt iVal; };

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 CCompound : public CBase { public: void Display(); ~CCompound(); static CCompound* NewL(TInt aVal); static CCompound* NewLC(TInt aVal);

Lớp CCompound chứa đối tượng CSimple như là biến thành viên

34

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

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

CCompound::CCompound(TInt aVal) { iVal=aVal; iChild = new (ELeave) CSimple(aVal); }

thường:

Lúc này, khi khởi tạo 1 đối tượng CCompound , nếu vì lý do nào đó mà việc

CCompound(TInt aVal) bị ngừng (leave). Lúc này đối tượng CCompound đã

cấp phát đối tương iChild (CSimple) không thành công. Hàm khởi tạo

đượ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()

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

như sau:

35

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

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

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

như sau:

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

static void PushL(TAny* aPtr);

static void PushL(TCleanupItem anItem);

thông qua các hàm overload:

36

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

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:

(cid:131) 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) (cid:198) kích thước của 16 bit descriptor = length * 2.

(cid:131) 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.

#if defined(_UNICODE) typedef TPtr16 TPtr; #else typedef TPtr8 TPtr;

#endif

Có thể hiểu rõ vấn đề thông qua đoạn code sau:

Trong đó, TPtr là một lớp descriptor và macro _UNICODE sẽ được định nghĩa mặc

định cho ứng dụng.

37

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

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:

(cid:131) 16 bit (ví dụ TDes16, TBuf16): dùng cho 16 bit descriptor

(cid:131) 8 bit (ví dụ TDes8, TBuf8): dùng cho 8 bit descriptor

(cid:131) 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:

(cid:131) 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.

(cid:131) TDes(the abstract modifiable descriptor class): truy xuất và quản lý

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.

chuỗi.

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:

(cid:131) _LIT16: tạo hằng chuỗi 16 bit

(cid:131) _LIT8: tạo hằng chuỗi 8 bit

(cid:131) _LIT: tạo hằng chuỗi kiểu độc lập (build independent type)

(cid:131) _L: sử dụng trực tiếp hằng chuỗi

_LIT(KFormat1,"Length is %d"); TBuf<256> x;

x.Format(KFormat1,8);//x= “Length is 8”

Hằng chuỗi được khai báo và sử dụng đơn giản như sau:

x.Format(_L("Length is %d");,8);//x= “Length is 8”

Có thể sử dụng macro _L để gọi trực tiếp hằng chuỗi

38

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

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.

39

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

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

40

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

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

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

descriptor (HBufC không thể thay đổi trực tiếp) sau khi được cấp phá

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

41

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

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

TFixedArray.

của C++. Mảng tĩnh được sử dụng thông qua lớp khuôn mẫu (templated class)

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”

(cid:131)

int aMang[100]; (cid:198) TFixedArray aMang;

(cid:131) CCoeControl* iControls[ENumControls]; (cid:198)

TFixedArray iControls;

Lưu ý:

mà ta đã quen thuộc trong C++)

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:

(cid:131) Đố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

42

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

(cid:131) Đố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ử.

(cid:131) Đố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

43

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

Đối với mảng dùng vùng nhớ phân đoạn, độ phân hạt là sức chứa của một đoạn vùng nhớ. Khi mảng mở rộng, bao giờ cũng được cấp thêm một hoặc nhiều đoạn nữa. Độ phân hạt của mảng được qui định khi xây dựng mảng. Có thể thấy việc lựa chọn giá trị này ảnh hưởng nhiều đến hiệu năng hoạt động của mảng cũng như của ứng dụng. Giá trị quá nhỏ làm việc cấp phát bộ nhớ xảy ra thường xuyên, giá trị quá lớn gây lãng phí bộ nhớ. 4.3.2.2 Phân loại mảng động

4.3.2.2.1 Mảng các phần tử có kích thước bằng nhau, vùng nhớ liên tục

Là đối tượng của lớp CArrayFixFlat, các phần tử có kích thước bằng nhau và được lưu liên tục trong vùng nhớ. Việc mở rộng được thực hiện bằng cách cấp phát lại vùng nhớ.

Hình 4.8 Mảng cùng kích thước, liên tục

4.3.2.2.2 Mảng các phần tử có kích thước bằng nhau, vùng nhớ phân đoạn

Là đối tượng của lớp CArrayFixSeg

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

44

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

4.3.2.2.3 Mảng các phần tử có kích thước khác nhau, vùng nhớ liên tục

Là đối tượng của lớp CArrayVarFlat

Hình 4.10 Mảng khác kích thước, liên tục

4.3.2.2.4 Mảng các phần tử có kích thước khác nhau, vùng nhớ phân đoạn

Là đối tượng của lớp CArrayVarFlat

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

4.3.2.2.5 Mảng packed, vùng nhớ liên tục (array of packed elements, flat buffer)

Là đối tượng của lớp CArrayPakFlat

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

45

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

Ngoài ra còn 2 lớp CArrayPtrFlat và CArrayPtrSeg dùng

chứa mảng con trỏ đến các đối tượng. Tuy nhiên người ta ít dùng 2 lớp này mà thay

vào đó là một lớp đơn giản, hiệu quả hơn: RPointerArray

4.3.2.3 Các lớp mảng động đặc biệt

Các lớp CArray… được thiết kế hỗ trợ dạng mảng động cho tất cả các loại đối

tượng. Các lớp này kế thừa từ những lớp trừu tượng khác, cũng như thực thi một số

lớp interface. Vì vậy dù rất mạnh mẽ, nhưng nếu ta sử dụng lớp CArray… để quản

lý mảng các số nguyên TInt thì có thể có sự lãng phí không cần thiết.

Vì vậy Symbian còn hỗ trợ một khuôn mẫu đặc biệt giúp việc sử dụng mảng

động cho các đối tượng đơn giản được nhanh và hiệu quả hơn. Cụ thể đối với mảng

các số nguyên và mảng con trỏ (là hai loại mảng vốn được sử dụng rất nhiều trong

C++), ta sẽ dùng lớp RArray, RArray và RPointerArray để việc

quản lý, sử dụng mảng động đơn giản và hiệu quả hơn nhiều lần.

Ngoài ra ta còn có thể dùng lớp RArray để tạo mảng động các đối

tượng có kích thước bằng nhau với điều kiện:

(cid:131) Kích thước mỗi phần tử không vượt quá 640 bytes

(cid:131) 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.

46

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

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.

47

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

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.

48

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

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à:

(cid:131) 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.

(cid:131) 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. Ghi chú Trường dữ liệu STT

1. Từ gốc 2. Từ loại Có kích thước biến động. Mỗi từ có thể thuộc về nhiều từ loại khác nhau:

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

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

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

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:

(cid:131) Tổ chức các mục từ có kích thước bằng nhau.

(cid:131) 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:

(cid:131) 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:

(cid:131) 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

Industrial Organizations”

24 40 65 Tổng kích thước (KB) 1617 3560 7741 Anh – Việt “ extra-sensory perception” Việt – Anh “không đúng với đặc tính của một ngôn ngữ” Anh – Anh “American Federation of Labor-Congress of

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.

50

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

5.1.2 Tổ chức các mục từ có kích thước biến động

Ưu điểm:

(cid:131) 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.

(cid:131) 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:

(cid:131) 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ự) 9 13 11 Anh – Việt Việt – Anh Anh – Anh 610 1204 1334

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

51

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

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:

(cid:131) 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:

(cid:131) 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:

(cid:131) 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:

(cid:131) 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ộ.

52

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

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.

53

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

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:

(cid:131) 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.

(cid:131) 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.

54

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

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ể

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

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

55

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

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 Việt – Anh Anh – Anh 11505 5238 22180 3994 (34.7%) 1827 (34.9%) 7486 (33.7%) 4363 (37.9%) 1993 (38.0%) 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

Anh – Việt Việt – Anh Anh – Anh 8 KB 4616 2053 8510 16 KB 4363 1993 8121 32 KB 4168 1950 7805 64 KB 4029 1916 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 16 KB 32 KB 64 KB 734 734 781 953 109 125 171 250 2953 2968 2984 3015

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

56

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

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 16 KB 32 KB 64 KB 703 718 750 953 93 109 156 218 234 250 250 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à:

(cid:131) 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.

(cid:131) 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.

(cid:131) 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.

(cid:131) 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

57

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

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:

(cid:131) 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ừ.

(cid:131) 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

58

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

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 Ý nghĩa

1. Word Mảng ký tự Từ gốc

2. Attribute Byte Kích thước Biến động 1 byte

Tổ hợp các cờ quy định từ loại của từ:

4 byte

(cid:57) Danh từ (cid:57) Động từ (cid:57) Tính từ (cid:57) Trạng từ (cid:57) Giới từ (cid:57) Các từ loại khác Vị trí mẫu tin nghĩa trong tập tin nghĩa Kích thước mẫu tin nghĩa 2 byte 3. MeaningPosition Số nguyên không dấu 4. MeaningLength Số nguyên không dấu

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

59

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

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à:

(cid:131) 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.

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

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

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

60

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

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:

(cid:131) N là tổng số cụm.

(cid:131) là số mục từ nhỏ nhất trong một cụm.

minS _ S là số mục từ trung bình trong một cụm.

(cid:131)

(cid:131) là số mục từ lớn nhất trong một cụm.

(cid:131) là cụm ký tự xuất hiện nhiều nhất.

2000

maxS maxc >S

(cid:131) là số cụm có số mục từ > 2000.

(cid:131) 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ố

N

Size (byte)

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

Từ điển

S

minS

maxS

maxc

2000

>S

_ S

%100

2000 × > N

Tin học 56 Anh – Anh 38 Anh – Việt 29 Việt – Anh 68 1405 1 246.39 1325 1 3209.53 1 2379.24 9406 1 1340.38 12813 “s” “s” “s” “c” 0 19 17 14 0 50 57 21 336 228 174 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.

61

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

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ố

N

S

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

minS

maxS

maxc

2000

>S

_ S

%100

2000 × > N

Size (byte) Từ điển

17.20

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

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ố

S

N

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

minS

maxS

maxc

2000

>S

_ S

%100

2000 × > N

Size (byte) Từ điển

3.46

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

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

62

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

S

N

%100

2000 × > N

Size (byte) Từ điển

Tin học Anh – Anh Anh – Việt Việt – Anh >> 3991 >> 3906 >> 3211 >> 3755 << 0 << 0 << 0 << 0 >> 39910 >> 39960 >> 32110 >> 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.

63

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

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

64

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

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:

(cid:131) 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.

(cid:131) 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.

(cid:131) 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:

(cid:131) Để 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ý

65

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

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.

(cid:131) 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.

(cid:131) 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.

(cid:131) 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.

66

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

Để 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:

(cid:131) 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.

(cid:131) 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.

(cid:131) 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ý.

67

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

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ể

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.

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

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

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

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

Controller xử lý.

(cid:131) 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.

68

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

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

69

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

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

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

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

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

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

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

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ị

70

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

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:

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

(cid:131) Tập tin nguồn: dạng văn bản

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

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

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

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

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

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

ngữ.

(cid:131) 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

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

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

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

dịch ứng dụng.

.loc

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

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

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.

71

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

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:

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

(cid:131) Simple, non-window-owning controls

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

(ELeave)…

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

SetContainerWindowL()

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)

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ỉ

(cid:131) Control kết hợp hay Window-owning controls

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

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

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

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

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

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

72

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

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

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

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

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

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

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

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.

73

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

Để 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.

74

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

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:

(cid:131) 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 “ư”.

(cid:131) 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”.

(cid:131) 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,

Chữ cái

Sắc

Huyền

Hỏi

Ngã

Nặng

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

Biên dưới (lb) a

Biên trên (ub) b

d e

e f

i o

j 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

75

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

• 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

(cid:131) 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

76

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

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

(cid:131) 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.

77

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

(cid:131) 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, …

(cid:131) 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 Á, …

(cid:131) 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.

(cid:131) Để 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

78

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

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 Kích thước đã nén (MB)

Số tiếng trong thư viện Khoảng 10.000 tiếng Khỏang 6623 tiếng Khoảng 400.000 tiếng Khoảng 4100 tiếng 18 21 Việt Anh

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

79

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

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,

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

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

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

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

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

(cid:131) 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ó để

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

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.

80

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

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

81

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

STT

Actor

Ý nghĩa

1

User

Người sử dụng

Bảng 7.1 Danh sách Actor

STT

Actor

Ý nghĩa

InitApp

Khởi động ứng dụng

1

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

2

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

3

Setting

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

4

Pronounce

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

5

LookUpWord

Tra từ

6

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

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

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

(cid:131) Hiển thị bộ từ điển được chọn mặc định

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

(cid:131) Ứ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

(cid:131) Ứ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ó

82

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

• Đ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

(cid:131) 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ừ

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

(cid:131) 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

83

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

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

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

(cid:131) Ứ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.

(cid:131) 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)

(cid:131) 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”

(cid:131) Người dùng chọn điểm truy cập

(cid:131) 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.

(cid:131) Nhận dữ liệu âm thanh từ website

(cid:131) Phát âm thanh nhận được

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

(cid:131) 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

(cid:131) 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

84

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

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

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

(cid:131) 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ừ.

(cid:131) 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ừ)

(cid:131) Ứ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

(cid:131) 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

(cid:131) 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

85

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

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

(cid:131) 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ó

86

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

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

Hình 7.2 Class diagram

87

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

Lớp đối tượng Ý nghĩa

STT 1 CMobile_DictApp Loại Control

2 CMobile_DictDocument Control

3 CMobile_DictAppUi Control

Lớp Application cửa ứng dụng Lớp Document của ứng dụng 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 10 CAknExSettingItem CMobile_dict_text_view

Boundary Lớp item setting 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 Boundary Lớp richtextbox hiển thị 12 CRichControl

Control Control 13 14 CDict_handle CDict_index_array

Control 15 CDict_hash

Control Control Control Control Control 16 17 18 19 20 RDict_hash_letter1 RDict_hash_letter2 RDict_hash_letter3 CWav_handle CWav_index_array

Control 21 CWav_hash

nghĩa từ (hỗ trợ tiếng Việt và các định dạng hiển thị) Lớp xử lý tra từ Lớp xử lý mảng các mục từ được load lên danh sách Lớp xử lý bảng băm dữ liệu từ Lớp xử lý băm cấp 1 Lớp xử lý băm cấp 2 Lớp xử lý băm cấp 3 Lớp xử lý phát âm Lớp xử lý mảng các mục âm thanh tìm thấy Lớp xử lý bảng băm dữ liệu âm thanh

88

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

22 TextToSpeech Control

23 CClientEngine Control

24 MClientObserver Interface

25 MyUtility Control

26 CMyZip Control

27 CZLib Control

28 TMyCharCollection Control Lớp xử lý biến đổi từ thành dữ liệu phát âm Lớp xử lý kết nối với website phát âm bằng giao thức http Lớp giao diện bắt các sự kiện khi kết nối với website Lớp chứa các công cụ, tiện ích dùng chung cho ứng dụng Lớp xử lý nén dữ liệu theo chuẩn DictZip# Lớp xử lý nén dữ liệu theo chuẩn Zip 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

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

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

XL3 Tìm kiếm từ LookUpWord 3

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

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

XL6 Nghe phát âm từ Pronounce 6

Bảng 7.4 Danh sách các xử lý chính

89

Chương 7 . Phân tích thiết kế ứng dụng từ điển 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

90

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

TH2:

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

91

Chương 7 . Phân tích thiết kế ứng dụng từ điển 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

92

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

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

93

Chương 7 . Phân tích thiết kế ứng dụng từ điển 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ừ

94

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

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

95

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

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

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

TH2:

96

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

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

97

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

7.5.1 Màn hình tra từ

STT Kiểu

Listbox

1

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

Textbox Nhập từ cần tra.

Mô tả

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

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

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

STT

1

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

Kiểu Mô tả

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

hiển thị nghĩa

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

98

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

7.5.3 Menu chính

Hình 7.16 Submenu About

Hình 7.15 Submenu Dictionaries

Mô tả Kiểu

STT 1

Dictionries

Pronounce

Setting About

Exit

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) 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) Vào màn hình cài đặt thông số Hiển thị phần help của ứng dụng Hiển thị phần tác giả của ứng dụng Thoát khỏi ứng dụng

2

3 4 4.1 Help 4.2 About 5

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

STT

Kiểu

1

2 CAknExSettingListItemData

CAknExSettingItem

Mô tả Qui định thông số dạng radiobox 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

Hình 7.17 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

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à:

(cid:131) 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.

(cid:131) 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.

(cid:131) 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

100

Chương 8 . Ứng dụng hỗ trợ quản lý dữ liệu trên Desktop

8.2.1.1 Danh sách các Actor

STT Actor 1. User Ý nghĩa 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ừ.

ShowWordsMeanings Hiển thị nghĩa của từ được chọn.

3.

PartOfSpeechFilter

Lọc danh sách các từ hiển thị theo từ loại.

4.

AddNewWord

Thêm một từ mới vào bộ từ điển có sẵn.

5.

DeleteWord

Xóa một từ trong bộ từ điển có sẵn.

6.

UpdateWord

Cập nhật một từ trong bộ từ điển có sẵn.

7.

CompactDictionary

Compact dữ liệu từ điển.

8.

ExportDictionary

Export dữ liệu từ điển trên Desktop sang dữ liệu từ điển

9.

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

(cid:131) 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.

101

Chương 8 . Ứng dụng hỗ trợ quản lý dữ liệu trên Desktop

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.

(cid:131) 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ẽ

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

yêu cầu người dùng gõ tên tập tin từ điể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ó.

102

Chương 8 . Ứng dụng hỗ trợ quản lý dữ liệu trên Desktop

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

(cid:131) 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.

(cid:131) 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ó.

103

Chương 8 . Ứng dụng hỗ trợ quản lý dữ liệu trên Desktop

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

(cid:131) 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.

(cid:131) 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ó.

104

Chương 8 . Ứng dụng hỗ trợ quản lý dữ liệu trên Desktop

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

(cid:131) 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.

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

(cid:131) Dòng sự kiện khác

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

105

Chương 8 . Ứng dụng hỗ trợ quản lý dữ liệu trên Desktop

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

Lớp xử lý chính cho lớp màn hình chỉnh 5. ModifyHandle Control sửa từ

Lớp xử lý chính cho lớp màn hình chính 6. DictHandle Control của ứng dụng

Bảng 8.3 Các lớp chính

106

Chương 8 . Ứng dụng hỗ trợ quản lý dữ liệu trên Desktop

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

ImportDictionary

1. XL1

LoadDictionary

2. XL2

3. XL3 4. XL4 5. XL5 6. XL6 7. XL7 8. XL8

ShowWordMeanings PartOfSpeechFilter AddNewWord RemoveWord UpdateWord CompactDictionary

ExportDictionary

9. XL9

Import dữ liệu từ điển trên điện thoại di động sang dữ liệu dùng trên Desktop Nạp một bộ từ điển có sẵn để thêm, xóa, sửa các từ. Hiển thị nghĩa của từ được chọn. Lọc danh sách các từ hiển thị theo loại từ Thêm một từ mới vào bộ từ điển có sẵn. Xóa một từ trong bộ từ điển có sẵn. Cập nhật một từ trong bộ từ điển có sẵn. Compact dữ liều từ điển 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.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

107

Chương 8 . Ứng dụng hỗ trợ quản lý dữ liệu trên Desktop

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

108

Chương 8 . Ứng dụng hỗ trợ quản lý dữ liệu trên Desktop

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ả

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,

1

Màn hình chính của ứng dụng

sửa các từ trong các bộ dữ liệu từ điển có

sẵn., …

Cho phép thêm hoặc chỉnh sửa nội dung của

2

Màn hình biên soạn từ

một từ.

Bảng 8.5 Các màn hình giao diện

109

Chương 8 . Ứng dụng hỗ trợ quản lý dữ liệu trên Desktop

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

110

Chương 8 . Ứng dụng hỗ trợ quản lý dữ liệu trên Desktop

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ừ

111

Chương 9 . Cài đặt và thử nghiệm

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:

(cid:131) Công cụ phân tích, thiết kế: Rational Rose 2000

(cid:131) Môi trường cài đặt ứng dụng: Microsoft Windows XP SP1

(cid:131) 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++

(cid:131) Môi trường lập trình (IDE):

o Microsoft Visual C++ 6.0

o Microsoft Visual C++ 7.0

(cid:131) 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:

(cid:131) Bộ thư viện nén/ giải nén Zlibpp

(cid:131) Microsoft Speech SDK 5.1

112

Chương 9 . Cài đặt và thử nghiệm

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ả

Package 1 MobileDictionary Application

2 Package DictionaryManager Application Chứa chương trình ứng dụng Từ điển mobile_dict.app (trên mobile) Chứa chương trình ứng dụng quản lý dữ liệu Từ điển DictionaryManager.exe (trên desktop)

Package Chứa các bộ dữ liệu Từ điển. Package Chứa font Unicode hiển thị tiếng Việt Package Chứa các tập tin âm thanh tiếng Việt, Anh.

3 Data Font 4 5 VoiceData 6 zlibpp DLL

7 Zlibce DLL Bộ thư viện nén/ giải nén dữ liệu Từ điển trên mobile Bộ thư viện nén/ giải nén dữ liệu Từ điển trên desktop

SpeechServer 8 9 MS Speech SDK Package Chứa website phát âm cho mobile DLL Bộ thư viện phát âm tiếng Anh

Bảng 9.1 Implement Model

113

Chương 9 . Cài đặt và thử nghiệm

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

(cid:131) Bộ nhớ máy điện thoại (drive C:) còn trống ít nhất 300 KB

(cid:131) 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:

(cid:131) RAM 128 MB

(cid:131) .NET Famework 1.1

9.3.2 Cài đặt

Đối với Mobile_Dict:

(cid:131) 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:

(cid:131) Cài đặt tập tin vnfont.sis vào điện thoại

(cid:131) Khởi động lại máy (có thể tắt rồi mở máy).

(cid:131) Cài đặt ứng dụng: cài đặt tập tin mobile_dict.sis vào điện thoại

(cid:131) 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:

114

Chương 9 . Cài đặt và thử nghiệm

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(cid:198)ă(cid:198)â… và

sắc(cid:198)huyền(cid:198)hỏi(cid:198)ngã(cid:198)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 ý:

Hình 9.4 Tra từ và gõ tiếng Việt

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.

115

Chương 9 . Cài đặt và thử nghiệm

Chọn từ điển cần dùng:

Trong màn hình tra từ hoặc xem nghĩa: chọn

Option(cid:198)Dictionaries(cid:198)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(cid:198)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

Hình 9.7 Phát âm từ

trong Setting(cid:198)Remote Sound.

116

Chương 9 . Cài đặt và thử nghiệm

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

117

Chương 9 . Cài đặt và thử nghiệm

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.

118

Chương 9 . Cài đặt và thử nghiệm

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.

119

Chương 9 . Cài đặt và thử nghiệm

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

Ở màn hình biên soạn từ, chính sửa từ. Sau đó bấm nút Lưu.

sửa Edit Word từ thanh công cụ hoặc chọn menu Edit từ menu Word.

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.

120

Chương 9 . Cài đặt và thử nghiệm

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:

1

Khởi động ứng dụng

2

Hiển thị danh sách từ và nghĩa tiếng Việt

3

Tốc độ tra từ và hiển thị nghĩa

4

Phát âm

Khởi động nhanh, từ khi bắt đầu đến khi hiển thị danh sách từ < 1s 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. 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 Sử dụng loa của máy tính. Chất lượng âm thanh tốt.

STT Tính năng thử nghiệm Đánh giá

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

2 Hiển thị danh sách từ và nghĩa tiếng Việt

3 Tốc độ tra từ và hiển thị nghĩa

4 Phát âm Từ khi bắt đầu đến khi hiển thị danh sách từ 2s đến 3s 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. 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 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.

121

Chương 9 . Cài đặt và thử nghiệm

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.

Mobile_Dict TMADict Tiêu chí so sánh

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.

285 KB (hai tập tin) 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ớ) Symbian 6.1: 285 KB (hai tập tin) Symbian 7.x: 919 KB (bốn tập tin)

248 KB 180 KB

Bộ nhớ máy (drive C:) dùng lưu font trữ tiếng Việt Bộ nhớ sử dụng chạy khi chương trình

Hiển thị từ điển mặc định sau 2–3s Khởi động ứng dụng

từ lượng 31 loại từ điển 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 9 loại 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

Số điển Dung lượng tập tin dữ liệu từ điển Tốc độ tra từ

< 1s Từ điển E-V: tra từ “love”: màn hình hiển thị nghĩa có 53 dòng : 3s Thời gian hiển thị nghĩa

Phát âm < 1s Từ điển E-V: tra từ “love”: màn hình hiển thị nghĩa có 58 dòng : 2s 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

122

Chương 10 . Tổng kết

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:

(cid:131) 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.

(cid:131) 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.

(cid:131) 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.

(cid:131) 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.

(cid:131) 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.

123

Chương 10 . Tổng kết

10.2 Hướng phát triển

(cid:131) 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.

(cid:131) 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…)

(cid:131) 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.

(cid:131) 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.

(cid:131) 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ộ.

124

Phụ lục A. SDKs và ứng dụng HelloWorld

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:

(cid:131) SDK for Symbian OS, for C++, 1st Edition (Symbian 6.1) (cid:131) 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.

125

Phụ lục A. SDKs và ứng dụng HelloWorld

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

Những phần mềm cần thiết:

(cid:131) MS Windows 2000 (SP3), hoặc MS Windows SP

(cid:131) MS Visual Studio 6, hoặc MS Visual Studio .NET (cần Visual C++)

(cid:131) ActivePerl 5.6.1 (download miễn phí tại http://www.ActiveState.com/ActivePerl/) (cid:131) Series 60 2nd Edition SDK for Symbian C++ Supporting Feature Pack 2 và Series

for Symbian C++

(download miễn phí

tại

60 1st Edition SDK

http://forum.nokia.com (yêu cầu đăng kí thành viên))

(cid:131) 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 ý:

(cid:131) 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.

(cid:131) Đường dẫn chứa các bộ SDK nên để mặc định như sau: Drive Letter:\ Symbian

(cid:131) 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.

(cid:131) 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\

(cid:131) 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

for Symbian OS, for C++, 1st Edition.

126

Phụ lục A. SDKs và ứng dụng HelloWorld

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 (cid:198) Tab

Advanced (cid:198) 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:

(cid:131) Đầ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.

(cid:131) 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).

(cid:131) Khởi động .NET và mở dự án vừa tạo:

Lúc này thư mục Group\ chứa đầy đủ các tập tin dự án của VC++7.0.

Hình A. 1 Cửa sổ HelloWorldBasic project

127

Phụ lục A. SDKs và ứng dụng HelloWorld

(cid:131) Chọn Build(cid:198)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.

(cid:131) 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(cid:198) All Program(cid:198) Series 60 Developer Tools(cid:198) 2nd Edition SDK Feature Pack 2\1.0 (cid:198) 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

128

Phụ lục A. SDKs và ứng dụng HelloWorld

(cid:131) 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

(cid:131) 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

Lưu ý:

phát triển trên máy tính bình thường.

(cid:131) 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.

129

Phụ lục A. SDKs và ứng dụng HelloWorld

(cid:131) Ổ đĩ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

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:

hiện bằng công cụ bldmake. Tại cửa sổ dòng lệnh nhập:

(cid:131) 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

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à tại đường dẫn: .app sẽ được

(cid:131) Biên dịch bằng dòng lệnh

trọng nhất tập tạo tin ra là quan

130

Phụ lục A. SDKs và ứng dụng HelloWorld

%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 ý:

thể với ứng dụng HelloWorldBasic ở trên, tập

;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

(cid:131) 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 tin .sis. Cụ Helloworldbasic.pkg có phần các tập tin cần cài đặt như sau:

"%EPOCROOT%\epoc32\release\thumb\urel\HelloWorldBasic.APP"

-"!:\system\apps\HelloWorldBasic\HelloWorldBasic.rsc"

"%EPOCROOT%\epoc32\data\z\system\apps\HelloWorldBasic\HelloWorldBasic_capt

ion.rsc" -"!:\system\apps\HelloWorldBasic\HelloWorldBasic_caption.rsc" "%EPOCROOT%\epoc32\data\z\system\apps\HelloWorldBasic\HelloWorldBasic.aif" -"!:\system\apps\HelloWorldBasic\HelloWorldBasic.aif"

-"!:\system\apps\HelloWorldBasic\HelloWorldBasic.app" "%EPOCROOT%\epoc32\data\z\system\apps\HelloWorldBasic\HelloWorldBasic.rsc"

* %EPOCROOT% là đường dẫn chứa thư mục Epoc32 của bộ SDK

(cid:131) 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\ (*)

131

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

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

Ví dụ

TDesC, TPoint, TFileName

Loại Lớp bắt đầu bằng chữ T

CActive,

Lớp bắt đầu bằng chữ C

CConsoleBase, CBase

Lớp bắt đầu bằng chữ R

RFile, RTimer, RWriteStream, RWindow

MGraphicsDeviceMap, MEikMenuObserver

Lớp giao diện bắt đầu bằng chữ M

Các lớp static

Struct

SEikControlInfo

Mô tả 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. 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. 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. 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. 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 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

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

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,

Các hằng trong kiểu enum thường bắt đầu bằng chữ

ESolidBrush

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,

Các hằng số thường bắt đầu bằng chữ K

KMaxFileName

Biến

thành

iDevice, iSize

Biến thành viên của một lớp bắt đầu bằng chữ “i” .

viên

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

device, size, x, y

Các biến automatic là các biến mà việc quản lý vùng

“automatic”

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

133

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.3 Qui ước đặt tên hàm

Loại

Ví dụ

Mô tả

Hàm

“none-

Foo(), Draw() Hàm “none-leaving” là những hàm trong quá trình thực

leaving”

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(),

Các hàm “leaving” kết thúc bằng ký tự L. Ngược lại với

NewL(),

hàm“none-leaving” một hàm “leaving” là một hàm có

AllocL()

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(),

Cấp phát vùng nhớ cho một đối tượng và đưa đối tượng

CreateLC(),

vào cleanup stack. Sẽ trình bày chi tiết trong phần quản

OpenLC()

lý lỗi

Hàm

lấy dữ

Size(),

Các hàm này thường là danh từ và dùng để truy cập đến

liệu

Device(),

các biến private trong một lớp. Các hàm truy cập dữ liệu

GetTextL()

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

SetSize(),

Các hàm này thường bắt đầu bằng chữ Set và dùng để

lập

SetDevice(),

gán giá trị cho một thuộc tính, thông thường là thuộc

SetTextL()

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.

134

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

Kiểu dữ liệu

Kiểu dữ liệu C++ tương đương

Mô tả

có dấu

liệu không dấu

Số nguyên 8 bit có dấu và

TInt8

TUint8

không dấu

signed char & unsigned

Số nguyên 16 bit có dấu và

TInt16

TUint16

short int & unsigned short int

không dấu

Số nguyên 32 bit có dấu và

TInt32

TUint32

long int & unsigned long int

không dấu

Số nguyên 64 bit

TInt64

Số nguyên ít nhất 32 bit có dấu

TInt

TUint

int & unsigned int

và không dấu

char

Bảng B. 4 Kiểu số nguyên

B.2.2 Kiểu số thực:

Kiểu dữ liệu Mô tả Kiểu dữ liệu C++ tương đương

TReal32 float Số thực 32 bit

TReal64 Số thực 64 bit double

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.

135

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.2.3 Các kiểu cơ bản khác:

Kiểu dữ liệu Mô tả Kiểu dữ liệu C++ tương đương

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ự Kiểu ký tự 1 byte Kiểu ký tự Unicode (2 bytes) char wchar_t

Tương đương với TText16 TText8 TText16 TText

Kiểu logic, nhận 2 giá trị ETrue/ EFalse TBool int

void TAny

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

136

Phụ lục C. Chuẩn nén Dictzip#

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#

(cid:131) 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 :

(cid:131) Đị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.

(cid:131) Định dạng các thành phần:

o Thành phần đầu tập tin:

137

Phụ lục C. Chuẩn nén Dictzip#

o Thành phần dữ liệu:

(cid:131) Ý 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.

138

Phụ lục D. Các bộ dữ liệu của từ điển

Phụ lục D

Các bộ dữ liệu của từ điển

Từ điển

Vietnamese - English Vietnamese - France Vietnamese - German Vietnamese - Vietnamese English - English English - Vietnamese English - German English - France English - Spanish English - Netherlandish English - Italian English - Russian English - Afrikaans German - Vietnamese German - English German - Netherlandish German - Portuguese German - France German - Italian France - Vietnamese France - English France - Netherlandish France - German

Số từ 91146 39071 11922 30158 121962 68998 93279 8799 5907 7714 4519 3385 6397 45070 81674 12812 8742 8168 4454 47951 7831 9604 6114 10398 4502 5129 5220 3997 1026 489 3800 13798

Kích thước 1.9 MB 1.7 MB 0.4 MB 2.0 MB 8.1 MB 4.3 MB 1.4 MB 0.2 MB 0.1 MB 0.2 MB < 0.1 MB < 0.1 MB < 0.1 MB 4.7 MB 1.3 MB 0.3 MB 0.2 MB 0.1 MB < 0.1 MB 2.9 MB 0.2 MB 0.2 MB 0.2 MB 0.2 MB 0.1 MB < 0.1 MB < 0.1 MB < 0.1 MB < 0.1 MB < 0.1 MB < 0.1 MB 2.2 MB

Nguồn dữ liệu [1] [2] [2] [2] [3] [1] [3] [3] [3] [3] [3] [3] [3] [2] [3] [3] [3] [3] [3] [2] [3] [3] [3] [3] [3] [3] [3] [3] [3] [3] [3] [3]

Portuguese - English Spanish - English Afrikaans - English Swedish - English Danish - English Turkish - English Czech - English Afrikaans - German Computing

Dữ liệu nghĩa từ điển

139

Phụ lục D. Các bộ dữ liệu của từ điển

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

140

Tài liệu tham khảo

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

141

Tài liệu tham khảo

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

[8] http://www.wlug.org.nz

[9] http://www.die.net (Dictzip – Linux Man Page)

[7] http://www.dictionaryresource.com

Dữ liệu từ điển

[1] English Study 4.0

[3] http://freedict.de

[2] http://www.informatik.uni-leipzig.de/~duc

[4] http://www.dictionaryresource.com

142