You are on page 1of 0

1

P TRNH HNG I TNG



PGS.TS. Trn nh Qu
KS. Nguyn Mnh Hng











Cc khi nim c bn ca Lp trnh hng i tng
Lp trnh hng i tng vi Java
2
GII THIU

Trong nhng nm gn y, lp trnh hng i tng tr nn gn gi nh s ra i lin tip
ca cc ngn ng lp trnh hng i tng. Sc mnh ca phng php lp trnh hng i
tng th hin ch kh nng m hnh ho h thng da trn cc i tng thc t, kh nng
ng gi v bo v an ton d liu, kh nng s dng li m ngun tit kim chi ph v ti
nguyn; c bit l kh nng chia s m ngun trong cng ng lp trnh vin chuyn nghip.
Nhng im mnh ny ha hn s thc y pht trin mt mi trng lp trnh tin tin cng vi
nn cng nghip lp rp phn mm vi cc th vin thnh phn c sn.
Ti liu ny nhm gii thiu cho cc sinh vin mt ci nhn tng quan v phng php lp trnh
hng i tng cng cung cp nhng kin thc, cc k thut c bn cho pht trin cc ng dng
ca mnh da trn ngn ng lp trnh Java - mt trong nhng ngn ng lp trnh hng i tng
thng dng nht hin nay.
Ni dung ca ti liu ny bao gm hai phn chnh:
Phn th nht trnh by nhng khi nim v cc vn c bn ca lp trnh hng i
tng bao gm tng quan v cch tip cn hng i tng v cc khi nim i tng,
lp, k tha, ng gi, a hnh
Phn th hai trnh by chi tit phng php lp trnh hng i tng vi ngn ng lp
trnh Java.
Ni dung ca ti liu bao gm 6 chng:
Chng 1: Tng quan v cch tip cn hng i tng. Trnh by s tin ho ca cch tip
cn t lp trnh truyn thng n cch tip cn ca lp trnh hng i tng v xu
hng pht trin ca lp trnh hng i tng hin nay.
Chng 2: Nhng khi nim c bn ca lp trnh hng i tng. Trnh by cc khi nim
c bn nh: i tng, lp i tng vi cc thuc tnh v phng thc, tnh k tha
v a hnh, tnh ng gi ca lp trnh hng i tng. Chng ny cng gii thiu
tng quan mt s ngn ng lp trnh hng i tng thng dng hin nay.
Chng 3: Ngn ng Java. Gii thiu nhng khi nim v nhng quy c ban u ca ngn ng
lp trnh Java: Cu trc chng trnh, cch bin dch, cch t tn bin, kiu d liu,
cc ton t v cu trc lnh ca ngn ng Java.
Chng 4: K tha v a hnh trn Java. Trnh by cc k thut lp trnh hng i tng da
trn ngn ng Java: Khai bo lp, cc thuc tnh v phng thc ca lp; k thut
tha k, cc lp tru tng, ci t np chng v a hnh trn Java.
Chng 5: Biu din v ci t cc cu trc d liu tru tng trn Java. Trnh by k thut
ci t v s dng mt s cu trc d liu quen thuc trong Java: ngn xp, hng i,
danh sch lin kt, cy nh phn v th.
Chng 6: Lp trnh giao din trn Java. Trnh by cc k thut lp trnh giao din trn Java:
Lp trnh vi cc giao din c bn trong th vin AWT, lp trnh giao din vi Applet
v HTML, lp trnh giao din nng cao vi th vin SWING.
Ti liu ny c vit nhm phc v mn hc Lp trnh hng i tng ging dy tip theo
sau mn hc Ngn ng lp trnh C++ v nh vy khi hc mn hc ny sinh vin s d nm bt
c nhng c trng khc bit ca ngn ng Java so vi C++.
3
Cun sch ny cn c km theo mt a CD cha ton b m cc chng trnh ci t lm v d
v bi tp trong cun sch.
Mc d cc tc gi c nhiu c gng trong qu trnh bin son ti liu ny, song khng th
trnh khi nhng thiu st. Rt mong nhn c s ng gp kin ca sinh vin v cc bn
ng nghip.
4















PHN 1

NHNG KHI NIM C BN
CA LP TRNH HNG I TNG

5
CHNG 1
TNG QUAN V CCH TIP CN
HNG I TNG

Ni dung chng ny nhm gii thiu mt cch tng quan v cch tip cn hng i tng. Ni
dung trnh by bao gm:
Gii thiu v cch tip cn ca lp trnh truyn thng.
Gii thiu cch tip cn ca lp trnh hng i tng.
So snh s khc bit gia hai cch tip cn ny.
Xu hng hin nay ca lp trnh hng i tng
1.1 PHNG PHP TIP CN CA LP TRNH TRUYN THNG
Lp trnh truyn thng tri qua hai giai on:
Giai on s khai, khi khi nim lp trnh mi ra i, l lp trnh tuyn tnh.
Giai on tip theo, l lp trnh hng cu trc.
1.1.1 Lp trnh tuyn tnh
c trng c bn ca lp trnh tuyn tnh l t duy theo li tun t. Chng trnh s c thc
hin tun t t u n cui, lnh ny k tip lnh kia cho n khi kt thc chng trnh.
c trng
Lp trnh tuyn tnh c hai c trng:
n gin: chng trnh c tin hnh n gin theo li tun t, khng phc tp.
n lung: ch c mt lung cng vic duy nht, v cc cng vic c thc hin tun t
trong lung .
Tnh cht
u im: Do tnh n gin, lp trnh tuyn tnh c u im l chng trnh n gin, d
hiu. Lp trnh tuyn tnh c ng dng cho cc chng trnh n gin.
Nhc im: Vi cc ng dng phc tp, ngi ta khng th dng lp trnh tuyn tnh
gii quyt.
Ngy nay, lp trnh tuyn tnh ch tn ti trong phm vi cc modul nh nht ca cc phng php
lp trnh khc. V d trong mt chng trnh con ca lp trnh cu trc, cc lnh cng c thc
hin theo tun t t u n cui chng trnh con.
1.1.2 Lp trnh cu trc
Trong lp trnh hng cu trc, chng trnh chnh c chia nh thnh cc chng trnh con v
mi chng trnh con thc hin mt cng vic xc nh. Chng trnh chnh s gi n chng
trnh con theo mt gii thut, hoc mt cu trc c xc nh trong chng trnh chnh.
6
Cc ngn ng lp trnh cu trc ph bin l Pascal, C v C++. Ring C++ ngoi vic c c trng
ca lp trnh cu trc do k tha t C, cn c c trng ca lp trnh hng i tng. Cho nn
C++ cn c gi l ngn ng lp trnh na cu trc, na hng i tng.
c trng
c trng c bn nht ca lp trnh cu trc th hin mi quan h:
Chng trnh = Cu trc d liu + Gii thut
Trong :
Cu trc d liu l cch t chc d liu, cch m t bi ton di dng ngn ng lp
trnh
Gii thut l mt quy trnh thc hin mt cng vic xc nh
Trong chng trnh, gii thut c quan h ph thuc vo cu trc d liu:
Mt cu trc d liu ch ph hp vi mt s hn ch cc gii thut.
Nu thay i cu trc d liu th phi thay i gii thut cho ph hp.
Mt gii thut thng phi i km vi mt cu trc d liu nht nh.
Tnh cht
Mi chng trnh con c th c gi thc hin nhiu ln trong mt chng trnh chnh.
Cc chng trnh con c th c gi n thc hin theo mt th t bt k, tu thuc
vo gii thut trong chng trnh chnh m khng ph thuc vo th t khai bo ca cc
chng trnh con.
Cc ngn ng lp trnh cu trc cung cp mt s cu trc lnh iu khin chng trnh.
u im
Chng trnh sng sa, d hiu, d theo di.
T duy gii thut r rng.
Nhc im
Lp trnh cu trc khng h tr vic s dng li m ngun: Gii thut lun ph thuc cht
ch vo cu trc d liu, do , khi thay i cu trc d liu, phi thay i gii thut,
ngha l phi vit li chng trnh.
Khng ph hp vi cc phn mm ln: t duy cu trc vi cc gii thut ch ph hp vi
cc bi ton nh, nm trong phm vi mt modul ca chng trnh. Vi d n phn mm
ln, lp trnh cu trc t ra khng hiu qu trong vic gii quyt mi quan h v m gia
cc modul ca phn mm.
Vn
Vn c bn ca lp trnh cu trc l bng cch no phn chia chng trnh chnh thnh cc
chng trnh con cho ph hp vi yu cu, chc nng v mc ch ca mi bi ton.
Thng thng, phn r bi ton trong lp trnh cu trc, ngi ta s dng phng php thit k
trn xung (top-down).
7
Phng php thit k trn xung (top-down)
Phng php thit k top-down tip cn bi ton theo hng t trn xung di, t tng quan n
chi tit. Theo , mt bi ton c chia thnh cc bi ton con nh hn. Mi bi ton con li
c chia nh tip, nu c th, thnh cc bi ton con nh hn na.
Qu trnh ny cn c gi l qu trnh lm mn dn. Qu trnh lm mn dn s dng li khi cc
bi ton con khng cn chia nh thm na. Ngha l khi mi bi ton con u c th gii quyt
bng mt chng trnh con vi mt gii thut n gin.
V d, s dng phng php top-down gii quyt bi ton l xy mt cn nh mi. Khi , ta
c th phn r bi ton theo cc bc nh sau:
mc th nht, chia bi ton xy nh thnh cc bi ton nh hn nh: lm mng, ct,
trn, xy tng, lp mi.
mc th hai, phn r cc cng vic mc th nht: vic lm mng nh c th phn r
tip thnh cc cng vic: o mng, gia c nn, lm khung st, b tng. Cng vic
ct c phn r thnh
mc th ba, phn r cc cng vic ca mc th hai: vic o mng c th phn chia tip
thnh cc cng vic: o c, cm mc, chng dy, o v kim tra mng. Vic gia c nn
c phn r thnh
Qu trnh phn r c th dng mc ny, bi v cc cng vic con thu c l: o c, cm mc,
chng dy, o c th thc hin c ngay, khng cn chia nh thm na.
Lu :
Cng s dng phng php top-down vi cng mt bi ton, nhng c th cho ra nhiu
kt qu khc nhau. Nguyn nhn l do s khc nhau trong tiu ch phn r mt bi ton
thnh cc bi ton con.
V d, vn p dng phng php top-down gii quyt bi ton xy nh, nhng nu s dng
mt cch khc phn chia bi ton, ta c th thu c kt qu khc bit so vi phng php ban
u:
mc th nht, chia bi ton xy nh thnh cc bi ton nh hn nh: lm phn g, lm
phn st, lm phn b tng v lm phn gch.
mc th hai, phn r cc cng vic mc th nht: vic lm g c th chia thnh cc
cng vic nh: x g, gia cng g, to khung, lp vo nh. Vic lm st c th chia nh
thnh
R rng, vi cch lm mn th ny, ta s thu c mt kt qu khc hn vi cch thc thc
hin phn trn.
1.2 PHNG PHP TIP CN HNG I TNG
1.2.1 Phng php lp trnh hng i tng
Xut pht t hai hn ch chnh ca phng php lp trnh cu trc:
Khng qun l c s thay i d liu khi c nhiu chng trnh cng thay i mt bin
chung. Vn ny c bit nghim trng khi cc ng dng ngy cng ln, ngi ta khng
th kim sot c s truy nhp n cc bin d liu chung.
8
Khng tit kim c ti nguyn con ngi: Gii thut gn lin vi cu trc d liu, nu
thay i cu trc d liu, s phi thay i gii thut, v do , phi vit li m chng
trnh t u.
khc phc c hai hn ch ny khi gii quyt cc bi ton ln, ngi ta xy dng mt
phng php tip cn mi, l phng php lp trnh hng i tng, vi hai mc ch chnh:
ng gi d liu hn ch s truy nhp t do vo d liu, khng qun l c.
Cho php s dng li m ngun, hn ch vic phi vit li m t u cho cc chng trnh.
Vic ng gi d liu c thc hin theo phng php tru tng ho i tng thnh lp t
thp ln cao nh sau:
Thu thp cc thuc tnh ca mi i tng, gn cc thuc tnh vo i tng tng ng.
Nhm cc i tng c cc thuc tnh tng t nhau thnh nhm, loi b bt cc thuc
tnh c bit, ch gi li cc thuc tnh chung nht. y c gi l qu trnh tru tng ho
i tng thnh lp.
ng gi d liu ca cc i tng vo lp tng ng. Mi thuc tnh ca i tng tr
thnh mt thuc tnh ca lp tng ng.
Vic truy nhp d liu c thc hin thng qua cc phng thc c trang b cho lp.
Khng c truy nhp t do trc tip n d liu.
Khi c thay i trong d liu ca i tng, ta ch cn thay i cc phng thc truy nhp
thuc tnh ca lp, m khng cn phi thay i m ngun ca cc chng trnh s dng
lp tng ng.
Vic cho php s dng li m ngun c thc hin thng qua c ch k tha trong lp trnh
hng i tng. Theo :
Cc lp c th c k tha nhau tn dng cc thuc tnh, cc phng thc ca nhau.
Trong lp dn xut (lp c k tha) c th s dng li cc phng thc ca lp c s
(lp b lp khc k tha) m khng cn thit phi ci t li m ngun.
Ngay c khi lp dn xut nh ngha li cc phng thc cho mnh, lp c s cng khng
b nh hng v khng phi sa li bt k mt on m ngun no.
Ngn ng lp trnh hng i tng ph bin hin nay l Java v C++. Tuy nhin, C++ mc d
cng c nhng c trng c bn ca lp trnh hng i tng nhng vn khng phi l ngn ng
lp trnh thun hng i tng. Java tht s l mt ngn ng lp trnh thun hng i tng.
c trng
Lp trnh hng i tng c hai c trng c bn:
ng gi d liu: d liu lun c t chc thnh cc thuc tnh ca lp i tng. Vic
truy nhp n d liu phi thng qua cc phng thc ca i tng lp.
S dng li m ngun: vic s dng li m ngun c th hin thng qua c ch k
tha. C ch ny cho php cc lp i tng c th k tha t cc lp i tng khc. Khi
, trong cc lp k tha, c th s dng cc phng thc (m ngun) ca cc lp b k
tha, m khng cn phi nh ngha li.
9
u im
Lp trnh hng i tng c mt s u im ni bt:
Khng cn nguy c d liu b thay i t do trong chng trnh. V d liu c ng
gi vo cc i tng. Nu mun truy nhp vo d liu phi thng qua cc phng thc
cho php ca i tng.
Khi thay i cu trc d liu ca mt i tng, khng cn thay i cc i m ngun ca
cc i tng khc, m ch cn thay i mt s hm thnh phn ca i tng b thay i.
iu ny hn ch s nh hng xu ca vic thay i d liu n cc i tng khc
trong chng trnh.
C th s dng li m ngun, tit kim ti nguyn. V nguyn tc k tha cho php cc
lp k tha s dng cc phng thc c k tha t lp khc nh nhng phng thc
ca chnh n, m khng cn thit phi nh ngha li.
Ph hp vi cc d n phn mm ln, phc tp.
1.2.2 Phng php phn tch v thit k hng i tng
Mt vn c bn t ra cho phng php hng i tng l t mt bi ton ban u, lm sao
thu c mt tp cc i tng, vi cc chc nng c phi hp vi nhau, p ng c yu
cu ca bi ton t ra?
Phng php phn tch thit k hng i tng ra i nhm tr li cho cu hi ny. Mc ch l
xy dng mt tp cc lp i tng tng ng vi mi bi ton, phng php ny tin hnh theo
hai pha chnh:
Pha phn tch: Chuyn i yu cu bi ton t ngn ng t nhin sang ngn ng m hnh.
Pha thit k: Chuyn i c t bi ton di dng ngn ng m hnh sang mt m hnh c
th c th ci t c.
Hai pha phn tch v thit k ny bao gm nhiu bc khc nhau:
M t bi ton
c t yu cu
Trch chn i tng
M hnh ho lp i tng
Thit k tng quan
Thit k chi tit.
Bc 1: M t bi ton
Bi ton ban u c pht biu di dng ngn ng t nhin, bao gm:
Mc ch, chc nng chung
Cc yu cu v thng tin d liu
Cc yu cu v chc nng thc hin
10
Bc 2: c t yu cu
Cc yu cu c hnh thc ho ln mt mc cao hn bng cch s dng ngn ng kiu kch bn
(scenario) m t. Trong mt kch bn, mi chc nng, mi hot ng c m t bng mt
kch bn, bao gm:
Cc tc nhn tham gia vo kch bn.
Vai tr ca mi tc nhn trong kch bn.
Th t cc hnh ng m mi tc nhn thc hin: khi no thc hin, tc ng vo tc nhn
no, thng tin no c trao i.
Qu trnh trn c tin hnh vi tt c cc chc nng yu cu ca h thng.
Bc 3: Trch chn i tng
Bc ny s tin hnh xut cc i tng c th c mt trong h thng:
Da vo cc kch bn c m t trong bc hai, chn ra cc tc nhn c xut hin
xut thnh cc i tng.
La chn cc i tng bng cch loi b cc tc nhn bn ngoi h thng, cc tc nhn
trng lp.
Cui cng, ta thu c tp cc i tng ca h thng.
Bc 4: M hnh ho lp i tng
Bc ny tin hnh tru tng ho i tng thnh cc lp:
Thu thp tt c cc thuc tnh ca mi i tng va thu thp c, da vo yu cu v
thng tin trong yu cu h thng (t bc 1).
Thu thp cc hnh ng m mi i tng cn thc hin, da vo cc kch bn m i
tng tng ng c tham gia (trong bc 2).
Nhm cc i tng tng t nhau, hoc c nhiu thuc tnh gn ging nhau.
Loi b mt s thuc tnh c bit, ring t ca mt s i tng trong nhm.
M hnh mi nhm i tng cn li thnh lp: Cc thuc tnh chung ca cc i tng
thnh thuc tnh ca lp, cc hnh ng ca cc i tng thnh phng thc ca lp.
Kt qu thu c mt tp cc lp i tng ban u ca h thng.
Bc 5: Thit k tng qut
Bc ny s tin hnh thit k v m, ngha l thit k mi quan h gia cc lp trong h thng:
Xc nh s tha k, nu c, gia cc lp: Nu hai lp c mt s thuc tnh chung, th
tch cc thuc tnh chung lm thnh mt lp c s, v hai lp ban u u dn xut t lp
c s . Thng thng, lp cc tru tng (chung nht) s lm lp c s, lp cng c th,
cng chi tit th lm lp dn xut (lp con, chu).
Xc nh tng tc, nu c, gia cc lp: Da vo cc kch bn c m t trong bc 2,
hai tc nhn c tng tc vi nhau th hai lp tng ng bc ny cng c tng tc vi
nhau.
Kt qu thu c ca bc ny l mt s quan h bn ngoi gia cc lp trong h thng.
11
Bc 6: Thit k chi tit
Bc ny s thc hin thit k mc vi m, ngha l thit k kin trc bn trong ca mi lp i
tng:
T chc d liu ca lp theo cc thuc tnh. Qui nh phm vi truy nhp cho tng thuc
tnh.
Thit k chi tit cch c x ca lp i tng thng qua cc phng thc ca lp: Xc
nh kiu d liu tr v, kiu tham s ca phng thc, m t thut ton chi tit cho tng
phng thc, nu cn.
Kt qu thu c ca bc ny l mt tp cc lp vi thit k chi tit kin trc bn trong.
Sau cc bc phn tch thit k hng i tng t mt yu cu ca bi ton ban u, ta thu c
mt m hnh h thng hng i tng chi tit:
C ci nhn tng quan, v m v h thng bng m hnh thit k tng quan, ch r s lng
cc lp i tng, mi quan h k tha v quan h tng tc gia cc lp i tng trong
h thng.
C ci nhn chi tit, vi m v h thng bng m hnh thit k chi tit. M hnh ny ch r
bn trong mi lp i tng: cc thuc tnh, cc phng thc vi kiu tr v v kiu tham
s, thut ton chi tit cho mi phng thc.
Sau pha phn tch v thit k hng i tng, ta thu c c t h thng di dng m hnh cc
lp: quan h gia cc lp v kin trc bn trong ca mi lp. y s l u vo cho pha tip theo,
pha lp trnh hng i tng, nh chng ta bit.
1.3 SO SNH HAI CCH TIP CN
Phng php tip cn hng i tng c bn cht hon ton khc vi phng php tip cn
truyn thng (phng php tip cn hng cu trc) trn nhiu mt:
Phng php m hnh bi ton khc nhau.
c trng khc nhau v ng gi
u / nhc im khc nhau.
Lnh vc ng dng khc nhau.
Khc nhau v phng php m hnh
Hai phng php ny khc nhau hon ton cch tip cn v m hnh bi ton, phng php
hng i tng tin hnh theo phng php t di ln trn, t thp ln cao, t c th n tru
tng. Trong khi , phng php cu trc tip cn theo phng php t trn xung di, t tng
quan n chi tit:
Phng php hng i tng bt u bng nhng i tng c th, tp hp cc thuc
tnh ca tng i tng. Sau , nhm cc i tng tng t nhau thnh nhm, loi b
cc thuc tnh qu c bit, ch gi li cc thuc tnh chung nht, nhm thnh lp. Cho nn,
qu trnh hnh thnh lp l qu trnh i t thp ln cao, t c th mc thp n tru
tng ho mc cao.
12
Trong khi , phng php hng cu trc li i theo chiu ngc li. Phng php ny
bt u t mt bi ton tng quan, mc khi qut cao, chia nh dn v lm mn dn cho
n khi thu c mt tp cc bi ton con, nh hn, c th hn, chi tit hn.
Khc nhau v c trng ng gi
Hai phng php tip cn ny cng c nhng c trng hon ton khc nhau:
Phng php hng i tng c c trng l d liu c ng gi hn ch truy nhp
t do trc tip vo d liu. Th hai l cho php s dng li m ngun tit kim ti
nguyn v cng sc lp trnh.
Trong khi , c trng ca phng php cu trc l cu trc d liu v gii thut v mi
quan h ph thuc cht nh ca gii thut vo cu trc d liu.
Khc nhau v u nhc im
Hai phng php ny cng c nhng u nhc im tri ngc nhau:
Phng php hng i tng c u im l bo v c d liu trnh b truy nhp trc
tip t do t bn ngoi, tit kim c ti nguyn v cng sc lp trnh do c th dng li
m ngun. Tuy nhin, phng php ny li kh phc tp, kh theo di c lung d liu
v hn na, gii thut khng phi l vn trng tm ca phng php ny.
Tri li, phng php hng cu trc li c u im l t duy gii thut r rng, d theo
di lung d liu, chng trnh n gin v d hiu. Tuy nhin, khng bo v c an
ton d liu trong chng trnh. Hn na, hn ch ln nht l s ph thuc cht ch ca
gii thut vo cu trc d liu, khin cho khi thay i cu trc d liu, thng phi thay
i gii thut, v do , phi vit li m cho chng trnh.
Khc nhau v lnh vc p dng
Do s khc nhau v cc c trng v s khc nhau v u nhc im, cho nn hai phng php
ny cng c s khc nhau ng k trong lnh vc p dng:
Phng php hng i tng thng c p dng cho cc bi ton ln, phc tp, c
nhiu lung d liu khc nhau, khng th qun l c bng phng php cu trc. Khi
, ngi ta dng phng php hng i tng tn dng kh nng bo v d liu
trnh b truy nhp t do. Hn na, tn dng kh nng dng li m ngun ca phng php
ny tit kim ti nguyn v cng sc.
Trong khi , phng php cu trc thng ph hp vi cc bi ton nh, c lung d liu
r rng, cn phi t duy gii thut r rng v ngi lp trnh vn c kh nng t qun l
c mi truy nhp n cc d liu ca chng trnh.
1.4 XU HNG PHT TRIN CA LP TRNH HNG I TNG
Lp trnh hng thnh phn
Xut pht t lp trnh hng i tng, t duy lp trnh hng thnh phn (component-oriented
programming) theo tng:
Gii quyt bi ton bng cch xy dng mt tp cc thnh phn (component) c tnh c
lp tng i vi nhau. Mi thnh phn m nhim mt phn cng vic nht nh.
13
Sau , ngi ta ghp cc thnh phn vi nhau thu c mt phn mm tho mn mt
tp cc yu cu xc nh.
Vi lp trnh hng thnh phn, ngi ta c th tin hnh lp trnh theo phng php sau:
Xy dng mt th vin cc thnh phn, mi thnh phn thc hin mt cng vic xc nh.
Khi cn pht trin mt phn mm c th, ngi ta ch cn chn nhng thnh phn c sn
trong th vin ghp li vi nhau. Ngi lp trnh ch phi pht trin thm cc thnh
phn mnh cn m cha c trong th vin.
Phng php ny c nhng u im rt ln:
Lp trnh vin c th chia s vi nhau nhng thnh phn mnh xy dng cho nhiu
ngi khc dng chung.
Khi cn, lp trnh vin c th lp ghp cc thnh phn c sn khc nhau to thnh cc
chng trnh c chc nng khc nhau. Tt c ch cn da trn cng ngh lp ghp thnh
phn, tit kim c rt nhiu cng sc lp trnh.
Trong xu hng lp trnh hng thnh phn, mt s phng php lp trnh khc ny sinh v
ang pht trin mnh m:
Lp trnh hng agent (agent-oriented programming)
Lp trnh hng aspect (aspect-oriented programming)
Lp trnh hng agent
Lp trnh hng agent c th xem l mt mc tru tng cao hn ca lp trnh hng thnh phn.
Trong , cc agent l cc thnh phn c kh nng hot ng c lp, t ch hon thnh cng
vic ca mnh. Hn na, cc agent c kh nng ch ng lin lc vi cc agent khc c th
phi hp, cng tc hay cnh tranh nhau hon thnh nhim v.
Lp trnh hng agent c hai c trng c bn:
Th nht l kh nng t ch ca mi agent hon thnh nhim v ring ca n.
Th hai l tnh t chc x hi gia cc agent, cho php cc agent phi hp, cng tc, cnh
tranh nhau hon thnh nhim v chung ca ton h thng.
Lp trnh hng aspect
Lp trnh hng aspect cng l mt xu hng ca lp trnh hng thnh phn. Theo , mi thnh
phn c nhim v hon thnh theo mt lung cng vic hoc mt kha cnh ca vn . Sau ,
tng hp cc thnh phn ca cc lung khc nhau, ta thu c gii php cho bi ton ca mnh.
Lp trnh hng aspect c c trng c bn:
Tnh ng gi theo lung cng vic, hoc ng gi theo kha cnh ca vn .
Tnh n iu theo lung, trong mt lung cng vic, cc nhim v c thc hin lin
tip nhau, tun t nh trong lp trnh tuyn tnh.
TNG KT CHNG 1
Ni dung chng 1 trnh by cc vn tng quan lin quan n phng php tip cn hng
i tng trong lp trnh:
Cc phng php tip cn truyn thng: lp trnh tuyn tnh v lp trnh cu trc.
14
Phng php tip cn hng i tng vi hai c trng c bn: ng gi d liu v s
dng li m ngun.
Lp trnh hng i tng, phng php phn tch v thit k h thng hng i tng.
So snh s khc bit ca phng php hng i tng vi cc phng php truyn thng
trn cc kha cnh: Cch tip cn bi ton, c trng, u nhc im v lnh vc p dng
ca mi phng php.
Hin nay, lp trnh hng thnh phn, lp trnh hng agent v lp trnh hng aspect tin
ho t lp trnh hng i tng ang l xu hng pht trin mnh m.

15
CHNG 2
NHNG KHI NIM C BN CA
LP TRNH HNG I TNG

Ni dung chng ny tp trung trnh by cc khi nim c bn ca lp trnh hng i tng:
i tng
Lp i tng
Vic tru tng ho i tng theo chc nng
Tru tng ho i tng theo d liu
K tha
ng gi
a hnh
Phng php ci t lp i tng
Gii thiu mt s ngn ng lp trnh hng i tng thng dng hin nay.
2.1 CC KHI NIM C BN
2.1.1 i tng
Trong lp trnh hng i tng, tt c cc thc th trong h thng u c coi l cc i tng
c th. i tng l mt thc th hot ng khi chng trnh ang chy.
V d:
1. Trong bi ton qun l bun bn xe hi ca mt ca hng kinh doanh, mi chic xe ang
c mt trong ca hng c coi l mt i tng. Chng hn, mt chic xe nhn hiu
Ford, mu trng, gi 5000$ l mt i tng.
2. Trong bi ton qun l nhn vin ca mt vn phng, mi nhn vin trong vn phng c
coi l mt i tng. Chng hn, nhn vin tn l Vinh, 25 tui lm phng hnh chnh
l mt i tng.
Mt i tng l mt thc th ang tn ti trong h thng v c xc nh bng ba yu t:
nh danh i tng: xc nh duy nht cho mi i tng trong h thng, nhm phn bit
cc i tng vi nhau.
Trng thi ca i tng: l s t hp ca cc gi tr ca cc thuc tnh m i tng ang
c.
Hot ng ca i tng: l cc hnh ng m i tng c kh nng thc hin c.
Trng thi hin ti ca i tng qui nh tnh cht c trng ca i tng. V d, nhn vin
trong v d trn c trng thi l:
Tn l Vinh
Tui l 25
V tr lm vic l phng hnh chnh.
16
Trong khi , trng thi ca chic xe trong ca hng l:
Nhn hiu xe l Ford
Mu sn xe l trng
Gi bn xe l 5000$
Mi i tng s thc hin mt s hnh ng. V d, i tng xe hi c kh nng thc hin
nhng hnh ng sau:
Khi ng.
Dng li.
Chy.
biu din i tng trong lp trnh hng i tng, ngi ta tru tng ho i tng to
nn khi nim lp i tng.
2.1.2 Lp i tng
Trong lp trnh hng i tng, i tng l mt thc th c th, tn ti trong h thng. Trong
khi , lp l mt khi nim tru tng, dng ch mt tp hp cc i tng c mt trong h
thng.
V d:
1. Trong bi ton qun l bun bn xe hi ca mt ca hng kinh doanh, mi chic xe ang
c mt trong ca hng c coi l mt i tng. Nhng khi nim Xe hi l mt lp
i tng dng ch tt c cc loi xe hi ca ca hng.
2. Trong bi ton qun l nhn vin ca mt vn phng, mi nhn vin trong vn phng c
coi l mt i tng. Nhng khi nim Nhn vin l mt lp i tng dng ch
chung chung cc nhn vin ca vn phng.
Lu :
Lp l mt khi nim, mang tnh tru tng, dng biu din mt tp cc i tng.
i tng l mt th hin c th ca lp, l mt thc th tn ti trong h thng.
Lp c dng biu din i tng, cho nn lp cng c thuc tnh v phng thc:
Thuc tnh ca lp tng ng vi thuc tnh ca cc i tng.
Phng thc ca lp tng ng vi cc hnh ng ca i tng.
V d, lp xe t c m t bng cc thuc tnh v phng thc:

Lp Xe t
Thuc tnh:
Nhn hiu xe
Mu xe
Gi xe
Cng sut xe (m lc)
Phng thc:
Khi ng xe
Chy xe
17
Dng xe
Tt my

Lu :
Mt lp c th c mt trong cc kh nng sau:
Hoc ch c thuc tnh, khng c phng thc.
Hoc ch c phng thc, khng c thuc tnh.
Hoc c c thuc tnh v phng thc, trng hp ny l ph bin nht.
c bit, lp khng c thuc tnh v phng thc no l cc lp tru tng. Cc lp ny
khng c i tng tng ng.
Lp v i tng
Lp v i tng, mc d c mi lin h tng ng ln nhau, nhng bn cht li khc nhau:
Lp l s tru tng ho ca cc i tng. Trong khi , i tng l mt th hin ca
lp.
i tng l mt thc th c th, c thc, tn ti trong h thng. Trong khi , lp l mt
khi nim tru tng, ch tn ti dng khi nim m t cc c tnh chung ca mt s
i tng.
Tt c cc i tng thuc v cng mt lp c cng cc thuc tnh v cc phng thc.
Mt lp l mt nguyn mu ca mt i tng. N xc nh cc hnh ng kh thi v cc
thuc tnh cn thit cho mt nhm cc i tng c th.
Ni chung, lp l khi nim tn ti khi pht trin h thng, mang tnh khi nim, tru tng.
Trong khi , i tng l mt thc th c th tn ti khi h thng ang hot ng.
2.1.3 Tru tng ho i tng theo chc nng
Tru tng ho i tng theo chc nng chnh l qu trnh m hnh ho phng thc ca lp
da trn cc hnh ng ca cc i tng. Qu trnh ny c tin hnh nh sau:
Tp hp tt c cc hnh ng c th c ca cc i tng.
Nhm cc i tng c cc hot ng tng t nhau, loi b bt cc hot ng c bit, to
thnh mt nhm chung.
Mi nhm i tng xut mt lp tng ng.
Cc hnh ng chung ca nhm i tng s cu thnh cc phng thc ca lp tng
ng.
V d, trong bi ton qun l ca hng bn t. Mi t c mt trong ca hng l mt i tng.
Mc d mi chic xe c mt s c im khc nhau v nhn hiu, gi xe, mu sc nhng c
chung cc hnh ng ca mt chic xe t l:
C th khi ng my.
C th chy.
C th dng li.
C th tt my.
18
Ngoi ra, mt s t xe c th thc hin mt s hnh ng c bit nh:
C th giu n pha
C th t bt n pha
C th t ng pht tn hiu bo ng.
Tuy nhin, khng phi xe no cng thc hin c cc hnh ng ny. Cho nn ta loi b cc
hnh ng c bit ca mt s xe, ch gi li cc hnh ng chung nht, m hnh thnh cc
phng thc ca i tng xe t tng ng vi cc hnh ng chung nht ca cc xe t.

Lp Xe t
Phng thc:
Khi ng xe
Chy xe
Dng xe
Tt my

2.1.4 Tru tng ho i tng theo d liu
Tru tng ho i tng theo d liu chnh l qu trnh m hnh ho cc thuc tnh ca lp da
trn cc thuc tnh ca cc i tng tng ng. Qu trnh ny c tin hnh nh sau:
Tp hp tt c cc thuc tnh c th c ca cc i tng.
Nhm cc i tng c cc thuc tnh tng t nhau, loi b bt cc thuc tnh c bit, to
thnh mt nhm chung.
Mi nhm i tng xut mt lp tng ng.
Cc thuc tnh chung ca nhm i tng s cu thnh cc thuc tnh tng ng ca lp
c xut.
V d, trong bi ton qun l ca hng bn t. Mi t c mt trong ca hng l mt i tng.
Mc d mi chic xe c mt s c im khc nhau v nhn hiu, gi xe, mu sc nhng c
chung cc thuc tnh ca mt chic xe t l:
Cc xe u c nhn hiu.
Cc xe u c mu sc
Cc xe u c gi bn
Cc xe u c cng sut ng c
Ngoi ra, mt s t xe c th c thm cc thuc tnh:
C xe c th c dn nghe nhc
C xe c th c mn hnh xem ti vi
C xe c lp knh chng nng, chng n
Tuy nhin, y l cc thuc tnh c bit ca mt s i tng xe, nn khng c xut thnh
thuc tnh ca lp t. Do , ta m hnh lp t vi cc thuc tnh chung nht ca cc t.


19
Lp Xe t
Thuc tnh:
Nhn hiu xe
Mu xe
Gi xe
Cng sut xe (m lc)

u im ca vic tru tng ha
Nhng u im ca vic tru tng ha l:
Tp trung vo vn cn quan tm
Xc nh nhng c tnh thit yu v nhng hnh ng cn thit
Gim thiu nhng chi tit khng cn thit
Vic tru tng ha d liu l cn thit, bi v khng th m t tt c cc hnh ng v cc thuc
tnh ca mt thc th. Vn mu cht l tp trung n nhng hnh vi ct yu v p dng chng
trong ng dng.
2.1.5 Khi nim k tha
Xt trng hp bi ton qun l nhn s v sinh vin ca mt trng i hc. Khi , ta c hai lp
i tng chnh l lp Nhn vin v lp Sinh vin:

Lp Nhn vin
Thuc tnh:
Tn
Ngy sinh
Gii tnh
Lng
Phng thc:
Nhp/xem tn
Nhp/xem ngy sinh
Nhp/xem gii tnh
Nhp/xem lng
Lp Sinh vin
Thuc tnh:
Tn
Ngy sinh
Gii tnh
Lp
Phng thc:
Nhp/xem tn
Nhp/xem ngy sinh
Nhp/xem gii tnh
Nhp/xem lp

Ta nhn thy rng hai lp ny c mt s thuc tnh v phng thc chung: tn, ngy sinh, gii
tnh. Tuy nhin, khng th loi b cc thuc tnh c bit gp chng thnh mt lp duy nht, v
cc thuc tnh lng nhn vin v lp ca sinh vin l cn thit cho vic qun l. Vn ny sinh
nh sau:
Ta phi vit m trng nhau n hai ln cho cc phng thc: nhp/xem tn, nhp/xem
ngy sinh, nhp/xem gii tnh. R rang iu ny rt tn cng sc.
Nu khi c s thay i v kiu d liu, chng hn kiu ngy sinh c qun l trong h
thng, ta phi sa li chng trnh hai ln.
20
trnh rc ri do cc vn ny sinh nh vy, lp trnh hng i tng s dng k thut k
tha nhm nhm cc phn ging nhau ca cc lp thnh mt lp mi, sau cho cc lp ban u
k tha li lp c to ra. Nh vy, mi lp tha k (lp dn xut, lp con) u c cc thuc tnh
v phng thc ca lp b tha k (lp c s, lp cha).
Quay li vi bi ton qun l trng i hc, cc thuc tnh v phng thc chung gia lp Nhn
vin v lp Sinh vin l:
Tn,
Ngy sinh,
Gii tnh,
Nhp/xem tn,
Nhp/xem ngy sinh
Nhp/xem gii tnh.
Ta tch phn chung ny thnh mt lp mc tru tng cao hn, lp Ngi. Lp Ngi s lm
lp cha ca lp Nhn vin v lp Sinh vin. Khi , cc lp tr thnh:

Lp Ngi
Thuc tnh:
Tn
Ngy sinh
Gii tnh
Phng thc:
Nhp/xem tn
Nhp/xem ngy sinh
Nhp/xem gii tnh
Lp Nhn vin k tha t lp Ngi
Thuc tnh:
Lng
Phng thc:
Nhp/xem lng
Lp Sinh vin k tha t lp Ngi
Thuc tnh:
Lp
Phng thc:
Nhp/xem lp

Nh vy, s k tha trong lp trnh hng i tng:
Cho php lp dn xut c th s dng cc thuc tnh v phng thc ca lp c s tng
t nh s dng cc thuc tnh v phng thc ca mnh.
Cho php vic ch cn ci t phng thc mt lp c s, m c th s dng c tt
c cc lp dn xut.
Cho php trnh s ci t trng lp m ngun ca chng trnh.
Cho php ch phi thay i mt ln khi cn phi thay i d liu ca cc lp.
2.1.6 Khi nim ng gi
Xt v d bi ton qun l nhn vin vn phng vi lp Nhn vin nh sau:

21
Lp Nhn vin
Thuc tnh:
Tn
Ngy sinh
Gii tnh
Phng ban
H s lng
Phng thc:
Tnh lng nhn vin

Khi , cch tnh lng cho nhn vin l khc nhau i vi mi ngi:
<Tin lng> = <H s lng> * <Lng c bn> * <T l phn trm>
Trong , t l phn trm l khc nhau cho mi phng ban, v d:
Phng k hoch l 105%
Phng hnh chnh l 100%
Phng nhn s l 110%
Khi , tu vo thuc tnh phng ban khc nhau m ta phi dng cng thc t l khc nhau tnh
lng cho mi nhn vin.
Tuy nhin, cch tnh c th ny l cng vic bn trong ca phng thc tnh tin lng ca lp
Nhn vin. Vi mi ng dng, khi to mt i tng c th ca lp nhn vin, ta ch cn truyn
cc tham s thuc tnh cho i tng, sau gi phng thc tnh tin lng cho i tng nhn
vin , ta s bit c tin lng ca nhn vin. Cch gi phng thc tnh tin lng l hon
ton ging nhau cho tt c cc i tng nhn vin ca vn phng.
S ging nhau v cch s dng phng thc cho cc i tng ca cng mt lp, mc d bn
trong phng thc c cc cch tnh ton khc nhau vi cc i tng khc nhau, c gi l tnh
ng gi d liu ca lp trnh hng i tng. Nh vy, tnh ng gi d liu ca lp trnh
hng i tng:
Cho php che du s ci t chi tit bn trong ca phng thc. Khi s dng ch cn gi
cc phng thc theo mt cch thng nht, mc d cc phng thc c th c ci t
khc nhau cho cc trng hp khc nhau.
Cho php che du d liu bn trong ca i tng. Khi s dng, ta khng bit c thc
s bn trong i tng c nhng g, ta ch thy c nhng g i tng cho php truy
nhp vo.
Cho php hn ch ti a vic sa li m chng trnh. Khi phi thay i cng thc tnh
ton ca mt phng thc, ta ch cn thay i m bn trong ca phng thc, m khng
phi thay i cc chng trnh gi n phng thc b thay i.
2.1.7 Khi nim a hnh
Tr li vi v d v qun l trng i hc, vi hai lp Nhn vin v lp Sinh vin, u k tha t
lp Ngi. Khi , ta thm vo mi lp mt phng thc show():
Phng thc show ca lp Ngi s gii thiu tn v tui ca ngi .
22
Phng thc show ca lp Nhn vin s gii thiu nhn vin c tin lng l bao nhiu
Phng thc show ca lp Sinh vin s gii thiu l sinh vin ang hc lp no.

Lp Ngi
Thuc tnh:
Tn
Ngy sinh
Gii tnh
Phng thc:
Nhp/xem tn
Nhp/xem ngy sinh
Nhp/xem gii tnh
show
Lp Nhn vin k tha t lp Ngi
Thuc tnh:
Lng
Phng thc:
Nhp/xem lng
show
Lp Sinh vin k tha t lp Ngi
Thuc tnh:
Lp
Phng thc:
Nhp/xem lp
show

Khi , nu trong h thng c cc i tng c th tng ng vi ba lp, th:
Khi ta gi hm show t i tng ca lp Ngi, s nhn c tn v tui ca ngi .
Khi ta gi phng thc show t i tng ca lp Nhn vin, s nhn c s tin lng
ca nhn vin .
Khi ta gi phng thc show t i tng ca lp Sinh vin, ta s bit c lp hc ca
sinh vin .
Vic ch cn gi cng mt phng thc, nhng t cc i tng khc nhau, s cho k qu khc
nhau c gi l tnh a hnh trong lp trnh hng i tng. Nh vy, tnh a hnh trong lp
trnh hng i tng:
Cho php cc lp c nh ngha cc phng thc trng nhau: cng tn, cng s lng
v kiu tham s, cng kiu tr v. Vic nh ngha phng thc trng nhau ca cc lp k
tha nhau cn c gi l s np chng phng thc.
Khi gi cc phng thc trng tn, da vo i tng ang gi m chng trnh s thc
hin phng thc ca lp tng ng, v do , s cho cc kt qu khc nhau.
2.2 SO SNH LP V CU TRC
Trong phn ny, chng ta s tin hnh so snh Class (Lp) v Structure (Cu trc) trn nhiu kha
cnh khc nhau:
Mc khi nim
Mc ch v chc nng
V u v nhc im
23
So snh mc khi nim
mc khi nim, Lp v cu trc hon ton khc nhau:
Lp l khi nim ch c trong lp trnh hng i tng; n c dng biu din mt
tp cc i tng tng t nhau.
Trong khi , Cu trc l khi nim ch tn ti trong lp trnh cu trc, khng phi l mt
khi nim ca lp trnh hng i tng. V trong lp trnh hng i tng, tt c cc
thc th u c coi l mt i tng, ngha l n phi l mt th hin c th ca mt lp
no . Do , trong lp trnh hng i tng, khng c khi nim Cu trc.
So snh v mc ch v chc nng
V mc ch, Lp v Cu trc u c chung mt mc ch ban u, l nhm mt tp hp cc
d liu li vi nhau x l ng b v thng nht: Cu trc nhm cc d liu hay phi i km
vi nhau li thnh mt nhm cho d x l. Tng t, Lp l tp hp mt s thuc tnh chung ca
i tng x l.
Tuy nhin, Lp v Cu trc cng c mt s khc bit trn kha cnh ny:
Lp ngoi mc ch nhm cc thuc tnh d liu ca i tng, cn nhm cc hot ng
ca i tng thnh cc phng thc ca Lp.
Trong khi , mc d cng c th cung cp cc hm trong Cu trc, nhng mc ch chnh
ca Cu trc ch l nhm d liu thnh cu trc cho d x l.
So snh v u nhc im
V c cng mc ch l nhm cc d liu li vi nhau x l, cho nn Lp c Cu trc c cng
u im l lm chng trnh gn gng, x l ng b v thng nht.
Tuy nhin, Lp cn c mt s u im m Cu trc khng c:
Lp c kh nng bo v d liu trnh b truy nhp t do t bn ngoi. Cc chng trnh
bn ngoi ch c th truy nhp vo d liu ca i tng thng qua cc phng thc do
Lp cung cp, khng th t do truy nhp. Trong khi , Cu trc mc du nhm d liu
vi nhau nhng khng c kh nng bo v d liu: Cc chng trnh bn ngoi vn c th
truy nhp t do vo cc thnh phn ca Cu trc.
Lp c kh nng ng gi hn ch ti a thay i khi phi sa li m chng trnh. Khi
c s thay i, ch cn thay i m ca mt phng thc, cc chng trnh bn ngoi s
dng phng thc u khng phi thay i. Trong khi , nu thay i mt thnh phn
ca Cu trc, ta phi thay i m ca tt c cc chng trnh s dng thnh phn ca
Cu trc.
Lp c th c k tha bi mt Lp khc, iu ny lm tng kh nng s dng li m
ngun ca chng trnh. Trong khi , Cu trc hon ton khng c c ch k tha, cho
nn nhiu khi phi vit li nhng on m ging nhau nhiu ln. iu ny va tn cng
sc, va khng an ton khi c s thay i mt trong nhng on m ging nhau .



24
2.3 THNH PHN PRIVATE V PUBLIC CA LP
bo v d liu trnh b truy nhp t do t bn ngoi, lp trnh hng i tng s dng cc t
kho quy nh phm vi truy nhp cc thuc tnh v phng thc ca lp. Mt cch tng qut, lp
trnh hng i tng chia ra hai mc truy nhp cc thnh phn lp:
Private: Truy nhp trong ni b lp.
Protected: Thnh phn c bo v, c hn ch truy nhp nh thnh phn private (s
c trnh by sau).
Public: Truy nhp t do t bn ngoi.
Thnh phn private
Thnh phn private l khu vc dnh ring cho lp, khng chia s vi bt k lp khc t bn ngoi.
Thnh phn private ch cho php truy nhp trong phm vi ni b lp: T phng thc vo cc
thuc tnh hoc gia cc phng thc ca lp vi nhau. Cc thnh phn private khng th truy
nhp t bn ngoi lp, cng nh t i tng khc.
Trong mt lp, thng thng cc thnh phn sau s c t vo khu vc private ca lp:
Tt c cc thuc tnh d liu ca lp. Cc thuc tnh d liu ca lp c t vo vng
private nhm bo v chng, trnh s truy nhp t do t bn ngoi.
Cc phng thc trung gian, c s dng nh cc bc tnh ton m cho cc phng
thc khc. Cc phng thc trung gian c t vo vng private thc hin vic ng
gi trong lp trnh hng i tng: Cc i tng, chng trnh bn ngoi khng cn, v
khng th bit cch tnh ton c th bn trong ca lp.
Thnh phn public
Thnh phn public l khu vc m Lp c th chia s vi tt c cc chng trnh v i tng bn
ngoi. Thnh phn public c th c truy nhp t bn trong ln bn ngoi lp:
Bn trong lp: t phng thc lp vo cc thuc tnh d liu ca lp, hoc gia cc
phng thc ca lp vi nhau.
Bn ngoi lp: T chng trnh bn ngoi hoc cc i tng khc vo cc phng thc
ca lp.
Trong mt lp, thng thng cc thnh phn sau s c t vo vng chia s public ca lp:
Cc phng thc nhp/xem (set/get) cc thuc tnh d liu ca lp. Cc phng thc
ny s cho php cc i tng bn ngoi truy nhp vo cc thuc tnh d liu ca lp mt
cch gin tip.
Cc phng thc cung cp chc nng hot ng, cch c x ca i tng i vi mi
trng bn ngoi. Cc phng thc ny th hin chc nng ca cc i tng lp.
2.4 MT S NGN NG LP TRNH HNG I TNG
Ni dung phn ny s trnh by mt s ngn ng lp trnh hng i tng thng dng hin nay:
Ngn ng lp trnh C++
Ngn ng lp trnh ASP.NET v C#.NET
25
Ngn ng lp trnh Java
2.4.1 C++
C++, ra i vo gia nhng nm 1980, l mt ngn ng lp trnh hng i tng c m rng
t ngn ng lp trnh cu trc C. Cho nn, C++ l ngn ng lp trnh na hng i tng, na
hng cu trc.
Nhng c trng hng i tng ca C++
Cho php nh ngha lp i tng.
Cho php ng gi d liu vo cc lp i tng. Cho php nh ngha phm vi truy nhp
d liu ca lp bng cc t kho phm vi.
Cho php k tha lp vi cc kiu k tha khc nhau tu vo t kho dn xut.
Cho php lp k tha s dng cc phng thc ca lp b k tha (trong phm vi quy
nh).
Cho php nh ngha chng phng thc trong lp k tha.
Nhng vi phm hng i tng ca C++
Nhng vi phm ny l do kt qu k tha t ngn ng C, mt ngn ng lp trnh thun cu trc.
Cho php nh ngha v s dng cc bin d liu t do.
Cho php nh ngha v s dng cc hm t do.
Ngay c khi d liu c ng gi vo lp, d liu vn c th truy nhp trc tip nh d
liu t do bi cc hm bn, lp bn (friend) trong C++.
2.4.2 ASP.NET v C#.NET
Cc ngn ng lp trnh .NET (cn c gi l .NET Frameworks) ca MicroSoft ra i vo cui
nhng nm 1990 cnh tranh vi ngn ng lp trnh Java. .NET l mt ngn ng hon ton
hng i tng, hn na, n cn cung cp mt giao din lp trnh ho thn thin v p mt
vi truyn thng lp trnh ko th ca MicroSoft.
Mt s c im ca ngn ng .NET:
L mt ngn ng hon ton hng i tng: Tt c cc thnh phn, cc thc th trong
chng trnh u c m hnh di dng mt lp nht nh. Khng c d liu t do v
hm t do trong chng trnh.
Cung cp giao din lp trnh ho: lp trnh vin ch cn ko v th cc i tng ho
cho ng dng ca mnh.
Cho php lp trnh vin t to ra cc th vin UserControl ca mnh. y l mt th vin
bao gm cc thnh phn c ngi dng t thit k giao din, vit m ngun, ng gi
v c th s dng li trong nhiu ng dng khc nhau, tu theo chc nng ca cc thnh
phn.
26
2.4.3 Java
Java l mt ngn ng lp trnh c Sun Microsystems gii thiu vo thng 6 nm 1995. Java
c xy dng trn nn tng ca C v C++: Java s dng c php ca C v c trng hng i
tng ca C++.
Mt s c im ca Java:
Java l mt ngn ng lp trnh hon ton hng i tng: Tt c cc thc th u c
coi l mt i tng, l mt th hin c th ca mt lp xc nh. Khng c d liu t do
v hm t do trong Java, tt c u c ng gi vo cc lp xc nh.
Java l ngn ng va bin dch va thng dch. u tin m ngun c bin dch thnh
dng bytecode; sau c thc thi trn tng loi my nh trnh thng dch. iu ny to
ra kh nng hot ng c lp vi nn tng phn cng ca cc ng dng Java.
Java cho php ngi dng t to cc i tng th vin JavaBeans ca mnh (tng t
nh cc thnh phn UserControl ca .NET). Cc i tng Bean s c s dng li nh
cc thnh phn c sn trong cc ng dng khc. iu ny m ra kh nng to ln tit
kim cng sc vit m ngun v kh nng xy dng cc k thut cho mt nn cng nghip
lp rp phn mm.
Ngn ng lp trnh hng i tng Java s c trnh by chi tit trong ton b phn 2 ca gio
trnh ny.
TNG KT CHNG 2
Ni dung chng 2 trnh by mt s khi nim c bn ca lp trnh hng i tng:
Khi nim i tng, dng ch cc thc th tn ti thc t trong cc ng dng hng
i tng.
Khi nim lp, mt s tru tng ho ca i tng, dng biu din i tng trong
lp trnh hng i tng. Cc thnh phn ca lp l thuc tnh (d liu) v phng thc
(hnh ng).
Qu trnh tru tng ho theo chc nng hnh thnh cc phng thc ca lp, th hin
cc hot ng ca i tng.
Qu trnh tru tng ho theo d liu hnh thnh cc thuc tnh ca lp, biu din cc
thuc tnh tng ng ca i tng.
Khi nim k tha trong lp trnh hng i tng, nhm hn ch vic trng lp m ngun
v tng kh nng s dng li m ngun ca chng trnh.
Khi nim ng gi trong lp trnh hng i tng, nhm hn ch ti a s thay i m
ngun. Ch cn thay i trong phng thc, cc chng trnh bn ngoi c s dng
phng thc khng cn phi thay i.
Khi nim a hnh, cho php gi cng mt phng thc, nhng vi cc i tng khc
nhau s c hiu qu khc nhau.
So snh Lp v Cu trc trn cc kha cnh khc nhau: khi nim, mc ch, chc nng v
u nhc im.
M t cc thnh phn nm trong cc vng khc nhau ca Lp: private v public.
27
Gii thiu mt s ngn ng lp trnh hng i tng thng dng hin nay: C++, .NET,
Java.
CU HI V BI TP CHNG 2
1. Trong s cc nhn nh sau, ci no ng, ci no sai:
a. i tng l mt thc th c th, tn ti thc t trong cc ng dng.
b. i tng l mt th hin c th ca Lp.
c. Lp l mt khi nim tru tng dng biu din cc i tng.
d. Lp l mt s tru tng ho ca i tng.
e. Lp v i tng c bn cht ging nhau.
f. Tru tng ho i tng theo chc nng to ra cc thuc tnh ca lp.
g. Tru tng ho i tng theo chc nng to ra cc phng thc ca lp.
h. Tru tng ho i tng theo d liu to ra cc thuc tnh ca lp.
i. Tru tng ho i tng theo d liu to ra cc phng thc ca lp.
j. K tha cho php hn ch s trng lp m ngun.
k. K tha cho php tng kh nng s dng li m ngun.
l. ng gi hn ch kh nng truy nhp d liu.
m. ng gi hn ch vic phi sa i m ngun.
n. a hnh cho php thc hin cng mt thao tc trn nhiu i tng khc nhau.
2. Lit k tt c cc thuc tnh v hnh ng ca i tng Xe t. xut lp Car ( t).
3. Lit k tt c cc thuc tnh v hnh ng ca i tng Xe but. xut lp Bus.
4. T hai lp Car v Bus ca bi 2 v bi 3. xut mt lp ng c (Engine) cho hai lp
trn k tha, trnh trng lp d liu gia hai lp Car v Bus.

28















PHN 2

LP TRNH HNG I TNG VI JAVA

29
CHNG 3
GII THIU V JAVA
Ni dung ca chng ny tp trung trnh by cc vn chnh v ngn ng lp trnh Java:
Lch s ra i v pht trin ca Java
Kin trc tng qut mt chng trnh xy dng trn Java
Cc ton t v cc cu trc d liu c bn trn Java
Cc cu trc lnh ca Java
3.1 LCH S PHT TRIN CA JAVA
3.1.1 Java
Nm 1991, mt nhm k s ca Sun Microsystems mun lp trnh iu khin cc thit b in
t nh tivi, my git, l nng Ban u, h nh dng C v C++ nhng trnh bin dch C/C++
li ph thuc vo tng loi CPU. Do , h bt tay vo xy dng mt ngn ng chy nhanh,
gn, hiu qu, c lp thit b v ngn ng Oak ra i v vo nm 1995, sau c i tn
thnh Java.
Ngn ng lp trnh Java c Sun Microsystems a ra gii thiu vo thng 6 nm 1995 v
nhanh chng tr thnh mt ngn ng lp trnh ca cc lp trnh vin chuyn nghip. Java c
xy dng da trn nn tng ca C v C++ ngha l Java s dng c php ca C v c trng
hng i tng ca C++. Java l ngn ng va bin dch va thng dch. u tin m ngun
c bin dch thnh dng bytecode. Sau c thc thi trn tng loi my nh trnh thng
dch. Mc tiu ca cc nh thit k Java l cho php ngi lp trnh vit chng trnh mt ln
nhng c th chy trn cc nn phn cng khc nhau.
Ngy nay, Java c s dng rng ri, khng ch vit cc ng dng trn my cc b hay trn
mng m cn xy dng cc trnh iu khin thit b di ng, PDA,
3.1.2 c trng ca ngn ng Java
Ngn ng Java c nhng c trng c bn sau:
n gin
Hng i tng
c lp phn cng v h iu hnh
Mnh m
Bo mt
Phn tn
a lung
Linh ng
n gin
Nhng ngi thit k mong mun pht trin mt ngn ng d hc v quen thuc vi a s ngi
lp trnh. Do vy Java loi b cc c trng phc tp ca C v C++ nh:
30
Loi b thao tc con tr, thao tc nh ngha chng ton t (operator overloading)
Khng cho php a k tha (Multi-inheritance) m s dng cc giao din (interface)
Khng s dng lnh goto cng nh file header (.h).
Loi b cu trc struct v union.
Hng i tng
Java l ngn ng lp trnh hon ton hng i tng:
Mi thc th trong h thng u c coi l mt i tng, tc l mt th hin c th ca
mt lp xc nh.
Tt c cc chng trnh u phi nm trong mt class nht nh.
Khng th dng Java vit mt chc nng m khng thuc vo bt k mt lp no. Tc
l Java khng cho php nh ngha d liu v hm t do trong chng trnh.
c lp phn cng v h iu hnh
i vi cc ngn ng lp trnh truyn thng nh C/C++, phng php bin dch c thc hin
nh sau (Hnh 3.1): Vi mi mt nn phn cng khc nhau, c mt trnh bin dch khc nhau
bin dch m ngun chng trnh cho ph hp vi nn phn cng y. Do vy, khi chy trn mt
nn phn cng khc, bt buc phi bin dch li m ngun.

Hnh 3.1 Cch bin dch truyn thng

i cc chng trnh vit bng Java, trnh bin dch Javac s bin dch m ngun thnh dng
bytecode. Sau , khi chy chng trnh trn cc nn phn cng khc nhau, my o Java dng
trnh thng dch Java chuyn m bytecode thnh dng chy c trn cc nn phn cng tng
ng. Do vy, khi thay i nn phn cng, khng phi bin dch li m ngun Java. Hnh 3.2 minh
ho qu trnh bin dch v thng dch m ngun Java.
Macintosh
compiler
compiler
compiler
IB
Sparc
31

Hnh 3.2 Dch chng trnh Java
Mnh m
Java l ngn ng yu cu cht ch v kiu d liu:
Kiu d liu phi c khai bo tng minh.
Java khng s dng con tr v cc php ton con tr.
Java kim tra vic truy nhp n mng, chui khi thc thi m bo rng cc truy nhp
khng ra ngoi gii hn kch thc mng.
Qu trnh cp pht, gii phng b nh cho bin c thc hin t ng, nh dch v thu
nht nhng i tng khng cn s dng na (garbage collection).
C ch by li ca Java gip n gin ha qa trnh x l li v hi phc sau li.
Bo mt
Java cung cp mt mi trng qun l thc thi chng trnh vi nhiu mc kim sot tnh an
ton:
mc th nht, d liu v cc phng thc c ng gi bn trong lp. Chng ch c
truy xut thng qua cc giao din m lp cung cp.
mc th hai, trnh bin dch kim sot m bo m l an ton, v tun theo cc
nguyn tc ca Java.
Mc th ba c m bo bi trnh thng dch. Chng kim tra xem bytecode c m bo
cc qui tc an ton trc khi thc thi.
Mc th t kim sot vic np cc lp vo b nh gim st vic vi phm gii hn truy
xut trc khi np vo h thng.
Phn tn
Java c thit k h tr cc ng dng chy trn mng bng cc lp Mng (java.net). Hn na,
Java h tr nhiu nn chy khc nhau nn chng c s dng rng ri nh l cng c pht trin
trn Internet, ni s dng nhiu nn khc nhau.
Macintosh
Trnh bin dch

Bytecode
c lp nn
(Platform
independent)


Trnh
thng dch Java

(Java Interpreter)
IB
Sparc

32
a lung
Chng trnh Java cung cp gii php a lung (Multithreading) thc thi cc cng vic cng
ng thi v ng b gia cc lung.
Linh ng
Java c thit k nh mt ngn ng ng p ng cho nhng mi trng m. Cc chng
trnh Java cha rt nhiu thng tin thc thi nhm kim sot v truy nhp i tng lc chy. iu
ny cho php kh nng lin kt ng m.
3.1.3 Ci t Java
Qu trnh ci t mi trng Java trn my bao gm ba bc:
Copy b ci t
Chy chng trnh ci t
Cp nht bin mi trng
Copy b ci t
C th copy t a CD hoc ti xung min ph ti a ch web site ca nhm Java:
http://www.java.sun.com/downloads/
Chy chng trnh ci t
Chy tp tin va copy (hoc va ti v). Chn th mc ci t, th mc mc nh l:
C:\jdk1.5 (vi phin bn JDK1.5)
Cp nht bin mi trng
Cp nht bin mi trng (PATH) gip vic thc thi v bin dch m Java c th tin hnh bt
c mt th mc no. cp nht bin PATH, cn thm ng dn y ca th mc java va
ci t (C:\jdk1.5\bin) vo cui ca gi tr bin ny.
i vi WindowsNT, WinXP khi ng Control Panel, chn System, chn
Environment (hoc click chut phi vo My Computer, chn Properties, chn
Advanced, click vo Environment Variables), click vo bin PATH trong phn
User Variables v System Variables. Sau , thm vo cui ni dung bin hin c
dng sau (phi c du chm phy):
;C:\jdk1.5\bin
i vi Windows98/95, chn START, chn RUN, nhp dng sysedit vo lnh, nhn
OK, chn ca s ca AUTOEXEC.BAT. Tm dng khai bo bin PATH, nu khng c,
thm vo mt dng mi theo mu: SET PATH=C:\jdk1.5\bin. Nu c sn bin PATH,
thm vo cui dng ny ni dung: ;C:\jdk1.5\bin



33
3.2 KIN TRC CHNG TRNH XY DNG TRN JAVA
3.2.1 Kin trc chng trnh Java
Dng c bn ca mt tp tin m ngun Java c cu trc nh sau :

package packageName; // Khai bo tn gi, nu c
import java.awt.*; // Khai bo tn th vin sn c, nu cn dng

class className // Khai bo tn lp
{
/* y l dng ghi ch */
int var; // Khai bo bin

public void methodName() // Khai bo tn phng thc
{
/* Phn thn ca phng thc */
statement (s); // Lnh thc hin
}
}

Mt tp m ngun Java c th c ba phn chnh:
Phn khai bo tn gi (khi) bng t kho package.
Phn khai bo th vin tham kho bng t kho import.
Phn khai bo ni dung lp bng t kho class.
Khai bo Package
Package c dng ng gi cc lp trong chng trnh li vi nhau thnh mt khi. y l
mt cch hu hiu lu tr cc lp gn ging nhau hoc c cng mt module thnh mt khi
thng nht.
C php khai bo tn gi bng t kho package:
package <Tn gi>;
t tn package trong chng trnh, ngi ta c th tin hnh nh t tn th mc trn a.
Ngha l bt du bng tn c phm vi ln, cho n cc tn c phm vi nh, cui cng l tn cc
gi trc tip cha cc lp. Phm vi t tn gi, trn thc t, c tin hnh theo th t phm vi
ln n nh nh sau:
Tn t chc
Tn cng ty
Tn d n
34
Tn modul trong d n
Tn cc chc nng trong modul.
V d:
Tn min ca cng ty l syz.com
Tn d n l pro
D n c hai modul l mod1 v mod2
Modul mod1 c hai chc nng l kt ni c s d liu connection v biu din d liu
bean.
Modul mod2 c hai chc nng l giao tip interface v x l yu cu process.
Khi , cu trc khi ca d n c m t nh hnh 3.3

Khi , trong chc nng bean c lp User, th phi khai bo tn khi trong lp ny nh sau:
package com.syz.pro.mod1.bean;
u im ca package:
Cho php nhm cc lp vo vi nhau thnh cc n v nh hn. Vic thao tc trn cc n
v khi s gn hn thao tc trn mt tp cc lp.
Trnh vic xung t khi t tn lp. V cc lp khng cng package th c th t tn
trng nhau. Khi s lng lp ca chng trnh qu ln ta c th trnh phi t tn khc
nhau cho cc lp bng cch t chng vo cc package khc nhau.
Cho php bo v cc lp. Khi chng trnh ln, vic chia nh chng trnh thnh cc
package s thun li hn cho vic qun l v pht trin.
Tn gi cn c dng nh danh lp trong ng dng.
Lu :
Dng lnh khai bo tn khi phi c t u tin trong tn tin m chng trnh.
com
syz
pro
mod1 mod2
connection bean interface process
Hnh 3.3: Kin trc khi ca d n
35
Ch c khai bo ti a mt tn khi i vi mi tp m ngun Java.
Cc tp tin ca cc lp nm cng gi ng dng phi c lu trong cng mt th mc (tn
th mc l tn khi) theo cu trc khi ca d n.
Tn khi nn t theo ch thng v tn khi s l tn th mc tng ng trong a,
trnh nhm ln vi tn cc tp tin l tn cc lp ca chng trnh.
Khi khng phn chia chng trnh thnh khi (chng trnh n gin), khng cn thit
phi khai bo tn khi u chng trnh.
Khai bo th vin
Khai bo th vin ch ra nhng th vin c nh ngha sn m chng trnh s tham kho
ti. C php khai bo th vin vi t kho import nh sau:
import <Tn th vin>;
Java chun cung cp mt s th vin nh sau:
java.lang: cung cp cc hm thao tc trn cc kiu d liu c bn, x l li v ngoi l, x
l vo ra trn cc thit b chun nh bn phm v mn hnh.
java.applet: cung cp cc hm cho xy dng cc applet (s trnh by trong Chng 6).
java.awt: cung cp cc hm cho xy dng cc ng dng ho vi cc thnh phn giao
din multi media (s trnh by chi tit trong Chng 6).
java.io: cung cp cc hm x l vo/ra trn cc thit b chun v cc thit b ngoi vi.
java.util: cung cp cc hm tin ch trong x l lin quan n cc kiu d liu c cu trc
nh Date, Stack, Vector.
V d, nu trong chng trnh cn n cc thao tc chuyn kiu i d liu tng minh (t kiu
string sang kiu int), th ta s phi tham kho th vin java.lang:
import java.lang.*;
Lu :
Nu mun khai bo tham kho nhiu th vin, phi khai bo tham kho mi th vin vi
mt t kho import.
Nu ch tham kho mt vi lp trong mt th vin, nn ch r tham kho lp no, thay v
phi khai bo tham kho c gi (bng k hiu *) v tham kho c gi s tng kch c tp
tin class sau khi bin dch.
Nu khng tham kho th vin no, khng cn thit phi khai bo cc tham kho vi t
kho import.
Khai bo lp
Phn th ba l phn khai bo lp v ni dung ca lp, phn ny lun bt buc phi c i vi mt
tp m ngun Java:
Khai bo tn lp vi t kho class.
Khi bo cc thuc tnh ca lp.
36
Khai bo cc phng thc ca lp
Vic khai bo lp vi cc thuc tnh v phng thc s c trnh by chi tit trong chng 4.
3.2.2 Chng trnh Java u tin
Chng trnh sau y cho php hin th mt thng ip (Nm trong tp m ngun First.java):

Chng trnh 3.1
package vidu.chuong3;
// y l chng trnh First.java
class First
{
public static void main(String args[])
{
System.out.println(Hello World);
}
}

bin dch m ngun, ta s dng trnh bin dch javac. Trnh bin dch xc nh tn ca file
ngun ti dng lnh nh m t di y (gi s ang th mc cha package vidu v bin mi
trng PATH c thit lp ng qui cch):
>javac vidu/chuong3/First.java
Trnh dch javac to ra file First.class cha cc m bytecodes. Nhng m ny cha th thc thi
c. chng trnh thc thi c ta cn dng trnh thng dch java interpreter vi lnh
java. Lnh c thc hin nh sau:
>javac vidu.chuong3.First
Kt qu s hin th trn mn hnh nh sau:
Hello World
3.2.3 Phn tch chng trnh u tin
Trong Java, tt c m lnh u phi c t chc vo trong mt lp nht nh. Do , mi tp tin
m ngun xc nh t nht mt lp Java v tn tp tin phi trng vi tn lp. Java phn bit ch
hoa v ch thng, cho nn tn tp tin ca chng trnh trn phi trng vi tn lp: First.java.
package vidu.chuong3;
y l dng khai bo tn khi ca chng trnh, v tn khi ca chng trnh c t theo hai
mc:
Mc th nht l kiu bi: v d (vidu) hoc bi tp (baitap).
Mc th hai l tn ca chng: chuong3, chuong4, chuong5, chuong6.
37
V y l v d, nm chng 3 nn thuc vo gi vidu.chuong3. ng thi, tp tin First.java s
nm trong th mc: ../vidu/chuong3/.
Chng trnh ny khng tham kho th vin no nn khng cn lnh import no.
// y l chng trnh First.java
K hiu // dng ch thch dng lnh. Trnh bin dch s b qua dng ch thch ny. Java h
tr hai loi ch thch:
Loi ch thch trn mt dng, dng //. Trnh bin dch s b qua ni dung bt u t k
hiu // cho n ht dng lnh cha n.
Loi ch thch trn nhiu dng c th bt u vi /* v kt thc vi */. Trnh bin
dch s b qua ni dung nm gia hai k hiu ny.
Dng k tip khai bo lp c tn First: Bt u vi t kho class, k n l tn lp
class First
Mt nh ngha lp nm trn vn gia hai ngoc mc m { v ng }. Cc ngoc ny nh
du bt u v kt thc mt khi lnh.
public static void main(String args[ ])
y l phng thc chnh, t y chng trnh bt u vic thc thi ca mnh. Tt c cc ng
dng java u s dng mt phng thc main ny.
T kho public l mt ch nh truy xut. N cho bit thnh vin ca lp c th c truy
xut t bt c u trong chng trnh.
T kho static cho php main c gi ti m khng cn to ra mt th hin (instance)
ca lp. N khng ph thuc vo cc th hin ca lp c to ra.
T kho void thng bo cho my tnh bit rng phng thc s khng tr li bt c gi tr
no khi thc thi chng trnh.
String args[] l tham s dng trong phng thc main. Khi khng c mt thng tin no
c chuyn vo main, phng thc c thc hin vi cc d liu rng khng c g
trong du ngoc n.
System.out.println(Hello World); Dng lnh ny hin th chui Hello World trn
mn hnh. Lnh println() cho php hin th chui c truyn vo ln mn hnh.
Truyn i s trong dng lnh
Chng trnh 3.2 minh ho cc tham s (argument) ca cc dng lnh c tip nhn nh th no
trong phng thc main.

38
Chng trnh 3.2
package vidu.chuong3;
class PassArgument{
public static void main(String args[])
{
System.out.println(This is what the main method received);
System.out.println(args[0]);
System.out.println(args[1]);
System.out.println(args[2]);
}
}

Bin dch chng trnh:
>javac PassArgumet.java
Thc thi chng trnh vi dng lnh:
>java PassArgument A 123 B1
S thu c trn mn hnh kt qu:
This is what the main method received
A
123
B1

3.3 CC KIU D LIU V TON T C BN TRN JAVA
3.3.1 Khai bo bin
C php khai bo bin:
dataType varName;
Trong , dataType l kiu d liu ca bin, varName l tn bin. Trong Java, vic t tn bin
phi tun theo cc quy tc sau:
Ch c bt u bng mt k t (ch), hoc mt du gch di , hoc mt k t dollar
Khng c khong trng gia tn
Bt u t k t th hai, c th dng cc k t (ch), ch s, du dollar, du gch di
Khng trng vi cc t kho
C phn bit ch hoa ch thng
39
Phm vi hot ng ca bin
Mt bin c phm vi hot ng trong ton b khi lnh m n c khai bo. Mt khi lnh bt
u bng du { v kt thc bng du }:
Nu bin c khai bo trong mt cu trc lnh iu khin, bin c phm vi hot ng
trong khi lnh tng ng.
Nu bin c khai bo trong mt phng thc (Khng nm trong khi lnh no), bin
c phm vi hot ng trong phng thc tng ng: c th c s dng trong tt c cc
khi lnh ca phng thc.
Nu bin c khai bo trong mt lp (Khng nm trong trong mt phng thc no),
bin c phm vi hot ng trong ton b lp tng ng: c th c s dng trong tt
c cc phng thc ca lp.
3.3.2 Kiu d liu
Trong Java, kiu d liu c chia thnh hai loi:
Cc kiu d liu c bn
Cc kiu d liu i tng
Kiu d liu c bn
Java cung cp cc kiu d liu c bn nh sau:
byte: Dng lu d liu kiu s nguyn c kch thc mt byte (8 bt). Phm vi biu din
gi tr t -128 n 127. Gi tr mc nh l 0.
char: Dng lu d liu kiu k t hoc s nguyn khng m c kch thc 2 byte (16 bt).
Phm vi biu din gi tr t 0 n u\ffff. Gi tr mc nh l 0.
boolean: Dng lu d liu ch c hai trng thi ng hoc sai ( ln ch c 1 bt). Phm vi
biu din gi tr l {True, False}. Gi tr mc nh l False.
short: Dng lu d liu c kiu s nguyn, kch c 2 byte (16 bt). Phm vi biu din gi
tr t - 32768 n 32767. Gi tr mc nh l 0.
int: Dng lu d liu c kiu s nguyn, kch c 4 byte (32 bt). Phm vi biu din gi
tr t -2,147,483,648 n 2,147,483,647. Gi tr mc nh l 0.
float: Dng lu d liu c kiu s thc, kch c 4 byte (32 bt). Gi tr mc nh l 0.0f.
double: Dng lu d liu c kiu s thc c kch thc ln n 8 byte. Gi tr mc nh l
0.00d
long: Dng lu d liu c kiu s nguyn c kch thc ln n 8 byte. Gi tr mc nh
l 0l.
Kiu d liu i tng
Trong Java, c 3 kiu d liu i tng:
Array: Mt mng ca cc d liu cng kiu
40
class: D liu kiu lp i tng do ngi dng nh ngha. Cha tp cc thuc tnh v
phng thc.
interface: D liu kiu lp giao tip do ngi dng nh ngha. Cha cc phng thc ca giao
tip.
p kiu (Type casting)
V d, nhiu khi gp tnh hung cn cng mt bin c dng integer vi mt bin c dng float.
x l tnh hung ny, Java s dng tnh nng p kiu (type casting) ca C/C++. on m sau
y thc hin php cng mt gi tr du phy ng (float) vi mt gi tr nguyn (integer).
float c = 35.8f;
int b = (int)c + 1;
u tin gi tr du phy ng c c i thnh gi tr nguyn 35. Sau n c cng vi 1 v
kt qu l gi tr 36 c lu vo b.
Trong Java c hai loi p kiu d liu:
Ni rng (widening): qu trnh lm trn s t kiu d liu c kch thc nh hn sang
kiu c kch thc ln hn. Kiu bin i ny khng lm mt thng tin. V d chuyn t
int sang float. Chuyn kiu loi ny c th c thc hin ngm nh bi trnh bin dch.
Thu hp (narrowwing): qu trnh lm trn s t kiu d liu c kch thc ln hn sang
kiu c kch thc nh hn. Kiu bin i ny c th lm mt thng tin nh v d trn.
Chuyn kiu loi ny khng th thc hin ngm nh bi trnh bin dch, ngi dng phi
thc hin chuyn kiu tng minh.
3.3.3 Cc ton t
Java cung cp cc dng ton t sau:
Ton t s hc
Ton t bit
Ton t quan h
Ton t logic
Ton t iu kin
Ton t gn
Ton t s hc
Cc ton hng ca cc ton t s hc phi dng s. Cc ton hng kiu boolean khng s dng
c, song cc ton hng k t cho php s dng loi ton t ny. Mt vi kiu ton t c lit
k trong bng di y.
Ton t M t
+ Cng.
Tr v gi tr tng hai ton hng
- Tr
41
Tr v kt qu ca php tr.
* Nhn
Tr v gi tr l tch hai ton hng.
/ Chia
Tr v gi tr l thng ca php chia
% Php ly modul
Gi tr tr v l phn d ca php chia
++ Tng dn
Tng gi tr ca bin ln 1. V d a++ tng ng vi a = a + 1
-- Gim dn
Gim gi tr ca bin 1 n v. V d a-- tng ng vi a = a - 1
+= Cng v gn gi tr
Cng cc gi tr ca ton hng bn tri vo ton hng bn phi v gn gi tr
tr v vo ton hng bn tri. V d c += a tng ng c = c + a
-= Tr v gn gi tr
Tr cc gi tr ca ton hng bn tri vo ton ton hng bn phi v gn gi
tr tr v vo ton hng bn tri. V d c -= a tng ng vi c = c - a
*= Nhn v gn
Nhn cc gi tr ca ton hng bn tri vi ton ton hng bn phi v gn gi
tr tr v vo ton hng bn tri. V d c *= a tng ng vi c = c*a
/= Chia v gn
Chia gi tr ca ton hng bn tri cho ton ton hng bn phi v gn gi tr
tr v vo ton hng bn tri. V d c /= a tng ng vi c = c/a
%= Ly s d v gn
Chia gi tr ca ton hng bn tri cho ton ton hng bn phi v gn gi tr
s d vo ton hng bn tri. V d c %= a tng ng vi c = c%a
Bng 3.1 Cc ton t s hc
Ton t Bit
Cc ton t dng bit cho php ta thao tc trn tng bit ring bit trong cc kiu d liu nguyn
thu.
Ton
t
M t
~ Ph nh bit (NOT)
Tr v gi tr ph nh ca mt bt.
& Ton t AND bt
Tr v gi tr l 1 nu cc ton hng l 1 v 0 trong cc trng hp khc
| Ton t OR bt
Tr v gi tr l 1 nu mt trong cc ton hng l 1 v 0 trong cc trng hp khc.
42
^ Ton t Exclusive OR bt
Tr v gi tr l 1 nu ch mt trong cc ton hng l 1 v tr v 0 trong cc trng
hp khc.
>> Dch sang phi bt
Chuyn ton b cc bt cu mt s sang phi mt v tr, gi nguyn du ca s m.
Ton hng bn tri l s b dch cn s bn phi ch s v tr m cc bt cn dch.
<< Dch sang tri bt
Chuyn ton b cc bt cu mt s sang tri mt v tr, gi nguyn du cu s m.
Ton hng bn tri l s b dch cn s bn phi ch s v tr m cc bt cn dch.
Bng 3.2 Cc ton t Bit
Cc ton t quan h
Cc ton t quan h kim tra mi quan h gia hai ton hng. Kt qu ca mt biu thc c dng
cc ton t quan h l nhng gi tr Boolean (logic ng hoc sai). Cc ton t quan h c
s dng trong cc cu trc iu khin.
Ton
t
M t
= = So snh bng
Ton t ny kim tra s tng ng ca hai ton hng
!= So snh khc
Kim tra s khc nhau ca hai ton hng
> Ln hn
Kim tra gi tr ca ton hng bn phi ln hn ton hng bn tri hay khng
< Nh hn
Kim tra gi tr ca ton hng bn phi c nh hn ton hng bn tri hay khng
>= Ln hn hoc bng
Kim tra gi tr ca ton hng bn phi c ln hn hoc bng ton hng bn tri hay
khng
<= Nh hn hoc bng
Kim tra gi tr ca ton hng bn phi c nh hn hoc bng ton hng bn tri hay
khng
Bng 3.3 Cc ton t quan h
Cc ton t logic
Cc ton t logic lm vic vi cc ton hng Boolean. Mt vi ton t kiu ny c ch ra di
y
Ton t M t
&& V (AND)
Tr v mt gi tr ng (True) nu ch khi c hai ton t c gi tr True
43
|| Hoc (OR)
Tr v gi tr True nu t nht mt gi tr l True
^ XOR
Tr v gi tr True nu v ch nu ch mt trong cc gi tr l True, cc
trng hp cn li cho gi tr False (sai)
! Ton hng n t NOT. Chuyn gi tr t True sang False v ngc li.
Bng 3.4 Cc ton t logic
Cc ton t iu kin
Ton t iu kin l mt loi ton t c bit v n bao gm ba thnh phn cu thnh biu thc
iu kin. C php:
<biu thc 1> ? <biu thc 2> : <biu thc 3>;
biu thc 1: Biu thc logic. Tr tr v gi tr True hoc False
biu thc 2: L gi tr tr v nu <biu thc 1> xc nh l True
biu thc 3: L gi tr tr v nu <biu thc 1> xc nh l False
Ton t gn
Ton t gn (=) dng gn mt gi tr vo mt bin v c th gn nhiu gi tr cho nhiu bin
cng mt lc. V d on lnh sau gn mt gi tr cho bin var v gi tr ny li c gn cho
nhiu bin trn mt dng lnh n.
int var = 20;
int p,q,r,s;
p=q=r=s=var;
Dng lnh cui cng c thc hin t phi qua tri. u tin gi tr bin var c gn cho s,
sau gi tr ca s c gn cho r v c tip nh vy.
Th t u tin ca cc ton t
Cc biu thc c vit ra ni chung gm nhiu ton t. Th t u tin quyt nh trt t thc
hin cc ton t trn cc biu thc. Bng di y lit k th t thc hin cc ton t trong Java
Th t Ton t
1. Cc ton t n nh +,-,++,--
2. Cc ton t s hc v cc ton t dch nh *,/,+,-,<<,>>
3. Cc ton t quan h nh >,<,>=,<=,= =,!=
4. Cc ton t logic v Bit nh &&,||,&,|,^
5. Cc ton t gn nh =,*=,/=,+=,-=
Bng 3.5 Th t u tin cc ton t
Thay i th t u tin
thay i th t u tin trn mt biu thc, bn c th s dng du ngoc n ():
44
Phn c gii hn trong ngoc n c thc hin trc.
Nu dng nhiu ngoc n lng nhau th ton t nm trong ngoc n pha trong s thc
thi trc, sau n cc vng pha ngoi.
Trong phm vi mt cp ngoc n th quy tc th t u tin vn gi nguyn tc dng.
3.4 CC CU TRC LNH TRN JAVA
Java cung cp hai loi cu trc iu khin:
iu khin r nhnh
Mnh if-else
Mnh swich-case
Vng lp (Loops)
Vng lp while
Vng lp do-while
Vng lp for
3.4.1 Cu lnh if-else
Cu lnh if-else kim tra gi tr dng boolean ca iu kin. Nu gi tr iu kin l True th ch
c khi lnh sau if s c thc hin, nu l False th ch c khi lnh sau else c thc hin. C
php:
if (conditon)
{
action1 statements;
}
else
{
action2 statements;
}
Condition: Biu thc boolean nh ton t so snh.
action 1: Khi lnh c thc thi khi gi tr iu kin l True
action 2: Khi lnh c thc thi nu iu kin tr v gi tr False
on chng trnh sau kim tra xem cc s c chia ht cho 5 hay khng.

Chng trnh 3.3
package vidu.chuong3;
class CheckNumber
{
public static void main(String args[])
45
{
int num = 10;
if(num%5 == 0)
System.out.println (num + is divisable for 5!);
else
System.out.println (num + is indivisable for 5!);
}
}

on chng trnh trn num c gn gi tr nguyn l 10. Trong cu lnh if-else iu kin
num %5 tr v gi tr 0 v iu kin thc hin l True. Thng bo 10 is divisable for 5! c in
ra. Lu rng v ch c mt cu lnh c vit trong on if v else, bi vy khng cn thit
phi c a vo du ngoc mc { v }.
3.4.2 Cu lnh switch-case
Khi lnh switch-case c th c s dng thay th cu lnh if-else trong trng hp mt biu
thc cho ra nhiu kt qu. C php:
swich (expression)
{
case value1: action 1 statement;
break;
case value2: action 2 statement;
break;

case valueN: actionN statement;
break;
default: default_action statement;
}
expression - Bin cha mt gi tr xc nh
value1,value 2,.valueN: Cc gi tr hng s ph hp vi gi tr trn bin expression .
action1,action2actionN: Khi lnh c thc thi khi trng hp tng ng c gi tr True
break: T kho c s dng b qua tt c cc cu lnh sau v ginh quyn iu khin
cho cu trc bn ngoi switch
default: T kha tu chn c s dng ch r cc cu lnh no c thc hin ch khi tt
c cc trng hp nhn gi tr False
default - action: Khi lnh c thc hin ch khi tt c cc trng hp nhn gi tr False
on chng trnh sau xc nh gi tr trong mt bin nguyn v hin th ngy trong tun c
th hin di dng chui. kim tra cc gi tr nm trong khong t 0 n 6, chng trnh s
thng bo li nu nm ngoi phm vi trn.
46
Chng trnh 3.4
package vidu.chuong3;
class SwitchDemo
{
public static void main(String agrs[])
{
int day = 2;
switch(day)
{
case 0 : System.out.println(Sunday);
break;
case 1 : System.out.println(Monday);
break;
case 2 : System.out.println(Tuesday);
break;
case 3 : System.out.println(Wednesday);
break;
case 4 : System.out.println(Thursday);
break;
case 5: System.out.println(Friday);
break;
case 6 : System.out.println(Satuday);
break;
default:
System.out.println(Invalid day of week);
}
}
}
Nu gi tr ca bn day l 2, chng trnh s hin th Tuesday, v c tip nh vy .
3.4.3 Vng lp While
Vng lp while thc thi khi lnh khi iu kin thc thi vn l True v dng li khi iu kin thc
thi nhn gi tr False. C php:
while(condition)
{
action statements;
}
condition: c gi tr bool; vng lp s tip tc cho nu iu kin vn c gi tr True.
action statement: Khi lnh c thc hin nu condition nhn gi tr True
on chng trnh sau tnh tng ca 5 s t nhin u tin dng cu trc while.
47

Chng trnh 3.5
package vidu.chuong3;
class WhileDemo
{
public static void main(String args[])
{
int a = 5, sum = 1;
while (a >= 1)
{
sum +=a;
a--;
}
System.out.println(The sum is + sum);
}
}

v d trn, vng lp c thc thi cho n khi iu kin a>=1 l True. Bin a c khai bo
bn ngoi vng lp v c gn gi tr l 5. Cui mi vng lp, gi tri ca a gim i 1. Sau nm
vng gi tr ca a bng 0. iu kin tr v gi tr False v vng lp kt thc. Kt qu s c hin
th The sum is 15
3.4.4 Vng lp do-while
Vng lp do-while thc thi khi lnh khi m iu kin l True, tng t nh vng lp while,
ngoi tr do-while thc hin lnh t nht mt ln ngay c khi iu kin l False. C php:
do{
action statements;
}while(condition);
condition: Biu thc bool; vng lp s tip tc khi m iu kin vn c gi tr True.
action statement: Khi lnh lun c thc hin ln th nht, t vng lp th hai, chng
c thc hin khi condition nhn gi tr True.
V d sau tnh tng ca 5 s t nhin u tin dng cu trc do-while.

Chng trnh 3.6
package vidu.chuong3;
class DoWhileDemo
{
public static void main(String args[])
{
int a = 1, sum = 0;
do{
48
sum += a;
a++;
}while (a <= 5);
System.out.println(Sum of 1 to 5 is + sum);
}
}

Bin a c khi to vi gi tr 1, sau n va c dng lm bin chy (tng ln 1 sau mi ln
lp) va c dng cng dn vo bin sum. Ti thi im kt thc, chng trnh s in ra Sum
of 1 to 5 is 15.
3.4.5 Vng lp for
Vng lp for cung cp mt dng kt hp tt c cc c im chung ca tt c cc loi vng lp:
gi tr khi to ca bin chy, iu kin dng ca vng lp v lnh thay i gi tr ca bin chy.
C php:
for(initialization statements; condition; increment statements)
{
action statements;
}
initialization statements: khi to gi tr ban u cho cc bin chy, cc lnh khi to c
phn cch nhau bi du phy v ch thc hin duy nht mt ln vo thi im bt u ca
vng lp.
condition: Biu thc bool; vng lp s tip tc cho n khi no iu kin c gi tr False.
increment statements: Cc cu lnh thay i gi tr ca bin chy. Cc lnh ny lun c
thc hin sau mi ln thc hin khi lnh trong vng lp. Cc lnh phn bit nhau bi du
phy.
on chng trnh sau hin thi tng ca 5 s u tin dng vng lp for.

Chng trnh 3.7
package vidu.chuong3;
class ForDemo
{
public static void main(String args[])
{
int sum = 0;
for (int i=1; i<=5; i++)
sum += i;
System.out.println (The sum is + sum);
}
}
49

v d trn, i v sum l hai bin c gn cc gi tr u l 1 v 0 tng ng. iu kin c
kim tra v khi n cn nhn gi tr True, cu lnh tc ng trong vng lp c thc hin. Tip
theo gi tr ca i c tng ln 2 to ra s chn tip theo. Mt ln na, iu kin li c kim
tra v cu lnh tc ng li c thc hin. Sau nm vng, i tng ln 6, iu kin tr v gi tr
False v vng lp kt thc. Thng bo: The sum is 15 c hin th.
3.5 CASE STUDY I
By gi, p dng cc ni dung hc trong chng ny vit mt chng trnh tnh chu vi v
din tch ca mt hnh ch nht c kch thc x,y vi yu cu:
Kch thc x, y nhp t tham s dng lnh.
Phi kim tra x, y l cc s nguyn dng hay khng trc khi tnh ton.
In kt qu tnh ton ra mn hnh
y l on chng trnh thc hin bi ton ny.

50
Chng trnh 3.8
package vidu.chuong3;

import java.awt.*;
import java.lang.*;

class RectangleDemo
{
public static void main(String args[])
{
//khai bo cc bin lu gi kch thc ca hnh ch nht
int x = 0, y = 0;

/*c cc kch thc t tham s dng lnh*/
//nu truyn hai tham s th mi tnh tip
if(args.length >= 2)
{
//chuyn kiu t String sang integer
x = Integer.parseInt(args[0]);
y = Integer.parseInt(args[1]);
}

/*Tinh chu vi v din tch hnh ch nht*/
//nu c hai tham s u dng th mi tnh
if(x>0 && y>0)
{
//tnh chu vi
int chuvi = 2*(x + y);
System.out.println (Chu vi l + chuvi);
//tnh din tch
int dientich = x*y;
System.out.println (Din tch l + dientich);
}
else
System.out.println (Cc tham s khng ng!);
}
}


Sau khi bin dch chng trnh3.8 (tp tin c tn RectangleDemo.java), ta chy t ca s dng
lnh:
>java RectangleDemo 10 20
51
S thu c kt qu:
Chu vi l: 60
Din tch l: 200
Nu ch g ca s dng lnh:
>java RectangleDemo
Th s nhn c mt thng bo li:
Cc tham s khng ng!
TNG KT CHNG 3
Ni dung chng 3 trnh by cc ni dung c bn v c php ngn ng lp trnh Java:
Tt c cc lnh ca java phi c t chc vo trong mt lp nht nh. Tn tp tin m
ngun phi trng vi tn lp.
Lnh package c dng khai bo tn gi ca lp.
Lnh import c s dng trong chng trnh truy cp cc gi th vin Java.
Lnh class c dng khai bo tn lp
Tn lp, tn phng thc, tn hng v tn bin trong java phi tun theo quy tc t tn
ca java.
ng dng Java c mt lp cha phng thc main. Cc tham s c th c truyn vo
phng thc main nh cc tham s lnh (command line parameters).
Java cung cp cc dng ton t:
- Cc ton t s hc
- Cc ton t bit
- Cc ton t quan h
- Cc ton t logic
- Ton t u kin
- Ton t gn
Java cung cp cc cu trc iu khin lnh:
- if-else
- switch
- for
- while
- do while
CU HI V BI TP CHNG 3
1. Trong cc tn sau, tn no c th dng lm tn bin trong java:
a. _123
b. a$
52
c. 1abc
d. class
e. vi du
f. $123
2. Mun lu gi mt bin s nguyn dng m c gi tr ln nht l mt triu th dng kiu d
liu no l tit kim b nh nht?
3. Mun lu gi mt bin s nguyn m m c gi tr nh nht l m mt t th dng kiu d liu
no l tit kim b nh nht?
4. Trong cu trc lnh if-else n (1 if v 1 else) th c t nht mt khi lnh (ca if hoc ca
else) c thc hin. ng hay sai?
5. Trong cu trc lnh switch-case, khi khng dng default th c t nht mt khi lnh c
thc hin. ng hay sai?
6. Trong cu trc lnh switch-case, khi dng default th c t nht mt khi lnh c thc
hin. ng hay sai?
7. Trong cu trc lnh while, khi lnh c thc hin t nht mt ln ngay c khi iu kin c
gi tr False. ng hay sai?
8. Trong cu trc lnh do-while, khi lnh c thc hin t nht mt ln ngay c khi iu kin
c gi tr False. ng hay sai?
9. Trong cu trc lnh for, khi lnh c thc hin t nht mt ln ngay c khi iu kin c gi
tr False. ng hay sai?
10. Cho bit kt qu thu c khi thc hin on chng trnh sau?
class me{
public static void main(String args[]){
int sales = 820;
int profit = 200;
System.out.println((sale +profit)/10*5);
}
}
11. Cho bit on chng trnh sau thc hin vng lp bao nhiu ln v kt qu in ra l g?
class me{
public static void main(String args[]){
int i = 0;
int sum = 0;
do{
sum += i;
i++;
}while(i <= 10);
System.out.println(sum);
}
}
12. Cho bit on chng trnh sau thc hin vng lp bao nhiu ln v kt qu in ra l g?
class me{
53
public static void main(String args[]){
int i = 5;
int sum = 0;
do{
sum += i;
i++;
}while(i < 5);
System.out.println(sum);
}
}
13. Cho bit hai on chng trnh sau in ra kt qu ging hay khc nhau?
class me1{
public static void main(String args[]){
int i = 0;
int sum = 0;
for(i=0; i<5; i++){
sum += i;
}
System.out.println(sum);
}
}
v:
class me2{
public static void main(String args[]){
int i = 0;
int sum = 0;
for( ; i<5; i++){
sum += i;
}
System.out.println(sum);
}
}
14. Vit chng trnh tnh tng cc s chn nm trong khong 1 n 100.
15. Vit chng trnh hin th tng cc bi s ca 7 nm gia 1 v 100.
16. Vit chng trnh tm giai tha ca n (n>0), n nhp t tham s dng lnh.
17. Vit chng trnh tm bi s chung nh nht ca m v n (m,n>0), m v n c nhp t tham
s dng lnh.
18. Vit chng trnh tm c s chung ln nht ca m v n (m,n>0), m v n c nhp t tham
s dng lnh.
19. Vit chng trnh tm s Fibonaci th n (n>2), n nhp t tham s dng lnh. Bit rng s
Fibonaci c tnh theo cng thc: F(n) = F(n-1) + F(n-2) vi n>=2 v F(0) = F(1) = 1.
54
CHNG 4
K THA V A HNH TRN JAVA
Ni dung ca chng ny tp trung trnh by cc c trng hng i tng ca ngn ng Java:
K tha n
K tha kp
Cc lp tru tng
a hnh
4.1 K THA N
4.1.1 Lp
Java coi lp l mt khun mu (Template) ca mt i tng, trong lp cha cc thuc tnh v
cc phng thc hot ng ca i tng.
Khai bo lp
Mt lp c khai bo vi c php:
<tnh cht> class <tn lp>
{
}
Lp trong java c ba tnh cht c trng bi ba t kho:
public: Lp thng thng, c th c truy cp t cc gi (package) khc. public l gi
tr mc nh cho tnh cht ca lp.
final: Khai bo lp hng, lp ny khng th to dn xut. Tc l khng c lp no k tha
c t cc lp c tnh cht final.
abstract: Khai bo lp tru tng, lp ny ch c php cha cc phng thc tru
tng. Hn na, khng th to cc th hin (Instance) ca cc lp tru tng bng ton t
new nh cc lp thng thng.
Chng trnh 4.1 khai bo mt lp thng thng vi kiu mc nh l public vi dng khai bo.

Chng trnh 4.1
package vidu.chuong4;
class Person
{
}

S dng lp
Lp c s dng khi chng trnh cn mt i tng c kiu ca lp . Khi , i tng c
khai bo da vo ton t new:
<tn lp> <tn i tng> = new <tn lp>();
55
V d, mun to mt i tng c kiu l lp Person trong chng trnh 4.1, ta dng lnh sau:
Person myClass = new Person();
Khai bo thuc tnh ca lp
Thuc tnh ca lp c khai bo theo c php:
<tnh cht> <kiu d liu> <tn thuc tnh>;
Kiu d liu: c th l cc kiu d liu c bn sn c ca java, c th l cc lp do ngi
dng t nh ngha.
Tn thuc tnh: c t tn theo quy tc t tn bin ca java.
Tnh cht: Cc thuc tnh v phng thc ca lp c cc tnh cht c c trng bi cc
t kho sau (gi tr mc nh l public):
- public: c th c truy cp t bn ngoi lp nh ngha.
- protected: ch c truy cp t lp nh ngha v cc lp k tha t lp .
- private: ch c truy cp trong phm vi bn thn lp nh ngha.
- static: c dng chung cho mt th hin ca lp, c th c truy cp trc tip
bng <tn lp>.<tn thuc tnh> m khng cn khi to mt th hin ca lp.
- abstract: nh ngha mt thuc tnh tru tng. Thuc tnh ny khng th truy
nhp trong lp nhng c th b nh ngha chng cc lp k tha.
- final: mt thuc tnh hng, khng b nh ngha chng cc lp k tha.
- native: dng cho phng thc khi ci t ph thuc mi trng trong mt ngn
ng khc, nh C hay hp ng.
- synchronized: dng cho phng thc ti hn, nhm ngn cc tc ng ca cc i
tng khc khi phng thc ang c thc hin.
Chng trnh 4.2 minh ho vic khai bo hai thuc tnh l tn v tui ca lp Ngi (Person).

Chng trnh 4.2
package vidu.chuong4;
class Person
{
public String name;
public int age;
}

Khai bo phng thc ca lp
Phng thc ca lp c khai bo theo c php
<tnh cht> <kiu tr v> <tn phng thc> ([<cc tham s>])
[throws <cc ngoi l>]
{
}
56
Tnh cht: c trng bi cc t kho tng t nh tnh cht ca thuc tnh. Gi tr mc
nh l public.
Kiu tr v: Kiu d liu tr v ca phng thc, c th l kiu d liu sn c ca java
hoc l kiu do ngi dng t nh ngha.
Tn phng thc: tun theo qui tc t tn bin ca java.
Cc ngoi l: l mt i tng c bit c to ra khi chng trnh gp li. Java s tr
li cho chng trnh ngoi l ny theo t kho throws. Cc ngoi l, nu c, c phn
cch nhau bi du phy.
Cc tham s: cc tham s ca phng thc, c lit k theo cp <kiu tham s>
<tn tham s>, cc tham s c phn bit bi du phy.
Chng trnh 4.3 m t vic khai bo phng thc show() hin th thng tin c nhn ca lp
Person.

Chng trnh 4.3
package vidu.chuong4;
class Person
{
public String name;
public int age;

public void show()
{
System.out.println( name + is + age + years old!);
}
}

Phng thc khi to ca lp
Phng thc khi to (Constructor) c dng khi to mt th hin c th ca mt lp, ngha
l gn cc gi tr khi u cho cc thuc tnh, nu c, v to ra mt i tng c th. Phng thc
khi to phi cng tn vi lp.
Lu :
Phng thc khi to phi c tn trng vi tn ca lp
Phng thc khi to khng c gi tr tr v
Phng thc khi to c tnh cht public
C th c nhiu phng thc khi to ca cng mt lp
Chng trnh 4.4a minh ho mt phng thc khi to ca lp Person bng cch gn gi tr cho
cc thuc tnh tn v tui.

Chng trnh 4.4a
package vidu.chuong4;
57
class Person
{
public String name;
public int age;

// Phng thc khi dng
public Person(String name1, int age1)
{
name = name1;
age = age1;
}

public void show()
{
System.out.println( name + is + age + years old!);
}
}

Chng trnh 4.4b minh ho cch dng lp Person m chng ta va nh ngha trong chng trnh
4.4a. Chng trnh ny s to ra mt i tng myPerson ca lp Person vi cc thuc tnh c gi
tr khi to: name = Minh v age = 21. Sau , chng trnh s dng phng thc show() ca
i tng myPerson in ra dng thng bo Minh is 21 years old!.

Chng trnh 4.4b
package vidu.chuong4;
class PersonDemo
{
public static void main(String args[])
{
Person myPerson = new Person(Minh, 21);
myPerson.show();
}
}

Bin this
Bin this l mt bin n c bit lun tn ti trong cc lp java: mt lp c ng mt bin n this.
Bin ny c s dng trong khi chy v n tr n bn thn lp cha n. Bin this thng c
s dng trong cc hm khi to ca lp.
Chng trnh 4.4c khai bo mt lp hon ton ging vi lp c khai bo trong chng trnh
4.4a, nhng ch khc l c dng bin this trong hm khi to ca lp.

58
Chng trnh 4.4c
package vidu.chuong4;
class Person
{
public String name;
public int age;

// Phng thc khi dng
public Person(String name, int age)
{
this.name = name;
this.age = age;
}

public void show()
{
System.out.println( name + is + age + years old!);
}
}

Trong chng trnh 4.4c, ta ch n hm khi to ca lp, hm ny c hai bin cc b l name
v age, trng vi cc bin ca lp. Do , trong phm vi hm ny, bin this.name v this.age s
ch cc bin ca lp, cn cc bin name v age s ch cc bin cc b ca hm. Cho nn, cc lnh
gn vn thc thi nh trong chng trnh 4.4a.
4.1.2 S k tha
S k tha c s dng khi mun to mt lp mi t mt lp bit. Khi , tt c cc thuc
tnh v phng thc ca lp c u tr thnh thuc tnh v phng thc ca lp mi. Lp c
c gi l lp cha, lp mi c gi l lp con.
Khai bo lp k tha
Khai bo lp k tha c thc hin bi t kho extends:
<thuc tnh> <tn lp con> extends <tn lp cha>
{
}
Chng trnh 4.5a minh ho vic to mt lp Nhn vin (Employee) c k tha t lp Person
c xy dng trong phn 4.1.1.

Chng trnh 4.5a
package vidu.chuong4;
class Employee extends Person
{
59
public float salary;

// Phng thc khi dng
public Employee(String name, int age, float salary)
{
super(name, age);
this.salary = salary;
}
}

Khi , on chng trnh ca chng trnh 4.5b vn in ra dng thng bo Minh is 21 years
old! v khi i tng myEmployee gi n phng thc show() c k tha t lp Person.

Chng trnh 4.5b
package vidu.chuong4;
class EmployeeDemo1
{
public static void main(String args[])
{
Employee myEmployee = new Employee(Minh, 21, 300f);
myEmployee.show();
}
}

Khai bo phng thc np chng
Khi mun thay i ni dung ca cc phng thc c k tha t lp cha, ta dng cch khai bo
phng thc np chng. Thc ra l khai bo li mt phng thc mi c cng tn v kiu vi mt
phng thc c trong lp cha.
Chng trnh 4.6a s khai bo np chng phng thc show() ca lp Employee m khng dng
li phng thc show() ca lp Person na.

Chng trnh 4.6a
package vidu.chuong4;
class Employee extends Person
{
public float salary;

// Phng thc khi dng
public Employee(String name, int age, float salary)
{
super(name, age);
60
this.salary = salary;
}

// Khai bo np chng
public void show()
{
System.out.println( name + has a salary of
+ salary + $/month);
}
}

Khi , on chng trnh 4.6b s in ra dng thng bo Minh has a salary of 300$/month thay
v dng thng bo Minh is 21 years old! nh trong chng trnh 4.5b. L do l lc ny, i
tng myEmployee s gi phng thc show() ca lp Employee m khng gi phng thc
show() ca lp Person na.

Chng trnh 4.6b
package vidu.chuong4;
class EmployeeDemo2
{
public static void main(String args[])
{
Employee myEmployee = new Employee(Minh, 21, 300f);
myEmployee.show();
}
}

Quy tc truy nhp trong k tha
Cc quy tc ny quy nh kh nng truy nhp ca lp con i vi cc thuc tnh v phng thc
ca lp cha:
private: ch c truy nhp trong phm vi lp cha, lp con khng truy nhp c. Tt c
cc lp ngoi lp cha u khng truy nhp c.
protected: lp con c th truy nhp c. Tt c cc lp khng k tha t lp cha u
khng truy nhp c.
final: lp con c th s dng c nhng khng th khai bo np chng c.
public: lp con c th s dng v np chng c. Tt c cc lp bn ngoi u s dng
c.
4.2 K THA BI
Nhm trnh nhng nhp nhng ca tnh cht a k tha ca C++, Java khng cho php k tha
trc tip t nhiu hn mt lp cha. Ngha l Java khng cho php a k tha trc tip, nhng cho
61
php ci t nhiu giao tip (Interface) c th tha hng thm cc thuc tnh v phng thc
ca cc giao tip .
4.2.1 Giao tip
Khai bo giao tip
C php khai bo mt giao tip nh sau:
[public] interface <tn giao tip> [extends <danh sch giao tip>]
{
}
Tnh cht: tnh cht ca mt giao tip lun l public. Nu khng khai bo tng minh th
gi tr mc nh cng l public.
Tn giao tip: tun th theo quy tc t tn bin ca java.
Danh sch cc giao tip: danh sch cc giao tip cha c nh ngha k tha, cc
giao tip cha c phn cch nhau bi du phy. (Phn trong ngoc vung [] l tu
chn).
Lu :
Mt giao tip ch c th k tha t cc giao tip khc m khng th c k tha t cc
lp sn c.
Chng trnh 4.7 minh ho vic khai bo mt giao tip khng k tha t bt k mt giao tip no.

Chng trnh 4.7
package vidu.chuong4;
public interface Product
{
}

Khai bo phng thc ca giao tip
C php khai bo mt phng thc ca giao tip nh sau:
[public] <kiu gi tr tr v> <tn phng thc> ([<cc tham s>])
[throws <danh sch ngoi l>];
Tnh cht: tnh cht ca mt thuc tnh hay phng thc ca giao tip lun l public.
Nu khng khai bo tng minh th gi tr mc nh cng l public. i vi thuc tnh,
th cht cht lun phi thm l hng (final) v tnh (static).
Kiu gi tr tr v: c th l cc kiu c bn ca java, cng c th l kiu do ngi dng
t nh ngha (kiu i tng).
Tn phng thc: tun th theo quy tc t tn phng thc ca lp
Cc tham s: nu c th mi tham s c xc nh bng mt cp <kiu tham s> <tn
tham s>. Cc tham s c phn cch nhau bi du phy.
Cc ngoi l: nu c th mi ngoi l c phn cch nhau bi du phy.
62
Lu :
Cc phng thc ca giao tip ch c khai bo di dng mu m khng c ci t chi
tit (c du chm phy ngay sau khai bo v khng c phn ci t trong du {}). Phn
ci t chi tit ca cc phng thc ch c thc hin trong cc lp (class) s dng giao
tip .
Cc thuc tnh ca giao tip lun c tnh cht l hng (final), tnh (static) v public. Do ,
cn gn gi tr khi u ngay khi khai bo thuc tnh ca giao tip.
Chng trnh 4.8 minh ho vic khai bo mt thuc tnh v mt phng thc ca giao tip
Product c khai bo trong chng trnh 4.7: thuc tnh lu nhn hiu ca nh sn xut sn
phm; phng thc dng truy xut gi bn ca sn phm.

Chng trnh 4.8
package vidu.chuong4;
public interface Product
{
public static final String MARK = Adidas;
public float getCost();
}

4.2.2 S dng giao tip
V giao tip ch c khai bo di dng cc phng thc mu v cc thuc tnh hng nn vic s
dng giao tip phi thng qua mt lp c ci t giao tip . Vic khai bo mt lp c ci t
giao tip c thc hin thng qua t kho implements nh sau:
<tnh cht> class <tn lp> implements <cc giao tip>
{
}
Tnh cht v tn lp c s dng nh trong khai bo lp thng thng.
Cc giao tip: mt lp c th ci t nhiu giao tip. Cc giao tip c phn cch nhau
bi du phy. Khi , lp phi ci t c th tt c cc phng thc ca tt c cc giao
tip m n s dng.
Lu :
Mt phng thc c khai bo trong giao tip phi c ci t c th trong lp c ci
t giao tip nhng khng c php khai bo chng. Ngha l s lng cc tham s ca
phng thc trong giao tip phi c gi nguyn khi ci t c th trong lp.
Chng trnh 4.9 minh ho vic ci t mt lp giy (Shoe) ci t giao tip Product vi cc
thuc tnh v phng thc c khai bo trong chng trnh 4.8.

Chng trnh 4.9
package vidu.chuong4;
public class Shoe implements Product
{
63
// Ci t phng thc c khai bo trong giao tip
public float getCost()
{
return 10f;
}

// Phng thc truy nhp nhn hiu sn phm
public String getMark()
{
return MARK;
}

// Phng thc main
public static void main(String args[])
{
Shoe myShoe = new Shoe();
System.out.println(This shoe is + myShoe.getMark() +
having a cost of $ + myShoe.getCost());
}
}

Chng trnh 4.9 s in ra dng: This shoe is Adidas having a cost of $10. Hm getMark() s tr
v nhn hiu ca sn phm, l thuc tnh c khai bo trong giao tip. Hm getCost() l ci
t ring ca lp Shoe i vi phng thc c khai bo trong giao tip Product m n s
dng, ci t ny tr v gi tr 10 i vi lp Shoe.
4.3 LP TRU TNG
Lp tru tng l mt dng lp c bit, trong cc phng thc ch c khai bo dng
khun mu (template) m khng c ci t chi tit. Vic ci t chi tit cc phng thc ch
c thc hin cc lp con k tha lp tru tng .
Lp tru tng c s dng khi mun nh ngha mt lp m khng th bit v nh ngha ngay
c cc thuc tnh v phng thc ca n.
4.3.1 Khai bo
Khai bo lp tru tng
Lp tru tng c khi bo nh cch khai bo cc lp thng thng, ngoi tr c thm t kho
abstract trong phn tnh cht:
[public] abstract class <tn lp>
{
}
Tnh cht: mc nh l public, bt buc phi c t kho abstract xc nh y l mt
lp tru tng.
64
Tn lp: tun th theo quy tc t tn lp thng thng ca java.
Lu :
Lp tru tng cng c th k tha mt lp khc, nhng lp cha cng phi l mt lp tru
tng. (Khai bo k tha thng qua t kho extends nh khai bo k tha thng thng).
Chng trnh 4.10 khai bo mt lp tru tng l lp ng vt (Animal) mt cch chung chung.

Chng trnh 4.10
package vidu.chuong4;
abstract class Animal
{
}

Khai bo phng thc ca lp tru tng
Tt c cc thuc tnh v phng thc ca lp tru tng u phi khai bo l tru tng. Hn
na, cc phng thc ca lp tru tng ch c khai bo dng khun mu m khng c phn
khai bo chi tit. C php khai bo phng thc ca lp tru tng:
[public] abstract <kiu d liu tr v> <tn phng thc>
([<cc tham s>]) [throws <cc ngoi l>];
Tnh cht: tnh cht ca mt thuc tnh hay phng thc ca lp tru tng lun l
public. Nu khng khai bo tng minh th gi tr mc nh cng l public.
Kiu d liu tr v: c th l cc kiu c bn ca java, cng c th l kiu do ngi dng
t nh ngha (kiu i tng).
Tn phng thc: tun th theo quy tc t tn phng thc ca lp
Cc tham s: nu c th mi tham s c xc nh bng mt cp <kiu tham s> <tn
tham s>. Cc tham s c phn cch nhau bi du phy.
Cc ngoi l: nu c th mi ngoi l c phn cch nhau bi du phy.
Lu :
Tnh cht ca phng thc tru tng khng c l private hay static. V phng thc
tru tng ch c khai bo chi tit (np chng) trong cc lp dn xut (lp k tha) ca
lp tru tng. Do , nu phng thc l private th khng th np chng, nu phng
thc l static th khng th thay i trong lp dn xut.
Phng thc tru tng ch c khai bo di dng khun mu nn khng c phn du
mc {} m kt thc bng du chm phy ;.
Chng trnh 4.11 khi bo hai phng thc ca lp tru tng Animal trong chng trnh 4.10:
Phng thc getName() tr v tn loi ng vt, d cha bit tn c th loi no nhng kiu tr v
l String. Phng thc getFeet() tr v s chn ca loi ng vt, cng cha bit c th l bao
nhiu chn nhng kiu tr v l int.



65
Chng trnh 4.11
package vidu.chuong4;
abstract class Animal
{
abstract String getName();
abstract int getFeet();
}

4.3.2 S dng lp tru tng
Lp tru tng c s dng thng qua cc lp dn xut ca n. V ch c cc lp dn xut mi
ci t c th cc phng thc c khai bo trong lp tru tng.
Chng trnh 4.12a khai bo lp v loi chim (Bird) k tha t lp Animal trong chng trnh
4.11. Lp ny ci t chi tit hai phng thc c khai bo trong lp Animal: phng thc
getName() s tr v tn loi l Bird; phng thc getFeet() tr v s chn ca loi chim l 2.

Chng trnh 4.12a
package vidu.chuong4;
public class Bird extends Animal
{
// Tr v tn loi chim
public String getName()
{
return Bird;
}

// Tr v s chn ca loi chim
public int getFeet()
{
return 2;
}
}

Chng trnh 4.12b khai bo lp v loi mo (Cat) cng k tha t lp Animal trong chng trnh
4.11. Lp ny ci t chi tit hai phng thc c khai bo trong lp Animal: phng thc
getName() s tr v tn loi l Cat; phng thc getFeet() tr v s chn ca loi mo l 4.

Chng trnh 4.12b
package vidu.chuong4;
public class Cat extends Animal
{
// Tr v tn loi mo
66
public String getName()
{
return Cat;
}

// Tr v s chn ca loi mo
public int getFeet()
{
return 4;
}
}

Chng trnh 4.12c s dng li hai lp Bird v Cat trong cc chng trnh 4.12a v 4.12b.
Chng trnh ny s hin th hai dng thng bo:
The Bird has 2 feets
The Cat has 4 feets

Chng trnh 4.12c
package vidu.chuong4;
public class AnimalDemo
{
public static void main(String args[])
{
Bird myBird = new Bird();
System.out.println(The + myBird.getName() + has
+ myBird.getFeet() + feets);
Cat myCat = new Cat();
System.out.println(The + myCat.getName() + has
+ myCat.getFeet() + feets);
}
}

4.4 A HNH
4.4.1 Np chng
Java cho php trong cng mt lp, c th khai bo nhiu phng thc c cng tn. Np chng l
hin tng cc phng thc c cng tn. C hai kiu np chng trong Java:
Cc phng thc ca cng mt lp c cng tn. Khi hai phng thc ca mt lp c cng
tn th bt buc chng phi c:
- Hoc danh sch cc tham s khc nhau
- Hoc kiu tr v khc nhau
67
- Hoc kt hp hai iu kin trn.
Nu khng, java s khng phn bit c chng. V d nu trong cng mt lp:
// Chp nhn c
public int add(int x, int y){}
public float add(float x, int y){}

// Khng chp nhn c
public int add(int x, int y){}
public int add(int x, int y){}
Phng thc ca lp con c cng tn vi phng thc ca lp cha. Trong trng hp ny,
cc phng thc np chng c th c cng danh sch tham s v c cng kiu tr v (xem
li phn khai bo phng thc np chng trong mc k tha 4.1.2).
4.4.2 a hnh
a hnh l vic triu gi n cc phng thc np chng ca i tng. Khi mt phng thc np
chng c gi, chng trnh s da vo kiu cc tham s v kiu tr v gi phng thc ca
i tng cho ph hp.
Chng trnh 4.13 minh ho vic khai bo nhiu hm add() cng hai s hoc cng hai xu k
t.

Chng trnh 4.13
package vidu.chuong4;
public class Operator
{
// Cng hai s nguyn
public int add(int x, int y)
{
return (x + y);
}

// Cng hai s thc
public float add(float x, float y)
{
return (x + y);
}

// Cng hai chui k t
public String add(String a, String b)
{
return (a + b);
}

// Hm main
68
public static void main(String args[])
{
Operator myOperator = new Operator();
System.out.println(The (5+19) is + myOperator.add(5, 19));
System.out.println(The (\ab\ + \cd\) is \
+ myOperator.add(ab, cd) + \);
}
}

Chng trnh 4.13 s hin th ra hai dng thng bo:
The (5+19) is 24
The (ab + cd) is abcd
Trong lp Operator c hai phng thc cng tn v cng c hai tham s u vo l add(). Khi
chng trnh thc thi lnh myOperator.add(5, 19), chng trnh s t i chiu cc kiu tham s,
thy 5 v 19 c dng gn vi kiu int nht, nn phng thc add(int, int) s c gi v tr v gi
tr l 24.
Khi chng trnh thc thi lnh myOperator.add(ab, cd), chng trnh s t i chiu cc kiu
tham s, thy ab v cd c dng gn vi kiu String nht, nn phng thc add(String, String)
s c gi v tr v gi tr l abcd.
Lu :
Khi gi hm vi cc kiu d liu khc vi cc hm c khai bo, s c s chuyn
i kiu ngm nh din ra. Khi khng th thc hin chuyn i kiu ngm nh, java s
pht sinh mt thng bo li.
Chng hn, trong chng trnh 4.13, nu ta thc thi lnh myOperator.add(4.0f, 5) c dng
add(float, int), chng trnh s chuyn ngm nh s nguyn 5 thnh float (chuyn t kiu int sang
float thuc din ni rng kiu, l kiu chuyn ngm nh trong java) c th s dng dng c
khai bo add(float, float) v kt qu s l 9.0f.
Nu ta thc thi lnh myOperator.add(ab, 5) c dng add(String, int), v int khng th chuyn
ngm nh thnh String nn lnh ny s pht sinh li. trnh li ny, phi chuyn i kiu
tng minh cho s 5 thnh kiu String bng mt trong cc cch sau:
myOperator.add(ab, (new Int(5)).toString());
myOperator.add(ab, 5 + );
4.5 CASE STUDY II
Trong phn ny, chng ta s vit mt chng trnh qun l nhn vin ca mt cng ty. Bao gm
cc lp chnh:
Lp Human l mt lp tru tng, ch c mt phng thc duy nht l show().
Lp Person l lp k tha t lp Human, c hai thuc tnh l tn (name) v tui (age).
ng gi d liu cc thuc tnh ny c dng private v cc phng thc truy nhp chng
(get v set). Ngoi ra lp ny cn ci t phng thc show() k tha t lp tru tng
Human.
69
Lp Employee l lp k tha t lp Person, c thm thuc tnh l lng (salary). Thuc
tnh ny cng c dng private ng gi d liu v cn cc phng thc truy nhp
get/set. Lp ny ci t li phng thc show(). Hn na, lp Employee cn c thm hai
phng thc addSalary() v addSalary(float) tnh tng lng cho nhn vin: mt
phng thc tng lng theo t l mc nh l 10% (khng cn tham s), v mt phng
thc tng theo gi tr c th a vo (cn tham s).
Cc phn tip theo s trnh by phn ci t chi tit cho cc lp ny.
4.5.1 Lp Human
Lp Human l mt lp tru tng, ch c mt phng thc duy nht l show(). y l ni dung
tp tin Human.java.

Chng trnh 4.14a
package vidu.chuong4;
abstract class Human
{
abstract void show();
}

4.5.2 Lp Person
Lp Person l lp k tha t lp Human:
C hai thuc tnh l tn (name) v tui (age) c dng private
Cc phng thc truy nhp cc thuc tnh name (getName() v setName(String)) v age
(getAge() v setAge(int)).
Ci t chng phng thc show() k tha t lp tru tng Human.
y l ni dung tp tin Person.java.

Chng trnh 4.14b
package vidu.chuong4;
class Person extends Human
{
private String name;
private int age;

// Phng thc khi dng khng c tham s
public Person()
{
super();
name = ;
age = 0;
}
70

// Phng thc khi dng c tham s
public Person(String name, int age)
{
this.name = name;
this.age = age;
}

/* Phng thc truy nhp thuc tnh name */
public String getName()
{
return name;
}

public void setName(String name)
{
this.name = name;
}

/* Phng thc truy nhp thuc tnh age */
public int getAge()
{
return age;
}

public void setAge(int age)
{
this.age = age;
}

// Khai bo np chng
public void show()
{
System.out.println( name + is + age + years old!);
}
}

4.5.3 Lp Employee
Lp Employee l lp k tha t lp Person:
C thm thuc tnh l lng (salary) cng c dng private ng gi d liu v cn cc
phng thc truy nhp get/set.
Lp ny ci t li phng thc show().
71
C thm hai phng thc addSalary() v addSalary(float) tnh tng lng cho nhn
vin: phng thc addSalary() tng lng theo t l mc nh l 10% (khng cn tham
s), phng thc addSalary(float) tng theo gi tr c th a vo (cn tham s).
Sau y l ni dung tp tin Employee.java

Chng trnh 4.14c
package vidu.chuong4;
class Employee extends Person
{
private float salary;

// Phng thc khi dng khng c tham s
public Employee()
{
super();
salary = 0f;
}

// Phng thc khi dng c tham s
public Employee(String name, int age, float salary)
{
super(name, age);
this.salary = salary;
}

/* Phng thc truy nhp thuc tnh salarry */
public float getSalary()
{
return salary;
}

public void setSalary(float salary)
{
this.salary = salary;
}

// Khai bo np chng
public void show()
{
System.out.println( getName() + is + getAge()
+ years old having a salary of $
+ salary + /month!);
}
72

/* Phng thc tng lng */
public void addSalary()
{
salary = salary*1.1f;
}

public void addSalary(float addition)
{
salary += addition;
}
}

Lu : Trong phng thc np chng show() ca lp Employee, ta phi dng cc phng thc
public c k tha t lp Person l getName() v getAge() truy nhp n thuc tnh name v
age m khng th truy xut trc tip. L do l cc thuc tnh name v age c dng private trong
lp Person nn khng th truy xut trc tip trong cc lp dn xut. Do , ta phi truy xut
chng thng qua cc phng thc truy nhp public ca lp Person.
4.5.4 Chng trnh demo
Chng trnh 4.14d cha hm main chy minh ho vic s dng cc lp Person v Employee.
y l ni dung ca tp tin Casestudy2.java

Chng trnh 4.14d
package vidu.chuong4;
public class Casestudy2
{
// Hm main
public static void main(String args[])
{
// S dng lp Person
Person myPerson = new Person(Vinh, 25);
myPerson.show();

// S dng lp Employee
Employee myEmployee = new Employee(Vinh, 25, 300f);
myEmployee.show();
// Tng lng theo mc nh
myEmployee.addSalary();
myEmployee.show();
// Tng lng ln $50
myEmployee.addSalary(50f);
myEmployee.show();
73
}
}

Chng trnh 4.14d s hin th ni dung nh sau:
Vinh is 25 years old!
Vinh is 25 years old having a salary of $300/month!
Vinh is 25 years old having a salary of $330/month!
Vinh is 25 years old having a salary of $380/month!
Dng th nht in ra dng thng bo theo phng thc show() ca lp Person. Dng th hai cng
hin th thng bo theo phng thc show() ca lp Employee c khai bo np chng. Dng
th ba hin th thng bo sau khi tng lng theo mc nh (10%) t 300$ ln 330$. Dng th
t hin th thng bo sau khi tng lng thm mt ln na vi lng tng l 50$ t 330$ ln 380$.
TNG KT CHNG 4
Ni dung chng 4 tp trung trnh by cc vn c bn lin quan n k thut lp trnh
hng i tng trong Java:
Mt lp trong java c khai bo vi t kho class, vi cc tnh cht c th c l public,
final hoc abstract.
Khi khai bo mt lp l tru tng th cc phng thc ca n cng c khai bo l tru
tng v ch khai bo dng khun mu m khng c khai bo chi tit.
Khng th to ra mt i tng t mt lp tru tng.
C th khai bo mt lp k tha t mt lp khc thng qua t kho extends. Mt lp java
ch c th c k tha t nhiu nht mt lp cha m thi.
Trong k tha, lp con c th nh ngha li (np chng) cc phng thc c k tha t
lp cha.
Mt giao tip trong java c khai bo thng qua t kho interface. Cc thuc tnh ca
giao tip phi l thuc tnh hng (final) v static. Cc phng thc ch c khai bo di
dng khun mu m khng c ci t chi tit.
C th khai bo mt giao tip k tha t mt giao tip khc cng bng t kho extends.
Mt giao tip trong java c th c k tha t nhiu giao tip khc.
Mt giao tip trong java ch c s dng thng qua mt lp java ci t c th giao tip
. Khi , lp java phi ci t chi tit tt c cc phng thc c khai bo trong giao
tip.
Trong mt lp java, c th khai bo nhiu phng thc c cng tn. Khi thc thi, chng
trnh s t ng chn phng thc c khun mu kiu tham s trng vi lnh thc hin
lnh tng ng.
CU HI V BI TP CHNG 4
1. Trong cc khai bo lp sau, khai bo no l ng:
a. class myClass
b. Class myClass
74
c. public class MyClass
d. Public class MyClass
2. Trong cc khai bo phng thc ca mt lp (khng tru tng) sau, khai bo no l ng:
a. String getName{return name;}
b. String getName(){return name;}
c. String getName(){return name;};
d. String getName();
3. Trong cc khai bo phng thc ca mt lp tru tng sau, khai bo no l ng:
a. abstract String getName{return name;}
b. abstract String getName(){return name;}
c. abstract String getName(){return name;};
d. abstract String getName();
4. Trong cc khai bo mt giao tip sau, khai bo no l ng:
a. public abstract MyInterface{}
b. public class MyInterface{}
c. public interface MyInterface{}
d. public interface MyInterface();
5. Trong cc khai bo k tha lp sau, gi s Aclass v Bclass l cc lp c sn, khai bo no l
ng:
a. public class MyClass extends Aclass{}
b. public class MyClass Extends Aclass{}
c. public class MyClass extends Aclass, Bclass{}
d. public class MyClass extends Aclass, extends Bclass{}
6. Trong cc khai bo k tha giao tip sau, gi s Ainterface v Binterface l cc giao tip c
sn, khai bo no l ng:
a. public interface MyInterface extends Ainterface{}
b. public interface MyInterface Extends Ainterface{}
c. public interface MyInterface extends Ainterface, Binterface{}
d. public interface MyInterface extends Ainterface, extends
Binterface{}
7. Trong cc khai bo mt lp s dng giao tip sau, gi s Ainterface v Binterface l cc giao
tip c sn, khai bo no l ng:
a. public class MyClass extends Ainterface{}
b. public class MyClass implements Ainterface{}
c. public class MyClass implements Ainterface, Binterface{}
d. public class MyClass implements Ainterface, implements Binterface{}
8. Xt on chng trnh ci t mt lp s dng mt giao tip sau:
public interface MyInterface{
public void show(String a);
75
}
// Khai bo lp s dng giao tip
public class MyClass implements MyInterface{

}
Khi , lp MyClass ch c duy nht mt phng thc ci t chi tit phng thc show ca
giao tip MyInterface. Trong cc cch ci t sau, cch no l ng:
a. public int show(String a){ System.out.println(a);}
b. public void show(){ System.out.println(Show!);}
c. public void show(String a){ System.out.println(a);}
d. public void show(String a, String b){ System.out.println(a+b);}
9. Xt on chng trnh ci t php ton cng vi cc s hng c kiu khc nhau:
public class MyOperator {
public static int add(int a, int b){return a+b;}
public static float add(float a, float b){return a+b;}
public static double add(double a, double b){return a+b;}
public static String add(String a, String b){return a+b;}
}
Khi ta gi lnh MyOperator.add(-5, 100), chng trnh s gi phng thc no?
a. add(int, int)
b. add(float, float)
c. add(double, double)
d. add(String, String)
e. Thng bo li
10. Cng vi lp MyOperator trong bi 9, khi ta gi lnh MyOperator.add(5.0d, 100f), chng
trnh s gi phng thc no?
a. add(int, int)
b. add(float, float)
c. add(double, double)
d. add(String, String)
e. Thng bo li
11. Cng vi lp MyOperator trong bi 9, khi ta gi lnh MyOperator.add(abcd, 100f), chng
trnh s gi phng thc no?
a. add(int, int)
b. add(float, float)
c. add(double, double)
d. add(String, String)
e. Thng bo li
12. V s khc nhau gia lp v giao tip trong java, nhng nhn nh no sau y l ng:
76
a. Lp c k tha ti a t mt lp khc, giao tip c th k tha
t nhiu giao tip khc.
b. Lp c th k tha t giao tip, nhng giao tip khng c k tha
t cc lp.
c. Thuc tnh ca lp c th c tnh cht bt k, thuc tnh ca giao
tip phi l hng s v tnh.
d. Phng thc ca lp c th c ci t chi tit, phng thc ca
giao tip ch c khai bo dng khun mu.
13. Xt on chng trnh khai bo hai lp k tha nhau nh sau:
public class Person {
public void show(){System.out.println(This is a person!);}
}
v:
public class Employee extends Person {
public void show(int x){
System.out.println(This is the employee + x);
}
}
Khi , on chng trnh sau s hin th thng bo no?
public class Demo1 {
public static void main(String args[]){
Employee myEmployee = new Employee();
myEmployee.show();
}
}
a. This is a person!.
b. This is the employee 0.
c. Thng bo li.
d. Khng hin thi g c.
14. Cng vi hai lp Person v Employee trong bi 14. on chng trnh sau s hin th thng
bo no?
public class Demo2 {
public static void main(String args[]){
Employee myEmployee = new Employee();
myEmployee.show(10);
}
}
a. This is a person!.
b. This is the employee 10.
c. Thng bo li.
d. Khng hin thi g c.
77
15. Vit mt chng trnh khai bo mt lp v cc hnh ch nht Rectangle. Lp ny c hai thuc
tnh cc b l chiu rng v chiu di ca hnh. Vit hai phng thc khi dng tng minh
cho lp ny: Mt khi dng vi mt tham s kiu int, khi , chiu rng v chiu di c
thit lp thnh gi tr tham s a vo (hnh vung). Mt khi dng vi hai tham s kiu int
tng ng l chiu rng v chiu di.
16. Vit mt giao tip khai bo cc php ton cng hai s, cng hai xu, cng xu v s. Sau
vit mt lp ci t giao tip .
17. Vit mt lp tru tng v cc hnh phng, trong khai bo cc phng thc tnh chu vi v
din tch ca hnh. Sau vit ba lp k tha t lp tru tng l: lp hnh vung, lp
hnh ch nht v lp hnh trn. T thit lp cc thuc tnh cc b cn thit cho mi lp con v
khai bo np chng hai phng thc ban u trong mi lp con.
78
CHNG 5
BIU DIN V CI T
CC CU TRC D LIU TRU TNG TRN JAVA
Ni dung chng ny tp trung trnh by vic ci t mt s gii thut v cc cu trc d liu tru
tng trn java. Cc gii thut bao gm:
Phng php duyt v qui
Phng php sp xp v tm kim
Cc cu trc d liu tru tng bao gm:
Ngn xp v hng i
Danh sch lin kt
Cy nh phn
th
5.1 PHNG PHP DUYT V QUI
5.1.1 Cc phng php duyt
Cc phng php duyt thng xut hin trong bi ton t hp nhm tm kim tt c cc trng
thi (t hp) c th c ca mt tp cc trng thi, hoc tm ra mt t hp tho mn tt nht mt s
yu cu xc nh trong s cc trng thi ca tp hp. Cc phng php duyt thng thng bao
gm:
Phng php duyt ton b: Duyt qua tt c cc trng thi c th c ca tp hp. Phng
php ny ph hp vi bi ton lit k v vi cc tp hp c s lng cc trng thi l
nh khng tn thi gian duyt.
Phng php duyt chn lc: Thng p dng khi s lng trng thi ca t hp l rt
ln, khng th s dng phng php duyt ton b. Phng php ny ch dng cho cc
bi ton tm kim mt (hoc mt s) trng thi tt nht (theo mt s tiu ch xc nh) ca
t hp bng cch ch duyt theo mt s trng thi c cho l c kh nng tm c kt
qu cao nht. Mt s thut ton duyt theo phng php ny thng c p dng trong
lnh vc tr tu nhn to nh thut ton A*, thut ton nhnh v bin, thut ton / .
Ngoi ra, tu thuc vo cch thc biu din d liu ca trng thi (cu trc d liu), ngi ta s
dng cc phng php duyt khc nhau:
Duyt trn mng
Duyt trn cy
Duyt trn th
Cc phng php duyt ny s c trnh by trong cc mc tng ng v cc i tng danh
sch tuyn tnh (duyt trn mng), cy nh phn (duyt trn cy), th (duyt trn th).
79
5.1.2 Phng php qui
Phng php qui: c nh ngha theo qui np ton hc, mt i tng c biu din qua
chnh n vi mt phm vi nh hn.
V d, nh ngha s Fibonacy th n:
F(n) = F(n-1) + F(n-2) vi n>2
F(1) = F(2) = 1
l mt nh ngha mang tnh qui.
Gii thut qui: l phng php gii bi ton bng cch rt gn bi ton thnh mt (hoc mt
s) bi ton con tng t nh vy nhng vi d liu nh hn vi trng thi dng tn ti.
V d, th tc tnh s Fibonacy th n:
int Fibo(int n){
if(n == 1 || n == 2) return 1;
return (Fibo(n-1) + Fibo(n-2));
}
l mt gii thut qui. N tnh s Fibonacy th n thng qua vic tnh hai s nh hn trc n l
s th n-1 v n-2. iu kin dng l s th 1 v s th 2 l 1.
5.2 PHNG PHP SP XP V TM KIM
5.2.1 Cc phng php sp xp
Hin nay, c rt nhiu phng php sp xp khc nhau:
Sp xp ni bt (bubble sort)
Sp xp chn (insertion sort)
Sp xp chn (selection sort)
Sp xp vun ng (heap sort)
Sp xp trn (merge sort)
Sp xp nhanh (quick sort)
Ni dung phn ny s trnh by vic ci t gii thut sp xp nhanh (quick sort). V vic sp xp
thng gn lin vi mt mng cc phn t c th so snh c, cho nn gii thut ny s c ci
t trong lp mng cc phn t (Array). Vic ci t cc gii thut sp xp cn li c coi nh
mt bi tp ca phn ny.
Lp mng cc phn t Array
Lp ny c thuc tnh l mt mng cc phn t. Cc phn t ca mng c th c kiu bt k,
nhng phi tho mn iu kin l c th so snh c, khi , mng c th sp xp c. Trong
phn ny, ta s ci t mng cc phn t c kiu int.
class Array{
private int *elements;
}
80
Gii thut sp xp nhanh Quick Sort
tng ca gii thut ny l chn mt phn t ng vai tr l kho cht (cn gi l im mc),
cc phn t nh hn kho cht s phi chuyn ln ng trc kho cht. Cc phn t ln hn
kho cht th phi chuyn xung ng sau kho cht. Cc bc c th nh sau:
Chn mt phn t (bt k) lm kho cht.
i t u mng n cui mng, tm phn t u tin ln hn kho cht, nh du n l
phn t th i.
i t cui mng ln u mng, tm phn t u tin nh hn kho cht, nh du n l
phn t th j.
Nu i<j, i ch phn t th i v th j.
Sau , i tip theo hai chiu, v i ch, nu c, cho n khi i=j.
i ch phn t th i (cng l j vo thi im ny) vi phn t cht. Khi , phn t cht
l ng v tr ca n trong mng sp xp.
Lp li gii thut trn vi hai on ca mng: on trc cht v on sau cht.
Qu trnh s dng khi mi on ch cn hai phn t.
Chng trnh 5.1a ci t th tc sp xp nhanh ca lp Array.

Chng trnh 5.1a
package vidu.chuong5;
class Array{
private int[] elements;

/* Phng thc truy nhp cc phn t ca mng */
public int[] get(){
return elements;
}
public void set(int[] elements){
this.elements = elements;
}

/* Phng thc sp xp */
public void sort(){
quick(0, elements.length-1);
}

/* Phng thc sp xp nhanh */
private void quick(int left, int right){
int i=left, j=right;
int pivot=(left+right)/2, tmp;
do{
while(elements[i]<elements[pivot] && i<right)i++; // Qut xui
81
while(elements[j]>elements[pivot] && j>left)j++; // Qut ngc
if(i<=j){ // i ch hai phn t
tmp = elements[i];
elements[i] = elements[j];
elements[j] = tmp;
}
}while (i<=j);
if(left < j) quick(left, j); // Sp xp on trc cht
if(i < right) quick(i, right); // Sp xp on sau cht
}
}

5.2.2 Cc phng php tm kim
Phng php tm kim s tr v ch s ca mt phn t nu n c mt trong mng tm kim, tr v
-1 nu khng c phn t trong mng. Cc phng php tm kim c bn bao gm:
Tm kim tun t (tuyn tnh)
Tm kim nh phn
Tm kim trn cy
Ni dung phn ny s trnh by phng php tm kim nh phn. Cc phng php cn li c
coi nh l bi tp ca phn ny. Phng php tm kim nh phn c thc hin trn mng sp
xp. Cc bc tin hnh nh sau:
Ly kho cn tm so snh vi phn t gia mng sp xp. Nu bng, kt thc tm
kim.
Nu nh hn, tm kim kho trong na u ca mng (vn theo kiu nh phn).
Nu ln hn, tm kim kho trong na sau ca mng (vn theo kiu nh phn).
Qu trnh kt thc khi kho bng phn t gia mng, hoc cc on ch cn mt phn t.
Chng trnh 5.1b ci t th tc tm kim nh phn trn lp mng Array vi cc phn t c kiu
int (kho tm kim cng c kiu int).

Chng trnh 5.1b
package vidu.chuong5;
class Array{
private int[] elements;

/* Phng thc truy nhp cc phn t ca mng */
public int[] get(){
return elements;
}
public void set(int[] elements){
this.elements = elements;
82
}

/* Phng thc tm kim */
public int search(int key){
quick(0, elements.length-1); // Sp xp mng, dng quicksort
int low=0, hight=elements.length-1, mid;
while(low <= hight){
mid = (low + hight)/2; // Ch s gia
if(key > elements[mid])
low = mid+1; // Tm na sau
else if(key < elements[mid])
hight= mid-1; // Tm na u
else return mid; // Tm thy
}
return -1; // Khng tm thy
}

/* Phng thc sp xp */
public void sort(){
quick(0, elements.length-1);
}

/* Phng thc sp xp nhanh */
private void quick(int left, int right){
int i=left, j=right;
int pivot=(left+right)/2, tmp;
do{
while(elements[i]<elements[pivot] && i<right)i++; // Qut xui
while(elements[j]>elements[pivot] && j>left)j++; // Qut ngc
if(i<=j){ // i ch hai phn t
tmp = elements[i];
elements[i] = elements[j];
elements[j] = tmp;
}
}while (i<=j);
if(left < j) quick(left, j); // Sp xp on trc cht
if(i < right) quick(i, right); // Sp xp on sau cht
}
}



83
5.3 NGN XP V HNG I
5.3.1 Ngn xp
Ngn xp (stack) c cc thuc tnh cc b:
Mng lu cc nt ca ngn xp
Cc thao tc i vi ngn xp:
Thm vo mt nt
Ly ra mt nt
nh ngha mt nt
n gin, ta ch nh ngha mt nt c gi tr kiu int:

Chng trnh 5.2a
package vidu.chuong5;
public class Node{
private int value;

/* Cc phng thc khi dng */
public Node(){
value = 0;
}

public Node(int value){
this.value = value;
}

/* Phng thc truy nhp thuc tnh value */
public int getValue(){
return value;
}
public void setValue(int value){
this.value = value;
}
}

Ci t ngn xp
Ta coi nh ngn xp l cui mng lu gi cc nt. Do , cc thao tc thm vo v ly ra
s thm vo cui mng hoc ly nt cui mng ra.
Mng cc gi tr c khai bo ng tit kim b nh.

84
Chng trnh 5.2b
package vidu.chuong5;
public class MyStack{
private Node[] values;

/* Cc phng thc khi dng */
public MyStack(){}

public MyStack(Node[] values){
this.values = values;
}

/* Phng thc ly ra mt node t stack */
public Node pop(){
Node result = null;
if((values != null)&&(values.length > 0)){
result = values[values.length - 1];
// Loi b node cui cng
Node[] tmpNode = new Node[values.length - 1];
for(int i=0; i<values.length 1; i++)
tmpNode[i] = values[i];
this.values = tmpNode;
}
return result;
}

/* Phng thc thm mt node vo stack */
public void push(Node node){
if(values == null){ // Ngn xp ang rng
values = new Node[1];
values[0] = node;
}else{ // Ngn xp c d liu
Node[] tmpNode = new Node[values.length + 1];
for(int i=0; i<values.length; i++)
tmpNode[i] = values[i];
tmpNode[values.length] = node;
this.values = tmpNode;
}
}
}

85
5.3.2 Hng i
Hng i (queue) c cc thuc tnh cc b:
Mng cc gi tr trong hng i
Cc thao tc vi hng i:
Thm vo mt nt vo cui hng i
Ly ra mt nt t u hng i
Chng trnh 5.3 ci t lp hng i.

Chng trnh 5.3
package vidu.chuong5;
public class MyQueu{
private Node[] values;

/* Cc phng thc khi dng */
public MyQueu(){}

public MyQueu(Node[] values){
this.values = values;
}

/* Phng thc ly ra mt node t u queu */
public Node remove(){
Node result = null;
if((values != null)&&(values.length > 0)){
result = values[0];
// Loi b node u hng i
Node[] tmpNode = new Node[values.length - 1];
for(int i=0; i<values.length 1; i++)
tmpNode[i] = values[i+1];
this.values = tmpNode;
}
return result;
}

/* Phng thc thm mt node vo cui queu */
public void insert(Node node){
if(values == null){ // Hng i ang rng
values = new Node[1];
values[0] = node;
}else{ // Hng i c d liu
Node[] tmpNode = new Node[values.length + 1];
for(int i=0; i<values.length; i++)
86
tmpNode[i] = values[i];
tmpNode[values.length] = node;
this.values = tmpNode;
}
}
}

5.4 DANH SCH LIN KT
Ni dung phn ny tp trung ci t hai loi danh sch lin kt c bn:
Danh sch lin kt n
Danh sch lin kt kp
5.4.1 Danh sch lin kt n
nh ngha mt nt ca danh sch lin kt n
Mt nt ca danh sch lin kt n bao gm:
Gi tr ca nt, c dng l mt i tng kiu Node c nh ngha trong chng
trnh 5.2a
Nt tip theo ca nt .
Mt nt ca danh sch lin kt n c ci t trong chng trnh 5.4a.

Chng trnh 5.4a
package vidu.chuong5;
public class SimpleNode{
private Node value; // Gi tr ca node l mt i tng kiu Node
private SimpleNode next; // Node tip theo ca danh sch lin kt

/* Cc phng thc khi dng */
public SimpleNode(){
value = new Node();
next = null;
}
public SimpleNode(Node value){
this.value = value;
next = null;
}

/* Phng thc truy nhp thuc tnh value */
public Node getValue(){
return value;
}
87
public void setValue(Node value){
this.value = value;
}

/* Phng thc truy nhp thuc tnh next */
public SimpleNode getNext(){
return next;
}
public void setNext(SimpleNode next){
this.next = next;
}
}

nh ngha nh tiu ca danh sch lin kt n
nh tiu ca danh sch lin kt n l mt i tng khc vi mt nt thng thng ca danh
sch. i tng ny lu cc thng tin:
Ch n nt thc s u tin ca danh sch
Ch n nt cui cng ca danh sch
Lu gi s lng nt thc s trong danh sch.
Chng trnh 5.4b ci t lp nh tiu ca danh sch.

Chng trnh 5.4b
package vidu.chuong5;
public class HeaderSimpleNode{
private int nodeNumber;
private SimpleNode header;
private SimpleNode tailer;

/* Phng thc khi dng */
public HeaderSimpleNode(){
nodeNumber = 0;
header = null;
tailer = null;
}

/* Phng thc truy nhp thuc tnh nodeNumber */
public int getNodeNumber(){
return nodeNumber;
}
public void setNodeNumber(int nodeNumber){
this.nodeNumber = nodeNumber;
88
}

/* Phng thc truy nhp thuc tnh header */
public SimpleNode getHeader(){
return header;
}
public void setHeader(SimpleNode header){
this.header = header;
}

/* Phng thc truy nhp thuc tnh tailer */
public SimpleNode getTailer(){
return tailer;
}
public void setTailer(SimpleNode tailer){
this.tailer = tailer;
}
}

Ci t danh sch lin kt n
Danh sch lin kt n c thuc tnh cc b l mt i tng kiu HeaderSimpleNode. V c cc
thao tc chnh:
Thm mt phn t vo mt v tr bt k: nu v tr nh hn 0, thm vo u danh sch. Nu
v tr ln hn di danh sch, thm vo cui. Trng hp cn li, chn vo danh sch
mt cch bnh thng.
Loi b mt phn t v tr bt k: Ch loi b khi v tr ch ra nm trong phm vi di
danh sch. Phng thc ny tr v nt b loi b, c kiu SimpleNode.
Duyt ton b danh sch: Tr v gi tr ca tt c cc phn t c trong danh sch. Gi tr
tr v l mt mng cc phn t gi tr c kiu Node.
Chng trnh 5.4c ci t lp danh sch lin kt n.

Chng trnh 5.4c
package vidu.chuong5;
public class SimpleList{
private HeaderSimpleNode myList;

/* Cc phng thc khi dng */
public SimpleList(){
myList = new HeaderSimpleNode();
}

89
/* Phng thc chn thm mt node vo v tr @position */
public void insert(Node value, int position){
// To mt node mi
SimpleNode newNode = new SimpleNode(value);
if(position <= 0){ // Chn vo u
newNode.setNext(myList.getHeader());
myList.setHeader(newNode);
if(myList.getNodeNumber() == 0) // Danh sch ban u rng
myList.setTailer(newNode);
}else if(position >= myList.getNodeNumber()){ // Chn vo cui
if(myList.getNodeNumber() == 0){ // Danh sch ban u rng
myList.setHeader(newNode);
myList.setTailer(newNode);
}else{ // Danh sch khng rng
myList.getTailer().setNext(newNode);
myList.setTailer(newNode);
}
}else{ // Chn vo gia
int index = 0;
SimpleNode prev = null;
SimpleNode current = myList.getHeader();
while(index < position){
index++;
prev = current;
current = current.getNext();
}
newNode.setNext(current);
prev.setNext(newNode);
}
// Cp nht s lng node ca danh sch
myList.setNodeNumber(myList.getNodeNumber() + 1);
}

/* Phng thc loi b mt node v tr @position */
public SimpleNode remove(int position){
if((myList.getNodeNumber() == 0)||
(position < 0)||(position >= myList.getNodeNumber()))
return null;
SimpleNode result = null;
if(position == 0){ // Loi phn t u
result = myList.getHeader();

myList.setHeader(myList.getHeader().getNext());
90
if(myList.getNodeNumber() == 1) // Danh sch ch c 1 phn t
myList.setTailer(null);
}else if(position==myList.getNodeNumber()-1){ // Loi phn t cui
result = myList.getTailer();

SimpleNode current = myList.getHeader();
while(!current.getNext().equals(myList.getTailer()))
current = current.getNext();
current.setNext(null);
myList.setTailer(current);
}else{ // Loi phn t nm gia danh sch
int index = 0;
SimpleNode prev = null;
SimpleNode current = myList.getHeader();
while(index < position){
index++;
prev = current;
current = current.getNext();
}
prev.setNext(current.getNext());
result = current;
}
// Cp nht s lng node ca danh sch
myList.setNodeNumber(myList.getNodeNumber() - 1);

result.setNext(null);
return result;
}

/* Phng thc duyt ton b danh sch */
public Node[] travese(){
// Danh sch rng
if(myList.getNodeNumber() == 0)
return null;

// Danh sch khng rng
Node[] result = new Node[myList.getNodeNumber()];
SimpleNode current = myList.getHeader();
int index = 0;
while(current != null){
result[index] = current.getValue();
index++;
current = current.getNext();
91
}
return result;
}
}
5.4.2 Danh sch lin kt kp
nh ngha mt nt ca danh sch lin kt kp
Mt nt ca danh sch lin kt kp bao gm:
Gi tr ca nt, c dng l mt i tng kiu Node c nh ngha trong chng
trnh 5.2a
Nt tip theo ca nt .
Nt trc ca nt .
Mt nt ca danh sch lin kt kp c ci t trong chng trnh 5.5a.

Chng trnh 5.5a
package vidu.chuong5;
public class DoubleNode{
private Node value;
private DoubleNode prev;
private DoubleNode next;

/* Cc phng thc khi dng */
public DoubleNode(){
value = new Node();
prev = null;
next = null;
}
public DoubleNode(Node value){
this.value = value;
prev = null;
next = null;
}

/* Phng thc truy nhp thuc tnh value */
public Node getValue(){
return value;
}
public void setValue(Node value){
this.value = value;
}

/* Phng thc truy nhp thuc tnh next */
92
public DoubleNode getNext(){
return next;
}
public void setNext(DoubleNode next){
this.next = next;
}

/* Phng thc truy nhp thuc tnh prev */
public DoubleNode getPrev(){
return prev;
}
public void setPrev(DoubleNode prev){
this.prev = prev;
}
}

nh ngha nh tiu ca danh sch lin kt kp
nh tiu ca danh sch lin kt n l mt i tng khc vi mt nt thng thng ca danh
sch. i tng ny lu cc thng tin:
Ch n nt thc s u tin ca danh sch
Ch n nt cui cng ca danh sch
Lu gi s lng nt thc s trong danh sch.
Chng trnh 5.5b ci t lp nh tiu ca danh sch.

Chng trnh 5.5b
package vidu.chuong5;
public class HeaderDoubleNode{
private int nodeNumber;
private DoubleNode header;
private DoubleNode tailer;

/* Phng thc khi dng */
public HeaderDoubleNode(){
nodeNumber = 0;
header = null;
tailer = null;
}

/* Phng thc truy nhp thuc tnh nodeNumber */
public int getNodeNumber(){
return nodeNumber;
93
}
public void setNodeNumber(int nodeNumber){
this.nodeNumber = nodeNumber;
}

/* Phng thc truy nhp thuc tnh header */
public DoubleNode getHeader(){
return header;
}
public void setHeader(DoubleNode header){
this.header = header;
}

/* Phng thc truy nhp thuc tnh tailer */
public DoubleNode getTailer(){
return tailer;
}
public void setTailer(DoubleNode tailer){
this.tailer = tailer;
}
}

Ci t danh sch lin kt kp
Danh sch lin kt kp c thuc tnh cc b l m i tng kiu HeaderDoubleNode. V c cc
thao tc chnh:
Thm mt phn t vo mt v tr bt k: nu v tr nh hn 0, thm vo u danh sch. Nu
v tr ln hn di danh sch, thm vo cui. Trng hp cn li, chn vo danh sch
mt cch bnh thng.
Loi b mt phn t v tr bt k: Ch loi b khi v tr ch ra nm trong phm vi di
danh sch. Phng thc ny tr v nt b loi b, c kiu DoubleNode.
Duyt ton b danh sch: Tr v gi tr ca tt c cc phn t c trong danh sch. Gi tr
tr v l mt mng cc phn t gi tr c kiu Node.
Chng trnh 5.5c ci t lp danh sch lin kt kp.

Chng trnh 5.5c
package vidu.chuong5;
public class DoubleList{
private HeaderDoubleNode myList;

/* Cc phng thc khi dng */
public DoubleList(){
94
myList = new HeaderDoubleNode();
}

/* Phng thc chn thm mt node vo v tr @position */
public void insert(Node value, int position){
// To mt node mi
DoubleNode newNode = new DoubleNode(value);
if(position <= 0){ // Chn vo u
newNode.setNext(myList.getHeader());
myList.getHeader().setPrev(newNode);
myList.setHeader(newNode);
if(myList.getNodeNumber() == 0) // Danh sch ban u rng
myList.setTailer(newNode);
}else if(position >= myList.getNodeNumber()){ // Chn vo cui
if(myList.getNodeNumber() == 0){ // Danh sch ban u rng
myList.setHeader(newNode);
myList.setTailer(newNode);
}else{ // Danh sch khng rng
newNode.setPrev(myList.getTailer());
myList.getTailer().setNext(newNode);
myList.setTailer(newNode);
}
}else{ // Chn vo gia
int index = 0;
DoubleNode current = myList.getHeader();
while(index < position){
index++;
current = current.getNext();
}
newNode.setNext(current);
newNode.setPrev(current.getPrev());
current.getPrev().setNext(newNode);
current.setPrev(newNode);
}
// Cp nht s lng node ca danh sch
myList.setNodeNumber(myList.getNodeNumber() + 1);
}

/* Phng thc loi b mt node v tr @position */
public DoubleNode remove(int position){
if((myList.getNodeNumber() == 0)||
(position < 0)||(position >= myList.getNodeNumber()))
return null;
95
DoubleNode result = null;
if(position == 0){ // Loi phn t u
result = myList.getHeader();

myList.setHeader(myList.getHeader().getNext());
if(myList.getHeader() != null)
myList.getHeader().setPrev(null);

if(myList.getNodeNumber() == 1) // Danh sch ch c 1 phn t
myList.setTailer(null);
}else if(position==myList.getNodeNumber()-1){ // Loi phn t cui
result = myList.getTailer();

myList.setTailer(myList.getTailer().getPrev());
myList.getTailer().setNext(null);
}else{ // Loi phn t nm gia danh sch
int index = 0;
DoubleNode current = myList.getHeader();
while(index < position){
index++;
current = current.getNext();
}
current.getPrev().setNext(current.getNext());
current.getNext().setPrev(current.getPrev());
result = current;
}
// Cp nht s lng node ca danh sch
myList.setNodeNumber(myList.getNodeNumber() - 1);

result.setPrev(null);
result.setNext(null);
return result;
}

/* Phng thc duyt ton b danh sch */
public Node[] travese(){
// Danh sch rng
if(myList.getNodeNumber() == 0)
return null;

// Danh sch khng rng
Node[] result = new Node[myList.getNodeNumber()];
DoubleNode current = myList.getHeader();
96
int index = 0;
while(current != null){
result[index] = current.getValue();
index++;
current = current.getNext();
}
return result;
}
}
5.5 CY NH PHN
Ci t nt ca cy nh phn
Mt nt ca cy nh phn c cc thuc tnh sau:
Gi tr ca nt l mt i tng kiu Node
Ch n nt con bn tri ca n.
Ch n nt con bn phi ca n.
Chng trnh 5.6a ci t mt nt ca cy nh phn.

Chng trnh 5.6a
package vidu.chuong5;
public class BinaryTreeNode{
private Node value;
private BinaryTreeNode left;
private BinaryTreeNode right;

/* Cc phng thc khi dng */
public BinaryTreeNode(){
value = new Node();
left = null;
right = null;
}
public BinaryTreeNode(Node value){
this.value = value;
left = null;
right = null;
}

/* Phng thc truy nhp thuc tnh value */
public Node getValue(){
return value;
}
97
public void setValue(Node value){
this.value = value;
}

/* Phng thc truy nhp thuc tnh left */
public BinaryTreeNode getLeft(){
return left;
}
public void setLeft(BinaryTreeNode left){
this.left = left;
}

/* Phng thc truy nhp thuc tnh right */
public BinaryTreeNode getRight(){
return right;
}
public void setRight(BinaryTreeNode right){
this.right = right;
}
}

Ci t cy nh phn
Vi cy nh phn, ta ch cn lu gi mt bin cc b l nt gc ca cy. Khi , ta cn n cc
thao tc c bn trn cy nh phn nh sau:
Tm mt nt c gi tr (hoc l kho) xc nh
Thm nt con tri ca mt nt
Thm nt con phi ca mt nt
Xo nt con tri ca mt nt
Xo nt con phi ca mt nt
Duyt cy theo th t trc
Duyt cy theo th t gia
Duyt cy theo th t sau
Chng trnh 5.6b ci t lp cy nh phn.

Chng trnh 5.6b
package vidu.chuong5;
public class BinaryTree{
private BinaryTreeNode root;

/* Cc phng thc khi dng */
98
public BinaryTree(){
root = null;
}
public BinaryTree(Node value){
root = new BinaryTreeNode(value);
}

/* Phng thc tr v node c gi tr @value */
public BinaryTreeNode getNode(Node value){
return searchNode(root, value);
}
/* Phng thc tm kim qui mt node c gi tr @value
trn mt cy con c gc l @treeNode */
private BinaryTreeNode searchNode(BinaryTreeNode treeNode,
Node value){
if(treeNode.getValue().equals(value))
return treeNode;
if(treeNode == null)
return null;

BinaryTreeNode result = null;
// Tm trn nhnh con bn tri
result = searchNode(treeNode.getLeft(), value);
// Tm trn nhnh con bn phi
if(result == null)
result = searchNode(treeNode.getRight(), value);
return result;
}

/* Phng thc thm node con bn tri ca node @treeNode */
public boolean insertLeft(BinaryTreeNode treeNode, Node value){
if((treeNode == null)||(treeNode.getLeft() != null))
return false;
BinaryTreeNode newNode = new BinaryTreeNode(value);
treeNode.setLeft(newNode);
return true;
}

/* Phng thc thm node con bn phi ca node @treeNode */
public boolean insertRight(BinaryTreeNode treeNode, Node value){
if((treeNode == null)||(treeNode.getRight() != null))
return false;
BinaryTreeNode newNode = new BinaryTreeNode(value);
99
treeNode.setRight(newNode);
return true;
}

/* Phng thc xa node con bn tri ca node @treeNode */
public boolean removeLeft(BinaryTreeNode treeNode){
// Node hin ti rng
if(treeNode == null)
return false;
// Node con tri khng phi l node l
if((treeNode.getLeft() != null)&&
((treeNode.getLeft().getLeft() != null)||
(treeNode.getLeft().getRight() != null)))
return false;
treeNode.setLeft(null);
return true;
}

/* Phng thc xo node con bn phi ca node @treeNode */
public boolean removeRight(BinaryTreeNode treeNode){
// Node hin ti rng
if(treeNode == null)
return false;
// Node con phi khng phi l node l
if((treeNode.getRight() != null)&&
((treeNode.getRight().getLeft() != null)||
(treeNode.getRight().getRight() != null)))
return false;
treeNode.setRight(null);
return true;
}

/* Phng thc duyt cy theo th t trc */
public Node[] preTravese(){
Node[] result = null;
preOrder(root, result);
return result;
}

/* Phng thc duyt cy con @treeNode theo th t trc
v kt qu tr v nm trong @result */
private void preOrder(BinaryTreeNode treeNode, Node[] result){
if(treeNode != null){
100
addNode(result, treeNode.getValue());
preOrder(treeNode.getLeft(), result);
preOrder(treeNode.getRight(), result);
}
}

/* Phng thc thm mt @node vo cui mt danh sch cc @nodes*/
private void addNode(Node[] nodes, Node node){
if(nodes == null){// Danh sch ban u rng
nodes = new Node[1];
nodes[0] = node;
return;
}
Node[] tmpNodes = new Node[nodes.length + 1];
for(int i=0; i<nodes.length; i++)
tmpNodes[i] = nodes[i];
tmpNodes[nodes.length] = node;
nodes = tmpNodes;
}

/* Phng thc duyt cy theo th t gia */
public Node[] inTravese(){
Node[] result = null;
inOrder(root, result);
return result;
}

/* Phng thc duyt cy con @treeNode theo th t gia
v kt qu tr v nm trong @result */
private void inOrder(BinaryTreeNode treeNode, Node[] result){
if(treeNode != null){
inOrder(treeNode.getLeft(), result);
addNode(result, treeNode.getValue());
inOrder(treeNode.getRight(), result);
}
}

/* Phng thc duyt cy theo th t sau */
public Node[] posTravese(){
Node[] result = null;
posOrder(root, result);
return result;
}
101

/* Phng thc duyt cy con @treeNode theo th t sau
v kt qu tr v nm trong @result */
private void posOrder(BinaryTreeNode treeNode, Node[] result){
if(treeNode != null){
posOrder(treeNode.getLeft(), result);
posOrder(treeNode.getRight(), result);
addNode(result, treeNode.getValue());
}
}
}

5.6 TH
5.6.1 Biu din th
i vi nh ca th, n gin, ta nh s nh t 0 n n-1 cho th c n nh. i vi
cnh, ta s s dng ng thi hai cch biu din l ma trn k v danh sch cnh:
Ma trn k dng trong cc thao tc tnh ton. Ma trn k l mt ma trn hai chiu n*n, nu
A[i,j]=1 th c cnh t i n j, nu A[i,j]=0 th khng c cnh t i n j.
Danh sch cnh dng khi to th cho thun tin. Mi phn t ca danh sch l mt
cnh, biu din bng hai s l hai nh ca u mt cnh.
Chng trnh 5.7a ci t lp biu din mt cnh ca th tng qut (c tnh n trng s) theo
danh sch cnh.

Chng trnh 5.7a
package vidu.chuong5;
public class Bridge{
private int start;
private int end;
private int weight;

/* Cc phng thc khi dng */
public Bridge(int start, int end){
this.start = start;
this.end = end;
weight = 0;
}
public Bridge(int start, int end, int weight){
this.start = start;
this.end = end;
this.weight = weight;
}
102

/* Phng thc truy nhp thuc tnh start */
public int getStart(){
return start;
}
public void setStart(int start){
this.start = start;
}

/* Phng thc truy nhp thuc tnh end */
public int getEnd(){
return end;
}
public void setEnd(int end){
this.end = end;
}

/* Phng thc truy nhp thuc tnh weight */
public int getWeight(){
return weight;
}
public void setWeight(int weight){
this.weight = weight;
}
}

5.6.2 Ci t th khng c trng s
Mt th khng c trng s c cc thuc tnh cc b sau:
S lng cc nh. T s lng cc nh c th suy ra tp cc nhn ca cc nh.
Ma trn k biu din cc cnh. A[i,j]=1 th c cnh t i n j, nu A[i,j]=0 th khng c
cnh t i n j.
Danh sch cnh khng cn tnh n trng s. Danh sch cnh v ma trn k c cp nht
ng b vi nhau.
Cc thao tc c bn trn th khng c trng s:
Kim tra tnh lin thng ca th
Tm ng i gia hai nh bt k
Tm cy khung (cy bao trm) ca th
Chng trnh 5.7b ci t lp th khng c trng s.


103
Chng trnh 5.7b
package vidu.chuong5;
public class Graph{
private int nodeNumber; // S lng nh
private int[][] A; // Ma trn k
private Bridge[] B; // Danh sch cnh

/* Cc phng thc khi dng */
public Graph(int nodeNumber, int[][] A){
this.nodeNumber = nodeNumber;
this.A = A;

// ng b danh sch cnh
int lengthB = 0;
for(int i=0; i<nodeNumber; i++)
for(int j=0; j<nodeNumber; j++)
if(A[i][j] == 1) lengthB ++;

if(lengthB > 0){
B = new Bridge[lengthB];
int index = 0;
for(int i=0; i<nodeNumber; i++)
for(int j=0; j<nodeNumber; j++)
if(A[i][j] == 1){
B[index] = new Bridge(i,j);
index ++;
}
}
}
public Graph(int nodeNumber, Bridge[] B){
this.nodeNumber = nodeNumber;
this.B = B;

// ng b ma trn k
A = new int[nodeNumber][];
for(int i=0; i<nodeNumber; i++)
A[i] = new int[nodeNumber];

for(int i=0; i<nodeNumber; i++)
for(int j=0; j<nodeNumber; j++)
A[i][j] = 0;

if(B != null){
104
for(int i=0; i<B.length; i++){
A[B[i].getStart()][B[i].getEnd()] = 1;
}
}
}

/* Phng thc truy nhp thuc tnh nodeNumber */
public int getNodeNumber(){
return nodeNumber;
}
public void setNodeNumber(int nodeNumber){
this.nodeNumber = nodeNumber;
}

/* Thm mt cnh vo th */
public void addBridge(Bridge bridge){
if(B == null){ // Ban u cha c cnh no
B = new Bridge[1];
B[0] = bridge;
}else{
Bridge *tmp = new Bridge[B.length + 1];
for(int i=0; i<B.length; i++)
tmp[i] = B[i];
tmp[B.length] = bridge;
}
// Cp nht ma trn k
A[bridge.getStart()][bridge.getEnd()] = 1;
}

/* Kim tra tnh lin thng ca th */
public boolean isConnected(){
// Mng nh u duyt node
boolean[] visited = new boolean[nodeNumber];
for(int i=0; i<nodeNumber; i++)
visited[i] = false;
int[] queue = new int[nodeNumber]; // Hng i, duyt BFS
int front=0, tail = 0;
int size = 1; // S lng nh lin thng
queue[0] = 0;
visited[0] = true; // Khi to hng i
while(front <= tail){ // m s nh lin thng
int u = queue[front];
front++;
105
for(int j=0; j<nodeNumber; j++)
if(A[u][j] == 1)&&(!visited[j]){
tail++;
queue[tail] = j;
visited[j] = true;
size++;
}
}
// Nu s nh lin thng bng nodeNumber th th l lin thng
if(size == nodeNumber) return true;
return false;
}

/* Tm ng i gia hai nh bt k */
public Bridge[] way(int start, int end){
// Mng nh u duyt node
boolean[] visited = new boolean[nodeNumber];
for(int i=0; i<nodeNumber; i++)
visited[i] = false;
int[] prev = new int[nodeNumber]; // Mng lu vt ng i
int[] queue = new int[nodeNumber]; // Hng i, duyt BFS
int front=0, tail = 0;
queue[0] = start;
visited[start] = true; // Khi to hng i
while(front <= tail)&&(!visited[end]){ // Tm ng i
int u = queue[front];
front++;
for(int j=0; j<nodeNumber; j++)
if(A[u][j] == 1)&&(!visited[j]){
tail++;
queue[tail] = j;
visited[j] = true;
prev[j] = u;
}
}
// nu cha n c node @end th khng c ng i
if(!visited[end]) return null;
/* Trng hp c ng i, Lu vt vo mt stack */
int[] stack = new int[nodeNumber];
int top = 0;
stack[top] = end;
while(stack[top] != start){
int v = prev[stack[top]];
106
top++;
stack[top] = v;
}
/* c kt qu t stack */
Bridge[] result = new Bridge[top];
int index = 0;
while(top > 0){
result[index] = new Bridge(stack[top], stack[top-1]);
index++;
top--;
}
return result;
}

/* Tm cy khung ca th */
public Graph tree(){
// Nu th khng lin thng, s khng c cy bao trm
if(!isConnected())
return null;

// Khi to cy bao trm, cng l mt th c @nodeNumber node
int[][] newA = new int[nodeNumber][];
for(int i=0; i<nodeNumber; i++)
newA[i] = new int[nodeNumber];
for(int i=0; i<nodeNumber; i++)
for(int j=0; j<nodeNumber; j++)
newA[i][j] = 0; // Cha c cnh no
Graph result = new Graph(nodeNumber, newA);

// Mng nh du duyt node
boolean[] visited = new boolean[nodeNumber];
for(int i=0; i<nodeNumber; i++)
visited[i] = false;
int[] queue = new int[nodeNumber]; // Hng i, duyt BFS
int front=0, tail = 0;
queue[0] = 0;
visited[0] = true; // Khi to hng i
while(front <= tail){ // Tm cnh ca CBT
int u = queue[front];
front++;
for(int j=0; j<nodeNumber; j++)
if(A[u][j] == 1)&&(!visited[j]){
tail++;
107
queue[tail] = j;
visited[j] = true;
result.addBridge(new Bridge(u,j));// B sung cnh vo CBT
}
}
return result;
}
}

5.6.3 Ci t th c trng s
Mt th c trng s c cc thuc tnh cc b sau:
S lng cc nh. T s lng cc nh c th suy ra tp cc nhn ca cc nh.
Ma trn k biu din cc cnh c tnh n trng s: A[i,j]=trng s cnh ij. Nu gia i v j
khng c cnh th gi tr ny l v cng (t nh ngha trong chng trnh - maxWeight)
Danh sch cnh c tnh n thuc tnh trng s (trng s c th m, nhng gi s khng
c chu trnh m). Danh sch cnh v ma trn k c cp nht ng b vi nhau.
Cc thao tc c bn trn th c trng s:
Kim tra tnh lin thng ca th
Tm ng i ngn nht gia hai nh bt k
Tm cy khung (cy bao trm) nh nht ca th
Chng trnh 5.7c ci t lp th c trng s.

Chng trnh 5.7c
package vidu.chuong5;
public class WeightedGraph{
private int nodeNumber; // S lng nh
private int[][] A; // Ma trn k
private Bridge[][] B; // Danh sch cnh
private static int maxWeight = 10000;

/* Cc phng thc khi dng */
public WeightedGraph(int nodeNumber, int[][] A){
this.nodeNumber = nodeNumber;
this.A = A;

// ng b danh sch cnh
int lengthB = 0;
for(int i=0; i<nodeNumber; i++)
for(int j=0; j<nodeNumber; j++)
if(A[i][j] < maxWeight) lengthB ++;
108

if(lengthB > 0){
B = new Bridge[lengthB];
int index = 0;
for(int i=0; i<nodeNumber; i++)
for(int j=0; j<nodeNumber; j++)
if(A[i][j] < maxWeight){
B[index] = new Bridge(i,j, A[i][j]);
index ++;
}
}
}
public WeightedGraph(int nodeNumber, Bridge[] B){
this.nodeNumber = nodeNumber;
this.B = B;

// ng b ma trn k
A = new int[nodeNumber][];
for(int i=0; i<nodeNumber; i++)
A[i] = new int[nodeNumber];

for(int i=0; i<nodeNumber; i++)
for(int j=0; j<nodeNumber; j++)
A[i][j] = maxWeight;

if(B != null){
for(int i=0; i<B.length; i++){
A[B[i].getStart()][B[i].getEnd()] = B[i].getWeight();
}
}
}

/* Phng thc truy nhp thuc tnh nodeNumber */
public int getNodeNumber(){
return nodeNumber;
}
public void setNodeNumber(int nodeNumber){
this.nodeNumber = nodeNumber;
}

/* Thm mt cnh vo th */
public void addBridge(Bridge bridge){
if(B == null){ // Ban u cha c cnh no
109
B = new Bridge[1];
B[0] = bridge;
}else{
Bridge[] tmp = new Bridge[B.length + 1];
for(int i=0; i<B.length; i++)
tmp[i] = B[i];
tmp[B.length] = bridge;
}
// Cp nht ma trn k
A[bridge.getStart()][bridge.getEnd()] = bridge.getWeight();
}

/* Kim tra tnh lin thng ca th */
public boolean isConnected(){
// Mng nh u duyt node
boolean[] visited = new boolean[nodeNumber];
for(int i=0; i<nodeNumber; i++)
visited[i] = false;
int[] queue = new int[nodeNumber]; // Hng i, duyt BFS
int front=0, tail = 0;
int size = 1; // S lng nh lin thng
queue[0] = 0;
visited[0] = true; // Khi to hng i
while(front <= tail){ // m s nh lin thng
int u = queue[front];
front++;
for(int j=0; j<nodeNumber; j++)
if(A[u][j] < maxWeight)&&(!visited[j]){
tail++;
queue[tail] = j;
visited[j] = true;
size++;
}
}
// Nu s nh lin thng bng nodeNumber th th l lin thng
if(size == nodeNumber) return true;
return false;
}

/* Tm ng i ngn nht gia hai nh bt k, Ford-Bellman */
public Bridge[] minWay(int start, int end){
int[] prev = new int[nodeNumber]; // Mng lu vt ng i
int[] distance = new int[nodeNumber]; // Khong cch n cc node
110
for(int i=0; i<nodeNumber; i++){
prev[i] = start;
distance[i] = maxWeight;
}
distance[start] = 0;
for(int i=0; i<nodeNumber-2; i++)
for(int j=0; j<nodeNumber; j++)
for(int k=0; k<nodeNumber; k++)
if(j != start)&&(distance[j] > distance[k] + A[k][j]){
distance[j = distance[k] + A[k][j];
prev[j] = k;
}
}
// nu cha n c node @end th khng c ng i
if(distance[end] == maxWeight) return null;
/* Trng hp c ng i, Lu vt vo mt stack */
int[] stack = new int[nodeNumber];
int top = 0;
stack[top] = end;
while(stack[top] != start){
int v = prev[stack[top]];
top++;
stack[top] = v;
}
/* c kt qu t stack */
Bridge[] result = new Bridge[top];
int index = 0;
while(top > 0){
result[index] = new Bridge(stack[top], stack[top-1]);
index++; top--;
}
return result;
}

/* Tm cy khung nh nht ca th */
public WeightedGraph minTree(){
// Nu th khng lin thng, s khng c cy bao trm
if(!isConnected())
return null;

// Khi to cy bao trm, cng l mt th c @nodeNumber node
int[][] newA = new int[nodeNumber][];
for(int i=0; i<nodeNumber; i++)
111
newA[i] = new int[nodeNumber];
for(int i=0; i<nodeNumber; i++)
for(int j=0; j<nodeNumber; j++)
newA[i][j] = maxWeight; // Cha c cnh no
WeightedGraph result = new WeightedGraph(nodeNumber, newA);

// Sp xp cnh khng gim
for(int i=0; i<B.length; i++)
for(int j=i+1; j<B.length; j++)
if(B[i].getWeight() > B[j].getWeight()){
Bridge tmp = B[i];
B[i] = B[j];
B[j] = tmp;
}
int index = 0, bridgeNumber = 0;
while(bridgeNumber < nodeNumber)&&(index < B.length){
if(result.minWay(B[index].getStart(),B[index].getEnd())==null){
result.addBridge(
new Bridge(B[index].getStart(),B[index].getEnd()));
bridgeNumber++;
}
index++;
}
return result;
}
}

5.7 CASE STUDY III
Trong phn ny, ta s s dng cc lp i tng c ci t trong chng ny: ngn xp,
hng i, danh sch lin kt, cy nh phn v th.
Chng trnh 5.8 ci t mt chng trnh tng hp, s dng menu cho cc i tng: stack,
queue, list. Vi mi i tng, c mt menu con tng ng vi cc thao tc trn i tng .
Vi cc i tng cn li, c coi nh bi tp m rng ca phn ny.

Chng trnh 5.8
package vidu.chuong5;
public class CaseStudy3{
public static void main(String[] args) {
try {
BufferedReader br =
new BufferedReader(new InputStreamReader(System.in));
112

while (true) {
System.out.println("**********************************");
System.out.println(" CASE STUDY 3 ");
System.out.println(" ----------o0o---------- ");
System.out.println(" 1. Thao tac voi ngan xep ");
System.out.println(" 2. Thao tac voi hang doi ");
System.out.println(" 3. Thao tac voi danh sach ");
System.out.println(" 10.Thoat! ");
System.out.println("**********************************");
System.out.print(" |==> Chon chuc nang: ");

int function = Integer.parseInt(br.readLine());
CaseStudy3 ob3 = new CaseStudy3();
switch(function){
case 1: // Thao tc vi ngn xp
ob3.stack(br);
break;
case 2: // Thao tc vi hng i
ob3.queue(br);
break;
case 3: // Thao tc vi danh sch
ob3.list(br);
break;
case 10: // Thot khi chng trnh
System.exit(1);
}
}
}
catch(Exception ex)
{
System.out.println("Loi o ham 'main': ");
ex.printStackTrace();
}
}

/* Thao tc vi ngn xp */
public void stack(BufferedReader br){
MyStack stack = new MyStack();
try {
while (true) {
System.out.println("**********************************");
System.out.println(" THAO TAC VOI NGAN XEP ");
113
System.out.println(" ----------o0o---------- ");
System.out.println(" 1. Them mot phan tu vao stack ");
System.out.println(" 2. Lay mot phan tu ra khoi stack ");
System.out.println(" 3. Lay het cac phan tu cua stack ");
System.out.println(" 10.Thoat! ");
System.out.println("**********************************");
System.out.print(" |==> Chon chuc nang: ");

int function = Integer.parseInt(br.readLine());
switch(function){
case 1: // Thm mt phn t vo ngn xp
System.out.print(Gia tri phan tu them vao:);
int phantu = Integer.parseInt(br.readLine());
stack.push(new Node(phantu));
break;
case 2: // Ly mt phn t ra khi ngn xp
Node node = stack.pop();
if(node != null)
System.out.println(Phan tu lay ra:
+ node.getValue());
else
System.out.println(Stack da rong!);
break;
case 3: // Ly tt c cc phn t ca ngn xp
System.out.println(Cac phan tu cua ngan xep:);
while(true){
Node node = stack.pop();
if(node == null)
break;
System.out.print( + node.getValue());
}
break;
case 10: // Thot khi chng trnh con
return;
}
}
}
catch(Exception ex)
{
ex.printStackTrace();
}
}

114
/* Thao tc vi hng i */
public void queue(BufferedReader br){
MyQueue queue = new MyQueue();
try {
while (true) {
System.out.println("**********************************");
System.out.println(" THAO TAC VOI HANG DOI ");
System.out.println(" ----------o0o---------- ");
System.out.println(" 1. Them mot phan tu vao queue ");
System.out.println(" 2. Lay mot phan tu ra khoi queue ");
System.out.println(" 3. Lay het cac phan tu cua queue ");
System.out.println(" 10.Thoat! ");
System.out.println("**********************************");
System.out.print(" |==> Chon chuc nang: ");

int function = Integer.parseInt(br.readLine());
switch(function){
case 1: // Thm mt phn t vo hng i
System.out.print(Gia tri phan tu them vao:);
int phantu = Integer.parseInt(br.readLine());
queue.insert(new Node(phantu));
break;
case 2: // Ly mt phn t ra khi hng i
Node node = queue.remove();
if(node != null)
System.out.println(Phan tu lay ra:
+ node.getValue());
else
System.out.println(Khong co phan tu nao!);
break;
case 3: // Ly tt c cc phn t ca hng i
System.out.println(Cac phan tu cua hang doi:);
while(true){
Node node = queue.remove();
if(node == null)
break;
System.out.print( + node.getValue());
}
break;
case 10: // Thot khi chng trnh con
return;
}
}
115
}
catch(Exception ex)
{
ex.printStackTrace();
}
}

/* Thao tc vi danh sch lin kt n */
public void list(BufferedReader br){
SimpleList list = new SimpleList();
try {
while (true) {
System.out.println("**********************************");
System.out.println(" THAO TAC VOI DANH SACH DON ");
System.out.println(" --------------o0o------------- ");
System.out.println(" 1. Them mot phan tu vao list ");
System.out.println(" 2. Lay mot phan tu ra khoi list ");
System.out.println(" 3. Duyet cac phan tu cua list ");
System.out.println(" 10.Thoat! ");
System.out.println("**********************************");
System.out.print(" |==> Chon chuc nang: ");

int function = Integer.parseInt(br.readLine());
switch(function){
case 1: // Thm mt phn t vo danh sch
System.out.print(Gia tri phan tu them vao:);
int phantu = Integer.parseInt(br.readLine());
System.out.print(Vi tri chen phan tu:);
int vitri = Integer.parseInt(br.readLine());
list.insert(new Node(phantu), vitri);
break;
case 2: // Ly mt phn t ra khi danh sch
System.out.print(Vi tri phan tu lay ra:);
int vitri = Integer.parseInt(br.readLine());
SimpleNode node = list.remove(vitri);
if(node != null)
System.out.println(Phan tu lay ra:
+ node.getValue());
else
System.out.println(Khong co phan tu nao!);
break;
case 3: // Ly tt c cc phn t ca danh sch
System.out.println(Cac phan tu cua danh sach:);
116
Node[] nodes = list.travese();
for(int i=0; i<nodes.length; i++)
System.out.print( + nodes[i].getValue());
break;
case 10: // Thot khi chng trnh con
return;
}
}
}
catch(Exception ex)
{
ex.printStackTrace();
}
}
}

TNG KT CHNG 5
Ni dung chng 5 trnh by vic biu din v ci t mt s cu trc d liu tru tng trn
Java, bao gm cc gii thut:
Phng php duyt
Phng php qui
Phng php sp xp
Phng php tm kim.
V cc cu trc d liu tru tng:
Ngn xp (stack)
Hng i (queue)
Danh sch lin kt (list): danh sch lin kt n v danh sch lin kt kp.
Cy nh phn (binary tree)
th (graph): th khng trng s v th c trng s.
Hn na, chng ny cng trnh by v minh ho cch s dng cc i tng tru tng trong
cc ng dng.
CU HI V BI TP CHNG 5
1. Ci t b sung cc phng thc sp xp khc vo lp Array trong mc 5.2.1:
a. Sp xp ni bt
b. Sp xp chn.
c. Sp xp vun ng
d. Sp xp trn
2. Chuyn lp MyStack trong mc 5.3.1 thnh mt ngn xp ca cc k t. Sau , dng lp
ngn xp mi o ngc mt xu k t do ngi dng nhp vo t bn phm.
117
3. Dng lp MyQueue m phng chng trnh qun l tin trnh n gin ca h iu
hnh:
Mi tin trnh c m ho bng mt k hiu c kiu int.
Khi mt tin trnh xut hin, n s c a vo mt hng i.
Khi CPU ri, mt tin trnh trong hng i s c ly ra thc hin.
Yu cu vit menu thc hin chng trnh:
Thm mt tin trnh
Ly mt tin trnh ra
Xem tt c cc tin trnh ang c mt trong hng i.
4. Thay i cu trc lp Node ca danh sch lin kt, sao cho value c kiu l lp Employee
c nh ngha trong chng 4.
5. Dng danh sch lin kt n vi cu trc mi trong bi 4 qun l nhn vin ca mt
cng ty: Thm vo mt nhn vin, xo i mt nhn vin, tm kim mt nhn vin theo mt
tiu ch c th (tin lng, tui), duyt tt c cc nhn vin.
6. Dng danh sch lin kt kp thc hin bi s 5.
7. Vit chng trnh (dng menu) p dng thc hin cc thao tc trn cy nh phn, s
dng lp BinaryTree trong mc 5.5.
8. Vit chng trnh (dng menu) p dng thc hin cc thao tc trn th khng trng
s, s dng lp Graph trong mc 5.6.1.
9. Vit chng trnh (dng menu) p dng thc hin cc thao tc trn th c trng s,
s dng lp WeightedGraph trong mc 5.6.2.

118
CHNG 6
LP TRNH GIAO DIN TRN JAVA

Ni dung chng ny tp trung trnh by cc vn lin quan n lp trnh giao din, vi s h
tr ca mt s i tng c cung cp sn bi Java:
Lp trnh giao din vi cc i tng c bn v vi cc i tng multimedia.
Lp trnh giao din vi HTML&Applet
Lp trnh giao din vi SWING
6.1 GIAO DIN VI CC I TNG C BN
Trong mc ny, chng ta s tm hiu v s dng cc i tng c bn ca lp trnh giao din
trong Java:
Cc i tng khung cha (container) c bn: Frame, Panel, Dialog.
Cc i tng thnh phn (component) c bn: Button, Label, TextField, TextArea
Cc s kin c bn ca cc i tng.
Mun s dng cc i tng ny, cn thm lnh s dng th vin awt ca Java:
import java.awt.*;
6.1.1 Cc i tng container c bn
Cc i tng container c dng cha cc i tng thnh phn khc. Cc lp i tng
ny c mt s phng thc chung nh sau:
add(Object): Thm mt i tng (kiu component) vo container.
remove(Object): Loi b mt i tng ra khi container.
removeAll(): Loi b tt c cc i tng m container ang cha.
getComponent(int): Tr v i tng thnh phn c ch s l tham s u vo.
Container qun l cc i tng cha trong n di dng mng.
Ch s ca cc thnh phn l s th t khi thnh phn c
thm vo container.
getComponents(): Tr v mng tt c cc i tng m container ang cha.
countComponents(): Tr v s lng cc i tng m container ang cha.
Frame
Frame l mt i tng c th dng mt cch c lp, hoc c gn vo mt i tng khc nh
mt i tng conponent bnh thng. Thng thng, Frame c dng nh mt ca s ca mt
chng trnh c lp. Cc phng thc c bn ca lp Frame:
Frame(): Khi to khng tham s.
Frame(String): Khi to vi tham s l dng tiu ca frame.
setSize(int, int): nh kch c ca frame, tham s tng ng l chiu rng v chiu
cao ca frame.
119
setVisible(boolean): Cho php frame xut hin hay n i trn mn hnh.
setTitle(String)/getTitle(): Truy nhp thuc tnh dng tiu ca frame.
setResizable(boolean): Thit lp thuc tnh cho php thay i kch c frame.
setIconImage(Image): Thit lp nh icon gc trn (biu tng) ca frame.
Chng trnh 6.1 minh ho vic s dng mt i tng ca lp Frame.

Chng trnh 6.1
package vidu.chuong6;
import java.awt.*;
public class FrameDemo{
public static void main(String[] args) {
// Khai bo v khi to frame c tiu
Frame myFrame = new Frame(This is my Frame!);
myFrame.setSize(300,150); // nh kch c frame
myFrame.setVisible(true); // Hin th frame
}
}

Hnh 6.1: Kt qu demo Frame
Panel
Panel cng l mt dang khung cha, nhng kh n gin. Panel ch dng nhm cc i tng
giao din vi nhau. Thng thng, panel c dng trong mt ca s ca Frame hoc mt ng
dng khc. Cc phng thc c bn ca lp Panel, ngoi cc phng thc chung ca container:
Panel(): Khi to khng tham s.
Chng trnh 6.2 minh ho vic s dng mt Panel trong mt Frame.

Chng trnh 6.2
package vidu.chuong6;
import java.awt.*;
public class PanelDemo{
public static void main(String[] args) {
// Khai bo v khi to frame c tiu
Frame myFrame = new Frame(Frame has a panel!);
myFrame.setSize(300,150); // nh kch c frame
Panel myPanel = new Panel();// Khai bo panel
myFrame.add(myPanel); // Thm panel vo frame
myFrame.setVisible(true); // Hin th frame
120
}
}

Hnh 6.2: Kt qu demo Panel
Dialog
Dialog l mt i tng ca s con ca mt ca s chng trnh chnh. Do vy, Dialog ch c
s dng km vi mt Frame. C hai dng Dialog:
Modal: Khi hin ca s dialog, cc ca s khc ca chng trnh s b kho li, khng
thao tc c, ch thao tc c trn ca s dialog.
Non-modal: Khng kho cc ca s khc. Khi dialog xut hin, ngi dng vn c th
chuyn sang thao tc trn cc ca s khc, nu cn.
Cc phng thc c bn ca lp Dialog:
Dialog(Frame, boolean): Khi to dialog, tham s th nht l frame cha dialog, tham
s th hai xc nh dialog c l modal hay khng.
Dialog(Frame, String, boolean): Khi to dialog, thm tham s th hai l dng tiu ca
dialog.
setVisible(boolean): Thit lp trng thi hin th hoc n dialog trn mn hnh.
setSize(int, int): nh kch c cho dialog, cc tham s tng ng l chiu rng
v chiu cao ca dialog.
setTitle(String)/getTitle(): Truy nhp thuc tnh dng tiu ca dialog.
setResizable(boolean): Thit lp thuc tnh cho php thay i kch c ca dialog.
setLayout(Layout): Thit lp ch hin th cc i tng cha trong dialog.
Chng trnh 6.3 minh ho vic thm mt dialog (ang rng, cha c i tng thnh phn no)
vo mt frame.

Chng trnh 6.3
package vidu.chuong6;
import java.awt.*;
public class DialogDemo{
public static void main(String[] args) {
// Khai bo v khi to frame c tiu
Frame myFrame = new Frame(Frame has a dialog!);
myFrame.setSize(300,150); // nh kch c frame
// Khai bo v khi to dialog
Dialog myDialog = new Dialog(myFrame, An empty dialog!, true);
myDialog.setSize(300,150); // nh kch c dialog
121
myDialog.setVisible(true); // Hin th dialog
}
}

Hnh 6.3: Kt qu demo Dialog

6.1.2 Cc i tng component c bn
Cc i tng component c dng lm thnh phn ca cc i tng khung cha, chng
khng th dng c lp, m lun phi gn vo trong mt i tng khung cha container.
Label
Label (nhn) l mt i tng hin th vn bn tnh, nhng vn bn m ngi dng khng th
thay i trc tip c. Cc phng thc c bn ca Label:
Label(): Khi to mt nhn rng.
Label(String): Khi to mt nhn vi ni dung vn bn l tham s u vo.
Label(String, int): Khi to mt nhn c ni dung sn, tham s th hai xc nh cch
cn l ca nhn so vi khung cha, bao gm {Label.CENTER,
Label.LEFT, Label.RIGHT}.
setText(String)/getText(): Truy nhp ni dung vn bn ca nhn.
setAlignment(int)/getAlignment(): Truy nhp thuc tnh cn l ca nhn.
setFont(Font): nh dng phng ch ca nhn.
Chng trnh 6.4 minh ho vic s dng nhn trong mt frame.

Chng trnh 6.4
package vidu.chuong6;
import java.awt.*;
public class LabelDemo{
public static void main(String[] args) {
// Khai bo v khi to frame c tiu
Frame myFrame = new Frame(Frame has a label!);
myFrame.setSize(300,150); // nh kch c frame

// Khai bo v khi to label
Label myLabel = new Label();
myLabel.setText(This is a label!);//Gn ni dung vn bn
myLabel.setAlignment(Label.CENTER);// Cn l gia
myFrame.add(myLabel); // Gn label vo frame
122
myFrame.setVisible(true); // Hin th frame
}
}

Hnh 6.4: Kt qu demo Label
TextField v TextArea
y l hai i tng dng biu din vn bn v ngi dng c th thay i ni dung vn bn
cha trong chng. im khc bit l TextField ch cho php mt dng vn bn, trong khi
TextArea cho php cha nhiu dng vn bn. Cc phng thc chung ca hai lp ny:
setText(String)/getText(): Truy nhp thuc tnh ni dung vn bn cha trong .
getSelectedText(): Tr v chui vn bn c bi en (nh du chn) trong .
getSelectedStart(): Tr v v tr k t u trong vng c nh du chn (tnh t 0).
getSelectedEnd(): Tr v v tr k t cui trong vng c nh du chn (tnh t 0).
selectAll(): nh du chn ton vn bn.
setEditable(boolean): Xc nh vng vn bn c th edit c hay khng.
Cc phng thc khc ca lp TextField:
TextField(): Khi to mt vn bn rng.
TextField(int): Khi to mt vn bn rng, rng xc nh bi tham s vo.
TextField(String): Khi to mt vn bn c ni dung xc nh bi tham s u vo.
TextField(String, int): Khi to vi ni dung c sn, rng xc nh.
setEchoChar(char)/getEchoChar(): Truy nhp thuc tnh l k t thay th vn bn trong .
Thuc tnh ny c dng khi ta cn che du thng tin vn bn, v
d, g mt khu ca chng trnh.
getColums(): Tr v rng ca vn bn.
Cc phng thc khc ca lp TextArea:
TextArea(): Khi to mt vng vn bn rng.
TextArea(int, int): Khi to mt vng vn bn rng, kch c (s dng, s ct) xc
nh bi tham s vo.
TextArea(String): Khi to mt vng vn bn c ni dung xc nh bi tham s u
vo.
TextArea(String, int, int): Khi to vng vn bn vi ni dung c sn, rng xc nh.
appendText(String): Thm mt on vn bn vo cui on vn bn trong vng.
insertText(String, int): Chn mt on vn bn vo v tr xc nh (tham s th hai) ca
vng vn bn.
123
replaceText(String, int, int): Thay th mt on vn bn trong vng, nh du bng v tr
bt u v v tr kt thc (tham s th hai v th ba), bng mt
on vn bn mi (tham s th nht).
getRows()/getColums(): Tr v s dng/ct ca vng vn bn.
Chng trnh 6.5 minh ho vic t cc i tng vn bn v vng vn bn vo mt frame.

Chng trnh 6.5
package vidu.chuong6;
import java.awt.*;
public class TextDemo{
public static void main(String[] args) {
// Khai bo v khi to frame c tiu
Frame myFrame = new Frame(Frame has some texts!);
myFrame.setSize(300,150); // nh kch c frame

// Khai bo v khi to textField
TextField myTextField = new TextField(A text field!);
myFrame.add(myTextField); // Gn vo frame

// Khai bo v khi to textArea
TextArea myTextArea = new TextArea(5, 40);
String str=The TextFields columns is:
+myTextField.getColumns();
str += The TextAreas size is: + myTextArea.getRows()
+ * + myTextArea.getColumns();
myTextArea.setText(str); // Thit lp ni dung
myFrame.add(myTextArea); // Gn vo frame

myFrame.setVisible(true); // Hin th frame
}
}

Hnh 6.5: Kt qu demo Text
Button
Button l i tng nt lnh, dng thc hin mt nhim v xc nh. Cc phng thc c bn
ca nt nhn:
Button(String): Khi to nt nhn vi tn xc nh trn nt.
124
setLabel(String)/getLabel(): Truy nhp tn ca nt nhn.
Chng trnh 6.6 minh ho vic to mt nt nhn trong mt frame.

Chng trnh 6.6
package vidu.chuong6;
import java.awt.*;
public class ButtonDemo{
public static void main(String[] args) {
// Khai bo v khi to frame c tiu
Frame myFrame = new Frame(Frame has a button!);
myFrame.setSize(300,150); // nh kch c frame

// Khai bo v khi to button
Button myButton = new Button(Click!);
myFrame.add(myButton); // Gn vo frame
myFrame.setVisible(true); // Hin th frame
}
}

Hnh 6.6: Kt qu demo Button

Tuy nhin, khi click vo nt nhn ny, khng xy ra iu gi c. L do l chng ta cha ci t
vic x l s kin cho nt nhn. Ni dung phn 6.1.3 s trnh by vic x l s kin cho cc i
tng.
6.1.3 Cc s kin c bn ca i tng
Mi i tng component c mt s s kin xc nh, pht sinh t chnh i tng . Java cung
cp mt s lp s kin c bn nm trong th gi java.awt.event:
import java.awt.event.*;
Cc lp s kin c bn ca cc i tng bao gm:
ActionEvent: Xut hin khi mt nt b click vo, mt danh sch (list) c chn,
mt menu c chn.
ComponentEvent: Xut hin khi mt component b thay i kch c, v tr, trng thi.
FocusEvent: Xut hin khi mt component c hoc mt focus.
ItemEvent: Xut hin khi mt menu item c chn hoc b, khi checkbox hoc
list item c click vo.
125
WindowEvent: Xut hin khi mt ca s c m ra, kch hot, ng li hoc thot
ra.
TextEvent: Xut hin khi gi tr vn bn ca cc i tng TextField v
TextArea b thay i.
MouseEvent: Xut hin khi chut c click, di chuyn qua, nhn xung v th ra.
KeyEvent: Xut hin khi c u vo t bn phm.
Cc giao tip c ci t x l cc s kin trn:
ActionListener.
ComponentListener
FocusListener
ItemListener
WindowListener
TextListener
MouseListener v MouseMotionListener
KeyListener
Khi ci t cc giao tip ny, cn ci t li phng thc x l s kin:
public void actionPerformed(<i tng lp s kin>){
// Ci t li m lnh
}
xc nh s kin pht sinh t component no, ta dng phng thc getSource():
<Kiu component> <i tng s kin>.getSource();
Chng trnh 6.7 ci t mt ng dng hon chnh, bao gm:
Hai nhn tiu cho hai vn bn.
Hai vn bn, nhp s liu vo.
Bn nt nhn tng ng thc hin cc thao tc nhn, chia, cng, tr cc s liu nhp t
hai vn bn.
Thm mt nt nhn, khi click vo s thot khi chng trnh (chng trnh kt thc).

Chng trnh 6.7
package vidu.chuong6;
import java.awt.*;
import java.awt.event.*;
public class EventDemo extends Frame implements ActionListener{
Label lbl1, lbl2, lblKq;
TextField txt1, txt2;
Button btnCong, btnTru, btnNhan, btnChia, btnThoat;

public EventDemo(){
super(Event demo!);
this.setLayout(new GridLayout(6,2)); //Ch hin th 6 dng, 2 ct
126
lbl1 = new Label(So thu nhat:); // Nhn s th nht
this.add(lbl1);
txt1 = new TextField(); // vn bn s th nht
this.add(txt1);
lbl2 = new Label(So thu hai:); // Nhn s th hai
this.add(lbl2);
txt2 = new TextField(); // vn bn s th hai
this.add(txt2);
lblKq = new Label(); // Nhn kt qu
this.add(lblKq);
this.add(new Label());

// Cc nt nhn
btnCong = new Button(Cong); // Nt cng
btnCong.addActionListener(this); // Bt s kin
this.add(btnCong);
btnTru = new Button(Tru); // Nt tr
btnTru.addActionListener(this);
this.add(btnTru);
btnNhan = new Button(Nhan); // Nt nhn
btnNhan.addActionListener(this);
this.add(btnNhan);
btnChia = new Button(Chia); // Nt chia
btnChia.addActionListener(this);
this.add(btnChia);
btnThoat = new Button(Thoat); // Nt thot
btnThoat.addActionListener(this);
this.add(btnThoat);

// Phng thc bt s kin click vo nt ng frame
this.addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e){
System.exit(0);
}
});
}

/* Phng thc x l s kin nt c nhn */
public void actionPerformed(ActionEvent ae){
float x = Float.parseFloat(txt1.getText());
float y = Float.parseFloat(txt2.getText());
float kq = 0;
if(ae.getSource() == btnCong) // Cng hai s
127
kq = x + y;
if(ae.getSource() == btnTru) // Tr hai s
kq = x - y;
if(ae.getSource() == btnNhan) // Nhan hai s
kq = x*y;
if(ae.getSource() == btnChia)&&(y != 0) // Chia hai s
kq = x/y;
if(ae.getSource() == btnThoat) // Thot khi chng trnh
System.exit(0);
// Thay i ni dung kt qu
lblKq.setText(Ket qua la: + String.valueOf(kq));
}

public static void main(String[] args) {
// Khai bo i tng demo
EventDemo myFrame = new EventDemo();
myFrame.setSize(300,150); // nh kch c frame
myFrame.setVisible(true); // Hin th frame
}
}
6.2 GIAO DIN VI CC I TNG MULTIMEDIA
Ni dung phn ny s tp trung trnh by cc i tng multimedia, bao gm:
nh du (Checkbox) v Nt chn (Radio button)
La chn (Choice)
Danh sch (List)
Trnh n (Menu)
6.2.1 nh du v nt chn
Checkbox v Radio button l cc i tng dng nh du, hoc chn thng tin. S khc bit
gia chng l checkbox cho php chn ng thi nhiu cng lc, trong khi , trong mi nhm
radio button, ch cho php chn mt thng tin.
Phng thc chung ca hai lp ny:
setState(boolean)/getState(): Truy nhp n trng thi ca nt.
Cc phng thc khi to Checkbox:
Checkbox(): Khi to mt nh du rng.
Checkbox(String): Khi to nh du c nhn xc nh.
Checkbox(String, boolean): Khi to nh du c nhn, c trng thi xc nh.
Cc phng thc khi to Radio button tng t nh Checkbox, ngoi tr vic phi ch ra nhm
ca cc radio button:
Checkbox(String, boolean, CheckboxGroup);
128
Checkbox(String, CheckboxGroup, boolean);
X l s kin thay i trng thi nt chn:
Kiu s kin: ItemEvent
Ci t giao tip: ItemListener
Phng thc xa l: itemStateChange(ItemEvent)
Chng trnh 6.8 minh ho vic dng mt nhm radio button gm ba nt, tng ng vi ba mu
(RED, BLUE, GREEN). Khi click vo nt no, th mu nn s i theo mu .

Chng trnh 6.8
package vidu.chuong6;
import java.awt.*;
import java.awt.event.*;
public class RadioDemo extends Frame implements ItemListener{
Checkbox cbxRed, cbxBlue, cbxGreen;

public RadioDemo(){
super(Radio demo!);
//Ch hin th 3 dng, 1 ct
this.setLayout(new GridLayout(3,1));
CheckboxGroup cbxg = new CheckboxGroup(); // Nhm radio
cbxRed = new Checkbox(Red, cbxg, true); // Nt red
cbxRed.addItemListener(this); // Bt s kin
this.add(cbxRed);
cbxBlue = new Checkbox(Blue, cbxg, false);// Nt blue
cbxBlue.addItemListener(this); // Bt s kin
this.add(cbxBlue);
cbxGreen = new Checkbox(Green, cbxg, false);// Nt green
cbxGreen.addItemListener(this); // Bt s kin
this.add(cbxGreen);

// Phng thc bt s kin click vo nt ng frame
this.addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e){
System.exit(0);
}
});
}

/* Phng thc x l s kin thay i trng thi nt */
public void itemStateChange(ItemEvent ie){
if(ie.getStateChanged() == ItemEvent.SELECTED){
String item = (String)ie.getItem();
129
if(item.equals(Red)) // i mu red
this.setBackground(Color.red);
if(item.equals(Blue)) // i mu blue
this.setBackground(Color.blue);
if(item.equals(Green)) // i mu green
this.setBackground(Color.green);
this.repaint(); // V li mu nn
}
}

public static void main(String[] args) {
// Khai bo i tng demo
RadioDemo myFrame = new RadioDemo();
myFrame.setSize(300,150); // nh kch c frame
myFrame.setVisible(true); // Hin th frame
}
}

Hnh 6.7: Kt qu demo Radio Button

6.2.2 La chn
Choice l i tng menu s xung, hin thi mt danh sch cc item v cho php ngi dng
chn mt trong s cc item (tng t i tng dropdown list ca window). Cc phng thc
c bn ca lp Choice:
Choice(): Khi to i tng choice.
addItem(String): Thm mt item vo danh sch la chn.
remove(int): Xo item v tr th i trong danh sch (bt u l v tr 0).
removeAll(): Xo ton b item trong danh sch chn.
select(int)/select(String): Chn mt item theo s th t hoc theo tn.
getSelectedIndex(): Tr v ch s ca item c chn.
getSelectedItem(): Tr v tn ca item c chn.
getItem(int): Tr v tn ca item tng ng vi s th t a vo.
X l s kin thay i trng thi nt chn:
Kiu s kin: ItemEvent
Ci t giao tip: ItemListener
130
Phng thc xa l: itemStateChange(ItemEvent)
Chng trnh 6.9 c chc nng tng t nh chng trnh 6.8: Thay i mu nn theo mu c
chn. Nhng trong chng trnh ny, ta dng i tng choice, thay v dng radio button.

Chng trnh 6.9
package vidu.chuong6;
import java.awt.*;
import java.awt.event.*;
public class ChoiceDemo extends Frame implements ItemListener{
Choice myChoice;

public ChoiceDemo(){
super(Choice demo!);
myChoice = new Choice(); // Khi to
myChoice.addItem(Red); // Thm item red
myChoice.addItem(Blue); // Thm item blue
myChoice.addItem(Green); // Thm item green
myChoice.addItemListener(this); // Bt s kin
this.add(myChoice); // Gn vo frame

// Phng thc bt s kin click vo nt ng frame
this.addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e){
System.exit(0);
}
});
}

/* Phng thc x l s kin thay i trng thi item */
public void itemStateChange(ItemEvent ie){
if(ie.getStateChanged() == ItemEvent.SELECTED){
String item = (String)ie.getItem();
if(item.equals(Red)) // i mu red
this.setBackground(Color.red);
if(item.equals(Blue)) // i mu blue
this.setBackground(Color.blue);
if(item.equals(Green)) // i mu green
this.setBackground(Color.green);
this.repaint(); // V li mu nn
}
}

public static void main(String[] args) {
131
// Khai bo i tng demo
ChoiceDemo myFrame = new ChoiceDemo();
myFrame.setSize(300,150); // nh kch c frame
myFrame.setVisible(true); // Hin th frame
}
}

Hnh 6.8: Kt qu demo Choice Button

6.2.3 Danh sch
List l mt danh sch hot ng tng t i tng choice. Tuy nhin, list cho php ngi dng
c th chn mt hoc nhiu item cng mt lc. Cc phng thc c bn ca lp List:
List(): Khi to mt danh sch rng, mi ln ch c chn mt item.
List(int): Tng t, nhng c qui nh s dng c nhn thy.
List(int, boolean): Khi to mt danh sch c s dng c nhn thy xc nh, ch
cho php chn mt hay nhiu item xc nh bi tham s th hai.
add(String): Thm mt item vo danh sch.
add(String, int): Chn mt item vo v tr xc nh trong danh sch. Nu ch s chn
vt ra khi phm vi danh sch, item s c thm vo cui.
replaceItem(String, int): Thay th mt item v tr xc nh (tham s th hai) trong danh
sch bng mt item mi (tham s th nht).
remove(int): Xo item v tr xc nh trong danh sch.
removeAll(): Xo ton b item hin c ca danh sch.
getSeletedIndex(): Tr v index ca item c chn (danh sch n chn).
getSelectedItem(): Tr v item c chn (danh sch n chn).
getSelectedIndexs(): Tr v ch s cc item c chn (danh sch a chn).
getSelectedItems(): Tr v cc item c chn (danh sch a chn).
X l s kin khi thay i item c chn:
Kiu s kin: ItemEvent
Ci t giao tip: ItemListener
Phng thc x l: itemStateChange(ItemEvent);
Chng trnh 6.10 minh ho vic s dng i tng list vi kh nng a chn. Mi khi thay i
item c chn, mt thng bo cc mu c chn s hin ra.

132
Chng trnh 6.10
package vidu.chuong6;
import java.awt.*;
import java.awt.event.*;
public class ListDemo extends Frame implements ItemListener{
List myList;
Label lbl;

public ListDemo(){
super(List demo!);
// Khi to list a chn, ch nhn c mt dng
myList = new List(1, true);
myList.setSize(300,150);
// Thm cc item l cc loi mu sc
myList.add(White);
myList.add(Red);
myList.add(Orange);
myList.add(Green);
myList.add(Yellow);
myList.add(Blue);
myList.add(Black);
myList.addItemListener(this); // Bt s kin
this.setLayout(new FlowLayout());
this.add(myList); // Gn vo frame
lbl = new Label(); // Khi to nhn
this.add(lbl); // Gn vo frame

// Phng thc bt s kin click vo nt ng frame
this.addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e){
System.exit(0);
}
});
}
/* Phng thc x l s kin thay i trng thi item */
public void itemStateChange(ItemEvent ie){
if((ie.getStateChange() == ItemEvent.SELECTED)||
(ie.getStateChange() == ItemEvent.DESELECTED)){
String kq = Cac mau duoc chon:;
String[] items = myList.getSelectedItems();
for(int i=0; i<items.length; i++)
kq += items[i] + , ;
lbl.setText(kq);
133
}
}

public static void main(String[] args) {
// Khai bo i tng demo
ListDemo myFrame = new ListDemo();
myFrame.setSize(300,150); // nh kch c frame
myFrame.setVisible(true); // Hin th frame
}
}

Hnh 6.9: Kt qu demo Listbox

6.2.4 Trnh n
Trnh n (menu) c dng trn cc thanh cng c ca cc ca s hoc l popup menu xut hin
khi ta click chut phi vo mt i tng. Java cung cp mt s lp trnh n:
Menubar: Thanh trnh n
Menu: Trnh n xung
PopupMenu: Trnh n xut hin khi click chut phi.
MenuItem: Cc mc chn ca trnh n.
Menubar
Menubar l thanh cng c dng cha cc trnh n menu. Cc phng thc c bn ca lp
Menubar:
Menubar(): Khi to mt thanh cng c cho trnh n
add(Menu): Thm mt trnh n mune ln thanh trnh n menubar.
t mt menubar ca mt frame, ta gi phng thc ca frame:
<i tng frame>.setMenuBar(<i tng menubar>);
Menu v PopupMenu
Trnh n menu l i tng s s xung khi click chut ln i tng hin th ca menu. Menu
cn c gi l menu con ca mt thanh trnh n. Cc phng thc c bn ca lp Menu:
Menu(String): Khi to mt menu, vi tn xc nh.
add(MenuItem): Thm mt item vo menu
add(Menu): Thm mt menu con vo menu c, dng khi mun to menu c
nhiu mc.
134
addSeparator(): Thm mt ng phn vng vo menu ( nhm cc item vi nhau).
X l s kin ca lp Menu:
Kiu s kin: ActionEvent
Giao tip ci t: ActionListener
Phng thc x l: actionPerformed(ActionEvent);
MenuItem
MenuItem l i tng item trong cc trnh n menu. Mi item, khi c click vo s c tc
dng nh mt nt lnh. Cc phng thc c bn ca lp MenuItem:
MenuItem(String): Khi to mt item.
CheckboxMenuItem(String): Khi to mt item c mc chn nh checkbox.
getState(): Tr v trng thi ca item. Ch dng cho item c mc chn.
enable(): Cho php item hot ng (l ch mc nh).
disable(): Khng cho php item hot ng (lm m item i).
X l s kin ca lp MenuItem:
Kiu s kin: ActionEvent
Giao tip ci t: ActionListener
Phng thc x l: actionPerformed(ActionEvent);
Chng trnh 6.11 minh ho vic s dng cc loi menu:
To mt menubar ca frame
Trn menubar, to mt menu File. Khi click vo s s xung mt menu vi cc item:
New, Open, Save, Save As, Exit.
Khi bm chut phi vo frame, s s ra mt menu popup gm cc item: Cut, Copy, Paste.
Khi click chut vo item no trn cc menu, mt nhn trong frame s hin th tn ca item
va c chn.
Chng trnh kt thc khi click vo item Exit.

Chng trnh 6.11
package vidu.chuong6;
import java.awt.*;
import java.awt.event.*;
public class MenuDemo extends Frame
implements ActionListener, MouseListener{
Menubar myBar;
Menu myMenu;
PopupMenu myPopup;
Label lbl;

public MenuDemo(){
super(Menu demo!);
135
myBar = new Menubar(); // Thanh trnh n
this.setMenuBar(myBar); // Thit lp menubar ca frame

myMenu = new Menu(File); // menu File
myBar.add(myMenu); // Gn menu vo thanh trnh n
myMenu.addActionListener(this);// Bt s kin
myMenu.add(new MenuItem(New));
myMenu.add(new MenuItem(Open));
myMenu.addSeparator(); // Thm du nhm item
myMenu.add(new MenuItem(Save));
myMenu.add(new MenuItem(Save As));
myMenu.addSeparator();
myMenu.add(new MenuItem(Exit));

myPopup = new PopupMenu(Options);// Menu popup
myPopup.addActionListener(this);// Bt s kin
myPopup(new MenuItem(Cut));
myPopup(new MenuItem(Copy));
myPopup(new MenuItem(Paste));

lbl = new Label(); // Khi to nhn
this.add(lbl); // Gn vo frame

// Phng thc bt s kin click vo nt ng frame
this.addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e){
System.exit(0);
}
});
}

/* Phng thc x l s kin */
public void actionPerformed(ActionEvent ae){
if(ae.getActionCommand().equals(Exit)){
System.exit(0);
}
lbl.setText(ae.getActionCommand());
}
public void mouseEntered(MouseEvent me){} // Khng x l
public void mouseExited(MouseEvent me){} // Khng x l
public void mouseReleased(MouseEvent me){} // Khng x l
public void mousePressed(MouseEvent me){} // Khng x l
public void mouseClicked(MouseEvent me){
136
myPopup.show(this, me.getX(), me.getY());// Hin menu popup
}

public static void main(String[] args) {
// Khai bo i tng demo
MenuDemo myFrame = new MenuDemo();
myFrame.setSize(300,150); // nh kch c frame
myFrame.setVisible(true); // Hin th frame
}
}

Hnh 6.10: Kt qu demo Menu

6.3 CC K THUT TO TABLES
Ni dung phn ny s tp trung trnh by cc k thut trnh by cc i tng giao din
(conponent) trn frame theo cc thit k khc nhau bng cch dng b qun l trnh by
(Layout Manager). Bao gm cc k thut sau:
Cch trnh by theo dng (Flow layout)
Cch trnh by theo mng (Grid layout)
Cch trnh by theo Border (Border layout)
Cch trnh by theo GridBag (GridBag layout)
Cch trnh by t do (Null layout)
6.3.1 Trnh by Flow Layout
Cch trnh by Flow Layout s xp cc i tng trn mt hng theo dng. Nu i tng mi
thm khng ch (chiu rng) th n s t ng thm vo u dng mi. Cc phng thc:
FlowLayout(): Khi to i tng trnh by.
FlowLayout(int): Khi to i tng trnh by vi cch cn l xc nh.
FlowLayout(int, int, int): Khi to vi ba tham s: Th nht l cch cn l, th hai l
khong cch gia hai dng (chiu cao), th ba l khong cch gia
hai i tng (chiu ngang).
Tham s cn l c th nhn mt trong ba gi tr:
FlowLayout.LEFT: Cn l tri, l gi tr mc nh.
FlowLayout.CENTER: Cn l gia.
137
FlowLayout.RIGHT: Cn l phi.
Chng trnh 6.12 minh ho cch trnh by flow layout: To ra mt dy 10 nt nhn v gn vo
mt frame theo kiu flow layout.

Chng trnh 6.12
package vidu.chuong6;
import java.awt.*;
public class FlowLayoutDemo{
public static void main(String[] args) {
// Khai bo v khi to frame c tiu
Frame myFrame = new Frame(Frame has somes buttons!);
myFrame.setSize(300,150); // nh kch c frame
myFrame.setLayout(new FlowLayout( ));// Thit lp cch trnh by

// Khai bo v khi to button
for(int i=0; i<10; i++)
myFrame.add(new Button(Click+i));// Gn vo frame
myFrame.setVisible(true); // Hin th frame
}
}

Hnh 6.11: Kt qu demo Flow layout

6.3.2 Trnh by Grid Layout
Cch trnh by Grid Layout s sp xp cc i tng theo dng bng, c xc nh s hng v s
ct. Phng thc c bn:
GridLayout(int, int): Khi to mt i tng trnh by. Hai tham s u vo ln
lt l s hng v s ct ca grid trnh by.
GridLayout(int, int, int, int): Khi to mt i tng trnh by, hai tham s u xc
nh s hng v s ct trnh by. Hai tham s sau xc nh
khong cch gia cc dng v cc ct ca bng.
Lu :
Khi s lng i tng c chn nhiu hn vo frame, ta mun chng trnh t tnh s
hng, hoc t tnh s ct hin th, th ta tham s tng ng l 0.
V d:
setLayout(new GridLayout(3,0));
s c nh s hng trnh by l 3, s ct l tu thuc vo s i tng trong frame.
138
setLayout(new GridLayout(0,2));
s c nh s ct l 2, s dng l mm do theo s cc i tng trong frame.
Chng trnh 6.13 minh ho cch trnh by grid layout: To ra mt dy 10 nt nhn v gn vo
mt frame theo kiu grid layout.

Chng trnh 6.13
package vidu.chuong6;
import java.awt.*;
public class GridLayoutDemo{
public static void main(String[] args) {
// Khai bo v khi to frame c tiu
Frame myFrame = new Frame(Frame has somes buttons!);
myFrame.setSize(300,150); // nh kch c frame
myFrame.setLayout(new GridLayout(0,2));// Thit lp cch trnh by

// Khai bo v khi to button
for(int i=0; i<10; i++)
myFrame.add(new Button(Click+i));// Gn vo frame
myFrame.setVisible(true); // Hin th frame
}
}

Hnh 6.12: Kt qu demo Grid layout

6.3.3 Trnh by Border Layout
Cch hin th Border Layout s chia frame thnh 5 vng c nh v t ng ko dn cc vng sao
cho chim ht b mt ca frame:
West: Vng pha ty, tc l pha l bn tri.
East: Vng pha ng, tc l pha l bn phi.
North: Vng pha bc, tc l pha l trn.
South: Vng pha nam, tc l pha l di.
Center: Vng trung tm, chnh gia frame.
Phng thc c bn ca lp BorderLayout:
BorderLayout(): Khi to mt i tng trnh by theo cch border.
Khi mt frame c trnh by theo cch border, ta c th dng phng thc sau gn cc i
tng vo cc vng ca frame:
139
<i tng frame>.add(<Vng border>, <i tng component>);
V d:
myFrame.add(Center, new Button(Click));
s gn vo vng trung tm ca myFrame mt nt nhn c tn l Click.
Lu :
Cch trnh by border lun chia frame thnh 5 vng xc nh.
Nu gn nhiu i tng vo cng mt vng, ch c i tng gn sau l nhn thy c.
Nu mun trong mt vng cha c nhiu i tng, ta c th gn vo mi vng mt
Panel. Sau trong panel, ta chn cch trnh by ring cho panel v gn cc i tng vo
panel.
Chng trnh 6.14 minh ho cch trnh by border: Ta s gn vo nm vng ca frame nm nt
nhn khc nhau.

Chng trnh 6.14
package vidu.chuong6;
import java.awt.*;
public class BorderLayoutDemo{
public static void main(String[] args) {
// Khai bo v khi to frame c tiu
Frame myFrame = new Frame(Frame has somes buttons!);
myFrame.setSize(300,150); // nh kch c frame
myFrame.setLayout(new BorderLayout()); // nh cch trnh by

// Khai bo v khi to button
myFrame.add(West, new Button(West)); // Gn vo vng west
myFrame.add(East, new Button(East)); // Gn vo vng east
myFrame.add(North, new Button(North)); // Gn vo vng north
myFrame.add(South, new Button(South)); // Gn vo vng south
// Gn vo vng center
myFrame.add(Center, new Button(Center));
myFrame.setVisible(true); // Hin th frame
}
}

Hnh 6.13: Kt qu demo Border layout

140
6.3.4 Trnh by GridBag Layout
Cch trnh by GridBag Layout cng trnh by cc i tng tng t nh Grid Layout: Cc i
tng s c nh v theo v tr cc (cell) ca mt khung li (grid). Tuy nhin, GridBag cho
php ta nh kch thc ca i tng s chim bao nhiu v s c t v tr no trong
khung li. Cc phng thc c bn:
GridBagLayout(): Khi to mt i tng trnh by theo cch gridbag.
setConstraints(Component, GridBagConstraints): t v tr v kch thc ca i tng
component theo cc rng buc trong gridbagConstraints.
GridBagConstraints
y l lp cha cc rng buc cho cc i tng c trnh by theo cch GridBag. Cc phng
thc v thuc tnh c bn ca lp GridBagConstraints:
GridBagConstraints(): Khi to mt i tng rng buc ca GridBag.
gridx/gridy: V tr ca cell m ta mun t i tng vo (theo chiu X v
chiu Y).
gridwidth/gridheight: Kch thc (vng trnh by) ca i tng (Theo chiu rng v
chiu cao).
fill: Xc nh cch t i tng, theo 4 cch:
- GridBagConstraints.NONE: i tng khng thay i kch thc theo cc cell n
chim.
- GridBagConstraints.VERTICAL: i tng c chiu cao kn vng n chim
- GridBagConstraints.HORIZONAL: i tng c chiu rng kn vng n chim
- GridBagConstraints.BOTH: i tng c chiu cao v chiu rng ph kn vng
n chim.
ipadx/ipady: nh n v tng gim kch thc ca i tng khi khung cha b
thay i kch thc (theo chiu X v chiu Y).
insets: Xc nh khong cch gia cc cell theo bn hng: Trn, di,
tri, phi.
anchor: Xc nh v tr neo i tng khi kch thc khung cha thay i.
Bao gm: NORTH, NORTHEAST, NORTHWEST, EAST,
SOUTH, SOUTHEAST, SOUTHWEST.
weightx/weighty: nh khong cch ln ra tng i gia cc i tng vi nhau.
Chng trnh 6.15 minh ho cch trnh by gridbag: To ra ba nt nhn trong frame, mi nt c
mt s rng buc khc nhau v kch thc v v tr.

Chng trnh 6.15
package vidu.chuong6;
import java.awt.*;
public class GridBagLayoutDemo{
public static void main(String[] args) {
141
// Khai bo v khi to frame c tiu
Frame myFrame = new Frame(Frame has somes buttons!);
myFrame.setSize(300,150); // nh kch c frame
GridBagLayout layout = new GridBagLayout();
myFrame.setLayout(layout); // nh cch trnh by

// Khai bo i tng rng buc
GridBagConstraints cts = new GridBagConstraints();
cts.fill = GridBagConstraints.BOTH;

// Button1: v tr (1,1), kch thc (1,1)
Button btn1 = new Button(Click1);
cts.gridx = 1;
cts.gridy = 1;
cts.gridheight = 1;
cts.gridwidth = 1;
layout.setConstraints(btn1, cts); // nh rng buc
myFrame.add(btn1); // Gn vo frame

// Button2: v tr (2,2), kch thc (1,1)
Button btn2 = new Button(Click2);
cts.gridx = 2;
cts.gridy = 2;
cts.gridheight = 1;
cts.gridwidth = 1;
layout.setConstraints(btn2, cts); // nh rng buc
myFrame.add(btn2); // Gn vo frame

// Button3: v tr (3,3), kch thc (1,1)
Button btn3 = new Button(Click3);
cts.gridx = 3;
cts.gridy = 3;
cts.gridheight = 1;
cts.gridwidth = 1;
layout.setConstraints(btn3, cts); // nh rng buc
myFrame.add(btn3); // Gn vo frame

myFrame.setVisible(true); // Hin th frame
}
}
142

Hnh 6.14: Kt qu demo Gridbag layout

6.3.5 Trnh by Null Layout
Cch trnh by Null Layout s trnh by cc i tng khng theo mt quy tc no. Tt c u do
ngi dng t nh v v thit lp kch thc cho mi i tng.
nh v i tng bng phng thc setLocation():
<i tng>.setLocation(Point);
nh kch thc i tng bng phng thc setSize():
<i tng>.setSize(int, int);
Ngoi ra, c th va nh v, va nh kch thc cho i tng thng qua phng thc:
<i tng>.setBounds(int, int, int, int);
Trong , hai tham s du nh v i tng, hai tham s sau nh kch thc i tng.
Chng trnh 6.16 minh ho cch trnh by t do Null layout: to ra hai nt nhn v gn vo
frame theo hai cch khc nhau.

Chng trnh 6.16
package vidu.chuong6;
import java.awt.*;
public class NullLayoutDemo{
public static void main(String[] args) {
// Khai bo v khi to frame c tiu
Frame myFrame = new Frame(Frame has somes buttons!);
myFrame.setSize(300,150); // nh kch c frame
myFrame.setLayout(null); // nh cch trnh by

// Button1: v tr (10,30), kch thc (100,40)
Button btn1 = new Button(Click1);
btn1.setSize(100, 40);
btn1.setLocation(new Point(10, 30));
myFrame.add(btn1); // Gn vo frame

// Button2: v tr (70,120), kch thc (50,20)
Button btn2 = new Button(Click2);
btn2.setBounds(70, 120, 50, 20);
myFrame.add(btn2); // Gn vo frame

143
myFrame.setVisible(true); // Hin th frame
}
}

Hnh 6.15: Kt qu demo Null layout

6.4 HTML & APPLET
Applet l mt chng trnh Java c th chy trong cc trnh duyt web c h tr Java. Tt c cc
applet u l cc lp con ca lp Applet. to applet, ta cn import hai gi sau:
import java.applet.*;
import java.awt.*;
6.4.1 Cu trc ca mt Applet
Cu trc tng qut ca mt applet nh sau:
public class <Tn lp applet> extends Applet{
// Cc thuc tnh
public void init(){}
public void start(){}
public void stop(){}
public void destroy(){}
// Cc phng thc khc
}
Cc phng thc c bn ca mt applet:
init(): Khi to cc tham s, nu c, ca applet.
start(): Applet bt u hot ng.
stop(): Chm dt hot ng ca applet.
destroy(): Thc hin cc thao tc dn dp trc khi thot khi applet.
Lu :
Khng phi tt c cc applet u phi ci t y 4 phng thc c bn trn.
Applet cn c th ci t mt s phng thc tu chn (khng bt buc) sau:
paint(Graphics): Phng thc v cc i tng giao din bn trong applet. Cc thao tc
v ny c thc hin bi i tng ho Graphics (l tham s u
vo).
repaint(): Dng v li cc i tng trong applet. Phng thc ny s t
ng gi phng thc update().
144
update(Graphics): Phng thc ny c gi sau khi thc hin phng thc paint nhm
tng hiu qu v. Phng ny s t ng gi phng thc paint().
Chng trnh 6.17 ci t mt applet n gin, mi phng thc s in ra thng bo rng applet
ang trong thi im tng ng.

Chng trnh 6.17
package vidu.chuong6;
import java.awt.*;
import java.applet.*;
public class SimpleApplet extends Applet{
private StringBuffer buffer; // Chui thng bo

public void init(){ // Khi to
buffer = new StringBuffer();
addBuffer(initializing);
}
public void start(){ // Kch hot
addBuffer(starting);
}
public void stop(){ // Dng
addBuffer(stopping);
}
public void destroy(){ // Thot
addBuffer(unloading);
}

private void addBuffer(String newBuffer){
buffer.append(newBuffer); // Thm thng bo
repaint();
}

public void paint(Graphics g){
g.drawString(buffer.toString(), 5, 15); // Hin thng bo
}
}

6.4.2 S dng applet
Applet khng th chy nh mt ng dng Java c lp (n khng c hm main), m n ch chy
c khi c nhng trong mt trang HTML (ui .htm, .html) v chy bng mt trnh duyt web
thng thng.
Cc bc xy dng v s dng mt applet bao gm:
Ci t chng trnh c dng mt applet nh mc 6.4.1
145
Bin dch m ngun thnh lp .class
Nhng m .class ca applet vo trang html.
nhng mt applet vo mt trang html, ta dng th (tag) <Applet> nh sau:
<APPLET CODE = Tn_file_applet.class
WIDTH = Chiu_rng
HEIGHT = Chiu_cao>
</APPLET>
Trong :
Tn applet l tn file m ngun bin dch thnh file chy c ui .class ca Java.
Chiu rng v chiu cao l kch thc ca vng trn trang html m applet s c t vo.
V d, trong trang myHtml.htm c cha ni dung nh sau:
<HTML>
<HEAD>
<TITLE> A simple applet </TITLE>
</HEAD>
<BODY>
This is the output of applet:
<APPLET CODE = SimpleApplet.class WIDTH=200 HEIGHT=20>
</APPLET>
</BODY>
</HTML>
s nhng applet c nh ngha trong chng trnh 6.17 vo mt vng c kch thc
200*20 trong trang myHtml. By gi, ta c th kim nghim chng trnh applet ca mnh bng
cch m trang myHtml trn cc trnh duyt thng thng.
Chng trnh 6.18 ci t mt applet c chc nng tng t nh chng trnh 6.7, thc hin cc
thao tc tnh ton c bn trn hai s. Ngoi tr vic y l mt applet, nn c th chy trn mt
trang html.

Chng trnh 6.18
package vidu.chuong6;
import java.awt.*;
import java.awt.event.*;
import java.applet.*;
public class AppletDemo extends Applet implements ActionListener{
Label lbl1, lbl2, lblKq;
TextField txt1, txt2;
Button btnCong, btnTru, btnNhan, btnChia, btnThoat;

public void init(){
this.setLayout(new GridLayout(6,2)); //Ch hin th 6 dng, 2 ct
lbl1 = new Label(So thu nhat:); // Nhn s th nht
this.add(lbl1);
146
txt1 = new TextField(); // vn bn s th nht
this.add(txt1);
lbl2 = new Label(So thu hai:); // Nhn s th hai
this.add(lbl2);
txt2 = new TextField(); // vn bn s th hai
this.add(txt2);
lblKq = new Label(); // Nhn kt qu
this.add(lblKq);
this.add(new Label());

// Cc nt nhn
btnCong = new Button(Cong); // Nt cng
btnCong.addActionListener(this); // Bt s kin
this.add(btnCong);
btnTru = new Button(Tru); // Nt tr
btnTru.addActionListener(this);
this.add(btnTru);
btnNhan = new Button(Nhan); // Nt nhn
btnNhan.addActionListener(this);
this.add(btnNhan);
btnChia = new Button(Chia); // Nt chia
btnChia.addActionListener(this);
this.add(btnChia);
btnThoat = new Button(Thoat); // Nt thot
btnThoat.addActionListener(this);
this.add(btnThoat);
}

/* Phng thc x l s kin nt c nhn */
public void actionPerformed(ActionEvent ae){
float x = Float.parseFloat(txt1.getText());
float y = Float.parseFloat(txt2.getText());
float kq = 0;
if(ae.getSource() == btnCong) // Cng hai s
kq = x + y;
if(ae.getSource() == btnTru) // Tr hai s
kq = x - y;
if(ae.getSource() == btnNhan) // Nhan hai s
kq = x*y;
if(ae.getSource() == btnChia)&&(y != 0) // Chia hai s
kq = x/y;
if(ae.getSource() == btnThoat) // Thot khi chng trnh
System.exit(0);
147
// Thay i ni dung kt qu
lblKq.setText(Ket qua la: + String.valueOf(kq));
repaint(); // V li cc i tng
}
}

Khi nhng applet ny vo mt trang html bt k, ta c th kim tra thy rng n c chc nng
tng t nh ng dng 6.7.
Lu , s khc nhau gia mt application v mt applet:
Application l mt ng dng Java c lp, n c th chy c lp trn my o Java. Trong
khi , applet ch chy c khi nhng trong mt trang html, chy nh vo cc trnh duyt
web c h tr Java.
Application chy da vo hm main(). Trong khi , applet khng c hm main().
hin th cc thng bo, application dng System.out.println(). Trong khi , applet
dng phng thc drawString() ca lp Graphics.
6.4.3 Truyn tham s cho Applet
Trong nhiu trng hp, applet phi ph thuc vo cc tham s bn ngoi truyn vo. Khi ta
c th dng th PARAM ca html truyn tham s cho applet. C php:
<APPLET CODE = Tn_file_applet.class
WIDTH = Chiu_rng
HEIGHT = Chiu_cao>
<PARAM NAME=Tn_bin VALUE=Gi_tr>
// Cc tham s khc
</APPLET>
Khi , trong m ngun ca applet, ta dng phng thc getParameter() c gi tr cc tham s
c truyn vo:
getParameter(Tn_bin);
Chng trnh 6.19 minh ho vic truyn tham s cho mt applet: Applet m phng giao din tm
kim: mt nhn hng dn, mt vn bn v mt nt nhn. Tu vo ngn ng m nhn v nt
nhn c gi tr text khc nhau. Bin ngn ng l mt tham s truyn t trnh duyt vo. (y l
m phng giao din, c ch tm kim khng hot ng).

Chng trnh 6.19
package vidu.chuong6;
import java.awt.*;
import java.applet.*;
public class ParamDemo extends Applet{
Label lbl;
TextField txt;
Button btn;

148
public void init(){
this.setLayout(new GridLayout(2,2)); //Ch hin th 6 dng, 2 ct
String langue = getParameter(langue);// Loi ngn ng
if(langue.equals(vn)){ // Ting Vit
lbl = new Label(Nhap tu khoa); // Nhn s th nht
btn = new Button(Tim kiem); // Nt cng
}else if(langue.equals(fr)){ // Ting Php
lbl = new Label(Tapez des mots);
btn = new Button(Chercher);
}else{ // Ting Anh, mc nh
lbl = new Label(Enter keys);
btn = new Button(Search);
}
txt = new TextField();
this.add(lbl);
this.add(txt);
this.add(btn);
}
}

Khi , applet phi c nhng vo trang html vi on m nh sau:
<APPLET CODE = ParamDemo.class WIDTH = 200 HEIGHT = 20>
<PARAM NAME=langue VALUE=vn>
</APPLET>
Ta c th thay th value ca param bng cc gi tr vn, fr v en thy c cc ch
ngn ng khc nhau c hin th trong applet.
6.5 GII THIU V SWING
Swing l th vin lp trnh m rng ca Java. N m rng cc i tng giao din ho c bn
ca Java. Swing cn c gi l th vin JFC (Java Foundation Class). Khi mun s dng cc i
tng ho ca th vin ny, ta phi khai bo ch th:
import javax.swing.*;
6.5.1 M rng cc i tng component
JFC m rng cc i tng c bn ca java thnh cc lp tng ng, ngoi tr vic c thm ch
J u mi tn lp:
Button JButton
Label JLabel
TextField JTextField
TextArea JTextArea
Checkbox JCheckbox
List JList
149
Menu JMenu
Cc lp m rng ny c y cc phng thc ca cc i tng lp c bn ca th vin
java.awt. Ngoi ra, chng c b sung mt s phng thc to hiu ng giao din.
Chng trnh 6.20 minh ho vic s dng i tng JButton. i tng JButton c m rng
thm mt s tnh nng sau:
JButton(String, Icon): Khi to mt nt nhn vi mt tn nhn v mt nh nn. nh nn
c kiu icon (tham s th hai).
setMnemonic(char): nh phm tt cho nt lnh. Khi ngi dng nhn Ctrl+phm tt th
nt lnh cng thc thi tng t nh kkhi ta click chut vo nt lnh.
setBorder(new MatteBorder(int, int, int, int, Icon)): Thit lp khung nn cho nt vi cc
tham s: Khong cch t ch n bin ( rng bin) theo cc chiu trn di, tri phi,
cui cng l nh nn cho nt.
setBorder(new LineBorder(int)): Thit lp vin cho nt dng hnh ch nht, tham s xc
nh mu cho vin ca nt. Ngoi ra, tham s ca phng thc ny cn c th l cc lp
SoftBevelBorder, EtchedBorder v TitleBorder.
setToolTipText(String): Thit lp dng tooltip cho i tng. Dng ny s hin ra khi ta di
chut ln i tng trn ca s.

Chng trnh 6.20
package vidu.chuong6;
import javax.swing.*;
public class JButtonDemo extends JFrame{
public static void main(String[] args) {
// Khai bo v khi to frame c tiu
JFrame myFrame = new JFrame(Frame has somes buttons!);
myFrame.setSize(300,150); // nh kch c frame

// Gi s ta c file nh myImage trong cng th mc
Icon myIcon = new ImageIcon(myImage.gif);

// Button1: c nn l nh
JButton btn1 = new JButton(Back Image, myIcon);
// Gn tooltip cho nt
btn1.setToolTipText(Buttons background is an image);
myFrame.getContentPane().add(btn1); // Gn vo frame

// Button2: c bin l nh
JButton btn2 = new JButton(Border Image);
// Gn tooltip cho nt
btn1.setToolTipText(Buttons border is an image);
btn2.setBorder(new MatteBorder(10,10,10,10, myIcon));
myFrame.getContentPane().add(btn2); // Gn vo frame
150

myFrame.setVisible(true); // Hin th frame
}
}

Trong chng trnh ny, c dng lnh gn cc i tng vo frame bng cch getContentPane().
y l phng thc m rng cho cc i tng khung cha container. S m rng ny s c
trnh by chi tit trong phn tip theo.
6.5.2 M rng cc i tng container
Tng t nh cc i tng component, cc i tng container cng c m rng trong JFC
thnh cc lp c tn tng ng v thm k t J u:
Frame JFrame
Panel JPanel
Dialog JDialog
Chng trnh 6.21 minh ho vic s dng cc i tng m rng ca khung cha Frame thnh
JFrame. Khung cha JFrame c nhiu tng trnh din khc nhau, cc tng l trong sut v chng
kht ln nhau, khin cho ta vn c cm gic cc i tng c trnh by trn cng mt mt phng
nh khung cha Frame ca th vin chun AWT.
Mt s tng hay s dng ca lp JFrame (theo th t t trong ra ngoi):
ContentPane: L tng thng dng nht, tng ny dng cha cc i tng component
c bn nh button, label, text, list
MenubarPane: Tng dnh cha cc loi menu ca frame nh Menubar, PopupMenu.
GlassPane: Tng ngoi cng, thng dng cha cc tooltip ca cc i tng trong
tng Content. Khi ta set tooltipText cho mt i tng, tooltip s t ng c add vo
tng Glass.
truy nhp vo mt tng bt k, ta dng phng thc c tn:
get + <Tn ca tng>();
V d:
JFrame myFrame = new JFrame(My JFrame);
myFrame.getContentPane().add(Center, new JButton(Test));
s gn mt nt nhn c nhn Test vo tng Content ca khung cha myFrame.
Chng trnh 6.21 minh ho vic gn cc i tng vo cc tng khc nhau:
Gn mt nt nhn vo tng ContentPane.
Gn mt thanh Menubar c cha mt menu File vo tng MenubarPane.

Chng trnh 6.21
package vidu.chuong6;
import javax.swing.*;
import java.awt.event.*;
public class JFrameDemo extends JFrame implements ActionListener{
151
private JMenuBar myBar;
private JMenu myMenu;

public JFrameDemo(){
super(JFrame demo);
JButton btn = new Jbutton();
// Gn nt nhn vo tng ContentPane
this.getContentPane().add(Center, btn);

myBar = new JMenuBar();
myMenu = new JMenu(File);
myMenu.add(new JMenuItem(Open));
myMenu.add(new JMenuItem(New));
myMenu.add(new JSeparator());
myMenu.add(new JMenuItem(Save));
myMenu.add(new JMenuItem(Save As));
myMenu.add(new JSeparator());
myMenu.add(new JMenuItem(Exit));
myMenu.addActionListener(this);
myBar.add(myMenu);
// Gn menubar vo tng MenubarPane
this.getJMenuBar().add(myBar);

// Phng thc bt s kin click vo nt ng frame
this.addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e){
System.exit(0);
}
});
}

/* Phng thc x l s kin */
public void actionPerformed(ActionEvent ae){
if(ae.getActionCommand().equals(Exit)){
System.exit(0);
}
}

public static void main(String[] args) {
// Khai bo v khi to frame c tiu
JFrameDemo myFrame = new JFrameDemo();
myFrame.setSize(300,150); // nh kch c frame
myFrame.setVisible(true); // Hin th frame
152
}
}

Lu :
V cc i tng m rng ca th vin JFC c b sung kh nhiu tnh nng, c bit l cc tnh
nng ho, do , cc i tng ny c nhc im l rt cng knh. V l do nng ti, cho nn
hin nay, cc i tng ca th vin JFC vn t c ph bin trong cc ng dng applet.
6.6 CASE STUDY IV
Trong phn ny, ta s minh ho cch s dng cc i tng ho ca th vin chun AWT
vit mt chng trnh m phng mt my tnh Calculator.
To mt frame lm khung chng trnh, tiu l Java Calculator
Pha trn l mt Label (hoc vn bn u c, nhng nu dng vn bn th khng cho
edit) hin cc s c nhp vo v kt qu tnh ton.
Pha di l cc nt nhn tng ng vi cc ch s v php ton. Nhng nhm cc nt
nhn cho ng b v layout p mt, ta nhm chng vo mt Panel.
Khi , frame s cha trc tip hai i tng: label v frame. Ta s dng layout kiu null,
v xc nh v tr chnh xc cho label v panel.
i vi Panel, ta cng dng GridLayout. V c 10 nt nhn s v cc nt nhn ton t: nt
cng, nt nhn, nt chia, nt tr, nt cn bc hai, nt phy thp phn, nt bng, nt lu
tha, nt nghch o, nt reset. Nn s to thnh 4 dng, 5 ct: mi dng gm c 3 nt s
v hai nt chc nng:
- Dng 1: cc nt 7, 8, 9, cng, reset (C).
- Dng 2: cc nt 4, 5, 6, tr, lu tha.
- Dng 3: cc nt 1, 2, 3, nhn, nghch o.
- Dng 4: cc nt 0, thp phn, nt bng, nt chia, nt cn bc hai.
Vi cc nt s v nt thp phn, khi click vo nt th k t tng ng c hin ln trn
label.
Vi cc nt chc nng, khi click vo th thc hin php ton v hin kt qu ra mn hnh,
nu c.
Khi click vo nt bng (kt qu) th hin kt qu trn label.
Chng trnh 6.22 ci t chi tit chng trnh ny.

Chng trnh 6.22
package vidu.chuong6;
import java.awt.*;
import java.awt.event.*;
import java.lang.Math;
public class CalculatorDemo extends Frame implements ActionListener{
private boolean operatorState; // Trng thi ca php ton
private int operator; // Ton t thc hin
153
private float oldIterator; // S hng trc
private Label lbl;
private Panel pnl;
private Button btn0, btn1, btn2, btn3, btn4, btn5, btn6,
btn7, btn8, btn9, btnPoint, btnReset, btnAdd, btnSub,
btnMul, btnDiv, btnPow, btnSqrt, btnRev, btnResult;

public CalculatorDemo(){
super(Java Calculator);
this.setSize(250, 250);
this.setResizable(false); // Khng cho thay i size
this.setLayout(null); // Thit lp layout

lbl = new Label("0"); // Nhn kt qu
lbl.setAlignment(2);
lbl.setSize(240, 30);
lbl.setLocation(5, 25);
this.add(lbl);

Panel pnl = new Panel(); // Panel cha cc nt
pnl.setSize(240, 190);
pnl.setLocation(5, 55);
pnl.setLayout(new GridLayout(4, 5)); // Thit lp layout
this.add(pnl);

btn7 = new Button(7); // Nt s 7
btn7.addActionListener(this); // Bt s kin click chut
pnl.add(btn7); // Gn vo panel

btn8 = new Button(8); // Nt s 8
btn8.addActionListener(this);
pnl.add(btn8);

btn9 = new Button(9); // Nt s 9
btn9.addActionListener(this);
pnl.add(btn9);

btnAdd = new Button(+); // Nt php ton cng
btnAdd.addActionListener(this);
pnl.add(btnAdd);

btnReset = new Button(C); // Nt reset
btnReset.addActionListener(this);
154
pnl.add(btnReset);

btn4 = new Button(4); // Nt s 4
btn4.addActionListener(this);
pnl.add(btn4);

btn5 = new Button(5); // Nt s 5
btn5.addActionListener(this);
pnl.add(btn5);

btn6 = new Button(6); // Nt s 6
btn6.addActionListener(this);
pnl.add(btn6);

btnSub = new Button(-); // Nt php ton tr
btnSub.addActionListener(this);
pnl.add(btnSub);

btnPow = new Button(x^y); // Nt php ton lu tha
btnPow.addActionListener(this);
pnl.add(btnPow);

btn1 = new Button(1); // Nt s 1
btn1.addActionListener(this);
pnl.add(btn1);

btn2 = new Button(2); // Nt s 2
btn2.addActionListener(this);
pnl.add(btn2);

btn3 = new Button(3); // Nt s 3
btn3.addActionListener(this);
pnl.add(btn3);

btnMul = new Button(*); // Nt php ton nhn
btnMul.addActionListener(this);
pnl.add(btnMul);

btnRev = new Button(1/x); // Nt php ton nghch o
btnRev.addActionListener(this);
pnl.add(btnRev);

btn0 = new Button(0); // Nt s 0
155
btn0.addActionListener(this);
pnl.add(btn0);

btnPoint = new Button(.); // Nt du thp phn
btnPoint.addActionListener(this);
pnl.add(btnPoint);

btnResult = new Button(=); // Nt kt qu
btnResult.addActionListener(this);
pnl.add(btnResult);

btnDiv = new Button(/); // Nt php ton chia
btnDiv.addActionListener(this);
pnl.add(btnDiv);

btnSqrt = new Button(Sqrt); // Nt php ton cn bc hai
btnSqrt.addActionListener(this);
pnl.add(btnSqrt);

operatorState = true;
operator = -1;
oldIterator = 0;
this.addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e){
System.exit(0);
}
});
}

/* Phng thc x l s kin */
public void actionPerformed(ActionEvent ae){
float result;
float newIterator = Float.parseFloat(lbl.getText());
if(ae.getSource() == btnResult){
switch(operator){
case 0:
result = oldIterator + newIterator;
lbl.setText(String.valueOf(result));
break;
case 1:
result = oldIterator - newIterator;
lbl.setText(String.valueOf(result));
break;
156
case 2:
result = oldIterator * newIterator;
lbl.setText(String.valueOf(result));
break;
case 3:
if(newIterator != 0){
result = oldIterator/newIterator;
lbl.setText(String.valueOf(result));
}
break;
case 4:
result = (float)Math.pow(oldIterator, newIterator);
lbl.setText(String.valueOf(result));
break;
}
operator = -1;
operatorState = true;
return;
}
if(ae.getSource() == btnRev){
newIterator = Float.parseFloat(lbl.getText());
if(newIterator != 0){
result = (float)1/newIterator;
lbl.setText(String.valueOf(result));
}
operator = -1;
operatorState = true;
return;
}
if(ae.getSource() == btnSqrt){
newIterator = Float.parseFloat(lbl.getText());
if(newIterator >= 0){
result = (float)Math.sqrt(newIterator);
lbl.setText(String.valueOf(result));
}
operator = -1;
operatorState = true;
return;
}
if(ae.getSource() == btnPoint){
lbl.setText(lbl.getText() + .);
return;
}
157
if(ae.getSource() == btnAdd){
operator = 0;
operatorState = true;
oldIterator = Float.parseFloat(lbl.getText());
return;
}
if(ae.getSource() == btnSub){
operator = 1;
operatorState = true;
oldIterator = Float.parseFloat(lbl.getText());
return;
}
if(ae.getSource() == btnMul){
operator = 2;
operatorState = true;
oldIterator = Float.parseFloat(lbl.getText());
return;
}
if(ae.getSource() == btnDiv){
operator = 3;
operatorState = true;
oldIterator = Float.parseFloat(lbl.getText());
return;
}
if(ae.getSource() == btnPow){
operator = 4;
operatorState = true;
oldIterator = Float.parseFloat(lbl.getText());
return;
}
if(ae.getSource() == btnReset){
operator = -1;
operatorState = true;
oldIterator = 0;
lbl.setText("0");
return;
}
// Trng hp click vo nt s
if(operatorState){ // Bt u s mi
lbl.setText(ae.getActionCommand());
operatorState = false;
}else // G tip s c
lbl.setText(lbl.getText() + ae.getActionCommand());
158
}

public static void main(String[] args) {
// Khai bo v khi to frame
CalculatorDemo myFrame = new CalculatorDemo();
myFrame.setVisible(true); // Hin th frame
}
}

Chng trnh 6.22 s cho kt qu nh hnh 6.16:

Hnh 6.16: Kt qu demo case study

TNG KT CHNG 6
Ni dung chng 6 trnh by phng php lp trnh giao din vi cc i tng trong th vin
chun AWT ca Java:
Cc i tng c chc nng lm vt cha cho cc i tng giao din: Frame, Panel,
Dialog.
Cc i tng l thnh phn giao din: Label, Button, TextField, TextArea, Checkbox,
List, Menu.
Phng php nm bt v x l cc s kin c th ca tng i tng giao din.
Cc phng php trnh by trn cc vt cha: FlowLayout, GridLayout, BorderLayout,
GridBagLayout, NullLayout.
Chng 6 cng gii thiu mt phng php lp trnh giao din Java c nhng trong cc trang
web, l lp trnh applet:
Cch to ra mt applet vi cc phng thc c bn.
Cch nhng mt applet vo mt trang web.
Cch kim nghim mt applet sau khi nhng vo trang web bng cc trnh duyt.
Ngoi ra, chng ny cng gii thiu cch s dng th vin cc i tng ho m rng JFC
ca Java. Cc i tng ca th vin JFC c chc nng hon ton tng t cc i tng tng
ng trong th vin chun AWT. Ngoi ra, chng cn c b sung thm mt s kh nng ho
cao cp.
159
CU HI V BI TP CHNG 6
1. Vit chng trnh thay i mu nn ca frame theo la chn ca ngi dng:
To ra cc nt nhn c tn theo cc mu: Blue, Cyan, Gray, Green, Magenta,
Orange, Pink, Red, White, Yellow.
Khi click chut vo nt no, mu nn ca frame s i theo mu .
2. Vit chng trnh thay i mu nn trong bi 1 bng vn bn. To ra mt vn bn duy
nht, khi ngi dng g vo mt trong s cc mu trong bi 1 v g enter, mu nn ca
frame s i theo mu . Nu ngi dng g sai mu, khng lm g c.
3. Vit chng trnh thay i mu nn trong bi 1 bng nt chn radio. To mt nhm cc
nt radio tng ng vi cc loi mu. Khi mu no c chn, mu nn ca frame s thay
i theo mu .
4. Vit chng trnh thay i mu nn trong bi 1 bng danh sch chn list. To mt List c
cc item tng ng vi cc loi mu. Khi mu no c chn, mu nn ca frame s thay
i theo mu .
5. Vit chng trnh thay i mu nn trong bi 1 bng menu. To mt menubar, trn c
gn mt menu tn l color, khi click chut vo mune color, s s xung cc mu tng
ng trong bi 1. Khi mu no c chn, mu nn ca frame s thay i theo mu .
6. Vit chng trnh thay i mu nn trong bi 1 bng menu popup. To mt menu popup
trong frame, khi click chut phi ln frame, s hin ra menu gm cc mu tng ng trong
bi 1. Khi mu no c chn, mu nn ca frame s thay i theo mu .
7. Vit li cc chng trnh trong cc bi tp 1 n 6 di dng applet v nhng chng vo
trang myHtml.htl chy. (Trang ny phi cng th mc vi cc lp va ci t v bin
dch).

160
HNG DN TR LI CU HI V BI TP
Chng 1
Khng c bi tp.
Chng 2
1. p n:
a. ng.
b. ng.
c. ng.
d. ng.
e. Sai.
f. Sai.
g. ng.
h. ng.
i. Sai.
j. ng.
k. ng.
l. ng.
m. ng.
n. ng.
2. Gi :
Xe t:
Nhn hiu xe
Cng sut xe
Mu sc xe
Gi bn xe
Nhp/xem nhn hiu xe
Nhp/xem cng sut xe
Nhp/xem mu sc xe
Nhp/xem gi bn xe
3. Gi :
Xe bus:
Cng sut xe
S hiu tuyn xe
Nhp/xem cng sut xe
Nhp/xem s hiu tuyn xe
4. Gi :
161
Engine:
Cng sut ng c
Nhp/xem cng sut ng c
Xe t k tha t Engine:
Nhn hiu xe
Mu sc xe
Gi bn xe
Nhp/xem nhn hiu xe
Nhp/xem mu sc xe
Nhp/xem gi bn xe
Xe bus k tha t Engine:
S hiu tuyn xe
Nhp/xem s hiu tuyn xe
Chng 3
1. p n: a, b v f.
2. Dng kiu int.
3. Dng kiu int.
4. ng
5. Sai.
6. ng.
7. Sai.
8. ng
9. Sai.
10. 660.
11. Thc hin 12 ln, kt qu l 55
12. Thc hin 1 ln, kt qu 5.
13. Ging nhau.
14. Gi :
Dng vng lp for chy t 1 n 100
Vi mi s, kim tra xem s l chn hay l bng cch xt s d ca php chia s
cho 2: nu d 0 l s chn, d 1 l s l.
Nu l s chn th cng dn vo tng.
int sum = 0;
for(int i = 1; i<=100; i++)
if(i%2 == 0) sum += i;
System.out.println(Tng: + sum);
15. Gi :
162
Thc hin tng t bi 14, ch khc l kim tra s c chia ht cho 7 hay khng. Nu
chia ht th cng vo tng:
int sum = 0;
for(int i = 1; i<=100; i++)
if(i%7 == 0) sum += i;
System.out.println(Tng: + sum);
16. Gi :
S dng vng lp for, chy t 1 n n, nhn dn vo tch:
long fact = 1;
for(int i = 1; i<=n; i++)
fact *= i;
System.out.println(Giai tha: + fact);
Chng 4
1. a v c.
2. b.
3. d.
4. c.
5. a.
6. a v d.
7. b v d.
8. c.
9. a.
10. c.
11. e.
12. a ng, b ng, c ng, d ng.
13. a.
14. b.
15. Gi :
class Rectangle{
private int width;
private int lenth;

public Rectangle(int value){
this.width = value;
this.length = value;
}
public Rectangle(int width, int length){
this.width = width;
this.length = length;
}
163
}
16. Gi :
interface Operator{
puclic int add(int, int);
puclic float add(float, float);
puclic double add(double, double);
puclic long add(long, long);
puclic string add(string, double);
puclic string add(string, string);
}
class OperatorImpl implements Operator{
puclic int add(int x, int y){
return x+y;
}
puclic float add(float x, float y){
return x+y;
}
puclic double add(double x, double y){
return x+y;
}
puclic long add(long x, long y){
return x+y;
}
puclic string add(string x, double y){
return x+y;
}
puclic string add(string x, string y){
return x+y;
}
}
17. Gi (t b sung cc phng thc khi to lp):
class abstract FlatObject{
public abstract float chuvi();
public abstract float dientich();
}
class Carre extends FlatObject{
private float length;
public float chuvi(){
return 4*length;
}
public float dientich(){
return length*length;
}
164
}
class Rectangle extends FlatObject{
private float width;
private float length;
public float chvi(){
return 2*(width + length);
}
public float dientich(){
return width*length;
}
}
class Circle extends FlatObject{
private static float PI = 3.14;
private float ray;
public float chuvi(){
return 2*PI*ray;
}
public float dientich(){
return PI*ray*ray;
}
}
Chng 5
2. Gi , ch cn sa lp Node lu kiu char. Sau sa li chng trnh, khng cn sa
li lp MyStack (xem case study 4, phn thao tc vi stack).
public class Node{
private char value;
public Node(){
value = \0;
}
public Node(char value){
this.value = value;
}
public char getValue(){
return value;
}
public void setValue(char value){
this.value = value;
}
}
3. Xem case study 4, phn thao tc vi hng i.
4. Gi :
public class Node{
165
private Employee value;
public Node(){
value = null;
}
public Node(Employee value){
this.value = value;
}
public Employee getValue(){
return value;
}
public void setValue(Employee value){
this.value = value;
}
}
5. Xem case study 4, phn thao tc vi danh sch lin kt.
Chng 6
1. Gi (t vit hm main test chng trnh):
public class Bai1 extends Frame implements ActionListener{
String[10] colors = {Blue, Cyan, Gray, Green, Magenta,
Orange, Pink, Red, White, Yellow};
Button[10] btns;

public Bai1(){
super(Bai1!);
this.setLayout(new FlowLayout());

for(int i=0; i<colors.length; i++){
btns[i] = new Button(colors[i]);
btns[i].addActionListener(this);
this.add(btns[i]);
}

// Phng thc bt s kin click vo nt ng frame
this.addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e){
System.exit(0);
}
});
}

/* Phng thc x l s kin nt c nhn */
public void actionPerformed(ActionEvent ae){
166
for(int i=0; i<colors.length; i++)
if((Button)ae.getSource() == btns[i]){
// Thit lp mu nn theo mu tng ng
return;
}
}
}
2. Gi (t vit hm main test chng trnh):
public class Bai2 extends Frame implements ActionListener{
TextField txt;

public Bai2(){
super(Bai2!);
this.setLayout(new FlowLayout());

txt = new TextFiled();
txt.addActionListener(this);
this.add(txt);

// Phng thc bt s kin click vo nt ng frame
this.addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e){
System.exit(0);
}
});
}

/* Phng thc x l s kin nt c nhn */
public void actionPerformed(ActionEvent ae){
if((TextField)ae.getSource() == txt){
// Thit lp mu nn theo mu tng ng
return;
}
}
}
3. Gi (t vit hm main test chng trnh):
public class Bai3 extends Frame implements ItemListener{
String[10] colors = {Blue, Cyan, Gray, Green, Magenta,
Orange, Pink, Red, White, Yellow};
Checkbox[10] chx;

public Bai3(){
super(Bai3!);
167
this.setLayout(new FlowLayout());

CheckboxGroup cbxg = new CheckboxGroup();
for(int i=0; i<colors.length; i++){
chx[i] = new Checkbox(colors[i], cbxg, false);
chx[i].addItemListener(this);
this.add(chx[i]);
}

// Phng thc bt s kin click vo nt ng frame
this.addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e){
System.exit(0);
}
});
}

/* Phng thc x l s kin nt c nhn */
public void itemStateChange(ItemEvent ie){
if(ie.getStateChanged() == ItemEvent.SELECTED){
for(int i=0; i<colors.length; i++)
if((string)ie.getItem() == chx[i]){
// Thit lp mu nn theo mu tng ng
return;
}
}
}
}
4. Gi (t vit hm main test chng trnh):
public class Bai4 extends Frame implements ItemListener{
String[10] colors = {Blue, Cyan, Gray, Green, Magenta,
Orange, Pink, Red, White, Yellow};
List lst;

public Bai4(){
super(Bai4!);
this.setLayout(new FlowLayout());

lst = new List();
lst.addItemListener(this);
for(int i=0; i<colors.length; i++){
lst.add(colors[i]);
}

168
// Phng thc bt s kin click vo nt ng frame
this.addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e){
System.exit(0);
}
});
}

/* Phng thc x l s kin nt c nhn */
public void itemStateChange(ItemEvent ie){
if(ie.getStateChanged() == ItemEvent.SELECTED){
for(int i=0; i<colors.length; i++)
if((string)ie.getItem() == chx[i]){
// Thit lp mu nn theo mu tng ng
return;
}
}
}
}
5. Gi (t vit hm main test chng trnh):
public class Bai5 extends Frame implements ActionListener{
String[10] colors = {Blue, Cyan, Gray, Green, Magenta,
Orange, Pink, Red, White, Yellow};
MenuBar mnb;
Menu mn;

public Bai5(){
super(Bai5!);
this.setLayout(new FlowLayout());

mnb = new MenuBar();
this.setmenuBar(mnb);
mn = new Menu();
mn.addActionListener(this);
mnb.add(mn);
for(int i=0; i<colors.length; i++){
mn.addItem(new MenuItem(colors[i]));
}

// Phng thc bt s kin click vo nt ng frame
this.addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e){
System.exit(0);
}
169
});
}

/* Phng thc x l s kin nt c nhn */
public void actionPerformed(ActionEvent ae){
for(int i=0; i<colors.length; i++)
if(ae.getActionCommand().equals(colors[i])){
// Thit lp mu nn theo mu tng ng
return;
}
}
}
6. Tng t bi 5, thay Menu bng MenuPopup.
7. Lm tng t cc bi t 1 n 6, chuyn sang applet.
170
TI LIU THAM KHO
Ti liu ting Anh
1. Advanced Java. Aptech Worldwide Express.
2. An Introduction to Object-Oriented Programming with Java. C. Thomas Wu. McGraw-
Hill Inc, 1999.
3. Big Java. Cay Horstmann. John Wiley & Sons Inc, 2002.
4. Core Java. Aptech Worldwide Express.
5. Data Structures and Algorithms in Java, second edition. Michael T. Goodrich and
Roberto Tamassia. John Wiley & Sons Inc, 2001.
6. Introduction to Programming in Java, first edition. J.N. Patterson Hume and Christine
Stephenson. 2000.
7. Java Algorithms. Scott Robert Ladd. McGraw-Hill Inc, 1997.
8. Java Distributed Objects. Bill McCarty and Luke Cassady-Dorion. A Division of
Macmillan Computer Publishing.
9. Java How to Program, fifth edition. H.M.Deitel and P.J. Deitel. Prentice Hall Inc, 2003.
10. Java Language Reference, second edition. Mark Grand. Oreilly Inc, 1997.
11. Java Software Solutions Foundations of Program Designe. John Lewis and William
Loftus. Addison-Weslay Inc, 1998.
12. Objects, Abstractions, Data Structures and Designe using Java. Elliot B. Koffman and
Paul A.T. Wolfgang. John Wiley & Sons Inc, 2005.
13. The Java
TM
Class Libraries An Annotated Reference, the Java series. Patrick Chan and
Rosanna Lee. Addison-Wesley Inc, 1996.
Ti liu ting Vit
1. Gio trnh L thuyt v Bi tp Java. Trn Tin Dng. NXB Gio dc, 1999.
2. Lp trnh Java. NXB Thng K, 2000.

171
MC LC
GII THIU..................................................................................................................................... 2
PHN 1............................................................................................................................................ 4
NHNG KHI NIM C BN..................................................................................................... 4
CA LP TRNH HNG I TNG..................................................................................... 4
CHNG 1...................................................................................................................................... 5
TNG QUAN V CCH TIP CN............................................................................................. 5
HNG I TNG.................................................................................................................... 5
1.1 PHNG PHP TIP CN CA LP TRNH TRUYN THNG............................ 5
1.1.1 Lp trnh tuyn tnh ................................................................................................... 5
1.1.2 Lp trnh cu trc....................................................................................................... 5
1.2 PHNG PHP TIP CN HNG I TNG.................................................... 7
1.2.1 Phng php lp trnh hng i tng.................................................................... 7
1.2.2 Phng php phn tch v thit k hng i tng................................................. 9
1.3 SO SNH HAI CCH TIP CN................................................................................ 11
1.4 XU HNG PHT TRIN CA LP TRNH HNG I TNG.................... 12
TNG KT CHNG 1..................................................................................................... 13
CHNG 2.................................................................................................................................... 15
NHNG KHI NIM C BN CA.......................................................................................... 15
LP TRNH HNG I TNG............................................................................................ 15
2.1 CC KHI NIM C BN.......................................................................................... 15
2.1.1 i tng................................................................................................................. 15
2.1.2 Lp i tng.......................................................................................................... 16
2.1.3 Tru tng ho i tng theo chc nng .............................................................. 17
2.1.4 Tru tng ho i tng theo d liu ................................................................... 18
2.1.5 Khi nim k tha.................................................................................................... 19
2.1.6 Khi nim ng gi ................................................................................................. 20
2.1.7 Khi nim a hnh ................................................................................................... 21
2.2 SO SNH LP V CU TRC................................................................................... 22
2.3 THNH PHN PRIVATE V PUBLIC CA LP .................................................... 24
2.4 MT S NGN NG LP TRNH HNG I TNG...................................... 24
2.4.1 C++.......................................................................................................................... 25
2.4.2 ASP.NET v C#.NET.............................................................................................. 25
2.4.3 Java.......................................................................................................................... 26
TNG KT CHNG 2..................................................................................................... 26
CU HI V BI TP CHNG 2................................................................................. 27
PHN 2.......................................................................................................................................... 28
LP TRNH HNG I TNG VI JAVA......................................................................... 28
CHNG 3.................................................................................................................................... 29
GII THIU V JAVA................................................................................................................. 29
3.1 LCH S PHT TRIN CA JAVA............................................................................ 29
3.1.1 Java.......................................................................................................................... 29
3.1.2 c trng ca ngn ng Java .................................................................................. 29
3.1.3 Ci t Java.............................................................................................................. 32
172
3.2 KIN TRC CHNG TRNH XY DNG TRN JAVA...................................... 33
3.2.1 Kin trc chng trnh Java .................................................................................... 33
3.2.2 Chng trnh Java u tin...................................................................................... 36
3.2.3 Phn tch chng trnh u tin............................................................................... 36
3.3 CC KIU D LIU V TON T C BN TRN JAVA.................................... 38
3.3.1 Khai bo bin........................................................................................................... 38
3.3.2 Kiu d liu ............................................................................................................. 39
3.3.3 Cc ton t............................................................................................................... 40
3.4 CC CU TRC LNH TRN JAVA ........................................................................ 44
3.4.1 Cu lnh if-else........................................................................................................ 44
3.4.2 Cu lnh switch-case ............................................................................................... 45
3.4.3 Vng lp While........................................................................................................ 46
3.4.4 Vng lp do-while ................................................................................................... 47
3.4.5 Vng lp for............................................................................................................. 48
3.5 CASE STUDY I ............................................................................................................. 49
TNG KT CHNG 3..................................................................................................... 51
CU HI V BI TP CHNG 3................................................................................. 51
CHNG 4.................................................................................................................................... 54
K THA V A HNH TRN JAVA....................................................................................... 54
4.1 K THA N............................................................................................................. 54
4.1.1 Lp........................................................................................................................... 54
4.1.2 S k tha................................................................................................................ 58
4.2 K THA BI............................................................................................................... 60
4.2.1 Giao tip .................................................................................................................. 61
4.2.2 S dng giao tip..................................................................................................... 62
4.3 LP TRU TNG..................................................................................................... 63
4.3.1 Khai bo................................................................................................................... 63
4.3.2 S dng lp tru tng............................................................................................ 65
4.4 A HNH ....................................................................................................................... 66
4.4.1 Np chng................................................................................................................ 66
4.4.2 a hnh .................................................................................................................... 67
4.5 CASE STUDY II ............................................................................................................ 68
4.5.1 Lp Human.............................................................................................................. 69
4.5.2 Lp Person............................................................................................................... 69
4.5.3 Lp Employee ......................................................................................................... 70
4.5.4 Chng trnh demo.................................................................................................. 72
TNG KT CHNG 4..................................................................................................... 73
CU HI V BI TP CHNG 4................................................................................. 73
CHNG 5.................................................................................................................................... 78
BIU DIN V CI T ............................................................................................................ 78
CC CU TRC D LIU TRU TNG TRN JAVA........................................................ 78
5.1 PHNG PHP DUYT V QUI ........................................................................ 78
5.1.1 Cc phng php duyt ........................................................................................... 78
5.1.2 Phng php qui ................................................................................................. 79
5.2 PHNG PHP SP XP V TM KIM................................................................. 79
5.2.1 Cc phng php sp xp........................................................................................ 79
5.2.2 Cc phng php tm kim...................................................................................... 81
5.3 NGN XP V HNG I......................................................................................... 83
5.3.1 Ngn xp.................................................................................................................. 83
173
5.3.2 Hng i .................................................................................................................. 85
5.4 DANH SCH KIN KT.............................................................................................. 86
5.4.1 Danh sch lin kt n ............................................................................................ 86
5.4.2 Danh sch lin kt kp............................................................................................. 91
5.5 CY NH PHN............................................................................................................ 96
5.6 TH......................................................................................................................... 101
5.6.1 Biu din th ..................................................................................................... 101
5.6.2 Ci t th khng c trng s............................................................................ 102
5.6.3 Ci t th c trng s....................................................................................... 107
5.7 CASE STUDY III......................................................................................................... 111
TNG KT CHNG 5................................................................................................... 116
CU HI V BI TP CHNG 5............................................................................... 116
CHNG 6.................................................................................................................................. 118
LP TRNH GIAO DIN TRN JAVA..................................................................................... 118
6.1 GIAO DIN VI CC I TNG C BN......................................................... 118
6.1.1 Cc i tng container c bn............................................................................. 118
6.1.2 Cc i tng component c bn.......................................................................... 121
6.1.3 Cc s kin c bn ca i tng.......................................................................... 124
6.2 GIAO DIN VI CC I TNG MULTIMEDIA.............................................. 127
6.2.1 nh du v nt chn......................................................................................... 127
6.2.2 La chn................................................................................................................ 129
6.2.3 Danh sch .............................................................................................................. 131
6.2.4 Trnh n ............................................................................................................... 133
6.3 CC K THUT TO TABLES ............................................................................... 136
6.3.1 Trnh by Flow Layout .......................................................................................... 136
6.3.2 Trnh by Grid Layout........................................................................................... 137
6.3.3 Trnh by Border Layout ....................................................................................... 138
6.3.4 Trnh by GridBag Layout .................................................................................... 140
6.3.5 Trnh by Null Layout ........................................................................................... 142
6.4 HTML & APPLET....................................................................................................... 143
6.4.1 Cu trc ca mt Applet........................................................................................ 143
6.4.2 S dng applet ....................................................................................................... 144
6.4.3 Truyn tham s cho Applet ................................................................................... 147
6.5 GII THIU V SWING............................................................................................ 148
6.5.1 M rng cc i tng component........................................................................ 148
6.5.2 M rng cc i tng container .......................................................................... 150
6.6 CASE STUDY IV ........................................................................................................ 152
TNG KT CHNG 6................................................................................................... 158
CU HI V BI TP CHNG 6............................................................................... 159
HNG DN TR LI CU HI V BI TP .......................................................... 160
Chng 1 ........................................................................................................................ 160
Chng 2 ........................................................................................................................ 160
Chng 3 ........................................................................................................................ 161
Chng 4 ........................................................................................................................ 162
Chng 5 ........................................................................................................................ 164
Chng 6 ........................................................................................................................ 165
TI LIU THAM KHO.................................................................................................. 170
MC LC.......................................................................................................................... 171

You might also like