Professional Documents
Culture Documents
Lap Trinh Huong Doi Tuong
Lap Trinh Huong Doi Tuong
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++. 2
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.
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.
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 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). 6
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.
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.
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.
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
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.
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 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.
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.
Sau , ngi ta ghp cc thnh phn vi nhau thu c mt phn mm tho mn mt tp cc yu cu xc nh. 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.
Vi lp trnh hng thnh phn, ngi ta c th tin hnh lp trnh theo phng php sau:
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)
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
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.
14
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. 15
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. 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.
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: 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.
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. 17
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
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 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.
18
Lp Xe t
Thuc tnh: Nhn hiu xe Mu xe Gi xe Cng sut xe (m lc)
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.
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. 19
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
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.
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>
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.
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
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.
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 .
23
Trong mt lp, thng thng cc thnh phn sau s c t vo vng chia s public ca lp:
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.
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 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.
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
28
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) 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.
IB Sparc Macintosh
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.
30
IB
Bytecode
Sparc Macintosh
c lp nn (Platform independent)
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.
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 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/
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
package packageName; // Khai bo tn gi, nu c import java.awt.*; class className { /* y l dng ghi ch */ int var; // Khai bo bin // Khai bo tn th vin sn c, nu cn dng // Khai bo tn lp
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
33
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.
mod1
mod2
connection
bean
interface
process
Hnh 3.3: Kin trc khi ca d n 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. 34
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. 35
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: Mc th nht l kiu bi: v d (vidu) hoc bi tp (baitap). Mc th hai l tn ca chng: chuong3, chuong4, chuong5, chuong6.
36
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.
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.
37
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
38
Kiu d liu c bn
Java cung cp cc kiu d liu c bn nh sau: byte: char: boolean: short: int: float: double: long: 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. 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. 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. 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. 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. Dng lu d liu c kiu s thc, kch c 4 byte (32 bt). Gi tr mc nh l 0.0f. Dng lu d liu c kiu s thc c kch thc ln n 8 byte. Gi tr mc nh l 0.00d Dng lu d liu c kiu s nguyn c kch thc ln n 8 byte. Gi tr mc nh l 0l.
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.
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 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
>>
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 42
|| ^
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 1. 2. 3. 4. 5. Ton t Cc ton t n nh +,-,++,-Cc ton t s hc v cc ton t dch nh *,/,+,-,<<,>> Cc ton t quan h nh >,<,>=,<=,= =,!= Cc ton t logic v Bit nh &&,||,&,|,^ 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
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.
Vng lp (Loops)
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.
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 }.
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. 45
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.
46
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
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{
47
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.
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.
48
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.
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
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. b. _123 a$ 51
c. d. e. f.
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{
52
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.
53
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>();
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();
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 public int } name; age;
55
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 public int name; 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
// 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.
57
// 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 {
58
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(); } }
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(); } }
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. 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). Mt giao tip ch c th k tha t cc giao tip khc m khng th c k tha t cc lp sn c.
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). 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. 61
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(); }
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. 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.
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
// 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.
Lu :
Tn lp: tun th theo quy tc t tn lp thng thng ca java. 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 { }
Lu :
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. 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.
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
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
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
- 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
67
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) + \); } }
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 + );
68
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).
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.
69
// 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(). 70
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
/* 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.
72
} }
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 73
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 Binterface{} MyInterface extends Ainterface, extends
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);
74
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:
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
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).
78
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.
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
80
while(elements[j]>elements[pivot] && j>left)j++; if(i<=j){ tmp = elements[i]; elements[i] = elements[j]; elements[j] = tmp; } }while (i<=j); if(left < j) if(i < right) } } quick(left, j); quick(i, right);
// Qut ngc
// i ch hai phn t
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;
81
} /* Phng thc tm kim */ public int search(int key){ quick(0, elements.length-1); while(low <= hight){ mid = (low + hight)/2; if(key > elements[mid]) low = mid+1; else if(key < elements[mid]) hight= mid-1; else return mid; } return -1; } /* 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++; while(elements[j]>elements[pivot] && j>left)j++; if(i<=j){ tmp = elements[i]; elements[i] = elements[j]; elements[j] = tmp; } }while (i<=j); if(left < j) if(i < right) } } quick(left, j); quick(i, right); // Sp xp on trc cht // Sp xp on sau cht // Qut xui // Qut ngc // Khng tm thy // Tm na u // Tm thy // Tm na sau // Ch s gia // Sp xp mng, dng quicksort int low=0, hight=elements.length-1, mid;
// i ch hai phn t
82
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.
83
84
5.3.2 Hng i
Hng i (queue) c cc thuc tnh cc b: Mng cc gi tr trong hng i Thm vo mt nt vo cui hng i Ly ra mt nt t u hng i Cc thao tc vi hng i:
85
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; }
86
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; } }
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
/* 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());
89
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();
90
} return result; } }
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 */
91
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; } }
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; } }
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(){
93
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;
94
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();
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: 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.
96
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
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
/* 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; }
101
/* 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; } }
102
/* 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){
103
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){ 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]; int front=0, tail = 0; int size = 1; queue[0] = 0; visited[0] = true; while(front <= tail){ int u = queue[front]; front++; // Khi to hng i // m s nh lin thng // S lng nh lin thng // Hng i, duyt BFS // Ban u cha c cnh no
104
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]; int[] queue = new int[nodeNumber]; int front=0, tail = 0; queue[0] = start; visited[start] = true; 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]]; // Khi to hng i while(front <= tail)&&(!visited[end]){ // Tm ng i // Mng lu vt ng i // Hng i, duyt BFS
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 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]; int front=0, tail = 0; queue[0] = 0; visited[0] = true; while(front <= tail){ int u = queue[front]; front++; for(int j=0; j<nodeNumber; j++) if(A[u][j] == 1)&&(!visited[j]){ tail++; // Khi to hng i // Tm cnh ca CBT // Hng i, duyt BFS
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: 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. 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
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 ++;
107
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
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]; int front=0, tail = 0; int size = 1; queue[0] = 0; visited[0] = true; while(front <= tail){ 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]; int[] distance = new int[nodeNumber]; // Mng lu vt ng i // Khong cch n cc node // Khi to hng i // m s nh lin thng // S lng nh lin thng // Hng i, duyt BFS
109
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++)
110
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; } }
111
while (true) { System.out.println("**********************************"); System.out.println(" System.out.println(" CASE STUDY 3 ----------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.print(" |==> Chon chuc nang: "); int function = Integer.parseInt(br.readLine()); CaseStudy3 ob3 = new CaseStudy3(); switch(function){ case 1: break; case 2: break; case 3: 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) { // Thao tc vi danh sch ob3.list(br); // Thao tc vi hng i ob3.queue(br); // Thao tc vi ngn xp ob3.stack(br);
System.out.println("**********************************");
112
System.out.println("
----------o0o----------
"); ");
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.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(); } } "); System.out.println("**********************************");
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(" THAO TAC VOI HANG DOI ----------o0o---------"); "); ");
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.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; } } "); System.out.println("**********************************");
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(" THAO TAC VOI DANH SACH DON --------------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.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("**********************************");
115
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. 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. 116
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. 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.
117
Mun s dng cc i tng ny, cn thm lnh s dng th vin awt ca Java:
import java.awt.*;
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): Khi to khng tham s. Khi to vi tham s l dng tiu ca frame. nh kch c ca frame, tham s tng ng l chiu rng v chiu cao ca frame. 118
setVisible(boolean):
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); myFrame.setVisible(true); } } // nh kch c frame // 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(): 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); myFrame.add(myPanel); myFrame.setVisible(true); // nh kch c frame // Thm panel vo frame // Hin th frame Panel myPanel = new Panel();// Khai bo panel
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): 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): setSize(int, int): Thit lp trng thi hin th hoc n dialog trn mn hnh. nh kch c cho dialog, cc tham s tng ng l chiu rng v chiu cao ca dialog. Thit lp thuc tnh cho php thay i kch c ca dialog. Thit lp ch hin th cc i tng cha trong dialog.
setTitle(String)/getTitle(): Truy nhp thuc tnh dng tiu ca dialog. 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 // Khai bo v khi to dialog Dialog myDialog = new Dialog(myFrame, An empty dialog!, true); myDialog.setSize(300,150); // nh kch c dialog
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): Khi to mt nhn rng. Khi to mt nhn vi ni dung vn bn l tham s u vo. 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); // 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 // nh kch c 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: setText(String)/getText(): Truy nhp thuc tnh ni dung vn bn cha trong . getSelectedText(): getSelectedStart(): getSelectedEnd(): selectAll(): setEditable(boolean): TextField(): TextField(int): TextField(String): Tr v chui vn bn c bi en (nh du chn) trong . Tr v v tr k t u trong vng c nh du chn (tnh t 0). Tr v v tr k t cui trong vng c nh du chn (tnh t 0). nh du chn ton vn bn. Xc nh vng vn bn c th edit c hay khng. Khi to mt vn bn rng. Khi to mt vn bn rng, rng xc nh bi tham s vo. 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(): TextArea(): Tr v rng ca vn bn. Khi to mt vng vn bn rng. Khi to mt vng vn bn rng, kch c (s dng, s ct) xc nh bi tham s vo. Khi to mt vng vn bn c ni dung xc nh bi tham s u vo. Thm mt on vn bn vo cui on vn bn trong vng.
TextArea(String, int, int): Khi to vng vn bn vi ni dung c sn, rng xc nh. appendText(String): insertText(String, int): Chn mt on vn bn vo v tr xc nh (tham s th hai) ca vng vn bn.
122
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); // Khai bo v khi to textField TextField myTextField = new TextField(A text field!); myFrame.add(myTextField); // Khai bo v khi to textArea TextArea myTextArea = new TextArea(5, 40); String str=The +myTextField.getColumns(); TextFields columns is: // Gn vo frame // nh kch c frame
str += The TextAreas size is: + myTextArea.getRows() + * + myTextArea.getColumns(); myTextArea.setText(str); myFrame.add(myTextArea); myFrame.setVisible(true); } } // Thit lp ni dung // Gn vo frame // 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): Khi to nt nhn vi tn xc nh trn nt. 123
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); // Khai bo v khi to button Button myButton = new Button(Click!); myFrame.add(myButton); myFrame.setVisible(true); } } // Gn vo frame // Hin th frame // nh kch c 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.
Cc lp s kin c bn ca cc i tng bao gm: ActionEvent: ComponentEvent: FocusEvent: ItemEvent: Xut hin khi mt nt b click vo, mt danh sch (list) c chn, mt menu c chn. Xut hin khi mt component b thay i kch c, v tr, trng thi. Xut hin khi mt component c hoc mt focus. Xut hin khi mt menu item c chn hoc b, khi checkbox hoc list item c click vo.
124
WindowEvent: TextEvent: MouseEvent: KeyEvent: ActionListener. ComponentListener FocusListener ItemListener WindowListener TextListener
Xut hin khi mt ca s c m ra, kch hot, ng li hoc thot ra. Xut hin khi gi tr vn bn ca cc i tng TextField v TextArea b thay i. Xut hin khi chut c click, di chuyn qua, nhn xung v th ra. Xut hin khi c u vo t bn phm.
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).
125
lbl1 = new Label(So thu nhat:); // Nhn s th nht this.add(lbl1); txt1 = new TextField(); this.add(txt1); lbl2 = new Label(So thu hai:); // Nhn s th hai this.add(lbl2); txt2 = new TextField(); this.add(txt2); lblKq = new Label(); this.add(lblKq); this.add(new Label()); // Cc nt nhn btnCong = new Button(Cong); this.add(btnCong); btnTru = new Button(Tru); btnTru.addActionListener(this); this.add(btnTru); btnNhan = new Button(Nhan); btnNhan.addActionListener(this); this.add(btnNhan); btnChia = new Button(Chia); btnChia.addActionListener(this); this.add(btnChia); btnThoat = new Button(Thoat); 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 // Nt thot // Nt chia // Nt nhn // Nt tr // Nt cng btnCong.addActionListener(this); // Bt s kin // Nhn kt qu // vn bn s th hai // vn bn s th nht
126
kq = x + y; if(ae.getSource() == btnTru) 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); myFrame.setVisible(true); } } // nh kch c frame // Hin th frame // Tr hai s
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. Checkbox(): Checkbox(String): Khi to mt nh du rng. Khi to nh du c nhn xc nh. Cc phng thc khi to Checkbox:
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); 127
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); this.add(cbxRed); cbxBlue = new Checkbox(Blue, cbxg, false);// Nt blue cbxBlue.addItemListener(this); this.add(cbxBlue); cbxGreen = new Checkbox(Green, cbxg, false);// Nt green cbxGreen.addItemListener(this); 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(); // Bt s kin // Bt s kin // Bt s kin
128
if(item.equals(Red)) this.setBackground(Color.red); if(item.equals(Blue)) this.setBackground(Color.blue); if(item.equals(Green)) this.setBackground(Color.green); this.repaint(); } } public static void main(String[] args) { // Khai bo i tng demo RadioDemo myFrame = new RadioDemo(); myFrame.setSize(300,150); myFrame.setVisible(true); } }
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(): Khi to i tng choice. Thm mt item vo danh sch la chn. Xo item v tr th i trong danh sch (bt u l v tr 0). 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): Kiu s kin: Ci t giao tip: Tr v tn ca item tng ng vi s th t a vo. ItemEvent 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(); myChoice.addItem(Red); myChoice.addItem(Blue); myChoice.addItem(Green); myChoice.addItemListener(this); this.add(myChoice); // Khi to // Thm item red // Thm item blue // Thm item green // Bt s kin // 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)) this.setBackground(Color.red); if(item.equals(Blue)) this.setBackground(Color.blue); if(item.equals(Green)) this.setBackground(Color.green); this.repaint(); } } public static void main(String[] args) { // V li mu nn // i mu green // i mu blue // i mu red
130
// Khai bo i tng demo ChoiceDemo myFrame = new ChoiceDemo(); myFrame.setSize(300,150); myFrame.setVisible(true); } } // nh kch c frame // Hin th frame
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): add(String, int): Thm mt item vo danh sch. 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): removeAll(): Xo item v tr xc nh trong danh sch. 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). Kiu s kin: Ci t giao tip: ItemEvent 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
// 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);
132
} } public static void main(String[] args) { // Khai bo i tng demo ListDemo myFrame = new ListDemo(); myFrame.setSize(300,150); myFrame.setVisible(true); } } // nh kch c frame // 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: Menu: PopupMenu: MenuItem: Thanh trnh n Trnh n xung Trnh n xut hin khi click chut phi. 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): Khi to mt thanh cng c cho trnh n Thm mt trnh n mune ln thanh trnh n 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): add(MenuItem): add(Menu): Khi to mt menu, vi tn xc nh. Thm mt item vo menu Thm mt menu con vo menu c, dng khi mun to menu c nhiu mc. 133
X l s kin ca lp Menu:
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(): enable(): disable(): Kiu s kin: Giao tip ci t: Tr v trng thi ca item. Ch dng cho item c mc chn. Cho php item hot ng (l ch mc nh). Khng cho php item hot ng (lm m item i). ActionEvent ActionListener
X l s kin ca lp MenuItem:
Phng thc x l: actionPerformed(ActionEvent); 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.
134
// Thanh trnh n // Thit lp menubar ca frame // menu File // 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(); this.add(lbl); // Khi to nhn // 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){
135
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); myFrame.setVisible(true); } } // nh kch c frame // Hin th frame
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). FlowLayout.LEFT: Cn l tri, l gi tr mc nh.
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
Lu : V d:
setLayout(new GridLayout(3,0));
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.
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
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. BorderLayout(): Khi to mt i tng trnh by theo cch border.
Phng thc c bn ca lp BorderLayout: 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));
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); myFrame.setLayout(new BorderLayout()); // Khai bo v khi to button myFrame.add(West, new Button(West)); myFrame.add(East, new Button(East)); // Gn vo vng west // Gn vo vng east // nh kch c frame // nh cch trnh by
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
139
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. nh n v tng gim kch thc ca i tng khi khung cha b thay i kch thc (theo chiu X v chiu Y). Xc nh khong cch gia cc cell theo bn hng: Trn, di, tri, phi. Xc nh v tr neo i tng khi kch thc khung cha thay i. Bao gm: NORTH, NORTHEAST, NORTHWEST, EAST, SOUTH, SOUTHEAST, SOUTHWEST. nh khong cch ln ra tng i gia cc i tng vi nhau.
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
// Khai bo v khi to frame c tiu Frame myFrame = new Frame(Frame has somes buttons!); myFrame.setSize(300,150); myFrame.setLayout(layout); // 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); myFrame.add(btn1); // nh rng buc // Gn vo frame // nh kch c frame // nh cch trnh by GridBagLayout layout = new GridBagLayout();
// 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); myFrame.add(btn2); // nh rng buc // 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); myFrame.add(btn3); myFrame.setVisible(true); } } // nh rng buc // Gn vo frame // 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); myFrame.setLayout(null); // nh kch c frame // 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
142
myFrame.setVisible(true); } }
// Hin th frame
Cc phng thc c bn ca mt applet: Lu : Khng phi tt c cc applet u phi ci t y 4 phng thc c bn trn. 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(). 143 Applet cn c th ci t mt s phng thc tu chn (khng bt buc) sau: init(): start(): stop(): destroy(): Khi to cc tham s, nu c, ca applet. Applet bt u hot ng. Chm dt hot ng ca applet. Thc hin cc thao tc dn dp trc khi thot khi applet.
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; public void init(){ buffer = new StringBuffer(); addBuffer(initializing); } public void start(){ addBuffer(starting); } public void stop(){ addBuffer(stopping); } public void destroy(){ addBuffer(unloading); } private void addBuffer(String newBuffer){ buffer.append(newBuffer); repaint(); } public void paint(Graphics g){ g.drawString(buffer.toString(), 5, 15); // Hin thng bo } } // Thm thng bo // Thot // Dng // Kch hot // Chui thng bo // Khi to
Bin dch m ngun thnh lp .class Nhng m .class ca applet vo trang html.
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
lbl2 = new Label(So thu hai:); // Nhn s th hai this.add(lbl2); txt2 = new TextField(); this.add(txt2); lblKq = new Label(); this.add(lblKq); this.add(new Label()); // Cc nt nhn btnCong = new Button(Cong); this.add(btnCong); btnTru = new Button(Tru); btnTru.addActionListener(this); this.add(btnTru); btnNhan = new Button(Nhan); btnNhan.addActionListener(this); this.add(btnNhan); btnChia = new Button(Chia); btnChia.addActionListener(this); this.add(btnChia); btnThoat = new Button(Thoat); 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) 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); // Tr hai s // Nt thot // Nt chia // Nt nhn // Nt tr // Nt cng btnCong.addActionListener(this); // Bt s kin // Nhn kt qu // vn bn s th hai
146
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.
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;
147
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)){ btn = new Button(Tim kiem); }else if(langue.equals(fr)){ btn = new Button(Chercher); }else{ lbl = new Label(Enter keys); btn = new Button(Search); } txt = new TextField(); this.add(lbl); this.add(txt); this.add(btn); } } // Ting Anh, mc nh // Ting Vit // Nt cng // Ting Php lbl = new Label(Nhap tu khoa); // Nhn s th nht
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.
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.
// 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
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.
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.
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.
150
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); myFrame.setVisible(true); // nh kch c frame // 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.
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
152
// S hng trc
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); this.setLayout(null); lbl = new Label("0"); lbl.setAlignment(2); lbl.setSize(240, 30); lbl.setLocation(5, 25); this.add(lbl); Panel pnl = new Panel(); pnl.setSize(240, 190); pnl.setLocation(5, 55); pnl.setLayout(new GridLayout(4, 5)); // Thit lp layout this.add(pnl); btn7 = new Button(7); btn7.addActionListener(this); pnl.add(btn7); btn8 = new Button(8); btn8.addActionListener(this); pnl.add(btn8); btn9 = new Button(9); btn9.addActionListener(this); pnl.add(btn9); btnAdd = new Button(+); btnAdd.addActionListener(this); pnl.add(btnAdd); btnReset = new Button(C); btnReset.addActionListener(this); // Nt reset // Nt php ton cng // Nt s 9 // Nt s 7 // Bt s kin click chut // Gn vo panel // Nt s 8 // Panel cha cc nt // Khng cho thay i size // Thit lp layout // Nhn kt qu
153
pnl.add(btnReset); btn4 = new Button(4); btn4.addActionListener(this); pnl.add(btn4); btn5 = new Button(5); btn5.addActionListener(this); pnl.add(btn5); btn6 = new Button(6); btn6.addActionListener(this); pnl.add(btn6); btnSub = new Button(-); btnSub.addActionListener(this); pnl.add(btnSub); btnPow = new Button(x^y); btnPow.addActionListener(this); pnl.add(btnPow); btn1 = new Button(1); btn1.addActionListener(this); pnl.add(btn1); btn2 = new Button(2); btn2.addActionListener(this); pnl.add(btn2); btn3 = new Button(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 // Nt php ton nghch o // Nt php ton nhn // Nt s 3 // Nt s 2 // Nt s 1 // Nt php ton lu tha // Nt php ton tr // Nt s 6 // Nt s 5 // Nt s 4
154
btn0.addActionListener(this); pnl.add(btn0); btnPoint = new Button(.); btnPoint.addActionListener(this); pnl.add(btnPoint); btnResult = new Button(=); 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; // Nt php ton cn bc hai // Nt php ton chia // Nt kt qu // Nt du thp phn
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){ operatorState = false; }else // G tip s c lbl.setText(lbl.getText() + ae.getActionCommand()); // Bt u s mi lbl.setText(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. 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. 158
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).
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 : 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 :
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);
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
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; } }
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
for(int i=0; i<colors.length; i++) if((Button)ae.getSource() == btns[i]){ // Thit lp mu nn theo mu tng ng return; } } }
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
// 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; } } } }
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
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
171
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
172
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
173