Tải bản đầy đủ (.pdf) (13 trang)

Giáo trình C++ - Đại Học Bách Khoa (phần 3) pps

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (228.46 KB, 13 trang )

-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

×