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

Tìm hiểu và lập trình trên hệ điều hành Android

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 (2.34 MB, 41 trang )

Tìm hiu và lp trình ng dng trên h điu hành Android GVHD: Th.s H Quang Khi

Sinh viên: Trn ng Khoa – Nguyn Minh Tâm Khoa: Công Ngh Thông Tin
Trang 1
B GIÁO DC VÀ ÀO TO
TRNG I HC M THÀNH PH H CHÍ MINH
KHOA CÔNG NGH THÔNG TIN







 ÁN MÔN HC


 TÀI:

T
T
Ì
Ì
M
M


H
H
I
I




U
U


V
V
À
À


L
L


P
P


T
T
R
R
Ì
Ì
N
N
H
H



T
T
R
R
Ê
Ê
N
N


H
H






I
I


U
U


H
H

À
À
N
N
H
H


A
A
N
N
D
D
R
R
O
O
I
I
D
D
.
.













Giáo viên hng dn : Thc s H Quang Khi
Thi gian thc hin : 21.11.2011 – 15.02.2012
Sinh viên thc hin : Trn ng Khoa – MSSV: 0851010134
T: 0979 890 254
Nguyn Minh Tâm – MSSV: 0851010227
T: 0168 2952 264
Lp: TH08B2
Khóa: 2008 – 2012









THÁNG 02 NM 2012
Tìm hiu và lp trình ng dng trên h điu hành Android GVHD: Th.s H Quang Khi

Sinh viên: Trn ng Khoa – Nguyn Minh Tâm Khoa: Công Ngh Thông Tin
Trang 2
LI CM N


Chúng em xin chân thành cm n Ban Giám Hiu và các Thy cô Trng i
Hc M Thành Ph H Chí Minh đã ch dn chúng em trong nhng tháng nm hc
tp ti trng, cng nh là cung cp nhng kin thc cn thit trong khong thi gian
chúng em thc hin đ án này.

Trong quá trình thc hin đ án môn hc chúng em xin chân thành cm n đc
bit đn th
y Thc s H Quang Khi, giáo viên hng dn, đã tn tình ging dy và
giúp đ chúng em trong sut quá trình thc hin và hoàn thành đ án môn hc.

Khi hoàn thành đc đ án này chúng em đã tri qua khong thi gian làm vic
nhóm cùng vi nhau tht hu ích. Tht s, đây là mt khong thi gian tuy ngn,
nhng đ đ chúng em th hin tinh thn làm vic nhóm, vn dng nhng kin thc đã
h
c đ hoàn thành công vic mt cách tt nht.

Tuy nhiên, do kh nng còn hn ch và thi gian có hn, chc chn trong tp đ
án môn hc không tránh khi thiu sót, mong đc s đng viên, thông cm và đóng
góp ý kin ca quý Thy cô và các bn đ tp đ án hoàn chnh hn.

Chúng em xin chân thành cm n.



























Tìm hiu và lp trình ng dng trên h điu hành Android GVHD: Th.s H Quang Khi

Sinh viên: Trn ng Khoa – Nguyn Minh Tâm Khoa: Công Ngh Thông Tin
Trang 3
MC LC


MC TIÊU VÀ YÊU CU 6

1. Mc tiêu chính: 6
a. Mc tiêu ca ging viên đt ra cho chúng em là: 6
b. Bên cnh đó mc tiêu ca nhóm chúng em đt ra là: 6
2. Yêu cu sinh viên: 6

GII THIU  ÁN 7
NI DUNG BÁO CÁO 8
I. TÌM HIU H IU HÀNH ANDROID: 8
1. S phát trin ng dng trên di đng: 8
2. Gii thiu chung v h điu hành Android: 8
a. Khái nim: 8
b. S phát trin ca Android: 8
c. Các ng dng Android c bn: 9
d. c đim ca b phát trin ng dng Android: 9
3. Kin trúc h điu hành Android: 10
a. Tng ht nhân Linux (Linux Kernel layer): 10
b. Tng Libraries và android runtime: 10
c. T ng Application Framework: 11
d. Tng Application: 11
4. Cài đt môi trng phát trin Android: 11
a. Phn mm h tr: 11
b. Hng dn cài đt: 11
II. NGÔN NG LP TRÌNH JAVA 20
1. Gii thiu Java: 20
2. Lch s hình thành ngôn ng Java: 20
3. Mt s đc đim ni bt ca ngôn ng lp trình Java: 20
a. Máy o Java ( Java Virtual Machine): 20
b. Thông dch: 21
c. c lp nn: 21
d. Hng đi tng: 21
e. a nhim – đa lung ( Multi Tasking – Multi Threading): 21
f. Kh chuyn: 21
g. H tr mnh cho vic phát trin ng dng: 21
III. NG DNG CALCULATOR 22
1. Mô t chc nng ng dng: 22

a. X lý biu thc: 22
b. Nhp hàm: 22
c. Các phép tính c bn: Cng +, tr -, nhân *, chia ÷ 22
d. Các phép tính vi các hàm: x
2
, n!, sin, cos, tan, sqrt. 22
e. Có th dùng degree hay radians cho các hàm lng giác (trigonometry) 22
f. Lu và gi li ni dung ca biu thc tính toán c (history) 22
g. Biu th kt qu: 22
2. Ý tng gii quyt bài toán: 22
3. Ý tng thut toán ký pháp nghch đo Ba Lan 23
a. Ý tng: 23
b. Hin thc thut toán: 23
4. Demo ng dng Calcaulator: 26
IV. KT QU 38
1. Chng trình ng dng “calculator”: 38
a. Kt qu đt đc: 38
Tìm hiu và lp trình ng dng trên h điu hành Android GVHD: Th.s H Quang Khi

Sinh viên: Trn ng Khoa – Nguyn Minh Tâm Khoa: Công Ngh Thông Tin
Trang 4
b. Hn ch ca chng trình: 38
2. Kh nng làm vic 38
a. Tp th nhóm 38
b. Cá nhân: 38
V. HNG PHÁT TRIN THÊM 39
VI. KT LUN 40
VII. TÀI LIU THAM KHO 41











































Tìm hiu và lp trình ng dng trên h điu hành Android GVHD: Th.s H Quang Khi

Sinh viên: Trn ng Khoa – Nguyn Minh Tâm Khoa: Công Ngh Thông Tin
Trang 5
NHN XÉT CA GIÁO VIÊN HNG DN











































Ngày……tháng……nm……
Ký tên





Tìm hiu và lp trình ng dng trên h điu hành Android GVHD: Th.s H Quang Khi

Sinh viên: Trn ng Khoa – Nguyn Minh Tâm Khoa: Công Ngh Thông Tin
Trang 6
MC TIÊU VÀ YÊU CU

Sau thi gian hc tp và trau di kin thc thì gi đây là giai đon tt nht mà
mi thành viên trong nhóm chúng em có th áp dng nhng kin thc đã hc đ vn
dng vào đ tài mà trng đã giao cho chúng em làm. ây cng là giai đon đ thy rõ
kh nng tip thu, nm vng kin thc ca mình  mc đ nào.

 tài: Tìm hi
u và lp trình ng dng trên h điu hành Android.

1. Mc tiêu chính:
Phân tích và xây dng thành công phn mm ng dng máy tính khoa hc cho
đin thoi cm tay thông minh chy trên nn gi lp Android SDK.
a. Mc tiêu ca ging viên đt ra cho chúng em là:
- Làm quen vi cách thc làm vic theo nhóm.
- Nm vng và lp trình thành tho vi Java trên nn Android.
- Dùng Java trên nn Android thit k “Calculator”.
b. Bên cnh đó mc tiêu ca nhóm chúng em đt ra là:
- T đ tài này có th m rng ra và
ng dng cho các đ tài khác có liên
quan.

2. Yêu cu sinh viên:
- Hc môn lp trình hng đi tng, cu trúc d liu, và gii tích.

- Chu khó hc hi và tham kho tài liu.
- Kh nng làm vic nhóm.






















Tìm hiu và lp trình ng dng trên h điu hành Android GVHD: Th.s H Quang Khi

Sinh viên: Trn ng Khoa – Nguyn Minh Tâm Khoa: Công Ngh Thông Tin
Trang 7
GII THIU  ÁN


Gn đây đin thoi cm tay thông minh đã tr thành mt vt hu nh “cn phi
có” trong cuc sng hng ngày ca gii làm vic “trí thc”. Vit phn mm tin ích
nâng cao giá tr s dng cho chúng cng tr nên mt trào lu cho các công ty phát
trin phn mm, các gii lp trình viên chuyên nghip cng nh không chuyên. c
bit là nh
ng ng dng cho máy chy trên h điu hành Android.

Phn mm máy tính bao gi cng đc cài đt sn trong bt c đin thoi cm
tay nhng ch dng li  mc đ c bn nh cng tr nhân chia, trong khi đó mc nhu
cu s dng ca gii làm vic “trí thc” cao hn,  mc đ ca máy tính khoa hc.
L
y tiêu chí là đáp ng đc nhu cu k trên, nhóm chúng em xin đng ký, tìm hiu và
lp trình ng dng “máy tính khoa hc” dành cho h điu hành Android.

 tài “Tìm hiu và lp trình ng dng trên h điu hành Android” nhm nâng
cao k nng lp trình, cng nh phân tích, thit k và xây dng mt ng dng thc tin
cho sinh viên t nhng yêu cu đc phân tích nh trên. Xây dng đc mt phn
mm
ng dng nh mt máy tính khoa hc thc th s không đn gin. Cho nên mc
đ yêu cu ca đ tài ch bao gm nhng phép toán và hàm đn gin. ng thi ng
dng đc gii hn ch cho máy đin thoi cm tay thông minh do màn hình (ln, cm
ng, …) ca chúng s cho phép thit k và xây dng mt giao din phc tp đa nng,
và b x lý c
a chúng đ mnh đ tính toán bài toán phc tp nhm đáp ng đc yêu
cu ca đ tài.

























Tìm hiu và lp trình ng dng trên h điu hành Android GVHD: Th.s H Quang Khi

Sinh viên: Trn ng Khoa – Nguyn Minh Tâm Khoa: Công Ngh Thông Tin
Trang 8
NI DUNG BÁO CÁO

I. TÌM HIU H IU HÀNH ANDROID:
1. S phát trin ng dng trên di đng:
− Symbian:
+ Nhà phát trin: Nokia
+ Ngôn ng lp trình: Symbian C++

+ Thit b h tr: Nokia, Sony Ericsson, Samsung
− J2ME:
+ Nhà phát trin: Sun MicroSystems
+ Ngôn ng lp trình: Java, MIDlet
+ Thit b h tr: c h tr t nhiu nhà sn xut đin thoi
− Windows Phone:
+ Nhà phát trin: Microsoft
+ Ngôn ng lp trình: C#, VB
+ Thit b h tr: HTC, Samsung, LG, Dell, Nokia
− webOS (Palm OS)
+ Nhà phát trin: Palm, HP
+ Ngôn ng lp trình: C/C++
+ Thit b h tr: Palm, HP

iOS
+ Nhà phát trin: Apple
+ Ngôn ng lp trình: Objective C
+ Thit b h tr: iPhone
− Android
+ Nhà phát trin: Google
+ Ngôn ng lp trình: Java
+ Thit b h tr: HTC, Samsung, LG, Sony Ericsson, Acer, Dell…
2. Gii thiu chung v h điu hành Android:
a. Khái nim:
- Android là mt h điu hành dành cho thit b di đng nh smartphone, tablet
hay netbook. Android do Google phát trin da trên nn tng Linux kernel và
các phn mm mã ngun m. Android là h điu hành m mã ngun chính duy
nht.
- Android bao gm:
+ H điu hành m cho các thit b di đng.

+ Nn tng phát trin các ng dng di đng.
+ Các thit b di đng chy HH Android và các ng dng c
a nó.
b.
S phát trin ca Android:
- Ban đu nn tng này đc phát trin bi Android Inc. Android là mt h
điu hành di đng da trên nn tng linux phiên bn 2.6 dành cho các dòng đin
thoi SmartPhone. u tiên, đc ra đi bi công ty liên hp Android, sau đó
Tìm hiu và lp trình ng dng trên h điu hành Android GVHD: Th.s H Quang Khi

Sinh viên: Trn ng Khoa – Nguyn Minh Tâm Khoa: Công Ngh Thông Tin
Trang 9
đc Google mua li và phát trin t nm 2005 và tr thành mt h
điu hành di đng mã ngun m, min phí, mnh m và đc a chung cao
trên th gii.
- Android đc phát trin nhm cnh tranh vi các h điu hành di đng khác
nh iOS (Apple), BlackBerry OS, Windows Mobile (Microsoft), Symbian
(Nokia), Samsung (Bada), WebOS (Palm) Tính đn thi đim này, Android đã
tr thành nn tng di đng tng trng nhanh nh
t th gii.
- H điu hành android mt h điu hành rt mnh mnh, có bo mt
cao, h tr đc nhiu công ngh tiên tin nh 3G, GPS, EDGE, Wifi tng
thích vi nhiu phn cng, h tr nhiu loi b nhp d liu nh keyboard,
touch và trackball. Android là h điu hành di đng nên có kh nng kt
ni cao vi các mng không dây. H tr
công ngh OpenGL nên có kh nng
chi các phng tin media, hot hình cng nh trình din các kh nng đ ha
khác cc tt, là tin đ đ phát trin các ng dng có giao din phc tp
chng hn nh là các trò chi.
- Nm 2008, h điu hành android đã chính thc m toàn b mã ngun, điu

đó cho phépcác hãng đin thoi có th đem mã ngun v
 tùy chnh, thit
k li sao cho phù hp vi mi mu mã đin thoi ca h và điu quan trng
na là h điu hành m này hoàn toàn min phí, không phi tr tin nên giúp
h tit kim khá ln chi phí phát trin h điu hành. Nhng điu đó là
cc k tt không ch đi vi các hãng sn xut đin tho
i nh mà ngay
c vi nhng hãng ln nh Samsung, HTC
- Vi các nhà phát trin ng dng (developers), vic h điu hành
android đc s dng ph bin đng ngha vi vic h có th thoi mái phát
trin ng dng trên nn android vi s tin tng là ng dng đó s có th
chy đc ngay trên nhiu dòng đin thoi ca các hãngkhác nhau. H
ít
phi quan tâm là đang phát trin cho đin thoi nào, phiên bn bao nhiêu vìnn
tng android là chung cho nhiu dòng máy, máy o Java đã chu trách
nhim thc thinhng ng dng phù hp vi mi dòng đin thoi mà nó
đang chy. Tt c các chng trình ng dng đc vit bng ngôn ng Java
kt hp vi XML nên có kh nng kh chuyn cao.
c. Các ng dng Android c bn:
- Duyt mail.
- Qun lý SMS.
- Qun lý thông tin ngi dùng PIM.
- Trình duyt web.
- Chng trình chi nhc, hin th hình nh.
d.
c đim ca b phát trin ng dng Android:
- Hoàn toàn min phí.
- H tr các thit b có Wifi.
- H tr GPS.
- Th vin s dng Bluetooth.

- Trình duyt web HTML 5.
- H tr phát trin ng dng v bn đ.
- Th vin âm thanh x lý nhiu đnh dng.
Tìm hiu và lp trình ng dng trên h điu hành Android GVHD: Th.s H Quang Khi

Sinh viên: Trn ng Khoa – Nguyn Minh Tâm Khoa: Công Ngh Thông Tin
Trang 10
- Th vin đ ha 2D, 3D.
3. Kin trúc h điu hành Android:
H điu hành android có 4 tng t di lên trên là tng ht nhân Linux
(phiên bn 2.6), tng Tng Libraries và Android runtime, Tng Application
Framework và trên cùng là tngApplication.

Kin trúc h điu hành Android

a.
Tng ht nhân Linux (Linux Kernel layer):
H điu hành android đc phát trn da trên ht nhân linux, c th là ht nhân
linux phiên bn2.6, điu đó đc th hin  lp di cùng này. Tt c mi hot đng
ca đin thoi mun thihành đc thì đu đc thc hin  mc cp thp  lp này
bao gm qun lý b nh (memorymanagement), giao tip vi ph
n cng (driver
model), thc hin bo mt (security), qun lý tin trình (process).
b.
Tng Libraries và android runtime:
- Libraries: Phn này có nhiu th vin đc vit bng C/C++
đ các phn mm có th s dng, các th vin đó đc tp hp thành mt s
nhóm nh :
+ Th vin h thng (System C library): th vin da trên chun C, đc
s dng ch bi h điu hành.

+ Th vin Media (Media Libraries): Có nhiu code đ h tr vi
c phát và ghi
các loi đnh dng âm thanh, hình nh, video thông dng.
+ Th vin SQLite : H c s d liu đ các ng dng có th s dng.
- Android runtime: Phn này cha các th vin mà mt chng trình
vit bng ngôn ng Java có thhot đng. Phn này có 2 b phn tng t
nh mô hình chy Java trên máy tính thng. Th nht là các th vin lõi (Core
Library), cha các lp nh
JAVA IO, Collections, File Access. Th hai là mt
máy o java (Dalvik Virtual Machine).
Tìm hiu và lp trình ng dng trên h điu hành Android GVHD: Th.s H Quang Khi

Sinh viên: Trn ng Khoa – Nguyn Minh Tâm Khoa: Công Ngh Thông Tin
Trang 11
c. Tng Application Framework:
Tng này xây dng b công c - các phn t  mc cao đ các lp trình
viên có th nhanh chóng xây dng ng dng. Nó đc vit bng Java, có kh nng s
dng chung đ tit kim tài nguyên.
Gii thiu mt s thành phn ca phn này:
- Activity Manager: Qun lý các chu k sng ca mt ng dng cng
nh cung cp công c điu khin các Activity.
- Telephony Manager: Cung c
p công c đ thc hin vic liên
lc nh gi đin thoi.
- XMPP Service: Cung cp công c đ liên lc trong thi gian thc.
- Location Manager: Cho phép xác đnh v trí ca đin thoi thoi
da vào h thng đnh v toàn cu GPS và Google Maps.
d.
Tng Application:
ây là lp ng dng giao tip vi ngi dùng, bao gm các ng dng nh :

- Các ng dng c bn, đc cài đt đi lin vi h điu hành là gi đin
(phone), qun lý danh b (Contacts), duyt web (Browser), nhn tin (SMS), lch
làm vic (Calendar), đc e-mail (Email-Client), bn đ (Map), quay phim chp
nh (camera)
- Các ng dng
đc cài thêm nh các phn mm chng khoán (Stock), các
trò chi (Game), t đin…
4. Cài đt môi trng phát trin Android:
a. Phn mm h tr:
-  lp trình Android thì mi b SDK ca Google là không đ, bn còn cn
tích hp nó vào mt IDE nh Eclipse, bên cnh đó còn có Netbeans thì plugin
cho Android vn cha hoàn thin.
- SDK Android Emulator là mt tin ích min phí dành cho Windows, Mac
và Linux đ gi lp Android ngay trên máy tính. Nó đc Google thit k đ các
nhà phát trin có th th nghim các ng dng ca mình trên Android trc khi
chy chúng trên thit b cm tay và có nhiu phiên bn khác nhau nh 1.6, 2.0,
2.1, 2.2, 2.3, v.v…
- Bn có th ch
n phiên bn mà mình mun, bn da vào thông s SDK
Platform Android your.version đ xác đnh phiên bn Android tích hp trong
gói cài đt.
b.
Hng dn cài đt:
- Công c cn thit:
+ Java Development Kit (JDK) 7:

+ Eclipse 3.7.1

+ Android SDK


+ Android Development Toll (ADT)

Tìm hiu và lp trình ng dng trên h điu hành Android GVHD: Th.s H Quang Khi

Sinh viên: Trn ng Khoa – Nguyn Minh Tâm Khoa: Công Ngh Thông Tin
Trang 12
+ Android Platforms
- Các bc cài đt:
+ Cài đt JDK:
• u tiên bn cài Java Development Kit (JDK) bn hin ti là bn JDK 7
• Linkdownload:

• Bm nút download có mi tên trong hình đ ti:

• Tip tc bm nút Chn “Accept License Agreement” đ chp nhn điu
khon s dng và bm vào link đ ti v (phù hp vi h điu hành) nh mi
tên trong hình:
Tìm hiu và lp trình ng dng trên h điu hành Android GVHD: Th.s H Quang Khi

Sinh viên: Trn ng Khoa – Nguyn Minh Tâm Khoa: Công Ngh Thông Tin
Trang 13

• Sau khi ti v bn cài đt bn chy file cài đt JDK và làm theo hình đ mc
đnh toàn b và bm Next đn khi Finish:

Tìm hiu và lp trình ng dng trên h điu hành Android GVHD: Th.s H Quang Khi

Sinh viên: Trn ng Khoa – Nguyn Minh Tâm Khoa: Công Ngh Thông Tin
Trang 14



• Sau bc này JDK s yêu cu cài JRE (Java Runtime Environment) vào máy
Bn bm Next nh hình đ tip tc cài JRE :

• Sau khi cài hoàn thành bm Finish đ hoàn tt vic cài JDK vào máy.
+ Cài đt Eclipse: (hng dn dành cho phiên bn portable)
• u tiên bn cn ti Eclipse Classic bn mi ti :
Eclipse
• Chn Eclipse cho h điu hành ca bn là x86 hoc x64:
Tìm hiu và lp trình ng dng trên h điu hành Android GVHD: Th.s H Quang Khi

Sinh viên: Trn ng Khoa – Nguyn Minh Tâm Khoa: Công Ngh Thông Tin
Trang 15


• Sau khi ti v bn bm chut phi vào file va ti và bung nén nh hình:


•  đây mình dùng  C trong máy đ bung nén :

Tìm hiu và lp trình ng dng trên h điu hành Android GVHD: Th.s H Quang Khi

Sinh viên: Trn ng Khoa – Nguyn Minh Tâm Khoa: Công Ngh Thông Tin
Trang 16


• Sau khi bung nén bn s có toàn b file ca Eclipse trong th mc C:\eclipse
nh sau:

Tìm hiu và lp trình ng dng trên h điu hành Android GVHD: Th.s H Quang Khi


Sinh viên: Trn ng Khoa – Nguyn Minh Tâm Khoa: Công Ngh Thông Tin
Trang 17
• File Eclipse có đánh du sao trong hình là file đ chy Eclipse, bn có th to
shortcut nó ra desktop đ d làm vic.

+ Cài đt Android SDK
• u tiên ta ti b SDK ti
chn
platform phù hp vi OS mình đang dùng


• Gii nén file zip bn va ti v. Chy SDK Setup.exe. Bn có th gp thông
báo li “Fetching
https://dl-sl Failed to fetch ”.
• Close thông báo này li. Tip theo ca s Choose Packages to Install xut hin.
Nu ca s này trng rng thì chn Cancel.
• Quay v ca s Android SDK and AVD manager -> Chn Setting, đánh du
vào ô Force https:// Chn Available Packages.

• ánh du các Packages bn mun ti: Documents chính là phn Javadoc mô t
hot đng ca các phng thc và các lp (phn này không th thiu), Sample là
các đon code mu, SDK Platform ng vi các phiên bn h điu hành (2.2 - API
level 8, 2.1 - API level 7, ), và Google API đ phát trin các phn mm liên quan
đn dch v ca Google.
Chn Install Selected -> Install -> Ch chng trình cài đt xong.
Tìm hiu và lp trình ng dng trên h điu hành Android GVHD: Th.s H Quang Khi

Sinh viên: Trn ng Khoa – Nguyn Minh Tâm Khoa: Công Ngh Thông Tin
Trang 18



+ Tích hp Android SDK vào Eclipse:
• Khi chy Eclipse, vào Help -> Install new softwares.
• Chn Add, Name” tên bn mun và Location gõ vào đa ch đ ti v ADT:
HTML Code:

hoc HTML Code:
• Nu https không hot đng, bn cng có th ti thng ADT v máy theo link
(bn mi nht 0.9.7 ng vi
Android 2.2), chn Archive và browse ti file này (lu ý không gii nén)
• Chn OK. Check vào phn di ô Name (s hin ra dòng Developer Tools).

Tìm hiu và lp trình ng dng trên h điu hành Android GVHD: Th.s H Quang Khi

Sinh viên: Trn ng Khoa – Nguyn Minh Tâm Khoa: Công Ngh Thông Tin
Trang 19

• Chy Eclipse chn Tab Windows -> Preferences -> Android
Nhn nút Browse và chnh đng dn ti th mc ca Android SDK bn ti lúc
trc. Chn Apply -> OK.


Tìm hiu và lp trình ng dng trên h điu hành Android GVHD: Th.s H Quang Khi

Sinh viên: Trn ng Khoa – Nguyn Minh Tâm Khoa: Công Ngh Thông Tin
Trang 20
II. NGÔN NG LP TRÌNH JAVA
1. Gii thiu Java:
- Java là mt ngôn ng lp trình dng lp trình hng đi tng (OOP). Khác

vi phn ln ngôn ng lp trình thông thng, thay vì biên dch mã ngun thành
mã máy hoc thông dch mã ngun khi chy, Java đc thit k đ biên dch mã
ngun thành bytecode, bytecode sau đó s đc môi trng thc thi (runtime
environment) chy. Bng cách này, Java thng chy nhanh hn nhng ngôn
ng lp trình thông dch khác nh Python, Perl, PHP,…
- Cú pháp Java đc vay mn nhiu t C & C++ nh
ng có cú pháp hng
đi tng đn gin hn và ít tính nng x lý cp thp hn.
2. Lch s hình thành ngôn ng Java:
- Java đc khi đu bi James Gosling và bn đng nghip  Sun
Microsystems nm 1991. Không nên ln ln Java vi JavaScript, hai ngôn ng
đó ch ging tên và loi cú pháp nh C. Công ty Sun Microsystems đang gi bn
quyn và phát trin Java thng xuyên.
- Java đc to ra vi tiêu chí “Vit (code) mt ln, thc thi khp ni”
(“Write Once, Run Anywhere” (WORA)). Chng trình phn mm vit bng Java
có th chy trên mi nn tng (platform) khác nhau thông qua m
t môi trng
thc thi vi điu kin có môi trng thc thi thích hp h tr nn tng đó. Môi
trng thc thi ca Sun Microsystems hin h tr Sun Solaris, Linux, Mac OS,
FreeBSD & Windows. Ngoài ra, mt s công ty, t chc cng nh cá nhân khác
cng phát trin môi trng thc thi Java cho nhng h điu hành khác nh BEA,
IBM, HP… . Trong đó, đáng nói đn nht là IBM Java Platform h tr Windows,
Linux, AIX & z/OS.
- Nhng chi tit v ngôn ng, máy 
o và API ca Java đc gi bi Cng
đng Java (do Oracle qun lý). Java đc to ra vào nm 1991 do mt s k s 
Sun, bao gm ông James Gosling, mt phn ca D án Xanh (Green Project).
Java đc phát hành vào nm 1994, ri nó tr nên ni ting khi Netscape tuyên
b ti hi tho SunWorld nm 1995 là trình duyt Navigator ca h s h tr
Java. V sau Java đc đc h tr trên hu ht các trình duyt nh Internet

Explorer (Microsoft), Firefox (Mozilla), Safari (Apple)…
- Java đc s dng ch yu trên môi trng mng, internet.subby Sau khi
Oracle mua li công ty ca Sun Microsystem nm 2009-2010, Oracle đã mô t h
là “ngi qun lý công ngh Java vi cam kt không ngng đ bi dng mt
cng đng tham gia và minh bch.
3. Mt s đc đim ni bt ca ngôn ng lp trình Java:
a. Máy o Java ( Java Virtual Machine):
- Tt c các chng trình mun thc thi đc thì phi đc biên dch ra mã
máy. Mã máy ca tng kin trúc CPU ca mi máy tính là khác nhau (tp lnh
mã máy ca CPU Intel, CPU Solarix, CPU Macintosh … là khác nhau), vì vy
trc đây mt chng trình sau khi đc biên dch xong ch có th chy đc
trên mt kin trúc CPU c th nào đó. i vi CPU Intel chúng ta có th chy
các h điu hành nh Microsoft Windows, Unix,Linux, OS/2, …
Tìm hiu và lp trình ng dng trên h điu hành Android GVHD: Th.s H Quang Khi

Sinh viên: Trn ng Khoa – Nguyn Minh Tâm Khoa: Công Ngh Thông Tin
Trang 21
- Chng trình thc thi đc trên Windows đc biên dch di dng file có
đuôi .exe còn trên Linux thì đc biên dch di dng file có đuôi .elf, vì vy
trc đây mt chng trình chy đc trên Windows mun chy đc trên h
điu hành khác nh Linux chng hn thì phi chnh sa và biên dch li.
- Ngôn ng lp trình Java ra đi, nh vào máy o Java mà khó khn nêu trên
đã đc khc phc. Mt ch
ng trình vit bng ngôn ng lp trình Java s đc
biên dch ra mã ca máy o Java (mã java bytecode). Sau đó máy o Java chu
trách nhim chuyn mã Java bytecode thành mã máy tng ng. Sun-
Microsystem chu trách nhim phát trin các máy o Java chy trên các h điu
hành trên các kin trúc CPU khác nhau.
b.
Thông dch:

- Java là mt ngôn ng lp trình va biên dch va thông dch. Chng trình
ngun vit bng ngôn ng lp trình Java có đuôi *.java đu tiên đc biên dch
thành tp tin có đuôi *.class và sau đó s đc trình thông dch thông dch thành
mã máy.
c. c lp nn:
- Mt chng trình vit bng ngôn ng Java có th chy trên nhiu máy tính
có h điu hành khác nhau (Windows, Unix,Linux, …) min sao  đó có cài đt
máy o Java (Java Virtual Machine). Vit mt ln chy mi ni (write once run
anywhere).
d.
Hng đi tng:
- Hng đi tng trong Java tng t nh C++ nhng Java là mt ngôn ng
lp trình hng đi tng hoàn toàn. Tt c mi th đ cp đn trong Java đu
liên quan đn các đi tng đc đnh ngha trc, thm chí hàm chính ca mt
chng trình vit bng Java (đó là hàm main) cng phi đt bên trong mt lp.
Hng đi tng trong Java không có tính đa k tha
(multi inheritance) nh
trong C++ mà thay vào đó Java đa ra khái nim interface đ h tr tính đa k
tha.
e. a nhim – đa lung ( Multi Tasking – Multi Threading):
- Java h tr lp trình đa nhim, đa lung cho phép nhiu tin trình, tiu trình
có th chy song song cùng mt thi đim và tng tác vi nhau.
f. Kh chuyn:
- Chng trình ng dng vit bng ngôn ng Java ch cn chy đc trên
máy o Java là có th chy đc trên bt k máy tính, h điu hành nào có máy
o Java. “Vit mt ln, chy mi ni” (Write Once, Run Anywhere).

g.
H tr mnh cho vic phát trin ng dng:
- Công ngh Java phát trin mnh m nh vào “đi gia Sun Microsystem”

cung cp nhiu công c, th vin lp trình phong phú h tr cho vic phát trin
nhiu loi hình ng dng khác nhau c th nh: J2SE (Java 2 Standard Edition)
h tr phát trin nhng ng dng đn, ng dng client-server; J2EE (Java 2
Tìm hiu và lp trình ng dng trên h điu hành Android GVHD: Th.s H Quang Khi

Sinh viên: Trn ng Khoa – Nguyn Minh Tâm Khoa: Công Ngh Thông Tin
Trang 22
Enterprise Edition) h tr phát trin các ng dng thng mi, J2ME (Java 2
Micro Edition) h tr phát trin các ng dng trên các thit b di đng, không
dây, …
III. NG DNG CALCULATOR
1. Mô t chc nng ng dng:
a. X lý biu thc:
- Cho phép nhp biu thc dùng dng mu (inputting expression using standard
format) nh ca mt máy tính khoa hc thc s. Ví d có th nhp biu thc:
3*(9-6)+sin(90)/2-3.5+4!
b. Nhp hàm:
- T đng thêm du ngoc m khi nhp hàm. Ví d nhn hàm s th hin “sin(”
trong biu thc sin.
c. Các phép tính c bn: C
ng +, tr -, nhân *, chia ÷
d. Các phép tính vi các hàm: x
2
, n!, sin, cos, tan, sqrt.
e. Có th dùng degree hay radians cho các hàm lng giác (trigonometry)
f. Lu và gi li ni dung ca biu thc tính toán c (history)
g. Biu th kt qu:
- Dng s thp phân (decimal number), ví d 100÷7 = 14.2857142857142857142.
Có th xác đnh s ch s thp phân (decimal place) ca kt qu.
- Ví d 100÷7 = 14.286 vi 3 ch s thp phân

2. Ý tng gii quyt bài toán:
- Bình thng,
đ vit mt biu thc tng 2 s, ta vit a + b. Cách vit này gi là
trung t (infix). Bi vì du + (ta gi là toán t) nm  gia a, b (toán hng). Mt
biu thc phc tp hn có th  dng (a + b) * c.
- Ký pháp Nghch đo Ba Lan (Reversed Polish Notation - RPN) là dng biu thc
hu t (postfix), ngha là toán t nm sau toán hng. Theo đó, biu thc a + b vi
t
thành a b +; biu thc (a + b) * c s vit thành a b + c *.
- Phng pháp này giúp loi b du ngoc trong các biu thc, cng nh không
phi lu ý ti mc u tiên toán t (operator precedence).
RPN là mt phng tin tt giúp máy tính "đc" đc các biu thc toán hc, t
đó tính ra giá tr.
ö Vy, khi ta nhp mt biu thc toán vào mt chng trình tính giá tr biu thc,
nó s chuyn biu th
c v dng RPN, sau đó mi tính toán.

Tìm hiu và lp trình ng dng trên h điu hành Android GVHD: Th.s H Quang Khi

Sinh viên: Trn ng Khoa – Nguyn Minh Tâm Khoa: Công Ngh Thông Tin
Trang 23
3. Ý tng thut toán ký pháp nghch đo Ba Lan
a.
Ý tng:
- Mi toán t, toán hng đc xem là mt token.
- c tng token trong biu thc trung t t trái qua phi, vi mi token ta thc
hin các bc sau:
o Nu là toán hng: cho ra output.
o Nu là du m ngoc ‘(’: cho vào stack
o Nu là du đóng ngoc ‘)’: ly các toán t trong stack ra và cho vào

output cho đn khi gp du m ngoc ‘(’ . (Du m ngoc cng phi
đc đa ra khi stack)
o Nu là toán t:
̇ Chng nào  đnh stack là toán t và toán t đó có đ u tiên ln
hn hoc bng toán t hin ti thì ly toán t đó ra khi stack và
cho ra output.
̇
a toán t hin ti vào stack.
b.
Hin thc thut toán:
- Biu thc nhp là chui nên trc khi chuyn biu thc  dng trung t sang hu
t ta cn x lý đ đn gin cho vic chuyn đi.
- Ta cn chuyn chui biu thc thành tng token. VD: “29+-6*(2-3)”
==>


B1: Duyt tng ký t chui và kim tra ký t thuc loi nào.
if ("-".indexOf(sb.charAt(i)) != -1)
{

switch (getType(sb.substring(i, i+1)))
{

B2:- Nu ký t là ‘-’ thì kim tra có phi là toán t ‘-’ hay s âm. Nu là toán t
‘-’ thì ta push vào stack, ngc li ta kim tra toán hng và ni chui.
case 1:// Là toán t

if(i==0||sb.charAt(i-1)=='(')
{
StringBuffer tam=

new StringBuffer();
tam.append(sb.substring(i,++i));

for(int j=i;j<sb.length()&&getType(sb.substring(j,j+1))==1;i=j++)
{
tam.append(sb.substring(j, j+1));
}
bt.push(tam.toString());
else
{
StringBuffer tam=
new StringBuffer();
tam.append(sb.substring(i,++i));
for(int j=i;j<sb.length()&&getType(sb.substring(j,j+1))==1;i=j++)
{
tam.append(sb.substring(j, j+1));
}
29 + -6*( 2- 3)
Tìm hiu và lp trình ng dng trên h điu hành Android GVHD: Th.s H Quang Khi

Sinh viên: Trn ng Khoa – Nguyn Minh Tâm Khoa: Công Ngh Thông Tin
Trang 24
bt.push(tam.toString());
}
break;
-Ngc li thì cho push vào stack.
else{
bt.push(sb.substring(i, i+1));
}
break;


-Là s thì ta duyt tip đ ly toán hng.

case 1:
StringBuffer tam=
new StringBuffer();

for(int j=i;j<sb.length()&&getType(sb.substring(j,j+1))==1;i=j++)
{
tam.append(sb.substring(j, j+1));
}
bt.push(tam.toString());
break;

-Nu gp ký t ‘(‘ và ‘)’ thì push vào stack.

case 2:
bt.push(sb.substring(i, i+1));

break;

case 3:
bt.push(sb.substring(i, i+1));

break;
- Nu là ký t ch cái thì duyt tip đ ly hàm.
case 4:
StringBuffer tam1=
new StringBuffer();
for(int j=i;j<sb.length()&&getType(sb.substring(j,j+1))==4;i=j++)

{
tam1.append(sb.substring(j, j+1));
}
bt.push(tam1.toString());
break;
- Chuyn biu thc t trung t sang hu t.
VD:


==>


B1: Duyt tng token và kim tra kiu ca token đó.

for
(int i=0;i<tam.length;i++)
{
switch (getType(tam[i])) }

B2: - Nu là toán t thì pop ht các toán t có đ u tiên ln hn hoc bng ra
khi stack và push vào stack biu thc hu t, còn nu nh hn thì thêm vào stack.

case
0:
while (!stack.empty() && getPriority(tam[i].charAt(0)) <= getPriority(stack.peek().charAt(0)))
bieuthuchauto.push(stack.pop());
stack.push(tam[i]);
break;
- Nu là toán hng thì push vào stack hu t.
case 1:

bieuthuchauto.push(tam[i]);
break;
29 + -6*( 2- 3)
29 -6 2 3 - * +
Tìm hiu và lp trình ng dng trên h điu hành Android GVHD: Th.s H Quang Khi

Sinh viên: Trn ng Khoa – Nguyn Minh Tâm Khoa: Công Ngh Thông Tin
Trang 25
- Nu là ký t ‘(‘ thì push vào stack.
case 2:
stack.push(tam[i]);
break;
- Nu là ký t ‘)’ thì pop ht toán t cho đn khi gp ký t ‘(‘.
case 3:

while (stack.peek().charAt(0) != '(') {
bieuthuchauto.push(stack.pop());
}
stack.pop();
break;
- Nu là hàm sin, cos, tan, sqrt, ! thì push vào stack.
case 4:
stack.push(tam[i]);

break;
B3: Thoát khi vòng lp ta pop tt c toán t trong stack ra và push vào stack
hu t.
while(!stack.isEmpty())
bieuthuchauto.push(stack.pop());


- Tính biu thc hu t.
B1: Duyt tng token biu thc hu t.
B2: - Nu là toán hng thì push vào stack.

case 1: case -1:
stack.push(Double.parseDouble(bt[i]));

break;
- Nu là toán hng thì pop hai giá tr trên đu stack ra và tính toán.
case 0:

double a = stack.pop();

double b = stack.pop();

double value = 0;

switch (bt[i].charAt(0)) {

case '+': value = b+a;

break;

case '-': value = b-a;

break;

case '*': value = b*a;

break;


case '/': value = b/a;

break;
}
stack.push(value);
break;

- Nu là hàm cos, sin, tan, sqrt, … thì pop tr trên đu stack ra và tính toán.

case 4:

if(bt[i].equals("cos"))
{
stack.push(Math.cos(stack.pop()));
}
else if (bt[i].equals("sin")) {
stack.push(Math.sin(stack.pop()));
}
else if (bt[i].equals("tan")) {
stack.push(Math.tan(stack.pop()));
}
else if (bt[i].equals("sqrt")) {
stack.push(Math.sqrt(stack.pop()));
}
else if (bt[i].equals("^")) {
Double b1=stack.pop();
stack.push(Math.pow(stack.pop(),b1));
}
else if (bt[i].equals("!")) {

×