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

-1-
Ch
Ch
Ch
Ch
ơ
ơ
ơ
ơ
ng
ng
ng
ng
1
1
1
1
L
L
L
L




p
p
p
p
tr
tr

t
t
t
t




ng
ng
ng
ng
ph
ph
ph
ph
ơ
ơ
ơ
ơ
ng
ng
ng
ng
ph
ph
ph
ph
á
á

b
b
b
b
à
à
à
à
i
i
i
i
to
to
to
to
á
á
á
á
n
n
n
n
m
m
m
m



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

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


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





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

á
á
n
n
n
n
quan
quan
quan
quan
h
h
h
h




gia
gia
gia
gia
đì
đì
đì
đì
nh
nh
nh
nh


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


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

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

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

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


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

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.



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ệ

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.





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

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

ì
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


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





li
li
li
li




u
u
u
u
+
+
+
+
Ph
Ph
Ph
Ph
ơ
ơ
ơ
ơ
ng
ng

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

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

(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

á
á
c
c
c
c




u
u
u
u
đ
đ
đ
đ
i
i
i
i




m
m
m
m

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

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

á
á
á
c
c
c
c
ng
ng
ng
ng
ô
ô
ô
ô
n
n
n
n
ng
ng
ng
ng




l
l
l

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




l
l
l
l




p
p
p
p
tr
tr
tr
tr
ì
ì
ì
ì
nh
nh
nh
nh
C++

đổ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
đặ
đặ
đặ

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à

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.


Nhờ tải bản gốc

Tài liệu, ebook tham khảo khác

Music ♫

Copyright: Tài liệu đại học © DMCA.com Protection Status