Download as pdf or txt
Download as pdf or txt
You are on page 1of 173

P TRNH H

NG

IT

NG

PGS.TS. Tr n

nh Qu

KS. Nguy n M nh Hng

Cc khi ni m c

b n c a L p trnh h

L p trnh h

ng

i t

ng

i t

ng

ng v i Java

GI I THI U
Trong nh ng n m g n y, l p trnh h ng i t ng tr nn g n g i nh s ra i lin ti p
c a cc ngn ng l p trnh h ng i t ng. S c m nh c a ph ng php l p trnh h ng i
t ng th hi n ch kh n ng m hnh ho h th ng d a trn cc i t ng th c t , kh n ng
ng gi v b o v an ton d li u, kh n ng s d ng l i m ngu n
ti t ki m chi ph v ti
nguyn; c bi t l kh n ng chia s m ngu n trong c ng ng l p trnh vin chuyn nghi p.
Nh ng i m m nh ny h a h n s thc y pht tri n m t mi tr ng l p trnh tin ti n cng v i
n n cng nghi p l p rp ph n m m v i cc th vi n thnh ph n c s n.
Ti li u ny nh m gi i thi u cho cc sinh vin m t ci nhn t ng quan v ph ng php l p trnh
h ng i t ng cng cung c p nh ng ki n th c, cc k thu t c b n cho pht tri n cc ng d ng
c a mnh d a trn ngn ng l p trnh Java - m t trong nh ng ngn ng l p trnh h ng i t ng
thng d ng nh t hi n nay.
N i dung c a ti li u ny bao g m hai ph n chnh:
Ph n th nh t trnh by nh ng khi ni m v cc v n
c b n c a l p trnh h ng i
t ng bao g m t ng quan v cch ti p c n h ng i t ng v cc khi ni m i t ng,
l p, k th a, ng gi, a hnh
Ph n th hai trnh by chi ti t ph
trnh Java.
N i dung c a ti li u bao g m 6 ch

ng php l p trnh h

ng

it

ng v i ngn ng l p

ng:

Ch

ng 1: T ng quan v cch ti p c n h ng i t ng. Trnh by s ti n ho c a cch ti p


c n t l p trnh truy n th ng n cch ti p c n c a l p trnh h ng i t ng v xu
h ng pht tri n c a l p trnh h ng i t ng hi n nay.

Ch

ng 2: Nh ng khi ni m c b n c a l p trnh h ng i t ng. Trnh by cc khi ni m


c b n nh : i t ng, l p i t ng v i cc thu c tnh v ph ng th c, tnh k th a
v a hnh, tnh ng gi c a l p trnh h ng i t ng. Ch ng ny c ng gi i thi u
t ng quan m t s ngn ng l p trnh h ng i t ng thng d ng hi n nay.

Ch

ng 3: Ngn ng Java. Gi i thi u nh ng khi ni m v nh ng quy


l p trnh Java: C u trc ch ng trnh, cch bin d ch, cch
cc ton t v c u trc l nh c a ngn ng Java.

Ch

ng 4: K th a v a hnh trn Java. Trnh by cc k thu t l p trnh h ng i t ng d a


trn ngn ng Java: Khai bo l p, cc thu c tnh v ph ng th c c a l p; k thu t
th a k , cc l p tr u t ng, ci t n p ch ng v a hnh trn Java.

Ch

ng 5: Bi u di n v ci t cc c u trc d li u tr u t ng trn Java. Trnh by k thu t


ci t v s d ng m t s c u trc d li u quen thu c trong Java: ng n x p, hng i,
danh sch lin k t, cy nh phn v th .

Ch

ng 6: L p trnh giao di n trn Java. Trnh by cc k thu t l p trnh giao di n trn Java:
L p trnh v i cc giao di n c b n trong th vi n AWT, l p trnh giao di n v i Applet
v HTML, l p trnh giao di n nng cao v i th vi n SWING.

c ban u c a ngn ng
t tn bi n, ki u d li u,

Ti li u ny
c vi t nh m ph c v mn h c L p trnh h ng i t ng gi ng d y ti p theo
sau mn h c Ngn ng l p trnh C++ v nh v y khi h c mn h c ny sinh vin s d n m b t
c nh ng c tr ng khc bi t c a ngn ng Java so v i C++.
2

Cu n sch ny cn c km theo m t
v bi t p trong cu n sch.

a CD ch a ton b m cc ch

ng trnh ci

t lm v d

M c d cc tc gi c nhi u c g ng trong qu trnh bin so n ti li u ny, song khng th


trnh kh i nh ng thi u st. R t mong nh n
c s ng gp ki n c a sinh vin v cc b n
ng nghi p.

PH N 1
NH NG KHI NI M C
C A L P TRNH H

NG

B N
IT

NG

CH

NG 1

T NG QUAN V CCH TI P C N
H

NG

IT

NG

N i dung ch ng ny nh m gi i thi u m t cch t ng quan v cch ti p c n h


dung trnh by bao g m:

ng

it

ng. N i

Gi i thi u v cch ti p c n c a l p trnh truy n th ng.


Gi i thi u cch ti p c n c a l p trnh h

ng

it

ng.

So snh s khc bi t gi a hai cch ti p c n ny.


Xu h

1.1 PH

ng hi n nay c a l p trnh h

ng

it

ng

NG PHP TI P C N C A L P TRNH TRUY N TH NG

L p trnh truy n th ng tr i qua hai giai o n:


Giai o n s khai, khi khi ni m l p trnh m i ra
Giai o n ti p theo, l l p trnh h

i, l l p trnh tuy n tnh.

ng c u trc.

1.1.1 L p trnh tuy n tnh


c tr ng c b n c a l p trnh tuy n tnh l t duy theo l i tu n t . Ch ng trnh s
hi n tu n t t
u n cu i, l nh ny k ti p l nh kia cho n khi k t thc ch ng trnh.

c th c

c tr ng
L p trnh tuy n tnh c hai
n gi n: ch

c tr ng:

ng trnh

c ti n hnh

n gi n theo l i tu n t , khng ph c t p.

n lu ng: ch c m t lu ng cng vi c duy nh t, v cc cng vi c


trong lu ng .

c th c hi n tu n t

Tnh ch t
u i m: Do tnh n gi n, l p trnh tuy n tnh c u i m l ch ng trnh
hi u. L p trnh tuy n tnh
c ng d ng cho cc ch ng trnh n gi n.
Nh c i m: V i cc ng d ng ph c t p, ng
gi i quy t.

n gi n, d

i ta khng th dng l p trnh tuy n tnh

Ngy nay, l p trnh tuy n tnh ch t n t i trong ph m vi cc modul nh nh t c a cc ph


l p trnh khc. V d trong m t ch ng trnh con c a l p trnh c u trc, cc l nh c ng
hi n theo tu n t t
u n cu i ch ng trnh con.

ng php
c th c

1.1.2 L p trnh c u trc


Trong l p trnh h ng c u trc, ch ng trnh chnh
c chia nh thnh cc ch ng trnh con v
m i ch ng trnh con th c hi n m t cng vi c xc nh. Ch ng trnh chnh s g i n ch ng
trnh con theo m t gi i thu t, ho c m t c u trc
c xc nh trong ch ng trnh chnh.
5

Cc ngn ng l p trnh c u trc ph bi n l Pascal, C v C++. Ring C++ ngoi vi c c c tr ng


c a l p trnh c u trc do k th a t C, cn c c tr ng c a l p trnh h ng i t ng. Cho nn
C++ cn
c g i l ngn ng l p trnh n a c u trc, n a h ng i t ng.

c tr ng
c tr ng c b n nh t c a l p trnh c u trc th hi n
Ch

m i quan h :

ng trnh = C u trc d li u + Gi i thu t

Trong :
C u trc d li u l cch t ch c d li u, cch m t bi ton d
trnh
Gi i thu t l m t quy trnh
Trong ch

th c hi n m t cng vi c xc

i d ng ngn ng l p

nh

ng trnh, gi i thu t c quan h ph thu c vo c u trc d li u:

M t c u trc d li u ch ph h p v i m t s h n ch cc gi i thu t.
N u thay

i c u trc d li u th ph i thay

M t gi i thu t th

i gi i thu t cho ph h p.

ng ph i i km v i m t c u trc d li u nh t

nh.

Tnh ch t
M i ch

ng trnh con c th

c g i th c hi n nhi u l n trong m t ch

ng trnh chnh.

Cc ch ng trnh con c th
cg i n
th c hi n theo m t th t b t k, tu thu c
vo gi i thu t trong ch ng trnh chnh m khng ph thu c vo th t khai bo c a cc
ch ng trnh con.
Cc ngn ng l p trnh c u trc cung c p m t s c u trc l nh i u khi n ch

ng trnh.

u i m
Ch

ng trnh sng s a, d hi u, d theo di.

T duy gi i thu t r rng.

Nh

c i m
L p trnh c u trc khng h tr vi c s d ng l i m ngu n: Gi i thu t lun ph thu c ch t
ch vo c u trc d li u, do , khi thay i c u trc d li u, ph i thay i gi i thu t,
ngh a l ph i vi t l i ch ng trnh.
Khng ph h p v i cc ph n m m l n: t duy c u trc v i cc gi i thu t ch ph h p v i
cc bi ton nh , n m trong ph m vi m t modul c a ch ng trnh. V i d n ph n m m
l n, l p trnh c u trc t ra khng hi u qu trong vi c gi i quy t m i quan h v m gi a
cc modul c a ph n m m.

V n
V n
c b n c a l p trnh c u trc l b ng cch no
phn chia ch ng trnh chnh thnh cc
ch ng trnh con cho ph h p v i yu c u, ch c n ng v m c ch c a m i bi ton.
Thng th ng, phn r bi ton trong l p trnh c u trc, ng
trn xu ng (top-down).

i ta s d ng ph

ng php thi t k
6

Ph

ng php thi t k trn xu ng (top-down)

Ph ng php thi t k top-down ti p c n bi ton theo h ng t trn xu ng d i, t t ng quan n


chi ti t. Theo , m t bi ton
c chia thnh cc bi ton con nh h n. M i bi ton con l i
c chia nh ti p, n u c th , thnh cc bi ton con nh h n n a.
Qu trnh ny cn
c g i l qu trnh lm m n d n. Qu trnh lm m n d n s d ng l i khi cc
bi ton con khng c n chia nh thm n a. Ngh a l khi m i bi ton con u c th gi i quy t
b ng m t ch ng trnh con v i m t gi i thu t n gi n.
V d , s d ng ph ng php top-down
gi i quy t bi ton l xy m t c n nh m i. Khi , ta
c th phn r bi ton theo cc b c nh sau:
m c th nh t, chia bi ton xy nh thnh cc bi ton nh h n nh : lm mng,
tr n, xy t ng, l p mi.

c t,

m c th hai, phn r cc cng vi c m c th nh t: vi c lm mng nh c th phn r


ti p thnh cc cng vi c: o mng, gia c n n, lm khung s t,
b tng. Cng vi c
c t
c ph n r thnh
m c th ba, phn r cc cng vi c c a m c th hai: vi c o mng c th phn chia ti p
thnh cc cng vi c: o c, c m m c, ch ng dy, o v ki m tra mng. Vi c gia c n n
c phn r thnh
Qu trnh phn r c th d ng m c ny, b i v cc cng vi c con thu
c l: o
ch ng dy, o c th th c hi n
c ngay, khng c n chia nh thm n a.

c, c m m c,

L u :
Cng s d ng ph ng php top-down v i cng m t bi ton, nh ng c th cho ra nhi u
k t qu khc nhau. Nguyn nhn l do s khc nhau trong tiu ch phn r m t bi ton
thnh cc bi ton con.
V d , v n p d ng ph ng php top-down
gi i quy t bi ton xy nh, nh ng n u s d ng
m t cch khc phn chia bi ton, ta c th thu
c k t qu khc bi t so v i ph ng php ban
u:
m c th nh t, chia bi ton xy nh thnh cc bi ton nh h n nh : lm ph n g , lm
ph n s t, lm ph n b tng v lm ph n g ch.
m c th hai, phn r cc cng vi c m c th nh t: vi c lm g c th chia thnh cc
cng vi c nh : x g , gia cng g , t o khung, l p vo nh. Vi c lm s t c th chia nh
thnh
R rng, v i cch lm m n th ny, ta s thu
hi n ph n trn.

1.2 PH
1.2.1 Ph

NG PHP TI P C N H
ng php l p trnh h

ng

Xu t pht t hai h n ch chnh c a ph

it

c m t k t qu khc h n v i cch th c th c

NG

IT

NG

ng

ng php l p trnh c u trc:

Khng qu n l
c s thay i d li u khi c nhi u ch ng trnh cng thay i m t bi n
chung. V n ny c bi t nghim tr ng khi cc ng d ng ngy cng l n, ng i ta khng
th ki m sot
c s truy nh p n cc bi n d li u chung.

Khng ti t ki m
c ti nguyn con ng i: Gi i thu t g n li n v i c u trc d li u, n u
thay i c u trc d li u, s ph i thay i gi i thu t, v do , ph i vi t l i m ch ng
trnh t
u.
kh c ph c
c hai h n ch ny khi gi i quy t cc bi ton l n, ng i ta xy d ng m t
ph ng php ti p c n m i, l ph ng php l p trnh h ng i t ng, v i hai m c ch chnh:
ng gi d li u

h n ch s truy nh p t do vo d li u, khng qu n l

Cho php s d ng l i m ngu n, h n ch vi c ph i vi t l i m t


Vi c ng gi d li u
th p ln cao nh sau:

c th c hi n theo ph

Thu th p cc thu c tnh c a m i

it

ng php tr u t

c.

u cho cc ch

ng ho

ng, g n cc thu c tnh vo

it
it

ng trnh.

ng thnh l p t
ng t

ng ng.

Nhm cc i t ng c cc thu c tnh t ng t nhau thnh nhm, lo i b b t cc thu c


tnh c bi t, ch gi l i cc thu c tnh chung nh t. y
c g i l qu trnh tr u t ng ho
i t ng thnh l p.
ng gi d li u c a cc i t ng vo l p t
thnh m t thu c tnh c a l p t ng ng.

ng ng. M i thu c tnh c a

Vi c truy nh p d li u
c th c hi n thng qua cc ph
Khng
c truy nh p t do tr c ti p n d li u.

ng th c

it

ng tr

c trang b cho l p.

Khi c thay i trong d li u c a i t ng, ta ch c n thay i cc ph ng th c truy nh p


thu c tnh c a l p, m khng c n ph i thay i m ngu n c a cc ch ng trnh s d ng
l p t ng ng.
Vi c cho php s d ng l i m ngu n
h ng i t ng. Theo :
Cc l p c th

c k th a nhau

c th c hi n thng qua c ch k th a trong l p trnh


t n d ng cc thu c tnh, cc ph

ng th c c a nhau.

Trong l p d n xu t (l p
c k th a) c th s d ng l i cc ph ng th c c a l p c s
(l p b l p khc k th a) m khng c n thi t ph i ci t l i m ngu n.
Ngay c khi l p d n xu t nh ngh a l i cc ph ng th c cho mnh, l p c s c ng khng
b nh h ng v khng ph i s a l i b t k m t o n m ngu n no.
Ngn ng l p trnh h ng i t ng ph bi n hi n nay l Java v C++. Tuy nhin, C++ m c d
c ng c nh ng c tr ng c b n c a l p trnh h ng i t ng nh ng v n khng ph i l ngn ng
l p trnh thu n h ng i t ng. Java th t s l m t ngn ng l p trnh thu n h ng i t ng.

c tr ng
L p trnh h

ng

it

ng c hai

c tr ng c b n:

ng gi d li u: d li u lun
c t ch c thnh cc thu c tnh c a l p
truy nh p n d li u ph i thng qua cc ph ng th c c a i t ng l p.

it

ng. Vi c

S d ng l i m ngu n: vi c s d ng l i m ngu n
c th hi n thng qua c ch k
th a. C ch ny cho php cc l p i t ng c th k th a t cc l p i t ng khc. Khi
, trong cc l p k th a, c th s d ng cc ph ng th c (m ngu n) c a cc l p b k
th a, m khng c n ph i nh ngh a l i.

u i m
L p trnh h

ng

it

ng c m t s

u i m n i b t:

Khng cn nguy c d li u b thay i t do trong ch ng trnh. V d li u


gi vo cc i t ng. N u mu n truy nh p vo d li u ph i thng qua cc ph
cho php c a i t ng.
Khi thay
cc i t
i u ny
trong ch

c ng
ng th c

i c u trc d li u c a m t i t ng, khng c n thay i cc i m ngu n c a


ng khc, m ch c n thay i m t s hm thnh ph n c a i t ng b thay i.
h n ch s nh h ng x u c a vi c thay i d li u n cc i t ng khc
ng trnh.

C th s d ng l i m ngu n, ti t ki m ti nguyn. V nguyn t c k th a cho php cc


l p k th a s d ng cc ph ng th c
c k th a t l p khc nh nh ng ph ng th c
c a chnh n, m khng c n thi t ph i nh ngh a l i.
Ph h p v i cc d n ph n m m l n, ph c t p.

1.2.2 Ph

ng php phn tch v thi t k h

ng

it

ng

M tv n
c b n t ra cho ph ng php h ng i t ng l t m t bi ton ban u, lm sao
thu
c m t t p cc i t ng, v i cc ch c n ng
c ph i h p v i nhau, p ng
c yu
c u c a bi ton t ra?
Ph ng php phn tch thi t k h ng i t ng ra i nh m tr l i cho cu h i ny. M c ch l
xy d ng m t t p cc l p i t ng t ng ng v i m i bi ton, ph ng php ny ti n hnh theo
hai pha chnh:
Pha phn tch: Chuy n
Pha thi t k : Chuy n i
th c th ci t
c.

i yu c u bi ton t ngn ng t nhin sang ngn ng m hnh.


c t bi ton d

Hai pha phn tch v thi t k ny bao g m nhi u b

i d ng ngn ng m hnh sang m t m hnh c


c khc nhau:

M t bi ton
c t yu c u
Trch ch n

it

ng

M hnh ho l p

it

ng

Thi t k t ng quan
Thi t k chi ti t.

c 1: M t bi ton

Bi ton ban

c pht bi u d

i d ng ngn ng t nhin, bao g m:

M c ch, ch c n ng chung
Cc yu c u v thng tin d li u
Cc yu c u v ch c n ng th c hi n

c 2:

c t yu c u

Cc yu c u
c hnh th c ho ln m t m c cao h n b ng cch s d ng ngn ng ki u k ch b n
(scenario)
m t . Trong m t k ch b n, m i ch c n ng, m i ho t ng
c m t b ng m t
k ch b n, bao g m:
Cc tc nhn tham gia vo k ch b n.
Vai tr c a m i tc nhn trong k ch b n.
Th t cc hnh ng m m i tc nhn th c hi n: khi no th c hi n, tc
no, thng tin no
c trao i.
Qu trnh trn

ng vo tc nhn

c ti n hnh v i t t c cc ch c n ng yu c u c a h th ng.

c 3: Trch ch n

c ny s ti n hnh

it

ng

xu t cc

it

ng c th c m t trong h th ng:

D a vo cc k ch b n
c m t trong b
xu t thnh cc i t ng.
L a ch n cc
trng l p.

it

ng b ng cch lo i b cc tc nhn bn ngoi h th ng, cc tc nhn

Cu i cng, ta thu

c t p cc

c 4: M hnh ho l p

c ny ti n hnh tr u t

c hai, ch n ra cc tc nhn c xu t hi n

it
ng ho

it

ng c a h th ng.

ng
it

ng thnh cc l p:

Thu th p t t c cc thu c tnh c a m i i t


thng tin trong yu c u h th ng (t b c 1).

ng v a thu th p

c, d a vo yu c u v

Thu th p cc hnh ng m m i i t ng c n th c hi n, d a vo cc k ch b n m
t ng t ng ng c tham gia (trong b c 2).
Nhm cc

it

ng t

ng t nhau, ho c c nhi u thu c tnh g n gi ng nhau.

Lo i b m t s thu c tnh c bi t, ring t c a m t s

it

ng trong nhm.

M hnh m i nhm i t ng cn l i thnh l p: Cc thu c tnh chung c a cc i t ng


thnh thu c tnh c a l p, cc hnh ng c a cc i t ng thnh ph ng th c c a l p.
K t qu thu

c m t t p cc l p

it

ng ban

u c a h th ng.

c 5: Thi t k t ng qut

c ny s ti n hnh thi t k v m, ngh a l thi t k m i quan h gi a cc l p trong h th ng:


Xc nh s
th a k , n u c, gi a cc l p: N u hai l p c m t s thu c tnh chung, th
tch cc thu c tnh chung lm thnh m t l p c s , v hai l p ban u u d n xu t t l p
c s . Thng th ng, l p cc tr u t ng (chung nh t) s lm l p c s , l p cng c th ,
cng chi ti t th lm l p d n xu t (l p con, chu).
Xc nh t ng tc, n u c, gi a cc l p: D a vo cc k ch b n
c m t trong b c 2,
hai tc nhn c t ng tc v i nhau th hai l p t ng ng b c ny c ng c t ng tc v i
nhau.

K t qu thu

cc ab

c ny l m t s

quan h bn ngoi gi a cc l p trong h th ng.


10

c 6: Thi t k chi ti t

B c ny s th c hi n thi t k
t ng:

m c vi m, ngh a l thi t k ki n trc bn trong c a m i l p

T ch c d li u c a l p theo cc thu c tnh. Qui


tnh.

nh ph m vi truy nh p cho t ng thu c

Thi t k chi ti t cch c x c a l p i t ng thng qua cc ph ng th c c a l p: Xc


nh ki u d li u tr v , ki u tham s c a ph ng th c, m t thu t ton chi ti t cho t ng
ph ng th c, n u c n.
K t qu thu

cc ab

c ny l m t t p cc l p v i thi t k chi ti t ki n trc bn trong.

Sau cc b c phn tch thi t k h ng i t ng t m t yu c u c a bi ton ban


m t m hnh h th ng h ng i t ng chi ti t:

u, ta thu

C ci nhn t ng quan, v m v h th ng b ng m hnh thi t k t ng quan, ch r s l ng


cc l p i t ng, m i quan h k th a v quan h t ng tc gi a cc l p i t ng trong
h th ng.
C ci nhn chi ti t, vi m v h th ng b ng m hnh thi t k chi ti t. M hnh ny ch r
bn trong m i l p i t ng: cc thu c tnh, cc ph ng th c v i ki u tr v v ki u tham
s , thu t ton chi ti t cho m i ph ng th c.
Sau pha phn tch v thi t k h ng i t ng, ta thu
c c t h th ng d i d ng m hnh cc
l p: quan h gi a cc l p v ki n trc bn trong c a m i l p. y s l u vo cho pha ti p theo,
pha l p trnh h ng i t ng, nh chng ta bi t.

1.3 SO SNH HAI CCH TI P C N


Ph ng php ti p c n h ng i t ng c b n ch t hon ton khc v i ph
truy n th ng (ph ng php ti p c n h ng c u trc) trn nhi u m t:
Ph

ng php ti p c n

ng php m hnh bi ton khc nhau.


c tr ng khc nhau v

u / nh

ng gi

c i m khc nhau.

L nh v c ng d ng khc nhau.

Khc nhau v ph

ng php m hnh

Hai ph ng php ny khc nhau hon ton cch ti p c n v m hnh bi ton, ph ng php
h ng i t ng ti n hnh theo ph ng php t d i ln trn, t th p ln cao, t c th
n tr u
t ng. Trong khi , ph ng php c u trc ti p c n theo ph ng php t trn xu ng d i, t t ng
quan n chi ti t:
Ph ng php h ng i t ng b t u b ng nh ng i t ng c th , t p h p cc thu c
tnh c a t ng i t ng. Sau , nhm cc i t ng t ng t nhau thnh nhm, lo i b
cc thu c tnh qu c bi t, ch gi l i cc thu c tnh chung nh t, nhm thnh l p. Cho nn,
qu trnh hnh thnh l p l qu trnh i t th p ln cao, t c th
m c th p n tr u
t ng ho m c cao.

11

Trong khi , ph ng php h ng c u trc l i i theo chi u ng c l i. Ph ng php ny


b t u t m t bi ton t ng quan, m c khi qut cao, chia nh d n v lm m n d n cho
n khi thu
c m t t p cc bi ton con, nh h n, c th h n, chi ti t h n.

Khc nhau v
Hai ph

c tr ng ng gi

ng php ti p c n ny c ng c nh ng

c tr ng hon ton khc nhau:

Ph ng php h ng i t ng c c tr ng l d li u
c ng gi h n ch truy nh p
t do tr c ti p vo d li u. Th hai l cho php s d ng l i m ngu n
ti t ki m ti
nguyn v cng s c l p trnh.
Trong khi , c tr ng c a ph ng php c u trc l c u trc d li u v gi i thu t v m i
quan h ph thu c ch t nh c a gi i thu t vo c u tr c d li u.

Khc nhau v
Hai ph

u nh

c i m

ng php ny c ng c nh ng u nh

c i m tri ng

c nhau:

Ph ng php h ng i t ng c u i m l b o v
c d li u trnh b truy nh p tr c
ti p t do t bn ngoi, ti t ki m
c ti nguyn v cng s c l p trnh do c th dng l i
m ngu n. Tuy nhin, ph ng php ny l i kh ph c t p, kh theo di
c lu ng d li u
v h n n a, gi i thu t khng ph i l v n tr ng tm c a ph ng php ny.
Tri l i, ph ng php h ng c u trc l i c u i m l t duy gi i thu t r rng, d
di lu ng d li u, ch ng trnh n gi n v d hi u. Tuy nhin, khng b o v
ton d li u trong ch ng trnh. H n n a, h n ch l n nh t l s ph thu c ch t ch
gi i thu t vo c u trc d li u, khi n cho khi thay i c u trc d li u, th ng ph i
i gi i thu t, v do , ph i vi t l i m cho ch ng trnh.

theo
c an
c a
thay

Khc nhau v l nh v c p d ng
Do s khc nhau v cc c tr ng v s khc nhau v u nh
ny c ng c s khc nhau ng k trong l nh v c p d ng:

c i m, cho nn hai ph

ng php

Ph ng php h ng i t ng th ng
c p d ng cho cc bi ton l n, ph c t p, c
nhi u lu ng d li u khc nhau, khng th qu n l
c b ng ph ng php c u trc. Khi
, ng i ta dng ph ng php h ng i t ng
t n d ng kh n ng b o v d li u
trnh b truy nh p t do. H n n a, t n d ng kh n ng dng l i m ngu n c a ph ng php
ny ti t ki m ti nguyn v cng s c.
Trong khi , ph ng php c u trc th ng ph h p v i cc bi ton nh , c lu ng d li u
r rng, c n ph i t duy gi i thu t r rng v ng i l p trnh v n c kh n ng t qu n l
c m i truy nh p n cc d li u c a ch ng trnh.

1.4 XU H
L p trnh h

NG PHT TRI N C A L P TRNH H

NG

IT

NG

ng thnh ph n

Xu t pht t l p trnh h ng
programming) theo t ng:

it

ng, t duy l p trnh h

ng thnh ph n (component-oriented

Gi i quy t bi ton b ng cch xy d ng m t t p cc thnh ph n (component) c tnh


l p t ng i v i nhau. M i thnh ph n m nhi m m t ph n cng vi c nh t nh.

c
12

Sau , ng i ta ghp cc thnh ph n v i nhau


t p cc yu c u xc nh.
V i l p trnh h

ng thnh ph n, ng

thu

c m t ph n m m tho mn m t

i ta c th ti n hnh l p trnh theo ph

ng php sau:

Xy d ng m t th vi n cc thnh ph n, m i thnh ph n th c hi n m t cng vi c xc

nh.

Khi c n pht tri n m t ph n m m c th , ng i ta ch c n ch n nh ng thnh ph n c s n


trong th vi n
ghp l i v i nhau. Ng i l p trnh ch ph i pht tri n thm cc thnh
ph n mnh c n m ch a c trong th vi n.
Ph

ng php ny c nh ng u i m r t l n:
L p trnh vin c th chia s v i nhau nh ng thnh ph n mnh xy d ng cho nhi u
ng i khc dng chung.
Khi c n, l p trnh vin c th l p ghp cc thnh ph n c s n khc nhau
t o thnh cc
ch ng trnh c ch c n ng khc nhau. T t c ch c n d a trn cng ngh l p ghp thnh
ph n, ti t ki m
c r t nhi u cng s c l p trnh.

Trong xu h ng l p trnh h
ang pht tri n m nh m :

ng thnh ph n, m t s ph

ng php l p trnh khc n y sinh v

L p trnh h

ng agent (agent-oriented programming)

L p trnh h

ng aspect (aspect-oriented programming)

L p trnh h

ng agent

L p trnh h ng agent c th xem l m t m c tr u t ng cao h n c a l p trnh h ng thnh ph n.


Trong , cc agent l cc thnh ph n c kh n ng ho t ng c l p, t ch
hon thnh cng
vi c c a mnh. H n n a, cc agent c kh n ng ch
ng lin l c v i cc agent khc
c th
ph i h p, c ng tc hay c nh tranh nhau hon thnh nhi m v .
L p trnh h

ng agent c hai

c tr ng c b n:

Th nh t l kh n ng t ch c a m i agent

hon thnh nhi m v ring c a n.

Th hai l tnh t ch c x h i gi a cc agent, cho php cc agent ph i h p, c ng tc, c nh


tranh nhau hon thnh nhi m v chung c a ton h th ng.

L p trnh h

ng aspect

L p trnh h ng aspect c ng l m t xu h ng c a l p trnh h ng thnh ph n. Theo , m i thnh


ph n c nhi m v hon thnh theo m t lu ng cng vi c ho c m t kha c nh c a v n . Sau ,
t ng h p cc thnh ph n c a cc lu ng khc nhau, ta thu
c gi i php cho bi ton c a mnh.
L p trnh h

ng aspect c

c tr ng c b n:

Tnh ng gi theo lu ng cng vi c, ho c ng gi theo kha c nh c a v n


Tnh n i u theo lu ng, trong m t lu ng cng vi c, cc nhi m v
ti p nhau, tu n t nh trong l p trnh tuy n tnh.

T NG K T CH

c th c hi n lin

NG 1

N i dung ch ng 1 trnh by cc v n
i t ng trong l p trnh:
Cc ph

t ng quan lin quan

n ph

ng php ti p c n h

ng

ng php ti p c n truy n th ng: l p trnh tuy n tnh v l p trnh c u trc.


13

Ph ng php ti p c n h
d ng l i m ngu n.
L p trnh h

ng

it

ng

ng, ph

it

ng v i hai

c tr ng c b n:

ng gi d li u v s

ng php phn tch v thi t k h th ng h

ng

it

ng.

So snh s khc bi t c a ph ng php h ng i t ng v i cc ph ng php truy n th ng


trn cc kha c nh: Cch ti p c n bi ton, c tr ng, u nh c i m v l nh v c p d ng
c a m i ph ng php.
Hi n nay, l p trnh h ng thnh ph n, l p trnh h ng agent v l p trnh h
ho t l p trnh h ng i t ng ang l xu h ng pht tri n m nh m .

ng aspect ti n

14

CH

N i dung ch

NG 2

NH NG KHI NI M C

B NC A

L P TRNH H

IT

NG

NG

ng ny t p trung trnh by cc khi ni m c b n c a l p trnh h

it

ng

it

ng:

c coi l cc

it

ng

L p

it

ng

Vi c tr u t
Tr u t

ng ho

ng ho

it

it

ng theo ch c n ng

ng theo d li u

K th a
ng gi
a hnh
Ph

ng php ci

tl p

it

ng

Gi i thi u m t s ngn ng l p trnh h

2.1 CC KHI NI M C
2.1.1

it

ng

it

ng thng d ng hi n nay.

B N

ng

Trong l p trnh h ng i t ng, t t c cc th c th trong h th ng u


c th . i t ng l m t th c th ho t ng khi ch ng trnh ang ch y.

ng

V d :
1. Trong bi ton qu n l bun bn xe h i c a m t c a hng kinh doanh, m i chi c xe ang
c m t trong c a hng
c coi l m t i t ng. Ch ng h n, m t chi c xe nhn hi u
Ford, mu tr ng, gi 5000$ l m t i t ng.
2. Trong bi ton qu n l nhn vin c a m t v n phng, m i nhn vin trong v n phng
c
coi l m t i t ng. Ch ng h n, nhn vin tn l Vinh, 25 tu i lm phng hnh chnh
l m t i t ng.
M t

it

ng l m t th c th

ang t n t i trong h th ng v

nh danh i t ng: xc
cc i t ng v i nhau.

nh duy nh t cho m i

it

c xc

nh b ng ba y u t :

ng trong h th ng, nh m phn bi t

Tr ng thi c a
c.

it

ng: l s t h p c a cc gi tr c a cc thu c tnh m

Ho t

it

ng: l cc hnh

ng c a

Tr ng thi hi n t i c a i t ng qui
trong v d trn c tr ng thi l:

ng m

nh tnh ch t

it

it

ng c kh n ng th c hi n

c tr ng c a

it

ng ang
c.

ng. V d , nhn vin

Tn l Vinh
Tu i l 25
V tr lm vi c l phng hnh chnh.
15

Trong khi , tr ng thi c a chi c xe trong c a hng l:


Nhn hi u xe l Ford
Mu s n xe l tr ng
Gi bn xe l 5000$
M i i t ng s th c hi n m t s hnh
nh ng hnh ng sau:
Kh i

ng. V d ,

it

ng xe h i c kh n ng th c hi n

ng.

D ng l i.
Ch y.
bi u di n i t
nn khi ni m l p

2.1.2 L p

it

ng trong l p trnh h
i t ng.

ng

it

ng, ng

i ta tr u t

ng ho

it

ng

t o

ng

Trong l p trnh h ng i t ng, i t ng l m t th c th c th , t n t i trong h th ng. Trong


khi , l p l m t khi ni m tr u t ng, dng
ch m t t p h p cc i t ng c m t trong h
th ng.
V d :
1. Trong bi ton qu n l bun bn xe h i c a m t c a hng kinh doanh, m i chi c xe ang
c m t trong c a hng
c coi l m t i t ng. Nh ng khi ni m Xe h i l m t l p
i t ng dng ch t t c cc lo i xe h i c a c a hng.
2. Trong bi ton qu n l nhn vin c a m t v n phng, m i nhn vin trong v n phng
coi l m t i t ng. Nh ng khi ni m Nhn vin l m t l p i t ng dng
chung chung cc nhn vin c a v n phng.

c
ch

L u :
L p l m t khi ni m, mang tnh tr u t
it
L p

bi u di n m t t p cc

it

ng.

ng l m t th hi n c th c a l p, l m t th c th t n t i trong h th ng.

c dng

bi u di n

Thu c tnh c a l p t
Ph

ng, dng

ng th c c a l p t

V d , l p xe t

it

ng, cho nn l p c ng c thu c tnh v ph

ng ng v i thu c tnh c a cc
ng ng v i cc hnh

ng c a

c m t b ng cc thu c tnh v ph

it

ng th c:

ng.
it

ng.

ng th c:

L p Xe t
Thu c tnh:
Nhn hi u xe
Mu xe
Gi xe
Cng su t xe (m l c)
Ph

ng th c:
Kh i

ng xe

Ch y xe

16

D ng xe
T t my

L u :
M t l p c th c m t trong cc kh n ng sau:
Ho c ch c thu c tnh, khng c ph
Ho c ch c ph

ng th c, khng c thu c tnh.

Ho c c c thu c tnh v ph

ng th c, tr

ng h p ny l ph bi n nh t.

c bi t, l p khng c thu c tnh v ph


khng c i t ng t ng ng.

ng th c no l cc l p tr u t

L p v
L p v

ng th c.

it
it

ng. Cc l p ny

ng
ng, m c d c m i lin h t

L p l s tr u t
l p.

ng ho c a cc

ng ng l n nhau, nh ng b n ch t l i khc nhau:


it

ng. Trong khi ,

it

ng l m t th hi n c a

i t ng l m t th c th c th , c th c, t n t i trong h th ng. Trong khi , l p l m t


khi ni m tr u t ng, ch t n t i d ng khi ni m m t cc c tnh chung c a m t s
i t ng.
T t c cc

it

ng thu c v cng m t l p c cng cc thu c tnh v cc ph

M t l p l m t nguyn m u c a m t i t ng. N xc
thu c tnh c n thi t cho m t nhm cc i t ng c th .

nh cc hnh

ng th c.

ng kh thi v cc

Ni chung, l p l khi ni m t n t i khi pht tri n h th ng, mang tnh khi ni m, tr u t


Trong khi , i t ng l m t th c th c th t n t i khi h th ng ang ho t ng.

2.1.3 Tr u t

ng ho

it

ng.

ng theo ch c n ng

Tr u t ng ho i t ng theo ch c n ng chnh l qu trnh m hnh ho ph ng th c c a l p


d a trn cc hnh ng c a cc i t ng. Qu trnh ny
c ti n hnh nh sau:
T p h p t t c cc hnh

ng c th c c a cc

Nhm cc i t ng c cc ho t
thnh m t nhm chung.
M i nhm

it

ng

Cc hnh
ng.

ng chung c a nhm

ng t

xu t m t l p t
it

it

ng.

ng t nhau, lo i b b t cc ho t

ng c bi t, t o

ng ng.
ng s c u thnh cc ph

ng th c c a l p t

ng

V d , trong bi ton qu n l c a hng bn t. M i t c m t trong c a hng l m t i t ng.


M c d m i chi c xe c m t s
c i m khc nhau v nhn hi u, gi xe, mu s c nh ng c
chung cc hnh ng c a m t chi c xe t l:
C th kh i

ng my.

C th ch y.
C th d ng l i.
C th t t my.
17

Ngoi ra, m t s t xe c th th c hi n m t s hnh

ng c bi t nh :

C th gi u n pha
C th t b t n pha
C th t

ng pht tn hi u bo

ng.

Tuy nhin, khng ph i xe no c ng th c hi n


c cc hnh ng ny. Cho nn ta lo i b cc
hnh ng c bi t c a m t s xe, ch gi l i cc hnh ng chung nh t,
m hnh thnh cc
ph ng th c c a i t ng xe t t ng ng v i cc hnh ng chung nh t c a cc xe t.
L p Xe t
Ph

ng th c:
Kh i

ng xe

Ch y xe
D ng xe
T t my

2.1.4 Tr u t

ng ho

it

ng theo d li u

Tr u t ng ho i t ng theo d li u chnh l qu trnh m hnh ho cc thu c tnh c a l p d a


trn cc thu c tnh c a cc i t ng t ng ng. Qu trnh ny
c ti n hnh nh sau:
T p h p t t c cc thu c tnh c th c c a cc
Nhm cc i t ng c cc thu c tnh t
thnh m t nhm chung.
M i nhm

it

ng

xu t m t l p t

Cc thu c tnh chung c a nhm


c xu t.

it

it

ng.

ng t nhau, lo i b b t cc thu c tnh c bi t, t o


ng ng.
ng s c u thnh cc thu c tnh t

ng ng c a l p

V d , trong bi ton qu n l c a hng bn t. M i t c m t trong c a hng l m t i t ng.


M c d m i chi c xe c m t s
c i m khc nhau v nhn hi u, gi xe, mu s c nh ng c
chung cc thu c tnh c a m t chi c xe t l:
Cc xe

u c nhn hi u.

Cc xe

u c mu s c

Cc xe

u c gi bn

Cc xe

u c cng su t

ng c

Ngoi ra, m t s t xe c th c thm cc thu c tnh:


C xe c th c dn nghe nh c
C xe c th c mn hnh xem ti vi
C xe c l p knh ch ng n ng, ch ng

Tuy nhin, y l cc thu c tnh c bi t c a m t s


i t ng xe, nn khng
c
xu t thnh
thu c tnh c a l p t. Do , ta m hnh l p t v i cc thu c tnh chung nh t c a cc t.

18

L p Xe t
Thu c tnh:
Nhn hi u xe
Mu xe
Gi xe
Cng su t xe (m l c)

u i m c a vi c tr u t

ng ha

Nh ng u i m c a vi c tr u t
T p trung vo v n
Xc

nh nh ng

ng ha l:

c n quan tm
c tnh thi t y u v nh ng hnh

ng c n thi t

Gi m thi u nh ng chi ti t khng c n thi t


Vi c tr u t ng ha d li u l c n thi t, b i v khng th m t t t c cc hnh ng v cc thu c
tnh c a m t th c th . V n
m u ch t l t p trung n nh ng hnh vi c t y u v p d ng chng
trong ng d ng.

2.1.5 Khi ni m k th a
Xt tr ng h p bi ton qu n l nhn s v sinh vin c a m t tr
i t ng chnh l l p Nhn vin v l p Sinh vin:
L p Nhn vin

i h c. Khi , ta c hai l p

L p Sinh vin

Thu c tnh:

Ph

ng

Thu c tnh:

Tn

Tn

Ngy sinh

Ngy sinh

Gi i tnh

Gi i tnh

L p

ng

ng th c:

Ph

ng th c:

Nh p/xem tn

Nh p/xem tn

Nh p/xem ngy sinh

Nh p/xem ngy sinh

Nh p/xem gi i tnh

Nh p/xem gi i tnh

Nh p/xem l

Nh p/xem l p

ng

Ta nh n th y r ng hai l p ny c m t s thu c tnh v ph ng th c chung: tn, ngy sinh, gi i


tnh. Tuy nhin, khng th lo i b cc thu c tnh c bi t
g p chng thnh m t l p duy nh t, v
cc thu c tnh l ng nhn vin v l p c a sinh vin l c n thi t cho vi c qu n l. V n n y sinh
nh sau:
Ta ph i vi t m trng nhau n hai l n cho cc ph ng th c: nh p/xem tn, nh p/xem
ngy sinh, nh p/xem gi i tnh. R rang i u ny r t t n cng s c.
N u khi c s thay i v ki u d li u, ch ng h n ki u ngy sinh
th ng, ta ph i s a l i ch ng trnh hai l n.

c qu n l trong h

19

trnh r c r i do cc v n
n y sinh nh v y, l p trnh h ng i t ng s d ng k thu t k
th a nh m nhm cc ph n gi ng nhau c a cc l p thnh m t l p m i, sau cho cc l p ban u
k th a l i l p
c t o ra. Nh v y, m i l p th a k (l p d n xu t, l p con) u c cc thu c tnh
v ph ng th c c a l p b th a k (l p c s , l p cha).
Quay l i v i bi ton qu n l tr
vin v l p Sinh vin l:

ng

i h c, cc thu c tnh v ph

ng th c chung gi a l p Nhn

Tn,
Ngy sinh,
Gi i tnh,
Nh p/xem tn,
Nh p/xem ngy sinh
Nh p/xem gi i tnh.
Ta tch ph n chung ny thnh m t l p m c tr u t ng cao h n, l p Ng
l p cha c a l p Nhn vin v l p Sinh vin. Khi , cc l p tr thnh:
L p Ng

i. L p Ng

i s lm

Thu c tnh:
Tn
Ngy sinh
Gi i tnh
Ph

ng th c:
Nh p/xem tn
Nh p/xem ngy sinh
Nh p/xem gi i tnh

L p Nhn vin k th a t l p Ng

L p Sinh vin k th a t l p Ng

Thu c tnh:
L
Ph

Thu c tnh:

ng

L p

ng th c:
Nh p/xem l

Ph
ng

ng th c:
Nh p/xem l p

Nh v y, s k th a trong l p trnh h ng i t ng:


Cho php l p d n xu t c th s d ng cc thu c tnh v ph
t nh s d ng cc thu c tnh v ph ng th c c a mnh.
Cho php vi c ch c n ci
c cc l p d n xu t.
Cho php trnh s ci
Cho php ch ph i thay

t ph

ng th c

ng th c c a l p c s t

m t l p c s , m c th s d ng

t trng l p m ngu n c a ch
i m t l n khi c n ph i thay

ng
t t

ng trnh.
i d li u c a cc l p.

2.1.6 Khi ni m ng gi
Xt v d bi ton qu n l nhn vin v n phng v i l p Nhn vin nh sau:

20

L p Nhn vin
Thu c tnh:
Tn
Ngy sinh
Gi i tnh
Phng ban
H
Ph

ng

ng th c:
Tnh l

Khi , cch tnh l


<Ti n l

ng nhn vin

ng cho nhn vin l khc nhau

ng> = <H

ng> * <L

i v i m i ng

ng c

b n> * <T

i:
l

ph n tr m>

Trong , t l ph n tr m l khc nhau cho m i phng ban, v d :


Phng k ho ch l 105%
Phng hnh chnh l 100%
Phng nhn s l 110%
Khi , tu vo thu c tnh phng ban khc nhau m ta ph i dng cng th c t l khc nhau
l ng cho m i nhn vin.

tnh

Tuy nhin, cch tnh c th ny l cng vi c bn trong c a ph ng th c tnh ti n l ng c a l p


Nhn vin. V i m i ng d ng, khi t o m t i t ng c th c a l p nhn vin, ta ch c n truy n
cc tham s thu c tnh cho i t ng, sau g i ph ng th c tnh ti n l ng cho i t ng nhn
vin , ta s bi t
c ti n l ng c a nhn vin. Cch g i ph ng th c tnh ti n l ng l hon
ton gi ng nhau cho t t c cc i t ng nhn vin c a v n phng.
S gi ng nhau v cch s d ng ph ng th c cho cc i t ng c a cng m t l p, m c d bn
c g i l tnh
trong ph ng th c c cc cch tnh ton khc nhau v i cc i t ng khc nhau,
ng gi d li u c a l p trnh h ng i t ng. Nh v y, tnh ng gi d li u c a l p trnh
h ng i t ng:
Cho php che d u s ci t chi ti t bn trong c a ph ng th c. Khi s d ng ch c n g i
cc ph ng th c theo m t cch th ng nh t, m c d cc ph ng th c c th
c ci t
khc nhau cho cc tr ng h p khc nhau.
Cho php che d u d li u bn trong c a i t ng. Khi s d ng, ta khng bi t
c th c
s bn trong i t ng c nh ng g, ta ch th y
c nh ng g i t ng cho php truy
nh p vo.
Cho php h n ch t i a vi c s a l i m ch ng trnh. Khi ph i thay i cng th c tnh
ton c a m t ph ng th c, ta ch c n thay i m bn trong c a ph ng th c, m khng
ph i thay i cc ch ng trnh g i n ph ng th c b thay i.

2.1.7 Khi ni m a hnh


Tr l i v i v d v qu n l tr ng i h c, v i hai l p Nhn vin v l p Sinh vin,
l p Ng i. Khi , ta thm vo m i l p m t ph ng th c show():
Ph

ng th c show c a l p Ng

i s gi i thi u tn v tu i c a ng

u k th a t

i .
21

Ph

ng th c show c a l p Nhn vin s gi i thi u nhn vin c ti n l

Ph

ng th c show c a l p Sinh vin s gi i thi u l sinh vin ang h c

L p Ng

ng l bao nhiu
l p no.

Thu c tnh:
Tn
Ngy sinh
Gi i tnh
Ph

ng th c:
Nh p/xem tn
Nh p/xem ngy sinh
Nh p/xem gi i tnh
show

L p Nhn vin k th a t l p Ng

L p Sinh vin k th a t l p Ng

Thu c tnh:
L
Ph

Thu c tnh:

ng

L p

ng th c:

Ph

Nh p/xem l

ng

ng th c:
Nh p/xem l p

show

show

Khi , n u trong h th ng c cc
Khi ta g i hm show t

it
it

ng c th t

ng c a l p Ng

ng ng v i ba l p, th:
i, s nh n

c tn v tu i c a ng

Khi ta g i ph ng th c show t
c a nhn vin .

it

ng c a l p Nhn vin, s nh n

Khi ta g i ph
sinh vin .

it

ng c a l p Sinh vin, ta s bi t

ng th c show t

i .

c s ti n l

ng

cl ph cc a

Vi c ch c n g i cng m t ph ng th c, nh ng t cc i t ng khc nhau, s cho k qu khc


nhau
c g i l tnh a hnh trong l p trnh h ng i t ng. Nh v y, tnh a hnh trong l p
trnh h ng i t ng:
Cho php cc l p
c nh ngh a cc ph ng th c trng nhau: cng tn, cng s l ng
v ki u tham s , cng ki u tr v . Vi c nh ngh a ph ng th c trng nhau c a cc l p k
th a nhau cn
c g i l s n p ch ng ph ng th c.
Khi g i cc ph ng th c trng tn, d a vo i t ng ang g i m ch ng trnh s th c
hi n ph ng th c c a l p t ng ng, v do , s cho cc k t qu khc nhau.

2.2 SO SNH L P V C U TRC


Trong ph n ny, chng ta s ti n hnh so snh Class (L p) v Structure (C u trc) trn nhi u kha
c nh khc nhau:
M c khi ni m
M c ch v ch c n ng
V

u v nh

c i m
22

So snh

m c khi ni m

m c khi ni m, L p v c u trc hon ton khc nhau:


L p l khi ni m ch c trong l p trnh h
t p cc i t ng t ng t nhau.

ng

it

ng; n

c dng

bi u di n m t

Trong khi , C u trc l khi ni m ch t n t i trong l p trnh c u trc, khng ph i l m t


khi ni m c a l p trnh h ng i t ng. V trong l p trnh h ng i t ng, t t c cc
th c th
u
c coi l m t i t ng, ngh a l n ph i l m t th hi n c th c a m t l p
no . Do , trong l p trnh h ng i t ng, khng c khi ni m C u trc.

So snh v m c ch v ch c n ng
V m c ch, L p v C u trc u c chung m t m c ch ban u, l nhm m t t p h p cc
d li u l i v i nhau
x l ng b v th ng nh t: C u trc nhm cc d li u hay ph i i km
v i nhau l i thnh m t nhm cho d x l. T ng t , L p l t p h p m t s thu c tnh chung c a
i t ng x l.
Tuy nhin, L p v C u trc c ng c m t s khc bi t trn kha c nh ny:
L p ngoi m c ch nhm cc thu c tnh d li u c a
c a i t ng thnh cc ph ng th c c a L p.

it

ng, cn nhm cc ho t

ng

Trong khi , m c d c ng c th cung c p cc hm trong C u trc, nh ng m c ch chnh


c a C u trc ch l nhm d li u thnh c u trc cho d x l.

So snh v

u nh

c i m

V c cng m c ch l nhm cc d li u l i v i nhau


x l, cho nn L p c C u trc c cng
u i m l lm ch ng trnh g n gng, x l ng b v th ng nh t.
Tuy nhin, L p cn c m t s

u i m m C u trc khng c:

L p c kh n ng b o v d li u trnh b truy nh p t do t bn ngoi. Cc ch ng trnh


bn ngoi ch c th truy nh p vo d li u c a i t ng thng qua cc ph ng th c do
L p cung c p, khng th t do truy nh p. Trong khi , C u trc m c d u nhm d li u
v i nhau nh ng khng c kh n ng b o v d li u: Cc ch ng trnh bn ngoi v n c th
truy nh p t do vo cc thnh ph n c a C u trc.
L p c kh n ng ng gi h n ch t i a thay i khi ph i s a l i m ch ng trnh. Khi
c s thay i, ch c n thay i m c a m t ph ng th c, cc ch ng trnh bn ngoi s
d ng ph ng th c u khng ph i thay i. Trong khi , n u thay i m t thnh ph n
c a C u trc, ta ph i thay i m c a t t c cc ch ng trnh s d ng thnh ph n c a
C u trc.
L p c th
c k th a b i m t L p khc, i u ny lm t ng kh n ng s d ng l i m
ngu n c a ch ng trnh. Trong khi , C u trc hon ton khng c c ch k th a, cho
nn nhi u khi ph i vi t l i nh ng o n m gi ng nhau nhi u l n. i u ny v a t n cng
s c, v a khng an ton khi c s thay i m t trong nh ng o n m gi ng nhau .

23

2.3 THNH PH N PRIVATE V PUBLIC C A L P


b o v d li u trnh b truy nh p t do t bn ngoi, l p trnh h ng i t ng s d ng cc t
kho quy nh ph m vi truy nh p cc thu c tnh v ph ng th c c a l p. M t cch t ng qut, l p
trnh h ng i t ng chia ra hai m c truy nh p cc thnh ph n l p:
Private: Truy nh p trong n i b l p.
Protected: Thnh ph n
c trnh by sau).

cb ov ,

c h n ch truy nh p nh thnh ph n private (s

Public: Truy nh p t do t bn ngoi.

Thnh ph n private
Thnh ph n private l khu v c dnh ring cho l p, khng chia s v i b t k l p khc t bn ngoi.
Thnh ph n private ch cho php truy nh p trong ph m vi n i b l p: T ph ng th c vo cc
thu c tnh ho c gi a cc ph ng th c c a l p v i nhau. Cc thnh ph n private khng th truy
nh p t bn ngoi l p, c ng nh t
i t ng khc.
Trong m t l p, thng th

ng cc thnh ph n sau s

t vo khu v c private c a l p:

T t c cc thu c tnh d li u c a l p. Cc thu c tnh d li u c a l p


private nh m b o v chng, trnh s truy nh p t do t bn ngoi.
Cc ph ng th c trung gian,
c s d ng nh
th c khc. Cc ph ng th c trung gian
c
gi trong l p trnh h ng i t ng: Cc i t
khng th bi t cch tnh ton c th bn trong c

t vo vng

cc b c tnh ton m cho cc ph ng


t vo vng private
th c hi n vi c ng
ng, ch ng trnh bn ngoi khng c n, v
a l p.

Thnh ph n public
Thnh ph n public l khu v c m L p c th chia s v i t t c cc ch ng trnh v
ngoi. Thnh ph n public c th
c truy nh p t bn trong l n bn ngoi l p:

it

ng bn

Bn trong l p: t ph ng th c l p vo cc thu c tnh d li u c a l p, ho c gi a cc


ph ng th c c a l p v i nhau.
Bn ngoi l p: T ch
c a l p.
Trong m t l p, thng th

ng trnh bn ngoi ho c cc

ng cc thnh ph n sau s

it

ng khc vo cc ph

ng th c

t vo vng chia s public c a l p:

Cc ph ng th c
nh p/xem (set/get) cc thu c tnh d li u c a l p. Cc ph ng th c
ny s cho php cc i t ng bn ngoi truy nh p vo cc thu c tnh d li u c a l p m t
cch gin ti p.
Cc ph ng th c cung c p ch c n ng ho t ng, cch c x c a
tr ng bn ngoi. Cc ph ng th c ny th hi n ch c n ng c a cc

2.4 M T S

NGN NG

L P TRNH H

N i dung ph n ny s trnh by m t s ngn ng l p trnh h

NG
ng

IT
it

i t ng i v i mi
i t ng l p.

NG

ng thng d ng hi n nay:

Ngn ng l p trnh C++


Ngn ng l p trnh ASP.NET v C#.NET
24

Ngn ng l p trnh Java

2.4.1 C++
C++, ra i vo gi a nh ng n m 1980, l m t ngn ng l p trnh h ng i t ng
t ngn ng l p trnh c u trc C. Cho nn, C++ l ngn ng l p trnh n a h ng
h ng c u trc.

Nh ng

c tr ng h
Cho php

ng

it

nh ngh a l p

c m r ng
i t ng, n a

ng c a C++
it

ng.

Cho php ng gi d li u vo cc l p i t
d li u c a l p b ng cc t kho ph m vi.

ng. Cho php

nh ngh a ph m vi truy nh p

Cho php k th a l p v i cc ki u k th a khc nhau tu vo t kho d n xu t.


Cho php l p k th a s d ng cc ph
nh).
Cho php

Nh ng vi ph m h

nh ngh a ch ng ph

ng

it

ng th c c a l p b k th a (trong ph m vi quy

ng th c trong l p k th a.

ng c a C++

Nh ng vi ph m ny l do k t qu k th a t ngn ng C, m t ngn ng l p trnh thu n c u trc.


Cho php

nh ngh a v s d ng cc bi n d li u t do.

Cho php

nh ngh a v s d ng cc hm t do.

Ngay c khi d li u
c ng gi vo l p, d li u v n c th truy nh p tr c ti p nh d
li u t do b i cc hm b n, l p b n (friend) trong C++.

2.4.2 ASP.NET v C#.NET


Cc ngn ng l p trnh .NET (cn
c g i l .NET Frameworks) c a MicroSoft ra i vo cu i
nh ng n m 1990
c nh tranh v i ngn ng l p trnh Java. .NET l m t ngn ng hon ton
h ng i t ng, h n n a, n cn cung c p m t giao di n l p trnh
ho thn thi n v p m t
v i truy n th ng l p trnh ko th c a MicroSoft.
M ts

c i m c a ngn ng .NET:
L m t ngn ng hon ton h ng i t ng: T t c cc thnh ph n, cc th c th trong
ch ng trnh u
c m hnh d i d ng m t l p nh t nh. Khng c d li u t do v
hm t do trong ch ng trnh.
Cung c p giao di n l p trnh
cho ng d ng c a mnh.

ho : l p trnh vin ch c n ko v th cc

it

ng

ho

Cho php l p trnh vin t t o ra cc th vi n UserControl c a mnh. y l m t th vi n


bao g m cc thnh ph n
c ng i dng t thi t k giao di n, vi t m ngu n, ng gi
v c th s d ng l i trong nhi u ng d ng khc nhau, tu theo ch c n ng c a cc thnh
ph n.

25

2.4.3 Java
Java l m t ngn ng l p trnh
c Sun Microsystems gi i thi u vo thng 6 n m 1995. Java
c xy d ng trn n n t ng c a C v C++: Java s d ng c php c a C v c tr ng h ng i
t ng c a C++.
M ts

c i m c a Java:
Java l m t ngn ng l p trnh hon ton h ng i t ng: T t c cc th c th
u
c
coi l m t i t ng, l m t th hi n c th c a m t l p xc nh. Khng c d li u t do
v hm t do trong Java, t t c
u
c ng gi vo cc l p xc nh.
Java l ngn ng v a bin d ch v a thng d ch. u tin m ngu n
c bin d ch thnh
d ng bytecode; sau
c th c thi trn t ng lo i my nh trnh thng d ch. i u ny t o
ra kh n ng ho t ng c l p v i n n t ng ph n c ng c a cc ng d ng Java.
Java cho php ng i dng t t o cc i t ng th vi n JavaBeans c a mnh (t ng t
nh cc thnh ph n UserControl c a .NET). Cc i t ng Bean s
c s d ng l i nh
cc thnh ph n c s n trong cc ng d ng khc. i u ny m ra kh n ng to l n
ti t
ki m cng s c vi t m ngu n v kh n ng xy d ng cc k thu t cho m t n n cng nghi p
l p rp ph n m m.

Ngn ng l p trnh h
trnh ny.

ng

T NG K T CH
N i dung ch

it

ng Java s

c trnh by chi ti t trong ton b ph n 2 c a gio

NG 2

ng 2 trnh by m t s khi ni m c b n c a l p trnh h

Khi ni m
i t ng.

it

ng, dng

ng

it

ng:

ch cc th c th t n t i th c t trong cc ng d ng h

ng

Khi ni m l p, m t s tr u t ng ho c a i t ng, dng


bi u di n i t ng trong
l p trnh h ng i t ng. Cc thnh ph n c a l p l thu c tnh (d li u) v ph ng th c
(hnh ng).
Qu trnh tr u t ng ho theo ch c n ng
cc ho t ng c a i t ng.
Qu trnh tr u t ng ho theo d li u
thu c tnh t ng ng c a i t ng.

hnh thnh cc ph

ng th c c a l p, th hi n

hnh thnh cc thu c tnh c a l p, bi u di n cc

Khi ni m k th a trong l p trnh h ng i t ng, nh m h n ch vi c trng l p m ngu n


v t ng kh n ng s d ng l i m ngu n c a ch ng trnh.
Khi ni m ng gi trong l p trnh h ng i t ng, nh m h n ch t i a s thay
ngu n. Ch c n thay i trong ph ng th c, cc ch ng trnh bn ngoi c s
ph ng th c khng c n ph i thay i.
Khi ni m a hnh, cho php g i cng m t ph
nhau s c hi u qu khc nhau.

ng th c, nh ng v i cc

it

i m
d ng

ng khc

So snh L p v C u trc trn cc kha c nh khc nhau: khi ni m, m c ch, ch c n ng v


u nh c i m.
M t cc thnh ph n n m trong cc vng khc nhau c a L p: private v public.

26

Gi i thi u m t s ngn ng l p trnh h


Java.

CU H I V BI T P CH
1. Trong s cc nh n

ng

it

ng thng d ng hi n nay: C++, .NET,

NG 2

nh sau, ci no ng, ci no sai:

a.

it

ng l m t th c th c th , t n t i th c t trong cc ng d ng.

b.

it

ng l m t th hi n c th c a L p.

c. L p l m t khi ni m tr u t
d. L p l m t s tr u t

ng dng

ng ho c a

it

bi u di n cc

it

ng.

ng.

e. L p v

it

f. Tr u t

ng ho

it

ng theo ch c n ng t o ra cc thu c tnh c a l p.

g. Tr u t

ng ho

it

ng theo ch c n ng t o ra cc ph

h. Tr u t

ng ho

it

ng theo d li u t o ra cc thu c tnh c a l p.

i. Tr u t

ng ho

it

ng theo d li u t o ra cc ph

ng c b n ch t gi ng nhau.
ng th c c a l p.

ng th c c a l p.

j. K th a cho php h n ch s trng l p m ngu n.


k. K th a cho php t ng kh n ng s d ng l i m ngu n.
l. ng gi h n ch kh n ng truy nh p d li u.
m. ng gi h n ch vi c ph i s a

i m ngu n.

n. a hnh cho php th c hi n cng m t thao tc trn nhi u

it

ng khc nhau.

2. Li t k t t c cc thu c tnh v hnh

ng c a

it

ng Xe t.

xu t l p Car ( t).

3. Li t k t t c cc thu c tnh v hnh

ng c a

it

ng Xe but.

xu t l p Bus.

4. T hai l p Car v Bus c a bi 2 v bi 3.


xu t m t l p
ng c (Engine) cho hai l p
trn k th a, trnh trng l p d li u gi a hai l p Car v Bus.

27

PH N 2
L P TRNH H

NG

IT

NG V I JAVA

28

CH

NG 3

GI I THI U V JAVA
N i dung c a ch

ng ny t p trung trnh by cc v n

L ch s ra

chnh v ngn ng l p trnh Java:

i v pht tri n c a Java

Ki n trc t ng qut m t ch

ng trnh xy d ng trn Java

Cc ton t v cc c u trc d li u c b n trn Java


Cc c u trc l nh c a Java

3.1 L CH S

PHT TRI N C A JAVA

3.1.1 Java
N m 1991, m t nhm k s c a Sun Microsystems mu n l p trnh
i u khi n cc thi t b i n
t nh tivi, my gi t, l n ng Ban u, h
nh dng C v C++ nh ng trnh bin d ch C/C++
l i ph thu c vo t ng lo i CPU. Do , h b t tay vo xy d ng m t ngn ng ch y nhanh,
g n, hi u qu , c l p thi t b v ngn ng Oak ra i v vo n m 1995, sau
c i tn
thnh Java.
Ngn ng l p trnh Java
c Sun Microsystems a ra gi i thi u vo thng 6 n m 1995 v
nhanh chng tr thnh m t ngn ng l p trnh c a cc l p trnh vin chuyn nghi p. Java
c
xy d ng d a trn n n t ng c a C v C++ ngh a l Java s d ng c php c a C v c tr ng
h ng i t ng c a C++. Java l ngn ng v a bin d ch v a thng d ch.
u tin m ngu n
c bin d ch thnh d ng bytecode. Sau
c th c thi trn t ng lo i my nh trnh thng
d ch. M c tiu c a cc nh thi t k Java l cho php ng i l p trnh vi t ch ng trnh m t l n
nh ng c th ch y trn cc n n ph n c ng khc nhau.
Ngy nay, Java
c s d ng r ng ri, khng ch
vi t cc ng d ng trn my c c b hay trn
m ng m cn xy d ng cc trnh i u khi n thi t b di ng, PDA,

3.1.2

c tr ng c a ngn ng Java

Ngn ng Java c nh ng

c tr ng c b n sau:

n gi n
H

ng

it

ng

c l p ph n c ng v h

i u hnh

M nh m
B om t
Phn tn
a lu ng
Linh

ng

n gi n
Nh ng ng i thi t k mong mu n pht tri n m t ngn ng d h c v quen thu c v i a s ng
l p trnh. Do v y Java lo i b cc c tr ng ph c t p c a C v C++ nh :

i
29

Lo i b thao tc con tr , thao tc

nh ngh a ch ng ton t (operator overloading)

Khng cho php a k th a (Multi-inheritance) m s d ng cc giao di n (interface)


Khng s d ng l nh goto c ng nh file header (.h).
Lo i b c u trc struct v union.

ng

it

ng

Java l ngn ng l p trnh hon ton h


M i th c th trong h th ng
m t l p xc nh.
T t c cc ch

ng trnh

ng
u

it

ng:

c coi l m t

it

ng, t c l m t th hi n c th c a

u ph i n m trong m t class nh t

nh.

Khng th dng Java


vi t m t ch c n ng m khng thu c vo b t k m t l p no. T c
l Java khng cho php nh ngh a d li u v hm t do trong ch ng trnh.

c l p ph n c ng v h

i u hnh

i v i cc ngn ng l p trnh truy n th ng nh C/C++, ph ng php bin d ch


c th c hi n
nh sau (Hnh 3.1): V i m i m t n n ph n c ng khc nhau, c m t trnh bin d ch khc nhau
bin d ch m ngu n ch ng trnh cho ph h p v i n n ph n c ng y. Do v y, khi ch y trn m t
n n ph n c ng khc, b t bu c ph i bin d ch l i m ngu n.

compiler

IB

compiler

Sparc

compiler

Macintosh

Hnh 3.1 Cch bin d ch truy n th ng


i cc ch ng trnh vi t b ng Java, trnh bin d ch Javac s bin d ch m ngu n thnh d ng
bytecode. Sau , khi ch y ch ng trnh trn cc n n ph n c ng khc nhau, my o Java dng
trnh thng d ch Java chuy n m bytecode thnh d ng ch y
c trn cc n n ph n c ng t ng
ng. Do v y, khi thay i n n ph n c ng, khng ph i bin d ch l i m ngu n Java. Hnh 3.2 minh
ho qu trnh bin d ch v thng d ch m ngu n Java.

30

IB
Trnh
thng d ch Java

Bytecode

Sparc

(Java Interpreter)

Trnh bin d ch

Macintosh

cl pn n
(Platform
independent)

Hnh 3.2 D ch ch

ng trnh Java

M nh m
Java l ngn ng yu c u ch t ch v ki u d li u:
Ki u d li u ph i

c khai bo t

ng minh.

Java khng s d ng con tr v cc php ton con tr .


Java ki m tra vi c truy nh p n m ng, chu i khi th c thi
khng ra ngoi gi i h n kch th c m ng.

m b o r ng cc truy nh p

Qu trnh c p pht, gi i phng b nh cho bi n


c th c hi n t
nh t nh ng i t ng khng cn s d ng n a (garbage collection).
C ch b y l i c a Java gip

ng, nh d ch v thu

n gi n ha qa trnh x l l i v h i ph c sau l i.

B om t
Java cung c p m t mi tr
ton:

ng qu n l th c thi ch

ng trnh v i nhi u m c

ki m sot tnh an

m c th nh t, d li u v cc ph ng th c
c ng gi bn trong l p. Chng ch
truy xu t thng qua cc giao di n m l p cung c p.
m c th hai, trnh bin d ch ki m sot
nguyn t c c a Java.

m b o m l an ton, v tun theo cc

M c th ba
c m b o b i trnh thng d ch. Chng ki m tra xem bytecode c
cc qui t c an ton tr c khi th c thi.
M c th t ki m sot vi c n p cc l p vo b nh
xu t tr c khi n p vo h th ng.

mb o

gim st vi c vi ph m gi i h n truy

Phn tn
Java
c thi t k
h tr cc ng d ng ch y trn m ng b ng cc l p M ng (java.net). H n n a,
Java h tr nhi u n n ch y khc nhau nn chng
c s d ng r ng ri nh l cng c pht tri n
trn Internet, n i s d ng nhi u n n khc nhau.

31

a lu ng
Ch ng trnh Java cung c p gi i php a lu ng (Multithreading)
ng th i v ng b gi a cc lu ng.

Linh

th c thi cc cng vi c cng

ng

Java
c thi t k nh m t ngn ng
ng
p ng cho nh ng mi tr ng m . Cc ch ng
trnh Java ch a r t nhi u thng tin th c thi nh m ki m sot v truy nh p i t ng lc ch y. i u
ny cho php kh n ng lin k t ng m.

3.1.3 Ci

t Java

Qu trnh ci

t mi tr

Copy b ci
Ch y ch

ng Java trn my bao g m ba b

ng trnh ci

C p nh t bi n mi tr

Copy b ci
C th copy t

c:

t
ng

t
a CD ho c t i xu ng mi n ph t i

a ch web site c a nhm Java:

http://www.java.sun.com/downloads/

Ch y ch

ng trnh ci

Ch y t p tin v a copy (ho c v a t i v ). Ch n th m c ci

t, th m c m c

nh l:

C:\jdk1.5 (v i phin b n JDK1.5)

C p nh t bi n mi tr

ng

C p nh t bi n mi tr ng (PATH) gip vi c th c thi v bin d ch m Java c th ti n hnh b t


c m t th m c no.
c p nh t bi n PATH, c n thm
ng d n y
c a th m c java v a
ci t (C:\jdk1.5\bin) vo cu i c a gi tr bi n ny.
i v i WindowsNT, WinXP kh i
ng Control Panel, ch n System, ch n
Environment (ho c click chu t ph i vo My Computer, ch n Properties, ch n
Advanced, click vo Environment Variables), click vo bi n PATH trong ph n
User Variables v System Variables. Sau , thm vo cu i n i dung bi n hi n c
dng sau (ph i c d u ch m ph y):
;C:\jdk1.5\bin

i v i Windows98/95, ch n START, ch n RUN, nh p dng sysedit vo l nh, nh n


OK, ch n c a s c a AUTOEXEC.BAT. Tm dng khai bo bi n PATH, n u khng c,
thm vo m t dng m i theo m u: SET PATH=C:\jdk1.5\bin. N u c s n bi n PATH,
thm vo cu i dng ny n i dung: ;C:\jdk1.5\bin

32

3.2 KI N TRC CH
3.2.1 Ki n trc ch

NG TRNH XY D NG TRN JAVA

ng trnh Java

D ng c b n c a m t t p tin m ngu n Java c c u trc nh sau :

package packageName; // Khai bo tn gi, n u c


import java.awt.*;

// Khai bo tn th

class className

// Khai bo tn l p

vi n s n c, n u c n dng

{
/*

y l dng ghi ch */

int var;

// Khai bo bi n

public void methodName() // Khai bo tn ph

ng th c

{
/* Ph n thn c a ph

ng th c */

statement (s); // L nh th c hi n
}
}

M t t p m ngu n Java c th c ba ph n chnh:


Ph n khai bo tn gi (kh i) b ng t kho package.
Ph n khai bo th vi n tham kh o b ng t kho import.
Ph n khai bo n i dung l p b ng t kho class.

Khai bo Package
Package
c dng
m t cch h u hi u
th ng nh t.

ng gi cc l p trong ch ng trnh l i v i nhau thnh m t kh i. y l


l u tr cc l p g n gi ng nhau ho c c cng m t module thnh m t kh i

C php khai bo tn gi b ng t kho package:


package <Tn gi>;

t tn package trong ch ng trnh, ng i ta c th ti n hnh nh


t tn th m c trn
a.
Ngh a l b t d u b ng tn c ph m vi l n, cho n cc tn c ph m vi nh , cu i cng l tn cc
gi tr c ti p ch a cc l p. Ph m vi t tn gi, trn th c t ,
c ti n hnh theo th t ph m vi
l n n nh nh sau:
Tn t ch c
Tn cng ty
Tn d n

33

Tn modul trong d n
Tn cc ch c n ng trong modul.
V d :
Tn mi n c a cng ty l syz.com
Tn d n l pro
D n c hai modul l mod1 v mod2
Modul mod1 c hai ch c n ng l k t n i c s d li u connection v bi u di n d li u
bean.
Modul mod2 c hai ch c n ng l giao ti p interface v x l yu c u process.
c m t nh hnh 3.3

Khi , c u trc kh i c a d n

com
syz
pro

mod1

connection

mod2

bean

interface

process

Hnh 3.3: Ki n trc kh i c a d n


Khi , trong ch c n ng bean c l p User, th ph i khai bo tn kh i trong l p ny nh sau:
package com.syz.pro.mod1.bean;

u i m c a package:
Cho php nhm cc l p vo v i nhau thnh cc
v kh i s g n h n thao tc trn m t t p cc l p.

n v nh h n. Vi c thao tc trn cc

Trnh vi c xung t khi t tn l p. V cc l p khng cng package th c th


t tn
trng nhau. Khi s l ng l p c a ch ng trnh qu l n ta c th trnh ph i t tn khc
nhau cho cc l p b ng cch t chng vo cc package khc nhau.
Cho php b o v cc l p. Khi ch ng trnh l n, vi c chia nh ch
package s thu n l i h n cho vi c qu n l v pht tri n.
Tn gi cn

c dng

ng trnh thnh cc

nh danh l p trong ng d ng.

L u :
Dng l nh khai bo tn kh i ph i

u tin trong t n tin m ch

ng trnh.
34

Ch

c khai bo t i a m t tn kh i

i v i m i t p m ngu n Java.

Cc t p tin c a cc l p n m cng gi ng d ng ph i
th m c l tn kh i) theo c u trc kh i c a d n.

c l u trong cng m t th m c (tn

Tn kh i nn t theo ch th ng v tn kh i s l tn th m c t
trnh nh m l n v i tn cc t p tin l tn cc l p c a ch ng trnh.
Khi khng phn chia ch ng trnh thnh kh i (ch
ph i khai bo tn kh i
u ch ng trnh.

ng trnh

ng ng trong

a,

n gi n), khng c n thi t

Khai bo th vi n
Khai bo th vi n ch ra nh ng th vi n
c nh ngh a s n m ch
t i. C php khai bo th vi n v i t kho import nh sau:
import <Tn th

ng trnh s tham kh o

vi n>;

Java chu n cung c p m t s th vi n nh sau:


java.lang: cung c p cc hm thao tc trn cc ki u d li u c b n, x l l i v ngo i l , x
l vo ra trn cc thi t b chu n nh bn phm v mn hnh.
java.applet: cung c p cc hm cho xy d ng cc applet (s trnh by trong Ch
java.awt: cung c p cc hm cho xy d ng cc ng d ng
di n multi media (s trnh by chi ti t trong Ch ng 6).

ng 6).

ho v i cc thnh ph n giao

java.io: cung c p cc hm x l vo/ra trn cc thit b chu n v cc thi t b ngo i vi.


java.util: cung c p cc hm ti n ch trong x l lin quan
nh Date, Stack, Vector.
V d , n u trong ch ng trnh c n n cc thao tc chuy n ki u
string sang ki u int), th ta s ph i tham kh o th vi n java.lang:

n cc ki u d li u c c u trc
i d li u t

ng minh (t ki u

import java.lang.*;

L u :
N u mu n khai bo tham kh o nhi u th vi n, ph i khai bo tham kh o m i th vi n v i
m t t kho import.
N u ch tham kh o m t vi l p trong m t th vi n, nn ch r tham kh o l p no, thay v
ph i khai bo tham kh o c gi (b ng k hi u *) v tham kh o c gi s t ng kch c t p
tin class sau khi bin d ch.
N u khng tham kh o th vi n no, khng c n thi t ph i khai bo cc tham kh o v i t
kho import.

Khai bo l p
Ph n th ba l ph n khai bo l p v n i dung c a l p, ph n ny lun b t bu c ph i c
t p m ngu n Java:

iv im t

Khai bo tn l p v i t kho class.


Khi bo cc thu c tnh c a l p.
35

Khai bo cc ph

ng th c c a l p

Vi c khai bo l p v i cc thu c tnh v ph

3.2.2 Ch
Ch

ng trnh Java

ng th c s

c trnh by chi ti t trong ch

ng 4.

u tin

ng trnh sau y cho php hi n th m t thng i p (N m trong t p m ngu n First.java):

Ch

ng trnh 3.1

package vidu.chuong3;
//

y l ch

ng trnh First.java

class First
{
public static void main(String args[])
{
System.out.println(Hello World);
}
}

bin d ch m ngu n, ta s d ng trnh bin d ch javac. Trnh bin d ch xc nh tn c a file


ngu n t i dng l nh nh m t d i y (gi s ang th m c ch a package vidu v bi n mi
tr ng PATH
c thi t l p ng qui cch):
>javac vidu/chuong3/First.java
Trnh d ch javac t o ra file First.class ch a cc m bytecodes. Nh ng m ny ch a th th c thi
c.
ch ng trnh th c thi
c ta c n dng trnh thng d ch java interpreter v i l nh
java. L nh
c th c hi n nh sau:
>javac vidu.chuong3.First
K t qu s hi n th trn mn hnh nh sau:
Hello World

3.2.3 Phn tch ch

ng trnh

u tin

Trong Java, t t c m l nh u ph i
c t ch c vo trong m t l p nh t nh. Do , m i t p tin
m ngu n xc nh t nh t m t l p Java v tn t p tin ph i trng v i tn l p. Java phn bi t ch
hoa v ch th ng, cho nn tn t p tin c a ch ng trnh trn ph i trng v i tn l p: First.java.
package vidu.chuong3;

y l dng khai bo tn kh i c a ch
m c:

ng trnh, v tn kh i c a ch

ng trnh

t theo hai

M c th nh t l ki u bi: v d (vidu) ho c bi t p (baitap).


M c th hai l tn c a ch

ng: chuong3, chuong4, chuong5, chuong6.

36

V y l v d , n m ch ng 3 nn thu c vo gi vidu.chuong3.
n m trong th m c: ../vidu/chuong3/.
Ch

ng th i, t p tin First.java s

ng trnh ny khng tham kh o th vi n no nn khng c n l nh import no.


//

y l ch

ng trnh First.java

K hi u // dng ch thch dng l nh. Trnh bin d ch s b qua dng ch thch ny. Java h
tr hai lo i ch thch:
Lo i ch thch trn m t dng, dng //. Trnh bin d ch s b qua n i dung b t
hi u // cho n h t dng l nh ch a n.

u t k

Lo i ch thch trn nhi u dng c th b t u v i /* v k t thc v i */. Trnh bin


d ch s b qua n i dung n m gi a hai k hi u ny.
Dng k ti p khai bo l p c tn First: B t

u v i t kho class, k

n l tn l p

class First

M t nh ngh a l p n m tr n v n gi a hai ngo c mc m { v ng }. Cc ngo c ny nh


d u b t u v k t thc m t kh i l nh.
public static void

y l ph
d ng java

ng th c chnh, t
u s d ng m t ph

main(String args[ ])

y ch ng trnh b t
ng th c main ny.

u vi c th c thi c a mnh. T t c cc ng

T kho public l m t ch nh truy xu t. N cho bi t thnh vin c a l p c th


xu t t b t c u trong ch ng trnh.

c truy

T kho static cho php main


c g i t i m khng c n t o ra m t th hi n (instance)
c a l p. N khng ph thu c vo cc th hi n c a l p
c t o ra.
T kho void thng bo cho my tnh bi t r ng ph
no khi th c thi ch ng trnh.
String args[] l tham s dng trong ph
c chuy n vo main, ph ng th c
trong d u ngo c n.

ng th c s khng tr l i b t c gi tr

ng th c main. Khi khng c m t thng tin no


c th c hi n v i cc d li u r ng khng c g

System.out.println(Hello World); Dng l nh ny hi n th chu i Hello World trn


mn hnh. L nh println() cho php hi n th chu i
c truy n vo ln mn hnh.

Truy n

i s trong dng l nh

Ch ng trnh 3.2 minh ho cc tham s (argument) c a cc dng l nh


trong ph ng th c main.

c ti p nh n nh th no

37

Ch

ng trnh 3.2

package vidu.chuong3;
class

PassArgument{

public static void main(String args[])


{
System.out.println(This is what the main method received);
System.out.println(args[0]);
System.out.println(args[1]);
System.out.println(args[2]);
}
}

Bin d ch ch

ng trnh:

>javac PassArgumet.java

Th c thi ch

ng trnh v i dng l nh:

>java PassArgument A 123 B1

S thu

c trn mn hnh k t qu :
This is what the main method received
A
123
B1

3.3 CC KI U D

LI U V TON T

B N TRN JAVA

3.3.1 Khai bo bi n
C php khai bo bi n:
dataType varName;

Trong , dataType l ki u d li u c a bi n, varName l tn bi n. Trong Java, vi c


ph i tun theo cc quy t c sau:
Ch

cb t

u b ng m t k t (ch ), ho c m t d u g ch d

t tn bi n

i , ho c m t k t dollar

Khng c kho ng tr ng gi a tn
B t

u t k t th hai, c th dng cc k t (ch ), ch s , d u dollar, d u g ch d

Khng trng v i cc t kho


C phn bi t ch hoa ch th

ng

38

Ph m vi ho t

ng c a bi n

M t bi n c ph m vi ho t ng trong ton b kh i l nh m n
u b ng d u { v k t thc b ng d u }:

c khai bo. M t kh i l nh b t

N u bi n
c khai bo trong m t c u trc l nh i u khi n, bi n c ph m vi ho t
trong kh i l nh t ng ng.

ng

N u bi n
c khai bo trong m t ph ng th c (Khng n m trong kh i l nh no), bi n
c ph m vi ho t ng trong ph ng th c t ng ng: c th
c s d ng trong t t c cc
kh i l nh c a ph ng th c.
N u bi n
c khai bo trong m t l p (Khng n m trong trong m t ph ng th c no),
bi n c ph m vi ho t ng trong ton b l p t ng ng: c th
c s d ng trong t t
c cc ph ng th c c a l p.

3.3.2 Ki u d li u
Trong Java, ki u d li u

c chia thnh hai lo i:

Cc ki u d li u c b n
Cc ki u d li u

it

ng

Ki u d li u c b n
Java cung c p cc ki u d li u c b n nh sau:
byte:

Dng l u d li u ki u s nguyn c kch th


gi tr t -128 n 127. Gi tr m c nh l 0.

char:

Dng l u d li u ki u k t ho c s nguyn khng m c kch th


Ph m vi bi u di n gi tr t 0 n u\ffff. Gi tr m c nh l 0.

boolean:

Dng
l u d li u ch c hai tr ng thi ng ho c sai ( l n ch c 1 bt). Ph m vi
bi u di n gi tr l {True, False}. Gi tr m c nh l False.

short:

Dng
l u d li u c ki u s nguyn, kch c 2 byte (16 bt). Ph m vi bi u di n gi
tr t - 32768 n 32767. Gi tr m c nh l 0.

int:

Dng
l u d li u c ki u s nguyn, kch c 4 byte (32 bt). Ph m vi bi u di n gi
tr t -2,147,483,648 n 2,147,483,647. Gi tr m c nh l 0.

float:

Dng

l u d li u c ki u s th c, kch c 4 byte (32 bt). Gi tr m c

double:

Dng
0.00d

l u d li u c ki u s th c c kch th

long:

Dng
l 0l.

l u d li u c ki u s nguyn c kch th

Ki u d li u

it

c ln
c ln

c 2 byte (16 bt).

nh l 0.0f.

n 8 byte. Gi tr m c
n 8 byte. Gi tr m c

nh l
nh

ng

Trong Java, c 3 ki u d li u
Array:

c m t byte (8 bt). Ph m vi bi u di n

it

ng:

M t m ng c a cc d li u cng ki u
39

class:

D li u ki u l p
ph ng th c.

it

ng do ng

interface: D li u ki u l p giao ti p do ng
ti p.

i dng

i dng

nh ngh a. Ch a t p cc thu c tnh v

nh ngh a. Ch a cc ph

ng th c c a giao

p ki u (Type casting)
V d , nhi u khi g p tnh hu ng c n c ng m t bi n c d ng integer v i m t bi n c d ng float.
x l tnh hu ng ny, Java s d ng tnh n ng p ki u (type casting) c a C/C++. o n m sau
y th c hi n php c ng m t gi tr d u ph y ng (float) v i m t gi tr nguyn (integer).
float c = 35.8f;
int b = (int)c + 1;

u tin gi tr d u ph y ng c
c
k t qu l gi tr 36
c l u vo b.

i thnh gi tr nguyn 35. Sau n

c c ng v i 1 v

Trong Java c hai lo i p ki u d li u:


N i r ng (widening): qu trnh lm trn s t ki u d li u c kch th c nh h n sang
ki u c kch th c l n h n. Ki u bi n i ny khng lm m t thng tin. V d chuy n t
int sang float. Chuy n ki u lo i ny c th
c th c hi n ng m nh b i trnh bin d ch.
Thu h p (narrowwing): qu trnh lm trn s t ki u d li u c kch th c l n h n sang
ki u c kch th c nh h n. Ki u bi n i ny c th lm m t thng tin nh v d
trn.
Chuy n ki u lo i ny khng th th c hi n ng m nh b i trnh bin d ch, ng i dng ph i
th c hi n chuy n ki u t ng minh.

3.3.3 Cc ton t
Java cung c p cc d ng ton t sau:
Ton t s h c
Ton t bit
Ton t quan h
Ton t logic
Ton t

i u ki n

Ton t gn

Ton t s h c
Cc ton h ng c a cc ton t s h c ph i d ng s . Cc ton h ng ki u boolean khng s d ng
c, song cc ton h ng k t cho php s d ng lo i ton t ny. M t vi ki u ton t
c li t
k trong b ng d i y.
Ton t

M t

C ng.
Tr v gi tr t ng hai ton h ng

Tr
40

Tr v k t qu c a php tr .
*

Nhn
Tr v gi tr l tch hai ton h ng.

Chia
Tr v gi tr l th

ng c a php chia

Php l y modul
Gi tr tr v l ph n d c a php chia

++

T ng d n
T ng gi tr c a bi n ln 1. V d a++ t

--

ng

ng v i a = a + 1

Gi m d n
Gi m gi tr c a bi n 1

+=

n v . V d a-- t

ng

ng v i a = a - 1

C ng v gn gi tr
C ng cc gi tr c a ton h ng bn tri vo ton h ng bn ph i v gn gi tr
tr v vo ton h ng bn tri. V d c += a t ng
ng c = c + a

-=

Tr v gn gi tr
Tr cc gi tr c a ton h ng bn tri vo ton ton h ng bn ph i v gn gi
tr tr v vo ton h ng bn tri. V d c -= a t ng
ng v i c = c - a

*=

Nhn v gn
Nhn cc gi tr c a ton h ng bn tri v i ton ton h ng bn ph i v gn gi
tr tr v vo ton h ng bn tri. V d c *= a t ng
ng v i c = c*a

/=

Chia v gn
Chia gi tr c a ton h ng bn tri cho ton ton h ng bn ph i v gn gi tr
tr v vo ton h ng bn tri. V d c /= a t ng
ng v i c = c/a

%=

L y s d v gn
Chia gi tr c a ton h ng bn tri cho ton ton h ng bn ph i v gn gi tr
s d vo ton h ng bn tri. V d c %= a t ng
ng v i c = c%a
B ng 3.1 Cc ton t s h c

Ton t

Bit

Cc ton t d ng bit cho php ta thao tc trn t ng bit ring bi t trong cc ki u d li u nguyn
thu .
Ton
t

M t

Ph

nh bit (NOT)

Tr v gi tr ph
&

nh c a m t bt.

Ton t AND bt
Tr v gi tr l 1 n u cc ton h ng l 1 v 0 trong cc tr

ng h p khc

Ton t OR bt
Tr v gi tr l 1 n u m t trong cc ton h ng l 1 v 0 trong cc tr

ng h p khc.
41

Ton t Exclusive OR bt

Tr v gi tr l 1 n u ch m t trong cc ton h ng l 1 v tr v 0 trong cc tr


h p khc.

ng

D ch sang ph i bt

>>

Chuy n ton b cc bt cu m t s sang ph i m t v tr, gi nguyn d u c a s m.


Ton h ng bn tri l s b d ch cn s bn ph i ch s v tr m cc bt c n d ch.
D ch sang tri bt

<<

Chuy n ton b cc bt cu m t s sang tri m t v tr, gi nguyn d u cu s m.


Ton h ng bn tri l s b d ch cn s bn ph i ch s v tr m cc bt c n d ch.
B ng 3.2 Cc ton t Bit

Cc ton t quan h
Cc ton t quan h ki m tra m i quan h gi a hai ton h ng. K t qu c a m t bi u th c c dng
cc ton t quan h l nh ng gi tr Boolean (logic ng ho c sai). Cc ton t quan h
c
s d ng trong cc c u trc i u khi n.
Ton
t

M t

==

So snh b ng
Ton t ny ki m tra s t

!=

ng

ng c a hai ton h ng

So snh khc
Ki m tra s khc nhau c a hai ton h ng

>

L nh n
Ki m tra gi tr c a ton h ng bn ph i l n h n ton h ng bn tri hay khng

<

Nh h n
Ki m tra gi tr c a ton h ng bn ph i c nh h n ton h ng bn tri hay khng

>=

L n h n ho c b ng
Ki m tra gi tr c a ton h ng bn ph i c l n h n ho c b ng ton h ng bn tri hay
khng

<=

Nh h n ho c b ng
Ki m tra gi tr c a ton h ng bn ph i c nh h n ho c b ng ton h ng bn tri hay
khng
B ng 3.3 Cc ton t quan h

Cc ton t logic
Cc ton t logic lm vi c v i cc ton h ng Boolean. M t vi ton t ki u ny
y
Ton t

M t

&&

V (AND)

c ch ra d

Tr v m t gi tr ng (True) n u ch khi c hai ton t c gi tr True


42

Ho c (OR)

||

Tr v gi tr True n u t nh t m t gi tr l True
XOR

Tr v gi tr True n u v ch n u ch m t trong cc gi tr l True, cc


tr ng h p cn l i cho gi tr False (sai)
Ton h ng

n t NOT. Chuy n gi tr t True sang False v ng

c l i.

B ng 3.4 Cc ton t logic

Cc ton t

i u ki n

Ton t i u ki n l m t lo i ton t
i u ki n. C php:

c bi t v n bao g m ba thnh ph n c u thnh bi u th c

<bi u th c 1> ? <bi u th c 2> : <bi u th c 3>;

bi u th c 1: Bi u th c logic. Tr tr v gi tr True ho c False


bi u th c 2: L gi tr tr v n u <bi u th c 1> xc

nh l True

bi u th c 3: L gi tr tr v n u <bi u th c 1> xc

nh l False

Ton t gn
Ton t gn (=) dng
gn m t gi tr vo m t bi n v c th gn nhi u gi tr cho nhi u bi n
cng m t lc. V d o n l nh sau gn m t gi tr cho bi n var v gi tr ny l i
c gn cho
nhi u bi n trn m t dng l nh n.
int var = 20;
int p,q,r,s;
p=q=r=s=var;

Dng l nh cu i cng
sau gi tr c a s

Th t

c th c hi n t ph i qua tri. u tin gi tr


c gn cho r v c ti p nh v y.

bi n var

c gn cho s,

u tin c a cc ton t

Cc bi u th c
c vi t ra ni chung g m nhi u ton t . Th t u tin quy t nh tr t t th c
hi n cc ton t trn cc bi u th c. B ng d i y li t k th t th c hi n cc ton t trong Java
Th t

Ton t

1.

Cc ton t

2.

Cc ton t s h c v cc ton t d ch nh *,/,+,-,<<,>>

3.

Cc ton t quan h nh >,<,>=,<=,= =,!=

4.

Cc ton t logic v Bit nh &&,||,&,|,^

5.

Cc ton t gn nh =,*=,/=,+=,-=

n nh +,-,++,--

B ng 3.5 Th t

Thay
thay

i th t
i th t

u tin cc ton t

u tin
u tin trn m t bi u th c, b n c th s d ng d u ngo c

n ():
43

Ph n

c gi i h n trong ngo c

c th c hi n tr

c.

N u dng nhi u ngo c n l ng nhau th ton t n m trong ngo c


thi tr c, sau n cc vng pha ngoi.
Trong ph m vi m t c p ngo c

n th quy t c th t

n pha trong s th c

u tin v n gi nguyn tc d ng.

3.4 CC C U TRC L NH TRN JAVA


Java cung c p hai lo i c u trc i u khi n:
i u khi n r nhnh
M nh

if-else

M nh

swich-case

Vng l p (Loops)
Vng l p while
Vng l p do-while
Vng l p for

3.4.1 Cu l nh if-else
Cu l nh if-else ki m tra gi tr d ng boolean c a i u ki n. N u gi tr i u ki n l True th ch
c kh i l nh sau if s
c th c hi n, n u l False th ch c kh i l nh sau else
c th c hi n. C
php:
if (conditon)
{
action1 statements;
}
else
{
action2 statements;
}

Condition: Bi u th c boolean nh ton t so snh.


action 1: Kh i l nh

c th c thi khi gi tr

action 2: Kh i l nh

c th c thi n u i u ki n tr v gi tr False

o n ch

Ch

i u ki n l True

ng trnh sau ki m tra xem cc s c chia h t cho 5 hay khng.

ng trnh 3.3

package vidu.chuong3;
class CheckNumber
{
public static void main(String args[])

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!);
}
}

o n ch
num %5 tr
ra. L u r
ph i
c

ng trnh trn num


c gn gi tr nguyn l 10. Trong cu l nh if-else i u ki n
v gi tr 0 v i u ki n th c hi n l True. Thng bo 10 is divisable for 5!
c in
ng v ch c m t cu l nh
c vi t trong o n if v else, b i v y khng c n thi t
a vo d u ngo c mc { v }.

3.4.2 Cu l nh switch-case
Kh i l nh switch-case c th
c s d ng thay th cu l nh if-else trong tr
th c cho ra nhi u k t qu . C php:

ng h p m t bi u

swich (expression)
{
case value1: action 1 statement;
break;
case value2: action 2 statement;
break;

case valueN: actionN statement;


break;
default:

default_action statement;

expression - Bi n ch a m t gi tr xc

nh

value1,value 2,.valueN: Cc gi tr h ng s ph h p v i gi tr trn bi n expression .


action1,action2actionN: Kh i l nh
break: T kho
c s d ng
cho c u trc bn ngoi switch

ng h p t

ng ng c gi tr True

b qua t t c cc cu l nh sau v ginh quy n i u khi n

default: T kha tu ch n
c s d ng
c cc tr ng h p nh n gi tr False
default - action: Kh i l nh

c th c thi khi tr

ch r cc cu l nh no

c th c hi n ch khi t t c cc tr

c th c hi n ch khi t t

ng h p nh n gi tr False

o n ch ng trnh sau xc nh gi tr trong m t bi n nguyn v hi n th ngy trong tu n


c
th hi n d i d ng chu i.
ki m tra cc gi tr n m trong kho ng t 0 n 6, ch ng trnh s
thng bo l i n u n m ngoi ph m vi trn.
45

Ch

ng trnh 3.4

package vidu.chuong3;
class SwitchDemo
{
public static void main(String agrs[])
{
int day = 2;
switch(day)
{
case 0 : System.out.println(Sunday);
break;
case 1 : System.out.println(Monday);
break;
case 2 : System.out.println(Tuesday);
break;
case 3 : System.out.println(Wednesday);
break;
case 4 : System.out.println(Thursday);
break;
case 5:

System.out.println(Friday);
break;

case 6 : System.out.println(Satuday);
break;
default:
System.out.println(Invalid day of week);
}
}
}

N u gi tr c a b n day l 2, ch

ng trnh s hi n th Tuesday, v c ti p nh v y .

3.4.3 Vng l p While


Vng l p while th c thi kh i l nh khi i u ki n th c thi v n l True v d ng l i khi i u ki n th c
thi nh n gi tr False. C php:
while(condition)
{
action statements;
}

condition: c gi tr bool; vng l p s ti p t c cho n u i u ki n v n c gi tr True.


action statement: Kh i l nh
o n ch

c th c hi n n u condition nh n gi tr True

ng trnh sau tnh t ng c a 5 s t nhin

u tin dng c u trc while.

46

Ch

ng trnh 3.5

package vidu.chuong3;
class WhileDemo
{
public static void main(String args[])
{
int a = 5, sum = 1;
while

(a >= 1)

{
sum +=a;
a--;
}
System.out.println(The sum is + sum);
}
}

v d trn, vng l p
c th c thi cho n khi i u ki n a>=1 l True. Bi n a
c khai bo
bn ngoi vng l p v
c gn gi tr l 5. Cu i m i vng l p, gi tri c a a gi m i 1. Sau n m
vng gi tr c a a b ng 0. i u ki n tr v gi tr False v vng l p k t thc. K t qu s
c hi n
th The sum is 15

3.4.4 Vng l p do-while


Vng l p do-while th c thi kh i l nh khi m i u ki n l True, t ng t nh vng l p while,
ngo i tr do-while th c hi n l nh t nh t m t l n ngay c khi i u ki n l False. C php:
do{
action statements;
}while(condition);

condition: Bi u th c bool; vng l p s ti p t c khi m i u ki n v n c gi tr True.


action statement: Kh i l nh lun
c th c hi n
c th c hi n khi condition nh n gi tr True.
V d sau tnh t ng c a 5 s t nhin
Ch

l n th nh t, t vng l p th hai, chng

u tin dng c u trc do-while.

ng trnh 3.6

package vidu.chuong3;
class DoWhileDemo
{
public static void main(String args[])
{
int a = 1, sum = 0;
do{

47

sum += a;
a++;
}while

(a <= 5);

System.out.println(Sum of 1 to 5

is + sum);

}
}

Bi n a
c kh i t o v i gi tr 1, sau n v a
c dng lm bi n ch y (t ng ln 1 sau m i l n
l p) v a
c dng c ng d n vo bi n sum. T i th i i m k t thc, ch ng trnh s in ra Sum
of 1 to 5 is 15.

3.4.5 Vng l p for


Vng l p for cung c p m t d ng k t h p t t c cc c i m chung c a t t c cc lo i vng l p:
gi tr kh i t o c a bi n ch y, i u ki n d ng c a vng l p v l nh thay i gi tr c a bi n ch y.
C php:
for(initialization statements; condition; increment statements)
{
action statements;
}

initialization statements: kh i t o gi tr ban u cho cc bi n ch y, cc l nh kh i t o


c
phn cch nhau b i d u ph y v ch th c hi n duy nh t m t l n vo th i i m b t u c a
vng l p.
condition: Bi u th c bool; vng l p s ti p t c cho

n khi no i u ki n c gi tr False.

increment statements: Cc cu l nh thay i gi tr c a bi n ch y. Cc l nh ny lun


c
th c hi n sau m i l n th c hi n kh i l nh trong vng l p. Cc l nh ph n bi t nhau b i d u
ph y.
o n ch

Ch

ng trnh sau hi n thi t ng c a 5 s

u tin dng vng l p for.

ng trnh 3.7

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

48

v d trn, i v sum l hai bi n


c gn cc gi tr
u l 1 v 0 t ng ng. i u ki
ki m tra v khi n cn nh n gi tr True, cu l nh tc ng trong vng l p
c th c hi
theo gi tr c a i
c t ng ln 2 t o ra s ch n ti p theo. M t l n n a, i u ki n l i
tra v cu l nh tc ng l i
c th c hi n. Sau n m vng, i t ng ln 6, i u ki n tr v
False v vng l p k t thc. Thng bo: The sum is 15
c hi n th .

n
c
n. Ti p
c ki m
gi tr

3.5 CASE STUDY I


By gi , p d ng cc n i dung h c trong ch ng ny
vi t m t ch
di n tch c a m t hnh ch nh t c kch th c x,y v i yu c u:
Kch th

ng trnh tnh chu vi v

c x, y nh p t tham s dng l nh.

Ph i ki m tra x, y l cc s nguyn d

ng hay khng tr

c khi tnh ton.

In k t qu tnh ton ra mn hnh


y l o n ch

ng trnh th c hi n bi ton ny.

49

Ch

ng trnh 3.8

package vidu.chuong3;
import java.awt.*;
import java.lang.*;
class RectangleDemo
{
public static void main(String args[])
{
//khai bo cc bi n l u gi

kch th

c c a hnh ch

nh t

int x = 0, y = 0;
/*

c cc kch th

//n u truy n

c t

tham s

hai tham s

dng l nh*/

th m i tnh ti p

if(args.length >= 2)
{
//chuy n ki u t

String sang integer

x = Integer.parseInt(args[0]);
y = Integer.parseInt(args[1]);
}
/*Tinh chu vi v di n tch hnh ch
//n u c

hai tham s

u d

nh t*/

ng th m i tnh

if(x>0 && y>0)


{
//tnh chu vi
int chuvi = 2*(x + y);
System.out.println (Chu vi l + chuvi);
//tnh di n tch
int dientich = x*y;
System.out.println (Di n tch l + dientich);
}
else
System.out.println (Cc tham s

khng

ng!);

}
}

Sau khi bin d ch ch


l nh:

ng trnh3.8 (t p tin c tn RectangleDemo.java), ta ch y t c a s dng

>java RectangleDemo 10 20
50

S thu

c k t qu :
Chu vi l: 60
Di n tch l: 200

N u ch g

c a s dng l nh:

>java RectangleDemo
Th s nh n

c m t thng bo l i:

Cc tham s

khng

T NG K T CH
N i dung ch

ng!

NG 3

ng 3 trnh by cc n i dung c b n v c php ngn ng l p trnh Java:

T t c cc l nh c a java ph i
ngu n ph i trng v i tn l p.
L nh package

c dng

L nh import
L nh class

c t ch c vo trong m t l p nh t

khai bo tn gi c a l p.

c s d ng trong ch
c dng

Tn l p, tn ph
c a java.

nh. Tn t p tin m

ng trnh

truy c p cc gi th vi n Java.

khai bo tn l p

ng th c, tn h ng v tn bi n trong java ph i tun theo quy t c

ng d ng Java c m t l p ch a ph ng th c main. Cc tham s c th


ph ng th c main nh cc tham s l nh (command line parameters).

t tn

c truy n vo

Java cung c p cc d ng ton t :


-

Cc ton t s h c

Cc ton t bit

Cc ton t quan h

Cc ton t logic

Ton t

Ton t gn

u ki n

Java cung c p cc c u trc i u khi n l nh:


-

if-else

switch

for

while

do while

CU H I V BI T P CH

NG 3

1. Trong cc tn sau, tn no c th dng lm tn bi n trong java:


a.

_123

b.

a$
51

c.

1abc

d.

class

e.

vi du

f.

$123

2. Mu n l u gi m t bi n s nguyn d
li u no l ti t ki m b nh nh t?

ng m c gi tr l n nh t l m t tri u th dng ki u d

3. Mu n l u gi m t bi n s nguyn m m c gi tr nh nh t l m m t t th dng ki u d li u
no l ti t ki m b nh nh t?
4. Trong c u trc l nh if-else n (1 if v 1 else) th c t nh t m t kh i l nh (c a if ho c c a
else)
c th c hi n. ng hay sai?
5. Trong c u trc l nh switch-case, khi khng dng default th c t nh t m t kh i l nh
th c hi n. ng hay sai?
6. Trong c u trc l nh switch-case, khi dng default th c t nh t m t kh i l nh
hi n. ng hay sai?

8. Trong c u trc l nh do-while, kh i l nh


c gi tr False. ng hay sai?

10. Cho bi t k t qu thu

c th c

c th c hi n t nh t m t l n ngay c khi i u ki n c

7. Trong c u trc l nh while, kh i l nh


gi tr False. ng hay sai?

9. Trong c u trc l nh for, kh i l nh


tr False. ng hay sai?

c th c hi n t nh t m t l n ngay c khi i u ki n

c th c hi n t nh t m t l n ngay c khi i u ki n c gi

c khi th c hi n o n ch

ng 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 bi t o n ch

ng trnh sau th c hi n vng l p bao nhiu l n v k t 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 bi t o n ch

ng trnh sau th c hi n vng l p bao nhiu l n v k t 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 bi t hai o n ch

ng trnh sau in ra k t qu gi ng 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. Vi t ch

ng trnh tnh t ng cc s ch n n m trong kho ng 1

n 100.

15. Vi t ch

ng trnh hi n th t ng cc b i s c a 7 n m gi a 1 v 100.

16. Vi t ch

ng trnh tm giai th a c a n (n>0), n nh p t tham s dng l nh.

17. Vi t ch ng trnh tm b i s chung nh nh t c a m v n (m,n>0), m v n


s dng l nh.

c nh p t tham

c s chung l n nh t c a m v n (m,n>0), m v n

c nh p t tham

18. Vi t ch ng trnh tm
s dng l nh.

19. Vi t ch ng trnh tm s Fibonaci th n (n>2), n nh p t tham s dng l nh. Bi t r ng s


Fibonaci
c tnh theo cng th c: F(n) = F(n-1) + F(n-2) v i n>=2 v F(0) = F(1) = 1.

53

CH

NG 4

K TH A V A HNH TRN JAVA


N i dung c a ch
K th a

ng ny t p trung trnh by cc

c tr ng h

ng

it

ng c a ngn ng Java:

K th a kp
Cc l p tr u t

ng

a hnh

4.1 K TH A

4.1.1 L p
Java coi l p l m t khun m u (Template) c a m t
cc ph ng th c ho t ng c a i t ng.

it

ng, trong l p ch a cc thu c tnh v

Khai bo l p
M tl p

c khai bo v i c php:

<tnh ch t> class <tn l p>


{
}

L p trong java c ba tnh ch t

c tr ng b i ba t kho:

public: L p thng th ng, c th


tr m c nh cho tnh ch t c a l p.

c truy c p t cc gi (package) khc. public l gi

final: Khai bo l p h ng, l p ny khng th t o d n xu t. T c l khng c l p no k th a


c t cc l p c tnh ch t final.
abstract: Khai bo l p tr u t ng, l p ny ch
c php ch a cc ph ng th c tr u
t ng. H n n a, khng th t o cc th hi n (Instance) c a cc l p tr u t ng b ng ton t
new nh cc l p thng th ng.
Ch
Ch

ng trnh 4.1 khai bo m t l p thng th

ng v i ki u m c

nh l public v i dng khai bo.

ng trnh 4.1

package vidu.chuong4;
class Person
{
}

S d ng l p
L p
c s d ng khi ch ng trnh c n m t
khai bo d a vo ton t new:
<tn l p> <tn

i t

it

ng c ki u c a l p . Khi ,

it

ng

ng> = new <tn l p>();

54

V d , mu n t o m t

it

ng c ki u l l p Person trong ch

ng trnh 4.1, ta dng l nh sau:

Person myClass = new Person();

Khai bo thu c tnh c a l p


Thu c tnh c a l p

c khai bo theo c php:

<tnh ch t> <ki u d

li u> <tn thu c tnh>;

Ki u d li u: c th l cc ki u d li u c b n s n c c a java, c th l cc l p do ng
dng t
nh ngh a.
Tn thu c tnh:

t tn theo quy t c

t tn bi n c a java.

Tnh ch t: Cc thu c tnh v ph ng th c c a l p c cc tnh ch t


t kho sau (gi tr m c nh l public):

Ch
Ch

c tr ng b i cc

public: c th

c truy c p t bn ngoi l p

protected: ch

c truy c p t l p

private: ch

static:
c dng chung cho m t th hi n c a l p, c th
c truy c p tr c ti p
b ng <tn l p>.<tn thu c tnh> m khng c n kh i t o m t th hi n c a l p.

abstract: nh ngh a m t thu c tnh tr u t ng. Thu c tnh ny khng th truy


nh p trong l p nh ng c th b nh ngh a ch ng cc l p k th a.

final: m t thu c tnh h ng, khng b

native: dng cho ph ng th c khi ci


ng khc, nh C hay h p ng .

synchronized: dng cho ph ng th c t i h n, nh m ng n cc tc


t ng khc khi ph ng th c ang
c th c hi n.

nh ngh a.

nh ngh a v cc l p k th a t l p .

c truy c p trong ph m vi b n thn l p

nh ngh a ch ng

nh ngh a.

cc l p k th a.

t ph thu c mi tr

ng trong m t ngn

ng trnh 4.2 minh ho vi c khai bo hai thu c tnh l tn v tu i c a l p Ng

ng c a cc

i (Person).

ng trnh 4.2

package vidu.chuong4;
class Person
{
public String

name;

public int

age;

Khai bo ph
Ph

ng th c c a l p

ng th c c a l p

c khai bo theo c php

<tnh ch t> <ki u tr

v > <tn ph

ng th c> ([<cc tham s >])

[throws <cc ngo i l >]


{
}

55

Tnh ch t: c tr ng b i cc t kho t
nh l public.

ng t nh tnh ch t c a thu c tnh. Gi tr m c

Ki u tr v : Ki u d li u tr v c a ph ng th c, c th l ki u d li u s n c c a java
ho c l ki u do ng i dng t
nh ngh a.
Tn ph

ng th c: tun theo qui t c

t tn bi n c a java.

Cc ngo i l : l m t i t ng c bi t
c t o ra khi ch ng trnh g p l i. Java s tr
l i cho ch ng trnh ngo i l ny theo t kho throws. Cc ngo i l , n u c,
c phn
cch nhau b i d u ph y.
Cc tham s : cc tham s c a ph ng th c,
c li t k theo c p <ki u tham s >
c phn bi t b i d u ph y.
<tn tham s >, cc tham s
Ch ng trnh 4.3 m t vi c khai bo ph
Person.
Ch

ng th c show()

hi n th thng tin c nhn c a l p

ng trnh 4.3

package vidu.chuong4;
class Person
{
public String

name;

public int

age;

public void show()


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

Ph

ng th c kh i t o c a l p

Ph ng th c kh i t o (Constructor)
c dng kh i t o m t th hi n c th c a m t l p, ngh a
l gn cc gi tr kh i u cho cc thu c tnh, n u c, v t o ra m t i t ng c th . Ph ng th c
kh i t o ph i cng tn v i l p.
L u :
Ph

ng th c kh i t o ph i c tn trng v i tn c a l p

Ph

ng th c kh i t o khng c gi tr tr v

Ph

ng th c kh i t o c tnh ch t public

C th c nhi u ph

ng th c kh i t o c a cng m t l p

Ch ng trnh 4.4a minh ho m t ph


cc thu c tnh tn v tu i.
Ch

ng th c kh i t o c a l p Person b ng cch gn gi tr cho

ng trnh 4.4a

package vidu.chuong4;

56

class Person
{
public String

name;

public int

age;

// Ph

ng th c kh i d ng

public Person(String name1, int age1)


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

Ch ng trnh 4.4b minh ho cch dng l p Person m chng ta v a nh ngh a trong ch ng trnh
4.4a. Ch ng trnh ny s t o ra m t i t ng myPerson c a l p Person v i cc thu c tnh c gi
tr kh i t o: name = Minh v age = 21. Sau , ch ng trnh s d ng ph ng th c show() c a
i t ng myPerson in ra dng thng bo Minh is 21 years old!.
Ch

ng trnh 4.4b

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

Bi n this
Bi n this l m t bi n n c bi t lun t n t i trong cc l p java: m t l p c ng m t bi n n this.
Bi n ny
c s d ng trong khi ch y v n tr
n b n thn l p ch a n. Bi n this th ng
c
s d ng trong cc hm kh i t o c a l p.
Ch ng trnh 4.4c khai bo m t l p hon ton gi ng v i l p
c khai bo trong ch
4.4a, nh ng ch khc l c dng bi n this trong hm kh i t o c a l p.

ng trnh

57

Ch

ng trnh 4.4c

package vidu.chuong4;
class Person
{
public String

name;

public int

age;

// Ph

ng th c kh i d ng

public Person(String name, int age)


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

Trong ch ng trnh 4.4c, ta ch n hm kh i t o c a l p, hm ny c hai bi n c c b l name


v age, trng v i cc bi n c a l p. Do , trong ph m vi hm ny, bi n this.name v this.age s
ch cc bi n c a l p, cn cc bi n name v age s ch cc bi n c c b c a hm. Cho nn, cc l nh
gn v n th c thi nh trong ch ng trnh 4.4a.

4.1.2 S k th a
S k th a
c s d ng khi mu n t o m t l p m i t m t l p bi t. Khi , t t c cc thu c
tnh v ph ng th c c a l p c
u tr thnh thu c tnh v ph ng th c c a l p m i. L p c
c g i l l p cha, l p m i
c g i l l p con.

Khai bo l p k th a
Khai bo l p k th a

c th c hi n b i t kho extends:

<thu c tnh> <tn l p con> extends <tn l p cha>


{
}

Ch

Ch

ng trnh 4.5a minh ho vi c t o m t l p Nhn vin (Employee)


c xy d ng trong ph n 4.1.1.

c k th a t l p Person

ng trnh 4.5a

package vidu.chuong4;
class Employee extends Person
{

58

public float salary;


// Ph

ng th c kh i d ng

public Employee(String name, int age, float salary)


{
super(name, age);
this.salary = salary;
}
}

Khi , o n ch ng trnh c a ch ng trnh 4.5b v n in ra dng thng bo Minh is 21 years


old! v khi i t ng myEmployee g i n ph ng th c show()
c k th a t l p Person.
Ch

ng trnh 4.5b

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

Khai bo ph

ng th c n p ch ng

Khi mu n thay i n i dung c a cc ph ng th c


c k th a t l p cha, ta dng cch khai bo
ph ng th c n p ch ng. Th c ra l khai bo l i m t ph ng th c m i c cng tn v ki u v i m t
ph ng th c c trong l p cha.
Ch ng trnh 4.6a s khai bo n p ch ng ph
l i ph ng th c show() c a l p Person n a.
Ch

ng th c show() c a l p Employee m khng dng

ng trnh 4.6a

package vidu.chuong4;
class Employee extends Person
{
public float salary;
// Ph

ng th c kh i d ng

public Employee(String name, int age, float salary)


{
super(name, age);

59

this.salary = salary;
}
// Khai bo n p ch ng
public void show()
{
System.out.println( name + has a salary of
+ salary + $/month);
}
}

Khi , o n ch ng 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 ch ng trnh 4.5b. L do l lc ny, i
t ng myEmployee s g i ph ng th c show() c a l p Employee m khng g i ph ng th c
show() c a l p Person n a.
Ch

ng trnh 4.6b

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

Quy t c truy nh p trong k th a


Cc quy t c ny quy
c a l p cha:

nh kh n ng truy nh p c a l p con

i v i cc thu c tnh v ph

private: ch
c truy nh p trong ph m vi l p cha, l p con khng truy nh p
cc l p ngoi l p cha u khng truy nh p
c.
protected: l p con c th truy nh p
khng truy nh p
c.
final: l p con c th s d ng

ng th c
c. T t c

c. T t c cc l p khng k th a t l p cha

c nh ng khng th khai bo n p ch ng

public: l p con c th s d ng v n p ch ng
c.

c.

c. T t c cc l p bn ngoi

u s d ng

4.2 K TH A B I
Nh m trnh nh ng nh p nh ng c a tnh ch t a k th a c a C++, Java khng cho php k th a
tr c ti p t nhi u h n m t l p cha. Ngh a l Java khng cho php a k th a tr c ti p, nh ng cho
60

php ci t nhi u giao ti p (Interface)


c a cc giao ti p .

c th th a h

ng thm cc thu c tnh v ph

ng th c

4.2.1 Giao ti p
Khai bo giao ti p
C php khai bo m t giao ti p nh sau:
[public] interface <tn giao ti p> [extends <danh sch giao ti p>]
{
}

Tnh ch t: tnh ch t c a m t giao ti p lun l public. N u khng khai bo t


gi tr m c nh c ng l public.
Tn giao ti p: tun th theo quy t c

ng minh th

t tn bi n c a java.

Danh sch cc giao ti p: danh sch cc giao ti p cha


c nh ngh a
k th a, cc
giao ti p cha
c phn cch nhau b i d u ph y. (Ph n trong ngo c vung [] l tu
ch n).
L u :
M t giao ti p ch c th k th a t cc giao ti p khc m khng th
l p s n c.
Ch
Ch

c k th a t cc

ng trnh 4.7 minh ho vi c khai bo m t giao ti p khng k th a t b t k m t giao ti p no.


ng trnh 4.7

package vidu.chuong4;
public interface Product
{
}

Khai bo ph

ng th c c a giao ti p

C php khai bo m t ph

ng th c c a giao ti p nh sau:

[public] <ki u gi tr

tr

v > <tn ph

ng th c> ([<cc tham s >])

[throws <danh sch ngo i l >];

Tnh ch t: tnh ch t c a m t thu c tnh hay ph ng th c c a giao ti p lun l public.


N u khng khai bo t ng minh th gi tr m c nh c ng l public.
i v i thu c tnh,
th ch t ch t lun ph i thm l h ng (final) v t nh (static).
Ki u gi tr tr v : c th l cc ki u c b n c a java, c ng c th l ki u do ng
t
nh ngh a (ki u i t ng).
Tn ph

ng th c: tun th theo quy t c

t tn ph

i dng

ng th c c a l p

Cc tham s : n u c th m i tham s
c xc nh b ng m t c p <ki u tham s > <tn
tham s >. Cc tham s
c phn cch nhau b i d u ph y.
Cc ngo i l : n u c th m i ngo i l

c phn cch nhau b i d u ph y.


61

L u :
Cc ph ng th c c a giao ti p ch
c khai bo d i d ng m u m khng c ci t chi
ti t (c d u ch m ph y ngay sau khai bo v khng c ph n ci t trong d u {}). Ph n
ci t chi ti t c a cc ph ng th c ch
c th c hi n trong cc l p (class) s d ng giao
ti p .
Cc thu c tnh c a giao ti p lun c tnh ch t l h ng (final), t nh (static) v public. Do ,
c n gn gi tr kh i u ngay khi khai bo thu c tnh c a giao ti p.
Ch ng trnh 4.8 minh ho vi c khai bo m t thu c tnh v m t ph ng th c c a giao ti p
Product
c khai bo trong ch ng trnh 4.7: thu c tnh l u nhn hi u c a nh s n xu t s n
ph m; ph ng th c dng truy xu t gi bn c a s n ph m.
Ch

ng trnh 4.8

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

4.2.2 S d ng giao ti p
V giao ti p ch
c khai bo d i d ng cc ph ng th c m u v cc thu c tnh h ng nn vi c s
d ng giao ti p ph i thng qua m t l p c ci t giao ti p . Vi c khai bo m t l p c ci t
giao ti p
c th c hi n thng qua t kho implements nh sau:
<tnh ch t> class <tn l p> implements <cc giao ti p>
{
}

Tnh ch t v tn l p

c s d ng nh trong khai bo l p thng th

ng.

Cc giao ti p: m t l p c th ci t nhi u giao ti p. Cc giao ti p


c phn cch nhau
b i d u ph y. Khi , l p ph i ci t c th t t c cc ph ng th c c a t t c cc giao
ti p m n s d ng.
L u :
M t ph ng th c
c khai bo trong giao ti p ph i
c ci t c th trong l p c ci
t giao ti p nh ng khng
c php khai bo ch ng. Ngh a l s l ng cc tham s c a
ph ng th c trong giao ti p ph i
c gi nguyn khi ci t c th trong l p.
Ch ng trnh 4.9 minh ho vi c ci t m t l p giy (Shoe) ci
thu c tnh v ph ng th c
c khai bo trong ch ng trnh 4.8.
Ch

t giao ti p Product v i cc

ng trnh 4.9

package vidu.chuong4;
public class Shoe implements Product
{

62

// Ci

t ph

ng th c

c khai bo trong giao ti p

public float getCost()


{
return 10f;
}
// Ph

ng th c truy nh p nhn hi u s n ph m

public String getMark()


{
return MARK;
}
// Ph

ng th c 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());
}
}

Ch ng trnh 4.9 s in ra dng: This shoe is Adidas having a cost of $10. Hm getMark() s tr
v nhn hi u c a s n ph m, l thu c tnh
c khai bo trong giao ti p. Hm getCost() l ci
t ring c a l p Shoe i v i ph ng th c
c khai bo trong giao ti p Product m n s
d ng, ci t ny tr v gi tr 10 i v i l p Shoe.

4.3 L P TR U T

NG

L p tr u t ng l m t d ng l p c bi t, trong cc ph ng th c ch
c khai bo d ng
khun m u (template) m khng
c ci t chi ti t. Vi c ci t chi ti t cc ph ng th c ch
c th c hi n cc l p con k th a l p tr u t ng .
L p tr u t ng
c s d ng khi mu n nh ngh a m t l p m khng th bi t v
c cc thu c tnh v ph ng th c c a n.

nh ngh a ngay

4.3.1 Khai bo
Khai bo l p tr u t

ng

L p tr u t ng
c khi bo nh cch khai bo cc l p thng th
abstract trong ph n tnh ch t:

ng, ngo i tr c thm t kho

[public] abstract class <tn l p>


{
}

Tnh ch t: m c
l p tr u t ng.

nh l public, b t bu c ph i c t kho abstract

xc

nh y l m t

63

Tn l p: tun th theo quy t c

t tn l p thng th

ng c a java.

L u :
L p tr u t ng c ng c th k th a m t l p khc, nh ng l p cha c ng ph i l m t l p tr u
t ng. (Khai bo k th a thng qua t kho extends nh khai bo k th a thng th ng).
Ch
Ch

ng trnh 4.10 khai bo m t l p tr u t

ng l l p

ng v t (Animal) m t cch chung chung.

ng trnh 4.10

package vidu.chuong4;
abstract class Animal
{
}

Khai bo ph

ng th c c a l p tr u t

ng

T t c cc thu c tnh v ph ng th c c a l p tr u t ng u ph i khai bo l tr u t ng. H n


n a, cc ph ng th c c a l p tr u t ng ch
c khai bo d ng khun m u m khng c ph n
khai bo chi ti t. C php khai bo ph ng th c c a l p tr u t ng:
[public] abstract <ki u d

li u tr

v > <tn ph

ng th c>

([<cc tham s >]) [throws <cc ngo i l >];

Tnh ch t: tnh ch t c a m t thu c tnh hay ph ng th c c a l p tr u t


public. N u khng khai bo t ng minh th gi tr m c nh c ng l public.

ng lun l

Ki u d li u tr v : c th l cc ki u c b n c a java, c ng c th l ki u do ng
t
nh ngh a (ki u i t ng).
Tn ph

ng th c: tun th theo quy t c

t tn ph

i dng

ng th c c a l p

Cc tham s : n u c th m i tham s
c xc nh b ng m t c p <ki u tham s > <tn
tham s >. Cc tham s
c phn cch nhau b i d u ph y.
Cc ngo i l : n u c th m i ngo i l

c phn cch nhau b i d u ph y.

L u :
Tnh ch t c a ph ng th c tr u t ng khng
c l private hay static. V ph ng th c
tr u t ng ch
c khai bo chi ti t (n p ch ng) trong cc l p d n xu t (l p k th a) c a
l p tr u t ng. Do , n u ph ng th c l private th khng th n p ch ng, n u ph ng
th c l static th khng th thay i trong l p d n xu t.
Ph ng th c tr u t ng ch
c khai bo d i d ng khun m u nn khng c ph n d u
mc {} m k t thc b ng d u ch m ph y ;.
Ch ng trnh 4.11 khi bo hai ph ng th c c a l p tr u t ng Animal trong ch ng trnh 4.10:
Ph ng th c getName() tr v tn loi ng v t, d ch a bi t tn c th loi no nh ng ki u tr v
l String. Ph ng th c getFeet() tr v s chn c a loi ng v t, c ng ch a bi t c th l bao
nhiu chn nh ng ki u tr v l int.

64

Ch

ng trnh 4.11

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

4.3.2 S d ng l p tr u t

ng

L p tr u t ng
c s d ng thng qua cc l p d n xu t c a n. V ch c cc l p d n xu t m i
ci t c th cc ph ng th c
c khai bo trong l p tr u t ng.
Ch ng trnh 4.12a khai bo l p v loi chim (Bird) k th a t l p Animal trong ch ng trnh
4.11. L p ny ci t chi ti t hai ph ng th c
c khai bo trong l p Animal: ph ng th c
getName() s tr v tn loi l Bird; ph ng th c getFeet() tr v s chn c a loi chim l 2.
Ch

ng trnh 4.12a

package vidu.chuong4;
public class Bird extends Animal
{
// Tr

tn loi chim

public String getName()


{
return Bird;
}
// Tr

chn c a loi chim

public int getFeet()


{
return 2;
}
}

Ch ng trnh 4.12b khai bo l p v loi mo (Cat) c ng k th a t l p Animal trong ch ng trnh


4.11. L p ny ci t chi ti t hai ph ng th c
c khai bo trong l p Animal: ph ng th c
getName() s tr v tn loi l Cat; ph ng th c getFeet() tr v s chn c a loi mo l 4.
Ch

ng trnh 4.12b

package vidu.chuong4;
public class Cat extends Animal
{
// Tr

tn loi mo

65

public String getName()


{
return Cat;
}
// Tr

chn c a loi mo

public int getFeet()


{
return 4;
}
}

Ch
Ch

ng trnh 4.12c s d ng l i hai l p Bird v Cat trong cc ch


ng trnh ny s hi n th hai dng thng bo:

ng trnh 4.12a v 4.12b.

The Bird has 2 feets


The Cat has 4 feets

Ch

ng trnh 4.12c

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

4.4 A HNH
4.4.1 N p ch ng
Java cho php trong cng m t l p, c th khai bo nhi u ph ng th c c cng tn. N p ch ng l
hi n t ng cc ph ng th c c cng tn. C hai ki u n p ch ng trong Java:
Cc ph ng th c c a cng m t l p c cng tn. Khi hai ph
tn th b t bu c chng ph i c:

ng th c c a m t l p c cng

- Ho c danh sch cc tham s khc nhau


- Ho c ki u tr v khc nhau
66

- Ho c k t h p hai i u ki n trn.
N u khng, java s khng phn bi t
// Ch p nh n

c chng. V d n u trong cng m t l p:

public int add(int x, int y){}


public float add(float x, int y){}
// Khng ch p nh n

public int add(int x, int y){}


public int add(int x, int y){}

Ph ng th c c a l p con c cng tn v i ph ng th c c a l p cha. Trong tr ng h p ny,


cc ph ng th c n p ch ng c th c cng danh sch tham s v c cng ki u tr v (xem
l i ph n khai bo ph ng th c n p ch ng trong m c k th a 4.1.2).

4.4.2 a hnh
a hnh l vi c tri u g i n cc ph ng th c n p ch ng c a i t ng. Khi m t ph
ch ng
c g i, ch ng trnh s d a vo ki u cc tham s v ki u tr v
g i ph
i t ng cho ph h p.
Ch
t .

ng trnh 4.13 minh ho vi c khai bo nhi u hm add()

Ch

ng th c n p
ng th c c a

c ng hai s ho c c ng hai xu k

ng trnh 4.13

package vidu.chuong4;
public class Operator
{
// C ng hai s

nguyn

public int add(int x, int y)


{
return (x + y);
}
// C ng hai s

th c

public float add(float x, float y)


{
return (x + y);
}
// C ng hai chu i 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) + \);
}
}

Ch

ng trnh 4.13 s hi n th ra hai dng thng bo:


The (5+19) is 24
The (ab + cd) is abcd

Trong l p Operator c hai ph ng th c cng tn v cng c hai tham s


u vo l add(). Khi
ch ng trnh th c thi l nh myOperator.add(5, 19), ch ng trnh s t
i chi u cc ki u tham s ,
th y 5 v 19 c d ng g n v i ki u int nh t, nn ph ng th c add(int, int) s
c g i v tr v gi
tr l 24.
Khi ch ng trnh th c thi l nh myOperator.add(ab, cd), ch ng trnh s t
i chi u cc ki u
tham s , th y ab v cd c d ng g n v i ki u String nh t, nn ph ng th c add(String, String)
s
c g i v tr v gi tr l abcd.
L u :
Khi g i hm v i cc ki u d li u khc v i cc hm
c khai bo, s c s chuy n
i ki u ng m nh di n ra. Khi khng th th c hi n chuy n i ki u ng m nh, java s
pht sinh m t thng bo l i.
Ch ng h n, trong ch ng trnh 4.13, n u ta th c thi l nh myOperator.add(4.0f, 5) c d ng
add(float, int), ch ng trnh s chuy n ng m nh s nguyn 5 thnh float (chuy n t ki u int sang
float thu c di n n i r ng ki u, l ki u chuy n ng m nh trong java) c th s d ng d ng
c
khai bo add(float, float) v k t qu s l 9.0f.
N u ta th c thi l nh myOperator.add(ab, 5) c d ng add(String, int), v int khng th chuy n
ng m nh thnh String nn l nh ny s pht sinh l i.
trnh l i ny, ph i chuy n i ki u
t ng minh cho s 5 thnh ki u String b ng m t trong cc cch sau:
myOperator.add(ab, (new Int(5)).toString());
myOperator.add(ab, 5 + );

4.5 CASE STUDY II


Trong ph n ny, chng ta s vi t m t ch
cc l p chnh:
L p Human l m t l p tr u t

ng trnh qu n l nhn vin c a m t cng ty. Bao g m

ng, ch c m t ph

ng th c duy nh t l show().

L p Person l l p k th a t l p Human, c hai thu c tnh l tn (name) v tu i (age).


ng gi d li u cc thu c tnh ny c d ng private v cc ph ng th c truy nh p chng
(get v set). Ngoi ra l p ny cn ci t ph ng th c show() k th a t l p tr u t ng
Human.

68

L p Employee l l p k th a t l p Person, c thm thu c tnh l l ng (salary). Thu c


tnh ny c ng c d ng private
ng gi d li u v c n cc ph ng th c truy nh p
get/set. L p ny ci t l i ph ng th c show(). H n n a, l p Employee cn c thm hai
ph ng th c addSalary() v addSalary(float)
tnh t ng l ng cho nhn vin: m t
ph ng th c t ng l ng theo t l m c nh l 10% (khng c n tham s ), v m t ph ng
th c t ng theo gi tr c th
a vo (c n tham s ).
Cc ph n ti p theo s trnh by ph n ci

t chi ti t cho cc l p ny.

4.5.1 L p Human
L p Human l m t l p tr u t
t p tin Human.java.
Ch

ng, ch c m t ph

ng th c duy nh t l show().

y l n i dung

ng trnh 4.14a

package vidu.chuong4;
abstract class Human
{
abstract void show();
}

4.5.2 L p Person
L p Person l l p k th a t l p Human:
C hai thu c tnh l tn (name) v tu i (age) c d ng private
Cc ph ng th c truy nh p cc thu c tnh name (getName() v setName(String)) v age
(getAge() v setAge(int)).
Ci

t ch ng ph

ng th c show() k th a t l p tr u t

ng Human.

y l n i dung t p tin Person.java.


Ch

ng trnh 4.14b

package vidu.chuong4;
class Person extends Human
{
private String name;
private int age;
// Ph

ng th c kh i d ng khng c tham s

public Person()
{
super();
name = ;
age = 0;
}

69

// Ph

ng th c kh i d ng c tham s

public Person(String name, int age)


{
this.name = name;
this.age = age;
}
/* Ph

ng th c truy nh p thu c tnh name */

public String getName()


{
return name;
}
public void setName(String name)
{
this.name = name;
}
/* Ph

ng th c truy nh p thu c tnh age */

public int getAge()


{
return age;
}
public void setAge(int age)
{
this.age = age;
}
// Khai bo n p ch ng
public void show()
{
System.out.println( name + is + age + years old!);
}
}

4.5.3 L p Employee
L p Employee l l p k th a t l p Person:
C thm thu c tnh l l ng (salary) c ng c d ng private
ph ng th c truy nh p get/set.
L p ny ci

t l i ph

ng gi d li u v c n cc

ng th c show().
70

C thm hai ph ng th c addSalary() v addSalary(float)


tnh t ng l ng cho nhn
vin: ph ng th c addSalary() t ng l ng theo t l m c nh l 10% (khng c n tham
s ), ph ng th c addSalary(float) t ng theo gi tr c th
a vo (c n tham s ).
Sau y l n i dung t p tin Employee.java
Ch

ng trnh 4.14c

package vidu.chuong4;
class Employee extends Person
{
private float salary;
// Ph

ng th c kh i d ng khng c tham s

public Employee()
{
super();
salary = 0f;
}
// Ph

ng th c kh i d ng c tham s

public Employee(String name, int age, float salary)


{
super(name, age);
this.salary = salary;
}
/* Ph

ng th c truy nh p thu c tnh salarry */

public float getSalary()


{
return salary;
}
public void setSalary(float salary)
{
this.salary = salary;
}
// Khai bo n p ch ng
public void show()
{
System.out.println( getName() + is + getAge()
+ years old having a salary of $
+ salary + /month!);
}

71

/* Ph

ng th c t ng l

ng */

public void addSalary()


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

L u : Trong ph ng th c n p ch ng show() c a l p Employee, ta ph i dng cc ph ng th c


public
c k th a t l p Person l getName() v getAge()
truy nh p n thu c tnh name v
age m khng th truy xu t tr c ti p. L do l cc thu c tnh name v age c d ng private trong
l p Person nn khng th truy xu t tr c ti p trong cc l p d n xu t. Do , ta ph i truy xu t
chng thng qua cc ph ng th c truy nh p public c a l p Person.

4.5.4 Ch

ng trnh demo

Ch ng trnh 4.14d ch a hm main


ch y minh ho vi c s d ng cc l p Person v Employee.
y l n i dung c a t p tin Casestudy2.java
Ch

ng trnh 4.14d

package vidu.chuong4;
public class Casestudy2
{
// Hm main
public static void main(String args[])
{
// S

d ng l p Person

Person myPerson = new Person(Vinh, 25);


myPerson.show();
// S

d ng l p Employee

Employee myEmployee = new Employee(Vinh, 25, 300f);


myEmployee.show();
// T ng l

ng theo m c

nh

myEmployee.addSalary();
myEmployee.show();
// T ng l

ng ln $50

myEmployee.addSalary(50f);
myEmployee.show();

72

}
}

Ch

ng trnh 4.14d s hi n th n i dung nh sau:


Vinh is 25 years old!
Vinh is 25 years old having a salary of

$300/month!

Vinh is 25 years old having a salary of

$330/month!

Vinh is 25 years old having a salary of

$380/month!

Dng th nh t in ra dng thng bo theo ph ng th c show() c a l p Person. Dng th hai c ng


hi n th thng bo theo ph ng th c show() c a l p Employee
c khai bo n p ch ng. Dng
th ba hi n th thng bo sau khi t ng l ng theo m c nh (10%) t 300$ ln 330$. Dng th
t hi n th thng bo sau khi t ng l ng thm m t l n n a v i l ng t ng l 50$ t 330$ ln 380$.

T NG K T CH

NG 4

N i dung ch ng 4 t p trung trnh by cc v n


h ng i t ng trong Java:
M t l p trong java
final ho c abstract.

c b n lin quan

n k thu t l p trnh

c khai bo v i t kho class, v i cc tnh ch t c th c l public,

Khi khai bo m t l p l tr u t ng th cc ph ng th c c a n c ng
c khai bo l tr u
t ng v ch khai bo d ng khun m u m khng
c khai bo chi ti t.
Khng th t o ra m t

it

ng t m t l p tr u t

ng.

C th khai bo m t l p k th a t m t l p khc thng qua t kho extends. M t l p java


ch c th
c k th a t nhi u nh t m t l p cha m thi.
Trong k th a, l p con c th
l p cha.

nh ngh a l i (n p ch ng) cc ph

ng th c

c k th a t

M t giao ti p trong java


c khai bo thng qua t kho interface. Cc thu c tnh c a
giao ti p ph i l thu c tnh h ng (final) v static. Cc ph ng th c ch
c khai bo d i
d ng khun m u m khng
c ci t chi ti t.
C th khai bo m t giao ti p k th a t m t giao ti p khc c ng b ng t kho extends.
M t giao ti p trong java c th
c k th a t nhi u giao ti p khc.
M t giao ti p trong java ch
. Khi , l p java ph i ci
ti p.

c s d ng thng qua m t l p java ci t c th giao ti p


t chi ti t t t c cc ph ng th c
c khai bo trong giao

Trong m t l p java, c th khai bo nhi u ph ng th c c cng tn. Khi th c thi, ch ng


trnh s t
ng ch n ph ng th c c khun m u ki u tham s trng v i l nh th c hi n
l nh t ng ng.

CU H I V BI T P CH

NG 4

1. Trong cc khai bo l p 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 ph

ng th c c a m t l p (khng tr u t

ng) 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 ph

ng th c c a m t l p tr u t

ng 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 m t giao ti p 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 th a l p sau, gi s Aclass v Bclass l cc l p c s n, 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 th a giao ti p sau, gi s Ainterface v Binterface l cc giao ti p c


s n, 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 m t l p s d ng giao ti p sau, gi s Ainterface v Binterface l cc giao


ti p c s n, 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 o n ch

ng trnh ci

t m t l p s d ng m t giao ti p sau:

public interface MyInterface{


public void show(String a);

74

}
// Khai bo l p s

d ng giao ti p

public class MyClass implements MyInterface{

Khi , l p MyClass ch c duy nh t m t ph ng th c ci t chi ti t ph


giao ti p MyInterface. Trong cc cch ci t sau, cch no l ng:

ng th c show c a

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 o n ch

ng trnh ci

t php ton c ng v i cc s h ng c ki u 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 g i l nh MyOperator.add(-5, 100), ch

ng trnh s g i ph

ng th c no?

a. add(int, int)
b. add(float, float)
c. add(double, double)
d. add(String, String)
e. Thng bo l i
10. C ng v i l p MyOperator trong bi 9, khi ta g i l nh MyOperator.add(5.0d, 100f), ch
trnh s g i ph ng th c no?

ng

a. add(int, int)
b. add(float, float)
c. add(double, double)
d. add(String, String)
e. Thng bo l i
11. C ng v i l p MyOperator trong bi 9, khi ta g i l nh MyOperator.add(abcd, 100f), ch
trnh s g i ph ng th c no?

ng

a. add(int, int)
b. add(float, float)
c. add(double, double)
d. add(String, String)
e. Thng bo l i
12. V s khc nhau gi a l p v giao ti p trong java, nh ng nh n

nh no sau y l ng:

75

a. L p
t

c k th a t i a t
nhi u giao ti p khc.

b. L p c th
t

th a t

m t l p khc, giao ti p c th

giao ti p, nh ng giao ti p khng

th a

c k

th a

cc l p.

c. Thu c tnh c a l p c th
ti p ph i l h ng s

c tnh ch t b t k, thu c tnh c a giao


v t nh.

d. Ph

ng th c c a l p c th
giao ti p ch
c khai bo

13. Xt o n ch

c ci
t chi ti t, ph
d ng khun m u.

ng th c c a

ng trnh khai bo hai l p k th a nhau nh sau:

public class Person {


public void show(){System.out.println(This is a person!);}
}

v:
public class Employee extends Person {
public void show(int x){
System.out.println(This is the employee + x);
}
}

Khi , o n ch

ng trnh sau s hi n th thng bo no?

public class Demo1 {


public static void main(String args[]){
Employee myEmployee = new Employee();
myEmployee.show();
}
}

a. This is a person!.
b. This is the employee 0.
c. Thng bo l i.
d. Khng hi n thi g c .
14. C ng v i hai l p Person v Employee trong bi 14.
bo no?

o n ch

ng trnh sau s hi n th thng

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 l i.
d. Khng hi n thi g c .

76

15. Vi t m t ch ng trnh khai bo m t l p v cc hnh ch nh t Rectangle. L p ny c hai thu c


tnh c c b l chi u r ng v chi u di c a hnh. Vi t hai ph ng th c kh i d ng t ng minh
cho l p ny: M t kh i d ng v i m t tham s ki u int, khi , chi u r ng v chi u di
c
thi t l p thnh gi tr tham s
a vo (hnh vung). M t kh i d ng v i hai tham s ki u int
t ng ng l chi u r ng v chi u di.
16. Vi t m t giao ti p khai bo cc php ton c ng hai s , c ng hai xu, c ng xu v s . Sau
vi t m t l p ci t giao ti p .
17. Vi t m t l p tr u t ng v cc hnh ph ng, trong khai bo cc ph ng th c tnh chu vi v
di n tch c a hnh. Sau vi t ba l p k th a t l p tr u t ng l: l p hnh vung, l p
hnh ch nh t v l p hnh trn. T thi t l p cc thu c tnh c c b c n thi t cho m i l p con v
khai bo n p ch ng hai ph ng th c ban u trong m i l p con.

77

CH

NG 5

BI U DI N V CI
CC C U TRC D

LI U TR U T

N i dung ch ng ny t p trung trnh by vi c ci


t ng trn java. Cc gi i thu t bao g m:
Ph

ng php duy t v

Ph

ng php s p x p v tm ki m

Cc c u trc d li u tr u t
Ng n x p v hng

T
NG TRN JAVA

t m t s gi i thu t v cc c u trc d li u tr u

qui

ng bao g m:
i

Danh sch lin k t


Cy nh phn
th

5.1 PH

NG PHP DUY T V

5.1.1 Cc ph

QUI

ng php duy t

Cc ph ng php duy t th ng xu t hi n trong bi ton t h p nh m tm ki m t t c cc tr ng


thi (t h p) c th c c a m t t p cc tr ng thi, ho c tm ra m t t h p tho mn t t nh t m t s
yu c u xc nh trong s cc tr ng thi c a t p h p. Cc ph ng php duy t thng th ng bao
g m:
Ph ng php duy t ton b : Duy t qua t t c cc tr ng thi c th c c a t p h p. Ph ng
php ny ph h p v i bi ton li t k v v i cc t p h p c s l ng cc tr ng thi l
nh
khng t n th i gian duy t.
Ph ng php duy t ch n l c: Th ng p d ng khi s l ng tr ng thi c a t h p l r t
l n, khng th s d ng ph ng php duy t ton b . Ph ng php ny ch dng cho cc
bi ton tm ki m m t (ho c m t s ) tr ng thi t t nh t (theo m t s tiu ch xc nh) c a
t h p b ng cch ch duy t theo m t s tr ng thi
c cho l c kh n ng tm
ck t
qu cao nh t. M t s thu t ton duy t theo ph ng php ny th ng
c p d ng trong
l nh v c tr tu nhn t o nh thu t ton A*, thu t ton nhnh v bin, thu t ton / .
Ngoi ra, tu thu c vo cch th c bi u di n d li u c a tr ng thi (c u trc d li u), ng
d ng cc ph ng php duy t khc nhau:

i ta s

Duy t trn m ng
Duy t trn cy
Duy t trn

th

Cc ph ng php duy t ny s
c trnh by trong cc m c t
sch tuy n tnh (duy t trn m ng), cy nh phn (duy t trn cy),

ng ng v cc
th (duy t trn

i t ng danh
th ).

78

5.1.2 Ph

ng php

qui

Ph ng php
qui:
c nh ngh a theo qui n p ton h c, m t
chnh n v i m t ph m vi nh h n.
V d ,

it

ng

c bi u di n qua

nh ngh a s Fibonacy th n:

F(n) = F(n-1) + F(n-2) v i n>2


F(1) = F(2) = 1

l m t

nh ngh a mang tnh

qui.

Gi i thu t
qui: l ph ng php gi i bi ton b ng cch rt g n bi ton thnh m t (ho c m t
s ) bi ton con t ng t nh v y nh ng v i d li u nh h n v i tr ng thi d ng t n t i.
V d , th t c tnh s Fibonacy th n:
int Fibo(int n){
if(n == 1 || n == 2) return 1;
return (Fibo(n-1) + Fibo(n-2));
}

l m t gi i thu t qui. N tnh s Fibonacy th n thng qua vi c tnh hai s nh h n tr


s th n-1 v n-2. i u ki n d ng l s th 1 v s th 2 l 1.

5.2 PH

c n l

NG PHP S P X P V TM KI M

5.2.1 Cc ph

ng php s p x p

Hi n nay, c r t nhi u ph

ng php s p x p khc nhau:

S p x p n i b t (bubble sort)
S p x p chn (insertion sort)
S p x p ch n (selection sort)
S p x p vun

ng (heap sort)

S p x p tr n (merge sort)
S p x p nhanh (quick sort)
N i dung ph n ny s trnh by vi c ci t gi i thu t s p x p nhanh (quick sort). V vi c s p x p
th ng g n li n v i m t m ng cc ph n t c th so snh
c, cho nn gi i thu t ny s
c ci
t trong l p m ng cc ph n t (Array). Vi c ci t cc gi i thu t s p x p cn l i
c coi nh
m t bi t p c a ph n ny.

L p m ng cc ph n t Array
L p ny c thu c tnh l m t m ng cc ph n t . Cc ph n t c a m ng c th c ki u b t k,
nh ng ph i tho mn i u ki n l c th so snh
c, khi , m ng c th s p x p
c. Trong
ph n ny, ta s ci t m ng cc ph n t c ki u int.
class Array{
private int *elements;
}

79

Gi i thu t s p x p nhanh Quick Sort


t ng c a gi i thu t ny l ch n m t ph n t ng vai tr l kho ch t (cn g i l i m m c),
cc ph n t nh h n kho ch t s ph i chuy n ln ng tr c kho ch t. Cc ph n t l n h n
kho ch t th ph i chuy n xu ng ng sau kho ch t. Cc b c c th nh sau:
Ch n m t ph n t (b t k) lm kho ch t.
it
u m ng
ph n t th i.

n cu i m ng, tm ph n t

i t cu i m ng ln
ph n t th j.
N u i<j,

u m ng, tm ph n t

u tin l n h n kho ch t, nh d u n l
u tin nh h n kho ch t, nh d u n l

i ch ph n t th i v th j.

Sau , i ti p theo hai chi u, v

i ch , n u c, cho

n khi i=j.

i ch ph n t th i (c ng l j vo th i i m ny) v i ph n t ch t. Khi , ph n t ch t
l ng v tr c a n trong m ng s p x p.
L p l i gi i thu t trn v i hai o n c a m ng: o n tr

c ch t v o n sau ch t.

Qu trnh s d ng khi m i o n ch cn hai ph n t .


Ch

ng trnh 5.1a ci

Ch

t th t c s p x p nhanh c a l p Array.

ng trnh 5.1a

package vidu.chuong5;
class Array{
private int[] elements;
/* Ph

ng th c truy nh p cc ph n t

c a m ng */

public int[] get(){


return elements;
}
public void set(int[] elements){
this.elements = elements;
}
/* Ph

ng th c s p x p */

public void sort(){


quick(0, elements.length-1);
}
/* Ph

ng th c s p x p nhanh */

private void quick(int left, int right){


int i=left, j=right;
int pivot=(left+right)/2, tmp;
do{
while(elements[i]<elements[pivot] && i<right)i++;

// Qut xui

80

while(elements[j]>elements[pivot] && j>left)j++;


if(i<=j){

//

i ch

// Qut ng

hai ph n t

tmp = elements[i];
elements[i] = elements[j];
elements[j] = tmp;
}
}while (i<=j);
if(left < j)

quick(left, j);

// S p x p

o n tr

c ch t

if(i < right)

quick(i, right);

// S p x p

o n sau ch t

}
}

5.2.2 Cc ph

ng php tm ki m

Ph ng php tm ki m s tr v ch s c a m t ph n t n u n c m t trong m ng tm ki m, tr v
-1 n u khng c ph n t trong m ng. Cc ph ng php tm ki m c b n bao g m:
Tm ki m tu n t (tuy n tnh)
Tm ki m nh phn
Tm ki m trn cy
N i dung ph n ny s trnh by ph ng php tm ki m nh phn. Cc ph ng php cn l i
c
coi nh l bi t p c a ph n ny. Ph ng php tm ki m nh phn
c th c hi n trn m ng s p
x p. Cc b c ti n hnh nh sau:
L y kho c n tm so snh v i ph n t
ki m.

gi a m ng s p x p. N u b ng, k t thc tm

N u nh h n, tm ki m kho trong n a

u c a m ng (v n theo ki u nh phn).

N u l n h n, tm ki m kho trong n a sau c a m ng (v n theo ki u nh phn).


Qu trnh k t thc khi kho b ng ph n t gi a m ng, ho c cc o n ch cn m t ph n t .
Ch ng trnh 5.1b ci t th t c tm ki m nh phn trn l p m ng Array v i cc ph n t c ki u
int (kho tm ki m c ng c ki u int).
Ch

ng trnh 5.1b

package vidu.chuong5;
class Array{
private int[] elements;
/* Ph

ng th c truy nh p cc ph n t

c a m ng */

public int[] get(){


return elements;
}
public void set(int[] elements){
this.elements = elements;

81

}
/* Ph

ng th c tm ki m */

public int search(int key){


quick(0, elements.length-1);

// S p x p m ng, dng quicksort

int low=0, hight=elements.length-1, mid;


while(low <= hight){
mid = (low + hight)/2;

// Ch

gi a

if(key > elements[mid])


low = mid+1;

// Tm n a sau

else if(key < elements[mid])


hight= mid-1;
else return mid;

// Tm n a

// Tm th y

}
return -1;

// Khng tm th y

}
/* Ph

ng th c s p x p */

public void sort(){


quick(0, elements.length-1);
}
/* Ph

ng th c s p x p nhanh */

private void quick(int left, int right){


int i=left, j=right;
int pivot=(left+right)/2, tmp;
do{
while(elements[i]<elements[pivot] && i<right)i++;

// Qut xui

while(elements[j]>elements[pivot] && j>left)j++;

// Qut ng

if(i<=j){

//

i ch

hai ph n t

tmp = elements[i];
elements[i] = elements[j];
elements[j] = tmp;
}
}while (i<=j);
c ch t

if(left < j)

quick(left, j);

// S p x p

o n tr

if(i < right)

quick(i, right);

// S p x p

o n sau ch t

}
}

82

5.3 NG N X P V HNG

5.3.1 Ng n x p
Ng n x p (stack) c cc thu c tnh c c b :
M ng l u cc nt c a ng n x p
Cc thao tc

i v i ng n x p:

Thm vo m t nt
L y ra m t nt

nh ngh a m t nt
n gi n, ta ch
Ch

nh ngh a m t nt c gi tr ki u int:

ng trnh 5.2a

package vidu.chuong5;
public class Node{
private int value;
/* Cc ph

ng th c kh i d ng */

public Node(){
value = 0;
}
public Node(int value){
this.value = value;
}
/* Ph

ng th c truy nh p thu c tnh value */

public int getValue(){


return value;
}
public void setValue(int value){
this.value = value;
}
}

Ci

t ng n x p
Ta coi nh ng n x p l cu i m ng l u gi cc nt. Do , cc thao tc thm vo v l y ra
s thm vo cu i m ng ho c l y nt cu i m ng ra.
M ng cc gi tr

c khai bo

ng

ti t ki m b nh .

83

Ch

ng trnh 5.2b

package vidu.chuong5;
public class MyStack{
private Node[] values;
/* Cc ph

ng th c kh i d ng */

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

ng th c l y ra m t node t

stack */

public Node pop(){


Node result = null;
if((values != null)&&(values.length > 0)){
result = values[values.length - 1];
// Lo i b

node cu i cng

Node[] tmpNode = new Node[values.length - 1];


for(int i=0; i<values.length 1; i++)
tmpNode[i] = values[i];
this.values = tmpNode;
}
return result;
}
/* Ph

ng th c thm m t node vo stack */

public void push(Node node){


if(values == null){ // Ng n x p

ang r ng

values = new Node[1];


values[0] = node;
}else{

// Ng n x p

c d

li u

Node[] tmpNode = new Node[values.length + 1];


for(int i=0; i<values.length; i++)
tmpNode[i] = values[i];
tmpNode[values.length] = node;
this.values = tmpNode;
}
}
}

84

5.3.2 Hng
Hng

i (queue) c cc thu c tnh c c b :


M ng cc gi tr trong hng

Cc thao tc v i hng

i:

Thm vo m t nt vo cu i hng
L y ra m t nt t
Ch

ng trnh 5.3 ci

Ch

u hng

t l p hng

i
i.

ng trnh 5.3

package vidu.chuong5;
public class MyQueu{
private Node[] values;
/* Cc ph

ng th c kh i d ng */

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

ng th c l y ra m t node t

u queu */

public Node remove(){


Node result = null;
if((values != null)&&(values.length > 0)){
result = values[0];
// Lo i b

node

u hng

Node[] tmpNode = new Node[values.length - 1];


for(int i=0; i<values.length 1; i++)
tmpNode[i] = values[i+1];
this.values = tmpNode;
}
return result;
}
/* Ph

ng th c thm m t node vo cu i queu */

public void insert(Node node){


if(values == null){ // Hng

ang r ng

values = new Node[1];


values[0] = node;
}else{

// Hng

c d

li u

Node[] tmpNode = new Node[values.length + 1];


for(int i=0; i<values.length; i++)

85

tmpNode[i] = values[i];
tmpNode[values.length] = node;
this.values = tmpNode;
}
}
}

5.4 DANH SCH LIN K T


N i dung ph n ny t p trung ci
Danh sch lin k t

t hai lo i danh sch lin k t c b n:

Danh sch lin k t kp

5.4.1 Danh sch lin k t

nh ngh a m t nt c a danh sch lin k t


M t nt c a danh sch lin k t

n bao g m:

Gi tr c a nt, c d ng l m t
trnh 5.2a

it

ng ki u Node

nh ngh a trong ch

ng

Nt ti p theo c a nt .
M t nt c a danh sch lin k t
Ch

c ci

t trong ch

ng trnh 5.4a.

ng trnh 5.4a

package vidu.chuong5;
public class SimpleNode{
private Node value;

// Gi tr

c a node l m t

i t

ng ki u Node

private SimpleNode next; // Node ti p theo c a danh sch lin k t


/* Cc ph

ng th c kh i d ng */

public SimpleNode(){
value = new Node();
next = null;
}
public SimpleNode(Node value){
this.value = value;
next = null;
}
/* Ph

ng th c truy nh p thu c tnh value */

public Node getValue(){


return value;
}

86

public void setValue(Node value){


this.value = value;
}
/* Ph

ng th c truy nh p thu c tnh next */

public SimpleNode getNext(){


return next;
}
public void setNext(SimpleNode next){
this.next = next;
}
}

nh ngh a

nh tiu

c a danh sch lin k t

nh tiu c a danh sch lin k t n l m t


sch. i t ng ny l u cc thng tin:
Ch

n nt th c s

Ch

n nt cu i cng c a danh sch

L u gi s l
Ch

ng trnh 5.4b ci

Ch

it

ng khc v i m t nt thng th

ng c a danh

u tin c a danh sch

ng nt th c s trong danh sch.


tl p

nh tiu

c a danh sch.

ng trnh 5.4b

package vidu.chuong5;
public class HeaderSimpleNode{
private int nodeNumber;
private SimpleNode header;
private SimpleNode tailer;
/* Ph

ng th c kh i d ng */

public HeaderSimpleNode(){
nodeNumber = 0;
header = null;
tailer = null;
}
/* Ph

ng th c truy nh p thu c tnh nodeNumber */

public int getNodeNumber(){


return nodeNumber;
}
public void setNodeNumber(int nodeNumber){
this.nodeNumber = nodeNumber;

87

}
/* Ph

ng th c truy nh p thu c tnh header */

public SimpleNode getHeader(){


return header;
}
public void setHeader(SimpleNode header){
this.header = header;
}
/* Ph

ng th c truy nh p thu c tnh tailer */

public SimpleNode getTailer(){


return tailer;
}
public void setTailer(SimpleNode tailer){
this.tailer = tailer;
}
}

Ci

t danh sch lin k t

Danh sch lin k t


thao tc chnh:

n c thu c tnh c c b l m t

it

ng ki u HeaderSimpleNode. V c cc

Thm m t ph n t vo m t v tr b t k: n u v tr nh h n 0, thm vo u danh sch. N u


v tr l n h n
di danh sch, thm vo cu i. Tr ng h p cn l i, chn vo danh sch
m t cch bnh th ng.
Lo i b m t ph n t
v tr b t k: Ch lo i b khi v tr ch ra n m trong ph m vi
danh sch. Ph ng th c ny tr v nt b lo i b , c ki u SimpleNode.

di

Duy t ton b danh sch: Tr v gi tr c a t t c cc ph n t c trong danh sch. Gi tr


tr v l m t m ng cc ph n t gi tr c ki u Node.
Ch

ng trnh 5.4c ci

Ch

t l p danh sch lin k t

n.

ng trnh 5.4c

package vidu.chuong5;
public class SimpleList{
private HeaderSimpleNode myList;
/* Cc ph

ng th c kh i d ng */

public SimpleList(){
myList = new HeaderSimpleNode();
}

88

/* Ph

ng th c chn thm m t node vo v

tr @position */

public void insert(Node value, int position){


// T o m t node m i
SimpleNode newNode = new SimpleNode(value);
if(position <= 0){ // Chn vo

newNode.setNext(myList.getHeader());
myList.setHeader(newNode);
if(myList.getNodeNumber() == 0) // Danh sch ban

u r ng

myList.setTailer(newNode);
}else if(position >= myList.getNodeNumber()){ // Chn vo cu i
if(myList.getNodeNumber() == 0){ // Danh sch ban

u r ng

myList.setHeader(newNode);
myList.setTailer(newNode);
}else{ // Danh sch khng r ng
myList.getTailer().setNext(newNode);
myList.setTailer(newNode);
}
}else{ // Chn vo gi a
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);
}
// C p nh t s

ng node c a danh sch

myList.setNodeNumber(myList.getNodeNumber() + 1);
}
/* Ph

ng th c lo i b

m t node

tr @position */

public SimpleNode remove(int position){


if((myList.getNodeNumber() == 0)||
(position < 0)||(position >= myList.getNodeNumber()))
return null;
SimpleNode result = null;
if(position == 0){ // Lo i ph n t

result = myList.getHeader();
myList.setHeader(myList.getHeader().getNext());

89

if(myList.getNodeNumber() == 1) // Danh sch ch

c 1 ph n t

myList.setTailer(null);
}else if(position==myList.getNodeNumber()-1){ // Lo i ph n t

cu i

result = myList.getTailer();
SimpleNode current = myList.getHeader();
while(!current.getNext().equals(myList.getTailer()))
current = current.getNext();
current.setNext(null);
myList.setTailer(current);
}else{ // Lo i ph n t

n m gi a 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;
}
// C p nh t s

ng node c a danh sch

myList.setNodeNumber(myList.getNodeNumber() - 1);
result.setNext(null);
return result;
}
/* Ph

ng th c duy t ton b

danh sch */

public Node[] travese(){


// Danh sch r ng
if(myList.getNodeNumber() == 0)
return null;
// Danh sch khng r ng
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;
}
}

5.4.2 Danh sch lin k t kp


nh ngh a m t nt c a danh sch lin k t kp
M t nt c a danh sch lin k t kp bao g m:
Gi tr c a nt, c d ng l m t
trnh 5.2a

it

ng ki u Node

nh ngh a trong ch

ng

Nt ti p theo c a nt .
Nt tr

c c a nt .

M t nt c a danh sch lin k t kp


Ch

c ci

t trong ch

ng trnh 5.5a.

ng trnh 5.5a

package vidu.chuong5;
public class DoubleNode{
private Node value;
private DoubleNode prev;
private DoubleNode next;
/* Cc ph

ng th c kh i d ng */

public DoubleNode(){
value = new Node();
prev = null;
next = null;
}
public DoubleNode(Node value){
this.value = value;
prev = null;
next = null;
}
/* Ph

ng th c truy nh p thu c tnh value */

public Node getValue(){


return value;
}
public void setValue(Node value){
this.value = value;
}
/* Ph

ng th c truy nh p thu c tnh next */

91

public DoubleNode getNext(){


return next;
}
public void setNext(DoubleNode next){
this.next = next;
}
/* Ph

ng th c truy nh p thu c tnh prev */

public DoubleNode getPrev(){


return prev;
}
public void setPrev(DoubleNode prev){
this.prev = prev;
}
}

nh ngh a

nh tiu

c a danh sch lin k t kp

nh tiu c a danh sch lin k t n l m t


sch. i t ng ny l u cc thng tin:
Ch

n nt th c s

Ch

n nt cu i cng c a danh sch

L u gi s l
Ch

ng trnh 5.5b ci

Ch

it

ng khc v i m t nt thng th

ng c a danh

u tin c a danh sch

ng nt th c s trong danh sch.


tl p

nh tiu

c a danh sch.

ng trnh 5.5b

package vidu.chuong5;
public class HeaderDoubleNode{
private int nodeNumber;
private DoubleNode header;
private DoubleNode tailer;
/* Ph

ng th c kh i d ng */

public HeaderDoubleNode(){
nodeNumber = 0;
header = null;
tailer = null;
}
/* Ph

ng th c truy nh p thu c tnh nodeNumber */

public int getNodeNumber(){


return nodeNumber;

92

}
public void setNodeNumber(int nodeNumber){
this.nodeNumber = nodeNumber;
}
/* Ph

ng th c truy nh p thu c tnh header */

public DoubleNode getHeader(){


return header;
}
public void setHeader(DoubleNode header){
this.header = header;
}
/* Ph

ng th c truy nh p thu c tnh tailer */

public DoubleNode getTailer(){


return tailer;
}
public void setTailer(DoubleNode tailer){
this.tailer = tailer;
}
}

Ci

t danh sch lin k t kp

Danh sch lin k t kp c thu c tnh c c b l m


thao tc chnh:

it

ng ki u HeaderDoubleNode. V c cc

Thm m t ph n t vo m t v tr b t k: n u v tr nh h n 0, thm vo u danh sch. N u


v tr l n h n
di danh sch, thm vo cu i. Tr ng h p cn l i, chn vo danh sch
m t cch bnh th ng.
Lo i b m t ph n t
v tr b t k: Ch lo i b khi v tr ch ra n m trong ph m vi
danh sch. Ph ng th c ny tr v nt b lo i b , c ki u DoubleNode.

di

Duy t ton b danh sch: Tr v gi tr c a t t c cc ph n t c trong danh sch. Gi tr


tr v l m t m ng cc ph n t gi tr c ki u Node.
Ch
Ch

ng trnh 5.5c ci

t l p danh sch lin k t kp.

ng trnh 5.5c

package vidu.chuong5;
public class DoubleList{
private HeaderDoubleNode myList;
/* Cc ph

ng th c kh i d ng */

public DoubleList(){

93

myList = new HeaderDoubleNode();


}
/* Ph

ng th c chn thm m t node vo v

tr @position */

public void insert(Node value, int position){


// T o m t node m i
DoubleNode newNode = new DoubleNode(value);
if(position <= 0){ // Chn vo

newNode.setNext(myList.getHeader());
myList.getHeader().setPrev(newNode);
myList.setHeader(newNode);
if(myList.getNodeNumber() == 0) // Danh sch ban

u r ng

myList.setTailer(newNode);
}else if(position >= myList.getNodeNumber()){ // Chn vo cu i
if(myList.getNodeNumber() == 0){ // Danh sch ban

u r ng

myList.setHeader(newNode);
myList.setTailer(newNode);
}else{ // Danh sch khng r ng
newNode.setPrev(myList.getTailer());
myList.getTailer().setNext(newNode);
myList.setTailer(newNode);
}
}else{ // Chn vo gi a
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);
}
// C p nh t s

ng node c a danh sch

myList.setNodeNumber(myList.getNodeNumber() + 1);
}
/* Ph

ng th c lo i b

m t node

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){ // Lo i ph n t

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 ph n t

myList.setTailer(null);
}else if(position==myList.getNodeNumber()-1){ // Lo i ph n t

cu i

result = myList.getTailer();
myList.setTailer(myList.getTailer().getPrev());
myList.getTailer().setNext(null);
}else{ // Lo i ph n t

n m gi a 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;
}
// C p nh t s

ng node c a danh sch

myList.setNodeNumber(myList.getNodeNumber() - 1);
result.setPrev(null);
result.setNext(null);
return result;
}
/* Ph

ng th c duy t ton b

danh sch */

public Node[] travese(){


// Danh sch r ng
if(myList.getNodeNumber() == 0)
return null;
// Danh sch khng r ng
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 c a cy nh phn

M t nt c a cy nh phn c cc thu c tnh sau:


Gi tr c a nt l m t

Ch

ng ki u Node

Ch

n nt con bn tri c a n.

Ch

n nt con bn ph i c a n.

ng trnh 5.6a ci

Ch

it

t m t nt c a cy nh phn.

ng trnh 5.6a

package vidu.chuong5;
public class BinaryTreeNode{
private Node value;
private BinaryTreeNode left;
private BinaryTreeNode right;
/* Cc ph

ng th c kh i d ng */

public BinaryTreeNode(){
value = new Node();
left = null;
right = null;
}
public BinaryTreeNode(Node value){
this.value = value;
left = null;
right = null;
}
/* Ph

ng th c truy nh p thu c tnh value */

public Node getValue(){


return value;
}

96

public void setValue(Node value){


this.value = value;
}
/* Ph

ng th c truy nh p thu c tnh left */

public BinaryTreeNode getLeft(){


return left;
}
public void setLeft(BinaryTreeNode left){
this.left = left;
}
/* Ph

ng th c truy nh p thu c tnh right */

public BinaryTreeNode getRight(){


return right;
}
public void setRight(BinaryTreeNode right){
this.right = right;
}
}

Ci

t cy nh phn

V i cy nh phn, ta ch c n l u gi m t bi n c c b l nt g c c a cy. Khi , ta c n


thao tc c b n trn cy nh phn nh sau:
Tm m t nt c gi tr (ho c l kho) xc

n cc

nh

Thm nt con tri c a m t nt


Thm nt con ph i c a m t nt
Xo nt con tri c a m t nt
Xo nt con ph i c a m t nt
Duy t cy theo th t tr

Duy t cy theo th t gi a
Duy t cy theo th t sau
Ch
Ch

ng trnh 5.6b ci

t l p cy nh phn.

ng trnh 5.6b

package vidu.chuong5;
public class BinaryTree{
private BinaryTreeNode root;
/* Cc ph

ng th c kh i d ng */

97

public BinaryTree(){
root = null;
}
public BinaryTree(Node value){
root = new BinaryTreeNode(value);
}
/* Ph

ng th c tr

node c gi tr

@value */

public BinaryTreeNode getNode(Node value){


return searchNode(root, value);
}
/* Ph

ng th c tm ki m

qui m t node c gi tr

@value

trn m t cy con c g c 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 ph i
if(result == null)
result = searchNode(treeNode.getRight(), value);
return result;
}
/* Ph

ng th c thm node con bn tri c a 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;
}
/* Ph

ng th c thm node con bn ph i c a 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;
}
/* Ph

ng th c xa node con bn tri c a node @treeNode */

public boolean removeLeft(BinaryTreeNode treeNode){


// Node hi n t i r ng
if(treeNode == null)
return false;
// Node con tri khng ph i l node l
if((treeNode.getLeft() != null)&&
((treeNode.getLeft().getLeft() != null)||
(treeNode.getLeft().getRight() != null)))
return false;
treeNode.setLeft(null);
return true;
}
/* Ph

ng th c xo node con bn ph i c a node @treeNode */

public boolean removeRight(BinaryTreeNode treeNode){


// Node hi n t i r ng
if(treeNode == null)
return false;
// Node con ph i khng ph i l node l
if((treeNode.getRight() != null)&&
((treeNode.getRight().getLeft() != null)||
(treeNode.getRight().getRight() != null)))
return false;
treeNode.setRight(null);
return true;
}
/* Ph

ng th c duy t cy theo th

tr

c */

public Node[] preTravese(){


Node[] result = null;
preOrder(root, result);
return result;
}
/* Ph

ng th c duy t cy con @treeNode theo th

v k t qu

tr

tr

n m 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);
}
}
/* Ph

ng th c thm m t @node vo cu i m t danh sch cc @nodes*/

private void addNode(Node[] nodes, Node node){


if(nodes == null){// Danh sch ban

u r ng

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;
}
/* Ph

ng th c duy t cy theo th

gi a */

public Node[] inTravese(){


Node[] result = null;
inOrder(root, result);
return result;
}
/* Ph

ng th c duy t cy con @treeNode theo th

v k t qu

tr

gi a

n m trong @result */

private void inOrder(BinaryTreeNode treeNode, Node[] result){


if(treeNode != null){
inOrder(treeNode.getLeft(), result);
addNode(result, treeNode.getValue());
inOrder(treeNode.getRight(), result);
}
}
/* Ph

ng th c duy t cy theo th

sau */

public Node[] posTravese(){


Node[] result = null;
posOrder(root, result);
return result;
}

100

/* Ph

ng th c duy t cy con @treeNode theo th

v k t qu

tr

sau

n m 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 Bi u di n

th

i v i nh c a
th ,
n gi n, ta nh s
nh t 0 n n-1 cho
th c n
c nh, ta s s d ng ng th i hai cch bi u di n l ma tr n k v danh sch c nh:

nh.

iv i

Ma tr n k dng trong cc thao tc tnh ton. Ma tr n k l m t ma tr n hai chi u n*n, n u


A[i,j]=1 th c c nh t i n j, n u A[i,j]=0 th khng c c nh t i n j.
Danh sch c nh dng kh i t o
th cho thu n ti n. M i ph n t c a danh sch l m t
c nh, bi u di n b ng hai s l hai nh c a u mt c nh.
Ch ng trnh 5.7a ci
danh sch c nh.
Ch

t l p bi u di n m t c nh c a

th t ng qut (c tnh

n tr ng s ) theo

ng trnh 5.7a

package vidu.chuong5;
public class Bridge{
private int start;
private int end;
private int weight;
/* Cc ph

ng th c kh i d ng */

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

/* Ph

ng th c truy nh p thu c tnh start */

public int getStart(){


return start;
}
public void setStart(int start){
this.start = start;
}
/* Ph

ng th c truy nh p thu c tnh end */

public int getEnd(){


return end;
}
public void setEnd(int end){
this.end = end;
}
/* Ph

ng th c truy nh p thu c tnh weight */

public int getWeight(){


return weight;
}
public void setWeight(int weight){
this.weight = weight;
}
}

5.6.2 Ci
M t

th khng c tr ng s

th khng c tr ng s c cc thu c tnh c c b sau:


S l

ng cc

nh. T s l

ng cc

nh c th suy ra t p cc nhn c a cc

Ma tr n k bi u di n cc c nh. A[i,j]=1 th c c nh t i
c nh t i n j.
Danh sch c nh khng c n tnh
ng b v i nhau.
Cc thao tc c b n trn

n tr ng s . Danh sch c nh v ma tr n k

ng i gi a hai

ng trnh 5.7b ci

c c p nh t

th

nh b t k

Tm cy khung (cy bao trm) c a


Ch

n j, n u A[i,j]=0 th khng c

th khng c tr ng s :

Ki m tra tnh lin thng c a


Tm

nh.

tl p

th

th khng c tr ng s .

102

Ch

ng trnh 5.7b

package vidu.chuong5;
public class Graph{
private int nodeNumber; // S

ng

nh

private int[][] A;

// Ma tr n k

private Bridge[] B;

// Danh sch c nh

/* Cc ph

ng th c kh i d ng */

public Graph(int nodeNumber, int[][] A){


this.nodeNumber = nodeNumber;
this.A = A;
//

ng b

danh sch c nh

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 tr n 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;
}
}
}
/* Ph

ng th c truy nh p thu c tnh nodeNumber */

public int getNodeNumber(){


return nodeNumber;
}
public void setNodeNumber(int nodeNumber){
this.nodeNumber = nodeNumber;
}
/* Thm m t c nh vo

th

*/

public void addBridge(Bridge bridge){


if(B == null){

// Ban

u ch a c c nh no

B = new Bridge[1];
B[0] = bridge;
}else{
Bridge *tmp = new Bridge[B.length + 1];
for(int i=0; i<B.length; i++)
tmp[i] = B[i];
tmp[B.length] = bridge;
}
// C p nh t ma tr n k
A[bridge.getStart()][bridge.getEnd()] = 1;
}
/* Ki m tra tnh lin thng c a

th

*/

public boolean isConnected(){


// M ng

nh

u duy t node

boolean[] visited = new boolean[nodeNumber];


for(int i=0; i<nodeNumber; i++)
visited[i] = false;
int[] queue = new int[nodeNumber];

// Hng

i, duy t BFS

int front=0, tail = 0;


int size = 1;

// S

ng

nh lin thng

queue[0] = 0;
visited[0] = true;

// Kh i t o hng

while(front <= tail){

//

m s

nh lin thng

int u = queue[front];
front++;

104

for(int j=0; j<nodeNumber; j++)


if(A[u][j] == 1)&&(!visited[j]){
tail++;
queue[tail] = j;
visited[j] = true;
size++;
}
}
// N u s

nh lin thng b ng nodeNumber th

th

l lin thng

if(size == nodeNumber) return true;


return false;
}
/* Tm

ng

i gi a hai

nh b t k */

public Bridge[] way(int start, int end){


// M ng

nh

u duy t node

boolean[] visited = new boolean[nodeNumber];


for(int i=0; i<nodeNumber; i++)
visited[i] = false;
int[] prev = new int[nodeNumber];

// M ng l u v t

int[] queue = new int[nodeNumber];

// Hng

ng

i, duy t BFS

int front=0, tail = 0;


queue[0] = start;
visited[start] = true;

// Kh i t o hng

while(front <= tail)&&(!visited[end]){ // Tm

ng

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;
}
}
// n u ch a

c node @end th khng c

ng

if(!visited[end]) return null;


/* Tr

ng h p c

ng

i, L u v t vo m t stack */

int[] stack = new int[nodeNumber];


int top = 0;
stack[top] = end;
while(stack[top] != start){
int v = prev[stack[top]];

105

top++;
stack[top] = v;
}
/*

c k t qu

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 c a

th

*/

public Graph tree(){


// N u

th

khng lin thng, s

khng c cy bao trm

if(!isConnected())
return null;
// Kh i t o cy bao trm, c ng l m t

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;

// Ch a c c nh no

Graph result = new Graph(nodeNumber, newA);


// M ng

nh d u duy t node

boolean[] visited = new boolean[nodeNumber];


for(int i=0; i<nodeNumber; i++)
visited[i] = false;
int[] queue = new int[nodeNumber];

// Hng

i, duy t BFS

int front=0, tail = 0;


queue[0] = 0;
visited[0] = true;

// Kh i t o hng

while(front <= tail){

// Tm c nh c a CBT

int u = queue[front];
front++;
for(int j=0; j<nodeNumber; j++)
if(A[u][j] == 1)&&(!visited[j]){
tail++;

106

queue[tail] = j;
visited[j] = true;
result.addBridge(new Bridge(u,j));// B

sung c nh vo CBT

}
}
return result;
}
}

5.6.3 Ci
M t

th c tr ng s

th c tr ng s c cc thu c tnh c c b sau:


S l

ng cc

nh. T s l

ng cc

nh c th suy ra t p cc nhn c a cc

nh.

Ma tr n k bi u di n cc c nh c tnh n tr ng s : A[i,j]=tr ng s c nh ij. N u gi a i v j


khng c c nh th gi tr ny l v cng (t
nh ngh a trong ch ng trnh - maxWeight)
Danh sch c nh c tnh n thu c tnh tr ng s (tr ng s c th m, nh ng gi s khng
c chu trnh m). Danh sch c nh v ma tr n k
c c p nh t ng b v i nhau.
Cc thao tc c b n trn

th c tr ng s :

Ki m tra tnh lin thng c a


Tm

th

ng i ng n nh t gi a hai

nh b t k

Tm cy khung (cy bao trm) nh nh t c a


Ch
Ch

ng trnh 5.7c ci

tl p

th

th c tr ng s .

ng trnh 5.7c

package vidu.chuong5;
public class WeightedGraph{
private int nodeNumber; // S

ng

nh

private int[][] A;

// Ma tr n k

private Bridge[][] B;

// Danh sch c nh

private static int maxWeight = 10000;


/* Cc ph

ng th c kh i d ng */

public WeightedGraph(int nodeNumber, int[][] A){


this.nodeNumber = nodeNumber;
this.A = A;
//

ng b

danh sch c nh

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 tr n 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();
}
}
}
/* Ph

ng th c truy nh p thu c tnh nodeNumber */

public int getNodeNumber(){


return nodeNumber;
}
public void setNodeNumber(int nodeNumber){
this.nodeNumber = nodeNumber;
}
/* Thm m t c nh vo

th

*/

public void addBridge(Bridge bridge){


if(B == null){

// Ban

u ch a c c nh 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;
}
// C p nh t ma tr n k
A[bridge.getStart()][bridge.getEnd()] = bridge.getWeight();
}
/* Ki m tra tnh lin thng c a

th

*/

public boolean isConnected(){


// M ng

nh

u duy t node

boolean[] visited = new boolean[nodeNumber];


for(int i=0; i<nodeNumber; i++)
visited[i] = false;
int[] queue = new int[nodeNumber];

// Hng

i, duy t BFS

int front=0, tail = 0;


int size = 1;

// S

ng

nh lin thng

queue[0] = 0;
visited[0] = true;

// Kh i t o hng

while(front <= tail){

//

m s

nh lin thng

int u = queue[front];
front++;
for(int j=0; j<nodeNumber; j++)
if(A[u][j] < maxWeight)&&(!visited[j]){
tail++;
queue[tail] = j;
visited[j] = true;
size++;
}
}
// N u s

nh lin thng b ng nodeNumber th

th

l lin thng

if(size == nodeNumber) return true;


return false;
}
/* Tm

ng

i ng n nh t gi a hai

nh b t k, Ford-Bellman */

public Bridge[] minWay(int start, int end){


int[] prev = new int[nodeNumber];

// M ng l u v t

int[] distance = new int[nodeNumber];

// Kho ng cch

ng

n cc node

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;
}
}
// n u ch a

c node @end th khng c

ng

if(distance[end] == maxWeight) return null;


/* Tr

ng h p c

ng

i, L u v t vo m t 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 k t qu

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

nh t c a

th

*/

public WeightedGraph minTree(){


// N u

th

khng lin thng, s

khng c cy bao trm

if(!isConnected())
return null;
// Kh i t o cy bao trm, c ng l m t

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;

// Ch a c c nh no

WeightedGraph result = new WeightedGraph(nodeNumber, newA);


// S p x p c nh khng gi m
for(int i=0; i<B.length; i++)
for(int j=i+1; j<B.length; j++)
if(B[i].getWeight() > B[j].getWeight()){
Bridge tmp = B[i];
B[i] = B[j];
B[j] = tmp;
}
int index = 0, bridgeNumber = 0;
while(bridgeNumber < nodeNumber)&&(index < B.length){
if(result.minWay(B[index].getStart(),B[index].getEnd())==null){
result.addBridge(
new Bridge(B[index].getStart(),B[index].getEnd()));
bridgeNumber++;
}
index++;
}
return result;
}
}

5.7 CASE STUDY III


Trong ph n ny, ta s s d ng cc l p i t
hng i, danh sch lin k t, cy nh phn v

ng
th .

c ci

t trong ch

ng ny: ng n x p,

Ch ng trnh 5.8 ci t m t ch ng trnh t ng h p, s d ng menu cho cc i t ng: stack,


queue, list. V i m i i t ng, c m t menu con t ng ng v i cc thao tc trn i t ng .
V i cc i t ng cn l i,
c coi nh bi t p m r ng c a ph n ny.
Ch

ng trnh 5.8

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

111

while (true) {
System.out.println("**********************************");
System.out.println("

CASE STUDY 3

");

System.out.println("

----------o0o----------

");

System.out.println(" 1. Thao tac voi ngan xep

");

System.out.println(" 2. Thao tac voi hang doi

");

System.out.println(" 3. Thao tac voi danh sach

");

System.out.println(" 10.Thoat!

");

System.out.println("**********************************");
System.out.print(" |==> Chon chuc nang: ");
int function = Integer.parseInt(br.readLine());
CaseStudy3 ob3 = new CaseStudy3();
switch(function){
case 1:

// Thao tc v i ng n x p

ob3.stack(br);
break;
case 2:

// Thao tc v i hng

ob3.queue(br);
break;
case 3:

// Thao tc v i danh sch

ob3.list(br);
break;
case 10: // Thot kh i ch

ng trnh

System.exit(1);
}
}
}
catch(Exception ex)
{
System.out.println("Loi o ham 'main': ");
ex.printStackTrace();
}
}
/* Thao tc v i ng n x p */
public void stack(BufferedReader br){
MyStack stack = new MyStack();
try{
while (true) {
System.out.println("**********************************");
System.out.println("

THAO TAC VOI NGAN XEP

");

112

System.out.println("

----------o0o----------

System.out.println(" 1. Them mot phan tu vao stack

");
");

System.out.println(" 2. Lay mot phan tu ra khoi stack ");


System.out.println(" 3. Lay het cac phan tu cua stack ");
System.out.println(" 10.Thoat!

");

System.out.println("**********************************");
System.out.print(" |==> Chon chuc nang: ");
int function = Integer.parseInt(br.readLine());
switch(function){
case 1:

// Thm m t ph n t

vo ng n x p

System.out.print(Gia tri phan tu them vao:);


int phantu = Integer.parseInt(br.readLine());
stack.push(new Node(phantu));
break;
case 2:

// L y m t ph n t

ra kh i ng n x p

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:

// L y t t c

cc ph n t

c a ng n x p

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 kh i ch

ng trnh con

return;
}
}
}
catch(Exception ex)
{
ex.printStackTrace();
}
}

113

/* Thao tc v i hng

i */

public void queue(BufferedReader br){


MyQueue queue = new MyQueue();
try{
while (true) {
System.out.println("**********************************");
System.out.println("

THAO TAC VOI HANG DOI

");

System.out.println("

----------o0o----------

");

System.out.println(" 1. Them mot phan tu vao queue

");

System.out.println(" 2. Lay mot phan tu ra khoi queue ");


System.out.println(" 3. Lay het cac phan tu cua queue ");
System.out.println(" 10.Thoat!

");

System.out.println("**********************************");
System.out.print(" |==> Chon chuc nang: ");
int function = Integer.parseInt(br.readLine());
switch(function){
case 1:

// Thm m t ph n t

vo hng

System.out.print(Gia tri phan tu them vao:);


int phantu = Integer.parseInt(br.readLine());
queue.insert(new Node(phantu));
break;
case 2:

// L y m t ph n t

ra kh i hng

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:

// L y t t c

cc ph n t

c a hng

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 kh i ch

ng trnh con

return;
}
}

114

}
catch(Exception ex)
{
ex.printStackTrace();
}
}
/* Thao tc v i danh sch lin k t

n */

public void list(BufferedReader br){


SimpleList list = new SimpleList();
try{
while (true) {
System.out.println("**********************************");
System.out.println("

THAO TAC VOI DANH SACH DON

");

System.out.println("

--------------o0o-------------

");

System.out.println(" 1. Them mot phan tu vao list

");

System.out.println(" 2. Lay mot phan tu ra khoi list

");

System.out.println(" 3. Duyet cac phan tu cua list

");

System.out.println(" 10.Thoat!

");

System.out.println("**********************************");
System.out.print(" |==> Chon chuc nang: ");
int function = Integer.parseInt(br.readLine());
switch(function){
case 1:

// Thm m t ph n 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:

// L y m t ph n t

ra kh i 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:

// L y t t c

cc ph n t

c a danh sch

System.out.println(Cac phan tu cua danh sach:);

115

Node[] nodes = list.travese();


for(int i=0; i<nodes.length; i++)
System.out.print( + nodes[i].getValue());
break;
case 10: // Thot kh i ch

ng trnh con

return;
}
}
}
catch(Exception ex)
{
ex.printStackTrace();
}
}
}

T NG K T CH

NG 5

N i dung ch ng 5 trnh by vi c bi u di n v ci
Java, bao g m cc gi i thu t:
Ph

ng php duy t

Ph

ng php

Ph

ng php s p x p

Ph

ng php tm ki m.

t m t s c u trc d li u tr u t

ng trn

qui

V cc c u trc d li u tr u t

ng:

Ng n x p (stack)
Hng

i (queue)

Danh sch lin k t (list): danh sch lin k t

n v danh sch lin k t kp.

Cy nh phn (binary tree)


th (graph):

th khng tr ng s v

th c tr ng s .

H n n a, ch ng ny c ng trnh by v minh ho cch s d ng cc


cc ng d ng.

CU H I V BI T P CH
1. Ci

t b sung cc ph

it

ng tr u t

ng trong

NG 5

ng th c s p x p khc vo l p Array trong m c 5.2.1:

a. S p x p n i b t
b. S p x p ch n.
c. S p x p vun

ng

d. S p x p tr n
2. Chuy n l p MyStack trong m c 5.3.1 thnh m t ng n x p c a cc k t . Sau , dng l p
ng n x p m i
o ng c m t xu k t do ng i dng nh p vo t bn phm.
116

3. Dng l p MyQueue
hnh:
M i ti n trnh

m ph ng ch

ng trnh qu n l ti n trnh

n gi n c a h

i u

c m ho b ng m t k hi u c ki u int.

Khi m t ti n trnh xu t hi n, n s

Khi CPU r i, m t ti n trnh trong hng


Yu c u vi t menu th c hi n ch

a vo m t hng
is

i.

c l y ra th c hi n.

ng trnh:

Thm m t ti n trnh
L y m t ti n trnh ra
Xem t t c cc ti n trnh ang c m t trong hng

i.

4. Thay i c u trc l p Node c a danh sch lin k t, sao cho value c ki u l l p Employee

c nh ngh a trong ch ng 4.
5. Dng danh sch lin k t n v i c u trc m i trong bi 4
qu n l nhn vin c a m t
cng ty: Thm vo m t nhn vin, xo i m t nhn vin, tm ki m m t nhn vin theo m t
tiu ch c th (ti n l ng, tu i), duy t t t c cc nhn vin.
6. Dng danh sch lin k t kp

th c hi n bi s 5.

7. Vi t ch ng trnh (d ng menu)
p d ng th c hi n cc thao tc trn cy nh phn, s
d ng l p BinaryTree trong m c 5.5.
8. Vi t ch ng trnh (d ng menu)
p d ng th c hi n cc thao tc trn
s , s d ng l p Graph trong m c 5.6.1.

th khng tr ng

9. Vi t ch ng trnh (d ng menu)
p d ng th c hi n cc thao tc trn
s d ng l p WeightedGraph trong m c 5.6.2.

th c tr ng s ,

117

CH

NG 6

L P TRNH GIAO DI N TRN JAVA


N i dung ch ng ny t p trung trnh by cc v n
lin quan
tr c a m t s
i t ng
c cung c p s n b i Java:
L p trnh giao di n v i cc

it

n l p trnh giao di n, v i s h

ng c b n v v i cc

it

ng multimedia.

L p trnh giao di n v i HTML&Applet


L p trnh giao di n v i SWING

6.1 GIAO DI N V I CC

IT

NG C

Trong m c ny, chng ta s tm hi u v s d ng cc


trong Java:

B N
it

ng c b n c a l p trnh giao di n

Cc

it

ng khung ch a (container) c b n: Frame, Panel, Dialog.

Cc

it

ng thnh ph n (component) c b n: Button, Label, TextField, TextArea

Cc s ki n c b n c a cc
Mu n s d ng cc

it

it

ng.

ng ny, c n thm l nh s d ng th vi n awt c a Java:

import java.awt.*;

6.1.1 Cc

it

ng container c b n

Cc i t ng container
c dng
ch a cc
ny c m t s ph ng th c chung nh sau:
it

it

ng thnh ph n khc. Cc l p

it

ng

add(Object):

Thm m t

ng (ki u component) vo container.

remove(Object):

Lo i b m t

removeAll():

Lo i b t t c cc

getComponent(int):

Tr v
i t ng thnh ph n c ch s l tham s
u vo.
Container qu n l cc i t ng ch a trong n d i d ng m ng.
Ch s c a cc thnh ph n l s th t khi thnh ph n
c
thm vo container.

getComponents():

Tr v m ng t t c cc

countComponents():

Tr v s l

it

ng cc

ng ra kh i container.
it

ng m container ang ch a.

it
it

ng m container ang ch a.

ng m container ang ch a.

Frame
Frame l m t i t ng c th dng m t cch c l p, ho c
c g n vo m t i t ng khc nh
m t i t ng conponent bnh th ng. Thng th ng, Frame
c dng nh m t c a s c a m t
ch ng trnh c l p. Cc ph ng th c c b n c a l p Frame:
Frame():

Kh i t o khng tham s .

Frame(String):

Kh i t o v i tham s l dng tiu

c a frame.

setSize(int, int):

nh kch c c a frame, tham s t


cao c a frame.

ng ng l chi u r ng v chi u
118

setVisible(boolean):

Cho php frame xu t hi n hay n i trn mn hnh.

setTitle(String)/getTitle(): Truy nh p thu c tnh dng tiu

c a frame.

setResizable(boolean): Thi t l p thu c tnh cho php thay

i kch c frame.

setIconImage(Image): Thi t l p nh icon


Ch

ng trnh 6.1 minh ho vi c s d ng m t

Ch

it

gc trn (bi u t

ng) c a frame.

ng c a l p Frame.

ng trnh 6.1

package vidu.chuong6;
import java.awt.*;
public class FrameDemo{
public static void main(String[] args) {
// Khai bo v kh i t o frame c tiu
Frame myFrame = new Frame(This is my Frame!);
myFrame.setSize(300,150);

//

nh kch c

myFrame.setVisible(true);

// Hi n th

frame

frame

}
}

Hnh 6.1: K t qu demo Frame

Panel
Panel c ng l m t dang khung ch a, nh ng kh n gi n. Panel ch dng
nhm cc i t ng
giao di n v i nhau. Thng th ng, panel
c dng trong m t c a s c a Frame ho c m t ng
d ng khc. Cc ph ng th c c b n c a l p Panel, ngoi cc ph ng th c chung c a container:
Panel():
Ch
Ch

Kh i t o khng tham s .

ng trnh 6.2 minh ho vi c s d ng m t Panel trong m t Frame.


ng trnh 6.2

package vidu.chuong6;
import java.awt.*;
public class PanelDemo{
public static void main(String[] args) {
// Khai bo v kh i t o frame c tiu
Frame myFrame = new Frame(Frame has a panel!);
myFrame.setSize(300,150);

//

nh kch c

frame

Panel myPanel = new Panel();// Khai bo panel


myFrame.add(myPanel);

// Thm panel vo frame

myFrame.setVisible(true);

// Hi n th

frame

119

}
}

Hnh 6.2: K t qu demo Panel

Dialog
Dialog l m t i t ng c a s con c a m t c a s ch
s d ng km v i m t Frame. C hai d ng Dialog:

ng trnh chnh. Do v y, Dialog ch

Modal: Khi hi n c a s dialog, cc c a s khc c a ch


thao tc
c, ch thao tc
c trn c a s dialog.

ng trnh s b kho l i, khng

Non-modal: Khng kho cc c a s khc. Khi dialog xu t hi n, ng


chuy n sang thao tc trn cc c a s khc, n u c n.
Cc ph

i dng v n c th

ng th c c b n c a l p Dialog:
Dialog(Frame, boolean):

Kh i t o dialog, tham s th nh t l frame ch a dialog, tham


s th hai xc nh dialog c l modal hay khng.

Dialog(Frame, String, boolean): Kh i t o dialog, thm tham s th hai l dng tiu


dialog.
setVisible(boolean):

Thi t l p tr ng thi hi n th ho c n dialog trn mn hnh.

setSize(int, int):

nh kch c cho dialog, cc tham s t


v chi u cao c a dialog.

setTitle(String)/getTitle(): Truy nh p thu c tnh dng tiu


setResizable(boolean):

Thi t l p thu c tnh cho php thay

setLayout(Layout):

Thi t l p ch

hi n th cc

c a

ng ng l chi u r ng

c a dialog.
it

i kch c c a dialog.
ng ch a trong dialog.

Ch ng trnh 6.3 minh ho vi c thm m t dialog ( ang r ng, ch a c


vo m t frame.
Ch

it

ng thnh ph n no)

ng trnh 6.3

package vidu.chuong6;
import java.awt.*;
public class DialogDemo{
public static void main(String[] args) {
// Khai bo v kh i t o frame c tiu
Frame myFrame = new Frame(Frame has a dialog!);
myFrame.setSize(300,150);

//

nh kch c

frame

// Khai bo v kh i t o dialog
Dialog myDialog = new Dialog(myFrame, An empty dialog!, true);
myDialog.setSize(300,150); //

nh kch c

dialog

120

myDialog.setVisible(true); // Hi n th

dialog

}
}

Hnh 6.3: K t qu demo Dialog

6.1.2 Cc

it

ng component c b n

Cc i t ng component
c dng lm thnh ph n c a cc i t ng khung ch a, chng
khng th dng c l p, m lun ph i g n vo trong m t i t ng khung ch a container.

Label
Label (nhn) l m t i t ng
thay i tr c ti p
c. Cc ph

hi n th v n b n t nh, nh ng v n b n m ng
ng th c c b n c a Label:

i dng khng th

Label():

Kh i t o m t nhn r ng.

Label(String):

Kh i t o m t nhn v i n i dung v n b n l tham s

Label(String, int):

Kh i t o m t nhn c n i dung s n, tham s th hai xc nh cch


c n l c a nhn so v i khung ch a, bao g m {Label.CENTER,
Label.LEFT, Label.RIGHT}.

u vo.

setText(String)/getText(): Truy nh p n i dung v n b n c a nhn.


setAlignment(int)/getAlignment(): Truy nh p thu c tnh c n l c a nhn.
setFont(Font):
Ch
Ch

nh d ng phng ch c a nhn.

ng trnh 6.4 minh ho vi c s d ng nhn trong m t frame.


ng trnh 6.4

package vidu.chuong6;
import java.awt.*;
public class LabelDemo{
public static void main(String[] args) {
// Khai bo v kh i t o frame c tiu
Frame myFrame = new Frame(Frame has a label!);
myFrame.setSize(300,150);

//

nh kch c

frame

// Khai bo v kh i t o label
Label myLabel = new Label();
myLabel.setText(This is a label!);//Gn n i dung v n b n
myLabel.setAlignment(Label.CENTER);// C n l
myFrame.add(myLabel);

gi a

// G n label vo frame

121

myFrame.setVisible(true);

// Hi n th

frame

}
}

Hnh 6.4: K t qu demo Label

TextField v TextArea
y l hai i t ng dng
bi u di n v n b n v ng i dng c th thay i n i dung v n b n
ch a trong chng. i m khc bi t l TextField ch cho php m t dng v n b n, trong khi
TextArea cho php ch a nhi u dng v n b n. Cc ph ng th c chung c a hai l p ny:
setText(String)/getText(): Truy nh p thu c tnh n i dung v n b n ch a trong .
getSelectedText():

Tr v chu i v n b n

getSelectedStart():

Tr v v tr k t

u trong vng

c nh d u ch n (tnh t 0).

getSelectedEnd():

Tr v v tr k t cu i trong vng

c nh d u ch n (tnh t 0).

selectAll():
setEditable(boolean):
Cc ph

c bi en ( nh d u ch n) trong .

nh d u ch n ton v n b n.
Xc

nh vng v n b n c th edit

c hay khng.

ng th c khc c a l p TextField:
TextField():

Kh i t o m t v n b n r ng.

TextField(int):

Kh i t o m t v n b n r ng,

TextField(String):

Kh i t o m t v n b n c n i dung xc

r ng xc

TextField(String, int): Kh i t o v i n i dung c s n,

nh b i tham s vo.
nh b i tham s

r ng xc

u vo.

nh.

setEchoChar(char)/getEchoChar(): Truy nh p thu c tnh l k t thay th v n b n trong .


Thu c tnh ny
c dng khi ta c n che d u thng tin v n b n, v
d , g m t kh u c a ch ng trnh.
getColums():
Cc ph

Tr v

r ng c a v n b n.

ng th c khc c a l p TextArea:
TextArea():

Kh i t o m t vng v n b n r ng.

TextArea(int, int):

Kh i t o m t vng v n b n r ng, kch c (s dng, s c t) xc


nh b i tham s vo.

TextArea(String):

Kh i t o m t vng v n b n c n i dung xc
vo.

TextArea(String, int, int): Kh i t o vng v n b n v i n i dung c s n,


appendText(String):

nh b i tham s
r ng xc

nh.

Thm m t o n v n b n vo cu i o n v n b n trong vng.

insertText(String, int): Chn m t o n v n b n vo v tr xc


vng v n b n.

nh (tham s th hai) c a

122

replaceText(String, int, int): Thay th m t o n v n b n trong vng, nh d u b ng v tr


b t u v v tr k t thc (tham s th hai v th ba), b ng m t
o n v n b n m i (tham s th nh t).
getRows()/getColums(): Tr v s dng/c t c a vng v n b n.
Ch

ng trnh 6.5 minh ho vi c

Ch

t cc

it

ng v n b n v vng v n b n vo m t frame.

ng trnh 6.5

package vidu.chuong6;
import java.awt.*;
public class TextDemo{
public static void main(String[] args) {
// Khai bo v kh i t o frame c tiu
Frame myFrame = new Frame(Frame has some texts!);
myFrame.setSize(300,150);

//

nh kch c

frame

// Khai bo v kh i t o textField
TextField myTextField = new TextField(A text field!);
myFrame.add(myTextField);

// G n vo frame

// Khai bo v kh i t o textArea
TextArea myTextArea = new TextArea(5, 40);
String
str=The
+myTextField.getColumns();

TextFields

columns

is:

str += The TextAreas size is: + myTextArea.getRows()


+ * + myTextArea.getColumns();
myTextArea.setText(str);

// Thi t l p n i dung

myFrame.add(myTextArea);

// G n vo frame

myFrame.setVisible(true);

// Hi n th

frame

}
}

Hnh 6.5: K t qu demo Text

Button
Button l i t
c a nt nh n:

ng nt l nh, dng

Button(String):

th c hi n m t nhi m v xc

Kh i t o nt nh n v i tn xc

nh. Cc ph

ng th c c b n

nh trn nt.
123

setLabel(String)/getLabel(): Truy nh p tn c a nt nh n.
Ch

ng trnh 6.6 minh ho vi c t o m t nt nh n trong m t frame.

Ch

ng trnh 6.6

package vidu.chuong6;
import java.awt.*;
public class ButtonDemo{
public static void main(String[] args) {
// Khai bo v kh i t o frame c tiu
Frame myFrame = new Frame(Frame has a button!);
myFrame.setSize(300,150);

//

nh kch c

frame

// Khai bo v kh i t o button
Button myButton = new Button(Click!);
myFrame.add(myButton);

// G n vo frame

myFrame.setVisible(true);

// Hi n th

frame

}
}

Hnh 6.6: K t qu demo Button


Tuy nhin, khi click vo nt nh n ny, khng x y ra i u gi c . L do l chng ta ch a ci
vi c x l s ki n cho nt nh n. N i dung ph n 6.1.3 s trnh by vi c x l s ki n cho cc
t ng.

6.1.3 Cc s ki n c b n c a

it

t
i

ng

M i i t ng component c m t s s ki n xc nh, pht sinh t chnh


c p m t s l p s ki n c b n n m trong th gi java.awt.event:

it

ng . Java cung

import java.awt.event.*;

Cc l p s ki n c b n c a cc

it

ng bao g m:

ActionEvent:

Xu t hi n khi m t nt b click vo, m t danh sch (list)


m t menu
c ch n.

ComponentEvent:

Xu t hi n khi m t component b thay

FocusEvent:

Xu t hi n khi m t component c ho c m t focus.

ItemEvent:

Xu t hi n khi m t menu item


list item
c click vo.

c ch n,

i kch c , v tr, tr ng thi.

c ch n ho c b , khi checkbox ho c

124

WindowEvent:

Xu t hi n khi m t c a s
ra.

TextEvent:

Xu t hi n khi gi tr v n b n c a cc
TextArea b thay i.

MouseEvent:

Xu t hi n khi chu t

KeyEvent:

Xu t hi n khi c

Cc giao ti p

c ci

c m ra, kch ho t, ng l i ho c thot


i t

ng TextField v

c click, di chuy n qua, nh n xu ng v th ra.

u vo t bn phm.

x l cc s ki n trn:

ActionListener.
ComponentListener
FocusListener
ItemListener
WindowListener
TextListener
MouseListener v MouseMotionListener
KeyListener
Khi ci

t cc giao ti p ny, c n ci

t l i ph

public void actionPerformed(<

// Ci

i t

ng th c x l s ki n:
ng l p s

ki n>){

t l i m l nh

xc

nh s ki n pht sinh t component no, ta dng ph

<Ki u component> <

Ch

ng trnh 6.7 ci

i t

ng s

ki n>.getSource();

t m t ng d ng hon ch nh, bao g m:

Hai nhn tiu

cho hai v n b n.

Hai v n b n,

nh p s li u vo.

B n nt nh n t
hai v n b n.

ng ng

th c hi n cc thao tc nhn, chia, c ng, tr cc s li u nh p t

Thm m t nt nh n, khi click vo s thot kh i ch


Ch

ng th c getSource():

ng trnh (ch

ng trnh k t thc).

ng trnh 6.7

package vidu.chuong6;
import java.awt.*;
import java.awt.event.*;
public class EventDemo extends Frame implements ActionListener{
Label lbl1, lbl2, lblKq;
TextField txt1, txt2;
Button btnCong, btnTru, btnNhan, btnChia, btnThoat;
public EventDemo(){
super(Event demo!);
this.setLayout(new GridLayout(6,2)); //Ch

hi n th

6 dng, 2 c t

125

lbl1 = new Label(So thu nhat:); // Nhn s

th

nh t

this.add(lbl1);
txt1 = new TextField();

// v n b n s

th

nh t

this.add(txt1);
lbl2 = new Label(So thu hai:); // Nhn s

th

hai

this.add(lbl2);
txt2 = new TextField();

// v n b n s

th

hai

this.add(txt2);
lblKq = new Label();

// Nhn k t qu

this.add(lblKq);
this.add(new Label());
// Cc nt nh n
btnCong = new Button(Cong);

// Nt c ng

btnCong.addActionListener(this); // B t s

ki n

this.add(btnCong);
btnTru = new Button(Tru);

// Nt tr

btnTru.addActionListener(this);
this.add(btnTru);
btnNhan = new Button(Nhan);

// Nt nhn

btnNhan.addActionListener(this);
this.add(btnNhan);
btnChia = new Button(Chia);

// Nt chia

btnChia.addActionListener(this);
this.add(btnChia);
btnThoat = new Button(Thoat);

// Nt thot

btnThoat.addActionListener(this);
this.add(btnThoat);
// Ph

ng th c b t s

ki n click vo nt

ng frame

this.addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e){
System.exit(0);
}
});
}
/* Ph

ng th c x

l s

ki n nt

c nh n */

public void actionPerformed(ActionEvent ae){


float x = Float.parseFloat(txt1.getText());
float y = Float.parseFloat(txt2.getText());
float kq = 0;
if(ae.getSource() == btnCong) // C ng hai s

126

kq = x + y;
if(ae.getSource() == btnTru)

// Tr

hai s

kq = x - y;
if(ae.getSource() == btnNhan) // Nhan hai s
kq = x*y;
if(ae.getSource() == btnChia)&&(y != 0) // Chia hai s
kq = x/y;
if(ae.getSource() == btnThoat) // Thot kh i ch

ng trnh

System.exit(0);
// Thay

i n i dung k t qu

lblKq.setText(Ket qua la: + String.valueOf(kq));


}
public static void main(String[] args) {
// Khai bo

i t

ng demo

EventDemo myFrame = new EventDemo();


myFrame.setSize(300,150);

//

nh kch c

myFrame.setVisible(true);

// Hi n th

frame

frame

}
}

6.2 GIAO DI N V I CC

IT

NG MULTIMEDIA

N i dung ph n ny s t p trung trnh by cc

it

ng multimedia, bao g m:

nh d u (Checkbox) v Nt ch n (Radio button)


L a ch n (Choice)
Danh sch (List)
Trnh

n (Menu)

6.2.1 nh d u v nt ch n
Checkbox v Radio button l cc i t ng dng
nh d u, ho c ch n thng tin. S khc bi t
gi a chng l checkbox cho php ch n ng th i nhi u cng lc, trong khi , trong m i nhm
radio button, ch cho php ch n m t thng tin.
Ph

ng th c chung c a hai l p ny:


setState(boolean)/getState(): Truy nh p

Cc ph

n tr ng thi c a nt.

ng th c kh i t o Checkbox:
Checkbox():

Kh i t o m t nh d u r ng.

Checkbox(String):

Kh i t o nh d u c nhn xc

nh.

Checkbox(String, boolean): Kh i t o nh d u c nhn, c tr ng thi xc


Cc ph ng th c kh i t o Radio button t
c a cc radio button:

nh.

ng t nh Checkbox, ngo i tr vi c ph i ch ra nhm

Checkbox(String, boolean, CheckboxGroup);


127

Checkbox(String, CheckboxGroup, boolean);


X l s ki n thay

i tr ng thi nt ch n:

Ki u s ki n:

ItemEvent

Ci

ItemListener

Ph

t giao ti p:

ng th c x a l: itemStateChange(ItemEvent)

Ch ng trnh 6.8 minh ho vi c dng m t nhm radio button g m ba nt, t ng ng v i ba mu


(RED, BLUE, GREEN). Khi click vo nt no, th mu n n s
i theo mu .
Ch

ng 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

hi n th

3 dng, 1 c t

this.setLayout(new GridLayout(3,1));
CheckboxGroup cbxg = new CheckboxGroup(); // Nhm radio
cbxRed = new Checkbox(Red, cbxg, true); // Nt red
cbxRed.addItemListener(this);

// B t s

ki n

this.add(cbxRed);
cbxBlue = new Checkbox(Blue, cbxg, false);// Nt blue
cbxBlue.addItemListener(this);

// B t s

ki n

this.add(cbxBlue);
cbxGreen = new Checkbox(Green, cbxg, false);// Nt green
cbxGreen.addItemListener(this);

// B t s

ki n

this.add(cbxGreen);
// Ph

ng th c b t s

ki n click vo nt

ng frame

this.addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e){
System.exit(0);
}
});
}
/* Ph

ng th c x

l s

ki n thay

i tr ng thi nt */

public void itemStateChange(ItemEvent ie){


if(ie.getStateChanged() == ItemEvent.SELECTED){
String item = (String)ie.getItem();

128

if(item.equals(Red))

//

i mu red

//

i mu blue

//

i mu green

this.setBackground(Color.red);
if(item.equals(Blue))
this.setBackground(Color.blue);
if(item.equals(Green))
this.setBackground(Color.green);
this.repaint();

// V

l i mu n n

}
}
public static void main(String[] args) {
// Khai bo

i t

ng demo

RadioDemo myFrame = new RadioDemo();


myFrame.setSize(300,150);

//

nh kch c

myFrame.setVisible(true);

// Hi n th

frame

frame

}
}

Hnh 6.7: K t qu demo Radio Button

6.2.2 L a ch n
Choice l i t ng menu s xu ng, hi n thi m t danh sch cc item v cho php ng i dng
ch n m t trong s cc item (t ng t
i t ng dropdown list c a window). Cc ph ng th c
c b n c a l p Choice:
Choice():

Kh i t o

it

ng choice.

addItem(String):

Thm m t item vo danh sch l a ch n.

remove(int):

Xo item

removeAll():

Xo ton b item trong danh sch ch n.

v tr th i trong danh sch (b t

u l v tr 0).

select(int)/select(String): Ch n m t item theo s th t ho c theo tn.


getSelectedIndex(): Tr v ch s c a item

c ch n.

getSelectedItem(): Tr v tn c a item

c ch n.

getItem(int):

ng ng v i s th t

X l s ki n thay

Tr v tn c a item t

a vo.

i tr ng thi nt ch n:

Ki u s ki n:

ItemEvent

Ci

ItemListener

t giao ti p:

129

Ph

ng th c x a l: itemStateChange(ItemEvent)

Ch ng trnh 6.9 c ch c n ng t ng t nh ch ng trnh 6.8: Thay i mu n n theo mu


ch n. Nh ng trong ch ng trnh ny, ta dng i t ng choice, thay v dng radio button.
Ch

ng 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();

// Kh i t o

myChoice.addItem(Red);

// Thm item red

myChoice.addItem(Blue);

// Thm item blue

myChoice.addItem(Green);

// Thm item green

myChoice.addItemListener(this);

// B t s

this.add(myChoice);

// G n vo frame

// Ph

ng th c b t s

ki n click vo nt

ki n

ng frame

this.addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e){
System.exit(0);
}
});
}
/* Ph

ng th c x

l s

ki n thay

i tr ng thi item */

public void itemStateChange(ItemEvent ie){


if(ie.getStateChanged() == ItemEvent.SELECTED){
String item = (String)ie.getItem();
if(item.equals(Red))

//

i mu red

//

i mu blue

//

i mu green

this.setBackground(Color.red);
if(item.equals(Blue))
this.setBackground(Color.blue);
if(item.equals(Green))
this.setBackground(Color.green);
this.repaint();

// V

l i mu n n

}
}
public static void main(String[] args) {

130

// Khai bo

i t

ng demo

ChoiceDemo myFrame = new ChoiceDemo();


myFrame.setSize(300,150);

//

nh kch c

myFrame.setVisible(true);

// Hi n th

frame

frame

}
}

Hnh 6.8: K t qu demo Choice Button

6.2.3 Danh sch


List l m t danh sch ho t ng t ng t
i t ng choice. Tuy nhin, list cho php ng
c th ch n m t ho c nhi u item cng m t lc. Cc ph ng th c c b n c a l p List:
List():

Kh i t o m t danh sch r ng, m i l n ch

List(int):

ng t , nh ng c qui

nh s dng

List(int, boolean): Kh i t o m t danh sch c s dng


cho php ch n m t hay nhi u item xc

i dng

c ch n m t item.
c nhn th y.
c nhn th y xc nh, ch
nh b i tham s th hai.

add(String):

Thm m t item vo danh sch.

add(String, int):

Chn m t item vo v tr xc nh trong danh sch. N u ch s chn


v t ra kh i ph m vi danh sch, item s
c thm vo cu i.

replaceItem(String, int): Thay th m t item v tr xc nh (tham s th hai) trong danh


sch b ng m t item m i (tham s th nh t).
remove(int):

Xo item

v tr xc

removeAll():

Xo ton b item hi n c c a danh sch.

getSeletedIndex(): Tr v index c a item


getSelectedItem(): Tr v item

X l s ki n khi thay

i item

ItemEvent

Ci

ItemListener

Ph

n ch n).

n ch n).

c ch n (danh sch a ch n).

c ch n (danh sch a ch n).

c ch n:

Ki u s ki n:
t giao ti p:

c ch n (danh sch

c ch n (danh sch

getSelectedIndexs(): Tr v ch s cc item
getSelectedItems(): Tr v cc item

nh trong danh sch.

ng th c x l: itemStateChange(ItemEvent);

Ch ng trnh 6.10 minh ho vi c s d ng i t ng list v i kh n ng a ch n. M i khi thay


item
c ch n, m t thng bo cc mu
c ch n s hi n ra.

131

Ch

ng trnh 6.10

package vidu.chuong6;
import java.awt.*;
import java.awt.event.*;
public class ListDemo extends Frame implements ItemListener{
List myList;
Label lbl;
public ListDemo(){
super(List demo!);
// Kh i t o list

a ch n, ch

nhn

c m t dng

myList = new List(1, true);


myList.setSize(300,150);
// Thm cc item l cc lo i mu s c
myList.add(White);
myList.add(Red);
myList.add(Orange);
myList.add(Green);
myList.add(Yellow);
myList.add(Blue);
myList.add(Black);
myList.addItemListener(this); // B t s

ki n

this.setLayout(new FlowLayout());
this.add(myList);

// G n vo frame

lbl = new Label();

// Kh i t o nhn

this.add(lbl);

// G n vo frame

// Ph

ng th c b t s

ki n click vo nt

ng frame

this.addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e){
System.exit(0);
}
});
}
/* Ph

ng th c x

l s

ki n thay

i tr ng 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 t

ng demo

ListDemo myFrame = new ListDemo();


myFrame.setSize(300,150);

//

nh kch c

myFrame.setVisible(true);

// Hi n th

frame

frame

}
}

Hnh 6.9: K t qu demo Listbox

6.2.4 Trnh

Trnh n (menu)
c dng trn cc thanh cng c c a cc c a s ho c l popup menu xu t hi n
khi ta click chu t ph i vo m t i t ng. Java cung c p m t s l p trnh n:
Menubar:

Thanh trnh

Menu:

Trnh

PopupMenu:

Trnh

n xu t hi n khi click chu t ph i.

MenuItem:

Cc m c ch n c a trnh

xu ng
n.

Menubar
Menubar l thanh cng c dng
Menubar:

ch a cc trnh

Menubar():

Kh i t o m t thanh cng c cho trnh

add(Menu):

Thm m t trnh

i t

ng frame>.setMenuBar(<

ng th c c b n c a l p

n mune ln thanh trnh

t m t menubar c a m t frame, ta g i ph
<

n menu. Cc ph

n menubar.

ng th c c a frame:
i t

ng menubar>);

Menu v PopupMenu
Trnh
cn

n menu l i t ng s s xu ng khi click chu t ln i t ng hi n th c a menu. Menu


c g i l menu con c a m t thanh trnh n. Cc ph ng th c c b n c a l p Menu:
Menu(String):

Kh i t o m t menu, v i tn xc

nh.

add(MenuItem):

Thm m t item vo menu

add(Menu):

Thm m t menu con vo menu c, dng khi mu n t o menu c


nhi u m c.
133

addSeparator():

Thm m t

ng phn vng vo menu (

nhm cc item v i nhau).

X l s ki n c a l p Menu:
Ki u s ki n:
Giao ti p ci
Ph

ActionEvent
t:

ActionListener

ng th c x l: actionPerformed(ActionEvent);

MenuItem
MenuItem l i t ng item trong cc trnh n menu. M i item, khi
d ng nh m t nt l nh. Cc ph ng th c c b n c a l p MenuItem:

c click vo s c tc

MenuItem(String): Kh i t o m t item.
CheckboxMenuItem(String): Kh i t o m t item c m c ch n nh checkbox.
getState():

Tr v tr ng thi c a item. Ch dng cho item c m c ch n.

enable():

Cho php item ho t

disable():

Khng cho php item ho t

ng (l ch

m c

nh).

ng (lm m item i).

X l s ki n c a l p MenuItem:
Ki u s ki n:
Giao ti p ci
Ph
Ch

ActionEvent
t:

ActionListener

ng th c x l: actionPerformed(ActionEvent);

ng trnh 6.11 minh ho vi c s d ng cc lo i menu:


T o m t menubar c a frame
Trn menubar, t o m t menu File. Khi click vo s s xu ng m t menu v i cc item:
New, Open, Save, Save As, Exit.
Khi b m chu t ph i vo frame, s s ra m t menu popup g m cc item: Cut, Copy, Paste.
Khi click chu t vo item no trn cc menu, m t nhn trong frame s hi n th tn c a item
v a
c ch n.
Ch

Ch

ng trnh k t thc khi click vo item Exit.

ng trnh 6.11

package vidu.chuong6;
import java.awt.*;
import java.awt.event.*;
public class MenuDemo extends Frame
implements ActionListener, MouseListener{
Menubar myBar;
Menu myMenu;
PopupMenu myPopup;
Label lbl;
public MenuDemo(){
super(Menu demo!);

134

myBar = new Menubar();

// Thanh trnh

this.setMenuBar(myBar);

// Thi t l p menubar c a frame

myMenu = new Menu(File);

// menu File

myBar.add(myMenu);

// G n menu vo thanh trnh

myMenu.addActionListener(this);// B t s

ki n

myMenu.add(new MenuItem(New));
myMenu.add(new MenuItem(Open));
myMenu.addSeparator();

// Thm d u 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);// B t s

ki n

myPopup(new MenuItem(Cut));
myPopup(new MenuItem(Copy));
myPopup(new MenuItem(Paste));
lbl = new Label();

// Kh i t o nhn

this.add(lbl);

// G n vo frame

// Ph

ng th c b t s

ki n click vo nt

ng frame

this.addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e){
System.exit(0);
}
});
}
/* Ph

ng th c x

l s

ki n */

public void actionPerformed(ActionEvent ae){


if(ae.getActionCommand().equals(Exit)){
System.exit(0);
}
lbl.setText(ae.getActionCommand());
}
public void mouseEntered(MouseEvent me){} // Khng x

public void mouseExited(MouseEvent me){}

// Khng x

public void mouseReleased(MouseEvent me){} // Khng x

public void mousePressed(MouseEvent me){} // Khng x

public void mouseClicked(MouseEvent me){

135

myPopup.show(this, me.getX(), me.getY());// Hi n menu popup


}
public static void main(String[] args) {
// Khai bo

i t

ng demo

MenuDemo myFrame = new MenuDemo();


myFrame.setSize(300,150);

//

nh kch c

myFrame.setVisible(true);

// Hi n th

frame

frame

}
}

Hnh 6.10: K t qu demo Menu

6.3 CC K THU T T O TABLES


N i dung ph n ny s t p trung trnh by cc k thu t trnh by cc i t ng giao di n
(conponent) trn frame theo cc
thi t k khc nhau b ng cch dng b qu n l trnh by
(Layout Manager). Bao g m cc k thu t sau:
Cch trnh by theo dng (Flow layout)
Cch trnh by theo m ng (Grid layout)
Cch trnh by theo Border (Border layout)
Cch trnh by theo GridBag (GridBag layout)
Cch trnh by t do (Null layout)

6.3.1 Trnh by Flow Layout


Cch trnh by Flow Layout s x p cc i t ng trn m t h ng theo dng. N u i t ng m i
thm khng
ch (chi u r ng) th n s t
ng thm vo u dng m i. Cc ph ng th c:
FlowLayout():

Kh i t o

it

ng trnh by.

FlowLayout(int):

Kh i t o

it

ng trnh by v i cch c n l xc

nh.

FlowLayout(int, int, int): Kh i t o v i ba tham s : Th nh t l cch c n l , th hai l


kho ng cch gi a hai dng (chi u cao), th ba l kho ng cch gi a
hai i t ng (chi u ngang).
Tham s c n l c th nh n m t trong ba gi tr :
FlowLayout.LEFT:

C n l tri, l gi tr m c

nh.

FlowLayout.CENTER: C n l gi a.
136

FlowLayout.RIGHT:

C n l ph i.

Ch ng trnh 6.12 minh ho cch trnh by flow layout: T o ra m t dy 10 nt nh n v g n vo


m t frame theo ki u flow layout.
Ch

ng trnh 6.12

package vidu.chuong6;
import java.awt.*;
public class FlowLayoutDemo{
public static void main(String[] args) {
// Khai bo v kh i t o frame c tiu
Frame myFrame = new Frame(Frame has somes buttons!);
myFrame.setSize(300,150);

//

nh kch c

frame

myFrame.setLayout(new FlowLayout( ));// Thi t l p cch trnh by


// Khai bo v kh i t o button
for(int i=0; i<10; i++)
myFrame.add(new Button(Click+i));// G n vo frame
myFrame.setVisible(true);

// Hi n th

frame

}
}

Hnh 6.11: K t qu demo Flow layout

6.3.2 Trnh by Grid Layout


Cch trnh by Grid Layout s s p x p cc
c t. Ph ng th c c b n:

it

ng theo d ng b ng,

c xc

nh s hng v s

GridLayout(int, int):

Kh i t o m t i t ng trnh by. Hai tham s


l t l s hng v s c t c a grid trnh by.

u vo l n

GridLayout(int, int, int, int):

Kh i t o m t i t ng trnh by, hai tham s


u xc
nh s hng v s c t trnh by. Hai tham s sau xc nh
kho ng cch gi a cc dng v cc c t c a b ng.

L u :
Khi s l ng i t ng
c chn nhi u h n vo frame, ta mu n ch
hng, ho c t tnh s c t hi n th , th ta tham s t ng ng l 0.

ng trnh t tnh s

V d :
setLayout(new GridLayout(3,0));

s c

nh s hng trnh by l 3, s c t l tu thu c vo s

it

ng trong frame.
137

setLayout(new GridLayout(0,2));

s c

nh s c t l 2, s dng l m m d o theo s cc

it

ng trong frame.

Ch ng trnh 6.13 minh ho cch trnh by grid layout: T o ra m t dy 10 nt nh n v g n vo


m t frame theo ki u grid layout.
Ch

ng trnh 6.13

package vidu.chuong6;
import java.awt.*;
public class GridLayoutDemo{
public static void main(String[] args) {
// Khai bo v kh i t o 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));// Thi t l p cch trnh by


// Khai bo v kh i t o button
for(int i=0; i<10; i++)
myFrame.add(new Button(Click+i));// G n vo frame
myFrame.setVisible(true);

// Hi n th

frame

}
}

Hnh 6.12: K t qu demo Grid layout

6.3.3 Trnh by Border Layout


Cch hi n th Border Layout s chia frame thnh 5 vng c
cho chi m h t b m t c a frame:
West:

Vng pha ty, t c l pha l bn tri.

East:

Vng pha ng, t c l pha l bn ph i.

nh v t

ng ko dn cc vng sao

North: Vng pha b c, t c l pha l trn.


South: Vng pha nam, t c l pha l d
Center: Vng trung tm,
Ph

i.

chnh gi a frame.

ng th c c b n c a l p BorderLayout:
BorderLayout(): Kh i t o m t

it

ng trnh by theo cch border.

Khi m t frame
c trnh by theo cch border, ta c th dng ph
t ng vo cc vng c a frame:

ng th c sau

g n cc

138

<

i t

ng frame>.add(<Vng border>, <

i t

ng component>);

V d :
myFrame.add(Center, new Button(Click));

s gn vo vng trung tm c a myFrame m t nt nh n c tn l Click.


L u :
Cch trnh by border lun chia frame thnh 5 vng xc
N u g n nhi u

it

ng vo cng m t vng, ch c

nh.

it

ng g n sau l nhn th y

c.

N u mu n trong m t vng ch a
c nhi u i t ng, ta c th g n vo m i vng m t
Panel. Sau trong panel, ta ch n cch trnh by ring cho panel v g n cc i t ng vo
panel.
Ch ng trnh 6.14 minh ho cch trnh by border: Ta s g n vo n m vng c a frame n m nt
nh n khc nhau.
Ch

ng trnh 6.14

package vidu.chuong6;
import java.awt.*;
public class BorderLayoutDemo{
public static void main(String[] args) {
// Khai bo v kh i t o frame c tiu
Frame myFrame = new Frame(Frame has somes buttons!);
myFrame.setSize(300,150);

//

nh kch c

frame

myFrame.setLayout(new BorderLayout());

//

nh cch trnh by

// Khai bo v kh i t o button
myFrame.add(West, new Button(West));

// G n vo vng west

myFrame.add(East, new Button(East));

// G n vo vng east

myFrame.add(North, new Button(North)); // G n vo vng north


myFrame.add(South, new Button(South)); // G n vo vng south
// G n vo vng center
myFrame.add(Center, new Button(Center));
myFrame.setVisible(true);

// Hi n th

frame

}
}

Hnh 6.13: K t qu demo Border layout

139

6.3.4 Trnh by GridBag Layout


Cch trnh by GridBag Layout c ng trnh by cc i t ng t ng t nh Grid Layout: Cc i
t ng s
c nh v theo v tr cc (cell) c a m t khung l i (grid). Tuy nhin, GridBag cho
php ta nh kch th c c a i t ng s chi m bao nhiu v s
c t v tr no trong
khung l i. Cc ph ng th c c b n:
GridBagLayout():

Kh i t o m t

it

ng trnh by theo cch gridbag.

setConstraints(Component, GridBagConstraints):
t v tr v kch th c c a
component theo cc rng bu c trong gridbagConstraints.

it

ng

y l l p ch a cc rng bu c cho cc i t ng
c trnh by theo cch GridBag. Cc ph
th c v thu c tnh c b n c a l p GridBagConstraints:

ng

GridBagConstraints

GridBagConstraints(): Kh i t o m t
gridx/gridy:

it

ng rng bu c c a GridBag.

V tr c a cell m ta mu n
chi u Y).

it

gridwidth/gridheight: Kch th c (vng trnh by) c a


chi u cao).
fill:

Xc

nh cch

GridBagConstraints.NONE:
chi m.

it

GridBagConstraints.VERTICAL:

GridBagConstraints.HORIZONAL:

GridBagConstraints.BOTH:
n chi m.

it

it

ng vo (theo chi u X v

it

ng (Theo chi u r ng v

ng, theo 4 cch:

ng khng thay
it

i kch th

c theo cc cell n

ng c chi u cao kn vng n chi m


it

ng c chi u r ng kn vng n chi m

ng c chi u cao v chi u r ng ph kn vng

ipadx/ipady:

nh n v t ng gi m kch th c c a i t ng khi khung ch a b


thay i kch th c (theo chi u X v chi u Y).

insets:

Xc nh kho ng cch gi a cc cell theo b n h


tri, ph i.

anchor:

Xc nh v tr neo i t ng khi kch th c khung ch a thay i.


Bao g m: NORTH, NORTHEAST, NORTHWEST, EAST,
SOUTH, SOUTHEAST, SOUTHWEST.

weightx/weighty:

nh kho ng cch l n ra t

ng

i gi a cc

it

ng: Trn, d

i,

ng v i nhau.

Ch ng trnh 6.15 minh ho cch trnh by gridbag: T o ra ba nt nh n trong frame, m i nt c


m t s rng bu c khc nhau v kch th c v v tr.
Ch

ng trnh 6.15

package vidu.chuong6;
import java.awt.*;
public class GridBagLayoutDemo{
public static void main(String[] args) {

140

// Khai bo v kh i t o frame c tiu


Frame myFrame = new Frame(Frame has somes buttons!);
myFrame.setSize(300,150);

//

nh kch c

frame

GridBagLayout layout = new GridBagLayout();


myFrame.setLayout(layout);
// Khai bo

i t

//

nh cch trnh by

ng rng bu c

GridBagConstraints cts = new GridBagConstraints();


cts.fill = GridBagConstraints.BOTH;
// Button1: v

tr (1,1), kch th

c (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);

// G n vo frame

// Button2: v

tr (2,2), kch th

nh rng bu c

c (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);

// G n vo frame

// Button3: v

tr (3,3), kch th

nh rng bu c

c (1,1)

Button btn3 = new Button(Click3);


cts.gridx = 3;
cts.gridy = 3;
cts.gridheight = 1;
cts.gridwidth = 1;
layout.setConstraints(btn3, cts);

//

nh rng bu c

myFrame.add(btn3);

// G n vo frame

myFrame.setVisible(true);

// Hi n th

frame

}
}

141

Hnh 6.14: K t qu demo Gridbag layout

6.3.5 Trnh by Null Layout


Cch trnh by Null Layout s trnh by cc i t ng khng theo m t quy t c no. T t c
ng i dng t
nh v v thi t l p kch th c cho m i i t ng.
nh v
<

it
i t

nh kch th
<

i t

ng b ng ph

i t

ng th c setLocation():

ng>.setLocation(Point);

it

ng b ng ph

ng th c setSize():

ng>.setSize(int, int);

Ngoi ra, c th v a
<

u do

nh v , v a

nh kch th

c cho

it

ng thng qua ph

ng th c:

ng>.setBounds(int, int, int, int);

Trong , hai tham s d u

nh v

it

ng, hai tham s sau

nh kch th

it

ng.

Ch ng trnh 6.16 minh ho cch trnh by t do Null layout: t o ra hai nt nh n v g n vo


frame theo hai cch khc nhau.
Ch

ng trnh 6.16

package vidu.chuong6;
import java.awt.*;
public class NullLayoutDemo{
public static void main(String[] args) {
// Khai bo v kh i t o frame c tiu
Frame myFrame = new Frame(Frame has somes buttons!);
myFrame.setSize(300,150);

//

nh kch c

myFrame.setLayout(null);

//

nh cch trnh by

// Button1: v

tr (10,30), kch th

frame

c (100,40)

Button btn1 = new Button(Click1);


btn1.setSize(100, 40);
btn1.setLocation(new Point(10, 30));
myFrame.add(btn1);
// Button2: v

tr (70,120), kch th

// G n vo frame
c (50,20)

Button btn2 = new Button(Click2);


btn2.setBounds(70, 120, 50, 20);
myFrame.add(btn2);

// G n vo frame

142

myFrame.setVisible(true);

// Hi n th

frame

}
}

Hnh 6.15: K t qu demo Null layout

6.4 HTML & APPLET


Applet l m t ch ng trnh Java c th ch y trong cc trnh duy t web c h tr Java. T t c cc
applet u l cc l p con c a l p Applet.
t o applet, ta c n import hai gi sau:
import java.applet.*;
import java.awt.*;

6.4.1 C u trc c a m t Applet


C u trc t ng qut c a m t applet nh sau:
public class <Tn l p applet> extends Applet{

// Cc thu c tnh

public void init(){}


public void start(){}
public void stop(){}
public void destroy(){}

// Cc ph

ng th c khc

Cc ph

ng th c c b n c a m t applet:
init():

Kh i t o cc tham s , n u c, c a applet.

start():

Applet b t

stop():

Ch m d t ho t

destroy():

Th c hi n cc thao tc d n d p tr

u ho t

ng.

ng c a applet.
c khi thot kh i applet.

L u :
Khng ph i t t c cc applet
Applet cn c th ci

t m t s ph

u ph i ci

4 ph

ng th c c b n trn.

ng th c tu ch n (khng b t bu c) sau:

paint(Graphics): Ph ng th c v cc i t ng giao di n bn trong applet. Cc thao tc


v ny
c th c hi n b i i t ng
ho Graphics (l tham s
u
vo).
repaint():

Dng
v l i cc i t ng trong applet. Ph
ng g i ph ng th c update().

ng th c ny s t

143

update(Graphics): Ph ng th c ny
c g i sau khi th c hi n ph ng th c paint nh m
t ng hi u qu v . Ph ng ny s t
ng g i ph ng th c paint().
Ch ng trnh 6.17 ci t m t applet
ang trong th i i m t ng ng.
Ch

n gi n, m i ph

ng th c s in ra thng bo r ng applet

ng trnh 6.17

package vidu.chuong6;
import java.awt.*;
import java.applet.*;
public class SimpleApplet extends Applet{
private StringBuffer buffer;

// Chu i thng bo

public void init(){

// Kh i t o

buffer = new StringBuffer();


addBuffer(initializing);
}
public void start(){

// Kch ho t

addBuffer(starting);
}
public void stop(){

// D ng

addBuffer(stopping);
}
public void destroy(){

// Thot

addBuffer(unloading);
}
private void addBuffer(String newBuffer){
buffer.append(newBuffer);

// Thm thng bo

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

6.4.2 S d ng applet
Applet khng th ch y nh m t ng d ng Java c l p (n khng c hm main), m n ch ch y
c khi
c nhng trong m t trang HTML ( ui .htm, .html) v ch y b ng m t trnh duy t web
thng th ng.
Cc b

c xy d ng v s d ng m t applet bao g m:
Ci

t ch

ng trnh c d ng m t applet nh m c 6.4.1


144

Bin d ch m ngu n thnh l p .class


Nhng m .class c a applet vo trang html.
nhng m t applet vo m t trang html, ta dng th (tag) <Applet> nh sau:
<APPLET CODE = Tn_file_applet.class
WIDTH = Chi u_r ng
HEIGHT = Chi u_cao>
</APPLET>

Trong :
Tn applet l tn file m ngu n bin d ch thnh file ch y c ui .class c a Java.
Chi u r ng v chi u cao l kch th

c c a vng trn trang html m applet s

t vo.

V d , trong trang myHtml.htm c ch a n i dung nh sau:


<HTML>
<HEAD>
<TITLE> A simple applet </TITLE>
</HEAD>
<BODY>
This is the output of applet:
<APPLET CODE = SimpleApplet.class WIDTH=200 HEIGHT=20>
</APPLET>
</BODY>
</HTML>

s nhng applet
c nh ngh a trong ch ng trnh 6.17 vo m t vng c kch th c
200*20 trong trang myHtml. By gi , ta c th ki m nghi m ch ng trnh applet c a mnh b ng
cch m trang myHtml trn cc trnh duy t thng th ng.
Ch ng trnh 6.18 ci t m t applet c ch c n ng t ng t nh ch ng trnh 6.7, th c hi n cc
thao tc tnh ton c b n trn hai s . Ngo i tr vi c y l m t applet, nn c th ch y trn m t
trang html.
Ch

ng 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
lbl1 = new Label(So thu nhat:); // Nhn s

hi n th
th

6 dng, 2 c t

nh t

this.add(lbl1);

145

txt1 = new TextField();

// v n b n s

th

nh t

this.add(txt1);
lbl2 = new Label(So thu hai:); // Nhn s

th

hai

this.add(lbl2);
txt2 = new TextField();

// v n b n s

th

hai

this.add(txt2);
lblKq = new Label();

// Nhn k t qu

this.add(lblKq);
this.add(new Label());
// Cc nt nh n
btnCong = new Button(Cong);

// Nt c ng

btnCong.addActionListener(this); // B t s

ki n

this.add(btnCong);
btnTru = new Button(Tru);

// Nt tr

btnTru.addActionListener(this);
this.add(btnTru);
btnNhan = new Button(Nhan);

// Nt nhn

btnNhan.addActionListener(this);
this.add(btnNhan);
btnChia = new Button(Chia);

// Nt chia

btnChia.addActionListener(this);
this.add(btnChia);
btnThoat = new Button(Thoat);

// Nt thot

btnThoat.addActionListener(this);
this.add(btnThoat);
}
/* Ph

ng th c x

l s

ki n nt

c nh n */

public void actionPerformed(ActionEvent ae){


float x = Float.parseFloat(txt1.getText());
float y = Float.parseFloat(txt2.getText());
float kq = 0;
if(ae.getSource() == btnCong) // C ng hai s
kq = x + y;
if(ae.getSource() == btnTru)

// Tr

hai s

kq = x - y;
if(ae.getSource() == btnNhan) // Nhan hai s
kq = x*y;
if(ae.getSource() == btnChia)&&(y != 0) // Chia hai s
kq = x/y;
if(ae.getSource() == btnThoat) // Thot kh i ch

ng trnh

System.exit(0);

146

// Thay

i n i dung k t qu

lblKq.setText(Ket qua la: + String.valueOf(kq));


repaint();

// V

l i cc

i t

ng

}
}

Khi nhng applet ny vo m t trang html b t k, ta c th ki m tra th y r ng n c ch c n ng


t ng t nh ng d ng 6.7.
L u , s khc nhau gi a m t application v m t applet:
Application l m t ng d ng Java c l p, n c th ch y c l p trn my o Java. Trong
khi , applet ch ch y
c khi nhng trong m t trang html, ch y nh vo cc trnh duy t
web c h tr Java.
Application ch y d a vo hm main(). Trong khi , applet khng c hm main().
hi n th cc thng bo, application dng System.out.println(). Trong khi , applet
dng ph ng th c drawString() c a l p Graphics.

6.4.3 Truy n tham s cho Applet


Trong nhi u tr ng h p, applet ph i ph thu c vo cc tham s
bn ngoi truy n vo. Khi ta
c th dng th PARAM c a html truy n tham s cho applet. C php:
<APPLET CODE = Tn_file_applet.class
WIDTH = Chi u_r ng
HEIGHT = Chi u_cao>
<PARAM NAME=Tn_bi n VALUE=Gi_tr >

// Cc tham s

khc

</APPLET>

Khi , trong m ngu n c a applet, ta dng ph


c truy n vo:

ng th c getParameter()

c gi tr cc tham s

getParameter(Tn_bi n);

Ch ng trnh 6.19 minh ho vi c truy n tham s cho m t applet: Applet m ph ng giao di n tm


ki m: m t nhn h ng d n, m t v n b n v m t nt nh n. Tu vo ngn ng m nhn v nt
nh n c gi tr text khc nhau. Bi n ngn ng l m t tham s truy n t trnh duy t vo. ( y l
m ph ng giao di n, c ch tm ki m khng ho t ng).
Ch

ng 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

hi n th

6 dng, 2 c t

String langue = getParameter(langue);// Lo i ngn ng


if(langue.equals(vn)){

// Ti ng Vi t

lbl = new Label(Nhap tu khoa); // Nhn s


btn = new Button(Tim kiem);
}else if(langue.equals(fr)){

th

nh t

// Nt c ng
// Ti ng Php

lbl = new Label(Tapez des mots);


btn = new Button(Chercher);
}else{

// Ti ng Anh, m c

nh

lbl = new Label(Enter keys);


btn = new Button(Search);
}
txt = new TextField();
this.add(lbl);
this.add(txt);
this.add(btn);
}
}

Khi , applet ph i

c nhng vo trang html v i o n m nh sau:

<APPLET CODE = ParamDemo.class WIDTH = 200 HEIGHT = 20>


<PARAM NAME=langue VALUE=vn>
</APPLET>

Ta c th thay th value c a param b ng cc gi tr vn, fr v en


ngn ng khc nhau
c hi n th trong applet.

th y

c cc ch

6.5 GI I THI U V SWING


Swing l th vi n l p trnh m r ng c a Java. N m r ng cc i t ng giao di n
ho c b n
c a Java. Swing cn
c g i l th vi n JFC (Java Foundation Class). Khi mu n s d ng cc i
t ng ho c a th vi n ny, ta ph i khai bo ch th :
import javax.swing.*;

6.5.1 M r ng cc

it

JFC m r ng cc i t
J
u m i tn l p:

ng component

ng c b n c a java thnh cc l p t

Button

JButton

Label

JLabel

TextField

JTextField

TextArea

JTextArea

Checkbox

JCheckbox

List

JList

ng ng, ngoi tr vi c c thm ch

148

Menu

JMenu

Cc l p m r ng ny c
java.awt. Ngoi ra, chng

y
cc ph ng th c c a cc i t ng l p c b n c a th vi n
c b sung m t s ph ng th c t o hi u ng giao di n.

Ch ng trnh 6.20 minh ho vi c s d ng


thm m t s tnh n ng sau:

it

ng JButton.

it

ng JButton

c m r ng

JButton(String, Icon): Kh i t o m t nt nh n v i m t tn nhn v m t nh n n.


c ki u icon (tham s th hai).

nh n n

setMnemonic(char): nh phm t t cho nt l nh. Khi ng i dng nh n Ctrl+phm t t th


nt l nh c ng th c thi t ng t nh kkhi ta click chu t vo nt l nh.
setBorder(new MatteBorder(int, int, int, int, Icon)): Thi t l p khung n n cho nt v i cc
tham s : Kho ng cch t ch
n bin ( r ng bin) theo cc chi u trn d i, tri ph i,
cu i cng l nh n n cho nt.
setBorder(new LineBorder(int)): Thi t l p vi n cho nt d ng hnh ch nh t, tham s xc
nh mu cho vi n c a nt. Ngoi ra, tham s c a ph ng th c ny cn c th l cc l p
SoftBevelBorder, EtchedBorder v TitleBorder.
setToolTipText(String): Thi t l p dng tooltip cho
chu t ln i t ng trn c a s .
Ch

it

ng. Dng ny s hi n ra khi ta di

ng trnh 6.20

package vidu.chuong6;
import javax.swing.*;
public class JButtonDemo extends JFrame{
public static void main(String[] args) {
// Khai bo v kh i t o frame c tiu
JFrame myFrame = new JFrame(Frame has somes buttons!);
myFrame.setSize(300,150);
// Gi

ta c file

//

nh kch c

nh myImage trong cng th

frame

m c

Icon myIcon = new ImageIcon(myImage.gif);


// Button1: c n n l

nh

JButton btn1 = new JButton(Back Image, myIcon);


// Gn tooltip cho nt
btn1.setToolTipText(Buttons background is an image);
myFrame.getContentPane().add(btn1); // G n 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); // G n vo frame

149

myFrame.setVisible(true);

// Hi n th

frame

}
}

Trong ch ng trnh ny, c dng l nh g n cc i t ng vo frame b ng cch getContentPane().


y l ph ng th c m r ng cho cc i t ng khung ch a container. S m r ng ny s
c
trnh by chi ti t trong ph n ti p theo.

6.5.2 M r ng cc

it

ng container

T ng t nh cc i t ng component, cc i t ng container c ng
thnh cc l p c tn t ng ng v thm k t J
u:
Frame

JFrame

Panel

JPanel

Dialog

JDialog

c m r ng trong JFC

Ch ng trnh 6.21 minh ho vi c s d ng cc i t ng m r ng c a khung ch a Frame thnh


JFrame. Khung ch a JFrame c nhi u t ng trnh di n khc nhau, cc t ng l trong su t v ch ng
kht ln nhau, khi n cho ta v n c c m gic cc i t ng
c trnh by trn cng m t m t ph ng
nh khung ch a Frame c a th vi n chu n AWT.
M t s t ng hay s d ng c a l p JFrame (theo th t t trong ra ngoi):
ContentPane: L t ng th ng dng nh t, t ng ny dng
c b n nh button, label, text, list
MenubarPane: T ng dnh

ch a cc

it

ng component

ch a cc lo i menu c a frame nh Menubar, PopupMenu.

GlassPane: T ng ngoi cng, th ng dng


t ng Content. Khi ta set tooltipText cho m t
t ng Glass.
truy nh p vo m t t ng b t k, ta dng ph

ch a cc tooltip c a cc i t ng trong
i t ng, tooltip s t
ng
c add vo

ng th c c tn:

get + <Tn c a t ng>();

V d :
JFrame myFrame = new JFrame(My JFrame);
myFrame.getContentPane().add(Center, new JButton(Test));

s g n m t nt nh n c nhn Test vo t ng Content c a khung ch a myFrame.


Ch

ng trnh 6.21 minh ho vi c g n cc

it

ng vo cc t ng khc nhau:

G n m t nt nh n vo t ng ContentPane.
G n m t thanh Menubar c ch a m t menu File vo t ng MenubarPane.
Ch

ng trnh 6.21

package vidu.chuong6;
import javax.swing.*;
import java.awt.event.*;
public class JFrameDemo extends JFrame implements ActionListener{

150

private JMenuBar myBar;


private JMenu myMenu;
public JFrameDemo(){
super(JFrame demo);
JButton btn = new Jbutton();
// G n nt nh n vo t ng 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);
// G n menubar vo t ng MenubarPane
this.getJMenuBar().add(myBar);
// Ph

ng th c b t s

ki n click vo nt

ng frame

this.addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e){
System.exit(0);
}
});
}
/* Ph

ng th c x

l s

ki n */

public void actionPerformed(ActionEvent ae){


if(ae.getActionCommand().equals(Exit)){
System.exit(0);
}
}
public static void main(String[] args) {
// Khai bo v kh i t o frame c tiu
JFrameDemo myFrame = new JFrameDemo();
myFrame.setSize(300,150);

//

nh kch c

myFrame.setVisible(true);

// Hi n th

frame

frame

151

}
}

L u :
V cc i t ng m r ng c a th vi n JFC
c b sung kh nhi u tnh n ng, c bi t l cc tnh
n ng
ho , do , cc i t ng ny c nh c i m l r t c ng k nh. V l do n ng t i, cho nn
hi n nay, cc i t ng c a th vi n JFC v n t
c ph bi n trong cc ng d ng applet.

6.6 CASE STUDY IV


Trong ph n ny, ta s minh ho cch s d ng cc i t ng
vi t m t ch ng trnh m ph ng m t my tnh Calculator.
T o m t frame lm khung ch

ng trnh, tiu

ho c a th vi n chu n AWT

l Java Calculator

Pha trn l m t Label (ho c v n b n u


c, nh ng n u dng v n b n th khng cho
edit) hi n cc s
c nh p vo v k t qu tnh ton.
Pha d i l cc nt nh n t ng ng v i cc ch s v php ton. Nh ng
nh n cho ng b v layout p m t, ta nhm chng vo m t Panel.

nhm cc nt

Khi , frame s ch a tr c ti p hai i t ng: label v frame. Ta s d ng layout ki u null,


v xc nh v tr chnh xc cho label v panel.
i v i Panel, ta c ng dng GridLayout. V c 10 nt nh n s v cc nt nh n ton t : nt
c ng, nt nhn, nt chia, nt tr , nt c n b c hai, nt ph y th p phn, nt b ng, nt lu
th a, nt ngh ch o, nt reset. Nn s t o thnh 4 dng, 5 c t: m i dng g m c 3 nt s
v hai nt ch c n ng:
-

Dng 1: cc nt 7, 8, 9, c ng, reset (C).

Dng 2: cc nt 4, 5, 6, tr , lu th a.

Dng 3: cc nt 1, 2, 3, nhn, ngh ch

Dng 4: cc nt 0, th p phn, nt b ng, nt chia, nt c n b c hai.

o.

V i cc nt s v nt th p phn, khi click vo nt th k t t


label.

ng ng

c hi n ln trn

V i cc nt ch c n ng, khi click vo th th c hi n php ton v hi n k t qu ra mn hnh,


n u c.
Khi click vo nt b ng (k t qu ) th hi n k t qu trn label.
Ch
Ch

ng trnh 6.22 ci

t chi ti t ch

ng trnh ny.

ng 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; // Tr ng thi c a php ton
private int operator;

// Ton t

th c hi n

152

private float oldIterator;

// S

h ng tr

private Label lbl;


private Panel pnl;
private Button btn0, btn1, btn2, btn3, btn4, btn5, btn6,
btn7, btn8, btn9, btnPoint, btnReset, btnAdd, btnSub,
btnMul, btnDiv, btnPow, btnSqrt, btnRev, btnResult;
public CalculatorDemo(){
super(Java Calculator);
this.setSize(250, 250);
this.setResizable(false);

// Khng cho thay

this.setLayout(null);

// Thi t l p layout

lbl = new Label("0");

// Nhn k t qu

i size

lbl.setAlignment(2);
lbl.setSize(240, 30);
lbl.setLocation(5, 25);
this.add(lbl);
Panel pnl = new Panel();

// Panel ch a cc nt

pnl.setSize(240, 190);
pnl.setLocation(5, 55);
pnl.setLayout(new GridLayout(4, 5)); // Thi t l p layout
this.add(pnl);
btn7 = new Button(7);

// Nt s

btn7.addActionListener(this);

// B t s

ki n click chu t

pnl.add(btn7);

// G n vo panel

btn8 = new Button(8);

// Nt s

// Nt s

btn8.addActionListener(this);
pnl.add(btn8);
btn9 = new Button(9);
btn9.addActionListener(this);
pnl.add(btn9);
btnAdd = new Button(+);

// Nt php ton c ng

btnAdd.addActionListener(this);
pnl.add(btnAdd);
btnReset = new Button(C);

// Nt reset

btnReset.addActionListener(this);

153

pnl.add(btnReset);
btn4 = new Button(4);

// Nt s

// Nt s

// Nt s

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(-);

// Nt php ton tr

btnSub.addActionListener(this);
pnl.add(btnSub);
btnPow = new Button(x^y);

// Nt php ton lu

th a

btnPow.addActionListener(this);
pnl.add(btnPow);
btn1 = new Button(1);

// Nt s

// Nt s

// Nt s

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(*);

// Nt php ton nhn

btnMul.addActionListener(this);
pnl.add(btnMul);
btnRev = new Button(1/x);

// Nt php ton ngh ch

btnRev.addActionListener(this);
pnl.add(btnRev);
btn0 = new Button(0);

// Nt s

154

btn0.addActionListener(this);
pnl.add(btn0);
btnPoint = new Button(.);

// Nt d u th p phn

btnPoint.addActionListener(this);
pnl.add(btnPoint);
btnResult = new Button(=);

// Nt k t qu

btnResult.addActionListener(this);
pnl.add(btnResult);
btnDiv = new Button(/);

// Nt php ton chia

btnDiv.addActionListener(this);
pnl.add(btnDiv);
btnSqrt = new Button(Sqrt);

// Nt php ton c n b c hai

btnSqrt.addActionListener(this);
pnl.add(btnSqrt);
operatorState = true;
operator = -1;
oldIterator = 0;
this.addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e){
System.exit(0);
}
});
}
/* Ph

ng th c x

l s

ki n */

public void actionPerformed(ActionEvent ae){


float result;
float newIterator = Float.parseFloat(lbl.getText());
if(ae.getSource() == btnResult){
switch(operator){
case 0:
result = oldIterator + newIterator;
lbl.setText(String.valueOf(result));
break;
case 1:
result = oldIterator - newIterator;
lbl.setText(String.valueOf(result));
break;

155

case 2:
result = oldIterator * newIterator;
lbl.setText(String.valueOf(result));
break;
case 3:
if(newIterator != 0){
result = oldIterator/newIterator;
lbl.setText(String.valueOf(result));
}
break;
case 4:
result = (float)Math.pow(oldIterator, newIterator);
lbl.setText(String.valueOf(result));
break;
}
operator = -1;
operatorState = true;
return;
}
if(ae.getSource() == btnRev){
newIterator = Float.parseFloat(lbl.getText());
if(newIterator != 0){
result = (float)1/newIterator;
lbl.setText(String.valueOf(result));
}
operator = -1;
operatorState = true;
return;
}
if(ae.getSource() == btnSqrt){
newIterator = Float.parseFloat(lbl.getText());
if(newIterator >= 0){
result = (float)Math.sqrt(newIterator);
lbl.setText(String.valueOf(result));
}
operator = -1;
operatorState = true;
return;
}
if(ae.getSource() == btnPoint){
lbl.setText(lbl.getText() + .);
return;
}

156

if(ae.getSource() == btnAdd){
operator = 0;
operatorState = true;
oldIterator = Float.parseFloat(lbl.getText());
return;
}
if(ae.getSource() == btnSub){
operator = 1;
operatorState = true;
oldIterator = Float.parseFloat(lbl.getText());
return;
}
if(ae.getSource() == btnMul){
operator = 2;
operatorState = true;
oldIterator = Float.parseFloat(lbl.getText());
return;
}
if(ae.getSource() == btnDiv){
operator = 3;
operatorState = true;
oldIterator = Float.parseFloat(lbl.getText());
return;
}
if(ae.getSource() == btnPow){
operator = 4;
operatorState = true;
oldIterator = Float.parseFloat(lbl.getText());
return;
}
if(ae.getSource() == btnReset){
operator = -1;
operatorState = true;
oldIterator = 0;
lbl.setText("0");
return;
}
// Tr

ng h p click vo nt s

if(operatorState){

// B t

u s

m i

lbl.setText(ae.getActionCommand());
operatorState = false;
}else

// G ti p s

lbl.setText(lbl.getText() + ae.getActionCommand());

157

}
public static void main(String[] args) {
// Khai bo v kh i t o frame
CalculatorDemo myFrame = new CalculatorDemo();
myFrame.setVisible(true);

// Hi n th

frame

}
}

Ch

ng trnh 6.22 s cho k t qu nh hnh 6.16:

Hnh 6.16: K t qu demo case study

T NG K T CH

NG 6

N i dung ch ng 6 trnh by ph
chu n AWT c a Java:
Cc i t
Dialog.

ng php l p trnh giao di n v i cc

ng c ch c n ng lm v t ch a cho cc

it

it

ng trong th vi n

ng giao di n: Frame, Panel,

Cc i t ng l thnh ph n giao di n: Label, Button, TextField, TextArea, Checkbox,


List, Menu.
Ph

ng php n m b t v x l cc s ki n

c th c a t ng

it

ng giao di n.

Cc ph ng php trnh by trn cc v t ch a: FlowLayout, GridLayout, BorderLayout,


GridBagLayout, NullLayout.
Ch ng 6 c ng gi i thi u m t ph
web, l l p trnh applet:

ng php l p trnh giao di n Java

Cch t o ra m t applet v i cc ph

c nhng trong cc trang

ng th c c b n.

Cch nhng m t applet vo m t trang web.


Cch ki m nghi m m t applet sau khi nhng vo trang web b ng cc trnh duy t.
Ngoi ra, ch ng ny c ng gi i thi u cch s d ng th vi n cc i t ng
ho m r ng JFC
c a Java. Cc i t ng c a th vi n JFC c ch c n ng hon ton t ng t cc i t ng t ng
ng trong th vi n chu n AWT. Ngoi ra, chng cn
c b sung thm m t s kh n ng
ho
cao c p.
158

CU H I V BI T P CH
1. Vi t ch

ng trnh thay

NG 6

i mu n n c a frame theo l a ch n c a ng

i dng:

T o ra cc nt nh n c tn theo cc mu: Blue, Cyan, Gray, Green, Magenta,


Orange, Pink, Red, White, Yellow.
Khi click chu t vo nt no, mu n n c a frame s

i theo mu .

2. Vi t ch ng trnh thay i mu n n trong bi 1 b ng v n b n. T o ra m t v n b n duy


nh t, khi ng i dng g vo m t trong s cc mu trong bi 1 v g enter, mu n n c a
frame s
i theo mu . N u ng i dng g sai mu, khng lm g c .
3. Vi t ch ng trnh thay i mu n n trong bi 1 b ng nt ch n radio. T o m t nhm cc
nt radio t ng ng v i cc lo i mu. Khi mu no
c ch n, mu n n c a frame s thay
i theo mu .
4. Vi t ch ng trnh thay i mu n n trong bi 1 b ng danh sch ch n list. T o m t List c
cc item t ng ng v i cc lo i mu. Khi mu no
c ch n, mu n n c a frame s thay
i theo mu .
5. Vi t ch ng trnh thay i mu n n trong bi 1 b ng menu. T o m t menubar, trn c
g n m t menu tn l color, khi click chu t vo mune color, s s xu ng cc mu t ng
ng trong bi 1. Khi mu no
c ch n, mu n n c a frame s thay i theo mu .
6. Vi t ch ng trnh thay i mu n n trong bi 1 b ng menu popup. T o m t menu popup
trong frame, khi click chu t ph i ln frame, s hi n ra menu g m cc mu t ng ng trong
bi 1. Khi mu no
c ch n, mu n n c a frame s thay i theo mu .
7. Vi t l i cc ch ng trnh trong cc bi t p 1 n 6 d i d ng applet v nhng chng vo
trang myHtml.htl
ch y. (Trang ny ph i cng th m c v i cc l p v a ci t v bin
d ch).

159

NG D N TR L I CU H I V BI T P

Ch

ng 1

Khng c bi t p.

Ch

ng 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. G i :
Xe t:
Nhn hi u xe
Cng su t xe
Mu s c xe
Gi bn xe
Nh p/xem nhn hi u xe
Nh p/xem cng su t xe
Nh p/xem mu s c xe
Nh p/xem gi bn xe
3. G i :
Xe bus:
Cng su t xe
S hi u tuy n xe
Nh p/xem cng su t xe
Nh p/xem s hi u tuy n xe
4. G i :
160

Engine:
Cng su t

ng c

Nh p/xem cng su t

ng c

Xe t k th a t Engine:
Nhn hi u xe
Mu s c xe
Gi bn xe
Nh p/xem nhn hi u xe
Nh p/xem mu s c xe
Nh p/xem gi bn xe
Xe bus k th a t Engine:
S hi u tuy n xe
Nh p/xem s hi u tuy n xe

Ch

ng 3
1.

p n: a, b v f.

2. Dng ki u int.
3. Dng ki u int.
4.

ng

5. Sai.
6.

ng.

7. Sai.
8.

ng

9. Sai.
10. 660.
11. Th c hi n 12 l n, k t qu l 55
12. Th c hi n 1 l n, k t qu 5.
13. Gi ng nhau.
14. G i :
Dng vng l p for ch y t 1

n 100

V i m i s , ki m tra xem s
l ch n hay l b ng cch xt s d c a php chia s
cho 2: n u d 0 l s ch n, d 1 l s l .

N u l s ch n th c ng d n vo t ng.
int sum = 0;
for(int i = 1; i<=100; i++)
if(i%2 == 0) sum += i;
System.out.println(T ng: + sum);

15. G i :

161

Th c hi n t ng t bi 14, ch khc l ki m tra s


chia h t th c ng vo t ng:

c chia h t cho 7 hay khng. N u

int sum = 0;
for(int i = 1; i<=100; i++)
if(i%7 == 0) sum += i;
System.out.println(T ng: + sum);

16. G i :
S d ng vng l p for, ch y t 1

n n, nhn d n vo tch:

long fact = 1;
for(int i = 1; i<=n; i++)
fact *= i;
System.out.println(Giai th a: + fact);

Ch

ng 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. G i :
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. G i :
interface Operator{
puclic int add(int, int);
puclic float add(float, float);
puclic double add(double, double);
puclic long add(long, long);
puclic string add(string, double);
puclic string add(string, string);
}
class OperatorImpl implements Operator{
puclic int add(int x, int y){
return x+y;
}
puclic float add(float x, float y){
return x+y;
}
puclic double add(double x, double y){
return x+y;
}
puclic long add(long x, long y){
return x+y;
}
puclic string add(string x, double y){
return x+y;
}
puclic string add(string x, string y){
return x+y;
}
}

17. G i (t b sung cc ph

ng th c kh i t o l p):

class abstract FlatObject{


public abstract float chuvi();
public abstract float dientich();
}
class Carre extends FlatObject{
private float length;
public float chuvi(){
return 4*length;
}
public float dientich(){
return length*length;
}

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;
}
}

Ch

ng 5
2. G i , ch c n s a l p Node
l u ki u char. Sau s a l i ch
l i l p MyStack (xem case study 4, ph n thao tc v i stack).

ng trnh, khng c n s a

public class Node{


private char value;
public Node(){
value = \0;
}
public Node(char value){
this.value = value;
}
public char getValue(){
return value;
}
public void setValue(char value){
this.value = value;
}
}

3. Xem case study 4, ph n thao tc v i hng

i.

4. G i :
public class Node{

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;
}
}

5. Xem case study 4, ph n thao tc v i danh sch lin k t.

Ch

ng 6
1. G i (t vi t hm main

test ch

ng 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]);
}
// Ph

ng th c b t s

ki n click vo nt

ng frame

this.addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e){
System.exit(0);
}
});
}
/* Ph

ng th c x

l s

ki n nt

c nh n */

public void actionPerformed(ActionEvent ae){

165

for(int i=0; i<colors.length; i++)


if((Button)ae.getSource() == btns[i]){
// Thi t l p mu n n theo mu t

ng

ng

return;
}
}
}

2. G i (t vi t hm main

test ch

ng trnh):

public class Bai2 extends Frame implements ActionListener{


TextField txt;
public Bai2(){
super(Bai2!);
this.setLayout(new FlowLayout());
txt = new TextFiled();
txt.addActionListener(this);
this.add(txt);
// Ph

ng th c b t s

ki n click vo nt

ng frame

this.addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e){
System.exit(0);
}
});
}
/* Ph

ng th c x

l s

ki n nt

c nh n */

public void actionPerformed(ActionEvent ae){


if((TextField)ae.getSource() == txt){
// Thi t l p mu n n theo mu t

ng

ng

return;
}
}
}

3. G i (t vi t hm main

test ch

ng trnh):

public class Bai3 extends Frame implements ItemListener{


String[10] colors = {Blue, Cyan, Gray, Green, Magenta,
Orange, Pink, Red, White, Yellow};
Checkbox[10] chx;
public Bai3(){
super(Bai3!);

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]);
}
// Ph

ng th c b t s

ki n click vo nt

ng frame

this.addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e){
System.exit(0);
}
});
}
/* Ph

ng th c x

l s

ki n nt

c nh n */

public void itemStateChange(ItemEvent ie){


if(ie.getStateChanged() == ItemEvent.SELECTED){
for(int i=0; i<colors.length; i++)
if((string)ie.getItem() == chx[i]){
// Thi t l p mu n n theo mu t

ng

ng

return;
}
}
}
}

4. G i (t vi t hm main

test ch

ng trnh):

public class Bai4 extends Frame implements ItemListener{


String[10] colors = {Blue, Cyan, Gray, Green, Magenta,
Orange, Pink, Red, White, Yellow};
List lst;
public Bai4(){
super(Bai4!);
this.setLayout(new FlowLayout());
lst = new List();
lst.addItemListener(this);
for(int i=0; i<colors.length; i++){
lst.add(colors[i]);
}

167

// Ph

ng th c b t s

ki n click vo nt

ng frame

this.addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e){
System.exit(0);
}
});
}
/* Ph

ng th c x

l s

ki n nt

c nh n */

public void itemStateChange(ItemEvent ie){


if(ie.getStateChanged() == ItemEvent.SELECTED){
for(int i=0; i<colors.length; i++)
if((string)ie.getItem() == chx[i]){
// Thi t l p mu n n theo mu t

ng

ng

return;
}
}
}
}

5. G i (t vi t hm main

test ch

ng trnh):

public class Bai5 extends Frame implements ActionListener{


String[10] colors = {Blue, Cyan, Gray, Green, Magenta,
Orange, Pink, Red, White, Yellow};
MenuBar mnb;
Menu mn;
public Bai5(){
super(Bai5!);
this.setLayout(new FlowLayout());
mnb = new MenuBar();
this.setmenuBar(mnb);
mn = new Menu();
mn.addActionListener(this);
mnb.add(mn);
for(int i=0; i<colors.length; i++){
mn.addItem(new MenuItem(colors[i]));
}
// Ph

ng th c b t s

ki n click vo nt

ng frame

this.addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e){
System.exit(0);
}

168

});
}
/* Ph

ng th c x

l s

ki n nt

c nh n */

public void actionPerformed(ActionEvent ae){


for(int i=0; i<colors.length; i++)
if(ae.getActionCommand().equals(colors[i])){
// Thi t l p mu n n theo mu t

ng

ng

return;
}
}
}

6. T

ng t bi 5, thay Menu b ng MenuPopup.

7. Lm t

ng t cc bi t 1

n 6, chuy n sang applet.

169

TI LI U THAM KH O
Ti li u ti ng Anh
1. Advanced Java. Aptech Worldwide Express.
2. An Introduction to Object-Oriented Programming with Java. C. Thomas Wu. McGrawHill Inc, 1999.
3. Big Java. Cay Horstmann. John Wiley & Sons Inc, 2002.
4. Core Java. Aptech Worldwide Express.
5. Data Structures and Algorithms in Java, second edition. Michael T. Goodrich and
Roberto Tamassia. John Wiley & Sons Inc, 2001.
6. Introduction to Programming in Java, first edition. J.N. Patterson Hume and Christine
Stephenson. 2000.
7. Java Algorithms. Scott Robert Ladd. McGraw-Hill Inc, 1997.
8. Java Distributed Objects. Bill McCarty and Luke Cassady-Dorion. A Division of
Macmillan Computer Publishing.
9. Java How to Program, fifth edition. H.M.Deitel and P.J. Deitel. Prentice Hall Inc, 2003.
10. Java Language Reference, second edition. Mark Grand. Oreilly Inc, 1997.
11. Java Software Solutions Foundations of Program Designe. John Lewis and William
Loftus. Addison-Weslay Inc, 1998.
12. Objects, Abstractions, Data Structures and Designe using Java. Elliot B. Koffman and
Paul A.T. Wolfgang. John Wiley & Sons Inc, 2005.
13. The JavaTM Class Libraries An Annotated Reference, the Java series. Patrick Chan and
Rosanna Lee. Addison-Wesley Inc, 1996.

Ti li u ti ng Vi t
1. Gio trnh L thuy t v Bi t p Java. Tr n Ti n D ng. NXB Gio d c, 1999.
2. L p trnh Java. NXB Th ng K, 2000.

170

M CL C
GI I THI U..................................................................................................................................... 2
PH N 1 ............................................................................................................................................ 4
NH NG KHI NI M C B N ..................................................................................................... 4
C A L P TRNH H
CH

NG

IT

NG..................................................................................... 4

NG 1...................................................................................................................................... 5

T NG QUAN V CCH TI P C N ............................................................................................. 5


H

NG

IT

NG .................................................................................................................... 5

1.1 PH NG PHP TI P C N C A L P TRNH TRUY N TH NG............................ 5


1.1.1 L p trnh tuy n tnh ................................................................................................... 5
1.1.2 L p trnh c u trc....................................................................................................... 5
1.2 PH NG PHP TI P C N H NG
I T NG ....................................................7
1.2.1 Ph ng php l p trnh h ng i t ng.................................................................... 7
1.2.2 Ph ng php phn tch v thi t k h ng i t ng................................................. 9
1.3 SO SNH HAI CCH TI P C N ................................................................................ 11
1.4 XU H NG PHT TRI N C A L P TRNH H
NG
IT
NG .................... 12
T NG K T CH NG 1 ..................................................................................................... 13
CH

NG 2.................................................................................................................................... 15

NH NG KHI NI M C B N C A.......................................................................................... 15
L P TRNH H

NG

IT

NG ............................................................................................ 15

2.1 CC KHI NI M C B N.......................................................................................... 15


2.1.1 i t ng................................................................................................................. 15
2.1.2 L p i t ng .......................................................................................................... 16
2.1.3 Tr u t ng ho i t ng theo ch c n ng .............................................................. 17
2.1.4 Tr u t ng ho i t ng theo d li u ................................................................... 18
2.1.5 Khi ni m k th a.................................................................................................... 19
2.1.6 Khi ni m ng gi ................................................................................................. 20
2.1.7 Khi ni m a hnh ................................................................................................... 21
2.2 SO SNH L P V C U TRC................................................................................... 22
2.3 THNH PH N PRIVATE V PUBLIC C A L P .................................................... 24
2.4 M T S NGN NG L P TRNH H
NG
I T NG ...................................... 24
2.4.1 C++ .......................................................................................................................... 25
2.4.2 ASP.NET v C#.NET..............................................................................................25
2.4.3 Java .......................................................................................................................... 26
T NG K T CH NG 2 ..................................................................................................... 26
CU H I V BI T P CH NG 2 ................................................................................. 27
PH N 2 .......................................................................................................................................... 28
L P TRNH H
CH

NG

IT

NG V I JAVA ......................................................................... 28

NG 3.................................................................................................................................... 29

GI I THI U V JAVA ................................................................................................................. 29

3.1 L CH S PHT TRI N C A JAVA............................................................................ 29


3.1.1 Java .......................................................................................................................... 29
3.1.2 c tr ng c a ngn ng Java .................................................................................. 29
3.1.3 Ci t Java..............................................................................................................32
171

3.2 KI N TRC CH NG TRNH XY D NG TRN JAVA ...................................... 33


3.2.1 Ki n trc ch ng trnh Java .................................................................................... 33
3.2.2 Ch ng trnh Java u tin......................................................................................36
3.2.3 Phn tch ch ng trnh u tin............................................................................... 36
3.3 CC KI U D LI U V TON T C B N TRN JAVA .................................... 38
3.3.1 Khai bo bi n........................................................................................................... 38
3.3.2 Ki u d li u ............................................................................................................. 39
3.3.3 Cc ton t ............................................................................................................... 40
3.4 CC C U TRC L NH TRN JAVA ........................................................................ 44
3.4.1 Cu l nh if-else........................................................................................................ 44
3.4.2 Cu l nh switch-case ...............................................................................................45
3.4.3 Vng l p While........................................................................................................46
3.4.4 Vng l p do-while ...................................................................................................47
3.4.5 Vng l p for.............................................................................................................48
3.5 CASE STUDY I ............................................................................................................. 49
T NG K T CH NG 3 ..................................................................................................... 51
CU H I V BI T P CH NG 3 ................................................................................. 51
CH

NG 4.................................................................................................................................... 54

K TH A V A HNH TRN JAVA ....................................................................................... 54

4.1 K TH A
N............................................................................................................. 54
4.1.1 L p........................................................................................................................... 54
4.1.2 S k th a ................................................................................................................ 58
4.2 K TH A B I............................................................................................................... 60
4.2.1 Giao ti p .................................................................................................................. 61
4.2.2 S d ng giao ti p..................................................................................................... 62
4.3 L P TR U T NG .....................................................................................................63
4.3.1 Khai bo................................................................................................................... 63
4.3.2 S d ng l p tr u t ng............................................................................................ 65
4.4 A HNH ....................................................................................................................... 66
4.4.1 N p ch ng................................................................................................................ 66
4.4.2 a hnh .................................................................................................................... 67
4.5 CASE STUDY II ............................................................................................................ 68
4.5.1 L p Human.............................................................................................................. 69
4.5.2 L p Person............................................................................................................... 69
4.5.3 L p Employee .........................................................................................................70
4.5.4 Ch ng trnh demo..................................................................................................72
T NG K T CH NG 4 ..................................................................................................... 73
CU H I V BI T P CH NG 4 ................................................................................. 73
CH

NG 5.................................................................................................................................... 78

BI U DI N V CI
CC C U TRC D

T ............................................................................................................ 78
LI U TR U T

NG TRN JAVA........................................................ 78

5.1 PH NG PHP DUY T V


QUI ........................................................................ 78
5.1.1 Cc ph ng php duy t ........................................................................................... 78
5.1.2 Ph ng php qui ................................................................................................. 79
5.2 PH NG PHP S P X P V TM KI M................................................................. 79
5.2.1 Cc ph ng php s p x p........................................................................................ 79
5.2.2 Cc ph ng php tm ki m...................................................................................... 81
5.3 NG N X P V HNG
I......................................................................................... 83
5.3.1 Ng n x p.................................................................................................................. 83
172

5.3.2 Hng i .................................................................................................................. 85


5.4 DANH SCH KIN K T.............................................................................................. 86
5.4.1 Danh sch lin k t n ............................................................................................ 86
5.4.2 Danh sch lin k t kp.............................................................................................91
5.5 CY NH PHN............................................................................................................ 96
5.6
TH ......................................................................................................................... 101
5.6.1 Bi u di n
th ..................................................................................................... 101
5.6.2 Ci t th khng c tr ng s ............................................................................ 102
5.6.3 Ci t th c tr ng s ....................................................................................... 107
5.7 CASE STUDY III.........................................................................................................111
T NG K T CH NG 5 ................................................................................................... 116
CU H I V BI T P CH NG 5 ............................................................................... 116
CH

NG 6.................................................................................................................................. 118

L P TRNH GIAO DI N TRN JAVA ..................................................................................... 118

6.1 GIAO DI N V I CC
I T NG C B N ......................................................... 118
6.1.1 Cc i t ng container c b n............................................................................. 118
6.1.2 Cc i t ng component c b n .......................................................................... 121
6.1.3 Cc s ki n c b n c a i t ng.......................................................................... 124
6.2 GIAO DI N V I CC
I T NG MULTIMEDIA .............................................. 127
6.2.1 nh d u v nt ch n ......................................................................................... 127
6.2.2 L a ch n ................................................................................................................ 129
6.2.3 Danh sch .............................................................................................................. 131
6.2.4 Trnh n ............................................................................................................... 133
6.3 CC K THU T T O 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 C u trc c a m t Applet........................................................................................143
6.4.2 S d ng applet .......................................................................................................144
6.4.3 Truy n tham s cho Applet ................................................................................... 147
6.5 GI I THI U V SWING ............................................................................................148
6.5.1 M r ng cc i t ng component........................................................................148
6.5.2 M r ng cc i t ng container .......................................................................... 150
6.6 CASE STUDY IV ........................................................................................................ 152
T NG K T CH NG 6 ................................................................................................... 158
CU H I V BI T P CH NG 6 ............................................................................... 159
H NG D N TR L I CU H I V BI T P .......................................................... 160
Ch ng 1 ........................................................................................................................ 160
Ch ng 2 ........................................................................................................................ 160
Ch ng 3 ........................................................................................................................ 161
Ch ng 4 ........................................................................................................................ 162
Ch ng 5 ........................................................................................................................ 164
Ch ng 6 ........................................................................................................................ 165
TI LI U THAM KH O .................................................................................................. 170
M C L C .......................................................................................................................... 171

173

You might also like