-1-
Ch
Ch
Ch
Ch
ơ
ơ
ơ
ơ
ng
ng
ng
ng
1
1
1
1
L
L
L
L
ậ
ậ
ậ
ậ
p
p
p
p
tr
tr
tr
tr
ì
ì
ì
ì
nh
nh
nh
nh
h
h
h
h
ớ
ớ
ớ
ớ
ng
ng
ng
ng
đố
đố
đố
đố
i
i
i
i
t
t
t
t
ợ
ợ
ợ
ợ
ng
ng
ng
ng
ph
ph
ph
ph
ơ
ơ
ơ
ơ
ng
ng
ng
ng
ph
ph
ph
ph
á
á
á
á
p
p
p
p
gi
gi
gi
gi
ả
ả
ả
ả
i
i
i
i
quy
quy
quy
quy
ế
ế
ế
ế
t
t
t
t
b
b
b
b
à
à
à
à
i
i
i
i
to
to
to
to
á
á
á
á
n
n
n
n
m
m
m
m
ớ
ớ
ớ
ớ
i
i
i
i
1.
1.
1.
1.
Ph
Ph
Ph
Ph
ơ
ơ
ơ
ơ
ng
ng
ng
ng
ph
ph
ph
ph
á
á
á
á
p
p
p
p
l
l
l
l
ậ
ậ
ậ
ậ
p
p
p
p
tr
tr
tr
tr
ì
ì
ì
ì
nh
nh
nh
nh
TừnhiềunămnaychúngtađãnghenhiềuđếnthuậtngữLậptrìnhhớngđối
tợng(OOP-ObjectOrientedProgramming).Vậythựcchấtnólàgì?Đểhiểu
đợcvấnđềnàychúngtabắtđầunhìnlạimộtchútlịchsửpháttriểncácphơng
pháplậptrình.Vàonhữngngàyđầupháttriểncủamáytính,khicácphầnmềmcòn
rấtđơngiảnchỉcỡvàichụcdònglệnh,chơngtrìnhđợcviếttuầntựvớicáccâu
lệnhthựchiệntừđầuđếncuối.Cáchviếtchơngtrìnhnhthếnàygọilàphơng
phápl
l
l
l
ậ
ậ
ậ
ậ
p
p
p
p
tr
tr
tr
tr
ì
ì
ì
ì
nh
nh
nh
nh
tuy
tuy
tuy
tuy
ế
ế
ế
ế
n
n
n
n
t
t
t
t
í
í
í
í
nh
nh
nh
nh
.Khoahọcmáytínhngàycàngpháttriển,cácphầnmềm
đòihỏingàycàngphứctạpvàlớnhơnrấtnhiều.Đếnlúcnàyphơngpháplậptrình
tuyếntínhtỏrakémhiệuquảvàcónhữngtrờnghợpngờilậptrìnhkhôngthể
kiểmsoátđợcchơngtrình.Thếlàphơngphápl
l
l
l
ậ
ậ
ậ
ậ
p
p
p
p
tr
tr
tr
tr
ì
ì
ì
ì
nh
nh
nh
nh
c
c
c
c
ấ
ấ
ấ
ấ
u
u
u
u
tr
tr
tr
tr
ú
ú
ú
ú
c
c
c
c
(LTCT)rađời.
Theocáchtiếpcậnnày,chơngtrìnhđợctổchứcthànhcácchơngtrìnhcon.
Mỗichơngtrìnhconđảmnhậnxửlýmộtcôngviệcnhỏtrongtoànbộhệthống.
Mỗichơngtrìnhconnàylạicóthểchianhỏthànhcácchơngtrìnhconnhỏhơn.
Quátrìnhphânchianhvậytiếptụcdiễnrachođếncácchơngtrìnhconnhỏnhận
đợcđủđơngiản.Ngờitagọiđólàquátrìnhlàmmịndần.Cácchơngtrìnhcon
tơngđốiđộclậpvớinhau,dođócóthểphâncôngchotừngnhómđảmnhậnviết
cácchơngtrìnhconkhácnhau.Ngônngữlậptrìnhthểhiệnrõnétnhấtphơng
pháplậptrìnhcấutrúcchínhlàPascal.Tuynhiên,khisửdụngphơngpháplập
trìnhnàyvẫncòngặpmộtkhókhănlớnlàtổchứcdữliệucủahệthốngnhthếnào
trongmáytính.BởivìtheoquanđiểmcủaLTCTthì
Chơngtrình=Cấutrúcdữ
liệu+Giảithuật
.Đểlàmđợcviệcnàyđòihỏingờilậptrìnhphảicókiếnrất
vữngvềcấutrúcdữliệu.Mộtkhókhănnữagặpphảilàgiảithuậtcủachơngtrình
phụthuộcrấtchặtchẽvàocấutrúcdữliệu,dovậychỉcầnmộtsựthayđổinhỏở
cấutrúcdữliệucũngcóthểlàmthayđổigiảithuậtvànhvậyphảiviếtlạichơng
trình.Điềunàyrõràngkhôngthểthíchhợpkhiphảixâydựngmộtdựánphầnmềm
rấtlớn.Mộtphơngpháplậptrìnhmớirađờiđểkhắcphụcnhợcđiểmnàyvàđó
chínhlàphơngphápl
l
l
l
ậ
ậ
ậ
ậ
p
p
p
p
tr
tr
tr
tr
ì
ì
ì
ì
nh
nh
nh
nh
h
h
h
h
ớ
ớ
ớ
ớ
ng
ng
ng
ng
đố
đố
đố
đố
i
i
i
i
t
t
t
t
ợ
ợ
ợ
ợ
ng
ng
ng
ng
(LTHĐT).Điểmcănbảncủa
phơngphápnàylàthiếtkếchơngtrìnhxoayquanhdữliệucủahệthống.Nghĩa
làlúcnàycácthaotácxửlýcủahệthốngđợcgắnliềnvớidữliệuvànhvậymột
sựthayđổinhỏcủadữliệuchỉảnhhởngđếncácmộtsốnhỏcáchàmxửlýliên
quan.Sựgắnkếtgiữadữliệuvàcáchàmxửlýtrênchúngtạorađốitợng.Mộtu
điểmnữacóởphơngphápLTHĐTlàcáchtiếpcậnbàitoántrởnêngầngũivới
thựctếhơn.Đểhiểurõhơnvềphơngpháplậptrìnhnày,khônggìtốthơnlà
chúngtađivàomộtbàitoáncụthể,chẳnghạnbàitoánquanhệgiađình.ởđâyyêu
NgônngữC++
-2-
cầulàmthếnàođểthểhiệnđợccácmốiquanhệgiữacácthànhviêntrongmột
giađìnhtrênmáytínhvàcóthểtrảlờiđợccâuhỏidạngkhátổngquát:AvàBcó
quanhệnhthếnàotronggiađình?vớiAvàBlàhaicáthểbấtkỳ.Chúngtasẽ
phântíchxemcáchgiảiquyếtbàitoánnàynhthếnào.
2.B
B
B
B
à
à
à
à
i
i
i
i
to
to
to
to
á
á
á
á
n
n
n
n
quan
quan
quan
quan
h
h
h
h
ệ
ệ
ệ
ệ
gia
gia
gia
gia
đì
đì
đì
đì
nh
nh
nh
nh
Trongxãhội,mỗingờiđềucómộtgiađình,trongđótồntạinhiềumốiquan
hệgiađìnhkháphứctạpnhông,bà,cha,mẹ,cô,chú,bác,v.v.Thôngthờng,để
thểhiệncácmốiquanhệnàyngờitabiểudiễnbằngmộtsơđồcâyquanhệ.Dới
đâylàmộtvídụbiểudiễnmộtgiađìnhbathếhệbằnghình1.1.
ĐểgiảiquyếtbàitoánnàytheophơngphápLTCT,côngviệcđầutiênlàphải
xâydựngmộtcấutrúcdữliệuthểhiệnđợccâyquanhệtrên.Trôngquacóvẻlà
đơngiảnnhngnếuthửlàmxemsẽthấykhôngđơngiảnchútnào,thậmchícòn
khó.Bởivìnóđòihỏingờilậptrìnhphảirấtthànhthạosửdụngcontrỏ,phảixây
dựngđợcgiảithuậtcậpnhậtthôngtintrêncâyquanhệ.Cácgiảithuậtnàytơng
đốiphứctạpđốivớimộtcấutrúcdữliệunhtrongbàitoán.Yêucầucủabàitoán
làtrảlờiđợccâuhỏidạngnhHngvàMaicóquanhệnhthếnào?.Câutrả
lờicủachơngtrìnhphảilàHnglàanhhọcủaMai.Đểcóthểthựchiệnđợc
nhvậy,rõràngchúngtaphảixâydựngđợcgiảithuậttìmđợcmốiquanhệgiữa
hainúttrêncâyquanhệ.Mộtvấnđềphứctạpvàtếnhịhơnlàtêngọichocácmối
quanhệgiađìnhởViệtnamrấtphongphú!Mộtkhókhănlàphảivétcạnhếtcác
mốiquanhệcóthểcótrênmộtcâyquanhệ.Mộtkhókhănnữagặpphảilàkhicần
pháttriển,chơngtrìnhphảiquảnlýđợcnhiềugiađìnhcùngmộtlúcvàcácgia
đìnhnàycómốiquanhệthônggiavớinhau.Hình1.2làsơđồquanhệđợcphát
triểntừsơđồvídụtrênminhhoạchovấnđềnày.
Mr.
Mr.
Mr.
Mr.
Th
Th
Th
Th
ắ
ắ
ắ
ắ
ng
ng
ng
ng
Ms.
Ms.
Ms.
Ms.
Nga
Nga
Nga
Nga
Mr.
Mr.
Mr.
Mr.
Quang
Quang
Quang
Quang
Mr.
Mr.
Mr.
Mr.
H
H
H
H
ng
ng
ng
ng
Ms.
Ms.
Ms.
Ms.
V
V
V
V
â
â
â
â
n
n
n
n
Miss.
Miss.
Miss.
Miss.
Mai
Mai
Mai
Mai
Miss.
Miss.
Miss.
Miss.
Trang
Trang
Trang
Trang
Mr.
Mr.
Mr.
Mr.
Tu
Tu
Tu
Tu
ấ
ấ
ấ
ấ
n
n
n
n
Ms.
Ms.
Ms.
Ms.
H
H
H
H
ằ
ằ
ằ
ằ
ng
ng
ng
ng
Hình1.1Câyquanhệtrongmộtgiađình
Lậptr
ì
nhhớngđố
it
ợng
-3-
Mộtcâuhỏiđặtra:Liệuvớicấutrúcdữliệucũcóđảmbảogiảiquyếtđợc
vấnđềnàykhông?.Rõràngcâutrảlờilàkhông.Sơđồquanhệtrênhìnhvẽsẽ
phảimôtảquanhệcủamộtgiađình.Chỉvớichútítsựthayđổivềcấutrúcdữliệu
cũngdẫnđếnmộtloạtvấnđềđòihỏiphảiviếtlạicácgiảithuậtcủachơngtrình.
Phơngpháplậptrìnhmớihớngđốitợngchophépchúngtakhắcphụcđợccác
vấnđềđãnêura.Trongsuốtcáctrìnhbàycủacuốnsáchnàysẽcốgắngnêubật
đợccáchgiảiquyếtvấnđềnhờLTHĐT.
TheocáchtiếpcậnLTHĐT,bàitoánquanhệgiađìnhđợcxemxétdớigóc
độquảnlýtậpcácđốitợngCon
Con
Con
Con
ng
ng
ng
ng
ờ
ờ
ờ
ờ
i
i
i
i
.Đểbiếtmốiquanhệgiađìnhcủamỗicá
thể,cầnthểhiệnmộtsốquanhệcơbảnnhcha,mẹ,anhem,concái,vợchồngcủa
cáthểđó.Nhvậy,mỗiđốitợngconngờicủabàitoáncócácthuộctínhriêng,
nóilênrằngchamẹ,anhem,v.v củahọlàai.Ngoàiracũngcầncómộtthuộctính
nữachobiếttêncáthểlàgì.Cóthểmôtảmộtlớpcácđốitợngconngờinh
hình1.3.
Nếuchỉcónhvậythìchẳngkhácgìmộtcấutrúchaybảnghitrongcấutrúc
dữdiệuđợcsửdụngởphơngphápLTCT.VấnđềởđâylàphơngphápLTHĐT
xemcácmốiquanhệtronggiađìnhđợchìnhthànhmộtcáchtựnhiêndocácsự
kiệncụthểtrongcuộcsốngtạonên.Vídụ,khingờiphụnữsinhcon,đứaconcô
Con
Con
Con
Con
ng
ng
ng
ng
ờ
ờ
ờ
ờ
i
i
i
i
Tên?
Cha?
Mẹ?
Anhem?
Concái?
Vợ/Chồng?
Hình1.3Môtảmộtlớpcácđốitợngconngời
Mr.
Mr.
Mr.
Mr.
Th
Th
Th
Th
ắ
ắ
ắ
ắ
ng
ng
ng
ng
Ms.
Ms.
Ms.
Ms.
Nga
Nga
Nga
Nga
Mr.
Mr.
Mr.
Mr.
Quang
Quang
Quang
Quang
Mr.
Mr.
Mr.
Mr.
H
H
H
H
ng
ng
ng
ng
Ms.
Ms.
Ms.
Ms.
V
V
V
V
â
â
â
â
n
n
n
n
Miss.
Miss.
Miss.
Miss.
Mai
Mai
Mai
Mai
Miss.
Miss.
Miss.
Miss.
Trang
Trang
Trang
Trang
Mr.
Mr.
Mr.
Mr.
Tu
Tu
Tu
Tu
ấ
ấ
ấ
ấ
n
n
n
n
Ms.
Ms.
Ms.
Ms.
H
H
H
H
ằ
ằ
ằ
ằ
ng
ng
ng
ng
Mr.
Mr.
Mr.
Mr.
Th
Th
Th
Th
à
à
à
à
nh
nh
nh
nh
Ms.
Ms.
Ms.
Ms.
Lan
Lan
Lan
Lan
-
-
-
-
Hình1.2Mởrộngquanhệgiữacácgiađình
NgônngữC++
-4-
tasinhrasẽcómẹlàcôtavàchalàchồngcôta,đồngthờianhchồngphảiđợc
cậpnhậtđểcóthêmđứaconnày.Nhữngđứacontrớccủacôtasẽcóthêmđứaem
nàyvàđứabécóthêmnhữngngờianhhoặcngờichịđó.Dễdàngthấyrằngcó
haisựkiệnchínhtácđộngđếnmốiquanhệgiađìnhlàsựsinhconcủangờiphụ
nữvàhônnhângiữahaicáthểkhácgiớitrongxãhội.Cácsựkiệnnàygắnliềnvới
từngconngờitrongbàitoán.Điềunàycónghĩalàkhinóiđếnmộtsựkiệnnàothì
phảichỉranóđợcphátsinhbởingờinào.Vídụ,khinóisựkiệnsinhconthìphải
biếtngờinàosinh.Khimộtsựkiệncủamộtconngờinàođóxảyra(vídụnh
sinhcon)thìcácthuộctínhcủachínhanhtasẽbịthayđổi,đồngthờithuộctínhcủa
mộtsốđốitợngliênquancũngcóthểthayđổitheo.Quátrìnhđónggóigiữacác
sựkiệnvàthuộctínhsẽtạoraĐố
Đố
Đố
Đố
i
i
i
i
t
t
t
t
ợ
ợ
ợ
ợ
ng,
ng,
ng,
ng,
kháiniệmcơbảncủaphơngpháp
LTHĐT.Mộtmôtảchungchocácđốitợngconngờicủabàitoánđợcgọilà
mộtL
L
L
L
ớ
ớ
ớ
ớ
p
p
p
p
.Hình1.4minhhoạmộtlớpConngờicóthêmcácsựkiệncủabàitoán.
Saukhiđãgắnkếtcácsựkiệnvàođốitợngnhtrên,vấnđềlàtạomộtsơđồ
quanhệgiađìnhnhthếnào.Dớiđâylàmộtvídụminhhoạviệctạoramộtquan
hệgiađìnhdựatrêncácsựkiệncuộcsống.Giảthiếtlàđãcóhaiđốitợnglàông
ThắngvàbàMai.
Ms.
Ms.
Ms.
Ms.
Mai
Mai
Mai
Mai
Mr.
Mr.
Mr.
Mr.
Th
Th
Th
Th
ắ
ắ
ắ
ắ
ng
ng
ng
ng
Mr.
Mr.
Mr.
Mr.
Tu
Tu
Tu
Tu
ấ
ấ
ấ
ấ
n
n
n
n
Miss.
Miss.
Miss.
Miss.
Nga
Nga
Nga
Nga
Con
Con
Con
Con
ng
ng
ng
ng
ờ
ờ
ờ
ờ
i
i
i
i
Tên?
Cha?
Mẹ?
Anhem?
Concái?
Vợ/Chồng?
Sinhcon
Cới
Hình1.4Cácsựkiệnbổsunggắnvớiconngời.
Lậptr
ì
nhhớngđố
it
ợng
-5-
Cácsựkiệnđểtạoracâyquanhệtrêncóthểviếttheotrậttựnhsau:
Thắng.Cới(Mai)
Mai.Sinhcon(gái,Nga)
Mai.Sinhcon(trai,Tuấn)
Cácsựkiệnviếttheocúpháp:
Nhvậycácbạnđãthấyrằngchúngtakhôngcầnphảiquantâmđếncáchtạo
mộtcấutrúccâyquanhệnhthếnàobêntrongdữliệucủachơngtrìnhmàvẫncó
thểcungcấpdữliệubàitoánchochơngtrìnhthôngquacácsựkiệnnhtrên.
Chúngtaquaylạivấnđềchínhcủabàitoánlàtrảlờicáccâuhỏivềmốiquanhệ
giađìnhnhthếnàokhitiếpcậnbàitoántheophơngphápnày.Đểtrảlờiđợc
câuhỏitổngquátXvàYcóquanhệgiađìnhnhthếnào?tacầnphảitrảlờicác
câuhỏinhỏnhXcóphảilàanhcủaYkhông?,XcóphảilàôngnộicủaY
không?,v.v CâuhỏicóthểnhìntừgócđộđốitợngXnh:Đốitợngcóphải
làanhcủaYkhông?,cóphảilàôngnộicủaYkhông?,v.v Nhvậycâuhỏi
lúcnàyđãgiaovềchođốitợngđểtrảlời.Cácđốitợnglúcnàycầnphảicócác
phơngthứcđểtrảlờicáccâuhỏinhvậy.VàbâygiờmộtlớpđốitợngCon
ngờiđợcminhhoạnhhình1.5.
Taxemxétcácđốitợngtrảlờicáccâuhỏinhthếnào?ChẳnghạnXtrảlời
câuhỏiĐốitợngcóphảilàanhcủaYkhông?hoàntoànđơngiản.Nóchỉcần
kiểmtraxemYcóphảilàanhemmàtrongthuộctínhcủanólugiữkhông.Hoàn
Con
Con
Con
Con
ng
ng
ng
ng
ờ
ờ
ờ
ờ
i
i
i
i
Tên?
Cha?
Mẹ?
Anhem?
Concái?
Vợ/Chồng?
Sinhcon
Cới
Làanh
Làôngnội
Hình1.5Thêmcácphơngthứctrảlờicâuhỏi
Đốitợngtạosựkiện.Sựkiện(thôngsốkèmtheosựkiện)
NgônngữC++
-6-
toàntơngtựđốivớicáccâuhỏiquanhệgầnnhlàem,làchị,làbố,làmẹ, Còn
câuhỏinhĐốitợngcóphảilàôngnộicủaYkhông?phứctạphơnchútít.Để
trảlờiđợccáccâuhỏicóquanhệxanhthếtaphảidựavàokếtquảtrảlờicủa
cáccâuhỏivềcácquanhệgầngũihơn.ĐểbiếtđợcXđúnglàôngnộicủaYthì
phảichỉramộtngờiZnàođómàXlàbốcủaZvàZlàbốcủaY.Nếukhôngchỉ
rađợcZthìXkhôngphảilàôngnộicủaY.ViệctìmkiếmZhoàntoànđơngiản
bởivìchơngtrìnhquảnlýtậpcácđốitợngconngời.HãytìmZtrongtậpđối
tợngConngời.Cóthểthấycâuhỏibanđầuđãđợcphânchiathànhhaicâuhỏi
đơngiảnvớichúngmàđãcócáchtrảlời.Tómlại,cácvấnđềcủabàitoánđãđợc
giảiquyếtkhitiếpcậntheophơngphápLTHĐT.Mộtlợiđiểmcóthểthấyngaylà
bàitoánđợcphântíchrấtgầnvớithựctếvàtựnhiên.
Trênđâymớichỉlàsựphântíchsơkhaibàitoándựatheophơngpháp
LTHĐT.ĐểlàmhoànchỉnhđợcbàitoáncòncầnmộtsốkĩthuậtcủaLTHĐTnh
tínhkếthừa,tínhđahình, Chúngtôihyvọngrằngquasựphântíchmộtbàitoán
nhỏtrênđãchứngtỏđợclợiíchcủaphơngphápLTHĐT.Trongmụctiếptheo
chúngtôisẽtómtắtvàđaratổngquansơbộvềLTHĐT.
3.
3.
3.
3.
L
L
L
L
ậ
ậ
ậ
ậ
p
p
p
p
tr
tr
tr
tr
ì
ì
ì
ì
nh
nh
nh
nh
h
h
h
h
ớ
ớ
ớ
ớ
ng
ng
ng
ng
đố
đố
đố
đố
i
i
i
i
t
t
t
t
ợ
ợ
ợ
ợ
ng
ng
ng
ng
Lậptrìnhhớngđốitợngđặttrọngtâmvàođốitợng,yếutốquantrọng
trongquátrìnhpháttriểnchơngtrìnhvàkhôngchophépdữliệubiếnđộngtựdo
tronghệthống.Dữliệuđợcgắnchặtvớicáchàmthànhcácvùngriêngmàchỉcó
cáchàmđótácđộnglênvàcấmcáchàmbênngoàitruynhậptớimộtcáchtuỳtiện.
LTHĐTchophépchúngtaphântíchbàitoánthànhcácthựcthểđợcgọilàcácđối
tợngvàsauđóxâydựngcácdữliệucùngcáchàmxungquanhcácđốitợngđó.
Cácđốitợngcóthểtácđộng,traođổithôngtinvớinhauthôngquacơchếthông
báo(message).Tổchứcmộtchơngtrìnhhớngđốitợngcóthểmôtảnhtrong
hình1.6.
LTHĐTcócácđặctínhchủyếusau:
1.Tậptrungvàodữliệuthaychocáchàm
Đố
Đố
Đố
Đố
i
i
i
i
t
t
t
t
ợ
ợ
ợ
ợ
ng
ng
ng
ng
B
B
B
B
Dữliệu
Hàm
Đố
Đố
Đố
Đố
i
i
i
i
t
t
t
t
ợ
ợ
ợ
ợ
ng
ng
ng
ng
A
A
A
A
Dữliệu
Hàm
Đố
Đố
Đố
Đố
i
i
i
i
t
t
t
t
ợ
ợ
ợ
ợ
ng
ng
ng
ng
C
C
C
C
Dữliệu
Hàm
message
Hình1.6Cácđốitợngtraođổiquathôngbáo
Lậptr
ì
nhhớngđố
it
ợng
-7-
2.Chơngtrìnhđợcchiathànhcácđốitợng.
3.Cáccấutrúcdữliệuđợcthiếtkếsaochođặctảđợcđốitợng.
4.Cáchàmthaotáctrêncácvùngdữliệucủađốitợngđợcgắnvớicấu
trúcdữliệuđó.
5.
Dữliệuđợcđónggóilại,đợcchegiấuvàkhôngchophépcáchàm
ngoạilaitruynhậptựdo.
6.Cácđốitợngtácđộngvàtraođổithôngtinvớinhauquacáchàm
7.Cóthểdễdàngbổsungdữliệuvàcáchàmmớivàođốitợngnàođó
khicầnthiết
8.Chơngtrìnhđợcthiếtkếtheocáchtiếpcậntừdớilên(bottom-up).
SauđâylàmộtsốkháiniệmđợcsửdụngtrongLTHĐT.
3.1
3.1
3.1
3.1
M
M
M
M
ộ
ộ
ộ
ộ
t
t
t
t
s
s
s
s
ố
ố
ố
ố
kh
kh
kh
kh
á
á
á
á
i
i
i
i
ni
ni
ni
ni
ệ
ệ
ệ
ệ
m
m
m
m
Đố
Đố
Đố
Đố
i
i
i
i
t
t
t
t
ợ
ợ
ợ
ợ
ng
ng
ng
ng
(object)
(object)
(object)
(object)
Đốitợnglàsựkếthợpgiữadữliệuvàthủtục(haycòngọilàcácphơngthức
-method)thaotáctrêndữliệuđó.Cóthểđaracôngthứcphảnánhbảnchấtkỹ
thuậtcủaLTHĐTnhsau:
Đố
Đố
Đố
Đố
i
i
i
i
t
t
t
t
ợ
ợ
ợ
ợ
ng
ng
ng
ng
=
=
=
=
D
D
D
D
ữ
ữ
ữ
ữ
li
li
li
li
ệ
ệ
ệ
ệ
u
u
u
u
+
+
+
+
Ph
Ph
Ph
Ph
ơ
ơ
ơ
ơ
ng
ng
ng
ng
th
th
th
th
ứ
ứ
ứ
ứ
c
c
c
c
L
L
L
L
ớ
ớ
ớ
ớ
p
p
p
p
(class)
(class)
(class)
(class)
LớplàmộtkháiniệmmớitrongLTHĐTsovớicáckỹthuậtlậptrìnhkhác.Đó
làmộttậpcácđốitợngcócấutrúcdữliệuvàcácphơngthứcgiốngnhau(haynói
cáchkháclàmộttậpcácđốitợngcùngloại).Nhvậykhicómộtlớpthìchúngta
sẽbiếtđợcmộtmôtảcấutrúcdữliệuvàphơngthứccủacácđốitợngthuộclớp
đó.Mỗiđốitợngsẽlàmộtthểhiệncụthể(instance)củalớpđó.Tronglậptrình,
chúngtacóthểcoimộtlớpnhlàmộtkiểu,còncácđốitợngsẽlàcácbiếncó
kiểucủalớp.
Nguy
Nguy
Nguy
Nguy
ê
ê
ê
ê
n
n
n
n
t
t
t
t
ắ
ắ
ắ
ắ
c
c
c
c
đó
đó
đó
đó
ng
ng
ng
ng
g
g
g
g
ó
ó
ó
ó
i
i
i
i
d
d
d
d
ữ
ữ
ữ
ữ
li
li
li
li
ệ
ệ
ệ
ệ
u
u
u
u
TrongLTCTtađãthấylàcáchàmhaythủtụcđợcsửdụngmàkhôngcần
biếtđếnnộidungcụthểcủanó.Ngờisửdụngchỉcầnbiếtchứcnăngcủahàm
cũngnhcácthamsốcầntruyềnvàođểgọihàmchạymàkhôngcầnquantâmđến
nhữnglệnhcụthểbêntrongnó.Ngờitagọiđólàsựđónggóivềchứcnăng.
TrongLTHĐT,khôngnhữngcácchứcnăngđợcđónggóimàcảdữliệucũng
nhvậy.Vớimỗiđốitợngngờitakhôngthểtruynhậptrựctiếpvàocácthành
phầndữliệucảunómàphảithôngquacácthànhphầnchứcnăng(cácphơngthức)
đểlàmviệcđó.
Chúngtasẽthấysựđónggóithựcsựvềdữliệuchỉcótrongmộtngônngữ
LTHĐTthuầnkhiết(pure)theonghĩacácngônngữđợcthiếtkếngaytừđầuchỉ
NgônngữC++
-8-
choLTHĐT.Cònđốivớicácngônngữlai(hybrid)đợcxâydựngtrêncácngôn
ngữkhácbanđầuchaphảilàHĐTnhC++đợcnóiđếntrongcuốnsáchnày,
vẫncónhữngngoạilệnhấtđịnhviphạmnguyêntắcđónggóidữliệu.
T
T
T
T
í
í
í
í
nh
nh
nh
nh
k
k
k
k
ế
ế
ế
ế
th
th
th
th
ừ
ừ
ừ
ừ
a
a
a
a
(inheritance)
(inheritance)
(inheritance)
(inheritance)
MộtkháiniệmquantrọngcủaLTHĐTlàsựkếthừa.Sựkếthừachophép
chúngtađịnhnghĩamộtlớpmớitrêncơsởcáclớpđãtồntại,tấtnhiêncóbổsung
nhữngphơngthứchaycácthànhphầndữliệumới.Khảnăngkếthừachophép
chúngtasửdụnglạimộtcáchdễdàngcácmodulechơngtrìnhmàkhôngcầnmột
thayđổicácmoduleđó.RõràngđâylàmộtđiểmmạnhcủaLTHĐTsovớiLTCT.
T
T
T
T
í
í
í
í
nh
nh
nh
nh
đ
đ
đ
đ
a
a
a
a
h
h
h
h
ì
ì
ì
ì
nh
nh
nh
nh
(polymorphime)
(polymorphime)
(polymorphime)
(polymorphime)
Tínhđahìnhxuấthiệnkhicókháiniệmkếthừa.Giảsửchúngtacómộtkế
thừalớphìnhtứgiácvàlớphìnhtamgiáckếthừatừlớphìnhđagiác(hìnhtamgiác
vàtứgiácsẽcóđầyđủcácthuộctínhvàtínhchấtcủamộthìnhđagiác).Lúcnày
mộtđốitợngthuộclớphìnhtamgiáchaytứgiácđềucóthểhiểurằngnólàmột
hìnhđagiác.Mặtkhácvớimỗiđagiáctacóthểtínhdiệntíchcủanó.Nhvậylàm
thếnàomàmộtđagiáccóthểsửdụngđúngcôngthứcđểtínhdiệntíchphùhợpvới
nólàhìnhtamgiáchaytứgiác.Tagọiđólàtínhđahình.
3.2
3.2
3.2
3.2
C
C
C
C
á
á
á
á
c
c
c
c
u
u
u
u
đ
đ
đ
đ
i
i
i
i
ể
ể
ể
ể
m
m
m
m
c
c
c
c
ủ
ủ
ủ
ủ
a
a
a
a
LTH
LTH
LTH
LTH
Đ
Đ
Đ
Đ
T
T
T
T
LTHĐTđemlạimộtsốlợithếchongờithiếtkếlẫnngờilậptrình.Cáchtiếp
cậnhớngđốitợnggiảiquyếtđợcnhiềuvấnđềtồntạitrongquátrìnhpháttriển
phầnmềmvàtạorađợcnhữngphầnmềmcóđộphứctạpvàchấtlợngcao.
Phơngphápnàymởramộttriểnvọngtolớnchongờilậptrình.Nhữnguđiểm
chínhcủaLTHĐTlà:
1.Thôngquanguyênlýkếthừa,chúngtacóthểloạibỏđợcnhữngđoạn
chơngtrìnhlặplạitrongquátrìnhmôtảcáclớpvàcóthểmởrộngkhả
năngsửdụngcủacáclớpđãxâydựngmàkhôngcầnphảiviếtlại.
2.Chơngtrìnhđợcxâydựngtừnhữngđơnthể(đốitợng)traođổivới
nhaunênviệcthiếtkếvàlậptrìnhsẽđợcthựchiệntheoquytrìnhnhất
địnhchứkhôngphảidựavàokinhnghiệmvàkỹthuậtnhtrớcnữa.Điều
nàyđảmbảorútngắnđợcthờigianxâydựnghệthốngvàtăngnăngsuất
laođộng.
3.Nguyênlýđónggóihaychegiấuthôngtingiúpngờilậptrìnhtạorađợc
nhữngchơngtrìnhantoànkhôngbịthayđổibởinhữngđoạnchơng
trìnhkhác.
4.Cóthểxâydựngđợcánhxạcácđốitợngcủabàitoánvàođốitợng
chơngtrình.
5.Cáchtiếpcậnthiếtkếđặttrọngtâmvàodữliệu,giúpchúngtaxâydựng
đợcmôhìnhchitiếtvàdễdàngcàiđặthơn.
Lậptr
ì
nhhớngđố
it
ợng
-9-
6.Cáchệthốnghớngđốitợngdễmởrộng,nângcấpthànhnhữnghệlớn
hơn.
7.Kỹthuậttruyềnthôngbáotrongviệctraođổithôngtingiữacácđốitợng
làmchoviệcmôtảgiaodiệnvớicáchệthốngbênngoàitrởnênđơngiản
hơn.
8.Cóthểquảnlýđợcđộphứctạpcủanhữngsảnphẩmphầnmềm.
3.3
3.3
3.3
3.3
Nh
Nh
Nh
Nh
ữ
ữ
ữ
ữ
ng
ng
ng
ng
ứ
ứ
ứ
ứ
ng
ng
ng
ng
d
d
d
d
ụ
ụ
ụ
ụ
ng
ng
ng
ng
c
c
c
c
ủ
ủ
ủ
ủ
a
a
a
a
LTH
LTH
LTH
LTH
Đ
Đ
Đ
Đ
T
T
T
T
LTHĐTlàmộttrongnhữngthuậtngữđợcnhắcđếnnhiềunhấthiệnnay
trongcôngnghệphầnmềmvànóđợcứngdụngđểpháttriểnphầnmềmtrong
nhiềulĩnhvựckhácnhau.Trongsốđó,ứngdụngquantrọngvànổitiếngnhấthiện
naylàthiếtkếgiaodiệnvớingờisửdụng,kiểunhWindows.Cáchệthôngtin
quảnlýtrongthựctếthờngrấtphứctạp,chứanhiềuđốitợngvớicácthuộctính
vàhàmphứctạp.Đểgiảiquyếtnhữnghệthôngtinphứctạpnhthế,LTHĐTtỏra
rấthiệuquả.CáclĩnhvựcứngdụngphùhợpvớikỹthuậtLTHĐTcóthểliệtkênh
dớiđây:
*
Cáchệthốnglàmviệctheothờigianthực.
*Cáchệmôhìnhhoáhoặcmôphỏngcácquátrình.
*Cáchệcơsởdữliệuhớngđốitợng.
*
Cáchệsiêuvănbản(hypertext),đaphơngtiện(multimedia).
*
Cáchệthốngtrítuệnhântạovàcáchệchuyêngia.
*
Cáchệthốngsongsongvàmạngnơ-ron.
*
Cáchệtựđộnghoávănphònghoặctrợgiúpquyếtđịnh.
*CáchệCAD/CAM.
VớinhiềuđặctínhphongphúcủaLTHĐTnóiriêng,củaphơngphápphân
tíchthiếtkếvàpháttriểnhớngđốitợngnóichungchúngtahyvọngcôngnghiệp
phầnmềmsẽcónhữngcảitiếnnhảyvọtkhôngnhữngvềchấtlợng,màcòngia
tăngnhanhvềsốlợngtrongtơnglai.
4.
4.
4.
4.
C
C
C
C
á
á
á
á
c
c
c
c
ng
ng
ng
ng
ô
ô
ô
ô
n
n
n
n
ng
ng
ng
ng
ữ
ữ
ữ
ữ
l
l
l
l
ậ
ậ
ậ
ậ
p
p
p
p
tr
tr
tr
tr
ì
ì
ì
ì
nh
nh
nh
nh
h
h
h
h
ớ
ớ
ớ
ớ
ng
ng
ng
ng
đố
đố
đố
đố
i
i
i
i
t
t
t
t
ợ
ợ
ợ
ợ
ng
ng
ng
ng
LTHĐTkhôngphảilàđặcquyềncủamộtngônngữđặcbiệtnào.Cũnggiống
nhkỹthuậtlậptrìnhcócấutrúc,cáckháiniệmtrongLTHĐTđợcthểhiệntrong
nhiềungônngữlậptrìnhkhácnhau.Nhữngngônngữcungcấpđợcnhữngkhả
năngLTHĐTđợcgọilàngônngữlậptrìnhhớngđốitợng.Tuyvẫncónhững
ngônngữchỉcungcấpkhảnăngtạolớpvàđốitợngmàkhôngchophépkếthừa,
dođóhạnchếkhảnăngLTHĐT.Hình1.7chochúngtamộtcáinhìntổngquanvề
sựpháttriểncácngônngữLTHĐT.
NgônngữC++
-10-
CácngônngữSIMULA,SMALLTALK,JAVAthuộchọngônngữLTHĐT
thuầnkhiết,nghĩalànókhôngchophéppháttriểncácchơngtrìnhcấutrúctrên
cácngônngữloạinày.CònngônngữC++thuộcloạingônngữlaibởivìnóđợc
pháttriểntừngônngữC.DođótrênC++vẫncóthểsửdụngtínhcấutrúcvàđối
tợngcủachơngtrình.Điềunàytỏrarấtphùhợpkhichúngtamớibắtđầuhọc
mộtngônngữlậptrình.ĐóchínhlàlýdomàchúngtôisửdụngngônngữC++để
giớithiệuphơngphápLTHĐTtrongcuốnsáchnày.MộtlýdokhácnữalàC++sử
dụngcúphápcủangônngữClàngônngữrấtthôngdụngtronglậptrìnhchuyên
nghiệp.
5.
5.
5.
5.
Ng
Ng
Ng
Ng
ô
ô
ô
ô
n
n
n
n
ng
ng
ng
ng
ữ
ữ
ữ
ữ
l
l
l
l
ậ
ậ
ậ
ậ
p
p
p
p
tr
tr
tr
tr
ì
ì
ì
ì
nh
nh
nh
nh
C++
C++
C++
C++
Vàonăm1983,giáosBjarneStroustrapbắtđầunghiêncứuvàpháttriểnviệc
càiđặtkhảnăngLTHĐTvàongônngữCtạoramộtngônngữmớigọilàC++.Tên
gọinàycóthểphântíchýnghĩarằngnólàngônngữCmàcóhaiđặcđiểmmới
tơngứngvớihaidấucộng.Đặcđiểmthứnhấtlàmộtsốkhảnăngmởrộngsovới
Cnhthamchiếu,chồnghàm,thamsốmặcđịnh Đặcđiểmthứhaichínhlàkhả
năngLTHĐT.HiệnnayC++chaphảilàmộtngônngữhoàntoànổnđịnh.Kểtừ
khiphiênbảnđầutiênrađờivàonăm1986đãcórấtnhiềuthayđổitrongcácphiên
bảnC++khácnhau:bản1.1rađờivàonăm1986,2.0vàonăm1989và3.0vào
năm1991.Phiênbản3.0nàyđợcsửdụngđểlàmcơsởchoviệcđịnhnghĩamột
ngônngữC++chuẩn(kiểunhAnsiC).
SIMULA(66)
SMALLTALK(71)
SMALLTALK(80)
ADA(83)
C++(86)
EIFFEL(90)
JAVA(95)
ADA(95)
Hình1.7SựpháttriểncủacácngônngữLTHĐT
Lậptr
ì
nhhớngđố
it
ợng
-11-
TrênthựctếhiệnnaytấtcảcácchơngtrìnhdịchC++đềutơngthíchvới
phiênbản3.0.VìvậyC++hầunhkhônggâybấtkỳmộtkhókhănnàokhichuyển
đổitừmộtmôitrờngnàysangmôitrờngkhác,nhchúngtađãbiếtC++nhlà
mộtsựbổsungkhảnăngLTHĐTvàongônngữC.Sẽcónhiềungờinghĩrằng
ngônngữCnóiởđâylàCtheochuẩnANSI.Thựcrakhôngphảihoàntoànnhvậy.
TênthựctếvẫntồntạimộtvàiđiểmkhôngtơngthíchgiữaANSICvàC++.
MặtkháccũngcầnthấyrằngnhữngmởrộngcótrongC++sovớiAnsiC
khôngchỉlàđểphụcvụchomụcđíchtạochongônngữkhảnăngLTHĐT.Có
nhữngthayđổichỉvớimụcđíchđơnthuầnlàtăngsứcmạnhchongônngữChiện
thời.
NgoàiracómộtvàithayđổinhỏởC++sovớiANSICnhsau:
*
Địnhnghĩacáchàm:khaibáo,truyềnthamsốvàgiátrị
trảlại.
*Sựtơngthíchgiữacáccontrỏ.
*
Tínhlinhhoạtcủacáchằng(const).
C
C
C
C
á
á
á
á
c
c
c
c
đặ
đặ
đặ
đặ
c
c
c
c
đ
đ
đ
đ
i
i
i
i
ể
ể
ể
ể
m
m
m
m
m
m
m
m
ở
ở
ở
ở
r
r
r
r
ộ
ộ
ộ
ộ
ng
ng
ng
ng
trong
trong
trong
trong
C++
C++
C++
C++
NhđãđềcậpởtrênC++chứacảnhữngmởrộngsovớiCmàkhôngliên
quanđếnkỹthuậthớngđốitợng.Nhữngmởrộngnàysẽđợcmôtảcụthểtrong
chơngsau,ởđâychúngtachỉtómtắtlạimộtvàiđiểmchính.
*Khảnăngviếtcácdòngchúthíchmới.
*
Khảnăngkhaibáolinhhoạthơn.
*Khảnăngđịnhnghĩalạicáchàm:cáchàmcùngtêncóthể
thựchiệntheonhữngthaotáckhácnhau.Cáclờigọihàmsẽdùngkiểu
vàsốthamsốđểxácđịnhđúnghàmnàocầnthựchiện.
*
Cóthêmcáctoántửđịnhnghĩabộnhớđộngmới:newvà
delete.
*
Khảnăngđịnhnghĩacáchàminlineđểtăngtốcđộthực
hiệnchơngtrình.
*
Tạocácbiếnthamchiếuđếncácbiếnkhác.
LTH
LTH
LTH
LTH
Đ
Đ
Đ
Đ
T
T
T
T
trong
trong
trong
trong
C++
C++
C++
C++
C++chứađựngkháiniệmlớp.Mộtlớpbaogồmcácthànhphầndữliệuhaylà
thuộctínhvàcácphơngthứchaylàhàmthànhphần.Từmộtlớptacóthểtạora
cácđốitợnghoặcbằngcáchkhaibáothôngthờngmộtbiếncókiểulàlớpđó
hoặcbằngcáchcấpphátbộnhớđộngnhờsửdụngtoántửnew.C++chophép
chúngtađónggóidữliệunhngnókhôngbắtbuộcchúngtathựchiệnđiềuđó.
ĐâylàmộtnhợcđiểmcủaC++.TuynhiêncũngcầnthấyrằngbảnthânC++chỉ
làsựmởrộngcủaCnênnókhôngthểlàmộtngônngữLTHĐTthuầnkhiếtđợc.
NgônngữC++
-12-
C++chophéptađịnhnghĩacáchàmthiếtlập(constructor)chomộtlớp.Hàm
thiếtlậplàmộtphơngthứcđặcbiệtđợcgọiđếntạithờiđiểmmộtđốitợngcủa
lớpđợctạora.hàmthiếtlậpcónhiệmvụkhởitạomộtđốitợng:cấpphátbộnhớ,
gáncácgiátrịchocácthànhphầndữliệucũngnhviệcchuẩnbịchỗchocácđối
tợngmới.Mộtlớpcóthểcómộthaynhiềuhàmthiếtlập.Đểxácđịnhhàmthiết
lậpnàocầngọiđến,chơngtrìnhbiêndịchsẽsosánhcácđốisốvớicácthamsố
truyềnvào.Tơngtựnhhàmthiếtlập,mộtlớpcóthểcómộthàmhuỷbỏ
(destructor),mộtphơngthứcđặcbiệtđợcgọiđếnkhiđốitợngđợcgiảiphóng
khỏibộnhớ.
LớptrongC++thựcchấtlàmộtkiểudữliệudongờisửdụngđịnhnghĩa.
Kháiniệmđịnhnghĩachồngtoántửchophépđịnhnghĩacácphéptoántrênmột
lớpgiốngnhcáckiểudữliệuchuẩncủaC.Vídụtacóthểđịnhnghĩamộtlớpsố
phứcvớicácphéptoáncộng,trừ,nhân,chia.
CũnggiốngnhC,C++cókhảnăngchuyểnđổikiểu.Khôngnhữngthế,C++
cònchophépmởrộngsựchuyểnđổinàysangcáckiểudongờisửdụngtựđịnh
nghĩa(cáclớp).Vídụ,tacóthểchuyểnđổitừkiểuchuẩnintcủaCsangkiểusố
phứcmàtađịnhnghĩachẳnghạn.
C++chophépthựchiệnkếthừacáclớpđãxâydựng.Từphiênbản2.0trởđi,
C++cònchophépmộtlớpkếthừacùngmộtlúctừnhiềunhiềulớpkhácnhau(gọi
làsựđakếthừa).
CuốicùngC++cungcấpnhữngthaotácvàoramớidựatrêncơsởkháiniệm
luồngdữliệu(flow).Sựuviệtcủacácthaotácnàyởchỗ:
*
Sửdụngđơngiản.
*Kíchthớcbộnhớđợcrútgọn.
*Khảnăngápdụngtrêncáckiểudongờisửdụngđịnh
nghĩabằngcáchsửdụngcơchếđịnhnghĩachồngtoántử.
Lậptr
ì
nhhớngđố
it
ợng
-13-
1.Phơngpháplậptrình 1
2.Bàitoánquanhệgiađình 2
3.Lậptrìnhhớngđốitợng 6
3.1Mộtsốkháiniệm 7
3.2CácuđiểmcủaLTHĐT 8
3.3NhữngứngdụngcủaLTHĐT 9
4.Cácngônngữlậptrìnhhớngđốitợng 9
5.NgônngữlậptrìnhC++
10