Professional Documents
Culture Documents
Lap Trinh Huong Doi Tuong
Lap Trinh Huong Doi Tuong
Lap Trinh Huong Doi Tuong
PGS.TS. Trn nh Qu
KS. Nguyn Mnh Hng
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 hai trnh by chi tit phng php lp trnh hng i tng vi ngn ng lp
trnh Java.
PHN 1
NHNG KHI NIM C BN
CA LP TRNH HNG I TNG
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:
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
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.
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 :
Tnh cht
Mi chng trnh con c th c gi thc hin nhiu ln trong mt chng trnh chnh.
u im
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.
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).
6
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
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:
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.
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:
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.
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 :
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:
u im
Lp trnh hng i tng c mt s u im ni bt:
M t bi ton
c t yu cu
M hnh ho lp i tng
Bc 1: M t bi ton
Bi ton ban u c pht biu di dng ngn ng t nhin, bao gm:
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:
Bc 4: M hnh ho lp i tng
Bc ny tin hnh tru tng ho i tng thnh cc lp:
Nhm cc i tng tng t nhau, hoc c nhiu thuc tnh gn ging nhau.
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.
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.
11
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.
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.
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.
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.
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.
12
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.
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:
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.
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.
13
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.
14
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
K tha
ng gi
a hnh
Gii thiu mt s ngn ng lp trnh hng i tng thng dng hin nay.
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 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
Mu sn xe l trng
Gi bn xe l 5000$
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.
Lp c dng biu din i tng, cho nn lp cng c thuc tnh v phng thc:
16
Dng xe
Tt my
Lu :
Mt lp c th c mt trong cc kh nng sau:
Lp v i tng
Lp v i tng, mc d c mi lin h tng ng ln nhau, nhng bn cht li khc nhau:
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.
Tp hp tt c cc hnh ng c th c ca cc i tng.
C th khi ng my.
C th chy.
C th dng li.
C th tt my.
17
C th giu n pha
C th t bt n pha
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
Nhm cc i tng c cc thuc tnh tng t nhau, loi b bt cc thuc tnh c bit, to
thnh mt nhm chung.
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
C xe c th c dn nghe nhc
C xe c th c mn hnh xem ti vi
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.
18
Lp Xe t
Thuc tnh:
Nhn hiu xe
Mu xe
Gi xe
Cng sut xe (m lc)
Tp trung vo vn cn quan tm
Lp Sinh vin
Thuc tnh:
Tn
Tn
Ngy sinh
Ngy sinh
Gii tnh
Gii tnh
Lng
Lp
Phng thc:
Phng thc:
Nhp/xem tn
Nhp/xem tn
Nhp/xem lng
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.
19
Tn,
Ngy sinh,
Gii tnh,
Nhp/xem tn,
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
20
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>
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.
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
Nhp/xem lng
Nhp/xem lp
show
show
Khi ta gi phng thc show t i tng ca lp Nhn vin, s nhn c s tin lng
ca nhn 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.
Mc khi nim
Mc ch v chc nng
V u v nhc im
22
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 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:
23
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.
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.
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 lp k tha s dng cc phng thc ca lp b k tha (trong phm vi quy
nh).
25
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 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 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 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.
26
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.
27
PHN 2
LP TRNH HNG I TNG VI JAVA
28
CHNG 3
GII THIU V JAVA
Ni dung ca chng ny tp trung trnh by cc vn chnh v ngn ng lp trnh Java:
n gin
Hng i tng
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:
29
Loi b thao tc con tr, thao tc nh ngha chng ton t (operator overloading)
Hng i tng
Java l ngn ng lp trnh hon ton hng i tng:
compiler
IB
compiler
Sparc
compiler
Macintosh
30
IB
Bytecode
Trnh
thng dch Java
(Java Interpreter)
c lp nn
(Platform
independent)
Sparc
Macintosh
Mnh m
Java l ngn ng yu cu cht ch v kiu d liu:
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).
Bo mt
Java cung cp mt mi trng qun l thc thi chng trnh vi nhiu mc kim sot tnh an
ton:
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.
31
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
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/
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
32
class className
// Khai bo tn lp
{
/* y l dng ghi ch */
int var;
// Khai bo bin
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>;
Tn t chc
Tn cng ty
Tn d n
33
Tn modul trong d n
V d:
Tn d n l pro
Modul mod1 c hai chc nng l kt ni c s d liu connection v biu din d liu
bean.
mod1
connection
mod2
bean
interface
process
u im ca package:
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.
Lu :
Dng lnh khai bo tn khi phi c t u tin trong tn tin m chng trnh.
34
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>;
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 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:
Vic khai bo lp vi cc thuc tnh v phng thc s c trnh by chi tit trong chng 4.
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
y l dng khai bo tn khi ca chng trnh, v tn khi ca chng trnh c t theo hai
mc:
36
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.
main(String args[ ])
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.
37
PassArgument{
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:
38
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.
Cc kiu d liu c bn
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:
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:
double:
long:
class:
interface: D liu kiu lp giao tip do ngi dng nh ngha. Cha cc phng thc ca giao
tip.
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
40
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.
41
Ton t Exclusive OR bt
<<
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
42
Hoc (OR)
||
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>;
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.
3.
4.
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 ():
43
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.
Mnh if-else
Mnh swich-case
Vng lp (Loops)
Vng lp while
Vng lp do-while
Vng lp for
44
{
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 }.
default_action statement;
System.out.println(Friday);
break;
case 6 : System.out.println(Satuday);
break;
default:
System.out.println(Invalid day of week);
}
}
}
46
(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
47
sum += a;
a++;
}while
(a <= 5);
System.out.println(Sum of 1 to 5
is + sum);
}
}
48
Phi kim tra x, y l cc s nguyn dng hay khng trc khi tnh ton.
49
Sau khi bin dch chng trnh3.8 (tp tin c tn RectangleDemo.java), ta chy t ca s dng
lnh:
>java RectangleDemo 10 20
50
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:
Tn lp, tn phng thc, tn hng v tn bin trong java phi tun theo quy tc t tn
ca java.
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
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$
51
c.
1abc
d.
class
e.
vi du
f.
$123
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{
52
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{
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.
53
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>
{
}
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>();
54
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();
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.
native: dng cho phng thc khi ci t ph thuc mi trng trong mt ngn
ng khc, nh C hay hp ng.
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;
55
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;
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;
56
class Person
{
public String
name;
public int
age;
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.
57
name;
public int
age;
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
{
58
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();
}
}
59
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();
}
}
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.
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
60
php ci t nhiu giao tip (Interface) c th tha hng thm cc thuc tnh v phng thc
ca cc 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.
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 :
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
{
}
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).
Lu :
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();
}
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 :
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
{
62
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.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>
{
}
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
{
}
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.
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.
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.
64
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
65
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
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
66
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
67
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 :
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 + );
68
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:
Cc phng thc truy nhp cc thuc tnh name (getName() v setName(String)) v age
(getAge() v setAge(int)).
69
4.5.3 Lp Employee
Lp Employee l lp k tha t lp Person:
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).
71
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.
72
}
}
$300/month!
$330/month!
$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 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
73
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
Binterface{}
MyInterface
extends
Ainterface,
extends
74
}
// 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.
75
v:
public class Employee extends Person {
public void show(int x){
System.out.println(This is the employee + x);
}
}
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.
76
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.
77
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:
Ngn xp v hng i
Cy nh phn
th
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 cy
Duyt trn th
78
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.
Sp xp ni bt (bubble 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.
79
Nu i<j, i ch phn t th i v th j.
// Qut xui
80
// Qut ngc
// 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
quick(i, right);
// Sp xp on sau cht
}
}
Tm kim nh phn
Tm kim trn cy
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;
81
}
/* Phng thc tm kim */
public int search(int key){
quick(0, elements.length-1);
// Ch s gia
// Tm na sau
// Tm na u
// 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
// 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
quick(i, right);
// Sp xp on sau cht
}
}
82
Mng lu cc nt ca 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
83
// Ngn xp c d liu
84
5.3.2 Hng i
Hng i (queue) c cc thuc tnh cc b:
Cc thao tc vi hng i:
Ly ra mt nt t u hng i
// Hng i c d liu
85
tmpNode[i] = values[i];
tmpNode[values.length] = node;
this.values = tmpNode;
}
}
}
Nt tip theo ca nt .
86
87
}
/* 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;
}
}
88
89
90
}
return result;
}
}
Nt tip theo ca nt .
Nt trc ca nt .
91
92
}
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;
}
}
93
94
95
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:
Ch n nt con bn tri ca n.
Ch n nt con bn phi ca n.
96
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
Xo nt con tri ca mt nt
Xo nt con phi ca mt nt
97
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);
98
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){
99
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;
}
100
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;
}
101
Danh sch cnh khng cn tnh n trng s. Danh sch cnh v ma trn k c cp nht
ng b vi nhau.
Tm ng i gia hai nh bt k
102
// Ma trn k
private Bridge[] B;
103
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];
queue[0] = 0;
visited[0] = true;
// Khi to hng i
// m s nh lin thng
int u = queue[front];
front++;
104
// Mng lu vt ng i
// Khi to hng i
105
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
// Khi to hng i
// Tm cnh ca CBT
int u = queue[front];
front++;
for(int j=0; j<nodeNumber; j++)
if(A[u][j] == 1)&&(!visited[j]){
tail++;
106
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:
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.
// Ma trn k
private Bridge[][] B;
107
108
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];
queue[0] = 0;
visited[0] = true;
// Khi to hng i
// 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
109
110
// Cha c cnh no
111
while (true) {
System.out.println("**********************************");
System.out.println("
CASE STUDY 3
");
System.out.println("
----------o0o----------
");
");
");
");
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:
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("
");
112
System.out.println("
----------o0o----------
");
");
");
System.out.println("**********************************");
System.out.print(" |==> Chon chuc nang: ");
int function = Integer.parseInt(br.readLine());
switch(function){
case 1:
// Ly tt c cc phn t ca ngn xp
113
/* Thao tc vi hng i */
public void queue(BufferedReader br){
MyQueue queue = new MyQueue();
try{
while (true) {
System.out.println("**********************************");
System.out.println("
");
System.out.println("
----------o0o----------
");
");
");
System.out.println("**********************************");
System.out.print(" |==> Chon chuc nang: ");
int function = Integer.parseInt(br.readLine());
switch(function){
case 1:
// Ly tt c cc phn t ca hng i
114
}
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("
");
System.out.println("
--------------o0o-------------
");
");
");
");
System.out.println(" 10.Thoat!
");
System.out.println("**********************************");
System.out.print(" |==> Chon chuc nang: ");
int function = Integer.parseInt(br.readLine());
switch(function){
case 1:
115
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 sp xp
Ngn xp (stack)
Hng i (queue)
Danh sch lin kt (list): danh sch lin kt n v danh sch lin kt kp.
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.
116
Ly mt tin trnh ra
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.
117
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:
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.*;
add(Object):
remove(Object):
removeAll():
getComponent(int):
getComponents():
countComponents():
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():
Frame(String):
setSize(int, int):
setVisible(boolean):
// nh kch c frame
myFrame.setVisible(true);
// Hin th 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():
// nh kch c frame
myFrame.setVisible(true);
// Hin th frame
119
}
}
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.
Dialog(Frame, boolean):
Dialog(Frame, String, boolean): Khi to dialog, thm tham s th hai l dng tiu ca
dialog.
setVisible(boolean):
setSize(int, int):
setResizable(boolean):
setLayout(Layout):
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
120
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():
Label(String):
Label(String, int):
setFont(Font):
// nh kch c frame
// Gn label vo frame
121
myFrame.setVisible(true);
// Hin th frame
}
}
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:
getSelectedText():
getSelectedStart():
getSelectedEnd():
selectAll():
setEditable(boolean):
TextField():
Khi to mt vn bn rng.
TextField(int):
TextField(String):
getColums():
Tr v rng ca vn bn.
TextArea():
TextArea(int, int):
TextArea(String):
appendText(String):
122
// nh kch c frame
// Gn vo frame
TextFields
columns
is:
// Thit lp ni dung
myFrame.add(myTextArea);
// Gn vo frame
myFrame.setVisible(true);
// Hin th frame
}
}
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):
// nh kch c frame
// Gn vo frame
myFrame.setVisible(true);
// Hin th frame
}
}
ActionEvent:
ComponentEvent:
FocusEvent:
ItemEvent:
Xut hin khi mt menu item c chn hoc b, khi checkbox hoc
list item c click vo.
124
WindowEvent:
TextEvent:
MouseEvent:
Xut hin khi chut c click, di chuyn qua, nhn xung v th ra.
KeyEvent:
ActionListener.
ComponentListener
FocusListener
ItemListener
WindowListener
TextListener
MouseListener v MouseMotionListener
KeyListener
// Ci t li m lnh
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).
125
// 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
126
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
}
}
La chn (Choice)
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:
Checkbox():
Khi to mt nh du rng.
Checkbox(String):
Cc phng thc khi to Radio button tng t nh Checkbox, ngoi tr vic phi ch ra nhm
ca cc radio button:
Kiu s kin:
ItemEvent
Ci t giao tip:
ItemListener
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();
128
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
}
}
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():
addItem(String):
remove(int):
removeAll():
getItem(int):
Kiu s kin:
ItemEvent
Ci t giao tip:
ItemListener
129
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);
myChoice.addItem(Blue);
myChoice.addItem(Green);
myChoice.addItemListener(this);
// Bt s kin
this.add(myChoice);
// Gn vo frame
// 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) {
130
// nh kch c frame
myFrame.setVisible(true);
// Hin th frame
}
}
List():
List(int):
add(String):
add(String, int):
remove(int):
removeAll():
Kiu s kin:
ItemEvent
Ci t giao tip:
ItemListener
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.
131
// Gn vo frame
// Khi to nhn
this.add(lbl);
// Gn vo frame
132
}
}
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
}
}
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:
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():
add(Menu):
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):
add(MenuItem):
add(Menu):
addSeparator():
X l s kin ca lp Menu:
Kiu s kin:
ActionEvent
Giao tip ci t:
ActionListener
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:
getState():
enable():
disable():
X l s kin ca lp MenuItem:
Kiu s kin:
ActionEvent
Giao tip ci t:
ActionListener
To mt menubar ca frame
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.
134
// Thanh trnh n
this.setMenuBar(myBar);
// menu File
myBar.add(myMenu);
myMenu.addActionListener(this);// Bt s kin
myMenu.add(new MenuItem(New));
myMenu.add(new MenuItem(Open));
myMenu.addSeparator();
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
// Khng x l
135
// nh kch c frame
myFrame.setVisible(true);
// Hin th frame
}
}
FlowLayout():
FlowLayout(int):
FlowLayout.LEFT:
FlowLayout.CENTER: Cn l gia.
Cn l tri, l gi tr mc nh.
136
FlowLayout.RIGHT:
Cn l phi.
// nh kch c frame
// Hin th frame
}
}
GridLayout(int, int):
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));
setLayout(new GridLayout(0,2));
// nh kch c frame
// Hin th frame
}
}
West:
East:
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:
138
V d:
myFrame.add(Center, new Button(Click));
// nh kch c frame
myFrame.setLayout(new BorderLayout());
// nh cch trnh by
// Gn vo vng west
// Gn vo vng east
// Hin th frame
}
}
139
GridBagLayout():
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:
gridx/gridy:
gridwidth/gridheight: Kch thc (vng trnh by) ca i tng (Theo chiu rng v
chiu cao).
fill:
ipadx/ipady:
insets:
anchor:
weightx/weighty:
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) {
140
// nh kch c frame
// nh cch trnh by
// nh rng buc
myFrame.add(btn1);
// Gn vo frame
// nh rng buc
myFrame.add(btn2);
// Gn vo frame
// nh rng buc
myFrame.add(btn3);
// Gn vo frame
myFrame.setVisible(true);
// Hin th frame
}
}
141
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
// Gn vo frame
// Gn vo frame
142
myFrame.setVisible(true);
// Hin th frame
}
}
// Cc thuc tnh
init():
start():
stop():
destroy():
Lu :
repaint():
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
// Khi to
// 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
}
}
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.
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);
145
// 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);
146
// 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:
// Cc tham s khc
</APPLET>
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;
147
// Ting Vit
// Nt cng
// Ting Php
// Ting Anh, mc nh
JButton
Label
JLabel
TextField JTextField
TextArea JTextArea
Checkbox JCheckbox
List
JList
148
Menu
JMenu
// nh kch c frame
149
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.
ContentPane: L tng thng dng nht, tng ny dng cha cc i tng component
c bn nh button, label, text, list
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.
V d:
JFrame myFrame = new JFrame(My JFrame);
myFrame.getContentPane().add(Center, new JButton(Test));
150
// nh kch c frame
myFrame.setVisible(true);
// Hin th frame
151
}
}
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.
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.
Vi cc nt chc nng, khi click vo th thc hin php ton v hin kt qu ra mn hnh,
nu c.
152
// S hng trc
this.setLayout(null);
// Thit lp layout
// 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);
pnl.add(btn7);
// Gn vo panel
// 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(+);
btnAdd.addActionListener(this);
pnl.add(btnAdd);
btnReset = new Button(C);
// Nt reset
btnReset.addActionListener(this);
153
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);
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(*);
btnMul.addActionListener(this);
pnl.add(btnMul);
btnRev = new Button(1/x);
btnRev.addActionListener(this);
pnl.add(btnRev);
btn0 = new Button(0);
// Nt s 0
154
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(/);
btnDiv.addActionListener(this);
pnl.add(btnDiv);
btnSqrt = new Button(Sqrt);
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;
155
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;
}
156
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());
157
}
public static void main(String[] args) {
// Khai bo v khi to frame
CalculatorDemo myFrame = new CalculatorDemo();
myFrame.setVisible(true);
// Hin th frame
}
}
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.
Chng 6 cng gii thiu mt phng php lp trnh giao din Java c nhng trong cc trang
web, l lp trnh applet:
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.
158
CU HI V BI TP CHNG 6
1. Vit chng trnh thay i mu nn ca frame theo la chn ca ngi dng:
159
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 :
160
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 :
15. Gi :
161
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 :
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;
}
162
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;
}
}
163
}
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;
}
}
164
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){
165
166
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;
}
}
}
}
167
168
});
}
/* 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;
}
}
}
169
170
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
173