164
TRƯỜNG ĐẠI HC KHOA HC TNHIÊN KHOA CÔNG NGHTHÔNG TIN BMÔN CÔNG NGHPHN MM NGUYN NGC DUY QUANG – VŨ BÁ QUANG XÂY DNG BN ĐỒ TRÊN ĐIN THOI DI ĐỘNG CÓ HTRJAVA KHOÁ LUN CNHÂN TIN HC TP. HCM, 2005

Ban do tren dien thoai di dong co ho tro java

Embed Size (px)

Citation preview

Page 1: Ban do tren dien thoai di dong co ho tro java

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

NGUYỄN NGỌC DUY QUANG – VŨ BÁ QUANG

XÂY DỰNG BẢN ĐỒ TRÊN ĐIỆN THOẠI DI ĐỘNG CÓ HỖ TRỢ JAVA

KHOÁ LUẬN CỬ NHÂN TIN HỌC

TP. HCM, 2005

Page 2: Ban do tren dien thoai di dong co ho tro java

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

NGUYỄN NGỌC DUY QUANG - 0112194 VŨ BÁ QUANG - 0112395

XÂY DỰNG BẢN ĐỒ TRÊN ĐIỆN THOẠI DI ĐỘNG CÓ HỖ TRỢ JAVA

KHOÁ LUẬN CỬ NHÂN TIN HỌC

GIÁO VIÊN HƯỚNG DẪN Thạc sĩ LÊ THỤY ANH

NIÊN KHÓA 2001-2005

Page 3: Ban do tren dien thoai di dong co ho tro java

HO CHI MINH CITY – MOBILE MAP Version 1.0 / 07-2005

Siemens SK 65 Siemens SL 65

Page 4: Ban do tren dien thoai di dong co ho tro java

Sony Ericsson K750 Sony Ericsson P900

Samsung E100 Samsung E710

Page 5: Ban do tren dien thoai di dong co ho tro java

Nhận xét của giáo viên hướng dẫn

............................................................................................................................ ............................................................................................................................ ............................................................................................................................ ............................................................................................................................ ............................................................................................................................ ............................................................................................................................ ............................................................................................................................ ............................................................................................................................ ............................................................................................................................ ............................................................................................................................ ............................................................................................................................ ............................................................................................................................ ............................................................................................................................ ............................................................................................................................ ............................................................................................................................ ............................................................................................................................ ............................................................................................................................ ............................................................................................................................ ............................................................................................................................ ............................................................................................................................ ............................................................................................................................ ............................................................................................................................ ............................................................................................................................ ............................................................................................................................ ............................................................................................................................ ............................................................................................................................ ............................................................................................................................ ............................................................................................................................ ............................................................................................................................ ............................................................................................................................ ............................................................................................................................ ............................................................................................................................ ............................................................................................................................ ............................................................................................................................ ............................................................................................................................ ............................................................................................................................ ............................................................................................................................ ............................................................................................................................ ............................................................................................................................ ............................................................................................................................

Page 6: Ban do tren dien thoai di dong co ho tro java

Nhận xét của giáo viên phản biện

............................................................................................................................ ............................................................................................................................ ............................................................................................................................ ............................................................................................................................ ............................................................................................................................ ............................................................................................................................ ............................................................................................................................ ............................................................................................................................ ............................................................................................................................ ............................................................................................................................ ............................................................................................................................ ............................................................................................................................ ............................................................................................................................ ............................................................................................................................ ............................................................................................................................ ............................................................................................................................ ............................................................................................................................ ............................................................................................................................ ............................................................................................................................ ............................................................................................................................ ............................................................................................................................ ............................................................................................................................ ............................................................................................................................ ............................................................................................................................ ............................................................................................................................ ............................................................................................................................ ............................................................................................................................ ............................................................................................................................ ............................................................................................................................ ............................................................................................................................ ............................................................................................................................ ............................................................................................................................ ............................................................................................................................ ............................................................................................................................ ............................................................................................................................ ............................................................................................................................ ............................................................................................................................ ............................................................................................................................ ............................................................................................................................ ............................................................................................................................

Page 7: Ban do tren dien thoai di dong co ho tro java

i

LỜI CẢM ƠN

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

tin Trường Đại học Khoa học Tự nhiên đã tận tình dạy bảo cho chúng em nhiều

kiến thức bổ ích trong suốt thời gian học tập tại trường cũng như đã tạo điều kiện

cho chúng em được thực hiện đề tài này. Kính chúc các Thầy cô luôn dồi dào sức

khỏe và thành công trong cuộc sống.

Đặc biệt, chúng em xin bày tỏ lòng biết ơn sâu sắc đến thầy Lê Thụy Anh,

người đã tận tình hướng dẫn chúng em trong suốt thời gian thực hiện đề tài, cho

chúng em sự bình tĩnh và tự tin, giúp chúng em rút ra nhiều bài học kinh nghiệm

quý báu mỗi khi chúng em vấp phải những khó khăn. Chúng em khó có thể hoàn

thành được đề tài này nếu không nhờ sự tận tình chỉ bảo của thầy.

Chúng con cảm ơn cha mẹ và gia đình đã sinh ra và nuôi dạy chúng con

khôn lớn, luôn bên cạnh động viên và ủng hộ chúng con trên con đường mà chúng

con đã yêu thích và lựa chọn.

Cảm ơn các bạn sinh viên CNTT khóa 2001. Các bạn đã giúp đỡ, động viên

và hỗ trợ chúng tôi rất nhiều cũng như đóng góp cho chúng tôi nhiều ý kiến quý

báu, qua đó, giúp chúng tôi hoàn thiện hơn cho đề tài.

Mặc dù đã rất nỗ lực, cố gắng nhưng chắc hẳn đề tài vẫn còn nhiều thiếu sót.

Chúng em rất mong nhận được nhiều sự góp ý phê bình của Quý thầy cô, của các

anh chị và các bạn.

Một lần nữa, chúng em xin chân thành cảm ơn !

TP Hồ Chí Minh, tháng 7 năm 2005

Nhóm thực hiện

Nguyễn Ngọc Duy Quang – Vũ Bá Quang

Page 8: Ban do tren dien thoai di dong co ho tro java

ii

LỜI NÓI ĐẦU

Có thể nói rằng đề tài về bản đồ giao thông tại thành phố Hồ Chí Minh là

một đề tài không mới. Trong các năm qua, đã có nhiều khóa luận của các sinh viên

ngành CNTT nghiên cứu về chủ đề này, trong đó, đáng chú ý nhất là các đề tài của

sinh viên Khoa CNTT Trường ĐH Khoa học Tự nhiên TP.HCM. Các đề tài này đa

số đều được thực hiện rất tốt, hỗ trợ cho người dùng rất nhiều chức năng như : xem

bản đồ, tra cứu thông tin về các đường đi, các địa điểm, tra cứu các tuyến xe buýt…

đặc biệt là chức năng xác định lộ trình để tìm đường đi ngắn nhất giữa hai địa điểm

và hầu hết các đề tài nói trên đều được thực hiện nhắm đến môi trường sử dụng là

các máy tính để bàn hoặc Pocket PC.

Trong thời điểm hiện nay, trên thế giới cũng như tại Việt Nam, thị trường

cho điện thoại di động đang trở nên sôi động hơn bao giờ hết. Một mặt, do thu nhập

của người dân ngày càng được cải thiện cùng với nhu cầu trao đổi thông tin ngày

càng tăng khiến cho nhu cầu sử dụng điện thoại di động cũng tăng theo. Mặt khác,

các nhà sản xuất điện thoại di động nắm bắt được nhu cầu của giới trẻ ưa chuộng

những sản phẩm “high-tech” và cũng do yêu cầu cạnh tranh với nhau nên liên tục

tung ra nhiều sản phẩm mới với nhiều tính năng, cấu hình ngày càng được nâng lên

và giá thành ngày càng giảm. Chiếc điện thoại di động giờ đây không phải là một

món hàng quá xa xỉ. Nhờ đó, ngày càng có nhiều người sở hữu được phương tiện

trao đổi thông tin hữu ích này.

Cùng với sự phát triển của thị trường điện thoại di động là sự phát triển

mạnh mẽ của xu hướng lập trình phần mềm ứng dụng cho các thiết bị này. Phần

mềm cho các điện thoại di động hiện nay rất đa dạng mà đa số là các trò chơi, các

chương trình tiện ích như xử lý ảnh chụp, đổi đơn vị đo lường, từ điển, soạn thảo

văn bản, diệt virus…

Tuy vậy, một ứng dụng về bản đồ giao thông, mà cụ thể là bản đồ thành phố

Hồ Chí Minh dành cho điện thoại di động với các tính năng đã trình bày ở trên thì

gần như chưa có. Có thể nói là “gần như chưa có” bởi vì trước đây, trên một số tạp

chí, diễn đàn tin học cũng có giới thiệu một phần mềm bản đồ thành phố Hồ Chí

Page 9: Ban do tren dien thoai di dong co ho tro java

iii

Minh, tuy nhiên, phần mềm này cũng chỉ thực hiện được một chức năng là hiển thị

bản đồ. Tuy thế, chức năng này cũng chưa thật tốt do chỉ lưu được ảnh tĩnh của bản

đồ vào tập tài nguyên, vì vậy, không thể phóng to hay thu nhỏ bản đồ, và cũng vì

thế làm cho chương trình có kích thước lớn, tốc độ chậm, không thích hợp cho các

điện thoại có cấu hình trung bình hiện đang được dùng rất phổ biến tại thị trường

Việt Nam.

Với những lý do trên, nhóm chúng em chọn thực hiện đề tài “Xây dựng bản

đồ trên điện thoại di động hỗ trợ Java”. Mục tiêu của đề tài nhằm xây dựng một

phần mềm ứng dụng bản đồ giao thông TP. Hồ Chí Minh bằng ngôn ngữ lập trình

Java, có thể thực thi được trên nhiều loại điện thoại di động khác nhau. Nhờ vào

phần mềm này, người sử dụng có thể xem bản đồ, tra cứu tên đường, tên các địa

điểm, các công trình công cộng như chợ, trường học, bệnh viện, khách sạn…, đặc

biệt là trợ giúp người sử dụng xác định lộ trình ngắn nhất để đi từ địa điểm này đến

một địa điểm khác… Phần mềm này nếu được thực hiện tốt sẽ trở thành một ứng

dụng rất hữu ích, rất thiết thực và tiện dụng đối với nhiều người, đặc biệt là các bạn

trẻ và những người bận rộn trong việc đi lại.

Nói đến lập trình cho điện thoại di động, chúng ta đều hình dung được hai

trở ngại lớn. Thứ nhất, đó là năng lực của bộ vi xử lý trên điện thoại rất yếu và thứ

hai, đó là dung lượng của bộ nhớ rất nhỏ. Điều này gây trở ngại không nhỏ đến việc

tổ chức dữ liệu cho phần mềm, bởi lẽ, dữ liệu về các đường giao thông tại thành phố

Hồ Chí Minh là rất lớn, muốn lưu được toàn bộ dữ liệu này trên chiếc điện thoại di

động là một điều không đơn giản. Ngoài ra, các hạn chế của điện thoại di động cũng

buộc người lập trình phải chọn giải thuật thật hiệu quả và luôn phải tính toán nhằm

tối ưu cho chương trình. Mặt khác, đối với người lập trình, sự hạn chế của thư viện

hàm trong ngôn ngữ Java được hỗ trợ cho điện thoại cũng là một vấn đề không dễ

giải quyết. Những hạn chế đã nêu thật sự là một thách thức lớn mà đề tài bắt buộc

phải vượt qua.

Nội dung của bài báo cáo này được chia thành 7 chương như sau :

Page 10: Ban do tren dien thoai di dong co ho tro java

iv

- Chương 1 : Tổng quan về lập trình trên điện thoại di động. Chương

này nêu những vấn đề chung về tình hình sử dụng điện thoại di động hiện nay; hoạt

động phát triển phần mềm cho loại thiết bị này; giới thiệu một số phần mềm công

cụ nhằm hỗ trợ cho việc phát triển ứng dụng di động bằng ngôn ngữ lập trình Java.

- Chương 2 : Giới thiệu khái quát về chuẩn J2ME. Phần này trình bày

các mục tiêu, nội dung và định nghĩa các khái niệm quan trọng trong J2ME. Ngoài

ra, chương này cũng trình bày các tính năng, các điểm thuận lợi và hạn chế của bộ

thư viện Java được hỗ trợ cho điện thoại di động.

- Chương 3 : Những khó khăn do hạn chế của J2ME. Chương này trình

bày những ảnh hưởng quan trọng đến việc thiết kế và cài đặt một số tính năng của

đề tài do hạn chế của thư viện Java trên điện thoại di động.

- Chương 4 : Phân tích – thiết kế ứng dụng. Phân tích các yêu cầu nghiệp

vụ, các yêu cầu phi chức năng và đặc tả chi tiết ứng dụng ở mức phân tích, thiết kế.

- Chương 5 : Một số cải tiến nhằm tối ưu hóa chương trình. Do thiết bị

di động hạn chế về năng lực xử lý, dung lượng bộ nhớ và khả năng lưu trữ, chương

này trình bày một số phương pháp, thủ thuật nhằm giúp cho ứng dụng được tối ưu

hóa về tốc độ, tối ưu việc sử dụng bộ nhớ và giảm kích thước cho phần mềm.

- Chương 6 : Thử nghiệm - Hướng dẫn cài đặt và sử dụng. Giới thiệu

một số trình giả lập các điện thoại di động phổ biến trên thị trường được đề tài sử

dụng cho mục đích thử nghiệm; hướng dẫn cài đặt và sử dụng các chức năng của

phần mềm.

- Chương 7 : Tổng kết – Đánh giá. Nhận xét các công việc đã được thực

hiện; trình bày các ưu, khuyết điểm và hướng mở rộng cho phần mềm.

- Phụ lục A : Các thuật ngữ được sử dụng. Liệt kê và giải thích các thuật

ngữ được sử dụng trong chương trình.

- Phụ lục B : Giới thiệu các chương trình giả lập. Mục đích của chương

này nhằm trình bày các tính năng cũng như các yêu cầu về phần cứng, phần mềm

cần thiết để cài đặt chương trình.

Page 11: Ban do tren dien thoai di dong co ho tro java

v

MỤC LỤC Trang Lời cảm ơn ...................................................................................................................i Lời nói đầu ..................................................................................................................ii Mục lục........................................................................................................................v Danh mục hình ..........................................................................................................vii Danh mục bảng ...........................................................................................................x Chương 1 : TỔNG QUAN VỀ LẬP TRÌNH TRÊN ĐIỆN THOẠI DI ĐỘNG ..1 1.1. Đôi nét về thị trường điện thoại di động Việt Nam .....................................1 1.1.1. Sự phát triển của thị trường thông tin di động ................................1 1.1.2. Nhu cầu phát triển phần mềm cho điện thoại di động ....................2 1.2. Lập trình trên điện thoại di động..................................................................4 1.2.1. Quá trình phát triển ứng dụng J2ME ..............................................4 1.2.2. Các J2ME IDE ................................................................................5 1.3. Giới thiệu một số công cụ hỗ trợ lập trình J2ME ........................................6 1.3.1. J2ME Wireless Toolkit (WTK).......................................................6 1.3.2. Borland JBuiler ...............................................................................9 1.3.3. Sun ONE Studio 5, Mobile Edition ..............................................16 Chương 2 : GIỚI THIỆU KHÁI QUÁT VỀ CHUẨN J2ME .............................23 2.1. Nền tảng Java .............................................................................................23 2.2. Sự khác nhau giữa ngôn ngữ Java trên CLDC với Java thông thường......29 2.3. MIDP..........................................................................................................32 2.3.1. Định nghĩa.....................................................................................32 2.3.2. Yêu cầu về phần cứng ...................................................................32 2.3.3. Các khả năng và hạn chế của MIDP .............................................33 Chương 3 : NHỮNG KHÓ KHĂN DO HẠN CHẾ CỦA J2ME ........................36 3.1. Các hàm tô màu..........................................................................................36 3.2. Các hàm vẽ đường......................................................................................37 3.3. Vấn đề font chữ ..........................................................................................38 3.4. Vấn đề vẽ chuỗi ký tự ................................................................................39 3.5. Vấn đề về số thực.......................................................................................40 Chương 4 : PHÂN TÍCH – THIẾT KẾ ỨNG DỤNG .........................................42 4.1. Khảo sát hiện trạng.....................................................................................42 4.2. Phân tích và xác định yêu cầu....................................................................43 4.2.1. Danh sách các yêu cầu nghiệp vụ .................................................43 4.2.2. Các yêu cầu phi chức năng ...........................................................43 4.3. Thiết kế ứng dụng ......................................................................................44 4.3.1. Lược đồ sử dụng ...........................................................................44 4.3.2. Đặc tả Use Case ............................................................................45 4.3.3. Sơ đồ lớp mức phân tích ...............................................................57 4.3.4. Các biểu đồ hoạt động...................................................................64 4.3.4. Sơ đồ lớp mức thiết kế ..................................................................70

Page 12: Ban do tren dien thoai di dong co ho tro java

vi

Chương 5 : MỘT SỐ CẢI TIẾN NHẰM TỐI ƯU HÓA CHƯƠNG TRÌNH...95 5.1. Nội dung và ý nghĩa của việc tối ưu hóa....................................................95 5.2. Tối ưu hóa kích thước chương trình ..........................................................95 5.2.1. Các nguyên tắc tối ưu kích thước trong thiết kế chương trình .....95 5.2.2. Tối ưu kích thước chương trình khi đóng gói ...............................99 5.3. Tối ưu hóa về tốc độ.................................................................................104 5.3.1. Khái quát chung ..........................................................................104 5.3.2. Tìm các vị trí cần tối ưu về tốc độ ..............................................104 5.3.3. Các nguyên tắc tăng tốc cho chương trình..................................106 5.4. Tối ưu hóa việc sử dụng bộ nhớ...............................................................110 5.4.1. Công cụ theo dõi việc sử dụng bộ nhớ........................................110 5.4.2. Các nguyên tắc tối ưu hóa việc sử dụng bộ nhớ .........................111 Chương 6 : THỬ NGHIỆM – HƯỚNG DẪN CÀI ĐẶT VÀ SỬ DỤNG ........114 6.1. Cài đặt chương trình trên máy ảo.............................................................114 6.1.1. Trình giả lập Sony Ericsson ........................................................114 6.1.2. Trình giả lập Nokia .....................................................................115 6.1.3. Trình giả lập Siemens .................................................................117 6.1.4. Trình giả lập Samsung ................................................................120 6.1.5. Trình giả lập chuẩn (Sun Microsystems) ....................................121 6.2. Vấn đề hỗ trợ tiếng Việt có dấu ...............................................................123 6.2.1. Hiển thị tiếng Việt trên máy ảo...................................................123 6.2.2. Hiển thị tiếng Việt trên thiết bị thật ............................................123 6.3. Hướng dẫn sử dụng chương trình ............................................................124 6.3.1. Chức năng duyệt bản đồ..............................................................124 6.3.2. Chức năng tra cứu địa điểm, tên đường ......................................124 6.3.3. Chức năng tìm đường đi ngắn nhất giữa hai điểm......................128 6.3.4. Chức năng trợ giúp, hướng dẫn sử dụng.....................................131 Chương 7 : TỔNG KẾT – ĐÁNH GIÁ...............................................................133 7.1. Ưu điểm....................................................................................................133 7.2. Khuyết điểm.............................................................................................133 7.3. Hướng mở rộng ........................................................................................134 Phụ lục A : CÁC THUẬT NGỮ ĐƯỢC SỬ DỤNG ..........................................135 Phụ lục B : GIỚI THIỆU CÁC CHƯƠNG TRÌNH GIẢ LẬP.........................138 B.1. JDK..........................................................................................................138 B.2. Công cụ phát triển của hãng thứ ba .........................................................138 B.3. Trình giả lập các loại điện thoại di động .................................................139 B.3.1. Siemens.......................................................................................139 B.3.2. Sony Ericsson .............................................................................140 B.3.3. Samsung .....................................................................................142 B.3.4. Nokia ..........................................................................................145 Tài liệu tham khảo...................................................................................................147

Page 13: Ban do tren dien thoai di dong co ho tro java

vii

DANH MỤC HÌNH

Trang

Hình 1-1 : Doanh thu sản xuất phần mềm cho điện thoại di động năm 2004.........3

Hình 1-2 : Tạo project J2ME bằng Wizard trong JBuilder ...................................10

Hình 1-3 : JBuilder MIDP Designer .....................................................................12

Hình 1-4 : Màn hình gỡ rối của JBuilder ...............................................................14

Hình 1-5 : Tạo project J2ME bằng Sun ONE Studio 5..........................................17

Hình 1-6 : Cửa sổ quản lý tập tin của Sun ONE Studio 5 .....................................18

Hình 2-1 : Kiến trúc J2ME.....................................................................................24

Hình 2-2 : Các thành phần trong kiến trúc J2ME .................................................26

Hình 2-3 : Quan hệ giữa J2ME configuration và J2SE..........................................28

Hình 4-1 : Lược đồ sử dụng ..................................................................................44

Hình 4-2 : Sơ đồ lớp mức phân tích.......................................................................57

Hình 4-3 : Mô tả lớp MainMIDlet .........................................................................58

Hình 4-4 : Mô tả lớp MainCanvas .........................................................................59

Hình 4-5 : Mô tả lớp FindObjectForm...................................................................60

Hình 4-6 : Mô tả lớp MessageBox.........................................................................60

Hình 4-7 : Mô tả lớp IndexList ..............................................................................61

Hình 4-8 : Mô tả lớp IndexList ..............................................................................61

Hình 4-9 : Mô tả lớp Places ...................................................................................62

Hình 4-10 : Mô tả lớp Streets.................................................................................63

Hình 4-11 : Sequence diagram Hiển thị bản đồ .....................................................64

Hình 4-12 : Collaboration diagram Hiển thị bản đồ ..............................................64

Hình 4-13 : Sequence diagram Tìm địa điểm ........................................................65

Hình 4-14 : Collaboration diagram Tìm địa điểm..................................................66

Hình 4-15 : Sequence diagram Tìm đường theo tên ..............................................67

Hình 4-16 : Collaboration diagram Tìm đường theo tên .......................................68

Hình 4-17 : Sequence diagram Tìm đường đi ngắn nhất .......................................69

Hình 4-18 : Collaboration diagram Tìm đường đi ngắn nhất ................................69

Page 14: Ban do tren dien thoai di dong co ho tro java

viii

Hình 4-19 : Sơ đồ lớp mức thiết kế........................................................................70

Hình 4-20 : Thiết kế lớp MainMIDlet....................................................................72

Hình 4-21 : Thiết kế lớp MainCanvas....................................................................73

Hình 4-22 : Thiết kế lớp MessageBox ...................................................................76

Hình 4-23 : Thiết kế lớp FindObjectForm .............................................................77

Hình 4-24 : Thiết kế lớp HelpScreen .....................................................................79

Hình 4-25 : Thiết kế lớp IndexList ........................................................................80

Hình 4-26 : Thiết kế lớp SplashScreen ..................................................................79

Hình 4-27 : Thiết kế lớp About..............................................................................81

Hình 4-28 : Thiết kế lớp Districts ..........................................................................82

Hình 4-29 : Thiết kế lớp Places..............................................................................84

Hình 4-30 : Thiết kế lớp Streets .............................................................................85

Hình 4-31 : Thiết kế lớp NodePosition ..................................................................89

Hình 4-32 : Sequence diagram Hiển thị bản đồ (mức thiết kế) .............................90

Hình 4-33 : Collaboration diagram Hiển thị bản đồ (mức thiết kế).......................90

Hình 4-34 : Sequence diagram Tìm địa điểm (mức thiết kế).................................91

Hình 4-35 : Collaboration diagram Tìm địa điểm (mức thiết kế)..........................92

Hình 4-36 : Sequence diagram Tìm đường theo tên (mức thiết kế) ......................93

Hình 4-37 : Collaboration diagram Tìm đường theo tên (mức thiết kế)................93

Hình 4-36 : Sequence diagram Tìm đường ngắn nhất (mức thiết kế) ...................94

Hình 4-37 : Collaboration diagram Tìm đường ngắn nhất (mức thiết kế).............94

Hình 5-1 : Mô hình quá trình đóng gói ứng dụng J2ME .......................................99

Hình 5-2 : Sơ đồ sử dụng Obfuscator ..................................................................102

Hình 5-3 : Màn hình giao diện công cụ Profiler ..................................................105

Hình 5-4 : Màn hình giao diện công cụ theo dõi việc sử dụng bộ nhớ................111

Hình 6-1 : Thử nghiệm ứng dụng trên trình giả lập Sony Ericsson.....................114

Hình 6-2 : Màn hình giao diện trình giả lập Sony Ericsson.................................115

Hình 6-3 : Thử nghiêm ứng dụng trên trình giả lập Nokia ..................................116

Hình 6-4 : Kết quả thử nghiệm trên trình giả lập Nokia ......................................117

Page 15: Ban do tren dien thoai di dong co ho tro java

ix

Hình 6-5 : Cài đặt ứng dụng trên điện thoại Siemens SK 65...............................119

Hình 6-6 : Khởi động ứng dụng trên Siemens SK 65 ..........................................120

Hình 6-7 : Kết quả thử nghiệm trên trình giả lập Siemens ..................................121

Hình 6-8 : Kết quả thử nghiệm trên trình giả lập Samsung .................................122

Hình 6-9 : Kết quả thử nghiệm trên J2ME SDK..................................................122

Hình 6-10 : Các phím di chuyển bản đồ ..............................................................124

Hình 6-11 : Kết quả tìm địa điểm ........................................................................126

Hình 6-12 : Màn hình tra cứu tên đường .............................................................127

Hình 6-13 : Kết quả tra cứu tên đường ................................................................128

Hình 6-14 : Màn hình chọn vị trí .........................................................................129

Hình 6-15 : Kết quả tìm đường đi ngắn nhất .......................................................130

Hình 6-16 : Màn hình hướng dẫn sử dụng ...........................................................132

Hình 6-17 : Màn hình xem thông tin chương trình..............................................132

Hình B-1 : Màn hình download JDK 1.4 .............................................................138

Hình B-2 : Trình giả lập Siemens ........................................................................140

Hình B-3 : Trình giả lập Sony Erisson.................................................................141

Hình B-4 : Trình giả lập Samsung .......................................................................144

Hình B-5 : Nokia Developer’s Suite 2.2 ..............................................................146

Hình B-6 : Trình giả lập của Nokia Developer’s Suite........................................146

Page 16: Ban do tren dien thoai di dong co ho tro java

x

DANH MỤC BẢNG Trang

Bảng 2-1 : Phân loại CLDC và CDC ...................................................................28

Bảng 4-1 : Danh sách các yêu cầu nghiệp vụ ......................................................43

Bảng 4-2 : Phân tích các thuộc tính lớp MainMIDlet..........................................58

Bảng 4-3 : Phân tích các phương thức lớp MainMIDlet......................................58

Bảng 4-4 : Phân tích các thuộc tính lớp MainCanvas..........................................59

Bảng 4-5 : Phân tích các phương thức lớp MainCanvas......................................59

Bảng 4-6 : Phân tích các phương thức lớp FindObjectForm ...............................60

Bảng 4-7 : Phân tích các phương thức lớp MessageBox .....................................60

Bảng 4-8 : Phân tích các phương thức lớp IndexList ..........................................61

Bảng 4-9 : Phân tích các phương thức lớp Districts ............................................61

Bảng 4-10 : Phân tích các phương thức lớp Places..............................................62

Bảng 4-11 : Phân tích các phương thức lớp Streets .............................................63

Bảng 4-12 : Danh sách các lớp ............................................................................71

Bảng 4-13 : Danh sách các thuộc tính lớp MainMIDlet ......................................72

Bảng 4-14 : Danh sách các phương thức lớp MainMIDlet..................................72

Bảng 4-15 : Danh sách các thuộc tính lớp MainCanvas ......................................74

Bảng 4-16 : Danh sách các phương thức lớp MainCanvas..................................75

Bảng 4-17 : Danh sách các thuộc tính lớp MessageBox......................................76

Bảng 4-18 : Danh sách các phương thức lớp MessageBox .................................76

Bảng 4-19 : Danh sách các thuộc tính lớp FindObjectForm................................77

Bảng 4-20 : Danh sách các phương thức lớp FindObjectForm ...........................78

Bảng 4-21 : Danh sách các thuộc tính lớp HelpScreen........................................79

Bảng 4-22 : Danh sách các phương thức lớp HelpScreen ...................................79

Bảng 4-23 : Danh sách các phương thức lớp IndexList.......................................80

Bảng 4-24 : Danh sách các phương thức lớp SplashScreen ................................80

Bảng 4-25 : Danh sách các thuộc tính lớp About ................................................81

Bảng 4-26 : Danh sách các phương thức lớp About ............................................82

Page 17: Ban do tren dien thoai di dong co ho tro java

xi

Bảng 4-27 : Danh sách các thuộc tính lớp About ................................................83

Bảng 4-28 : Danh sách các phương thức lớp About ............................................83

Bảng 4-29 : Danh sách các thuộc tính lớp Places ................................................84

Bảng 4-30 : Danh sách các phương thức lớp Places............................................85

Bảng 4-31 : Danh sách các thuộc tính lớp Streets ...............................................87

Bảng 4-32 : Danh sách các phương thức lớp Streets ...........................................88

Bảng 5-1 : Bảng so sánh kết quả sử dụng obfuscator ........................................104

Page 18: Ban do tren dien thoai di dong co ho tro java

Chương 1 : Tổng quan về lập trình trên điện thoại di động

1

Chương 1 : TỔNG QUAN VỀ LẬP TRÌNH TRÊN ĐIỆN THOẠI DI ĐỘNG

1.1. Đôi nét về thị trường điện thoại di động Việt Nam :

1.1.1. Sự phát triển của thị trường thông tin di động :

Thị trường thông tin di động Việt Nam là một trong những thị trường phát

triển nhanh nhất khu vực Đông Nam Á. Theo đánh giá của BMI - Tập đoàn xuất

bản chuyên nghiên cứu và đánh giá thị trường viễn thông thế giới, năm 2003, thị

trường thông tin di động Việt Nam đạt tốc độ tăng trưởng 43% và năm 2004 là

65%.

Tại Hội nghị quốc tế về thông tin di động lần 2 (2nd Mobiles Vietnam) diễn

ra tại TP.HCM ngày 11 và 12/5 năm 2005, các chuyên gia dự báo trong năm 2005,

tổng số thuê bao di động tại Việt Nam sẽ đạt 7,3 triệu và năm 2008 sẽ lên đến mức

21,2 triệu. Tuy nhiên, Việt Nam vẫn là một trong những quốc gia có mật độ điện

thoại di động thấp nhất ở khu vực châu Á - Thái Bình Dương, do vậy đây sẽ là địa

điểm hấp dẫn để các doanh nghiệp trong nước cũng như các đối tác nước ngoài khai

thác và tìm kiếm cơ hội kinh doanh.

Hiện nay, Việt Nam có 6 nhà khai thác, cung cấp dịch vụ thông tin di động

thuộc 5 doanh nghiệp là : VNPT (Vinafone, Mobifone), Công ty Viễn thông quân

đội (Viettel), Công ty cổ phần viễn thông Sài Gòn (Saigon Postel), Công ty cổ phần

viễn thông Hà Nội (Hanoi Telecom) và Công ty Viễn thông Điện lực (VP Telecom).

Trong đó Hanoi Telecom và VP Telecom dự kiến khai trương mạng vào đầu năm

2006.

Tiềm năng của thị trường thông tin di động Việt Nam là điều được khẳng

định, nhưng vẫn là một ẩn số đối với các nhà phân tích thị trường bởi nhu cầu sử

dụng của người tiêu dùng cũng như khả năng cung cấp của các nhà khai thác vẫn

đang ở mức khám phá ban đầu.

Việt Nam được coi là thị trường rất hấp dẫn trong lĩnh vực thông tin di động.

Page 19: Ban do tren dien thoai di dong co ho tro java

Chương 1 : Tổng quan về lập trình trên điện thoại di động

2

1.1.2. Nhu cầu phát triển phần mềm cho điện thoại di động :

Điện thoại di động đầu tiên ra đời với chức năng như một chiếc điện thoại

thông thường, đó là gọi và nhận cuộc gọi. Sự phát triển mạnh mẽ của nền kinh tế

ngày càng khẳng định vai trò của thông tin liên lạc đến khả năng thành bại của việc

cạnh tranh trong kinh doanh. Ngoài ra, nhu cầu trao đổi thông tin, giải trí của con

người cũng ngày càng được nâng cao và nhờ vào sự tiến bộ về mặt kỹ thuật, chiếc

điện thoại di động ngày càng có thêm nhiều tính năng mới, đa dạng hơn, tiến bộ hơn

và hiện đại hơn. Màn hình từ đơn sắc chuyển sang màn hình màu, từ hỗ trợ tin nhắn

dạng văn bản (SMS) chuyển sang hỗ trợ tin nhắn có hình ảnh, âm thanh (MMS), hỗ

trợ quay phim, xem phim, chụp ảnh, nghe nhạc…

Năng lực xử lý và lưu trữ của điện thoại di động cũng liên tục được cải tiến.

Các hãng sản xuất đã làm cho chiếc điện thoại trở nên linh động hơn, giúp cho

người sử dụng có thể dễ dàng cấu hình giao diện và các ứng dụng. Đặc biệt, bằng

cách cho phép lập trình viên viết thêm các chương trình ứng dụng, trò chơi cho điện

thoại, chiếc điện thoại di động hiện nay thực sự là một công cụ làm việc, học tập,

vui chơi và giải trí hữu ích đối với mọi người.

Trong vài năm gần đây, hoạt động sản xuất phần mềm cho điện thoại di động

phát triển khá mạnh mẽ. Rất nhiều sản phẩm phần mềm đã ra đời để phục vụ tốt hơn

cho người sử dụng, trong đó, số lượng phần mềm nhiều nhất là các trò chơi, từ điển,

truy cập Internet, trình diệt virus, soạn thảo văn bản và các tiện ích khác. Trong năm

2004, giá trị sản xuất phần mềm cho điện thoại di động trên thế giới đạt 3,1 tỉ USD

và dự đoán sẽ đạt 18,5 tỉ USD vào năm 2009. Doanh thu sản xuất phần mềm cho

điện thoại di động năm 2004 được phân bố như sau :

Page 20: Ban do tren dien thoai di dong co ho tro java

Chương 1 : Tổng quan về lập trình trên điện thoại di động

3

Hình 1-1 : Doanh thu sản xuất phần mềm cho điện thoại di động năm 2004

Tại châu Á, chỉ riêng Nhật và Hàn Quốc đã chiếm 1,3 tỉ USD, còn lại là

Trung Quốc và Ấn Độ. Tại Việt Nam, doanh thu không đáng kể. Hầu hết các phần

mềm ứng dụng được phát triển dành cho điện thoại di động đều là phần mềm miễn

phí và do các công ty, các trường đại học và nhiều cá nhân thực hiện chủ yếu nhằm

mục đích phục vụ cho lợi ích của cộng đồng. Tuy nhiên, chúng ta vẫn có thể hi

vọng vào tương lai của một thị trường đầy tiềm năng và trong quá trình hội nhập

kinh tế quốc tế, người Việt Nam sẽ có thói quen tôn trọng quyền sở hữu trí tuệ nói

chung và bản quyền phần mềm nói riêng.

Page 21: Ban do tren dien thoai di dong co ho tro java

Chương 1 : Tổng quan về lập trình trên điện thoại di động

4

1.2. Lập trình trên điện thoại di động :

1.2.1. Quá trình phát triển ứng dụng J2ME :

Thông thường, việc phát triển ứng dụng J2ME được tiến hành qua các giai

đoạn như sau :

a) Viết mã nguồn Java

b) Biên dịch

c) Obfuscate (tùy chọn) :

Obfuscate sẽ loại bỏ các thông tin không cần thiết trong class, chẳng hạn như

tên của các biến cục bộ. Các lớp, phương thức, interface,... cũng được đổi tên để

làm cho chúng ngắn gọn hơn. Một gói đã được obfuscate sẽ bảo vệ các tập tin class

khỏi việc dịch ngược (decompile) và reverse engineering. Ngoài việc bảo vệ mã

nguồn, obfuscate còn giảm kích thước của các tập tin class, làm cho kích thước của

tập tin JAR cũng giảm đi. Việc giảm kích thước rất có ý nghĩa bởi vì các thiết bị

MIDP thường có bộ nhớ bị giới hạn.

d) Pre-verify (tiền kiểm tra).

Bộ kiểm tra (verify) trong J2SE tốn ít nhất là 50 KB, không kể việc tiêu tốn

vùng nhớ heap và thời gian xử lý. Để giảm việc tiêu tốn này cho J2ME, việc kiểm

tra tập tin class sẽ được chia thành hai giai đoạn. Quá trình tiền kiểm tra trước khi

triển khai sẽ thêm các tập tin class các tham số phụ để tăng tốc quá trình kiểm tra

lúc thực thi. Thiết bị sẽ thực hiện quá trình kiểm tra sơ lược bằng cách sử dụng các

tham số phụ được phát sinh trong quá trình tiền kiểm tra.

e) Tạo tập tin JAR

f) Tạo tập tin JAD

g) Thực thi trên trình giả lập thích hợp

h) Triển khai trên thiết bị di động

Page 22: Ban do tren dien thoai di dong co ho tro java

Chương 1 : Tổng quan về lập trình trên điện thoại di động

5

1.2.2. Các J2ME IDE :

Môi trường phát triển tích hợp (IDE) cải thiện năng suất của lập trình viên

bằng cách cung cấp một tập các công cụ lập trình tích hợp thông qua giao diện đồ

họa (GUI), hỗ trợ công cụ soạn thảo, quản lý project, biên dịch và gỡ rối

(debugger).

Thành viên mới nhất trong gia đình Java là J2ME. Khi nhiều chuyên gia dự

đoán về sự phát triển lớn mạnh của thị trường phát triển các ứng dụng J2ME, các

nhà phát triển IDE đã đưa ra các bản mở rộng cho các sản phẩm IDE của họ để hỗ

trợ thêm J2ME. Ngoài ra, các nhà cung cấp chuyên nghiệp khác cũng đã phát triển

các IDE đơn dành riêng cho J2ME.

Một IDE cho J2ME cần phải cung cấp các tiện ích sau :

a) Quản lý project :

Quản lý các tập tin nguồn và các thông số MIDlet.

b) Trình soạn thảo :

Soạn thảo mã nguồn và các tài nguyên.

c) Build :

Biên dịch, obfuscate và pre-verify mã nguồn.

d) Đóng gói (package) :

Đóng gói các MIDlet thành các tập tin JAR và JAD.

e) Giả lập (emulation) :

Thực thi các MIDlet với một trình giả lập.

f) Gỡ rối (debugger)

Page 23: Ban do tren dien thoai di dong co ho tro java

Chương 1 : Tổng quan về lập trình trên điện thoại di động

6

1.3. Giới thiệu một số công cụ hỗ trợ lập trình cho J2ME :

1.3.1. J2ME Wireless Toolkit (WTK) :

J2ME Wireless Toolkit (WTK) là một bộ công cụ phát triển J2ME cung cấp

cho các lập trình viên môi trường giả lập, công cụ, tài liệu và các ví dụ cần thiết để

phát triển các ứng dụng MIDP. WTK không phải là một IDE hoàn chỉnh, bởi vì nó

đã bỏ các tính năng soạn thảo và gỡ rối vốn được xem là bắt buộc phải có trong một

IDE. Tuy nhiên, KToolbar, được cung cấp trong bộ WTK là một môi trường phát

triển tối thiểu cung cấp một GUI dành cho việc biên dịch, đóng gói và thực thi các

ứng dụng MIDP.

WTK 2.2 cũng cung cấp các bộ giả lập đã được cải tiến với các tính năng giả

lập, monitor và debug mới. Ngoài ra, WTK cũng có một cơ chế được thêm vào tiến

trình build của KToolbar để cho phép việc tích hợp và thực thi bộ obfuscate Java

bytecode khi đóng gói MIDlet suite.

WTK 2.2 được cải thiện tốc độ và hỗ trợ các API mới, gồm :

Connected Limited Device Configuration (CLDC) 1.1 (JSR 139)

Mobile Information Device Profile (MIDP) 2.0 (JSR 118)

Java Technology for the Wireless Industry (JTWI) 1.0 (JSR 185)

Wireless Messaging API (WMA) 2.0 (JSR 205)

Mobile Media API (MMAPI) 1.1 (JSR 135)

PDA Optional Packages for the J2ME Platform (JSR 75)

Java APIs for Bluetooth (JSR 82)

J2ME Web Services Specification (JSR 172)

Mobile 3D Graphics API for J2ME (JSR 184)

Mỗi project có một thư mục dành riêng trong thư mục apps. Thư mực apps

nằm bên trong thư mục chính của WTK.

Page 24: Ban do tren dien thoai di dong co ho tro java

Chương 1 : Tổng quan về lập trình trên điện thoại di động

7

Các thư viện của hãng thứ ba có thể được cấu

hình bên trong KToolbar. Ngoài ra, các thư viện cần

thiết cho từng project có thể được chép thủ công vào thư

mục lib bên trong thư mục project. Nếu một thư viện cần

cho tất cả project, nó có thể được chép vào thư mục

apps/lib.

Khi KToolbar project được tạo ra, cấu trúc thư

mục project sẽ được thiết lập. Ngoài ra các tập tin JAD

va manifest cũng được phát sinh dựa vào các thông số

của MIDlet suite đã được xác định. Tuy nhiên, không có

tập tin nguồn nào được phát sinh cho MIDlet. Lập trình

viên phải viết các tập tin nguồn này từ đầu. KToolbar

không hỗ trợ nạp nhiều project trong một GUI. Trình

soạn thảo WTK không cung cấp một trình soạn thảo tích

hợp nào. Thay vào đó, lập trình viên phải sử dụng một

trình soạn thảo của hãng thứ ba.

Tạo lập và đóng gói :

KToolBar cung cấp hỗ trợ cho việc biên dịch một dự án. Một dự án được

dịch và tiền kiểm tra chỉ trong một bước thực hiện. Một chức năng khác được dùng

để đóng gói dự án. Gói được tạo ra sẽ chứa tập tin JAR và JAD của MIDlet suite.

WTK được tích hợp công cụ obfuscator là RetroGuard. Công cụ này không được

cung cấp kèm với WTK mà có thể được download miễn phí từ trang web

www.retrologic.com. Để cài đặt, chúng ta chỉ cần chép tập tin retroguard.jar vào thư

mục bin của thư mục cài đặt WTK.

Trình giả lập :

WTK cung cấp các giả lập để thực thi ứng dụng MIDP. Các thiết bị giả lập

được hỗ trợ :

DefaultColorPhone : điện thoại mặc định với màn hình màu.

Page 25: Ban do tren dien thoai di dong co ho tro java

Chương 1 : Tổng quan về lập trình trên điện thoại di động

8

DefaultGrayPhone : điện thoại với màn hình xám.

Motorola_i85s : điện thoại Motorola.

PalmOS_Device : máy hỗ trợ các nhân kỹ thuật số.

Nhận xét :

WTK là một môi trường cơ bản cho việc phát triển các ứng dụng trên thiết bị

không dây. Tuy nhiên, do thiếu một trình soạn thảo và chức năng gỡ rối, rõ ràng

công cụ này không thể nào cạnh tranh được với các công cụ thương mại khác. Tuy

nhiên, với những ai mới bắt đầu tìm hiểu về J2ME thì đây vẫn là một công cụ có

ích. Bằng việc tạo lập sẵn một cấu trúc thư mục, nó cho phép lập trình viên có thể

xây dựng ngay ứng dụng mà không cần quan tâm về việc tổ chức các tập tin, tài

nguyên trong dự án. Khi một lập trình viên đã trở nên thành thạo với việc phát triển

ứng dụng J2ME thì có thể chuyển sang sử dụng một công cụ khác.

Page 26: Ban do tren dien thoai di dong co ho tro java

Chương 1 : Tổng quan về lập trình trên điện thoại di động

9

1.3.2. Borland Jbuilder :

Môi trường làm việc của JBuilder cho J2ME hoàn toàn giống như môi

trường phát triển các ứng dụng Java bình thường nhưng có thêm các tabs và options

trong các hộp thoại để hỗ trợ J2ME và hai wizards mới : MIDP MIDlet wizard và

MIDP Displayable wizard. Trong phiên bản JBuilder Professional và Enterprise.

Trình Archive Builder có thể tạo ra một MIDlet suite với các tập tin manifest và

JAD tương ứng. JBuilder 2005 cũng cài đặt WTK 2.1 được sử dụng như một môi

trường giả lập. Ngoài ra, JBuilder còn cung cấp các hướng dẫn cho việc tích hợp

thêm các J2ME JDK khác, chẳng hạn như Nokia Developer Suite for J2ME và

Siemens Mobility Toolkit (SMTK).

Ngoài các tính năng chính của JBuilder, khi lập trình cho J2ME chúng ta

được thêm các tính năng sau :

Code completion cho các lớp CLDC/MIDP

Duyệt class/package cho các lớp CLDC/MIDP

Chuyển đổi JDK

Các MIDP wizards

Bộ thiết kế trực quan (visual designer) cho các thành phần giao diện

MIDP

Công cụ gỡ rối MIDlet

Đóng gói file JAD và JAR

Nạp dữ liệu thông qua OTA (Over The Air Provisioning)

Quản lý dự án :

Tập tin project chứa một danh sách các tập tin trong dự án và các thuộc tính

của dự án đó. JBuilder sử dụng thông tin này khi thực hiện nạp, lưu, biên dịch hay

chạy một project. Tập tin project bị thay đổi khi JBuilder thêm hay xóa tập tin, thiết

lập hay thay đổi các thuộc tính của project. Khi tạo một dự án J2ME, dự án phải

được liên kết với một J2ME JDK. Khi tạo mới một project, một wizard sẽ phát sinh

nội dung cơ bản của tập tin, tạo thư mục cho các thành phần trong project.

Page 27: Ban do tren dien thoai di dong co ho tro java

Chương 1 : Tổng quan về lập trình trên điện thoại di động

10

Hình 1-2 : Tạo project J2ME bằng Wizard trong JBuilder

Wizard cho phép chúng ta thêm các tập tin vào trong MIDlet bằng cách phát

sinh các tập tin dựa trên các tùy chọn mà chúng ta yêu cầu.

MIDlet : phát sinh một lớp con của MIDlet và một lớp con của

Displayable (Canvas, Form, List hay TextBox).

MIDP Displayable : phát sinh một lớp con của lớp Displayable.

Thông thường, chúng ta chọn MIDlet. Khi đó MIDlet wizard sẽ thu thập tất

cả các thông tin cần thiết. Một wizard khác sẽ được gọi để tạo ra các lớp

Displayable sau đó.

JBuilder cung cấp một bộ UI designer cho các ứng dụng MIDP. Bộ MIDP

designer dựa trên bộ Swing UI designer có sẵn trong JBuilder.

Page 28: Ban do tren dien thoai di dong co ho tro java

Chương 1 : Tổng quan về lập trình trên điện thoại di động

11

Màn hình duyệt các tập tin, thư mục trong dự án.

Màn hình duyệt cấu trúc của lớp và gói.

Cửa sổ soạn thảo mã nguồn :

Keyboard shortcuts

Brace matching

Syntax highlighting

Customizable editor key mappings

Page 29: Ban do tren dien thoai di dong co ho tro java

Chương 1 : Tổng quan về lập trình trên điện thoại di động

12

CodeInsight (code completion, parameter lists, và tool tip expression

evaluation)

Code templates

Cho phép soạn thảo nhiều tập tin trong một giao diện hỗ trợ tabs

Re-factoring

Tạo và đóng gói :

Khi biên dịch, JBuilder thực hiện các công việc sau :

Biên dịch MIDlet và tạo ra các tập tin .class.

Tiền kiểm tra các lớp đã được tạo.

Tạo tập tin JAD.

JBuilder phiên bản Professional và Enterprise có tích hợp bên trong một

obfuscator. Chức năng này có thể được bật qua tab Build trong cửa sổ Project

Properties.

Hình 1-3 : JBuilder MIDP Designer

Page 30: Ban do tren dien thoai di dong co ho tro java

Chương 1 : Tổng quan về lập trình trên điện thoại di động

13

MIDP designer giúp ta làm việc trực quan với các thành phần giao diện

MIDP cơ bản. Ngoài ra, nó còn hỗ trợ việc phát sinh mã tự động.

Các thành phần giao diện MIDP được hỗ trợ :

ChoiceGroup

DateField

Gauge

ImageItem

StringItem

TextField

Ticker

Spacer

Các thành phần MIDP screen :

Alert

Form

List

TextBox

Khi xử lý các thành phần với bộ MIDP designer, JBuilder tự động phát sinh

mã để quản lý giao diện. Mã phát sinh chuyên biệt cho JBuilder, điều này có nghĩa

là MIDP designer sẽ không thể dịch ngược lại các mã nguồn đã được viết tay.

MIDP Designer giúp phát triển nhanh các giao diện mẫu MIDP.

Trình giả lập :

JBuilder cung cấp các giả lập thiết bị về nguyên tắc cũng tương tự như

WTK, tuy nhiên chúng ta có thể sử dụng các trình giả lập của hãng thứ ba bằng

cách thiết lập các thuộc tính của dự án nếu muốn mà không gây ảnh hưởng gì cho

dự án. Các trình giả lập này có thể là của Nokia hay của Siemens…

Nếu công cụ của chúng ta có tích hợp nhiều trình giả lập thiết bị, khi đó tab

MIDlet trong cửa sổ Project Properties có thể được dùng để chọn thiết bị khi chạy

hay gỡ rối cho ứng dụng.

Page 31: Ban do tren dien thoai di dong co ho tro java

Chương 1 : Tổng quan về lập trình trên điện thoại di động

14

Trình gỡ rối :

Khi bắt đầu gỡ rối, ngoài một màn hình giả lập cho thiết bị, một màn hình

dùng để hiển thị thông tin debug cũng xuất hiện. Chúng ta có thể gỡ rối nhiều ứng

dụng đồng thời qua các tab có trên màn hình này.

Hình 1-4 : Màn hình gỡ rối của JBuilder.

Các tab nằm bên trái dọc theo cửa sổ cho chúng ta thấy những gì đang diễn

ra bên trong ứng dụng, Qua các tab này chúng ta có thể xem các thông tin :

Console : thể hiện các kết quả cũng như lỗi của chương trình.

Page 32: Ban do tren dien thoai di dong co ho tro java

Chương 1 : Tổng quan về lập trình trên điện thoại di động

15

Thread, call stack và data : thể hiện các nhóm luồng trong chương trình.

Mỗi nhóm luồng có thể được mở ra để xem các luồng bên trong.

Synchronization monitor : cho phép xem thông tin về sự đồng bộ giữa các

luồng và trạng thái của chúng, thông tin này đặc biệt hữu ích khi kiểm tra deadlock.

Data watches : thể hiện giá trị hiện thời của dữ liệu.

Loaded classes and static data : thể hiện các lớp đang được sử dụng bởi

ứng dụng. Chúng ta có thể mở một lớp để xem giá trị các thuộc tính của nó.

Data and code breakpoints : thể hiện tất cả các breakpoints đang được

thiết lập trong ứng dụng và trạng thái hiện tại của nó.

Classes with tracing disabled : thể hiện danh sách các lớp và gói chưa

được xem xét.

Nhận xét :

Chức năng thiết kế giao diện của JBuilder là một công cụ hữu ích trong việc

tạo lập giao diện MIDP. Tuy nhiên, chức năng này lại không hỗ trợ đầy đủ các

thành phần giao diện hiện có và trong nhiều trường hợp mã nguồn phát sinh cần

được chỉnh sửa thêm mới hoạt động đúng theo ý muốn.

Page 33: Ban do tren dien thoai di dong co ho tro java

Chương 1 : Tổng quan về lập trình trên điện thoại di động

16

1.3.3. Sun ONE Studio 5, Mobile Edition

Sun ONE studio 5, Mobile Edition là một phiên bản được thay đổi từ Sun

ONE Studio để hỗ trợ và giúp đỡ các lập trình viên trong việc phát triển các ứng

dụng MIDP. Nó kết hợp các khả năng của Wireless Toolket với Sun ONE Studio

tạo thành một môi trường với các chức năng sau :

Kết hợp việc biên dịch, tiền kiểm tra, thực thi MIDlet và MIDlet suite.

Tự động phát sinh tập tin JAD và JAR.

Tích hợp khả năng gỡ rối (debug) cho MIDlet.

Code completion

Có thể tích hợp với các trình giả lập hay các bộ JDK của hãng thứ ba nhờ

vào Unified Emulator Interface

Cung cấp các mẫu cho việc tạo ra các MIDlet và MIDlet suite.

Tích hợp sẵn một trình giả lập

Có thể thiết lập trình giả lập riêng cho mỗi dự án J2ME.

Công cụ AutoUpdate giúp tự động hóa việc cập nhật công cụ.

Quản lý project :

Một project được tạo bởi Sun ONE Studio khi mới được tạo sẽ là một project

rỗng. Chúng ta phải tự thêm vào các MIDlet hay MIDlet suite theo nhu cầu của

mình.

Page 34: Ban do tren dien thoai di dong co ho tro java

Chương 1 : Tổng quan về lập trình trên điện thoại di động

17

Hình 1-5 : Tạo project J2ME bằng Sun ONE Studio 5

Wizard tạo ra các tập tin dựa trên mẫu mà chúng ta chọn, các mẫu sau đây

được hỗ trợ trong công cụ :

Class : một lớp Java rỗng.

HelloMIDlet : một lớp có khả năng hiển thị văn bản lên màn hình thiết bị.

MIDPCanvas : tạo ra một lóp con của lớp Canvas. Canvas cho chúng ta

khả năng thao tác đồ họa cấp thấp.

MIDlet : các lóp thực thi cơ bản cho một thiết bị không dây.

MIDlet Suite : tạo ra một MIDlet suite.

Sau khi chọn mẫu, wizard sẽ lấy các thông tin cần thiết. Sau giai đoạn này,

các tập tin sẽ được tạo ra.

Tab Project trên màn hình Explorer cung cấp cho chúng ta một cái nhìn bên

trong project. Từ đây, chúng ta có thể duyệt qua các thông tin chứa đựng trong

MIDlet.

Page 35: Ban do tren dien thoai di dong co ho tro java

Chương 1 : Tổng quan về lập trình trên điện thoại di động

18

Cửa sổ quản lý dự án.

Các thư viện khác có thể được tích hợp vào trong công cụ bằng tab

Filesystems trên cửa sổ Explorer.

Hình 1-6 : Cửa sổ quản lý tập tin của Sun ONE Studio 5

Page 36: Ban do tren dien thoai di dong co ho tro java

Chương 1 : Tổng quan về lập trình trên điện thoại di động

19

Editor :

Màn hình soạn thảo mã nguồn

Các đặc điểm chính của màn hình soạn thảo mã nguồn :

Tô màu các từ khóa trong ngôn ngữ Java.

Đánh số dòng.

Xem nhiều tập tin trong cùng một cửa sổ.

Định dạng mã nguồn tự động

Code completion.

Biên dịch và đóng gói :

Sun ONE Studio cung cấp trợ giúp trong việc biên dịch và đóng gói một dự

án. Với công cụ này chúng ta có thể kết hợp việc tạo ra đóng gói trong khi thực hiện

biên dịch. Khi biên dịch, Sun ONE Studio :

Dịch MIDlet và tạo ra các tập tin .class.

Thực hiện tiền kiểm tra các lớp đã được biên dịch.

Tạo tập tin JAR.

Page 37: Ban do tren dien thoai di dong co ho tro java

Chương 1 : Tổng quan về lập trình trên điện thoại di động

20

Tạo tập tin JAD.

Trình giả lập :

Mặc định khi cài đặt, Sun ONE Studio dùng trình giả lập của WTK để chạy

các ứng dụng MIDP, ngoài ra, chúng ta cũng có thể thêm vào các trình giả lập khác

do hãng thứ ba phát triển bằng chức năng Device Emulator Registry.

Chỉ các trình giả lập có hỗ trợ môi trường giả lập J2ME SDK mới có thể

được dùng chung với Sun ONE Studio. Nghĩa là chúng ta có thể dùng chung công

cụ này với Nokia Developer’s Suite hay Siemens Mobility Toolkit mà không gây

ảnh hưởng gì đến đề án.

Tab Runtime trong cửa sổ Explorer được dùng để quản lý Device Emulator

Registry. Qua chức năng này, chúng ta có thể thêm, xóa hay chọn trình giả lập mặc

định để sử dụng.

Màn hình quản lý trình giả lập.

Page 38: Ban do tren dien thoai di dong co ho tro java

Chương 1 : Tổng quan về lập trình trên điện thoại di động

21

Bộ gỡ rối (Debugger) :

Sun ONE Studio cung cấp một trình gỡ rối có thể dùng để dò tìm các lỗi

trong ứng dụng MIDP. Khi một phiên gỡ rối được bắt đầu, màn hình bao gồm ba

cửa sổ là : Debugger Window, Output Window và Source Editor sẽ xuất hiện.

Màn hình Debugger chứa 7 màn hình con, giúp chúng ta xem xét những gì

đang diễn ra trong ứng dụng MIDP của chúng ta, đó là các màn hình :

Session : liệt kê các ứng dụng đang chạy.

Breakpoints : liệt kê các breakpoint được thiết lập. Breakpoint có thể

được thiết lập trên một dòng lệnh, trên tên phương thức, trên một ngoại lệ, lớp,

luồng hay một biến.

Thread : liệt kê các luồng và nhóm luồng đang chạy trong phiên làm việc

hiện hành.

Call Stack : liệt kê sơ đồ các lời gọi hàm được thực hiện trong quá trình

thực thi luồng hiện hành. Phương thức được thực thi cuối cùng sẽ ở đầu danh sách.

Phương thức được thực thi đầu tiên sẽ nằm ở cuối danh sách.

Watches : danh sách các biến và biểu thức mà chúng ta cần khảo sát giá

trị trong quá trình gỡ rối. Ở đây chúng ta có thể thay đổi giá trị các biến khi chúng

đang chạy.

Variable : liệt kê các biến cục bộ, các thực thể và các biến tĩnh trong

phạm vi của phương thức mà chúng ta đang xem xét.

Classes : liệt kê các lớp được sử dụng bởi tiến trình đang được gỡ rối.

Page 39: Ban do tren dien thoai di dong co ho tro java

Chương 1 : Tổng quan về lập trình trên điện thoại di động

22

Màn hình gỡ rối của Sun ONE Studio

Nhận xét :

Sun ONE Studio là một trong những chương trình phát triển miễn phí đầu

tiên cho J2ME. Hầu như tất cả các đặc tính mà một lập trình viên mong đợi đều

được tích hợp vào trong công cụ này. Một lập trình viên có hiểu biết vể MIDP và đã

có kinh nghiệm trong việc sử dụng Sun ONE Studio có thể dùng nó để phát triển

ứng dụng MIDP chỉ sau một vài giờ tìm hiểu.

Tuy nhiên, Sun ONE Studio lại thiếu các đặc điểm khác khi lập trình J2ME

để có thể giúp nó nổi trội hơn các trình soạn thảo đối thủ khác. Hầu hết các đặc

điểm có được là do được đem từ phiên bản dành cho J2SE sang.

Sun ONE Studio là một phiên bản miễn phí. Do đó một số chức năng của nó

vẫn chưa thực sự tốt so với các công cụ thương mại khác.

Page 40: Ban do tren dien thoai di dong co ho tro java

Chương 2 : Giới thiệu khái quát về chuẩn J2ME

23

Chương 2 : GIỚI THIỆU KHÁI QUÁT VỀ CHUẨN J2ME

2.1. Nền tảng Java :

Khi Sun Microsystems nhận ra rằng việc tạo ra một nền tảng chung để

chạy trên tất cả các môi trường là điều không thể thực hiện được, công ty đã quyết

định chia công nghệ Java của mình thành 3 phiên bản, mỗi phiên bản được ứng

dụng trong một lĩnh vực riêng biệt, các phiên bản đó là :

Java 2 Platform, Enterprise Edition (J2EE™) phục vụ cho các nhu cầu về

thương mại như phục vụ khác hàng, các vấn đề về phân phối, các vấn đề về nhân

sự. Phiên bản này được chạy trên các máy server.

Java 2 Platform, Standard Edition (J2SE™) được cung cấp cho thị trường

máy tính để bàn trong các máy tính phục vụ văn phòng hay trong gia đình.

Java 2 Platform, Micro Edition (J2ME™) chạy trên các máy với tài

nguyên hạn chế.

Hình vẽ sau minh họa các phiên bản hiện có của Java và lĩnh vực ứng dụng

của chúng, bắt đầu từ bên trái là các nền tảng cao cấp sang bên phải là các nền tảng

cấp thấp hơn. Java 2 Enterprise Edition hỗ trợ các máy tính dùng trong doanh

nghiệp, Java 2 Standard Edition hỗ trợ cho các máy tính các nhân, máy tính để bàn.

Java 2 Micro Edition được chia thành 2 loại cho các thiết bị cấp cao (máy PDA cấp

cao, điện thoại web) và các thiết bị cấp thấp (điện thoại di động và PDA với khoảng

512KB bộ nhớ).

Page 41: Ban do tren dien thoai di dong co ho tro java

Chương 2 : Giới thiệu khái quát về chuẩn J2ME

24

Hình 2-1 : Kiến trúc J2ME

Kiến trúc J2ME được thiết kế để có thể hỗ trợ các thiết bị nhúng khác nhau

trên thị trường. Để làm được như thế, môi trường J2ME cung cấp nhiều loại máy ảo

Java (Java Virtual Machine) khác nhau.

Với các thiết bị cấp thấp, tài nguyên hạn chế, môi trường J2ME cung cấp một

cấu hình máy ảo Java rất nhỏ và các thư viện Java chỉ gồm các gói/lớp cần thiết cho

thiết bị. Giống như việc các nhà sản xuất thiết bị phát triển các tính năng khác trong

sản phẩm của mình, cấu hình này có thể được mở rộng với các thư viện mới phục

vụ cho nhu cầu của thị trường. Để hỗ trợ cho khả năng tùy biến và khả năng mở

rộng này, chúng ta có 3 khái niệm sau trong kiến trúc J2ME.

Configuration (Cấu hình) :

Cấu hình là đặc tả định nghĩa một môi trường phần mềm cho một dòng các

thiết bị được phân loại bởi tập hợp các đặc tính, ví dụ như :

Kiểu và số lượng bộ nhớ

Kiểu và tốc độ bộ vi xử lý

Kiểu mạng kết nối

Một configuration định nghĩa các đặc điểm của máy ảo Java và cung cấp các

thư viện lớp tối thiểu mà các nhà sản xuất thiết bị như Samsung, Nokia …bắt buộc

phải thực thi đầy đủ để các lập trình viên có thể dựa vào môi trường lập trình nhất

Page 42: Ban do tren dien thoai di dong co ho tro java

Chương 2 : Giới thiệu khái quát về chuẩn J2ME

25

quán và thông qua sự nhất quán này, các ứng dụng được tạo ra có thể mang tính độc

lập thiết bị cao nhất có thể.

Profile :

Profile mở rộng configuration bằng cách thêm vào các class để bổ trợ các tính

năng cho từng thiết bị chuyên biệt. Mỗi profile định nghĩa một tập hợp các class

khác nhau, nên thường ta không thể chuyển một ứng dụng Java viết cho một profile

này và chạy trên một máy hỗ trợ một profile khác. Cũng với lý do đó, chúng ta

không thể lấy một ứng dụng viết trên J2SE hay J2EE và chạy trên các máy hỗ trợ

J2ME. Một thiết bị có thể hỗ trợ nhiều profile.

Optional package :

Là các API có thể sử dụng trong nhiều thiết bị hay một họ các thiết bị. Một

J2ME option package là một tập các API nằm trên một profile. Một optional

package thường chứa các chức năng độc lập với các thiết bị. Mục đích chính của

các optional package này là cho phép bổ sung các API trên các profiles. Một thiết bị

có thể hỗ trợ nhiều optional package khác nhau.

Configurations, profiles và các optional packages sử dụng các tính năng của

máy ảo Java (Java Virtual Machine). Máy ảo này chạy trên một hệ điều hành thuộc

về phần mềm hệ thống của thiết bị. Quan hệ của chúng được thể hiện qua hình vẽ

sau :

Page 43: Ban do tren dien thoai di dong co ho tro java

Chương 2 : Giới thiệu khái quát về chuẩn J2ME

26

Hình 2-2 : Các thành phần trong kiến trúc J2ME

Configuration :

Trong môi trường J2ME, một ứng dụng được viết cho một profile riêng biệt

nào đó, profile này lại mở rộng từ một configuration. Vì thế, tất cả các đặc điểm của

một configuration sẽ được giữ lại trong profile có thể được sử dụng bởi ứng dụng

viết cho profile này.

Một configuration định nghĩa một nền Java cho các thiết bị có các đặc tính

tương tự nhau (chẳng hạn như về bộ nhớ, tốc độ xử lý,…). Một configuration sẽ xác

định :

• Các tính năng của ngôn ngữ Java được hỗ trợ.

• Các tính năng của máy ảo Java được hỗ trợ.

• Thư viện chuẩn và các API .

Nói một cách đơn giản, một configuration định nghĩa một đặc tả mà các nhà

sản xuất thiết bị và những người xây dựng profile phải tuân theo. Tất cả các thiết bị

có chung đặc tính (bộ nhớ, tốc độ xử lý) phải “đồng ý” cài đặt đúng các đặc điểm

được xác định và những người xây dựng profile chỉ được sử dụng các đặc tính được

định nghĩa trong configuration. Một lập trình viên viết chương trình game cho điện

Page 44: Ban do tren dien thoai di dong co ho tro java

Chương 2 : Giới thiệu khái quát về chuẩn J2ME

27

thoại Samsung thì có thể sửa đổi chương trình của mình một cách tối thiểu nhất để

có thể chạy trên điện thoại Nokia. Qua đây ta thấy khẩu hiệu “Write Once, Run

Anywhere” của Java đã không còn đúng nữa, nhưng chúng ta cũng phải đánh giá

cao sự nỗ lực của Sun trong việc tạo ra một môi trường phần mềm chung cho vô số

chủng loại thiết bị di động có trên thị trường. Hiện nay Sun đã đưa ra 2 dạng

Configuration :

a) CLDC - Connected Limited Device Configuration :

CLDC được thiết kế để nhắm vào thị trường các thiết bị cấp thấp (low-end),

các thiết bị này thông thường là máy nhắn tin, máy điện thoại di động và PDA. Các

thiết bị này có giao diện đơn giản, bộ nhớ khoảng 32K đến 512 KB bộ nhớ, băng

thông nhỏ, trong các thiết bị này, việc truyền thông trên mạng không dựa vào giao

thức TCP/IP. Vì tài nguyên bộ nhớ hạn chế nên CLDC được gắn với Java không

dây (Java Wireless ), dạng như cho phép người sử dụng mua và tải về các ứng dụng

Java, ví dụ như là Midlet.

b) CDC - Connected Device Configuration :

CDC được đưa ra nhắm đến các thiết bị có tính năng mạnh hơn dòng thiết bị

thuộc CLDC nhưng vẫn yếu hơn các hệ thống máy để bàn sử dụng J2SE. Các thiết

bị thuộc loại này bao gồm các hộp điều khiển TV, tivi Internet, điện thoại Internet,

các thiết bị giải trí, định hướng. Các thiết bị này có giao diện phong phú, bộ nhớ

nhiều hơn (thông thường là trên 2Mb) và có bộ xử lý mạnh hơn, băng thông lớn và

sử dụng giao thức TCP/IP.

Cả 2 dạng cấu hình kể trên đều chứa máy ảo Java (Java Virtual Machine) và

tập hợp các lớp (class) Java cơ bản để cung cấp một môi trường cho các ứng dụng

J2ME. Tuy nhiên, chú ý rằng đối với các thiết bị cấp thấp, do hạn chế về tài nguyên

như bộ nhớ và bộ xử lý nên không thể yêu cầu máy ảo hỗ trợ tất cả các tính năng

như với máy ảo của J2SE, ví dụ, các thiết bị thuộc CLDC không có phần cứng hỗ

trợ các phép tính toán dấu phẩy động, nên máy ảo thuộc CLDC không được hỗ trợ

kiểu float và double.

Page 45: Ban do tren dien thoai di dong co ho tro java

Chương 2 : Giới thiệu khái quát về chuẩn J2ME

28

CLDC CDC RAM 32K….512K ≥ 256K ROM 128K….512K ≥ 512K Nguồn năng lượng Có giới hạn (nguồn pin) Không giới hạn Network Chậm Nhanh

Bảng 2-1 : Phân loại CLDC và CDC

Hình vẽ sau minh họa quan hệ giữa CLDC, CDC và Java 2 Standard Edition

(J2SE). Theo đó, chúng ta thấy một phần lớn các chức năng trong CLDC và CDC

có được do thừa kế từ Java 2 Standard Edition (J2SE). Mỗi lớp được thừa kế từ

J2SE phải giống hoặc gần giống với lớp tương ứng trong J2SE. Thêm vào đó,

CLDC và CDC có một số đặc tính khác được thiết kế cho các thiết bị nhúng mà

J2SE không có (ví dụ như các thành phần giao diện).

Hình 2-3 : Quan hệ giữa J2ME configuration và J2SE.

Page 46: Ban do tren dien thoai di dong co ho tro java

Chương 2 : Giới thiệu khái quát về chuẩn J2ME

29

2.2. Sự khác nhau giữa ngôn ngữ Java trên CLDC với Java thông thường :

Khả năng xử lý số thực :

Các phép toán trên số thực thường cần nhiều thời gian để xử lý. Ngoài ra,

phần lớn các thiết bị không có phần cứng hỗ trợ cho việc tính toán trên số thực, do

đó CLDC không hỗ trợ số thực.

Finalization :

Trong các lớp được viết bằng J2SE, chúng ta thường định nghĩa một phương

thức có tên là finalize(). Phương thức này sẽ được gọi trước khi bộ thu gom rác

(garbage collector) thu gom đối tượng. Phương thức này là nơi chúng ta đặt các mã

lệnh để giải phóng các tài nguyên đã sử dụng. Tuy nhiên, CLDC không hỗ trợ

phương thức finalize().

Xử lý lỗi :

Máy ảo Java hỗ trợ rất ít các ngoại lệ xử lý lỗi trong J2SE, lý do của hạn chế

này là :

• Việc xử lý lỗi trong J2SE là khá toàn diện, và đòi hỏi rất nhiều yêu cầu

về tài nguyên hệ thống.

• Thông thường, các hệ thống nhúng sẽ cung cấp xử lý lỗi của riêng

chúng. Một giải pháp đơn giản cho hầu hết các lỗi nghiêm trọng là thực

hiện khởi động lại máy, trong trường hợp này, những lập trình viên

không thể xử lý lỗi được vì đã quá trễ.

Các lớp thừa kế từ J2SE :

CLDC yêu cầu khoảng 160 KB để chạy máy ảo Java và các thư viện cơ bản.

Do đó, chỉ có một số lớp trong J2SE là được giữ lại trong CLDC :

• Các lớp hệ thống (system classes)

java.lang.Class java.lang.Object java.lang.Runnable (interface) java.lang.Runtime java.lang.String

Page 47: Ban do tren dien thoai di dong co ho tro java

Chương 2 : Giới thiệu khái quát về chuẩn J2ME

30

java.lang.StringBuffer java.lang.System java.lang.Thread java.lang.Throwable

• Các lớp thuộc kiểu dữ liệu (Data Type Classes) java.lang.Boolean java.lang.Byte java.lang.Character java.lang.Integer java.lang.Long java.lang.Short

• Collection Classes java.util.Enumeration (interface) java.util.Hashtable java.util.Stack java.util.Vector

• Các lớp nhập/xuất (Input/output Classes) java.io.ByteArrayInputStream java.io.ByteArrayOutputStream java.io.DataInput (interface) java.io.DataInputStream java.io.DataOutput (interface) java.io.DataOutputStream java.io.InputStream java.io.InputStreamReader java.io.OutputStream java.io.OutputStreamWriter java.io.PrintStream java.io.Reader java.io.Writer

• Calendar and Time Classes java.util.Calendar java.util.Date java.util.TimeZone

• Utility Classes java.lang.Math java.util.Random

Page 48: Ban do tren dien thoai di dong co ho tro java

Chương 2 : Giới thiệu khái quát về chuẩn J2ME

31

• Exception Classes java.io.EOFException java.io.InterruptedIOException java.io.IOException java.io.UnsupportedEncodingException java.io.UTFDataFormatException java.lang.ArithmeticException java.lang.ArrayIndexOutOfBoundsException java.lang.ArrayStoreException java.lang.ClassCastException java.lang.ClassNotFoundException java.lang.Exception java.lang.IllegalAccessException java.lang.IllegalArgumentException java.lang.IllegalMonitorStateException java.lang.IllegalThreadStateException java.lang.IndexOutOfBoundsException java.lang.InstantiationException java.lang.InterruptedException java.lang.NegativeArraySizeException java.lang.NullPointerException java.lang.NumberFormatException java.lang.RuntimeException java.lang.SecurityException java.lang.StringIndexOutOfBoundsException java.util.EmptyStackException java.util.NoSuchElementException

• Error Classes java.lang.Error java.lang.OutOfMemoryError java.lang.VirtualMachineError

• Internationalization java.io.InputStreamReader java.io.OutputStreamWriter

Các đặc tính được hỗ trợ :

Có rất ít đặc tính về hệ thống mà chúng ta có thể xem được. Sau đây là danh

sách các đặc tính có được và các câu lệnh để truy xuất chúng :

o Lấy thông tin về platform của thiết bị :

Page 49: Ban do tren dien thoai di dong co ho tro java

Chương 2 : Giới thiệu khái quát về chuẩn J2ME

32

System.getProperty("microedition.platform")

o Lấy bảng mã ký tự :

System.getProperty("microedition.encoding")

o Lấy tên và phiên bản của cấu hình (configuration)

System.getProperty("microedition.configuration")

o Lấy tên của các profile được hỗ trợ :

System.getProperty("microedition.profiles")

K Virtual Machine :

KVM là một máy ảo Java phù hợp với CLDC mà Sun MicroSystems đã phát

triển. KVM được thiết kế nhỏ và hiệu quả, KVM được viết bằng C để có thể hỗ trợ

tốt tính năng khả chuyển. Phần lớn mã lệnh của KVM sẽ không thay đổi theo thiết

bị, chỉ có một phần mã dùng để quản lý bộ nhớ, điều khiển lỗi, xử lý sự kiện… là

phụ thuộc vào thiết bị.

2.3. MIDP :

2.3.1. Định nghĩa :

Đây là Profile được định nghĩa dành riêng cho các thiết bị di động và là

thành phần chính trong J2ME. MIDP cung cấp các chức năng cơ bản cho hầu hết

các dòng thiết bị di động phổ biến nhất như các máy điện thoại di động và các máy

PDA. Tuy nhiên MIDP cũng có nhiều hạn chế lớn cũng vì chỉ được thiết kế cho các

máy di động có cấu hình rất thấp.

2.3.2. Yêu cầu về phần cứng :

• Màn hình có kích thước tối thiểu là 96 x 54 pixel.

• Có ít nhất một trong các thiết bị nhập sau : bàn phím, màn hình cảm ứng.

• Ít nhất 128 KB để chạy các thành phần của MIDP

• Ít nhất 8 KB để chạy các ứng dụng để chứa dữ liệu.

• Ít nhất 32 KB để chạy Java

• Kết nối mạng không dây.

Page 50: Ban do tren dien thoai di dong co ho tro java

Chương 2 : Giới thiệu khái quát về chuẩn J2ME

33

Các hệ điều hành trên các thiết bị thì thay đổi tùy theo thiết bị, do đó, MIDP

không quá khắt khe về các yêu cầu phần mềm. Sau đây là một số yêu cầu :

• Hệ điều hành trên các thiết bị phải cung cấp khả năng xử lý ngoại lệ, xử

lý ngắt, và phải chạy được máy ảo Java

• Hỗ trợ vẽ ảnh bitmap ra màn hình.

• Dùng một trong 3 loại thiết bị nhập đã liệt kê ở trên,.

• Hỗ trợ đọc và ghi dữ liệu từ bộ nhớ chính.

2.3.3. Các khả năng và hạn chế của MIDP :

Các hạn chế của MIDP :

MIDP KHÔNG hỗ trợ các tính năng sau :

• Phép tính dấu phẩy động (floating point): Phép tính này đòi hỏi rất nhiều

tài nguyên CPU và phần lớn các CPU cho các thiết bị di động không hỗ trợ phép

tính này, do đó MIDP cũng không có.

• Bộ nạp class (Class Loader).

• Hỗ trợ từ khóa finalize() như trong J2SE: Việc “dọn dẹp“ tài nguyên

trước khi nó bị xóa được đẩy về phía các lập trình viên.

• Không hỗ trợ JNI

• Hỗ trợ hạn chế thao tác bắt lỗi.

• Phần lớn các thư viện API cho Swing và AWT không thể sử dụng được

trong MIDP.

• Không hỗ trợ các tính năng quản lý file và thư mục. Điều này có thể làm

chúng ta ngạc nhiên nhưng thực tế là các thiết bị J2ME không có hỗ trợ các thiết bị

lưu trữ thông thường như ổ cứng… Tuy nhiên, điều đó không có nghĩa là chúng

phải mất đi mọi dữ liệu quan trọng mỗi khi tắt máy, Sun đã cung cấp một chức năng

khác tương đương gọi là Record Management system (RMS) để cung cấp khả năng

lưu trữ cho các thiết bị này.

Page 51: Ban do tren dien thoai di dong co ho tro java

Chương 2 : Giới thiệu khái quát về chuẩn J2ME

34

Những chức năng MIDP cung cấp :

• Các lớp và kiểu dữ liệu : Phần lớn các lớp mà các lập trình viên Java quen

thuộc vẫn còn được giữ lại ví dụ như các lớp trong gói java.util như Stack, Vector

và Hastable cũng như Enumeration.

• Hỗ trợ đối tượng Display. Đúng như tên gọi, một chương trình MIDP sẽ

hỗ trợ duy nhất một đối tượng Display là đối tượng quản lý việc hiển thị dữ liệu trên

màn hình điện thoại.

• Hỗ trợ Form và các giao diện người dùng.

• Hỗ trợ Timer và Alert.

• Cung cấp tính năng Record Management System (RMS) cho việc lưu trữ

dữ liệu.

Ngoài ra vào tháng 11 năm 2003 Sun đã tung ra MIDP 2.0 với hàng loạt tính

năng khác được cung cấp thêm so với bản 1.0 (Hiện nay tại Việt Nam có rất nhiều

đời điện thoại hỗ trợ MIDP 2.0 như Nokia 6600, Sony Ericsson P900,..). Sau đây là

các cải tiến nổi bật so với MIDP 1.0

• Nâng cấp các tính năng bảo mật như :

o Download qua mạng an toàn hơn qua việc hỗ trợ giao thức

HTTPS.

o Kiểm soát việc kết nối giữa máy di động và server: ví dụ như các

chương trình không thể kết nối tới server nếu thiếu sự chấp thuận

của người sử dụng.

• Thêm các API hỗ trợ Multimedia.

• Mở rộng các tính năng của Form. Nhiều cải tiến đã được đưa vào API

javax.microedition.lcdui trong MIDP 2.0, nhưng các thay đổi lớn nhất (ngoài API

cho game) là trong Form và Item.

• Hỗ trợ các lập trình viên Game bằng cách tung ra Game API. Có lẽ Sun

đã kịp nhận ra thị trường đầy tiềm năng của các thiết bị di động trong lĩnh vực

Game. Với MIDP 1.0 thì các lập trình viên phải tự mình viết code để quản lý các

Page 52: Ban do tren dien thoai di dong co ho tro java

Chương 2 : Giới thiệu khái quát về chuẩn J2ME

35

hành động của nhân vật cũng như quản lý đồ họa. Việc này sẽ làm tăng kích thước

file của sản phẩm cũng như việc xuất hiện các đoạn mã bị lỗi. Được hưởng lợi nhất

từ Game API trong MIDP 2.0 không chỉ là các lập trình viên Game mà còn là các

lập trình viên cần sử dụng các tính năng đồ họa cao cấp.

• Ý tưởng cơ bản của Game API là việc giả định rằng một màn hình game

là tập hợp các layer (lớp). Ví dụ như : trong một game đua xe thì màn hình nền là

một layer, con đường là một layer và chiếc xe được xem như đang nằm trên layer

khác.

• Với Game API nhà phát triển còn được cung cấp các tính năng như quản

lý các thao tác bàn phím.

• Hỗ trợ kiểu ảnh RGB : một trong những cải tiến hấp dẫn cho các nhà phát

triển MIDP là việc biểu diễn hình ảnh dưới dạng các mảng số nguyên, cho phép

MIDlet thao tác với dữ liệu hình ảnh một cách trực tiếp.

Page 53: Ban do tren dien thoai di dong co ho tro java

Chương 3 : Những khó khăn do hạn chế của J2ME

36

Chương 3 : NHỮNG KHÓ KHĂN DO HẠN CHẾ CỦA J2ME

Như chương 2 đã đề cập, J2ME được thiết kế nhắm đến thị trường các thiết

bị di động có cấu hình thấp, hạn chế về năng lực xử lý và khả năng lưu trữ. Cũng vì

vậy, bộ thư viện lớp của J2ME cũng được giản lược để trở nên đơn giản và gọn nhẹ

hơn rất nhiều so với J2SE. Những hàm, lớp ít khi sử dụng, không cần thiết hoặc

không thể cài đặt được do khả năng hạn chế của phần cứng thiết bị đều được loại

bỏ. Tuy vậy, việc loại bỏ quá nhiều thư viện hàm cũng gây không ít khó khăn cho

nhóm trong quá trình thực hiện đề tài, đặc biệt là việc thiếu thốn các hàm về đồ họa.

Điều này đặt ra yêu cầu tìm kiếm giải pháp khắc phục hoặc các giải pháp thay thế.

3.1. Các hàm tô màu :

Thư viện đồ họa của J2ME – MIDP 1.0 chỉ hỗ trợ các hàm tô màu sau :

fillArc : tô màu cho vùng giới hạn bởi một cung

fillRect : tô màu cho một hình chữ nhật

fillRoundRect : tô màu cho một hình chữ nhật có góc tròn

Nhằm giúp người xem bản đồ dễ dàng phân biệt được các đơn vị hành chính

(trong đề tài này, đó là các quận), hầu hết trong mọi bản đồ, người ta thường tô màu

cho mỗi đơn vị sao cho hai vùng kế cận nhau không cùng màu với nhau.

Nếu như trong Visual C++, chúng ta có thể sử dụng ít nhất là 1 trong 3 hàm

FillRgn, FillPolygon, FloodFill để thực hiện được việc này. Trong phiên bản Java

chuẩn (J2SE) cũng có cung cấp hàm FillPolygon nhưng đáng tiếc là trong J2ME,

hàm này lại bị lược bỏ và chuẩn J2ME cũng không cung cấp hàm nào giúp tô màu

Page 54: Ban do tren dien thoai di dong co ho tro java

Chương 3 : Những khó khăn do hạn chế của J2ME

37

cho một vùng kín có hình dạng bất kỳ. Nếu chỉ sử dụng 3 hàm tô màu như trên thì

không thể nào thực hiện được.

Tuy vậy, một điều may mắn là trong phiên bản MIDP 2.0, thư viện đồ họa lại

được thêm vào 1 hàm mới, đó là fillTriangle. Đó là một cơ hội mà chúng ta có thể

tận dụng được.

Theo một quy tắc trong đồ họa máy tính, một mặt phẳng bất kỳ, kể cả hình

tròn đều có thể được lợp kín từ nhiều tam giác (với số lượng tam giác đủ lớn). Như

vậy, nếu chúng ta có thể tạo được các tam giác từ dữ liệu về ranh giới của các quận

rồi áp dụng hàm fillTriangle thì vấn đề tô màu cho các quận sẽ được giải quyết.

Tuy nhiên, cách này có một hạn chế đó là chỉ có thể thực hiện được nếu điện

thoại di động sử dụng MIDP 2.0

3.2. Các hàm vẽ đường :

Thư viện đồ họa trong J2ME chỉ hỗ trợ hàm vẽ đường thẳng có độ dày là 1

pixel, ngoài ra không có hàm nào khác cho phép thay đổi độ dày này, điều mà

chúng ta có thể thay đổi được chỉ là dạng nét vẽ : nét liền (SOLID) hay nét đứt

(DOTTED). Nếu so với phiên bản chuẩn J2SE thì chúng ta thấy rằng thư viện đồ

họa J2ME đã bị loại bỏ hàm setStroke vốn dễ dàng thực hiện được điều này.

Như vậy, khi cần vẽ các con đường trên bản đồ có độ dày mỏng khác nhau

và đủ lớn để có thể vẽ tên đường trên đó cũng như để phân biệt các đại lộ với các

đường nhỏ hơn, chúng ta buộc phải vẽ liên tiếp nhiều đoạn thẳng xếp cạnh nhau.

Page 55: Ban do tren dien thoai di dong co ho tro java

Chương 3 : Những khó khăn do hạn chế của J2ME

38

Đây là các giải quyết đơn giản nhất, tuy nhiên, việc gọi nhiều hàm vẽ liên tục

cũng có hạn chế là làm giảm tốc độ của chương trình. Do đó, chương trình cần phải

so sánh để loại bỏ việc vẽ những những đường không nhìn thấy và hạn chế đến mức

thấp nhất số đoạn thẳng cần vẽ.

3.3. Vấn đề font chữ :

J2ME không cho phép chúng ta thay đổi loại font chữ cho đối tượng

Graphics, có nghĩa là không cho phép chúng ta quy định font family, font size…

Điều này có thể là do font hệ thống trong thiết bị là có giới hạn và chỉ có một số

điện thoại di động cho phép cài đặt thêm font chữ vào máy.

Khi tạo một đối tượng thuộc lớp Font để sử dụng, chúng ta chỉ có một cách,

đó là :

Font font = Font.getFont(int face, int style, int size)

Trong đó, các tham số truyền vào bắt buộc phải là các hằng số sau :

face : FACE_SYSTEM, FACE_MONOSPACE, FACE_PROPORTIONAL

style : STYLE_PLAIN, hoặc tổ hợp từ các dạng STYLE_BOLD,

STYLE_ITALIC, STYLE_UNDERLINED

size : SIZE_SMALL, SIZE_MEDIUM, SIZE_LARGE

Đặc điểm này gây ra một bất lợi cho chương trình, đó là khó xác định được

chính xác kích thước của font chữ được sử dụng để lựa chọn cho phù hợp vì đối với

một số điện thoại, font với kích thước trung bình có thể đẹp, nhưng với một số điện

thoại khác thì quá to hoặc quá nhỏ hay quá cao.

Mặt khác, khi phóng to bản đồ đến một mức nào đó thì font chữ có kích

thước tối đa cũng sẽ trở nên quá nhỏ và không còn phù hợp nữa. Đây là một vấn đề

thuộc về hệ thống cho nên nhóm thực hiện đề tài không khắc phục được triệt để mà

Page 56: Ban do tren dien thoai di dong co ho tro java

Chương 3 : Những khó khăn do hạn chế của J2ME

39

chỉ có thể chọn lựa được dạng font cùng với kích thước thích hợp nhất phù hợp với

phần lớn điện thoại phổ biến trên thị trường Việt Nam hiện nay.

3.4. Vấn đề vẽ chuỗi ký tự :

Trong J2ME, việc vẽ một chuỗi ký tự được thực hiện thông qua hàm sau :

public void drawString(String str, int x, int y, int anchor)

với x, y là tọa độ bắt đầu vẽ và anchor là chế độ căn lề. Anchor được tổ hợp từ 1

hằng số căn lề theo chiều ngang (LEFT, HCENTER, RIGHT) và 1 hằng số nhằm

căn lề theo chiều dọc (TOP, BASELINE, BOTTOM).

Nếu như trong Visual C++, chúng ta có thể vẽ chuỗi ký tự xoay theo mọi

hướng nhờ vào 2 trường lfEscapement và lfOrientation của struct LOGFONT thì

trong J2ME, chúng ta không được cung cấp bất cứ một hàm, một đối tượng nào có

chức năng tương tự như thế. Mọi chuỗi ký tự do thư viện đồ họa của J2ME vẽ ra

đều có chiều nằm ngang.

Như vậy, nếu một con đường trên bản đồ có chiều không nằm theo phương

ngang (hầu hết các đường đều như vậy) thì chúng ta không thể sử dụng hàm vẽ

chuỗi ký tự nêu trên để vẽ tên đường cũng như không thể xoay tên theo hướng của

đường như trong các bản đồ bình thường khác :

Page 57: Ban do tren dien thoai di dong co ho tro java

Chương 3 : Những khó khăn do hạn chế của J2ME

40

Để khắc phục việc này, chúng ta có thể sử dụng một giải pháp thay thế, đó là

phân rã chuỗi tên đường thành các ký tự rồi trực tiếp tính toán để xác định vị trí của

mỗi ký tự trên bản đồ, sau đó sử dụng hàm vẽ ký tự để hiển thị từng ký tự này ra

màn hình :

public void drawChar(char character, int x, int y, int anchor)

ý nghĩa của các tham số tương tự như hàm drawString.

Sau khi áp dụng phương pháp trên, kết quả đạt được như sau :

Nhận xét :

Giải pháp này cũng chưa thật sự tốt do buộc chương trình phải xử lý, tính

toán nhiều. Ngoài ra, việc vẽ các ký tự trong tên đường một cách rời rạc như vậy

cũng có thể khiến người sử dụng khó theo dõi nếu một vùng nào đó có số lượng

đường giao thông nhiều và nằm gần nhau. Tuy vậy, trong điều kiện thiếu thốn các

hàm về xử lý font chữ, các hàm vẽ ký tự của thư viện đồ họa thì đây là giải pháp

duy nhất, tốc độ thực hiện cũng có thể chấp nhận được.

3.5. Vấn đề về số thực :

Như chương 2 đã trình bày, J2ME đã loại bỏ kiểu dữ liệu số thực (float,

double). Từ lý do này chương trình gặp phải một số khó khăn sau :

- Phải xây dựng lại hàm tính căn bậc 2 để phục vụ cho mục đích xác định

khoảng cách giữa 2 tọa độ.

- Vì không hỗ trợ số thực cho nên J2ME cũng không hỗ trợ các hàm tính sin,

cos của một góc. Như vậy, chúng ta không thể vẽ được mũi tên cho các đoạn

đường một chiều bởi vì để xác định được 2 đoạn thẳng trên đầu mũi tên,

Page 58: Ban do tren dien thoai di dong co ho tro java

Chương 3 : Những khó khăn do hạn chế của J2ME

41

chúng ta bắt buộc phải sử dụng đến công thức lượng giác. Hiện nay, có nhiều

lập trình viên trên thế giới xây dựng một thư viện bổ sung để xử lý các số

thực :

http://bearlib.sourceforge.net

http://henson.newmail.ru/j2me/Float.htm

Tuy nhiên, xét thấy việc sử dụng thêm các thư viện hàm bổ sung sẽ làm tăng

đáng kể kích thước và việc tính toán nhiều trên số thực cũng khiến cho chương trình

chạy chậm đi, hơn nữa, đây cũng không phải là tính năng thực sự quan trọng nên

nhóm thực hiện đề tài không cài đặt phần này.

Page 59: Ban do tren dien thoai di dong co ho tro java

Chương 4 : Phân tích – Thiết kế ứng dụng

42

Chương 4 : PHÂN TÍCH – THIẾT KẾ ỨNG DỤNG

4.1. Khảo sát hiện trạng :

Hiện nay, trên thế giới cũng như tại Việt Nam, các điện thoại di động đang

được sử dụng ngày càng nhiều. Chiếc điện thoại di động tuy nhỏ bé nhưng hết sức

tiện lợi, ngoài chức năng liên lạc, nó còn là một phụ tá không thể thiếu và là một

phương tiện phục vụ cho giải trí rất lý thú. Do đó, điện thoại di động ngày càng

khẳng định được vị trí của nó trong cuộc sống của chúng ta.

Các điện thoại di động hiện nay có thể chạy được rất nhiều phần mềm, phần

lớn các ứng dụng này là trò chơi, chỉ có một số ít là ứng dụng tiện ích như máy tính,

từ điển, chương trình nghe nhạc, xem phim... Thị trường phần mềm trên điện thoại

di động đang dần dần phát triển và ngày càng trở nên hấp dẫn. Tuy nhiên, với ứng

dụng bản đồ điện tử trên điện thoại di động (chạy trên nền Java) thì rất ít. Ứng dụng

bản đồ cụ thể cho mạng giao thông ở Việt Nam nói chung, cho thành phố Hồ Chí

Minh thì hiện chỉ có một vài sản phẩm, nhưng có rất ít chức năng và rất cồng kềnh,

không thể sử dụng được cho các máy có ít bộ nhớ. Do đó, việc xây dựng một ứng

dụng bản đồ điện tử cho các máy điện thoại di động dựa trên nền Java là hết sức cần

thiết. Ứng dụng này sẽ giúp cho người dùng xem bản đồ, tìm đường, tìm các địa

điểm (trường học, khách sạn, bệnh viện…), tìm đường đi giữa hai địa điểm khi cần.

Trong bối cảnh Việt Nam đang hội nhập với thế giới, thành phố Hồ Chí

Minh lại là một trong những vùng kinh tế trọng điểm của cả nước. Việc cho ra đời

một sản phẩm bản đồ trên điện thoại di động như thế sẽ giúp ích rất nhiều cho các

thương gia, du khách trong và ngoài nước cũng như người dân thuận tiện trong việc

đi lại, tham quan tìm hiểu thành phố.

Page 60: Ban do tren dien thoai di dong co ho tro java

Chương 4 : Phân tích – Thiết kế ứng dụng

43

4.2. Phân tích và xác định yêu cầu :

Dựa trên các yêu cầu về tìm kiếm thông tin của một người trên bản đồ giấy,

nhóm thực hiện đưa ra các yêu cầu của ứng dụng bản đồ điện tử như sau.

4.2.1. Danh sách các yêu cầu nghiệp vụ :

STT Chức năng Ghi chú

1 Hiển thị bản đồ 2 Phóng to, thu nhỏ bản đồ 3 Di chuyển bản đồ 4 Di chuyển nhanh đến một quận trên bản đồ 5 Tìm đường đi theo tên 6 Tìm địa điểm theo tên 7 Tìm đường đi ngắn nhất giữa hai vị trí trên bản đồ 8 Trợ giúp người dùng trong việc sử dụng bản đồ

Bảng 4-1 : Danh sách các yêu cầu nghiệp vụ

4.2.2. Các yêu cầu phi chức năng :

Chương trình phải chạy được trên các máy điện thoại thông thường.

Tốc độ duyệt, tốc độ tìm kiếm chấp nhận được.

Kích thước của chương trình không được quá lớn.

Page 61: Ban do tren dien thoai di dong co ho tro java

Chương 4 : Phân tích – Thiết kế ứng dụng

44

4.3. Thiết kế ứng dụng :

4.3.1. Lược đồ sử dụng :

Hình 4-1 : Lược đồ sử dụng

Page 62: Ban do tren dien thoai di dong co ho tro java

Chương 4 : Phân tích – Thiết kế ứng dụng

45

4.3.2. Đặc tả Use Case :

View map :

a. Mô tả :

Người sử dụng muốn hệ thống vẽ lại thông tin của bản đồ.

b. Dòng sự kiện :

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

- Use case bắt đầu khi hệ thống được yêu cầu vẽ lại bản đồ.

- Hệ thống xóa thông tin cũ của bản đồ.

- Dịch chuyển tới tọa độ lưu trong máy.

- Hệ thống vẽ thông tin quận, đường và địa điểm nằm trong

vùng bản đồ được nhìn thấy.

- Vẽ con trỏ trên bản đồ.

- Kết thúc Use Case

Dòng sự kiện nhánh :

- Không có.

c. Yêu cầu đặc biệt :

- Không có.

d. Điều kiện đầu :

- Không có.

e. Điều kiện sau :

- Không có.

f. Điểm mở rộng :

- Không có.

Page 63: Ban do tren dien thoai di dong co ho tro java

Chương 4 : Phân tích – Thiết kế ứng dụng

46

Zoom map :

a. Mô tả :

Người sử dụng muốn phóng to, thu nhỏ bản đồ.

b. Dòng sự kiện :

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

- Use case bắt đầu khi người sử dụng nhấn nút phóng to hay thu

nhỏ.

- Nếu tỉ lệ vẽ hiện nay đã là lớn nhất hay nhỏ nhất thì kết thúc Use

Case.

- Hệ thống thực hiện tăng/giảm tỉ lệ vẽ của bản đồ.

- Hệ thống tính toán lại các thông số dùng để vẽ bản đồ.

- Use case kết thúc.

c. Yêu cầu đặc biệt :

- Không có

d. Điều kiện đầu :

- Không có

e. Điều kiện sau :

- Hệ thống vẽ lại bản đồ theo các thông số mới.

f. Điểm mở rộng :

- Không có.

Page 64: Ban do tren dien thoai di dong co ho tro java

Chương 4 : Phân tích – Thiết kế ứng dụng

47

Move map :

a. Mô tả :

Người sử dụng thực hiện di chuyển bản đồ theo các hướng qua trái, qua

phải, lên trên, xuống dưới, lên góc trên bên phải, lên góc trên bên trái, xuống

góc dưới bên phải, xuống góc dưới bên trái.

b. Dòng sự kiện :

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

- Use case bắt đầu khi người sử dụng nhấn các phím di chuyển

bản đồ.

- Hệ thống thực hiện tính lại tọa độ bản đồ.

- Hệ thống tính lại tọa độ con trỏ.

- Use case kết thúc.

c. Yêu cầu đặc biệt :

- Không có.

d. Điều kiện đầu :

- Không có.

e. Điều kiện sau :

- Hệ thống vẽ lại bản đồ theo các thông số mới.

f. Điểm mở rộng :

- Không có.

Page 65: Ban do tren dien thoai di dong co ho tro java

Chương 4 : Phân tích – Thiết kế ứng dụng

48

Move cursor :

a. Mô tả :

Người sử dụng thực hiện di chuyển con trỏ theo các hướng qua trái, qua

phải, lên trên, xuống dưới.

b. Dòng sự kiện :

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

- Use case bắt đầu khi người sử dụng nhấn các phím di chuyển

con trỏ.

- Nếu con trỏ đã chạm biên màn hình thì kết thúc Use Case.

- Hệ thống thực hiện tính lại tọa độ con trỏ.

- Use case kết thúc.

c. Yêu cầu đặc biệt :

- Không có.

d. Điều kiện đầu :

- Không có.

e. Điều kiện sau :

- Hệ thống vẽ lại bản đồ theo các thông số mới.

f. Điểm mở rộng :

- Không có.

Page 66: Ban do tren dien thoai di dong co ho tro java

Chương 4 : Phân tích – Thiết kế ứng dụng

49

Move to district :

a. Mô tả :

Người sử dụng thực hiện di chuyển nhanh đến một quận nào đó

trong thành phố.

b. Dòng sự kiện :

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

- Hệ thống hiển thị danh sách tên tất cả các quận trong thành

phố.

- Nếu người sử dụng gõ tên quận để tìm thì thực hiện luồng

nhánh A1.

- Nếu người sử dụng không muốn tìm nữa thì thực hiện luồng

nhánh A2.

- Người sử dụng chọn quận cần đến từ danh sách.

- Hệ thống cập nhật lại tọa độ bản đồ theo tọa độ của quận cần

đến

- Tắt màn hình tìm kiếm quận.

- Use Case kết thúc.

Dòng sự kiện nhánh A1: Người sử dụng gõ tên quận để tìm.

- Người sử dụng nhập tên quận cần di chuyển.

- Hệ thống tìm kiếm và cập nhật lại danh sách tên các quận theo

thông tin người sử dụng đã nhập.

Dòng sự kiện nhánh A2: Người sử dụng trở về màn hình trước mà

không tìm quận.

- Hệ thống tắt màn hình tìm kiếm quận.

- Use Case kết thúc.

c. Yêu cầu đặc biệt :

- Không có.

d. Điều kiện đầu :

- Không có.

Page 67: Ban do tren dien thoai di dong co ho tro java

Chương 4 : Phân tích – Thiết kế ứng dụng

50

e. Điều kiện sau :

- Hệ thống vẽ lại bản đồ theo tọa độ mới .

f. Điểm mở rộng :

- Không có.

Page 68: Ban do tren dien thoai di dong co ho tro java

Chương 4 : Phân tích – Thiết kế ứng dụng

51

Search place :

a. Mô tả :

Người sử dụng muốn tìm kiếm một địa điểm nào đó trong thành phố.

b. Dòng sự kiện :

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

- Hệ thống hiển thị danh sách các loại địa điểm trong thành phố.

- Nếu người sử dụng không muốn tìm nữa thì thực hiện luồng

nhánh A1.

- Người sử dụng chọn loại địa điểm cần tìm từ danh sách.

- Hệ thống hiển thị danh sách các địa điểm thuộc loại này.

- Nếu người dùng không muốn tìm các địa điểm thuộc loại này

thì thực hiện dòng sự kiện nhánh A2.

- Nếu người sử dụng gõ tên địa điểm để tìm thì thực hiện luồng

nhánh A3.

- Người sử dụng chọn địa điểm cần đến từ danh sách.

- Hệ thống cập nhật lại tọa độ bản đồ theo tọa độ của địa điểm

cần đến

- Tắt màn hình tìm kiếm địa điểm.

- Use Case kết thúc

Dòng sự kiện nhánh A1 : người sử dụng không muốn tìm kiếm nữa

- Tắt màn hình danh sách các loại địa điểm.

- Kết thúc Use Case.

Dòng sự kiện nhánh A2 : người sử dụng muốn quay trở lại màn hình

danh sách các loại địa điểm

- Tắt màn hình danh sách các địa điểm.

- Hiển thị màn hình danh sách các loại địa điểm

Dòng sự kiện nhánh A3 : người sử dụng gõ tên địa điểm để tìm kiếm

- Người sử dụng nhập tên địa điểm cần di chuyển.

Page 69: Ban do tren dien thoai di dong co ho tro java

Chương 4 : Phân tích – Thiết kế ứng dụng

52

- Hệ thống tìm kiếm và cập nhật lại danh sách tên các địa điểm

theo thông tin người sử dụng đã nhập.

c. Yêu cầu đặc biệt :

- Không có.

d. Điều kiện đầu :

- Không có.

e. Điều kiện sau :

- Hệ thống vẽ lại bản đồ theo tọa độ mới .

f. Điểm mở rộng :

- Không có.

Page 70: Ban do tren dien thoai di dong co ho tro java

Chương 4 : Phân tích – Thiết kế ứng dụng

53

Search street base on name :

a. Mô tả :

Người sử dụng muốn tìm kiếm một con đường trong thành phố.

b. Dòng sự kiện :

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

- Hệ thống hiển thị danh sách tên 10 con đường đầu tiên trong

thành phố.

- Nếu người sử dụng không muốn tìm nữa thì thực hiện luồng

nhánh A1.

- Nếu người sử dụng nhập tên đường để tìm thì thực hiện luồng

nhánh A2.

- Nếu người sử dụng muốn xem 10 con đường tiếp theo thì thực

hiện luồng nhánh A3.

- Nếu người sử dụng muốn xem 10 con đường trước đó thì thực

hiện luồng nhánh A4.

- Người sử dụng chọn đường cần đến từ danh sách.

- Hệ thống cập nhật lại tọa độ bản đồ theo tọa độ của đường cần

đến

- Tắt màn hình tìm kiếm đường.

- Use Case kết thúc.

Dòng sự kiện nhánh A1 : Người sử dụng không muốn tìm nữa

- Hệ thống tắt màn hình tìm kiếm đường.

- Use Case kết thúc.

Dòng sự kiện nhánh A2 : Người sử dụng nhập tên đường để tìm

- Người sử dụng nhập tên đường cần tìm.

- Hệ thống tìm kiếm và cập nhật lại danh sách tên các con

đường theo thông tin người sử dụng đã nhập.

Dòng sự kiện nhánh A3 : Người sử dụng muốn xem 10 con đường tiếp

theo

Page 71: Ban do tren dien thoai di dong co ho tro java

Chương 4 : Phân tích – Thiết kế ứng dụng

54

- Hệ thống hiển thị danh sách 10 con đường tiếp theo nếu có.

Dòng sự kiện nhánh A4 : Người sử dụng muốn xem 10 con đường

trước đó

- Hệ thống hiển thị danh sách 10 con đường trước đó nếu có.

c. Yêu cầu đặc biệt :

- Không có.

d. Điều kiện đầu :

- Không có.

e. Điều kiện sau :

- Hệ thống vẽ lại bản đồ theo tọa độ mới .

f. Điểm mở rộng :

- Không có

Page 72: Ban do tren dien thoai di dong co ho tro java

Chương 4 : Phân tích – Thiết kế ứng dụng

55

Search shortest way :

a. Mô tả :

Người sử dụng tìm kiếm đường đi ngắn nhất giữa hai điểm trong

thành phố.

b. Dòng sự kiện :

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

- Người sử dụng xác định điểm khởi hành.

- Người sử dụng xác định điểm cần đến.

- Người sử dụng chọn chức năng tìm đường đi ngắn nhất.

- Hệ thống thực hiện tìm kiếm đường đi ngắn nhất giữa hai

điểm, nếu chưa chọn địa điểm khởi hành hay địa điểm đến thì

thực hiện dòng sự kiện lỗi E1.

- Hệ thống hiển thị chỉ dẫn đường đi cho người sử dụng.

- Hệ thống vẽ đường đi trên bản đồ.

- Use Case kết thúc.

Dòng sự kiện phụ E1 : Người sử dụng chọn chức năng tìm đường đi

mà chưa chọn điểm khởi hành hay điểm đến.

- Hệ thống thông báo lỗi cho người sử dụng.

- Use Case kết thúc.

c. Yêu cầu đặc biệt :

- Không có.

d. Điều kiện đầu :

- Không có.

e. Điều kiện sau :

- Hệ thống vẽ lại bản đồ.

f. Điểm mở rộng :

- Không có.

Page 73: Ban do tren dien thoai di dong co ho tro java

Chương 4 : Phân tích – Thiết kế ứng dụng

56

Help :

a. Mô tả :

Người sử dụng muốn xem thông tin hướng dẫn sử dụng hệ thống.

b. Dòng sự kiện :

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

- Người sử dụng chọn chức năng hướng dẫn sử dụng.

- Hệ thống hiển thị danh sách các chức năng của phần mềm.

- Người sử dụng chọn chức năng của hệ thống cần hướng dẫn.

- Hệ thống hiển thị thông tin hướng dẫn sử dụng của chức năng

đã chọn.

- Use Case kết thúc.

c. Yêu cầu đặc biệt :

- Không có.

d. Điều kiện đầu :

- Không có.

e. Điều kiện sau :

- Hệ thống vẽ lại bản đồ.

f. Điểm mở rộng :

- Không có.

Page 74: Ban do tren dien thoai di dong co ho tro java

Chương 4 : Phân tích – Thiết kế ứng dụng

57

4.3.3. Sơ đồ lớp mức phân tích :

IndexListFindObjectFormMessageBox

MainMIDlet

Districts

Places

Streets

MainCanvas

Hình 4-2 : Sơ đồ lớp mức phân tích

Page 75: Ban do tren dien thoai di dong co ho tro java

Chương 4 : Phân tích – Thiết kế ứng dụng

58

Mô tả các lớp :

a. Lớp MainMIDlet :

MainMIDlet

Canvas

//MainMIDlet()//startApp()//pauseApp()//destroyApp()//qui tApp()//commandAction()

Hình 4-3 : Mô tả lớp MainMIDlet

STT Thuộc tính Ý nghĩa 1. Canvas Màn hình hiển thị bản đồ

Bảng 4-2 : Phân tích các thuộc tính lớp MainMIDlet

STT Phương thức Ý nghĩa 1. //MainMIDlet Hàm khởi tạo MIDlet 2. //startApp Phương thức mặc định được gọi khi chạy ứng dụng 3. //pauseApp Phương thức mặc định được gọi khi tạm dừng ứng

dụng 4. //destroyApp Phương thức mặc định được gọi khi thoát ứng dụng 5. //quitApp Phương thức mặc định được gọi khi thoát ứng dụng 6. //commandAction Phương thức xử lý sự kiện trong chương trình

Bảng 4-3 : Phân tích các phương thức lớp MainMIDlet

Page 76: Ban do tren dien thoai di dong co ho tro java

Chương 4 : Phân tích – Thiết kế ứng dụng

59

b. Lớp MainCanvas :

MainCanvas

districts : Districtsplaces : Placesstreets : Streets

//MainCanvas()//keyPressed()//keyReleased()//keyAction()//paint()//destroy()//move()//find shortest path()

Hình 4-4 : Mô tả lớp MainCanvas

STT Thuộc tính Ý nghĩa 1. districts đối tượng lưu trữ, xử lý về quận 2. places đối tượng lưu trữ, xử lý về các địa điểm 3. streets đối tượng lưu trữ, xử lý về đường đi

Bảng 4-4 : Phân tích các thuộc tính lớp MainCanvas

STT Phương thức Ý nghĩa 1. //MainCanvas Hàm khởi tạo MainCanvas 2. //keyPressed Phương thức xứ lý sự kiện nhấn phím 3. //keyReleased Phương thức xứ lý sự kiện buông phím 4. //keyAction Phương thức xử lý các phím được nhấn 5. //paint Phương thức vẽ, thể hiện bản đồ lên màn hình 6. //destroy Phương thức hủy, giải phóng tài nguyên mà lớp có sử

dụng

Bảng 4-5 : Phân tích các phương thức lớp MainCanvas

Page 77: Ban do tren dien thoai di dong co ho tro java

Chương 4 : Phân tích – Thiết kế ứng dụng

60

c. Lớp FindObjectForm :

FindObjectForm

//FindObjectForm()// itemStateChanged()//destroy ()

Hình 4-5 : Mô tả lớp FindObjectForm

STT Phương thức Ý nghĩa 1. //FindObjectForm Hàm khởi tạo lớp FindObjectForm 2. //itemStateChanged Phương thức xử lý sự kiện chọn một đối tượng trên

màn hình 3. //destroy Phương thức hủy, giải phóng tài nguyên

Bảng 4-6 : Phân tích các phương thức lớp FindObjectForm

d. Lớp MessageBox :

MessageBox

//MessageBox()//Show()//commandAction()

Hình 4-6 : Mô tả lớp MessageBox

STT Phương thức Ý nghĩa 1. //MessageBox Hàm khởi tạo của lớp MessageBox 2. //Show Phương thức thể hiện MessageBox 3. //commandAction Phương thức xử lý sự kiện của lớp MessageBox

Bảng 4-7 : Phân tích các phương thức lớp MessageBox

Page 78: Ban do tren dien thoai di dong co ho tro java

Chương 4 : Phân tích – Thiết kế ứng dụng

61

e. Lớp IndexList :

IndexList

//IndexList()//commandAction()

Hình 4-7 : Mô tả lớp IndexList

STT Phương thức Ý nghĩa 1. //IndexList Hàm khởi tạo IndexList 2. //commandAction Phương thức xử lý sự kiện của lớp IndexList

Bảng 4-8 : Phân tích các phương thức lớp IndexList

f. Lớp Districts :

Districts

//Districts()//drawDistrict()//drawDistrictNames()//destroy()

Hình 4-8 : Mô tả lớp Districts

STT Phương thức Ý nghĩa 1. //Districts Hàm khởi tạo, đọc dữ liệu quận vào bộ nhớ 2. //drawDistrict Phương thức vẽ ranh giới quận 3. //drawDistrictNames Phương thức tên quận 4. //destroy Phương thức hủy, giải phóng tài nguyên

Bảng 4-9 : Phân tích các phương thức lớp Districts

Page 79: Ban do tren dien thoai di dong co ho tro java

Chương 4 : Phân tích – Thiết kế ứng dụng

62

g. Lớp Places :

Places

//Places()//drawPlaces()//destroy ()

Hình 4-9 : Mô tả lớp Places

STT Phương thức Ý nghĩa 1. //Places Hàm khởi tạo, đọc dữ liệu quận vào bộ nhớ 2. //drawPlaces Phương thức vẽ địa điểm 3. //destroy Phương thức hủy, giải phóng tài nguyên

Bảng 4-10 : Phân tích các phương thức lớp Places

Page 80: Ban do tren dien thoai di dong co ho tro java

Chương 4 : Phân tích – Thiết kế ứng dụng

63

h. Lớp Streets :

Streets

//Streets()//drawStreets()//drawNodes()//drawArc()//drawStreetName()//drawGuidingPath()//findShortestPath()//destroy()//getFoundPathString()

Hình 4-10 : Mô tả lớp Streets

STT Phương thức Ý nghĩa 1. //Streets Hàm khởi tạo, đọc dữ liệu đường vào bộ nhớ 2. //drawStreets Phương thức vẽ đường 3. //drawNodes Phương thức vẽ nút bắt đầu,kết thúc của đoạn đường

cần tìm 4. //drawArc Phương thức vẽ 1 cung của đường 5. //drawStreetName Phương thức vẽ tên đường 6. //drawGuidingPath Phương thức vẽ lộ trình đi từ điểm bắt đầu đến điểm

kết thúc. 7. //findShortestPath Phương thức tìm đường đi ngắn nhất giữa hai điểm 8. //getFoundPathString Phương thức tạo ra một chuỗi hướng dẫn đi từ điểm

bắt đầu đến điểm kết thúc theo lộ trình đã tìm được 9. //destroy Phương thức hủy, giải phóng tài nguyên

Bảng 4-11 : Phân tích các phương thức lớp Streets

Page 81: Ban do tren dien thoai di dong co ho tro java

Chương 4 : Phân tích – Thiết kế ứng dụng

64

4.3.4. Các biểu đồ hoạt động :

Hiển thị bản đồ :

: Places : User : MainMIDlet : MainCanvas : Districts : Streets

1:

2: //paint( )

3: //drawDistrict

Run application

5: //drawStreets( )

6: //drawStreetName( )

4: //drawPlaces( )

Hình 4-11 : Sequence diagram hiển thị bản đồ

: User : MainMIDlet : MainCanvas

: Districts

: Places

: Streets

6: //drawStreetName( )Run application

1: 2: //paint( )

3: //drawDistrict

4: //drawPlaces( )

5: //drawStreets( )

Hình 4-12 : Collaboration diagram Hiển thị bản đồ

Page 82: Ban do tren dien thoai di dong co ho tro java

Chương 4 : Phân tích – Thiết kế ứng dụng

65

Tìm địa điểm :

: User : MainMIDlet : IndexList : MainCanvas

1:

2: //IndexList

3: //commandAction

Select "Search Place" from menu

: FindObjectForm

4: //FindObjectForm

5: //itemStateChanged

6: //move

7: //paint

Hình 4-13 : Sequence diagram Tìm địa điểm

Page 83: Ban do tren dien thoai di dong co ho tro java

Chương 4 : Phân tích – Thiết kế ứng dụng

66

: User : MainMIDlet

: IndexList

: MainCanvas

: FindObjectForm

7: //paint

1:

3: //commandAction

5: //i temStateChanged 2: //IndexList

4: //FindObjectForm

6: //move

Select "Search Place" from menu

Hình 4-14 : Collaboration diagram Tìm địa điểm

Page 84: Ban do tren dien thoai di dong co ho tro java

Chương 4 : Phân tích – Thiết kế ứng dụng

67

Tìm đường theo tên :

o Sequence diagram : Tìm đường theo tên

: MainCanvas : User : MainMIDlet : FindObjectForm

1:

2: //FindObjectForm

3: //itemStateChanged

4: //move

5: //paint

Select "Find Streets" from menu

Hình 4-15 : Sequence diagram Tìm đường theo tên

Page 85: Ban do tren dien thoai di dong co ho tro java

Chương 4 : Phân tích – Thiết kế ứng dụng

68

o Collaboration diagram : tìm đường theo tên

: User : MainMIDlet

: FindObjectForm : MainCanvas

5: //paint

Select "Find Streets" from menu

1:

3: //i temStateChanged2: //FindObjectForm

4: //move

Hình 4-16 : Collaboration diagram Tìm đường theo tên

Page 86: Ban do tren dien thoai di dong co ho tro java

Chương 4 : Phân tích – Thiết kế ứng dụng

69

Search shortest path :

o Sequence diagram : Tìm đường đi ngắn nhất

: MessageBox : User : MainMIDlet : Streets : MainCanvas

1:

2: //find shortest path

3: //findShortestPath

4: //Show

Select "Find shortest path"

Display instruction

Hình 4-17 : Sequence diagram Tìm đường đi ngắn nhất

o Collaboration diagram : Tìm đường đi ngắn nhất.

: User : MainMIDlet : Streets

: MessageBox : MainCanvas

Select "Find shortest path"

Display instruction

1:

2: //find shortest path

3: //findShortestPath

4: //Show

Hình 4-18 : Collaboration diagram Tìm đường đi ngắn nhất

Page 87: Ban do tren dien thoai di dong co ho tro java

Chương 4 : Phân tích – Thiết kế ứng dụng

70

4.3.4. Sơ đồ lớp mức thiết kế :

MessageBoxFindObjectForm

HelpScreen

IndexList

NodePosition

MainCanv as_RepeatTask

Places

Districts

Streets

MainCanv asMainMIDlet

SplashScreen

About_RepeatTask

About

Hình 4-19 : Sơ đồ lớp mức thiết kế

Page 88: Ban do tren dien thoai di dong co ho tro java

Chương 4 : Phân tích – Thiết kế ứng dụng

71

Danh sách các lớp :

STT Tên lớp Ý nghĩa 1. MainMIDlet Lớp chính của chương trình, kế thừa từ lớp

MIDlet của J2ME. 2. MainCanvas Lớp dùng để hiển thị thông tin của bản đồ. 3. MessageBox Màn hình thể hiện các thông báo cho người

dùng. 4. FindObjectForm Màn hình tìm kiếm thông tin các đối tượng địa

điểm (trường học, chợ ..) và đường. 5. HelpScreen Màn hình hiển thị thông tin trợ giứp. 6. IndexList Màn hình danh sách các loại địa điểm. 7. SplashScreen Màn hình chào, được hiển thị khi chờ nạp dữ

liệu phần mềm. 8. About Màn hình hiển thị thông tin của phần mềm. 9. Districts Lớp thực hiện các chức năng liên quan đến

quận. 10. Places Lớp thực hiện các chức năng liên quan đến địa

điểm. 11. Streets Lớp thực hiện các chức năng liên quan đến

đường. 12. NodePosition Lớp lưu vị trí của một nút đang được chọn khi

thực hiện tìm đường đi ngắn nhất. 13. MainCanvas_RepeatTask Lớp xử lý việc ấn và giữ phím. 14. About_RepeatTask Lớp xử lý việc chạy chữ trên màn hình About

Bảng 4-12 : Danh sách các lớp

Page 89: Ban do tren dien thoai di dong co ho tro java

Chương 4 : Phân tích – Thiết kế ứng dụng

72

Mô tả các lớp :

o Lớp MainMIDlet :

MainMIDletCanvas : MainCanvas

MainMIDlet()startApp()pauseApp()destroyApp()quitApp()commandAction()

Hình 4-20 : Thiết kế lớp MainMIDlet

STT Thuộc tính Ý nghĩa

1. Canvas Màn hình hiển thị bản đồ

Bảng 4-13 : Danh sách các thuộc tính lớp MainMIDlet

STT Phương thức Ý nghĩa

1. MainMIDlet Hàm khởi tạo MIDlet

2. startApp Phương thức mặc định được gọi khi chạy ứng dụng

3. pauseApp Phương thức mặc định được gọi khi tạm dừng ứng

dụng

4. destroyApp Phương thức mặc định được gọi khi thoát ứng dụng

5. quitApp Phương thức mặc định được gọi khi thoát ứng dụng

6. commandAction Phương thức xử lý sự kiện trong chương trình

Bảng 4-14 : Danh sách các phương thức lớp MainMIDlet

Page 90: Ban do tren dien thoai di dong co ho tro java

Chương 4 : Phân tích – Thiết kế ứng dụng

73

o Lớp MainCanvas :

MainCanvasdistricts : Districtsstreets : Streetsplaces : PlacesmsgBox : MessageBoxrepeatTask : MainCanvas_RepeatTaskrepeatTimer : TimerscreenBuffer : ImagegraphicBuffer : GraphicsnCurrentX : IntegernCurrentY : IntegerpHeight : ShortpWidth : ShortpOx : IntegerpOy : IntegerScale : BytebDrawAll : BooleanbShowGuidePath : BooleanbShowNodeStart : BooleanCursorX : IntegerCursorY : IntegerREPEAT_DELAY : IntegerstrStreetGuide : String

MainCanvas()keyPressed(keyCode : Integer)keyReleased(keyCode : Integer)keyAction(keyCode : Integer)updatePoint(bIsNodeStart : Boolean)trafficGuiding()showResult()clearPoints()deletePath()moveTo(bShowPlace : Boolean, n : Integer)setCurrent()destroy()paint()cancelSearchPath()

Hình 4-21 : Thiết kế lớp MainCanvas

STT Thuộc tính Ý nghĩa

1. districts đối tượng thực hiện lưu trữ, xử lý, hiển thị quận

Page 91: Ban do tren dien thoai di dong co ho tro java

Chương 4 : Phân tích – Thiết kế ứng dụng

74

2. streets đối tượng thực hiện lưu trữ, xử lý, hiển thị đường đi

3. places đối tượng thực hiện lưu trữ, xử lý, hiển thị địa điểm

4. msgBox Màn hình dùng để hiển thị kết quả tìm đường

5. repeatTimer Bộ định thời, dùng để xử lý việc ấn và giữ phím

6. repeatTask Lớp dùng cho việc xử lý ấn và giữ phím

7. screenBuffer Vùng đệm cho màn hình

8. graphicBuffer Đối tượng graphic của vùng đệm màn hình

9. nCurrentX Hoành độ của tâm màn hình

10. nCurrentY Tung độ của tâm màn hình

11. pHeight Chiều cao của màn hình hiển thị, tính bằng pixel

12. pWidth Chiều rộng của màn hình hiển thị, tính bằng pixel

13. pOx Tọa độ x của màn hình hiện tại trên bản đồ

14. pOy Tọa độ y của màn hình hiện tại trên bản đồ

15. Scale Tỉ lệ phóng to, thu nhỏ

16. bDrawAll Cờ cho biết có thực hiện vẽ lại toàn bộ màn hình

hay chỉ vẽ thông tin mới.

17. bShowGuidePath Cờ cho biết có vẽ hướng dẫn đường đi hay không

18. bShowNodeStart Cờ cho biết khi nhấn phím 5 sẽ di chuyển đến điểm

đầu của lộ trình hay điểm cuối.

19. CursorX Tọa độ x hiện thời của con trỏ.

20. CursorY Tọa độ y hiện thời của con trỏ.

21. REPEAT_DELAY Thời gian chờ giữa hai lần xử lý

22. strStreetGuide Chuỗi kết quả tìm đường

Bảng 4-15 : Danh sách các thuộc tính lớp MainCanvas

Page 92: Ban do tren dien thoai di dong co ho tro java

Chương 4 : Phân tích – Thiết kế ứng dụng

75

STT Phương thức Ý nghĩa

1. MainCanvas Hàm khởi tạo MainCanvas

2. keyPressed Phương thức xứ lý sự kiện nhấn phím

3. keyReleased Phương thức xứ lý sự kiện buông phím

4. keyAction Phương thức xử lý các phím được nhấn

5. updatePoint Phương thức cập nhật lại vị trí của nút bắt đầu, nút

kết thúc của chức năng tìm đường đi ngắn nhất

6. trafficGuiding Phương thức tìm đường đi ngắn nhất

7. showResult Phương thức hiển thị kết quả tìm đường

8. clearPoints Phương thức xóa thông tin được dùng khi tìm

đường.

9. deletePath Phương thức xóa kết quả tìm đường

10. moveTo Phương thức di chuyển đến một địa điểm hay

đường thức n trên bản đồ

11. setCurrent Phương thức thiết lập màn hình

12. cancleSearchPath Phương thức hủy việc tìm đường

13. paint Phương thức vẽ, thể hiện bản đồ lên màn hình

14. destroy Phương thức hủy, giải phóng tài nguyên mà lớp có

sử dụng

Bảng 4-16 : Danh sách các phương thức lớp MainCanvas

Page 93: Ban do tren dien thoai di dong co ho tro java

Chương 4 : Phân tích – Thiết kế ứng dụng

76

o Lớp MessageBox :

MessageBox

bFindingPathMsgBox

MessageBox()Show(ti tle : String, message : String, bFi indingPath : Boolean)commandAction()

Hình 4-22 : Thiết kế lớp MessageBox

STT Thuộc tính Ý nghĩa 1. bFindingPathMsgBox Cờ cho biết màn hình này có phải dùng để hiển thị

thông báo chờ khi thực hiện tìm đường hay không

Bảng 4-17 : Danh sách các thuộc tính lớp MessageBox

STT Phương thức Ý nghĩa

1. MessageBox Phương thức khởi tạo MessageBox

2. Show Phương thức thể hiện message box

3. commandAction Phương thức xử lý sự kiện của màn hình

Bảng 4-18 : Danh sách các phương thức lớp MessageBox

Page 94: Ban do tren dien thoai di dong co ho tro java

Chương 4 : Phân tích – Thiết kế ứng dụng

77

o Lớp FindObjectForm

FindObjectFormm_OldDisplay : Displayablem_ListItems : ChoiceGroupm_EnterName : TextFieldm_bShowPlaces : Booleanm_pshIndices : Integer[]m_pbyFilter : Byte[]m_shLastIndex : Integerm_shFirstIndex : Integerm_shRealFirstIndex : Integer

FindObjectForm(_OldDisplay : Displayable, nPlaceIndex : Integer)isChild(nPos : Integer, pbyChild : Byte[]) : BooleanGetLowerCase(CharUnicode : Char) : CharcommandAction()itemStateChanged()destroy()

Hình 4-23 : Thiết kế lớp FindObjectForm

STT Thuộc tính Ý nghĩa

1. m_OldDisplay Màn hình được thể hiện trước màn hình này

2. m_ListItems ChoiceGroup chứa danh sách các địa điểm, tên đường

3. m_EnterName TextField dùng để nhập tên đường hoặc địa điểm

4. m_bShowPlaces Cờ cho biết màn hình hiển thị tên đường hay tên địa

điểm

5. m_pshIndices Mảng lưu các chỉ số thực sự của đối tượng đang được

hiển thị

6. m_pbyFilter Mảng lưu các chỉ số thực sự của đối tượng đang được

hiển thị đã được lọc theo điều kiện tìm kiếm

7. m_shFirstIndex Chỉ số đầu của khoảng tên đường trong danh sách

8. m_shLastIndex Chỉ số sau của khoảng tên đường trong danh sách

9. m_shRealFirstIndex

Bảng 4-22 : Danh sách các thuộc tính lớp FindObjectForm

Page 95: Ban do tren dien thoai di dong co ho tro java

Chương 4 : Phân tích – Thiết kế ứng dụng

78

STT Phương thức Ý nghĩa

1. FindObjectForm Phương thức khởi tạo FindObjectForm

2. isChild Phương thức kiểm tra tên đường thức n có chứa mảng

ký tự được đưa vào hay không

3. getLowerCase Phương thức trả ra ký tự không dấu và viết thường

tương ứng với ký tự Unicode được đưa vào (ví dụ : À

a, ê e,.. )

4. commandAction Phương thức xử lý sự kiện chọn các chức năng trên

menu

5. itemstateChanged Phương thức xử lý sự kiện gõ thông tin tìm kiếm vào

TextBox và chọn một thành phần trên ChoiceGroup

6. destroy Phương thức hủy, giải phóng tài nguyên.

Bảng 4-20 : Danh sách các phương thức lớp FindObjectForm

Page 96: Ban do tren dien thoai di dong co ho tro java

Chương 4 : Phân tích – Thiết kế ứng dụng

79

o Lớp HelpScreen :

HelpScreen

m_Alert : Alertm_pstrHelpStrings : String[]

HelpScreen()commandAction()

Hình 4-24 : Thiết kế lớp HelpScreen

STT Thuộc tính Ý nghĩa

1. m_Alert Màn hình hiển thị nội dung trợ giúp cho một chức

năng

2. M_pstrHelpString Chuỗi lưu trữ các chức năng của phần mềm

Bảng 4-21 : Danh sách các thuộc tính lớp HelpScreen

STT Phương thức Ý nghĩa

1. HelpScreen Hàm khởi tạo HelpScreen

2. commandAction Phương thức xử lý sự kiện của màn hình

Bảng 4-22 : Danh sách các phương thức lớp HelpScreen

Page 97: Ban do tren dien thoai di dong co ho tro java

Chương 4 : Phân tích – Thiết kế ứng dụng

80

o Lớp IndexList :

IndexList

IndexList()commandAction()

Hình 4-25 : Thiết kế lớp IndexList

STT Phương thức Ý nghĩa

1. IndexList Hàm khởi tạo IndexList

2. commandAction Phương thức xử lý sự kiện của màn hình

Bảng 4-23 : Danh sách các phương thức lớp IndexList

o Lớp SplashScreen :

SplashScreen

SplashScreen()paint()

Hình 4-26 : Thiết kế lớp SplashScreen

STT Phương thức Ý nghĩa

1. SplashScreen Hàm khởi tạo SplashScreen

2. paint Phương thức vẽ màn hình

Bảng 4-24 : Danh sách các phương thức lớp SplashScreen

Page 98: Ban do tren dien thoai di dong co ho tro java

Chương 4 : Phân tích – Thiết kế ứng dụng

81

o Lớp About :

About

nCurrentX : IntegernStringWidth : IntegernWidth : IntegernHeight : Integertext : StringlogoImage : ImagerepeatTask : RepeatTask_AboutrepeatTimer : Timer

About()paint()commandAction()

Hình 4-27 : Thiết kế lớp About

STT Thuộc tính Ý nghĩa

1. nCurrentX Tọa độ X để in thông tin ra màn hình

2. nStringWidth Thuộc tính lưu chiều dài của chuỗi cần di chuyển (tính

theo pixel )

3. nWidth Thuộc tính lưu chiều rộng của màn hình

4. nHeight Thuộc tính lưu chiều cao của màn hình

5. text Chuỗi lưu thông tin cần giới thiệu

6. repeatTimer Bộ định thời phục vụ cho việc chạy chữ trên màn hình

7. repeatTask Đối tượng repeatTask phục vụ cho việc chạy chữ trên

màn hình

8. logoImage Hình ảnh hiển thị lên màn hình

Bảng 4-25 : Danh sách các thuộc tính lớp About

Page 99: Ban do tren dien thoai di dong co ho tro java

Chương 4 : Phân tích – Thiết kế ứng dụng

82

STT Phương thức Ý nghĩa

1. About Phương thức khởi tạo About

2. paint Phương thức vẽ màn hình

3. commandAction Phương thức xử lý sự kiện của màn hình

Bảng 4-26 : Danh sách các phương thức : lớp About

o Lớp Districts :

Districts

NamePosDistrictNamesNodeDataDistrictNodeColorDistrictIndexMinXMinYMaxXMaxY

Districts()drawDistrict()drawDistrictNames()destroy()

Hình 4-28 : Thiết kế lớp Districts

STT Thuộc tính Ý nghĩa

1. NamePos Mảng lưu vị trí để vẽ tên quận

2. DistrictNames Chuỗi lưu tên các quận

3. NodeData Mảng lưu tọa độ các đỉnh nằm trên đường

ranh giới quận

Page 100: Ban do tren dien thoai di dong co ho tro java

Chương 4 : Phân tích – Thiết kế ứng dụng

83

4. DistrictNode Mảng lưu chỉ số các đỉnh của tam giác

trong mỗi quận

5. Color Mảng lưu các màu dùng để vẽ quận

6. DistrictIndex Mảng Index, dùng để đánh dấu vị trí bắt

đầu của từng quận trong mảng

DistrictNode

7. MinX Mảng lưu tọa độ x dưới của hình chữ nhật

bao của các quận

8. MinY Mảng lưu tọa độ y dưới của hình chữ nhật

bao của các quận

9. MaxX Mảng lưu tọa độ x trên của hình chữ nhật

bao của các quận

10. MaxY Mảng lưu tọa độ y trên của hình chữ nhật

bao của các quận

Bảng 4-27 : Danh sách các thuộc tính lớp Districts

STT Phương thức Ý nghĩa

1. Districts Phương thức khởi tạo Districts

2. drawDistrict Phương thức vẽ quận

3. drawDistrictNames Phương thức vẽ tên quận

4. destroy Phương thức hủy, giải phóng tài nguyên.

Bảng 4-28 : Danh sách các phương thức lớp Districts

Page 101: Ban do tren dien thoai di dong co ho tro java

Chương 4 : Phân tích – Thiết kế ứng dụng

84

o Lớp Places :

PlacesImages : Image[]Index : Short[]Names : String[]X : Short[]Y : Short[]nKIndOf Places : By te

Places()drawPlaces()destroy ()

Hình 4-29 : Thiết kế lớp Places

STT Thuộc tính Ý nghĩa

1. Images Mảng lưu hình ảnh của các loại địa điểm

2. Index Mảng chỉ mục

3. Names Mảng tên của các địa điểm

4. X Danh sách tọa độ X của các địa điểm

5. Y Danh sách tọa độ Y của các địa điểm

6. nKindOfPlaces Số loại địa điểm thuộc bản đồ

Bảng 4-29 : Danh sách các thuộc tính lớp Places

STT Phương thức Ý nghĩa

1. Places Phương thức khởi tạo Places

2. drawPlaces Phương thức vẽ địa điểm

3. destroy Phương thức hủy, giải phóng tài nguyên.

Bảng 4-30 : Danh sách các phương thức lớp Places

Page 102: Ban do tren dien thoai di dong co ho tro java

Chương 4 : Phân tích – Thiết kế ứng dụng

85

o Lớp Streets :

StreetsN_AREA_X : ByteN_AREA_Y : ByteTOTAL_ARC : ShortTOTAL_NODE : ShortTOTAL_STREET : ShortnodeEnd : NodePositonnodeStart : NodePositionpathFound : Short[]StreetNameIndex : Short[]ArcInfo : Short[]Arcs : Short[]ArcsIndex : Short[]AreaIndex : Short[]Areas : Short[]Boulevards : Boolean[]fontBold : FontfontNorm : FontgraphicBuffer : GraphicsID_Path : Short[]K : BytelineWidth : IntegerlineWidthBold : IntegerNodes : Short[]PathArcs : Short[]PathArcsIndex : Short[]SB : IntegerScale : ByteSL : IntegerSR : IntegerST : IntegerStreetIndex : Short[]ThreadSearchPath : ThreadStreetName : Char[]

Streets()drawStreets(Graphics : Graphics, bDrawGuidePath : Boolean)drawStreetName(pathID : Integer, font : Font)drawArc(ArcID : Short, width : Integer, bDrawName : Boolean[])drawNodes()drawNodeInArc(node : NodePosition)drawGuidingPath()findShortestPath()checkSpecialCases() : BooleanfindNearestArc(x : Integer, y : Integer, nArea : Integer) : Short[]findNearestNode(x : Integer, y : Integer) : NodePositionabortSearchPath()getFoundPathString() : StringgetStreetPosition(n : Integer) : Short[]getGuideText(strName : String, leftright : Boolean, length : Short, idx : Integer) : StringgetStreetName(index : Integer) : StringleftOrRight(x1 : Short, y1 : Short, x2 : Short, y2 : Short, x : Short, y : Short) : BooleanupdateGraphics()updateNode(bStart : Boolean, x : Integer, y : Integer)run()sqrt(length : Integer) : Integerdestroy()

Hình 4-30 : Thiết kế lớp Streets

Page 103: Ban do tren dien thoai di dong co ho tro java

Chương 4 : Phân tích – Thiết kế ứng dụng

86

STT Thuộc tính Ý nghĩa

1. N_AREA_X Số phần bản đồ được chia theo chiều ngang

2. N_AREA_Y Số phần bản đồ được chia theo chiều dọc

3. TOTAL_ARC Tổng số cung của các con đường trong thành phố

4. TOTAL_NODE Tổng số nút có trong bản đồ

5. TOTAL_STREET Tổng số đường có trong bản đồ

6. nodeEnd Nút kết thúc của lộ trình cần tìm

7. nodeStart Nút bắt đầu của lộ trình cần tìm

8. pathFound Mảng lưu ID của các cung thuộc lộ trình tìm được

9. StreetName Mảng lưu các ký tự tên đường

10. StreetNameIndex Mảng chỉ mục hỗ trợ việc truy xuất mảng StreetName

11. ArcInfo Mảng lưu chìêu dài cung và chiều của cung

12. Arcs Mảng lưu tọa độ của các cung trong bản đồ

13. ArcsIndex Mảng chỉ mục hỗ trợ việc truy xuất mảng Arcs, ArcInfo

14. Areas Mảng lưu chỉ số của các cung nằm trong 1 vùng nhìn

thấy

15. AreaIndex Mảng chỉ mục hỗ trợ việc truy xuất mảng Areas

16. Boulevards Mảng cờ, cho biết đường có phải đại lộ hay không

17. fontBold Font chữ dùng để vẽ tên đại lộ

18. fontNorm Font chữ dùng để vẽ tên đường bình thường

19. graphicBuffer Đối tượng graphic dùng để vẽ bản đồ

20. ID_Path Mảng lưu Id của đường theo id của cung, cho vào id

cung, tra ra id của đường

21. K Giá trị cho biết kích thước mỗi cạnh của một vùng chia

22. lineWidth Giá trị cho biết độ rộng của đường nhỏ

23. lineWidthBold Giá trị cho biết độ rộng của đường lớn (đại lộ)

24. Nodes Mảng cho biết nút bắt đầu, nút kết thúc của một cung

Page 104: Ban do tren dien thoai di dong co ho tro java

Chương 4 : Phân tích – Thiết kế ứng dụng

87

25. PathArcs Mảng danh sách các cung của mỗi đường

26. PathArcsIndex Mảng chỉ mục, cho biết vị trí bắt đầu, vị trí kết thúc của

mỗi đường trong mảng PathArcs, hỗ trợ cho việc truy

xuất mảng PathArcs

27. SL Vị trí góc trái của màn hình hiển thị bản đồ

28. ST Vị trí góc trên của màn hình hiển thị bản đồ

29. SR Vị trí góc phải của màn hình hiển thị bản đồ

30. SB Vị trí góc duới của màn hình hiển thị bản đồ

31. Scale Tỉ lệ phóng to, thu nhỏ hiện tại của bản đồ

32. StreetIndex Mảng đánh chỉ số tên đường

33. ThreadSearchPath Tiến trình thực hiện chức năng tìm đường ngắn nhất

Bảng 4-31 : Danh sách các thuộc tính lớp Streets

STT Phương thức Ý nghĩa

1. Streets Phương thức khởi tạo Streets

2. drawStreets Phương thức vẽ đường

3. drawStreetName Phương thức vẽ tên đường

4. drawArc Phương thức vẽ 1 cung thuộc đường

5. drawNodes Phương thức vẽ nút bắt đầu, nút kết thúc của lộ trình

cần tìm

6. drawNodeInArc Phương thức vẽ 1 phần của cung, từ vị trí được chọn

trên cung đến 1 đỉnh của cung

7. drawGuidingPath Phương thức vẽ lộ trình đã tìm được

8. findShortestPath Phương thức tìm đường đi ngắn nhất

9. checkSpecialCases Phương thức kiểm tra các trường hợp đặc biệt khi tìm

đường như đi từ 1 chiều sang 2 chiều, 2 chiều sang 1

chiều,…

Page 105: Ban do tren dien thoai di dong co ho tro java

Chương 4 : Phân tích – Thiết kế ứng dụng

88

10. findNearestArc Phương thức tìm 1 cung gần nhất với 1 điểm được đưa

vào

11. findNearesNode Phương thức tìm 1 nút gần nhất với 1 điểm được đưa

vào

12. abortSearchPath Phương thức ngưng việc tìm đường

13. getFoundPathString Phương thức lấy chuỗi mô tả kết quả tìm đường

14. getStreetPostion Phương thức lấy tọa độ 1 điểm trong đường, dùng

trong chức năng tìm đường đi theo tên

15. getGuideText Hàm tạo ra chuỗi mô tả đường đi

16. getStreetName Phương thức lấy tên đường dựa theo chỉ số được nhập

vào

17. leftOrRight Phương thức xác định xem phải rã trái hay rẽ phải.

18. updateGraphics Phương thức cập nhật lại font chữ, độ rộng của đường

theo tỉ lệ

19. updateNode Tìm và cập nhật nút bắt đầu hay kết thúc từ một tọa độ

và loại nút được đưa vào.

20. run Phương thức tìm đường đi ngắn nhất giữa hai điểm

21. sqrt Phương thức phần nguyên của căn bậc hai của 1 số

được đưa vào

22. destroy Phương thức hủy, giải phóng tài nguyên.

Bảng 4-32 : Danh sách các phương thức lớp Streets

Page 106: Ban do tren dien thoai di dong co ho tro java

Chương 4 : Phân tích – Thiết kế ứng dụng

89

o Lớp NodePosition :

NodePosition

ArcIDFromBeginIsNodeStartPosToEndXY

NodePosition()drawPosi tion()

Hình 4-31 : Thiết kế lớp NodePosition

STT Thuộc tính Ý nghĩa

1. ArcID Sô Id của cung chứa nút này

2. FormBegin Khoảng cách từ nút đó đến điểm đầu cung

3. ToEnd Khoảng cách từ nút đến nút điểm cuối cung

4. IsNodeStart Cờ cho biết lộ trình đia qua điểm đầu cung hay điểm cuối

cung.

5. Pos Thức tự của đoạn chứa nút này trong cung

6. X Tọa độ X của nút

7. Y Tọa độ Y của nút

Bảng 4-33 : Danh sách các thuộc tính lớp NodePosition

STT Phương thức Ý nghĩa

1. NodePosition Phương thức khởi tạo NodePosition

2. drawPosition Phương thức vẽ nút ra màn hình

Bảng 4-34 : Danh sách các phương thức lớp NodePosition

Page 107: Ban do tren dien thoai di dong co ho tro java

Chương 4 : Phân tích – Thiết kế ứng dụng

90

Các sơ đồ mức thiết kế

o Hiển thị bản đồ :

: User

: MainMIDlet : MainCanvas : Districts : Places : Streets : SplashScreen

1:

2: SplashScreen( )

3: MainCanvas( )

4: paint( )

5: drawDistrict(Graphics)

6: drawPlaces(Graphics)

7: drawStreets(Graphics, Boolean)

8: drawStreetName(Integer, Font)

Run application

Hình 4-32 : Sequence diagram Hiển thị bản đồ (mức thiết kế)

: User

: MainMIDlet

: MainCanvas

: SplashScreen

: Districts : Places

: Streets

8: drawStreetName(Integer, Font)

1: 2: SplashScreen( )

3: MainCanvas( )4: paint( )

5: drawDistrict(Graphics)

6: drawPlaces(Graphics)

7: drawStreets(Graphics, Boolean)

Run application

Hình 4-33 : Collaboration diagram Hiển thị bản đồ (mức thiết kế)

Page 108: Ban do tren dien thoai di dong co ho tro java

Chương 4 : Phân tích – Thiết kế ứng dụng

91

o Tìm địa điểm :

: User

: MainMIDlet : IndexList : FindObjectForm : MainCanvas

1:

2: IndexList( )

3:

4: FindObjectForm(Displayable, Integer)

5:

6: moveTo(Boolean, Integer)

7: setCurrent( )

Select "Find Place" from menu

Select a place from the list

Select an item kind from the list

Hình 4-34 : Sequence diagram Tìm địa điểm (mức thiết kế)

Page 109: Ban do tren dien thoai di dong co ho tro java

Chương 4 : Phân tích – Thiết kế ứng dụng

92

: User

: MainMIDlet

: FindObjectForm : MainCanvas

4: isChild(Integer, Byte[]) 7: setCurrent( )

1: commandAction( )

3: itemStateChanged( )5: itemStateChanged( )

2: FindObjectForm(Displayable, Integer)

6: moveTo(Boolean, Integer)

Hình 4-35 : Collaboration diagram Tìm địa điểm (mức thiết kế)

Page 110: Ban do tren dien thoai di dong co ho tro java

Chương 4 : Phân tích – Thiết kế ứng dụng

93

o Tìm đường theo tên

: User

: MainMIDlet : FindObjectForm : MainCanvas

1:

2: FindObjectForm(Displayable, Integer)

3:

4: isChild(Integer, Byte[])

5:

6: moveTo(Boolean, Integer)

7: setCurrent( )

Select "Find Street" from menu

Enter street's name to search

Select a street from the list

Hình 4-36 : Sequence diagram Tìm đường theo tên (mức thiết kế)

: User

: MainMIDlet

: FindObjectForm : MainCanvas

4: isChild(Integer, Byte[]) 7: setCurrent( )

Select "Find Street" from menu

Enter street's name to search

Select a street from the list

1:

3: 5:

2: FindObjectForm(Displayable, Integer)

6: moveTo(Boolean, Integer)

Hình 4-37 : Collaboration diagram Tìm đường theo tên (mức thiết kế)

Page 111: Ban do tren dien thoai di dong co ho tro java

Chương 4 : Phân tích – Thiết kế ứng dụng

94

o Search shortest path :

: User

: MainMIDlet : MainCanvas : Streets : MessageBox

1:

2: trafficGuiding( )

4: findShortestPath( )

3: Show(String, String, Boolean)

5: run( )

6: showResult( )

7: Show(String, String, Boolean)

Select "Find Shortest Street" from the menu

This function is run by another thread

Hình 4-38 : Sequence diagram Search shortest path (mức thiết kế)

: User

: MainMIDlet : MainCanvas

: Streets

: MessageBox

5: run( )

Select "Find Shortest Street" from the menu

1:

2: trafficGuiding( )

4: findShortestPath( )

6: showResult( )

3: Show(String, String, Boolean)7: Show(String, String, Boolean)

Hình 4-39 : Collaboration diagram Search shortest path (mức thiết kế)

Page 112: Ban do tren dien thoai di dong co ho tro java

Chương 5 : Một số cải tiến nhằm tối ưu hóa chương trình

95

Chương 5 : MỘT SỐ CẢI TIẾN NHẰM TỐI ƯU HÓA CHƯƠNG TRÌNH

5.1. Nội dung và ý nghĩa của việc tối ưu hóa :

Để đảm bảo tính hiệu quả, mọi phần mềm khi được phát triển luôn cần tối ưu

hóa. Đối với ứng dụng J2ME, việc tối ưu hóa chương trình càng có ý nghĩa quan

trọng do các thiết bị di động có tài nguyên hệ thống rất hạn chế : tốc độ xử lý chậm,

dung lượng bộ nhớ rất nhỏ và khả năng lưu trữ thấp.

Căn cứ vào các hạn chế nêu trên, việc tối ưu hóa chương trình sẽ tập trung

chủ yếu vào ba nội dung :

Tối ưu hóa kích thước chương trình

Tối ưu hóa về mặt tốc độ

Tối ưu hóa việc sử dụng bộ nhớ

5.2. Tối ưu hóa kích thước chương trình :

5.2.1. Các nguyên tắc tối ưu kích thước trong thiết kế chương trình :

Giảm các lớp không cần thiết :

Bước đầu tiên để giảm kích thước của chương trình đó là loại bỏ việc tạo

những lớp không cần thiết. Chỉ nên tách lớp mới khi điều đó thực sự quan trọng và

có ý nghĩa. Các lớp có nhiều xử lý, nhiều thông tin tương tự nhau thì nên kết hợp lại

thành một lớp chung. Khi một lớp được tạo ra, trình biên dịch sẽ bổ sung thêm rất

nhiều thông tin về lớp, định nghĩa thêm các hằng số, tạo bảng tra biến cục bộ

(LocalVariableTable), bổ sung hàm tạo mặc định… Chúng ta có thể thấy rõ điều

này thông qua ví dụ về một lớp tối thiểu như sau :

public class DoNothing

{

}

Page 113: Ban do tren dien thoai di dong co ho tro java

Chương 5 : Một số cải tiến nhằm tối ưu hóa chương trình

96

Tập tin DoThing.java sau khi được biên dịch thành tập tin DoNothing.class

sẽ có kích thước là 257 bytes trong đó chỉ có 5 bytes là bytecode. Chúng ta có thể

xem thông tin về lớp này bằng cách thực hiện dòng lệnh :

javap –v DoNothing

Hạn chế sử dụng inner class và anonymous class :

Một trong những lớp nên loại bỏ đó là các lớp nội (inner classes) và các lớp

vô danh (anonymous classes). Trong ngôn ngữ Java, các anonymous classes thường

được dùng để cài đặt xử lý cho các sự kiện (event listener). Nếu thực sự cần thiết,

chúng ta có thể khai báo một lớp chung để xử lý tất cả các sự kiện bởi vì nhiều đối

tượng có thể sử dụng chung nhiều listener khác nhau. Lớp được tạo ra sẽ khai báo

implements các interfaces cần thiết ví dụ như CommandListener, ItemStateListener

v.v…, nhờ vào tham số được truyền cho các phương thức commandAction và

itemStateChanged, chúng ta có thể phân biệt đối tượng nào cần được xử lý hành

động.

Các inner classes cũng làm tăng thêm kích thước của chương trình do

compiler phải tạo thêm các biến và các phương thức đặc biệt để giúp cho lớp này có

thể truy xuất các thuộc tính và phương thức private của lớp đang chứa nó, và ngược

lại, giúp cho các lớp đang chứa inner class có thể truy xuất các thành phần private

của lớp này.

Giảm cây kế thừa :

Trong thiết kế cần hạn chế việc kế thừa nhiều cấp và không sử dụng lớp trừu

tượng nếu không cần thiết.

Giảm chiều dài các định danh (identifiers) :

Nên đặt tên ngắn cho các hằng, biến, các phương thức và tên lớp. Ngoài ra,

do mỗi ứng dụng J2ME đều được đóng gói riêng rẽ nên các lớp trong nhiều ứng

dụng khác nhau trên thiết bị di động không thể xung đột nhau. Vì thế, nếu một lớp

không phải xây dựng để trở thành một thành phần trong thư viện thì không cần thiết

Page 114: Ban do tren dien thoai di dong co ho tro java

Chương 5 : Một số cải tiến nhằm tối ưu hóa chương trình

97

phải đặt lớp này trong một package (không dùng từ khóa package ở đầu tập tin mã

nguồn). Điều này có tác dụng giảm được một số lượng bytes trong lớp.

Hạn chế sử dụng getter / setter :

Khi cần cho phép các đối tượng của lớp khác được truy xuất một thuộc tính

của lớp, nên khai báo thuộc tính này ở mức public thay vì sử dụng các hàm get, set.

Thực ra, đây không phải là một phong cách lập trình tốt, tuy nhiên loại bỏ hàm get,

set cũng giúp chúng ta giảm được kích thước của lớp.

Lưu ý khi khởi tạo mảng :

Nên tránh khởi tạo trực tiếp các phần tử của mảng. Thông thường, nếu chúng

ta biết trước giá trị của từng phần tử trong mảng, chúng ta sẽ khai báo như ví dụ sau

int[] arr = {11, 22, 33, 44, 55, 66};

Khi viết dòng lệnh trên, chúng ta hi vọng rằng Java sẽ sao chép các giá trị

được khởi gán vào vùng nhớ vừa được cấp phát cho mảng. Tuy nhiên, nếu chúng ta

dịch ngược bytecode của đoạn chương trình này (cú pháp : javap –c tên_lớp) sẽ

được kết quả như sau :

Page 115: Ban do tren dien thoai di dong co ho tro java

Chương 5 : Một số cải tiến nhằm tối ưu hóa chương trình

98

Kết quả trên chứng tỏ rằng Java không sao chép

trực tiếp vào vùng nhớ của mảng mà thực hiện lần lượt

các câu lệnh tương ứng như sau :

Do vậy, kích thước của tập lớp sau khi biên

dịch sẽ tăng lên đáng kể vì phải chứa rất nhiều byte

code được lặp đi lặp lại để gán giá trị cho từng phần tử

của mảng.

4: aload_0

5: bipush 6

7: newarray int

9: dup

10: iconst_0

11: bipush 11

13: iastore

14: dup

15: iconst_1

16: bipush 22

18: iastore

19: dup

20: iconst_2

21: bipush 33

23: iastore

24: dup

25: iconst_3

26: bipush 44

28: iastore

29: dup

30: iconst_4

31: bipush 55

33: iastore

34: dup

35: iconst_5

36: bipush 66

38: iastore

arr[0] = 11;

arr[1] = 22;

arr[2] = 33;

arr[3] = 44;

arr[4] = 55;

arr[5] = 66;

Page 116: Ban do tren dien thoai di dong co ho tro java

Chương 5 : Một số cải tiến nhằm tối ưu hóa chương trình

99

Tóm lại, khi kích thước của mảng lớn, chúng ta không nên khởi tạo trực tiếp

giá trị ban đầu của các phần tử trong mảng, thay vào đó, lưu các dữ liệu này trên

một tập tin tài nguyên và xây dựng hàm đọc rồi gán giá trị cho mảng khi thực thi.

Giảm kích thước các tập tin tài nguyên :

Nên cố gắng giảm kích thước các tập tin tài nguyên như các files dữ liệu,

icons, các tập tin hình ảnh. Thông thường, chúng ta chỉ có thể hạn chế kích thước

của hình ảnh, ít khi giảm được trên các tập tin dạng khác.

Hạn chế sử dụng các gói thư viện bổ sung :

Các gói thư viện của hãng thứ ba sẽ được đóng gói vào trong ứng dụng, bao

gồm cả những lớp mà chúng ta không cần đến. Vì thế, không nên sử dụng nếu

không thực sự cần thiết.

5.2.2. Tối ưu kích thước chương trình khi đóng gói :

• Phân tích quá trình đóng gói ứng dụng :

Hình 5-1 : Mô hình quá trình đóng gói ứng dụng J2ME

Các files mã nguồn được trình java compiler biên dịch ra dạng byte code.

Mỗi lớp trong mã nguồn (bao gồm cả inner class) sẽ được biên dịch thành các tập

tin .class riêng rẽ. Các tập tin này, cùng với các icons, các tập tin dữ liệu, hình ảnh

v.v… được trình đóng gói kết hợp lại và nén chung trong một tập tin JAR (Java

SSoouurrccee ccooddee ((..jjaavvaa))

JJaavvaa ccoommppiilleerr

BByyttee ccooddee ((..ccllaassss))

Archive builder

RReessoouurrcceess

..JJAADD

..JJAARR

Page 117: Ban do tren dien thoai di dong co ho tro java

Chương 5 : Một số cải tiến nhằm tối ưu hóa chương trình

100

Archive) hay còn được gọi là một MIDlet Suite. Ngoài ra, trình đóng gói cũng tạo

ra một tập tin mô tả ứng dụng – JAD (Java Application Descriptor) nhằm cung cấp

cho phần mềm quản lý ứng dụng trên thiết bị di động các thông tin cần thiết để

phầm mềm này xác định ứng dụng của chúng ta có thích hợp để thực thi trên thiết bị

hay không.

Như vậy, xét toàn bộ quá trình biên dịch và đóng gói ứng dụng, chúng ta có

thể thấy rằng ngoài các biện pháp giúp giảm kích thước chương trình như đã trình

bày ở phần trước, chúng ta vẫn còn có thêm cơ hội giảm kích thước của ứng dụng

nếu (có thể) giảm được kích thước của các tập tin .class, có nghĩa là giảm số byte

code trên tập tin .class sau khi biên dịch. Tuy nhiên, việc sửa đổi byte code là việc

làm rất khó khăn và nguy hiểm. Dù vậy, chúng vẫn có thể giảm được một số lượng

bytes nhất định bằng cách giảm đến mức tối đa số ký tự dùng để đặt tên cho các

biến thành phần, các hằng số và các phương thức.

Phân tích tập tin .class :

Để xem danh sách các biến thành phần, các hằng số và phương thức trong

lớp, chúng ta có thể sử dụng công cụ javap có trong bộ jdk. Cú pháp như sau :

javap –private tên_tập_tin_class

Xét ví dụ lớp Districts (tập tin Districts.class) trong chương trình. Sau khi

được decompiled, lớp Districts có dạng sau :

// Imports

import javax.microedition.lcdui.Graphics;

public final class Districts { // Fields private static int[] _$551; private static short[] _$552; private static String[] _$548; private static byte[] _$550; private static short[] _$555; private static short[] _$556;

Page 118: Ban do tren dien thoai di dong co ho tro java

Chương 5 : Một số cải tiến nhằm tối ưu hóa chương trình

101

private static short[] _$553; private static short[] _$554; private static short[] _$547; private static short[] _$549; // Constructors public Districts() { } // Methods public static final void destroy() { } public static final void drawDistrictNames(Graphics g) { } public static final void drawDistricts(Graphics g) { } }

Nhận xét :

- Đối với các phương thức và thuộc tính được khai báo ở mức private, tên của

chúng được trình biên dịch thay thế bằng một mã có dạng _$xxx.

- Đối với các phương thức và thuộc tính được khai báo ở mức public, tên của

các thành phần này được giữ nguyên vì chúng có thể được các đối tượng của những

lớp khác truy xuất đến.

Ý tưởng thực hiện :

- Rút ngắn hơn nữa số ký tự dùng để đặt tên cho các thành phần ở mức private.

- Đặt lại tên cho các phương thức và thuộc tính được khai báo ở mức public sao

cho tối ưu nhất (số ký tự ít nhất và không được trùng với các thành phần của lớp

khác).

Sử dụng obfuscator :

Trên thị trường hiện nay có rất nhiều phần mềm hỗ trợ giúp chúng ta thực

hiện việc tối ưu kích thước cho tập tin JAR (được gọi là obfuscator). Các phần mềm

này đa số đều hoạt động dựa theo nguyên tắc giảm chiều dài các thuộc tính và

phương thức của lớp như đã nêu ở phần trên. Các phần mềm công cụ này phần lớn

là miễn phí. Tiêu biểu như proguard (http://proguard.sourceforge.net), retroguard

(http://www.retrologic.com/retroguard-main.html)...

Sơ đồ sử dụng obfuscator :

Page 119: Ban do tren dien thoai di dong co ho tro java

Chương 5 : Một số cải tiến nhằm tối ưu hóa chương trình

102

Hình 5-2 : Sơ đồ sử dụng Obfuscator

Ví dụ :

Xét tập tin District.class sau khi sử dụng proguard 3.2 (lớp Districts đã được

obfuscator đổi tên thành g.

SSoouurrccee ccooddee ((..jjaavvaa))

JJaavvaa ccoommppiilleerr

BByyttee ccooddee ((..ccllaassss))

Archive builder

..JJAADD

..JJAARR

RReessoouurrcceess

OObbffuussccaattoorr ..JJAADD ..JJAARR

Page 120: Ban do tren dien thoai di dong co ho tro java

Chương 5 : Một số cải tiến nhằm tối ưu hóa chương trình

103

// Imports import javax.microedition.lcdui.Graphics; public final class g { // Fields private static int[] a; private static short[] b; private static String[] c; private static byte[] d; private static short[] e; private static short[] f; private static short[] g; private static short[] h; private static short[] i; private static short[] j; // Constructors public g() { } // Methods public static final void a() { } public static final void a(Graphics graphics) { } public static final void b(Graphics graphics) { } private static final void c(Graphics graphics) { } }

Page 121: Ban do tren dien thoai di dong co ho tro java

Chương 5 : Một số cải tiến nhằm tối ưu hóa chương trình

104

Kết quả sau khi sử dụng obfuscator vào chương trình :

Ghi chú : kích thước file JAR không tính các tập tin tài nguyên

Kích thước file

JAR (bytes)

Số bytes được rút

ngắn (bytes)

Tỉ lệ rút ngắn

Không tối ưu kích thước 33.213

Sử dụng proguard 3.2 21.255 11.958 36,0 %

Sử dụng retroguard 2.0.1 22.632 10.581 31,9 %

Bảng 5-1 : Bảng so sánh kết quả sử dụng obfuscator

5.3. Tối ưu hóa về tốc độ :

5.3.1. Khái quát chung :

- Khi muốn tối ưu về tốc độ, trước tiên, cần tập trung vào tối ưu việc thiết kế

và lựa chọn giải thuật cho hợp lý, sau đó mới thực hiện việc cải thiện tốc độ ở mức

cấp thấp trên từng dòng lệnh bởi vì phần lớn thời gian chương trình hoạt động được

dùng cho việc thực hiện các hàm xử lý trong thư viện do chúng ta gọi đến, đặc biệt

là đối với các chức năng xử lý đồ họa cấp thấp.

- Quy tắc 90/10 : “trong các chương trình có nhu cầu xử lý đồ họa lớn, đặc

biệt là các phần mềm trò chơi hành động, 90% tổng thời gian xử lý của chương

trình dùng để xử lý 10% mã nguồn”. Như vậy, 90% mã nguồn còn lại chỉ cần 10%

thời gian để xử lý. Do đó, chúng ta cần phải tập trung xác định những thao tác xử lý

nào tiêu tốn nhiều thời gian xử lý nhất để tìm cách tối ưu hóa chúng.

- Hiệu suất thi hành các lệnh không giống nhau trên thiết bị của các nhà sản

xuất khác nhau do mỗi hãng sản xuất có công nghệ và cách cài đặt xử lý theo đặc tả

MIDP khác nhau.

5.3.2. Tìm các vị trí cần tối ưu về tốc độ :

Sử dụng Profiler

Trong bộ công cụ lập trình J2ME của Sun (Sun Wireless Toolkit) có cung

cấp cho chúng ta một tiện ích dùng để thống kê tần suất hoạt động và tài nguyên

CPU dành cho từng chức năng xử lý (công cụ này được gọi là profiler). Dựa vào

Page 122: Ban do tren dien thoai di dong co ho tro java

Chương 5 : Một số cải tiến nhằm tối ưu hóa chương trình

105

bảng thống kê này, chúng ta có thể xác định được hàm nào được gọi thực hiện nhiều

nhất, chi phí dành cho mỗi lần thực hiện là bao nhiêu và cho con số tổng cộng về

tổng số tài nguyên được cung cấp cho mỗi hàm trong toàn bộ thời gian mà chương

trình hoạt động. Từ bảng thống kê này, chúng ta có thể xác định được hàm nào sử

dụng nhiều tài nguyên nhất để tập trung vào việc tối ưu nó.

Để hiển thị profiler, trong màn hình chính của Sun Wireless Toolkit, chọn

menu Edit Preferences. Chọn tab Monitor, đánh dấu check vào ô Enable

Profiling trong khung Profiler. Sau khi trình giả lập kết thúc việc thực thi ứng dụng,

cửa sổ Methods’ Profiler hiện ra như sau :

Hình 5-3 : Màn hình giao diện công cụ Profiler

Xác định thời gian thực thi :

Profiler giúp chúng ta xác định được số lượng chu kỳ xử lý cần cho mỗi

hàm, tuy nhiên lại không giúp chúng ta xác định được thời gian cụ thể cho mỗi hàm

xử lý và profiler cũng không được cung cấp trên thiết bị thật. Vì vậy, chúng ta có

Page 123: Ban do tren dien thoai di dong co ho tro java

Chương 5 : Một số cải tiến nhằm tối ưu hóa chương trình

106

thể xây dựng riêng một đoạn mã nhằm xác định khoảng thời gian dùng cho hàm

bằng cách sử dụng giờ hệ thống :

long startTime = System.currentTimeMillis(); //Trước khi gọi hàm

gọi_hàm();

long timeTaken = System.currentTimeMillis() – startTime; //Khoảng thời gian

thực thi

5.3.3. Các nguyên tắc tăng tốc cho chương trình :

- Chỉ nên tập trung tối ưu các thao tác có số lượng chu kỳ xử lý lớn.

- Hầu hết các hàm trong thư viện đồ họa cấp thấp ví dụ như các hàm vẽ đối

tượng đồ họa cơ sở (đường thẳng, hình chữ nhật, cung, ellipse…), các hàm tô màu

đều sử dụng rất nhiều chu kỳ máy, vì vậy, cần hạn chế số lần gọi các hàm này.

- Sử dụng hàm setClip(…) để hạn chế vùng cần vẽ.

- Đem các tính toán ra bên ngoài vòng lặp nếu có thể.

- Nếu không làm ảnh hưởng đến thiết kế chương trình, cài đặt các phương

thức dạng static final sẽ giúp phương thức được thực hiện nhanh hơn. Tránh sử

dụng phương thức synchronized, phương thức này chậm do phải lock những đối

tượng cần thiết.

Dạng phương thức Tốc độ

synchronized chậm nhất

interface chậm

instance

final nhanh

static nhanh nhất

- Việc khởi tạo một đối tượng inner class mất gấp đôi thời gian so với việc

khởi tạo một đối tượng của lớp thường.

Page 124: Ban do tren dien thoai di dong co ho tro java

Chương 5 : Một số cải tiến nhằm tối ưu hóa chương trình

107

- Đối với các hàm thường xuyên được sử dụng, cài đặt sao cho việc truyền

tham số cho hàm càng ít càng tốt.

- Hạn chế việc tách một hàm lớn thành nhiều hàm nhỏ vì khi chia thành

nhiều hàm nhỏ sẽ khiến cho lớp tăng kích thước, đồng thời sẽ phải mất thời gian

cho việc truyền tham số giữa các hàm mặc dù cách làm này giúp chúng ta dễ dàng

hơn trong công tác bảo trì.

- CPU của máy tính cũng như của các thiết bị di động thực hiện việc so sánh

một số với số 0 nhanh hơn so với các số khác 0. Trong các vòng lặp nên tận dụng

điều này bằng các đếm ngược các biến đếm. Thông thường, chúng ta cài đặt vòng

lặp như sau :

for (int i=0; i<n; i++) { ……. }

Nhưng, sẽ nhanh hơn nếu chúng ta cài đặt ngược lại :

for (int i=n; --i>=0; ) { ……. }

- Các phép toán trên bit có tốc độ rất cao, vì vậy, nên sử dụng các phép toán

dịch bit (shift left, shift right) thay cho phép toán nhân, chia với các số là lũy thừa

của 2.

- Trong ngôn ngữ Java, việc truy xuất một phần tử của mảng chậm hơn rất

nhiều so với ngôn ngữ C. Mỗi khi chúng ta truy xuất một phần tử, Java đều kiểm tra

chỉ số đưa vào có hợp lệ hay không. Nếu chỉ số này nhỏ hơn 0 hoặc lớn hơn chỉ số

của phần tử cuối thì Java sẽ thông báo ngoại lệ ArrayIndexOutOfBoundsException.

Page 125: Ban do tren dien thoai di dong co ho tro java

Chương 5 : Một số cải tiến nhằm tối ưu hóa chương trình

108

Như vậy, một phần tử trong mảng nếu được truy xuất nhiều lần thì chúng ta nên gán

giá trị của phần tử đó vào một biến trung gian để sử dụng cho những lần tiếp theo.

- Khi cần sao chép mảng, nên sử dụng hàm sao chép do J2ME cung cấp sẵn sẽ

nhanh hơn rất nhiều so với việc sử dụng vòng lặp. Cú pháp như sau :

System.arraycopy(Object, int, Object, int, int)

- Biến cục bộ khai báo trong thân hàm được truy xuất nhanh hơn biến được

khai báo ở mức instance. Nếu chúng ta cần thực hiện nhiều phép toán với các biến

được khai báo ở mức instance như ví dụ sau :

public class Foo

{

private int[] array;

...

public void foo()

{

for (int i=array.length; --i ; )

{

array[i] = i*2;

}

}

}

Đoạn chương trình như trên khi thực hiện sẽ không nhanh bằng đoạn chương

trình sau :

Page 126: Ban do tren dien thoai di dong co ho tro java

Chương 5 : Một số cải tiến nhằm tối ưu hóa chương trình

109

public class Foo

{

private int[] array;

...

public void foo()

{

int[] myArray = array;

for (int i = myArray .length; --i ; )

{

myArray [i] = i*2;

}

}

}

- Việc khởi tạo một đối tượng cũng mất nhiều thời gian. Do vậy, nếu có thể

được, chúng ta nên tận dụng một đối tượng sẵn có rồi cập nhật lại các giá trị, các

thuộc tính của chúng thay vì tạo một đối tượng mới.

- Phép toán chia thực hiện chậm hơn so với phép toán nhân, vì thế, nếu cần

phải chia nhiều lần cho cùng một số, chúng ta có thể tính nghịch đảo của số chia rồi

dùng kết quả tìm được nhân với số bị chia.

- Những đoạn chương trình có khai báo try/catch để xử lý các Exception

cũng có tốc độ rất chậm. Do đó, nếu không bị bắt buộc phải khai báo như vậy,

chúng ta không nên sử dụng chúng trong chương trình.

Page 127: Ban do tren dien thoai di dong co ho tro java

Chương 5 : Một số cải tiến nhằm tối ưu hóa chương trình

110

5.4. Tối ưu hóa việc sử dụng bộ nhớ :

5.4.1. Công cụ theo dõi việc sử dụng bộ nhớ :

Các chức năng chính :

Bộ công cụ lập trình J2ME của Sun (J2ME Wireless Toolkit) cung cấp cho

chúng ta một tiện ích nhằm theo dõi việc sử dụng bộ nhớ của chương trình, bao

gồm các tính năng cơ bản sau :

Theo dõi quá trình cấp phát bộ nhớ khi chương trình gọi thực hiện

một phương thức.

Cho biết tổng số đối tượng được cấp bộ nhớ, lượng bộ nhớ đang được

sử dụng và dung lượng bộ nhớ còn trống.

Cho biết lượng bộ nhớ được cấp cho từng kiểu dữ liệu.

Hỗ trợ theo dõi việc thu hồi bộ nhớ từ các đối tượng không còn được

sử dụng (garbage collector).

...

Sử dụng công cụ theo dõi việc sử dụng bộ nhớ :

Từ menu Edit Preferences, chọn bảng Monitor, sau đó, đánh dấu chọn vào

ô “Enable Memory Monitor” trong khung “Memory Monitor”.

Khi ứng dụng được gọi thực thi, màn hình “Memory Monitor Extension”

xuất hiện cùng với trình giả lập. Màn hình giao diện của công cụ như sau :

Page 128: Ban do tren dien thoai di dong co ho tro java

Chương 5 : Một số cải tiến nhằm tối ưu hóa chương trình

111

Hình 5-4 : Màn hình giao diện công cụ theo dõi việc sử dụng bộ nhớ

5.4.2. Các nguyên tắc tối ưu hóa việc sử dụng bộ nhớ :

- Sử dụng càng ít đối tượng càng tốt và chỉ cấp phát bộ nhớ khi cần thiết.

- Đối với các đối tượng không còn cần được sử dụng nữa, nên gán cho chúng

giá trị null để giúp garbage collector nhận diện được vùng nhớ không còn được sử

dụng nữa để thu hồi.

- Bộ nhớ của các thiết bị di động rất hạn chế, do vậy, trong thiết kế chương

trình, chúng ta nên tránh việc xây dựng các hàm có nhu cầu được cấp phát khối

lượng bộ nhớ lớn.

- Trong J2ME, việc thu hồi bộ nhớ không còn được sử dụng được thực hiện

thông qua garbage collector. Tuy nhiên, khi nào việc thu dọn này được thực hiện là

do người lập trình tự quyết định. Mặt khác, việc thực thi hàm thu hồi bộ nhớ

System.gc() cũng mất nhiều thời gian. Vì vậy, chúng ta cần quản lý bộ nhớ chặt chẽ,

Page 129: Ban do tren dien thoai di dong co ho tro java

Chương 5 : Một số cải tiến nhằm tối ưu hóa chương trình

112

giải phóng bộ nhớ nếu không cần sử dụng nữa và chỉ nên gọi chức năng thu hồi bộ

nhớ khi cần thiết.

- Trong ngôn ngữ Java, chúng ta có thể nối nhiều chuỗi ký tự chỉ đơn giản

bằng cách thực hiện toán tử “+” như ví dụ sau :

public String indent (String line, int spaces)

{

String strOut = “”;

for (int i=0;i<spaces;i++)

{

strOut += “ ”;

}

return strOut;

}

Tuy nhiên, xét về hiệu suất hoạt động, cách làm như vậy sẽ không tốt bởi vì

mỗi khi thực hiện việc nối 2 chuỗi ký tự (kiểu String), Java sẽ tạo một đối tượng

kiểu StringBuffer, sau đó gọi thực hiện phương thức append của đối tượng này 2

lần để nối 2 chuỗi ký tự lại và cuối cùng, thực hiện phương thức toString() để tạo

đối tượng kiểu String rồi trả về kết quả. Nếu việc nối chuỗi được thực hiện nhiều

lần, đặc biệt là trong một vòng lặp sẽ dẫn đến việc tạo rất nhiều đối tượng kiểu

String và StringBuffer. Kết quả là khiến cho chương trình sử dụng và tạo nhiều rác

trong bộ nhớ, mặt khác sẽ làm tăng thời gian xử lý của chương trình do phải mất

nhiều thời gian khởi tạo các đối tượng. Cải tiến đoạn chương trình trên như sau :

Page 130: Ban do tren dien thoai di dong co ho tro java

Chương 5 : Một số cải tiến nhằm tối ưu hóa chương trình

113

public String indent (String line, int spaces) { StringBuffer out = new StringBuffer(); for (int i=0;i<spaces;i++) { out.append(‘ ’); } return out.toString(); }

Page 131: Ban do tren dien thoai di dong co ho tro java

Chương 6 : Thử nghiệm – Hướng dẫn cài đặt và sử dụng

114

Chương 6 : THỬ NGHIỆM – HƯỚNG DẪN CÀI ĐẶT VÀ SỬ DỤNG

6.1. Cách cài đặt chương trình trên máy ảo :

Quá trình thử nghiệm được thực hiện trên 4 loại máy ảo : máy ảo chuẩn của

Sun, máy ảo Nokia, Sony Ericsson, Samsung và Siemens (xem giới thiệu về các

máy ảo này trong phần phụ lục B).

6.1.1. Trình giả lập Sony Ericsson :

Phiên bản mới nhất được hãng Sony Ericsson cung cấp miễn phí hiện nay là

bản 2.2.0. Tập tin cài đặt semc_j2me_sdk_2_2_0.exe có dung lượng là 53,4 MB.

Việc cài đặt được tiến hành như các chương trình bình thường.

Sau khi cài đặt xong, gọi thực thi chương trình như sau :

Start Menu\Sony Ericsson\WTK2\Run MIDP Application

Trên hộp thoại hiện ra, chọn đường dẫn đến tập tin HoChiMinhCity_Map.jad

Hình 6-1 : Thử nghiệm ứng dụng trên trình giả lập Sony Ericsson

Kết quả thực hiện như sau :

Page 132: Ban do tren dien thoai di dong co ho tro java

Chương 6 : Thử nghiệm – Hướng dẫn cài đặt và sử dụng

115

Hình 6-2 : Màn hình giao diện trình giả lập Sony Ericsson

6.1.2. Trình giả lập Nokia :

Bộ công cụ phát triển ứng dụng cho Nokia mới nhất hiện nay có tên là Nokia

Developer’s Suite for Java™ 2 Platform, Micro Edition, Version 2.2 for Windows.

Tập tin cài đặt có kích thước 49 MB, việc cài đặt cũng tương tự như các chương

trình bình thường.

Sau khi cài đặt, thực thi bằng cách chọn trên Start Menu, mục Nokia

Developer’ Suite for J2ME Run as a Standalone. Hộp thoại sau xuất hiện :

Page 133: Ban do tren dien thoai di dong co ho tro java

Chương 6 : Thử nghiệm – Hướng dẫn cài đặt và sử dụng

116

Hình 6-3 : Thử nghiệm ứng dụng trên trình giả lập Nokia

Chọn tab Start Emulators, sau đó chọn đường dẫn đến tập tin

HoChiMinhCity_Map.jad, chọn loại điện thoại cần giả lập, sau đó nhấn Emulate.

Kết quả như sau :

Page 134: Ban do tren dien thoai di dong co ho tro java

Chương 6 : Thử nghiệm – Hướng dẫn cài đặt và sử dụng

117

Hình 6-4 : Kết quả thử nghiệm trên trình giả lập Nokia

6.1.3. Trình giả lập Siemens :

Để phát triển và thử nghiệm ứng dụng cho điện thoại di động Siemens,

chúng ta phải cài đặt 2 modules : Siemens Mobility Toolkit (phiên bản mới nhất là

3.0) và ít nhất là 1 điện thoại ảo. Hiện nay Siemens cho phép download miễn phí 4

máy ảo là SL 65, SK 65, CX 65.

Sau khi cài đặt bộ công cụ và trình giả lập vào máy tính, chúng ta có 2 cách

để chạy thử nghiệm chương trình. Dưới đây mô tả việc cài đặt trên điện thoại

Siemens SK 65 :

Page 135: Ban do tren dien thoai di dong co ho tro java

Chương 6 : Thử nghiệm – Hướng dẫn cài đặt và sử dụng

118

Cách 1 :

Bước 1 :

Các ứng dụng cũng như các tập tin tài nguyên (skin, theme, hình ảnh, âm

thanh) được chứa trong thư mục “filesystem\0\” của mỗi trình giả lập. Chúng ta tạo

trong thư mục này một thư mục con chứa 2 tập tin HoChiMinhCity_Map.jad,

HoChiMinhCity_Map.jar (tên thư mục không yêu cầu trùng với tên ứng dụng). Ví

dụ :

c:\Siemens\SMTK_3.X\emulators\SK65\Filesystem\0\HCMCMM\HoChiMinh

City_Map.jad

c:\Siemens\SMTK_3.X\emulators\SK65\Filesystem\0\HCMCMM\HoChiMinh

City_Map.jar

Bước 2 :

Gọi trình giả lập từ bằng cách chọn Start Menu Siemens Mobility Toolkit

3.00 SMTK 3.0 Emulator Launcher

Chọn trình giả lập Siemens SK65

Bước 3 :

Chọn mục Extras trong menu chính, sau đó chọn File system. Chọn thư mục

vừa tạo.

Page 136: Ban do tren dien thoai di dong co ho tro java

Chương 6 : Thử nghiệm – Hướng dẫn cài đặt và sử dụng

119

Hình 6-5 : Cài đặt ứng dụng trên điện thoại Siemens SK 65

Trong thư mục được chọn sẽ xuất hiện 2 tập tin JAR và JAD của chương

trình. Chọn tập tin có kích thước nhỏ hơn (file JAD). Chương trình sẽ yêu cầu

chúng ta chọn vị trí để đặt ứng dụng. Có 2 thư mục có thể chuyển đến, đó là Games

và Applications. Chúng ta chọn Applications.

Hình 6-6 : Khởi động ứng dụng trên Siemens SK 65

Bước 4 :

Chương trình đã được cài đặt vào mục Applications của máy. Kết quả thực

hiện tương tự như sau :

Hình 6-7 : Kết quả thử nghiệm trên trình giả lập Siemens

Page 137: Ban do tren dien thoai di dong co ho tro java

Chương 6 : Thử nghiệm – Hướng dẫn cài đặt và sử dụng

120

Cách 2 : Sử dụng dòng lệnh :

Chạy ứng dụng trên trình giả lập bằng dòng lệnh rất đơn giải chỉ bằng cách

thực hiện dòng lệnh sau trong Command Prompt :

C:\siemens\SMTK_3.X\bin\emulator.exe -Xdevice:SK65 -Xdescriptor:"C:\

HCMCMM\HoChiMinhCity_Map.jad"

6.1.4. Trình giả lập Samsung :

Cài đặt bộ Samsung Wireless Toolkit vào máy tính bằng tập tin

Samsung_wtk_2-0-0.exe. Việc cài đặt tương tự như các ứng dụng khác. Sau khi cài

đặt xong, thực thi chương trình bằng cách chọn Start Menu Samsung Run

MIDP Application.

Trong hộp thoại hiện ra, chọn đường dẫn đến file JAD, kết quả thực hiện

tương tự như sau :

Page 138: Ban do tren dien thoai di dong co ho tro java

Chương 6 : Thử nghiệm – Hướng dẫn cài đặt và sử dụng

121

Hình 6-8 : Kết quả thử nghiệm trên trình giả lập Samsung

6.1.5. Trình giả lập chuẩn (Sun Microsystems) :

Cách cài đặt và sử dụng trình giả lập này tương tự như đối với trình giả lập

Samsung.

Để việc thực thi ứng dụng nhanh hơn, có thể dùng dòng lệnh như sau :

Page 139: Ban do tren dien thoai di dong co ho tro java

Chương 6 : Thử nghiệm – Hướng dẫn cài đặt và sử dụng

122

C:\j2mewtk2.0\bin\emulator.exe -Xdevice:UnicodeColorPhone -Xdescriptor:"C:\

HoChiMinhCity_Map\HoChiMinhCity_Map.jad"

Hình 6-9 : Kết quả thử nghiệm trên J2ME SDK

Lưu ý :

Xin xem phần tiếp theo để cấu hình cho trình giả lập hiển thị được font chữ

tiếng Việt.

Page 140: Ban do tren dien thoai di dong co ho tro java

Chương 6 : Thử nghiệm – Hướng dẫn cài đặt và sử dụng

123

6.2. Vấn đề hỗ trợ tiếng Việt có dấu :

6.2.1. Hiển thị tiếng Việt trên máy ảo :

Đa số các trình giả lập điện thoại di động hiện nay không hỗ trợ hiển thị

tiếng Việt có dấu (bảng mã Unicode). Cụ thể, trong các trình giả lập được đề tài thử

nghiệm như trên, chỉ có trình giả lập của hãng Siemens là hiển thị tốt Unicode còn

các trình giả lập khác (Nokia, Sony Ericsson, Samsung) không hỗ trợ.

Đối với trình giả lập chuẩn của Sun Microsystems (Sun Wireless Toolkit),

các điện thoại ảo được cung cấp mặc định không hỗ trợ Unicode. Tuy nhiên, chúng

ta có thể cấu hình để tạo một điện thoại ảo khác hiển thị đúng font chữ tiếng Việt

nhằm sử dụng cho quá trình phát triển ứng dụng bằng cách sau :

1. Vào thư mục cài đặt bộ công cụ, di chuyển đến thư mục j2mewtk2.0\ wtklib

\devices\

2. Chép thư mục DefaultColorPhone và đổi tên thành UnicodeColorPhone.

3. Trong thư mục UnicodeColorPhone vừa tạo, đổi tên tập tin

DefaultColorPhone.properties thành UnicodeColorPhone.properties.

4. Dùng trình soạn thảo văn bản (Notepad) mở tập tin

UnicodeColorPhone.properties, thay thế từ “SansSerif” thành “Arial” trong

tất cả các dòng định nghĩa font chữ.

6.2.2. Hiển thị tiếng Việt trên thiết bị thật :

Việc có hiển thị được tiếng Việt trên điện thoại di động hay không là do nhà

sản xuất quyết định. May mắn là đa số các điện thoại di động trên thị trường Việt

Nam hiện nay đều hiển thị tốt tiếng Việt Unicode (mặc dù trên thiết bị giả lập không

hiển thị đúng).

Tuy nhiên, riêng đối với các điện thoại Nokia series 60 sử dụng hệ điều hành

Symbian thì chúng ta phải tự cài đặt font tiếng Việt cho thiết bị này. Việc cài đặt

cũng khá đơn giản qua 2 bước sau :

1. Chép tập tin “tahoma.gdr” vào thư mục “C:\Systems\Font”

2. Khởi động lại máy.

Page 141: Ban do tren dien thoai di dong co ho tro java

Chương 6 : Thử nghiệm – Hướng dẫn cài đặt và sử dụng

124

6.3 Hướng dẫn sử dụng chương trình :

6.3.1. Chức năng duyệt bản đồ

Di chuyển bản đồ :

Để di chuyển bản đồ, chúng ta sử dụng các phím theo sơ đồ sau :

Hình 6-10 : Các phím di chuyển bản đồ

Phím 1 : di chuyển bản đồ lên góc trên bên trái

Phím 2 : di chuyển bản đồ lên trên

Phím 3 : di chuyển bản đồ lên góc trên bên phải

Phím 4 : di chuyển bản đồ sang trái

Phím 6 : di chuyển bản đồ sang phải

Phím 7 : di chuyển bản đồ xuống góc dưới bên trái

Phím 8 : di chuyển bản đồ xuống dưới

Phím 9 : di chuyển bản đồ xuống góc dưới bên phải

Phóng to – thu nhỏ bản đồ :

Phím * : phóng to

Phím # : thu nhỏ

6.3.2. Chức năng tra cứu địa điểm, tên đường :

Tra cứu các địa danh – địa điểm :

Để tra cứu các địa danh, địa điểm, chúng ta thực hiện theo các bước sau :

Bước 1 :

Từ menu chính của chương trình, chọn menu “Tìm địa điểm”

Page 142: Ban do tren dien thoai di dong co ho tro java

Chương 6 : Thử nghiệm – Hướng dẫn cài đặt và sử dụng

125

Bước 2 :

Chọn loại địa điểm cần tìm, ví dụ : chợ, bệnh viện, trường học v.v…

Bước 3 :

Trên màn hình sẽ xuất hiện một danh sách tên các địa điểm. Ở bước

này, chúng ta có thể dùng các phím mũi tên để chọn tên địa điểm cần đến. Để nhanh

hơn, có thể nhập tên địa điểm cần tìm trong hộp nhập “Tên

địa điểm”, khi đó, trong danh sách sẽ chỉ hiển thị những địa

điểm nào có tên gần giống với chuỗi ký tự vừa được nhập

vào.

Lưu ý : chuỗi ký tự được nhập vào là chuỗi tiếng Việt

không dấu và không phân biệt chữ hoa hay chữ thường.

Bước 4 :

Sau khi tìm thấy tên địa điểm cần đến, nhấn phím chọn, màn hình sẽ

di chuyển đến địa điểm cần tìm.

Page 143: Ban do tren dien thoai di dong co ho tro java

Chương 6 : Thử nghiệm – Hướng dẫn cài đặt và sử dụng

126

Hình 6-11 : Kết quả tìm địa điểm

Tra cứu tên đường :

Việc tra cứu tên đường được thực hiện theo các bước sau :

Bước 1 :

Chọn chức năng tra cứu tên đường (menu “Tìm tên đường”)

Bước 2 :

Trên màn hình chính sẽ xuất hiện danh sách tất cả các tên đường.

Nhập tên đường (hoặc một phần tên đường) cần tìm vào trong textbox “Tên

đường”.

Page 144: Ban do tren dien thoai di dong co ho tro java

Chương 6 : Thử nghiệm – Hướng dẫn cài đặt và sử dụng

127

Hình 6-12 : Màn hình tra cứu tên đường

Lúc này, trong danh sách sẽ hiển thị 10 tên đường đầu tiên thỏa điều kiện cần

tìm (hiển thị các tên đường có chứa những từ được nhập vào). Nếu tên đường cần

tìm xuất hiện trong danh sách, sang bước 4.

Bước 3 :

Nếu số đường thỏa điều kiện lọc nhiều hơn 10 (1 trang trong danh sách chỉ

chứa 10 tên đường), chọn menu chính, sau đó chọn “Trang kế” để xem trang tiếp

theo hoặc chọn “Trang trước” để xem lại 10 tên đường trước đó.

Bước 4 :

Page 145: Ban do tren dien thoai di dong co ho tro java

Chương 6 : Thử nghiệm – Hướng dẫn cài đặt và sử dụng

128

Khi tên đường cần tìm xuất hiện, chọn tên đường này trong danh sách, sau

đó nhấn nút chọn để trở về màn hình chính. Cung đường đầu tiên của đường này sẽ

xuất hiện trên màn hình.

Hình 6-13 : Kết quả tra cứu tên đường

6.3.3. Chức năng tìm đường đi ngắn nhất giữa 2 điểm :

Việc tìm đường đi ngắn nhất giữa 2 điểm được thực hiện qua 3 bước chính :

1. Chọn vị trí bắt đầu đoạn đường cần tìm

2. Chọn vị trí kết thúc đoạn đường cần tìm (vị trí cần đi đến)

3. Yêu cầu tìm đường.

Con trỏ - Di chuyển con trỏ :

Con trỏ được hiển thị trên màn hình dưới dạng một chữ thập (+) màu

đỏ, dùng để xác định một vị trí trên màn hình.

Để di chuyển con trỏ, chúng ta sử dụng cụm phím mũi tên trên điện

thoại. Hướng của mũi tên cũng là hướng di chuyển con trỏ.

Chọn vị trí bắt đầu – vị trí kết thúc :

Để chọn vị trí bắt đầu (vị trí kết thúc) của đoạn đường cần tìm, đầu tiên, di

chuyển con trỏ đến vị trí sẽ được chọn, sau đó chọn menu “Vị trí bắt đầu” (“Vị trí

kết thúc”).

Page 146: Ban do tren dien thoai di dong co ho tro java

Chương 6 : Thử nghiệm – Hướng dẫn cài đặt và sử dụng

129

Nếu việc đánh dấu vị trí được thực hiện thành công, trên màn hình sẽ xuất

hiện một ô vuông màu xanh tương ứng với vị trí bắt đầu hoặc ô vuông màu đỏ

tương ứng với vị trí kết thúc.

Hình 6-14 : Màn hình chọn vị trí

Lưu ý, việc lựa chọn vị trí chỉ hợp lệ khi con trỏ nằm ngay trên cung đường

hoặc chỉ lệch một khoảng nhỏ.

Yêu cầu tìm đường :

Trước khi yêu cầu chương trình tìm đường đi ngắn nhất, người sử dụng bắt

buộc phải lựa chọn đầy đủ cả vị trí bắt đầu và vị trí kết thúc, nếu chưa chọn, chương

trình sẽ thông báo lỗi.

Yêu cầu tìm đường ngắn nhất bằng cách chọn menu “Đường ngắn nhất”

Thời gian chờ đợi chương trình tìm giải pháp tối ưu nhất là tương đối ngắn.

Tuy nhiên, đối với các điện thoại có cấu hình không cao hoặc khoảng cách giữa 2 vị

trí cần tìm rất xa nhau có thể khiến người sử dụng phải chờ đợi, nếu không cần tìm

đường nữa, chúng ta có thể chọn lệnh “Trở về” để ngưng quá trình tìm đường

Page 147: Ban do tren dien thoai di dong co ho tro java

Chương 6 : Thử nghiệm – Hướng dẫn cài đặt và sử dụng

130

Sau khi tìm được đường đi ngắn nhất, chương trình sẽ thông báo kết quả

tương tự như hình bên dưới. Chúng ta có thể dùng các phím mũi tên để xem kết

quả. Chọn lệnh “Trở về” để trở về màn hình chính. Trên bản đồ lúc này sẽ xuất hiện

một đường màu hồng kẻ từ vị trí bắt đầu đến vị trí kết thúc nhằm mô tả các đoạn

đường đã được tìm thấy.

Hình 6-15 : Kết quả tìm đường đi ngắn nhất

Các chức năng khác :

Hiển thị lại kết quả tìm đường :

Khi cần xem lại hướng dẫn tìm đường (dòng chữ mô tả kết

quả tìm đường), nhấn phím số 5.

Lưu ý :

Mỗi khi người sử dụng chọn lại nút bắt đầu hay nút kết thúc thì kết

quả tìm đường cũ sẽ bị xóa.

Page 148: Ban do tren dien thoai di dong co ho tro java

Chương 6 : Thử nghiệm – Hướng dẫn cài đặt và sử dụng

131

Di chuyển đến vị trí bắt đầu, vị trí kết thúc :

Để di chuyển nhanh đến vị trí bắt đầu hoặc vị trí kết thúc

đoạn đường cần tìm, nhấn phím số 0. Nhấn lần thứ nhất sẽ di

chuyển đến vị trí bắt đầu. Nhấn lần thứ hai sẽ di chuyển đến vị trí kết thúc và lần

lượt như vậy.

Xóa kết quả tìm đường :

Để xóa kết quả tìm đường, xóa nút bắt đầu và nút kết thúc, chọn menu “Xóa

kết quả.

6.3.4. Chức năng trợ giúp, hướng dẫn sử dụng :

Hướng dẫn sử dụng chương trình

Để xem hướng dẫn sử dụng chương trình, chọn menu “Hướng dẫn”.

Trên màn hình xuất hiện danh sách các nội dung được hướng dẫn,

chọn nội dung cần xem và nhấn nút “Chọn”.

Page 149: Ban do tren dien thoai di dong co ho tro java

Chương 6 : Thử nghiệm – Hướng dẫn cài đặt và sử dụng

132

Hình 6-16 : Màn hình hướng dẫn sử dụng

Nhấn nút “Trở về” để quay lại màn hình chính.

Hướng dẫn sử dụng chương trình

Để xem thông tin về chương trình, chọn menu “Thông tin”

Hình 6-17 : Màn hình xem thông tin chương trình

Chọn nút “Trở về” để quay lại màn hình bản đồ.

Page 150: Ban do tren dien thoai di dong co ho tro java

Chương 7: Tổng kết – Đánh giá

133

Chương 7: TỔNG KẾT – ĐÁNH GIÁ

7.1. Ưu điểm :

Nhìn chung, chương trình đã hoàn thành tốt các yêu cầu cơ bản được đặt ra,

đã xây dựng được một phần mềm ứng dụng chạy được trên nhiều điện thoại di động

phổ biến trên thị trường. Phần mềm đã hỗ trợ cho người sử dụng xem bản đồ, tra

cứu thông tin nhiều loại địa điểm, tra cứu theo tên đường và giúp người sử dụng xác

định lộ trình ngắn nhất giữa hai địa điểm. Hiệu suất của chương trình tương đối khá,

việc đọc dữ liệu, vẽ bản đồ được thực hiện nhanh, tốc độ tìm giải pháp xác định lộ

trình ngắn nhất là có thể chấp nhận được, không gây phản cảm cho người sử dụng.

Ngoài ra, việc bố trí các phím chức năng, sự liên kết giữa các màn hình và chức

năng tìm kiếm được xây dựng khá hợp lý cùng với giao diện tiếng Việt giúp cho

người dùng dễ dàng làm quen với chương trình.

7.2. Khuyết điểm :

Do quỹ thời gian thực hiện đề tài không nhiều, nhóm thực hiện đề tài cũng

chưa có kinh nghiệm lập trình trên điện thoại di động cùng với sự hạn chế của thiết

bị này nên chương trình cũng còn một vài hạn chế cần khắc phục như :

Chưa giải quyết triệt để sự xung đột, chồng lên nhau giữa các tên đường

tại một số giao lộ.

Dữ liệu cho bản đồ còn chưa đầy đủ, một số con đường nhỏ chưa có tên,

thông tin về các đường một chiều và các luật giao thông hiện hành chưa được cập

nhật, các dữ liệu về những công trình công cộng còn thiếu.

Nhóm thực hiện không có điều kiện để chạy thử chương trình trên nhiều

dòng điện thoại của nhiều hãng khác nhau nên có thể chương trình còn một số lỗi

tiềm ẩn (mỗi hãng sản xuất có cách cài đặt chuẩn J2ME khác nhau).

Cấu hình tối thiểu để có thể chạy được ứng dụng (khoảng 250KB cho bộ

nhớ Heap, hỗ trợ tập tin JAR trên 148KB) cũng chưa dễ được đáp ứng đối với một

số loại điện thoại có cấu hình thấp.

Page 151: Ban do tren dien thoai di dong co ho tro java

Chương 7: Tổng kết – Đánh giá

134

7.3. Hướng mở rộng :

Để chương trình hoàn thiện hơn nữa, có thể mở rộng trên một số vấn đề sau :

Bổ sung cơ sở dữ liệu cho đầy đủ hơn. Điều này thật ra cũng không khó

nếu được nhiều người sử dụng quan tâm và cùng góp sức thực hiện. Cụ thể, khi tìm

lộ trình qua những con đường không có tên, chương trình sẽ hiển thị mã số của

đường, ví dụ [2005]. Khi đó, nếu một người sử dụng biết được tên của đường này sẽ

gởi phản hồi về cho nhóm thực hiện để bổ sung.

Nếu sau này, điều kiện về phần cứng cho phép, chúng ta có thể bổ sung

thêm cho chương trình tính năng tra cứu, hiển thị các tuyến xe buýt,…

Có thể kết hợp với một trang WAP để nhận thông tin về các điểm kẹt xe,

các đoạn đường đang được sửa chữa, nâng cấp hoặc các đoạn đường tạm thời bị

cấm rồi đánh dấu trên bản đồ và thông báo cho người sử dụng biết, gợi ý cho họ các

tuyến đường để tránh những điểm đó.

Page 152: Ban do tren dien thoai di dong co ho tro java

Phụ lục B : Giới thiệu các chương trình giả lập

135

Phụ lục A : CÁC THUẬT NGỮ ĐƯỢC SỬ DỤNG

2G : Thế hệ thứ hai của công nghệ mạng không dây. Mạng 2G sử dụng công nghệ chuyển mạch. 2.5G : Thế hệ tiếp theo của công nghệ không dây 2G. Mạng 2.5G không thay thế mạng 2G mà chỉ cung cấp thêm dịch vụ dữ liệu gói tin cho các mạng 2G. 3G : Thế hệ thứ 3 của công nghệ mạng không dây. Mạng 3G sử dụng công nghệ chuyển mạch gói. Abstract Window Toolkit : Định nghĩa các thành phần giao diện đồ họa cho các chương trình Java. application management system : Phần mềm có sẵn trên thiết bị di động, có chức năng điều khiển sự thực thi của các ứng dụng khác trên thiết bị. attribute : thông tin về một đặc tính của MIDlet. Mỗi thông tin là một cặp tên-giá trị, tên dịnh nghĩa thuộc tính là gì, giá trị cho biết thông tin về thuộc tính. character encoding set : một ánh xạ giữa các ký tự viết và mẫu các dãy bit, thường được gọi là charset. command : đại diện cho một hành động của người dùng. MIDP định nghĩa một lớp có tên là Command để tiếp nhận và xử lý các giao tiếp của người dùng với ứng dụng. compatibility verification : quy trình xác định tính tương thích của ứng dụng thiết bị được cài đặt. compact virtual machine (CVM) : một máy ảo Java hỗ trợ các đặc điểm giống như máy ảo của J2SE nhưng được thiết kế đặc biệt cho các thiết bị nhúng. configuration : đặc tả của một nền Java bao gồm một tập các đặc tính của máy ảo Java và các API cho một họ các thiết bị. Connected Device Configuration (CDC) : một đặc tả J2ME hỗ trợ cho các thiết bị di dộng. Connected, Limited Device Configuration (CLDC) : một đặc tả J2ME hỗ trợ cho các thiết bị di dộng cá nhân với tài nguyên ít.

Page 153: Ban do tren dien thoai di dong co ho tro java

Phụ lục B : Giới thiệu các chương trình giả lập

136

double buffering : kỹ thuật lập trình đồ họa sử dụng đồng thời hai vùng đệm để vẽ. Trước hết, chương trình vẽ lên một đối tượng đồ họa, sau đó sẽ chuyển nội dung của đối tượng này lên đối tượng chính chứ không vẽ trực tiếp lên đối tượng chính. event listener : một lớp Java được định nghĩa bởi MIDP, lớp này được sử dụng để lắng nghe sự kiện từ người dùng. Nếu một sự kiện xảy ra, MIDP sẽ gọi một phương thức trên đối tượng này để báo tin. foundation profile : một profile được thiết kết để cài đặt CDC. generic connection framework : một tập các giao diện MIDP và một lớp hỗ trợ cho khả năng kết nối mạng của ứng dụng MIDP. global positioning system (GPS) : một hệ thống thông tin địa lý dựa vào vệ tinh để chuyển thông tin cho đối tượng nhận. high-level API : tập các API dành cho việc tạo lập các đối tượng giao diện cấp cao như Textbox, Form,… Internationalization : làm cho một chương trình máy tính có khả năng thực thi trên nhiều ngôn ngữ, nhiều nền văn hóa. Java 2 Micro Edition (J2ME) : một trong 3 nền Java được định nghĩa bởi Sun Microsystems, hỗ trợ cho các thiết bị di động. Java application manager : một trình quản lý ứng dụng Java hỗ trợ cho việc điều khiển các ứng dụng Java khác trên thiết bị di động. Kilobyte Virtual Machine (KVM) : một máy ảo Java được thiết kế để dùng với CLDC. Nó hỗ trợ một tập con các đặc điểm của máy ảo Java chuẩn. Listener : xem event listener. low-level API : các API hỗ trợ lập trình giao diện cho phép thao tác đối tượng ở mức thấp MIDlet : một ứng dụng cần nền MIDP để chạy. MIDlet suite : một nhóm các MIDlet dùng chung tài nguyên, các MIDlet trong cùng một bộ phải được đóng gói với nhau để cung cấp cho thiết bị. Mobile Indepdendent Device Profile (MIDP) : một profile J2ME cài đặt CLDC.

Page 154: Ban do tren dien thoai di dong co ho tro java

Phụ lục B : Giới thiệu các chương trình giả lập

137

over-the-air : thuật ngữ này được dùng để chỉ việc tìm và download các ứng dụng thông qua mạng không dây. personal profile : một profile J2ME được thiết kế để cài đặt CDC. profile : một đặc tả cho tập các lớp ở mức cao của một họ các thiết bị. Một profile cài đặt theo cấu hình của J2ME. Personal Digital Assistant Profile (PDAP) : một J2ME profile được thiết kế để cài đặt CLDC. property : một thuộc tính định nghĩa một vài đặc điểm của môi trường Java trên thiết bị di động. record comparator : một lớp được định nghĩa bởi MIDP để cài đặt chức năng so sánh cho 2 dòng dữ liệu được lưu trong MIDP RMS. record filter : một lớp được định nghĩa bởi MIDP để cài đặt chức năng tìm kiếm dữ liệu được lưu trong MIDP RMS theo một vài tiêu chuẩn nào đó. Bộ lọc chỉ trả ra các dòng dữ liệu phù hợp với điều kiện được đưa vào. Record Management System (RMS) : một cơ chế lưu trữ dữ liệu đơn giản dành cho ứng dụng. Cơ chế này hỗ trợ lưu trữ theo nhiều bảng, mỗi bảng có thể chứa nhiều dòng dữ liệu. short message service (SMS) : một dịch vụ mạng không dây hỗ trợ việc chuyển tải các thông điệp thuần văn bản giữa các thiết bị di động. UTF-8 : một chuẩn quốc tế về mã hóa các ký tự. Widget : tiếng lóng trong ngành kỹ thuật máy tính, dùng để chỉ một vài loại thành phần phần mềm, thường dùng để chỉ các thành phần giao diện. Wireless Application Protocol (WAP) : giao thức được dùng trong hệ thống Internet không dây thế hệ thứ nhất. wireless Internet : sự kết hợp của cơ sở hạ tầng mạng không dây và giao diện của nó với Internet, sự kết hợp này tạo ra một môi trường cho phép các thiết bị di động truy cập vào Internet. Wireless Markup Language (WML) : ngôn ngữ đánh dấu dùng trong hệ thống Internet thế hệ thứ nhất, được dùng để định dạng các trang web cho thiết bị di động.

Page 155: Ban do tren dien thoai di dong co ho tro java

Phụ lục B : Giới thiệu các chương trình giả lập

138

Phụ lục B : GIỚI THIỆU CÁC CHƯƠNG TRÌNH GIẢ LẬP

Để phát triển ứng dụng với J2ME, chúng ta có thể cần các tài nguyên sau đây :

B.1. JDK :

Chúng ta có thể download phiên bản mới nhất của JDK trên trang web Java

của Sun. Ví dụ ở đây là phiên bản 1.4.2 :

http://java.sun.com/j2se/1.4.2/download.html

Trang download có giao diện như sau :

Hình B-1 : Màn hình download JDK 1.4

B.2. Công cụ phát triển của hãng thứ ba :

Với các thư viện mà Sun đã cung cấp, không cần thêm công cụ nào hỗ trợ,

chúng ta cũng có thể phát triển được ứng dụng J2ME, tuy nhiên, công việc này lại

khá vất vả và gần như chắc chắn là chúng ta sẽ không làm được gì nhiều.

Một môi trường phát triển tích hợp (Integrated Development Enviroment -

IDE) là một phần mềm đóng gói bên trong nó rất nhiều công cụ phát triển khác.

Chúng thường bao gồm một trình soạn thảo mã nguồn (source code editor), trình

Page 156: Ban do tren dien thoai di dong co ho tro java

Phụ lục B : Giới thiệu các chương trình giả lập

139

biên dịch, bộ gỡ rối (debugger), và các tiện ích khác. Các công cụ sẽ được sử dụng

với nhau trong quá trình phát triển. Chính nhờ các công cụ này mà công việc phát

triển phần mềm nhanh hơn, hiệu quả hơn và dễ dàng khử lỗi hơn.

B.3. Trình giả lập cho các loại điện thoại di động :

B.3.1. Siemens :

Bộ công cụ phát triển phần mềm cho điện thoại di động Siemens SMTK bao

gồm hai phần chính :

• SMTK Core Pack : gói chính

• Các Emulator Pack

Khi cài đặt hai gói này, chúng ta sẽ có được một công cụ hỗ trợ cho việc phát

triển phần mềm J2ME, công cụ này có các chức năng sau :

• Launcher : chạy bộ giả lập.

• Emulator : dùng để kiểm thử các MIDlet.

• Manager : cấu hình SMTK và quản lý việc tích hợp với các IDE khác.

• Công cụ preverify.exe : kiểm tra các lớp Java trên PC.

• Tài liệu về Siemens API : tài liệu về các lớp Java đã được viết bởi

Siemens và được cung cấp kèm theo SMTK.

• Mã nguồn của các ví dụ.

Yêu cầu phần cứng :

Cấu hình tối thiểu :

Intel® Pentium® 166MHz

256 MB RAM

Sound card (để giả lập âm thanh)

Đĩa cứng có kích thước tối thiểu 230 MB

o 40 MB (cài đặt SMTK Core)

o 70 MB (cài đặt J2SE™ SDK)

o 120 MB (cài đặt J2SE™ SDK)

Page 157: Ban do tren dien thoai di dong co ho tro java

Phụ lục B : Giới thiệu các chương trình giả lập

140

Mỗi Emulator Pack cũng cần thêm không gian đĩa cứng, kích thước thay

đổi tùy theo từng loại.

Yêu cầu phần mềm :

Windows™ NT 4.0, Windows™ 2000, Windows™ XP.

DirectX 9.0b hay mới hơn.

Sun Java Standard Edition (J2SE) SDK, phiên bản 1.4 hay mới hơn.

Siemens SK 65 Siemens SL 65

Hình B-2: Trình giả lập Siemens

B.3.2. Sony Ericson :

Bộ phần mềm dùng để phát triển ứng dụng cho điện thoại Sony Ericsson,

Sony Ericsson Java MIDP Software Developer's Kit có các công cụ sau :

Page 158: Ban do tren dien thoai di dong co ho tro java

Phụ lục B : Giới thiệu các chương trình giả lập

141

Công cụ hỗ trợ gỡ rối trên thiết bị, hỗ trợ gỡ rối ở mức mã nguồn khi sử

dụng một Java IDE, trình giả lập cho các loại điện thoại : K750, K600, K300, J300,

Z800, V800, S700/S710, Z500, K700, Z1010, K500, K508, F500i, P900, P910,

Z600/Z608, T630-T628, T637 và T610 Series.

Một công cụ tương tự với Sun Microsystems' Java 2 Micro Edition Wireless

Toolkit (J2ME Wireless Toolkit) cũng được tích hợp một trình số giả lập các điện

thoại F500i, J300, K300, K500, K600, K700, K750, S700, V800, Z1010, Z500 và

Z800.

Tài liệu về các lớp và phương thức của MIDP 2.0, MIDP 1.0 và CLDC 1.1

Yêu cầu về hệ thống :

Hệ điều hành :

- Microsoft Windows 2000/XP

Phần cứng và bộ nhớ :

- Ổ cứng còn trống tối thiểu 110 MB.

- RAM 256 MB.

- CPU 500 MHz.

Yêu cầu phần mềm :

- Java 2 SDK, Standard Edition (JDK) 1.4.1 hay mới hơn (JDK 1.4.2 ).

- DirectX 8.1 hay mới hơn.

Các IDE tích hợp (không bắt buộc)

Sony Ericsson J2ME SDK có thể được tích hợp với các môi trường phát triển

khác. Do hỗ trợ UEI nên bộ SDK này được tích hợp với bất kỳ Java IDE nào có hỗ

trợ UEI. Sony Ericsson J2ME SDK đã được kiểm tra với các IDE sau :

Sun ONE Studio, Mobile Edition

Borland JBuilder

NetBeans 4.0

Page 159: Ban do tren dien thoai di dong co ho tro java

Phụ lục B : Giới thiệu các chương trình giả lập

142

Sony Ericsson K750 Sony Ericsson P900

Hình B-3 : Trình giả lập Sony Ericsson

B.3.3. Samsung :

SAMSUNG JaUmi Wireless Toolkit cung cấp một môi trường phát triển và

trình giả lập cho các loại điện thoại của Samsung, trình giả lập này hỗ trợ đầy đủ

các đặc tính mới nhất của of MIDP 2.0 (JSR-118), Wireless Messaging APIs (JSR-

120) và Mobile Media APIs (JSR-135).

Các API được SAMSUNG JaUmi Wireless Toolkit hỗ trợ :

Wireless Messaging API : SAMSUNG JaUmi Wireless Toolkit hỗ trợ

các chức năng được cung cấp bởi Wireless Messaging API (WMA). Với chức năng

này chúng ta có thể phát triển và chạy các ứng dụng có sử dụng Short Message

Service (SMS) hay Cell Broadcast Service (CBS).

Page 160: Ban do tren dien thoai di dong co ho tro java

Phụ lục B : Giới thiệu các chương trình giả lập

143

Mobile Media API : SAMSUNG JaUmi Wireless Toolkit hỗ trợ các

chức năng multimedia được cung cấp bởi Mobile Media API (MMAPI). Mobile

Media API mở rộng chức năng của nền J2ME bằng cách cung cấp hỗ trợ cho việc

chơi các tập tin âm thanh, hình ảnh cho thiết bị.

Samsung API : SAMSUNG JaUmi Wireless Toolkit cũng hỗ trợ

Samsung API, gói (com.samsung.util). Samsung API cung cấp các chức năng điều

khiển âm thanh, đèn LCD, rung và SMS.

Security Utilities : Chúng ta có thể xác nhận một MIDlet suite bằng chức

năng Signing MIDlet Suite. Công cụ GUI trợ giúp cho việc xác nhận một MIDlet.

Ngoài việc xác nhận, chúng ta có thể tạo ra một cặp khóa, thêm vào một cặp khóa

hay xóa đi một cặp khóa.

Giao thức mạng : MIDP 2.0 hỗ trợ nhiều giao thức mạng. Ngoài HTTP

và HTTPS, chúng ta có thể giám sát các gói dữ liệu (datagram), socket, các thông

điệp bằng secure socket layer (SSL).

Bộ phần mềm dùng để phát triển ứng dụng cho điện thoại Samsung,

SAMSUNG JaUmi Wireless Toolkit có các đặc điểm sau :

Trình giả lập cho các loại điện thoại : D410, E100, E710, P400, P705,

X100.

Một công cụ tương tự với Sun Microsystems' Java 2 Micro Edition

Wireless Toolkit (J2ME Wireless Toolkit) cũng được tích hợp một trình số giả lập

các điện thoại F500i, J300, K300, K500, K600, K700, K750, S700, V800, Z1010,

Z500 and Z800.

Tài liệu về các lớp và phương thức của MIDP 2.0, 1.0 và CLDC 1.1.

Yêu cầu hệ thống :

Phần mềm : o Microsoft Windows 2000

o JavaTM 2 SDK, Standard Edition (J2SE SDK), 1.4 hay mới hơn,

JavaTM 2, Standard Edition Runtime Environment (JRE), 1.4 hay

mới hơn.

Page 161: Ban do tren dien thoai di dong co ho tro java

Phụ lục B : Giới thiệu các chương trình giả lập

144

Để download SDK hay JRE, truy cập vào trang http://java.sun.com/j2se/downloads.html

Phần cứng :

Yêu cầu tối thiểu :

o 50 MB hard disk

o 64 MB system RAM

o 166 MHz CPU

Các thành phần tùy chọn :

o Card âm thanh tương thích SoundBlaster cho Windows.

o Màn hình với độ sâu màu tối thiểu 16 bits.

Samsung E100 Samsung E710

Hình B-4 : Trình giả lập Samsung

Page 162: Ban do tren dien thoai di dong co ho tro java

Phụ lục B : Giới thiệu các chương trình giả lập

145

B.3.4. Nokia :

Nokia Developer’s Suite 2.2 hỗ trợ các lập trình viên tạo ra các ứng dụng

trên nền MIDP 1.0, MIDP 2.0, CLDC 1.0 và 1.1. Phần mềm này có các công cụ hỗ

trợ trong việc tạo ra các lớp MIDlet, tạo và xác nhận các gói ứng dụng (MIDlet

Suite), giả lập và cài đặt ứng dụng.

Phiên bản cài đặt độc lập của Nokia Developer’s Suite 2.2 không bao gồm

các công cụ dùng cho việc soạn thảo, biên dịch và gỡ lỗi phần mềm. Để có những

công cụ này, chúng ta phải dùng những IDE dành cho Java và tích hợp Nokia

Developer’s Suite với các IDE như JBuilder®, Sun™ ONE Studio hay Eclipse.

Yêu cầu cơ bản :

Microsoft Windows 2000 (SP 3) hay Microsoft Windows XP (SP 1a).

Java™ 2 SDK, Standard Edition 1.4.1 hay mới hơn

Tập tin msxml4.dll và msxml4r.dll trong thư mục system của Windows.

Kết nối Internet cho việc đăng ký sử dụng.

Yêu cầu phần cứng :

Bộ xử lý Pentium 300MHz hay nhanh hơn.

RAM tối thiểu là 256 MB.

Đĩa cứng còn trống tối thiểu 210 MB.

Page 163: Ban do tren dien thoai di dong co ho tro java

Phụ lục B : Giới thiệu các chương trình giả lập

146

Hình B-5 : Nokia Developer’s Suite 2.2

Hình B-6 : Trình giả lập của Nokia Developer’s Suite 2.2

Page 164: Ban do tren dien thoai di dong co ho tro java

147

TÀI LIỆU THAM KHẢO

1. Hoàng Kiếm (chủ biên) – Dương Anh Đức – Lê Đình Duy – Vũ Hải Quân,

Cơ sở đồ họa máy tính, 2001

2. Trương Mỹ Dung, Bài giảng Lý thuyết đồ thị, Đại học Khoa học Tự nhiên

TP.HCM, 2002

3. Lê Thụy Anh, chương trình AGDotNet-Desktop

4. Roger Riggs - Antero Taivalsaari - Jim Van Peursem, Programming

Wireless Devices with the Java™ 2 Platform Micro Edition - Second

Edition, Addison Wesley, 2003

5. John W Muchow, Core J2ME™ Technology & MIDP, Prentice Hall PTR,

2001

6. Kim Topley, J2ME in a nutshell, O’Reilly, 2002

7. Sun Microsystems Inc, http://www.sun.com

8. Sun Developer Network, http://developers.sun.com

9. Sony Ericsson, http://www.sonyEricsson.com/developer

10. Nokia, http://forum.nokia.com

11. Siemens, http://www.siemens.com/smtk