Tải bản đầy đủ (.pdf) (54 trang)

Xây dựng từ đỉển anh việt htdict trên nền j2me

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (1.96 MB, 54 trang )

Xây dựng từ điển Anh – Việt HTDict trên nền J2ME

TRƢỜNG ĐẠI HỌC VINH
Khoa công nghệ thông tin
----------------------

XÂY DỰNG TỪ ĐIỂN ANH VIỆT
HTDICT TRÊN NỀN J2ME

Giáo viên hướng dẫn : TS. Phan Lê Na
Sinh viên thực hiện :

Hồ Minh Hiếu

Lớp :

45K - CNTT

Vinh 03/2009

Sinh viên thực hiện: Hồ Minh Hiếu – Lớp 45K - CNTT

1


Xây dựng từ điển Anh – Việt HTDict trên nền J2ME

LỜI CẢM ƠN

Em xin chân thành cảm ơn T.S. Phan Lê Na đã tận tình hướng dẫn, giúp đỡ
em trong quá trình thực hiện đề tài.


Em xin chân thành cảm ơn các thầy cô trong Khoa Công nghệ thông tin đã
tận tình giảng dạy, trang bị cho em những kiến thức quý báu trong những năm học
tập tại trường. Tạo nhiều điều kiện thuận lợi cho em được học tập và thực hiện đề
tài này.
Tôi xin cảm ơn tập thể nhóm lập trình cơng ty VTC-Online tạo điều kiện
thuận lợi, hỗ trợ rất nhiều trong quá trình thực tập. Xin chân thành cảm ơn bạn bè
đã tận tình giúp đỡ ủng hộ trong quá trình thực hiện đồ án.
Mặc dù đã cố gắng hồn thành khố luận trong phạm vi và khả năng cho
phép nhưng chắc chắn sẽ không tránh khỏi những thiếu sót. Em rất mong nhận
được sự cảm thơng, góp ý và tận tình chỉ bảo của các thầy cô trong Khoa và các
bạn.

Sinh viên thực hiện: Hồ Minh Hiếu – Lớp 45K - CNTT

2


Xây dựng từ điển Anh – Việt HTDict trên nền J2ME

MỞ ĐẦU ---------------------------------------------------------------------------------------------- 5
CHƢƠNG I CẤU TRÚC J2ME ----------------------------------------------------------------- 9

1.1 Giới thiệu về Java --------------------------------------------------------------- 9
1.2 Cấu trúc J2ME ------------------------------------------------------------------ 9
1.2.1 Giới thiệu về J2ME --------------------------------------------------------------9
1.2.2 Định nghĩa về Configuration (Cấu hình) ----------------------------------- 10
1.3 Sự khác biệt giữa J2ME và J2SE--------------------------------------------- 15
1.3.1 Sự khác biệt--------------------------------------------------------------------- 15
1.3.2 Các lớp trong J2ME kế thừa từ J2SE --------------------------------------- 16
1.4 Cấu trúc MIDP ---------------------------------------------------------------- 17

1.4.1 Định nghĩa ---------------------------------------------------------------------- 17
1.4.2 Những hạn chế của MIDP ---------------------------------------------------- 17
1.4.3 Những chức năng MIDP ------------------------------------------------------ 18
1.4.4 File lưu trữ JAR ---------------------------------------------------------------- 19
1.4.5 Tập tin Manifest và Bộ mô tả ứng dụng JAD ------------------------------ 20
1.4.6 Vòng đời của một MIDP------------------------------------------------------ 20
CHƢƠNG II MƠI TRƢỜNG LẬP TRÌNH ------------------------------------------------ 22

2.1 Mơi trường lập trình ---------------------------------------------------------- 22
2.1.1 Quá trình phát triển ứng dụng J2ME ---------------------------------------- 22
2.1.2 Các IDE thường dùng trong lập trình J2ME ------------------------------- 22
2.1.3 Cơng cụ thực hiện ------------------------------------------------------------- 25
2.1.4 Thiết lập môi trường----------------------------------------------------------- 25
2.1.5 Ứng dụng khi sử dụng NetBeans -------------------------------------------- 25
2.2 Một số vấn đề lưu ý ----------------------------------------------------------- 31
CHƢƠNG III KỸ THUẬT XỬ LÝ DỮ LIỆU XÂY DỰNG TỪ ĐIỂN -------------- 32

3.1 Tổ chức cấu trúc dữ liệu lưu trữ --------------------------------------------- 32
3.1.1 Cấu trúc tệp tin CSV (Comma-separated Values)------------------------- 32
3.1.2 Tổ chức cấu trúc dữ liệu lưu trữ --------------------------------------------- 33
3.2 Sắp xếp các mục từ ----------------------------------------------------------- 33
3.3 Tổ chức cấu trúc dữ liệu hỗ trợ tìm kiếm nhanh ---------------------------- 33
3.3.1 Tập tin tuần tự ------------------------------------------------------------------ 33
3.3.2 Tập tin chỉ mục ----------------------------------------------------------------- 33
3.3.3 Tập tin băm --------------------------------------------------------------------- 33
3.3.4 Cây nhị phân ------------------------------------------------------------------- 34
3.4 Kỹ thuật xử lý dữ liệu trong từ điển HTDict --------------------------------- 34
3.4.1 Hiển thị Font chữ Tiếng Việt ------------------------------------------------- 35
3.4.2 Kỹ thuật xử lý trong ứng dụng ----------------------------------------------- 36


Sinh viên thực hiện: Hồ Minh Hiếu – Lớp 45K - CNTT

3


Xây dựng từ điển Anh – Việt HTDict trên nền J2ME

CHƢƠNG IV PHÂN TÍCH THIẾT KẾ XÂY DỰNG TỪ ĐIỂN ---------------------- 38

4.1 Giới thiệu ---------------------------------------------------------------------- 38
4.2 Mơ hình Use-Case ------------------------------------------------------------ 38
4.2.1 Mơ hình Use-Case ------------------------------------------------------------- 38
4.2.2 Đặc tả Use-Case --------------------------------------------------------------- 39
4.3 Mơ hình lớp ------------------------------------------------------------------- 41
4.3.1 Lớp HTDict --------------------------------------------------------------------- 41
4.3.2 Lớp Dictionary ---------------------------------------------------------------- 42
4.3.3 Lớp Dict ------------------------------------------------------------------------ 44
4.4 Cài đặt và thực nghiệm ------------------------------------------------------- 45
4.4.1 Môi trường phát triển---------------------------------------------------------- 45
4.4.2 Cài đặt --------------------------------------------------------------------------- 46
4.4.3 Kết quả thử nghiệm ------------------------------------------------------------ 46
4.5 Mơ tả giao diện ứng dụng ---------------------------------------------------- 46
4.5.1 Màn hình HTDict -------------------------------------------------------------- 48
4.5.2 Màn hình Menu chính --------------------------------------------------------- 48
4.5.3 Màn hình Dictionary ---------------------------------------------------------- 49
4.5.4 Màn hình Dictionary English – Vietnamese ------------------------------- 49
4.5.5 Màn hình Dictionary Vietnamese – English ------------------------------- 50
4.5.6 Màn hình hiển thị nhập các từ cần tra --------------------------------------- 50
4.5.7 Màn hình hiển thị nghĩa từ cần tra ------------------------------------------- 51
4.5.8 Màn hình hiển thị nghĩa từ tiếp theo từ cần tra ---------------------------- 51

4.5.9 Màn hình hiển thị nghĩa từ trước đó của từ cần tra ----------------------- 52
TỔNG KẾT----------------------------------------------------------------------------------------- 53

Hướng phát triển ----------------------------------------------------------------------- 53
TÀI LIỆU THAM KHẢO ----------------------------------------------------------------------- 54

Sinh viên thực hiện: Hồ Minh Hiếu – Lớp 45K - CNTT

4


Xây dựng từ điển Anh – Việt HTDict trên nền J2ME

MỞ ĐẦU
 Lý do chọn đề tài
Trong cuộc sống, nhu cầu liên lạc, cập nhật thông tin là hết sức cần thiết.
Hiện nay có rất nhiều phương pháp liên lạc khác nhau như thư điện tử, điện thoại
để bàn, điện thoại di động, kết nối Wi-fi, WiMax… Trong đó điện thoại di động
nổi bật với sự tiện lợi, hữu ích. Nhờ chức năng đàm thoại trực tiếp mọi lúc mọi
nơi, mà điện thoại di động ngày càng được sử dụng rộng rãi. Điện thoại di động là
thiết bị phát triển nhanh chóng nhất cả về cơng nghệ lẫn tính năng, ứng dụng.
Năm 2007 Công ty Apple đưa ra sản phẩm iphone. Ngay lập tức sản phẩm
này đã tạo ra một tiếng vang lớn và làm tốn không biết bao nhiêu giấy mực của
các tờ báo đặc biệt là các tờ báo công nghệ và các website công nghệ bởi thiết kế
đẹp mắt và nhiều tính năng. Iphone với các đặc điểm màn hình cảm ứng cực rộng,
kết nối Wi-Fi, camera 5.0, và trình duyệt web hồn chỉnh là hiện thân của thế hệ
điện thoại mới. Thế hệ điện thoại mới này đã trở thành một thiết bị giải trí đa tính
năng với sức mạnh của một chiếc PC.
Bên cạnh đó, nhu cầu về học ngoại ngữ ngày càng trở nên quan trọng.
Trong học ngoại ngữ để biết nghĩa của một từ là rất cần thiết. Tuy nhiên không

phải lúc nào chúng ta cũng mang theo một quyển từ điển hoặc máy tính xác tay để
tra từ. Chính vì lý do đó, việc có một cuốn từ điển Anh-Việt cài đặt trong điện
thoại di động là rất hữu dụng.
Ngoài ra với việc Sun cam kết để J2ME trở thành một chuẩn cho các nhà
sản xuất thiết bị di động thì việt phát triển các ứng dụng trên nền J2ME là hết sức
dễ dàng.
Chính vì những lý do trên mà em quyết định thực hiện đề tài Xây dựng từ
điển Anh-Việt HTDict trên nền J2ME.

 Phạm vi đề tài
Nghiên cứu công nghệ J2ME và tìm hiểu các kỹ thuật xử lý cấu trúc dữ liệu
trong ứng dụng từ điển.
Tiến hành xây dựng từ điển Anh-Việt HTDict.


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

Sinh viên thực hiện: Hồ Minh Hiếu – Lớp 45K - CNTT

5


Xây dựng từ điển Anh – Việt HTDict trên nền J2ME
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 Á, là một trong những thị trường sôi động
nhất trong tồn vùng Châu Á-Thái Bình Dương. Ở những thành phố lớn hiện nay
thì hiện tượng “nhà nhà di động, người người di động” là chuyện phổ biến. Tuy
rầm rộ như thế nhưng so với các nước trong khu vực, thị trường nước ta còn khá
non trẻ.
Theo thống kê năm 2006 cho biết tỉ lệ thuê bao điện thoại di động trên tổng

dân số ở Việt Nam chỉ là 20% trong khi Philippin là 40%, Thái Lan 50%,
Malaysia 80% và Singapore 106% (nhiều người có 2 hay 3 máy). Do vậy tiềm
năng tăng trưởng của thị trường điện thoại di động Việt Nam còn rất lớn (theo
vietnamnet.vn).
Đầu năm 2000, tổng số thuê bao điện thoại di động tại thị trường Việt Nam
chỉ vỏn vẹn đạt mức 0,3 triệu. Nhưng chỉ 6 năm sau cả nước đã có hơn 20 triệu
thuê bao. Theo thông tin công bố của các nhà cung cấp dịch vụ di động, số thuê
bao điện thoại di động đạt tới xấp xỉ 50 triệu vào cuối năm 2008.
Có hơn 20 hãng điện thoại đã và đang cạnh tranh khốc liệt trên thị trường
Việt Nam với các tên tuổi lớn như Nokia, SamSung, Motorola, Sony Ericsson,
Siemens… Doanh số thị trường bán lẻ điện thoại di động Việt Nam năm 2006 xấp
xỉ 900 triệu USD, tăng hơn 40% so với năm 2005.
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.

 Nhu cầu về phát triển phầm 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 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 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ộ của

Sinh viên thực hiện: Hồ Minh Hiếu – Lớp 45K - CNTT

6



Xây dựng từ điển Anh – Việt HTDict trên nền J2ME
khoa học kỹ thuật, chiếc điện thoại ngày càng có nhiều tính năng mới, đa dạng
hơn, tiến bộ hơn và hiện đại hơn.
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 di động 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à ứng dụng. Đặc biệt, bằng
cách cho phép lập trình viên viết thêm 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 đã trở thành một cơng cụ làm việc, học
tập, giải trí hữu ích 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 nhu cầu của người sử dụng, trong đó, phần nhiều là các trị chơi, truy cập
Internet, trình diệt virus, soạn thảo văn bản, từ điển… 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 (theo www.vietnamnet.vn).

 Các thành phần phần cứng của điện thoại di động
Điện thoại di động ngoài chức năng nghe gọi ra giờ đây cịn nhiều chức
năng giải trí khác. Song thành phần chính vẫn bao gồm CPU, Bộ nhớ, các thiết bị
nhập xuất (I/O) và nguồn năng lượng.
CPU: CPU có kiếm trúc 32 bit, chạy ở tốc độ dưới 100MHz. Trong tương
lai tốc độ này sẽ được cải thiện hơn.
Bộ nhớ : Tối thiểu 32Kb bộ nhớ RAM, 128Kb bộ nhớ ROM để lưu dữ liệu
chương trình. Một số dịng máy điện thoại có hệ điều hành có thể có cấu hình cao
hơn. Đối với ứng dụng từ điển Anh-Việt này bộ nhớ ROM tối thiểu 10Mb.
Thiết bị vào ra (I/O):
 Màn hình có kích thước khác nhau tuỳ dịng điện thoại, có thể có màn
hình cảm ứng.
 Khe cắm thẻ nhớ
 Các cổng giao tiếp hồng ngoại và Bluetooth..

Nguồn năng lƣợng: sử dụng pin đặc thù có thể sạc được.

Sinh viên thực hiện: Hồ Minh Hiếu – Lớp 45K - CNTT

7


Xây dựng từ điển Anh – Việt HTDict trên nền J2ME

 Hạn chế của các thiết bị di động
Mặc dù điện thoại có ưu điểm là thiết bị nhỏ gọn nhưng cũng đồng thời hạn
chế về tốc độ xử lý, độ rộng màn hình, hạn chế về thiết bị vào ra. Do đó việc lập
trình các phần mềm cho thiết bị di động cũng có sự khác biệt lớn so với việc phát
triển các ứng dụng trên nền Desktop.

 Mục tiêu của đề tài
Do điện thoại có bộ xử lý cũng như tài nguyên hạn chế so với máy tính để
bàn. Ngồi ra việc lập trình cho thiết bị do động cũng khác biệt so với lập trình
trên máy tính. Với đề tài này, các vấn đề chính bao gồm:


Tìm hiểu về cấu trúc J2ME, sự khác biệt so với môi trường J2EE và



Nghiên cứu, xây dựng cấu trúc dữ liệu từ điển cho từ điển Anh-Việt



Xây dựng hoàn chỉnh ứng dụng từ điển trên điện thoại di động


J2SE

 Nội dung thực hiện
Mở đầu: Trình bày lý do thực hiện đề tài và mục tiêu của đề tài, giới thiệu
tổng quan về các thiết bị di động.
Chƣơng I Cấu trúc J2ME: Trình bày cấu trúc của J2ME so sánh giữa
J2ME và J2EE, J2SE.
Chƣơng II Mơi trƣờng lập trình: Trình bày mơi trường lập trình các IDE.
Chƣơng III Kỹ thuật xử lý dữ liệu xây dựng từ điển : Trình bày về tổ chức
cấu trúc dữ liệu, trình bày kỹ thuật xử lý dữ liệu xây dựng từ điển HTDict.
Chƣơng IV Phân tích thiết kế ứng dụng: Trình bày mơ hình thiết kế ứng
dụng HTDict, cài đặt và chạy thử chương trình.
Tổng kết: Trình bày kết quả đạt được, hướng phát triển trong tương lai.

Sinh viên thực hiện: Hồ Minh Hiếu – Lớp 45K - CNTT

8


Xây dựng từ điển Anh – Việt HTDict trên nền J2ME

CHƢƠNG I CẤU TRÚC J2ME
1.1 Giới thiệu về Java
Công nghệ di động ngày càng phát triển. Chiếc điện thoại di động hiện nay
khơng cịn đơn giãn thực hiện nhiệm vụ thoại mà ngày càng trở thành một trợ lý
không thể thiếu và còn là thiết bị phục vụ cho nhu cầu giải trí. Cơng nghệ Java là
cơng nghệ đi tiên phong trong việc xâm nhập vào lĩnh vực di động. Nếu có một
chiếc điện thoại di động hỗ trợ Java, ta có thể chơi Game, chạy các ứng dụng viết
bằng Java.

Vào những năm 1990, Java được ra đời từ dự án xanh (green project) và
ban đầu được xây dựng để kiểm soát các thiết bị dân dụng như TV, đèn, điện thoại
và một số thiết bị cầm tay. Java được xây dựng chủ yếu dựa trên bộ công cụ phát
triển (Java Development Kit -JDK) . Đây chính là nền tảng cho việc phát triển ứng
dụng Java. Với sự phát triển của Java hiện nay, các nhà phát triển (Nokia, Sun, …)
đã xây dựng nhiều nhánh mới cho Java như: JavaMail, Java TAPI (cho viễn
thông), Java3D (đồ hoạ 3 chiều), J2ME (ứng dụng cho thiết bị di động)… Java có
các phiên bản sau:
J2EE (Java 2 Platform, enterprise Edition): phiên bản dành cho máy chủ
lớn với sức mạnh xử lý và dung lượng bộ nhớ lớn
J2SE (Java 2 Platform, Standard Edition): phiên bản chuẩn chạy trên các
máy PC và laptop với một số MB bộ nhớ. Các máy tính này mặc dù khơng có cấu
hình mạnh bằng máy chủ nhưng vẫn mạnh hơn nhiều so với các thiết bị di động.
J2ME (Java 2 Platform, Micro Edition): là phiên bản rút gọn của Java cho
thiết bị di động giới hạn về bộ nhớ và tốc độ xử lý.

1.2 Cấu trúc J2ME
1.2.1 Giới thiệu về J2ME
J2ME được phát triển từ kiến trúc Java Card, Embeded Java và Personal
Java của phiên bản Java 1.1. Đến sự ra đời của Java 2 thì Sun quyết định thay thế
Personal Java và được gọi với tên Java Micro Edition, hay viết tắt là J2ME. Đúng
với tên gọi, J2ME là nền tảng cho thiết bị có tính chất nhỏ, gọn.

Sinh viên thực hiện: Hồ Minh Hiếu – Lớp 45K - CNTT

9


Xây dựng từ điển Anh – Việt HTDict trên nền J2ME
Với sự cam kết của hãng Sun, J2ME sẽ trở thành chuẩn chung cho các nhà

sản xuất phần cứng thiết bị di động.
Mục tiêu của J2ME là cho phép người lập trình viết các ứng dụng độc lập
với thiết bị di động, không cần quan tâm đến phần cứng. Để đạt được mục tiêu
này, J2ME được xây dựng bằng các tầng (layer) khác nhau để giấu đi việc thực
hiện phần cứng khỏi nhà phát triển.

Hình 1.1

Các thành phần trong nền tảng Java

1.2.2 Định nghĩa về Configuration (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.
Do đây là đặc tả nên 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 đặc tả do Sun qui định để các lập trình viên có thể
dựa vào mơi trường lập trình nhất 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ể.
Ví dụ như một lập trình viên viết chương trình game cho điện thoại
Samsung thì có thể sửa đổi chương trì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 Everywhere”

Sinh viên thực hiện: Hồ Minh Hiếu – Lớp 45K - CNTT

10


Xây dựng từ điển Anh – Việt HTDict trên nền J2ME
của Java đã khơng cịn đúng nữa, như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: CLDC và CDC.

a ) CLDC (Connected Limited Device Configuration)
Cấu hình thiết bị kết nối giới hạn: đượ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 điện thọai di
động và PDA với khoảng 512 KB bộ nhớ.
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)
Cấu hình thiết bị kết nối: 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. Những thiết bị này có nhiều bộ nhớ hơn (thơng thường là
trên 2Mb) và có bộ xử lý mạnh hơn. Các sản phẩm này có thể kể đến như các máy
PDA cấp cao, điện thoại web, các thiết bị gia dụng trong gia đình …
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, cần chú ý đố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 u cầu các phép tính tốn dấu phẩy động, nên máy ảo thuộc CLDC
không được hỗ trợ kiểu float và double.

Sinh viên thực hiện: Hồ Minh Hiếu – Lớp 45K - CNTT

11



Xây dựng từ điển Anh – Việt HTDict trên nền J2ME

c) Sự khác nhau giữa 2 khái niệm CLDC và CDC

Hình 1.2

Phân tầng thiết bị giữa CDC và CLDC

Thơng số

CLDC

CDC

Ram

>=32K, <=512K

>=2M

Rom

>=128k, <=512k

>=2.5M

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 1.1

Bảng so sánh thông số giữa CLDC và CDC

Sinh viên thực hiện: Hồ Minh Hiếu – Lớp 45K - CNTT

12


Xây dựng từ điển Anh – Việt HTDict trên nền J2ME

d) Chi tiết về CLDC

Hình 1.3

Các tầng của CLDC J2ME

Mỗi tầng ở trên tầng phần cứng là tầng trừu tượng hơn cung cấp cho lập
trình viên nhiều giao diện lập trình ứng dụng (API-Application Program Interface)
thân thiện hơn.
Tầng phần cứng thiết bị (Device Hardware Layer): Đây là thiết bị di
động thật sự với cấu hình phần cứng (bộ nhớ và tốc độ xử lý) cụ thể. Các thiết bị

di động có thể có bộ vi xử lý khác nhau và các tập lệnh khác nhau. Mục tiêu của
J2ME là cung cấp một chuẩn cho tất cả các loại thiết bị di động khác nhau.
Tầng máy ảo Java (Java Virtual Machine Layer): Khi mã nguồn được
biên dịch nó được chuyển đổi thành mã byteCode. Mã byteCode này sau đó được
chuyển thành mã ngôn ngữ máy của thiết bị di động. Tầng máy ảo bao gồm KVM
(K Virtual Machine) là bộ biên dịch mã byteCode có nhiệm vụ chuyển mã
byteCode của chương trình Java thành ngơn ngữ máy để chạy trên các thiết bị di
động. Tầng này cung cấp một sự chuẩn hoá cho các thiết bị di động để chạy ứng
dụng J2ME sau khi đã biên dịch có thể chạy trên bất kỳ một thiết bị di động nào có
hỗ trợ J2ME KVM.
Tầng cấu hình (configuration Layer): Cung cấp các hàm API cơ bản là
nhân của J2ME. Lập trình viên có thể sử dụng các lớp và các phương thức của các
API này tuy nhiên tập các API hữu dụng hơn được chứa trong tầng hiện trạng
(profile layer).

Sinh viên thực hiện: Hồ Minh Hiếu – Lớp 45K - CNTT

13


Xây dựng từ điển Anh – Việt HTDict trên nền J2ME
Tầng hiện trạng (profile Layer): Profile mở rộng Configuration bằng
cách thêm vào các lớp để bổ trợ các tính năng cho từng thiết bị chuyên biệt. Cả 2
Configuration đều có những profile liên quan và từ những profile này có thể dùng
các lớp lẫn nhau.
Đến đây ta có thể nhận thấy do mỗi profile định nghĩa một tập hợp các class
khác nhau, nên thường 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. Các profile tiêu biểu:

- Mobile Information Device Profile (MIDP): Profile sẽ bổ sung các tính năng
như hỗ trợ kết nối, các thành phần hỗ trợ giao diện người dùng vào CLDC. Profile
này được thiết kế chủ yếu để nhắm vào điện thoại di động với đặc tính là màn hình
hiển thị hạn chế, dung lượng chứa có hạn. Do đó MIDP sẽ cung cấp một giao diện
người dùng đơn giãn và các tính năng mạng đơn giãn dựa trên HTTP. Có thể nói
MIDP là profile nổi tiếng nhất bởi vì nó là kiến thức cơ bản cho lập trình Java trên
các máy di động (Wireless Java).
- PDA Profile: Tương tự MIDP, nhưng với thị trường là các máy PDA với màn
hình và bộ nhớ lớn hơn.

- Foundation Profile: Cho phép mở rộng các tính năng của CDC với phần lớn
các thư viện của bộ Core Java2 1.3 và không hỗ trợ các ứng dụng GUI.

- Personal profile: Mở rộng từ Foundation profile và cung cấp các API cho lập
trình GUI nhằm cung cấp giao diện đồ hoạ người dùng cho các trang Web có dùng
Applet.
- RMI profile: Mở rộng từ Foundation prrofile cung cấp RMI cho thiết bị. RMI
profile sẽ được dùng để tạo sự tương thích giữa các thiết bị cầm tay với J2SE RMI
API.
Ngồi ra cịn có Personal Basis Profile, Game Profile.

Sinh viên thực hiện: Hồ Minh Hiếu – Lớp 45K - CNTT

14


Xây dựng từ điển Anh – Việt HTDict trên nền J2ME

Hình 1.4


Vị trí các profile trong J2ME

1.3 Sự khác biệt giữa J2ME và J2SE
1.3.1 Sự khác biệt
Giữa J2SE và J2ME có các điểm khác nhau là do 2 nguyên nhân. Do lớp
Java đã bị bỏ đi để giảm kích thước của J2ME hoặc do lớp bị bỏ bởi vì nó ảnh
hưởng đến sự an toàn, bảo mật của thiết bị di động hay của các ứng dụng khác trên
thiết bị di động (có thể dẫn đến phát sinh virus).
Điểm khác biệt chính là J2ME khơng có phép tốn số thực. Khơng có JNI
(JavaNative Interface Support) do đó khơng thể truy xuất các chương trình khác
được viết bằng ngơn ngữ của thiết bị (như C hay C++). Đa tuyến (thread) được
cho phép nhưng khơng có các nhóm đa tuyến (thread group) và các daemon
thread.
CLDC định nghĩa một mơ hình an tồn, bảo mật được thiết kế để bảo vệ
thiết bị di động, KVM và các ứng dụng khác khỏi các mã phá hoại.

Hình 1.5

Mối quan hệ giữa J2SE, CDC, CLDC

Sinh viên thực hiện: Hồ Minh Hiếu – Lớp 45K - CNTT

15


Xây dựng từ điển Anh – Việt HTDict trên nền J2ME

1.3.2 Các lớp trong J2ME kế thừa từ J2SE
 Các lớp hệ thống
Java.lang.Class

Java.lang.Object
Java.lang.Runnable (interface)
Java.lang.Runtime
Java.lang.String
Java.lang.StringBuffer
Java.lang.System
Java.lang.Thread
Java.lang.Throwable
 Các lớp thuộc kiểu dữ liệu
Java.lang.Boolean
java.lang.Byte
java.lang.Charater
java.lang.Integer
java.lang.Long
java.lang.Short
 Các lớp Collections
java.util.enumeration (interface)
java.util.Hashtable
java.util.Stack
java.util.Vector
 Các lớp nhập/xuất
java.io.ByteArrayInputStream
java.io.ByteArrayOutputStream
java.io.DataInputStream
java.io.DataOutputStream
java.io.InputStream
java.io.InputStreamReader

Sinh viên thực hiện: Hồ Minh Hiếu – Lớp 45K - CNTT


16


Xây dựng từ điển Anh – Việt HTDict trên nền J2ME
java.io.OutputStream
java.io.OutputStreamReader
java.io.PrintStream
java.io.Reader
java.io.Writer
 Lớp về thời gian
java.util.Calendar
java.util.Date
java.util.TimeZone
 Lớp tiện ích
java.lang.Math
java.util.RanDom
 Lớp Internatonalization
java.io.InputStreamReader
java.io.OutputStreamReader

1.4 Cấu trúc MIDP
1.4.1 Định nghĩa
MIDP 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 không phải là tất cả cho mọi lập trình viên vì như chúng ta
đã biết, MIDP được thiết kế cho các máy di động có cấu hình rất thấp. Trong phần
sau sẽ liệt kê qua các tính năng mà MIDP cung cấp và những giới hạn của nó.

1.4.2 Những hạn chế của MIDP

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

Sinh viên thực hiện: Hồ Minh Hiếu – Lớp 45K - CNTT

17


Xây dựng từ điển Anh – Việt HTDict trên nền J2ME
 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: Thực tế 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à 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.

1.4.3 Những chức năng MIDP
 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ó
những đời điện thoại hỗ trợ MIDP 2.0 ví dụ như Nokia 6600 hay Sony Ericsson
P900,…).
 Nâng cấp các tính năng bảo mật như
- Download qua mạng an toàn hơn qua việc hỗ trợ giao thức HTTPS.
- 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.

Sinh viên thực hiện: Hồ Minh Hiếu – Lớp 45K - CNTT

18


Xây dựng từ điển Anh – Việt HTDict trên nền J2ME
 Thêm các API hỗ trợ Multimedia. Một trong nhưng cải tiến hấp dẫn nhất
của MIDP 2.0 là tập các API media của nó. Các API này là một tập con chỉ hỗ trợ
âm thanh của Mobile Media API (MMAPI).
 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ự viết code để quản lý các 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.

1.4.4 File lƣu trữ JAR
Tất cả các lớp được biên dịch và các file cần thiết cho việc thực thi ứng
dụng MIDlet phải được đóng gói trong một tệp tin JAR (Java archive). File này
bao gồm các lớp của MIDLet, các file hình ảnh (hiện tại MIDP chỉ hỗ trợ định
dạng hình ảnh .png), file dữ liệu ứng dụng và file manifest (tập tin thống kê). File
manifest này mơ tả nội dung của file JAR trong đó có chứa danh sách các thuộc
tính.

Sinh viên thực hiện: Hồ Minh Hiếu – Lớp 45K - CNTT

19


Xây dựng từ điển Anh – Việt HTDict trên nền J2ME

1.4.5 Tập tin Manifest và Bộ mô tả ứng dụng JAD
Tập tin menifest và tập tin JAD (bộ mô tả JAD) mô tả đặc điểm của
MIDlet. Sự khác biệt giữa hai tập tin này là tập tin kê khai (manifest) là một phần
của tập tin JAR còn tập tin JAD thì khơng thuộc tập tin JAR.

Nội dung tập tin manifest:
Thuộc tính file Manifest mơ tả
MIDlet-Name

tên MIDlet

MIDlet-Version

phiên bản của MIDlet

MIDlet-Vendor

tên nhà cung cấp MIDlet

MIDlet-n

tên tương ứng với từng MIDlet.Giá trị có thể là
tên MIDlet hoặc Biểu tượng tuỳ chọn, tên lớp
MIDlet

MicroEdition- Profile

phiên bản profile J2ME cần thiết để chạy

MIDlet.
MicroEdition-Configuration

Định danh cấu hình J2ME cần thiết để

chạy MIDlet.

MIDlet-Icon

Icon kết hợp với MIDlet, phải ở định dang

MIDlet-Description

Mơ tả về MIDlet.

PNG.
Ví dụ một tập tin manifest.mf
Manifest-Version: 1.0
MicroEdition-Configuration: CLDC-1.1
MIDlet-Name: HTDict Midlet Suite
MIDlet-Vendor: Midlet Suite Vendor
MIDlet-1: HTDict,/icon.png,HTDict
MIDlet-Version: 1.0.0
MicroEdition-Profile: MIDP-2.0

1.4.6 Vòng đời của một MIDP
Một MIDlet phải chứa ba phương thức trừu tượng chúng được gọi bởi trình
quản lý ứng dụng để quản lý vịng đời của một MIDlet. Các phương thức gồm có:

Sinh viên thực hiện: Hồ Minh Hiếu – Lớp 45K - CNTT

20


Xây dựng từ điển Anh – Việt HTDict trên nền J2ME
DictionaryApp( ), pauseApp( ) và destroyApp(boolean b) tương ứng với các trạng
thái Active, Paused và Destroyed.

Phương thức DictionaryApp( ) được trình quản lý ứng dụng gọi khi một
MIDlet được khởi tạo và mỗi khi MIDlet trở về trạng thái dùng. Các biến toàn cục
sẽ được khởi tạo lại trừ hàm tạo vì các biến này đều được giải phóng bởi phương
thức pauseApp( ).
Phương thức pauseApp( ) được gọi bởi trình quản lý ứng dụng mỗi khi ứng
dụng cần tạm thời dừng hoạt động MIDlet. Trình quản lý ứng dụng khởi động lại
MIDlet bằng việc gọi lại phương thức DictionaryApp( ). Khi phương thức này
được gọi sẽ thực hiện giải phóng các tài nguyên để dành cho các chức năng khác.
Phương thức destroyApp( ) được trình quản lý ứng dụng gọi mỗi khi kết
thúc hoạt động của một MIDlet. Phương thức này chỉ nhận một tham số kiểu
Boolean. Nếu tham số này là true, MIDlet sẽ được thốt vơ điều kiện; ngược lại
MIDlet có thêm tuỳ chọn từ chối thốt bằng cách phát sinh ngoại lệ
MIDletStateChangeException báo với trình quản lý ứng dụng biết MIDlet chưa
muốn kết thúc.
Chu kỳ của một MIDlet

Hình 1.6

Vịng đời một MIDlet

Sinh viên thực hiện: Hồ Minh Hiếu – Lớp 45K - CNTT

21


Xây dựng từ điển Anh – Việt HTDict trên nền J2ME

CHƢƠNG II MƠI TRƢỜNG LẬP TRÌNH
2.1 Mơi trƣờng lập trình
2.1.1 Q 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:
 Viết mã nguồn
 Biên dịch
 Obfuscate (tuỳ chọn)
Obfuscate sẽ loại bỏ các thông tin không cần thiết trong các lớp, 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 sẽ đượ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 bị dịch ngược. Ngồ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 kích thước tập tin JAR giảm xuống.
Việc giảm kích thước rất có ý nghĩa bởi các thiết bị di động thường có bộ nhớ giới
hạn.

2.1.2 Các IDE thƣờng dùng trong lập trình J2ME
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 đồ
hoạ, công cụ hỗ trợ soạn thoả, quản lý project, biên dịch và gỡ lỗi.
Thành viên mới nhất trong gia đình Java là J2ME. Khi nhiều chun gia dự
đố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:
 Quản lý project: Quản lý các tập tin và các thông số MIDlet
 Trình soạn thảo: Soạn thảo mã nguồn và các tài nguyên
 Biên dich: Biên dịch, obfuscate và pre-verify mã nguồn
 Đóng gói (package): Đóng gói các MIDlet các file tài nguyên thành các tập
tin JAR và JAD

Sinh viên thực hiện: Hồ Minh Hiếu – Lớp 45K - CNTT


22


Xây dựng từ điển Anh – Việt HTDict trên nền J2ME
 Trình giả lập (emulator): Thực thi các MIDlet với một trình giả lập
 Gỡ rối (debugger).
Phần này sẽ đề cập đến một vài IDE thông dụng để phát triển J2ME trong
đó bao gồm: J2ME Wireless Toolkit, Borland Jbuilder, NetBean.

a) J2ME Wireless Toolkit
J2ME WireLess Toolkit (WTK) là một bộ công cụ do Sun phát triển. Nó
cung cấp giúp 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 hồn
chỉnh, bởi nó đã bỏ đi tính năng soạn thảo và gỡ rối thành phần không thể thiếu
của 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 giao diện 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.5.2 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.
WTK 2.5.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)
 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. Khi project
được tạo, cấu trúc thư mục sẽ được tạo. Ngoài ra các tập tin JAD và 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

Sinh viên thực hiện: Hồ Minh Hiếu – Lớp 45K - CNTT

23


Xây dựng từ điển Anh – Việt HTDict trên nền J2ME
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 (Graphical User Interface).
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 trong một bước thực hiện.
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 hỗ trợ:
 DefaultColorPhone: Điện thoại mặc định với màn hình màu.
 DefaultGrayPhone: Điện thoại với màn hình xám
 MediaControlSkin: Điện thoại màn hình màu
 QwertyDevice: Điện thoại với bàn phím Qwerty.

b) Borland Jbuilder
Mơi trường phát triển làm việc của Jbuilder cho J2ME hoàn tồ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 hộp thoại để hỗ trợ J2ME và hai wizard mới: MIDP MIDlet wizard
và MIDP Displayable wizard. Trong 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.

Ngồ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:
 Gõ mã cho các lớp CLDC/MIDP
 Duyệt các lớp, các gói cho các lớp CLDC/MIDP
 Chuyển đổi giữa các JDK
 Tạo các MIDP tự động
 Dùng bộ thiết kế trực quan
 Công cụ gỡ rối
 Đóng gói file JAD và JAR

Sinh viên thực hiện: Hồ Minh Hiếu – Lớp 45K - CNTT

24


Xây dựng từ điển Anh – Việt HTDict trên nền J2ME

c) NetBeans
Đây là một IDE mã nguồn mở dùng cho lập trình Java; cùng với EclipseME
và J2ME Wireless Toolkit tạo thành một bộ IDE hoàn chỉnh cho việc phát triển
các ứng dụng J2ME.

2.1.3 Công cụ thực hiện
Đề tài được thực hiện trên mơi trường Windows XP.
Cơng cụ lập trình:

NetBean 6.1.
J2ME Wireless toolkit 2.5.2.

2.1.4 Thiết lập môi trƣờng

Cài đặt bộ NetBeans: Có thể download tại trang Web www.netbeans.org
đây là IDE hỗ trợ cho việc lập trình Java trên Desktop.

Cài đặt J2ME Wireless Toolkit 2.5.2: Có thể lấy bộ cơng cụ này về từ địa
chỉ java.sun.com/products/j2mewtoolkit/.

2.1.5 Ứng dụng khi sử dụng NetBeans
a) Giao diện NetBeans

Hình 2.1

Giao diện NetBeans

Sinh viên thực hiện: Hồ Minh Hiếu – Lớp 45K - CNTT

25


×