Giáo trình Lập trình hướng đối tượng với C++ - Chương 1: Lập trình hướng đối tượng, phương pháp giải quyết bài toán mới
Ch-¬ng 1
LËp tr×nh h-íng ®èi t-îng
ph-¬ng ph¸p gi¶i quyÕt bµi to¸n míi
Ph-¬ng ph¸p lËp tr×nh
1.
Tõ nhiÒu n¨m nay chóng ta ®· nghe nhiÒu ®Õn thuËt ng÷ “LËp tr×nh h-íng ®èi
t-îng” (OOP - Object Oriented Programming). VËy thùc chÊt nã lµ g×? §Ó hiÓu
®-îc vÊn ®Ò nµy chóng ta b¾t ®Çu nh×n l¹i mét chót lÞch sö ph¸t triÓn c¸c ph-¬ng
ph¸p lËp tr×nh. Vµo nh÷ng ngµy ®Çu ph¸t triÓn cña m¸y tÝnh, khi c¸c phÇn mÒm cßn
rÊt ®¬n gi¶n chØ cì vµi chôc dßng lÖnh, ch-¬ng tr×nh ®-îc viÕt tuÇn tù víi c¸c c©u
lÖnh thùc hiÖn tõ ®Çu ®Õn cuèi. C¸ch viÕt ch-¬ng tr×nh nh- thÕ nµy gäi lµ ph-¬ng
ph¸p lËp tr×nh tuyÕn tÝnh. Khoa häc m¸y tÝnh ngµy cµng ph¸t triÓn, c¸c phÇn mÒm
®ßi hái ngµy cµng phøc t¹p vµ lín h¬n rÊt nhiÒu. §Õn lóc nµy ph-¬ng ph¸p lËp tr×nh
tuyÕn tÝnh tá ra kÐm hiÖu qu¶ vµ cã nh÷ng tr-êng hîp ng-êi lËp tr×nh kh«ng thÓ
kiÓm so¸t ®-îc ch-¬ng tr×nh. ThÕ lµ ph-¬ng ph¸p lËp tr×nh cÊu tróc (LTCT) ra ®êi.
Theo c¸ch tiÕp cËn nµy, ch-¬ng tr×nh ®-îc tæ chøc thµnh c¸c ch-¬ng tr×nh con.
Mçi ch-¬ng tr×nh con ®¶m nhËn xö lý mét c«ng viÖc nhá trong toµn bé hÖ thèng.
Mçi ch-¬ng tr×nh con nµy l¹i cã thÓ chia nhá thµnh c¸c ch-¬ng tr×nh con nhá h¬n.
Qu¸ tr×nh ph©n chia nh- vËy tiÕp tôc diÔn ra cho ®Õn c¸c ch-¬ng tr×nh con nhá nhËn
®-îc ®ñ ®¬n gi¶n. Ng-êi ta gäi ®ã lµ qu¸ tr×nh lµm mÞn dÇn. C¸c ch-¬ng tr×nh con
t-¬ng ®èi ®éc lËp víi nhau, do ®ã cã thÓ ph©n c«ng cho tõng nhãm ®¶m nhËn viÕt
c¸c ch-¬ng tr×nh con kh¸c nhau. Ng«n ng÷ lËp tr×nh thÓ hiÖn râ nÐt nhÊt ph-¬ng
ph¸p lËp tr×nh cÊu tróc chÝnh lµ Pascal. Tuy nhiªn, khi sö dông ph-¬ng ph¸p lËp
tr×nh nµy vÉn cßn gÆp mét khã kh¨n lín lµ tæ chøc d÷ liÖu cña hÖ thèng nh- thÕ nµo
trong m¸y tÝnh. Bëi v× theo quan ®iÓm cña LTCT th× Ch-¬ng tr×nh = CÊu tróc d÷
liÖu + Gi¶i thuËt. §Ó lµm ®-îc viÖc nµy ®ßi hái ng-êi lËp tr×nh ph¶i cã kiÕn rÊt
v÷ng vÒ cÊu tróc d÷ liÖu. Mét khã kh¨n n÷a gÆp ph¶i lµ gi¶i thuËt cña ch-¬ng tr×nh
phô thuéc rÊt chÆt chÏ vµo cÊu tróc d÷ liÖu, do vËy chØ cÇn mét sù thay ®æi nhá ë
cÊu tróc d÷ liÖu còng cã thÓ lµm thay ®æi gi¶i thuËt vµ nh- vËy ph¶i viÕt l¹i ch-¬ng
tr×nh. §iÒu nµy râ rµng kh«ng thÓ thÝch hîp khi ph¶i x©y dùng mét dù ¸n phÇn mÒm
rÊt lín. Mét ph-¬ng ph¸p lËp tr×nh míi ra ®êi ®Ó kh¾c phôc nh-îc ®iÓm nµy vµ ®ã
chÝnh lµ ph-¬ng ph¸p lËp tr×nh h-íng ®èi t-îng (LTH§T). §iÓm c¨n b¶n cña
ph-¬ng ph¸p nµy lµ thiÕt kÕ ch-¬ng tr×nh xoay quanh d÷ liÖu cña hÖ thèng. NghÜa
lµ lóc nµy c¸c thao t¸c xö lý cña hÖ thèng ®-îc g¾n liÒn víi d÷ liÖu vµ nh- vËy mét
sù thay ®æi nhá cña d÷ liÖu chØ ¶nh h-ëng ®Õn c¸c mét sè nhá c¸c hµm xö lý liªn
quan. Sù g¾n kÕt gi÷a d÷ liÖu vµ c¸c hµm xö lý trªn chóng t¹o ra ®èi t-îng. Mét -u
®iÓm n÷a cã ë ph-¬ng ph¸p LTH§T lµ c¸ch tiÕp cËn bµi to¸n trë nªn gÇn gòi víi
thùc tÕ h¬n. §Ó hiÓu râ h¬n vÒ ph-¬ng ph¸p lËp tr×nh nµy, kh«ng g× tèt h¬n lµ
chóng ta ®i vµo mét bµi to¸n cô thÓ, ch¼ng h¹n bµi to¸n quan hÖ gia ®×nh. ë ®©y yªu
-1-
Ng«n ng÷ C++
cÇu lµm thÕ nµo ®Ó thÓ hiÖn ®-îc c¸c mèi quan hÖ gi÷a c¸c thµnh viªn trong mét
gia ®×nh trªn m¸y tÝnh vµ cã thÓ tr¶ lêi ®-îc c©u hái d¹ng kh¸ tæng qu¸t: “A vµ B cã
quan hÖ nh- thÕ nµo trong gia ®×nh ?” víi A vµ B lµ hai c¸ thÓ bÊt kú. Chóng ta sÏ
ph©n tÝch xem c¸ch gi¶i quyÕt bµi to¸n nµy nh- thÕ nµo.
2. Bµi to¸n quan hÖ gia ®×nh
Trong x· héi, mçi ng-êi ®Òu cã mét gia ®×nh, trong ®ã tån t¹i nhiÒu mèi quan
hÖ gia ®×nh kh¸ phøc t¹p nh- «ng, bµ, cha, mÑ, c«, chó, b¸c, v.v. Th«ng th-êng, ®Ó
thÓ hiÖn c¸c mèi quan hÖ nµy ng-êi ta biÓu diÔn b»ng mét s¬ ®å c©y quan hÖ. D-íi
®©y lµ mét vÝ dô biÓu diÔn mét gia ®×nh ba thÕ hÖ b»ng h×nh 1.1.
Mr. Th¾ng
Ms. Nga
Mr. Quang
Mr. H-ng
Ms. V©n
Mr. TuÊn
Ms. H»ng
Miss. Trang
Miss. Mai
H×nh 1.1 C©y quan hÖ trong mét gia ®×nh
§Ó gi¶i quyÕt bµi to¸n nµy theo ph-¬ng ph¸p LTCT, c«ng viÖc ®Çu tiªn lµ ph¶i
x©y dùng mét cÊu tróc d÷ liÖu thÓ hiÖn ®-îc c©y quan hÖ trªn. Tr«ng qua cã vÎ lµ
®¬n gi¶n nh-ng nÕu thö lµm xem sÏ thÊy kh«ng ®¬n gi¶n chót nµo, thËm chÝ cßn
khã. Bëi v× nã ®ßi hái ng-êi lËp tr×nh ph¶i rÊt thµnh th¹o sö dông con trá, ph¶i x©y
dùng ®-îc gi¶i thuËt cËp nhËt th«ng tin trªn c©y quan hÖ. C¸c gi¶i thuËt nµy t-¬ng
®èi phøc t¹p ®èi víi mét cÊu tróc d÷ liÖu nh- trong bµi to¸n. Yªu cÇu cña bµi to¸n
lµ tr¶ lêi ®-îc c©u hái d¹ng nh- “H-ng vµ Mai cã quan hÖ nh- thÕ nµo ?”. C©u tr¶
lêi cña ch-¬ng tr×nh ph¶i lµ “H-ng lµ anh hä cña Mai”. §Ó cã thÓ thùc hiÖn ®-îc
nh- vËy, râ rµng chóng ta ph¶i x©y dùng ®-îc gi¶i thuËt t×m ®-îc mèi quan hÖ gi÷a
hai nót trªn c©y quan hÖ. Mét vÊn ®Ò phøc t¹p vµ tÕ nhÞ h¬n lµ tªn gäi cho c¸c mèi
quan hÖ gia ®×nh ë ViÖt nam rÊt phong phó! Mét khã kh¨n lµ ph¶i vÐt c¹n hÕt c¸c
mèi quan hÖ cã thÓ cã trªn mét c©y quan hÖ. Mét khã kh¨n n÷a gÆp ph¶i lµ khi cÇn
ph¸t triÓn, ch-¬ng tr×nh ph¶i qu¶n lý ®-îc nhiÒu gia ®×nh cïng mét lóc vµ c¸c gia
®×nh nµy cã mèi quan hÖ th«ng gia víi nhau. H×nh 1.2 lµ s¬ ®å quan hÖ ®-îc ph¸t
triÓn tõ s¬ ®å vÝ dô trªn minh ho¹ cho vÊn ®Ò nµy.
-2-
LËp tr×nh h-íng ®èi t-îng
Mr. Th¾ng
Ms. Nga
Mr. Thµnh
Ms. Lan
-
-
-
-
-
-
-
-
Mr. Quang
Ms. V©n
Mr. TuÊn
Ms. H»ng
Mr. H-ng
Miss. Trang
Miss. Mai
H×nh 1.2 Më réng quan hÖ gi÷a c¸c gia ®×nh
Mét c©u hái ®Æt ra: “LiÖu víi cÊu tróc d÷ liÖu cò cã ®¶m b¶o gi¶i quyÕt ®-îc
vÊn ®Ò nµy kh«ng ?”. Râ rµng c©u tr¶ lêi lµ kh«ng. S¬ ®å quan hÖ trªn h×nh vÏ sÏ
ph¶i m« t¶ quan hÖ cña mét gia ®×nh. ChØ víi chót Ýt sù thay ®æi vÒ cÊu tróc d÷ liÖu
còng dÉn ®Õn mét lo¹t vÊn ®Ò ®ßi hái ph¶i viÕt l¹i c¸c gi¶i thuËt cña ch-¬ng tr×nh.
Ph-¬ng ph¸p lËp tr×nh míi h-íng ®èi t-îng cho phÐp chóng ta kh¾c phôc ®-îc c¸c
vÊn ®Ò ®· nªu ra. Trong suèt c¸c tr×nh bµy cña cuèn s¸ch nµy sÏ cè g¾ng nªu bËt
®-îc c¸ch gi¶i quyÕt vÊn ®Ò nhê LTH§T.
Theo c¸ch tiÕp cËn LTH§T, bµi to¸n quan hÖ gia ®×nh ®-îc xem xÐt d-íi gãc
®é qu¶n lý tËp c¸c ®èi t-îng Con ng-êi. §Ó biÕt mèi quan hÖ gia ®×nh cña mçi c¸
thÓ, cÇn thÓ hiÖn mét sè quan hÖ c¬ b¶n nh- cha, mÑ, anh em, con c¸i, vî chång cña
c¸ thÓ ®ã. Nh- vËy, mçi ®èi t-îng con ng-êi cña bµi to¸n cã c¸c thuéc tÝnh riªng,
nãi lªn r»ng cha mÑ, anh em, v.v.. cña hä lµ ai. Ngoµi ra còng cÇn cã mét thuéc tÝnh
n÷a cho biÕt tªn c¸ thÓ lµ g×. Cã thÓ m« t¶ mét líp c¸c ®èi t-îng con ng-êi nh-
h×nh 1.3.
Con ng-êi
Tªn
?
Cha ?
MÑ ?
Anh em ?
Con c¸i ?
Vî / Chång ?
H×nh 1.3 M« t¶ mét líp c¸c ®èi t-îng con ng-êi
NÕu chØ cã nh- vËy th× ch¼ng kh¸c g× mét cÊu tróc hay b¶n ghi trong cÊu tróc
d÷ diÖu ®-îc sö dông ë ph-¬ng ph¸p LTCT. VÊn ®Ò ë ®©y lµ ph-¬ng ph¸p LTH§T
xem c¸c mèi quan hÖ trong gia ®×nh ®-îc h×nh thµnh mét c¸ch tù nhiªn do c¸c sù
kiÖn cô thÓ trong cuéc sèng t¹o nªn. VÝ dô, khi ng-êi phô n÷ sinh con, ®øa con c«
-3-
Ng«n ng÷ C++
ta sinh ra sÏ cã mÑ lµ c« ta vµ cha lµ chång c« ta, ®ång thêi anh chång ph¶i ®-îc
cËp nhËt ®Ó cã thªm ®øa con nµy. Nh÷ng ®øa con tr-íc cña c« ta sÏ cã thªm ®øa em
nµy vµ ®øa bÐ cã thªm nh÷ng ng-êi anh hoÆc ng-êi chÞ ®ã. DÔ dµng thÊy r»ng cã
hai sù kiÖn chÝnh t¸c ®éng ®Õn mèi quan hÖ gia ®×nh lµ sù sinh con cña ng-êi phô
n÷ vµ h«n nh©n gi÷a hai c¸ thÓ kh¸c giíi trong x· héi. C¸c sù kiÖn nµy g¾n liÒn víi
tõng con ng-êi trong bµi to¸n. §iÒu nµy cã nghÜa lµ khi nãi ®Õn mét sù kiÖn nµo th×
ph¶i chØ ra nã ®-îc ph¸t sinh bëi ng-êi nµo. VÝ dô, khi nãi sù kiÖn sinh con th× ph¶i
biÕt ng-êi nµo sinh. Khi mét sù kiÖn cña mét con ng-êi nµo ®ã x¶y ra (vÝ dô nh-
sinh con) th× c¸c thuéc tÝnh cña chÝnh anh ta sÏ bÞ thay ®æi, ®ång thêi thuéc tÝnh cña
mét sè ®èi t-îng liªn quan còng cã thÓ thay ®æi theo. Qu¸ tr×nh ®ãng gãi gi÷a c¸c
sù kiÖn vµ thuéc tÝnh sÏ t¹o ra §èi t-îng, kh¸i niÖm c¬ b¶n cña ph-¬ng ph¸p
LTH§T. Mét m« t¶ chung cho c¸c ®èi t-îng con ng-êi cña bµi to¸n ®-îc gäi lµ
mét Líp. H×nh 1.4 minh ho¹ mét líp Con ng-êi cã thªm c¸c sù kiÖn cña bµi to¸n.
Con ng-êi
Tªn
?
Cha ?
MÑ ?
Anh em ?
Con c¸i ?
Vî / Chång ?
Sinh con
C-íi
H×nh 1.4 C¸c sù kiÖn bæ sung g¾n víi con ng-êi.
Sau khi ®· g¾n kÕt c¸c sù kiÖn vµo ®èi t-îng nh- trªn, vÊn ®Ò lµ t¹o mét s¬ ®å
quan hÖ gia ®×nh nh- thÕ nµo. D-íi ®©y lµ mét vÝ dô minh ho¹ viÖc t¹o ra mét quan
hÖ gia ®×nh dùa trªn c¸c sù kiÖn cuéc sèng. Gi¶ thiÕt lµ ®· cã hai ®èi t-îng lµ «ng
Th¾ng vµ bµ Mai.
Mr. Th¾ng
Ms. Mai
Miss. Nga
Mr. TuÊn
-4-
LËp tr×nh h-íng ®èi t-îng
C¸c sù kiÖn ®Ó t¹o ra c©y quan hÖ trªn cã thÓ viÕt theo trËt tù nh- sau:
Th¾ng.C-íi (Mai)
Mai.Sinh con (g¸i, Nga)
§èi t-îng t¹o sù kiÖn . Sù kiÖn ( th«ng sè kÌm theo sù kiÖn )
C¸c sù kiÖn viÕt theo có ph¸p:
Nh- vËy c¸c b¹n ®· thÊy r»ng chóng ta kh«ng cÇn ph¶i quan t©m ®Õn c¸ch t¹o
mét cÊu tróc c©y quan hÖ nh- thÕ nµo bªn trong d÷ liÖu cña ch-¬ng tr×nh mµ vÉn cã
thÓ cung cÊp d÷ liÖu bµi to¸n cho ch-¬ng tr×nh th«ng qua c¸c sù kiÖn nh- trªn.
Chóng ta quay l¹i vÊn ®Ò chÝnh cña bµi to¸n lµ tr¶ lêi c¸c c©u hái vÒ mèi quan hÖ
gia ®×nh nh- thÕ nµo khi tiÕp cËn bµi to¸n theo ph-¬ng ph¸p nµy. §Ó tr¶ lêi ®-îc
c©u hái tæng qu¸t “X vµ Y cã quan hÖ gia ®×nh nh- thÕ nµo ?” ta cÇn ph¶i tr¶ lêi c¸c
c©u hái nhá nh- “X cã ph¶i lµ anh cña Y kh«ng ?”, “X cã ph¶i lµ «ng néi cña Y
kh«ng ?”, v.v.. C©u hái cã thÓ nh×n tõ gãc ®é ®èi t-îng X nh- : “§èi t-îng cã ph¶i
lµ anh cña Y kh«ng ?”, “cã ph¶i lµ «ng néi cña Y kh«ng ?”, v.v.. Nh- vËy c©u hái
lóc nµy ®· giao vÒ cho ®èi t-îng ®Ó tr¶ lêi. C¸c ®èi t-îng lóc nµy cÇn ph¶i cã c¸c
ph-¬ng thøc ®Ó tr¶ lêi c¸c c©u hái nh- vËy. Vµ b©y giê mét líp ®èi t-îng Con
ng-êi ®-îc minh ho¹ nh- h×nh 1.5.
Con ng-êi
Tªn ?
Cha ?
MÑ ?
Anh em ?
Con c¸i ?
Vî / Chång ?
Sinh con
C-íi
Lµ anh
Lµ «ng néi
.......
H×nh 1.5 Thªm c¸c ph-¬ng thøc tr¶ lêi c©u hái
Ta xem xÐt c¸c ®èi t-îng tr¶ lêi c¸c c©u hái nh- thÕ nµo? Ch¼ng h¹n X tr¶ lêi
c©u hái “§èi t-îng cã ph¶i lµ anh cña Y kh«ng ?” hoµn toµn ®¬n gi¶n. Nã chØ cÇn
kiÓm tra xem Y cã ph¶i lµ anh em mµ trong thuéc tÝnh cña nã l-u gi÷ kh«ng. Hoµn
-5-
Ng«n ng÷ C++
toµn t-¬ng tù ®èi víi c¸c c©u hái quan hÖ gÇn nh- lµ em, lµ chÞ, lµ bè, lµ mÑ,... Cßn
c©u hái nh- “§èi t-îng cã ph¶i lµ «ng néi cña Y kh«ng ?” phøc t¹p h¬n chót Ýt. §Ó
tr¶ lêi ®-îc c¸c c©u hái cã quan hÖ xa nh- thÕ ta ph¶i dùa vµo kÕt qu¶ tr¶ lêi cña
c¸c c©u hái vÒ c¸c quan hÖ gÇn gòi h¬n. §Ó biÕt ®-îc X ®óng lµ «ng néi cña Y th×
ph¶i chØ ra mét ng-êi Z nµo ®ã mµ X lµ bè cña Z vµ Z lµ bè cña Y. NÕu kh«ng chØ
ra ®-îc Z th× X kh«ng ph¶i lµ «ng néi cña Y. ViÖc t×m kiÕm Z hoµn toµn ®¬n gi¶n
bëi v× ch-¬ng tr×nh qu¶n lý tËp c¸c ®èi t-îng con ng-êi. H·y t×m Z trong tËp ®èi
t-îng Con ng-êi. Cã thÓ thÊy c©u hái ban ®Çu ®· ®-îc ph©n chia thµnh hai c©u hái
®¬n gi¶n víi chóng mµ ®· cã c¸ch tr¶ lêi. Tãm l¹i, c¸c vÊn ®Ò cña bµi to¸n ®· ®-îc
gi¶i quyÕt khi tiÕp cËn theo ph-¬ng ph¸p LTH§T. Mét lîi ®iÓm cã thÓ thÊy ngay lµ
bµi to¸n ®-îc ph©n tÝch rÊt gÇn víi thùc tÕ vµ tù nhiªn.
Trªn ®©y míi chØ lµ sù ph©n tÝch s¬ khai bµi to¸n dùa theo ph-¬ng ph¸p
LTH§T. §Ó lµm hoµn chØnh ®-îc bµi to¸n cßn cÇn mét sè kÜ thuËt cña LTH§T nh-
tÝnh kÕ thõa, tÝnh ®a h×nh, ... Chóng t«i hy väng r»ng qua sù ph©n tÝch mét bµi to¸n
nhá trªn ®· chøng tá ®-îc lîi Ých cña ph-¬ng ph¸p LTH§T. Trong môc tiÕp theo
chóng t«i sÏ tãm t¾t vµ ®-a ra tæng quan s¬ bé vÒ LTH§T.
3. LËp tr×nh h-íng ®èi t-îng
LËp tr×nh h-íng ®èi t-îng ®Æt träng t©m vµo ®èi t-îng, yÕu tè quan träng
trong qu¸ tr×nh ph¸t triÓn ch-¬ng tr×nh vµ kh«ng cho phÐp d÷ liÖu biÕn ®éng tù do
trong hÖ thèng. D÷ liÖu ®-îc g¾n chÆt víi c¸c hµm thµnh c¸c vïng riªng mµ chØ cã
c¸c hµm ®ã t¸c ®éng lªn vµ cÊm c¸c hµm bªn ngoµi truy nhËp tíi mét c¸ch tuú tiÖn.
LTH§T cho phÐp chóng ta ph©n tÝch bµi to¸n thµnh c¸c thùc thÓ ®-îc gäi lµ c¸c ®èi
t-îng vµ sau ®ã x©y dùng c¸c d÷ liÖu cïng c¸c hµm xung quanh c¸c ®èi t-îng ®ã.
C¸c ®èi t-îng cã thÓ t¸c ®éng, trao ®æi th«ng tin víi nhau th«ng qua c¬ chÕ th«ng
b¸o (message). Tæ chøc mét ch-¬ng tr×nh h-íng ®èi t-îng cã thÓ m« t¶ nh- trong
h×nh 1.6.
§èi t-îng A
§èi t-îng B
message
D÷ liÖu
D÷ liÖu
§èi t-îng C
D÷ liÖu
H×nh 1.6 C¸c ®èi t-îng trao ®æi qua th«ng b¸o
LTH§T cã c¸c ®Æc tÝnh chñ yÕu sau:
1. TËp trung vµo d÷ liÖu thay cho c¸c hµm
-6-
LËp tr×nh h-íng ®èi t-îng
2. Ch-¬ng tr×nh ®-îc chia thµnh c¸c ®èi t-îng.
3. C¸c cÊu tróc d÷ liÖu ®-îc thiÕt kÕ sao cho ®Æc t¶ ®-îc ®èi t-îng.
4. C¸c hµm thao t¸c trªn c¸c vïng d÷ liÖu cña ®èi t-îng ®-îc g¾n víi cÊu
tróc d÷ liÖu ®ã.
D÷ liÖu ®-îc ®ãng gãi l¹i, ®-îc che giÊu vµ kh«ng cho phÐp c¸c hµm
ngo¹i lai truy nhËp tù do.
5.
6. C¸c ®èi t-îng t¸c ®éng vµ trao ®æi th«ng tin víi nhau qua c¸c hµm
7. Cã thÓ dÔ dµng bæ sung d÷ liÖu vµ c¸c hµm míi vµo ®èi t-îng nµo ®ã
khi cÇn thiÕt
8. Ch-¬ng tr×nh ®-îc thiÕt kÕ theo c¸ch tiÕp cËn tõ d-íi lªn (bottom-up).
Sau ®©y lµ mét sè kh¸i niÖm ®-îc sö dông trong LTH§T.
3.1 Mét sè kh¸i niÖm
§èi t-îng (object)
§èi t-îng lµ sù kÕt hîp gi÷a d÷ liÖu vµ thñ tôc (hay cßn gäi lµ c¸c ph-¬ng thøc
- method) thao t¸c trªn d÷ liÖu ®ã. Cã thÓ ®-a ra c«ng thøc ph¶n ¸nh b¶n chÊt kü
thuËt cña LTH§T nh- sau:
§èi t-îng = D÷ liÖu + Ph-¬ng thøc
Líp (class)
Líp lµ mét kh¸i niÖm míi trong LTH§T so víi c¸c kü thuËt lËp tr×nh kh¸c. §ã
lµ mét tËp c¸c ®èi t-îng cã cÊu tróc d÷ liÖu vµ c¸c ph-¬ng thøc gièng nhau (hay nãi
c¸ch kh¸c lµ mét tËp c¸c ®èi t-îng cïng lo¹i). Nh- vËy khi cã mét líp th× chóng ta
sÏ biÕt ®-îc mét m« t¶ cÊu tróc d÷ liÖu vµ ph-¬ng thøc cña c¸c ®èi t-îng thuéc líp
®ã. Mçi ®èi t-îng sÏ lµ mét thÓ hiÖn cô thÓ (instance) cña líp ®ã. Trong lËp tr×nh,
chóng ta cã thÓ coi mét líp nh- lµ mét kiÓu, cßn c¸c ®èi t-îng sÏ lµ c¸c biÕn cã
kiÓu cña líp.
Nguyªn t¾c ®ãng gãi d÷ liÖu
Trong LTCT ta ®· thÊy lµ c¸c hµm hay thñ tôc ®-îc sö dông mµ kh«ng cÇn
biÕt ®Õn néi dung cô thÓ cña nã. Ng-êi sö dông chØ cÇn biÕt chøc n¨ng cña hµm
còng nh- c¸c tham sè cÇn truyÒn vµo ®Ó gäi hµm ch¹y mµ kh«ng cÇn quan t©m ®Õn
nh÷ng lÖnh cô thÓ bªn trong nã. Ng-êi ta gäi ®ã lµ sù ®ãng gãi vÒ chøc n¨ng.
Trong LTH§T, kh«ng nh÷ng c¸c chøc n¨ng ®-îc ®ãng gãi mµ c¶ d÷ liÖu còng
nh- vËy. Víi mçi ®èi t-îng ng-êi ta kh«ng thÓ truy nhËp trùc tiÕp vµo c¸c thµnh
phÇn d÷ liÖu c¶u nã mµ ph¶i th«ng qua c¸c thµnh phÇn chøc n¨ng (c¸c ph-¬ng thøc)
®Ó lµm viÖc ®ã.
Chóng ta sÏ thÊy sù ®ãng gãi thùc sù vÒ d÷ liÖu chØ cã trong mét ng«n ng÷
LTH§T “thuÇn khiÕt” (pure) theo nghÜa c¸c ng«n ng÷ ®-îc thiÕt kÕ ngay tõ ®Çu chØ
-7-
Ng«n ng÷ C++
cho LTH§T. Cßn ®èi víi c¸c ng«n ng÷ “lai” (hybrid) ®-îc x©y dùng trªn c¸c ng«n
ng÷ kh¸c ban ®Çu ch-a ph¶i lµ H§T nh- C++ ®-îc nãi ®Õn trong cuèn s¸ch nµy,
vÉn cã nh÷ng ngo¹i lÖ nhÊt ®Þnh vi ph¹m nguyªn t¾c ®ãng gãi d÷ liÖu.
TÝnh kÕ thõa (inheritance)
Mét kh¸i niÖm quan träng cña LTH§T lµ sù kÕ thõa. Sù kÕ thõa cho phÐp
chóng ta ®Þnh nghÜa mét líp míi trªn c¬ së c¸c líp ®· tån t¹i, tÊt nhiªn cã bæ sung
nh÷ng ph-¬ng thøc hay c¸c thµnh phÇn d÷ liÖu míi. Kh¶ n¨ng kÕ thõa cho phÐp
chóng ta sö dông l¹i mét c¸ch dÔ dµng c¸c module ch-¬ng tr×nh mµ kh«ng cÇn mét
thay ®æi c¸c module ®ã. Râ rµng ®©y lµ mét ®iÓm m¹nh cña LTH§T so víi LTCT.
TÝnh ®a h×nh (polymorphime)
TÝnh ®a h×nh xuÊt hiÖn khi cã kh¸i niÖm kÕ thõa. Gi¶ sö chóng ta cã mét kÕ
thõa líp h×nh tø gi¸c vµ líp h×nh tam gi¸c kÕ thõa tõ líp h×nh ®a gi¸c (h×nh tam gi¸c
vµ tø gi¸c sÏ cã ®Çy ®ñ c¸c thuéc tÝnh vµ tÝnh chÊt cña mét h×nh ®a gi¸c). Lóc nµy
mét ®èi t-îng thuéc líp h×nh tam gi¸c hay tø gi¸c ®Òu cã thÓ hiÓu r»ng nã lµ mét
h×nh ®a gi¸c. MÆt kh¸c víi mçi ®a gi¸c ta cã thÓ tÝnh diÖn tÝch cña nã. Nh- vËy lµm
thÕ nµo mµ mét ®a gi¸c cã thÓ sö dông ®óng c«ng thøc ®Ó tÝnh diÖn tÝch phï hîp víi
nã lµ h×nh tam gi¸c hay tø gi¸c. Ta gäi ®ã lµ tÝnh ®a h×nh.
3.2 C¸c -u ®iÓm cña LTH§T
LTH§T ®em l¹i mét sè lîi thÕ cho ng-êi thiÕt kÕ lÉn ng-êi lËp tr×nh. C¸ch tiÕp
cËn h-íng ®èi t-îng gi¶i quyÕt ®-îc nhiÒu vÊn ®Ò tån t¹i trong qu¸ tr×nh ph¸t triÓn
phÇn mÒm vµ t¹o ra ®-îc nh÷ng phÇn mÒm cã ®é phøc t¹p vµ chÊt l-îng cao.
Ph-¬ng ph¸p nµy më ra mét triÓn väng to lín cho ng-êi lËp tr×nh. Nh÷ng -u ®iÓm
chÝnh cña LTH§T lµ:
1. Th«ng qua nguyªn lý kÕ thõa, chóng ta cã thÓ lo¹i bá ®-îc nh÷ng ®o¹n
ch-¬ng tr×nh lÆp l¹i trong qu¸ tr×nh m« t¶ c¸c líp vµ cã thÓ më réng kh¶
n¨ng sö dông cña c¸c líp ®· x©y dùng mµ kh«ng cÇn ph¶i viÕt l¹i.
2. Ch-¬ng tr×nh ®-îc x©y dùng tõ nh÷ng ®¬n thÓ (®èi t-îng) trao ®æi víi
nhau nªn viÖc thiÕt kÕ vµ lËp tr×nh sÏ ®-îc thùc hiÖn theo quy tr×nh nhÊt
®Þnh chø kh«ng ph¶i dùa vµo kinh nghiÖm vµ kü thuËt nh- tr-íc n÷a. §iÒu
nµy ®¶m b¶o rót ng¾n ®-îc thêi gian x©y dùng hÖ thèng vµ t¨ng n¨ng suÊt
lao ®éng.
3. Nguyªn lý ®ãng gãi hay che giÊu th«ng tin gióp ng-êi lËp tr×nh t¹o ra ®-îc
nh÷ng ch-¬ng tr×nh an toµn kh«ng bÞ thay ®æi bëi nh÷ng ®o¹n ch-¬ng
tr×nh kh¸c.
4. Cã thÓ x©y dùng ®-îc ¸nh x¹ c¸c ®èi t-îng cña bµi to¸n vµo ®èi t-îng
ch-¬ng tr×nh.
5. C¸ch tiÕp cËn thiÕt kÕ ®Æt träng t©m vµo d÷ liÖu, gióp chóng ta x©y dùng
®-îc m« h×nh chi tiÕt vµ dÔ dµng cµi ®Æt h¬n.
-8-
LËp tr×nh h-íng ®èi t-îng
6. C¸c hÖ thèng h-íng ®èi t-îng dÔ më réng, n©ng cÊp thµnh nh÷ng hÖ lín
h¬n.
7. Kü thuËt truyÒn th«ng b¸o trong viÖc trao ®æi th«ng tin gi÷a c¸c ®èi t-îng
lµm cho viÖc m« t¶ giao diÖn víi c¸c hÖ thèng bªn ngoµi trë nªn ®¬n gi¶n
h¬n.
8. Cã thÓ qu¶n lý ®-îc ®é phøc t¹p cña nh÷ng s¶n phÈm phÇn mÒm.
3.3 Nh÷ng øng dông cña LTH§T
LTH§T lµ mét trong nh÷ng thuËt ng÷ ®-îc nh¾c ®Õn nhiÒu nhÊt hiÖn nay
trong c«ng nghÖ phÇn mÒm vµ nã ®-îc øng dông ®Ó ph¸t triÓn phÇn mÒm trong
nhiÒu lÜnh vùc kh¸c nhau. Trong sè ®ã, øng dông quan träng vµ næi tiÕng nhÊt hiÖn
nay lµ thiÕt kÕ giao diÖn víi ng-êi sö dông, kiÓu nh- Windows. C¸c hÖ th«ng tin
qu¶n lý trong thùc tÕ th-êng rÊt phøc t¹p, chøa nhiÒu ®èi t-îng víi c¸c thuéc tÝnh
vµ hµm phøc t¹p. §Ó gi¶i quyÕt nh÷ng hÖ th«ng tin phøc t¹p nh- thÕ, LTH§T tá ra
rÊt hiÖu qu¶. C¸c lÜnh vùc øng dông phï hîp víi kü thuËt LTH§T cã thÓ liÖt kª nh-
d-íi ®©y:
C¸c hÖ thèng lµm viÖc theo thêi gian thùc.
*
*C¸c hÖ m« h×nh ho¸ hoÆc m« pháng c¸c qu¸ tr×nh.
*C¸c hÖ c¬ së d÷ liÖu h-íng ®èi t-îng.
C¸c hÖ siªu v¨n b¶n (hypertext), ®a ph-¬ng tiÖn (multimedia).
C¸c hÖ thèng trÝ tuÖ nh©n t¹o vµ c¸c hÖ chuyªn gia.
C¸c hÖ thèng song song vµ m¹ng n¬-ron.
*
*
*
*
C¸c hÖ tù ®éng ho¸ v¨n phßng hoÆc trî gióp quyÕt ®Þnh.
*C¸c hÖ CAD/CAM.
Víi nhiÒu ®Æc tÝnh phong phó cña LTH§T nãi riªng, cña ph-¬ng ph¸p ph©n
tÝch thiÕt kÕ vµ ph¸t triÓn h-íng ®èi t-îng nãi chung chóng ta hy väng c«ng nghiÖp
phÇn mÒm sÏ cã nh÷ng c¶i tiÕn nh¶y vät kh«ng nh÷ng vÒ chÊt l-îng, mµ cßn gia
t¨ng nhanh vÒ sè l-îng trong t-¬ng lai.
C¸c ng«n ng÷ lËp tr×nh h-íng ®èi t-îng
4.
LTH§T kh«ng ph¶i lµ ®Æc quyÒn cña mét ng«n ng÷ ®Æc biÖt nµo. Còng gièng
nh- kü thuËt lËp tr×nh cã cÊu tróc, c¸c kh¸i niÖm trong LTH§T ®-îc thÓ hiÖn trong
nhiÒu ng«n ng÷ lËp tr×nh kh¸c nhau. Nh÷ng ng«n ng÷ cung cÊp ®-îc nh÷ng kh¶
n¨ng LTH§T ®-îc gäi lµ ng«n ng÷ lËp tr×nh h-íng ®èi t-îng. Tuy vÉn cã nh÷ng
ng«n ng÷ chØ cung cÊp kh¶ n¨ng t¹o líp vµ ®èi t-îng mµ kh«ng cho phÐp kÕ thõa,
do ®ã h¹n chÕ kh¶ n¨ng LTH§T. H×nh 1.7 cho chóng ta mét c¸i nh×n tæng quan vÒ
sù ph¸t triÓn c¸c ng«n ng÷ LTH§T.
-9-
Ng«n ng÷ C++
SIMULA (66)
SMALLTALK (71)
SMALLTALK (80)
ADA (83)
C++ (86)
EIFFEL (90)
ADA (95)
JAVA (95)
H×nh 1.7 Sù ph¸t triÓn cña c¸c ng«n ng÷ LTH§T
C¸c ng«n ng÷ SIMULA, SMALLTALK, JAVA thuéc hä ng«n ng÷ LTH§T
thuÇn khiÕt, nghÜa lµ nã kh«ng cho phÐp ph¸t triÓn c¸c ch-¬ng tr×nh cÊu tróc trªn
c¸c ng«n ng÷ lo¹i nµy. Cßn ng«n ng÷ C++ thuéc lo¹i ng«n ng÷ “lai” bëi v× nã ®-îc
ph¸t triÓn tõ ng«n ng÷ C. Do ®ã trªn C++ vÉn cã thÓ sö dông tÝnh cÊu tróc vµ ®èi
t-îng cña ch-¬ng tr×nh. §iÒu nµy tá ra rÊt phï hîp khi chóng ta míi b¾t ®Çu häc
mét ng«n ng÷ lËp tr×nh. §ã chÝnh lµ lý do mµ chóng t«i sö dông ng«n ng÷ C++ ®Ó
giíi thiÖu ph-¬ng ph¸p LTH§T trong cuèn s¸ch nµy. Mét lý do kh¸c n÷a lµ C++ sö
dông có ph¸p cña ng«n ng÷ C lµ ng«n ng÷ rÊt th«ng dông trong lËp tr×nh chuyªn
nghiÖp.
Ng«n ng÷ lËp tr×nh C++
5.
Vµo n¨m 1983, gi¸o s- Bjarne Stroustrap b¾t ®Çu nghiªn cøu vµ ph¸t triÓn viÖc
cµi ®Æt kh¶ n¨ng LTH§T vµo ng«n ng÷ C t¹o ra mét ng«n ng÷ míi gäi lµ C++. Tªn
gäi nµy cã thÓ ph©n tÝch ý nghÜa r»ng nã lµ ng«n ng÷ C mµ cã hai ®Æc ®iÓm míi
t-¬ng øng víi hai dÊu céng. §Æc ®iÓm thø nhÊt lµ mét sè kh¶ n¨ng më réng so víi
C nh- tham chiÕu, chång hµm, tham sè mÆc ®Þnh... §Æc ®iÓm thø hai chÝnh lµ kh¶
n¨ng LTH§T. HiÖn nay C++ ch-a ph¶i lµ mét ng«n ng÷ hoµn toµn æn ®Þnh. KÓ tõ
khi phiªn b¶n ®Çu tiªn ra ®êi vµo n¨m 1986 ®· cã rÊt nhiÒu thay ®æi trong c¸c phiªn
b¶n C++ kh¸c nhau: b¶n 1.1 ra ®êi vµo n¨m 1986, 2.0 vµo n¨m 1989 vµ 3.0 vµo
n¨m 1991. Phiªn b¶n 3.0 nµy ®-îc sö dông ®Ó lµm c¬ së cho viÖc ®Þnh nghÜa mét
ng«n ng÷ C++ chuÈn (kiÓu nh- Ansi C).
-10-
LËp tr×nh h-íng ®èi t-îng
Trªn thùc tÕ hiÖn nay tÊt c¶ c¸c ch-¬ng tr×nh dÞch C++ ®Òu t-¬ng thÝch víi
phiªn b¶n 3.0. V× vËy C++ hÇu nh- kh«ng g©y bÊt kú mét khã kh¨n nµo khi chuyÓn
®æi tõ mét m«i tr-êng nµy sang m«i tr-êng kh¸c, nh- chóng ta ®· biÕt C++ nh- lµ
mét sù bæ sung kh¶ n¨ng LTH§T vµo ng«n ng÷ C. SÏ cã nhiÒu ng-êi nghÜ r»ng
ng«n ng÷ C nãi ë ®©y lµ C theo chuÈn ANSI. Thùc ra kh«ng ph¶i hoµn toµn nh- vËy.
Tªn thùc tÕ vÉn tån t¹i mét vµi ®iÓm kh«ng t-¬ng thÝch gi÷a ANSI C vµ C++.
MÆt kh¸c còng cÇn thÊy r»ng nh÷ng më réng cã trong C++ so víi Ansi C
kh«ng chØ lµ ®Ó phôc vô cho môc ®Ých t¹o cho ng«n ng÷ kh¶ n¨ng LTH§T. Cã
nh÷ng thay ®æi chØ víi môc ®Ých ®¬n thuÇn lµ t¨ng søc m¹nh cho ng«n ng÷ C hiÖn
thêi.
Ngoµi ra cã mét vµi thay ®æi nhá ë C++ so víi ANSI C nh- sau:
§Þnh nghÜa c¸c hµm: khai b¸o, truyÒn tham sè vµ gi¸ trÞ
*
tr¶ l¹i.
*
*
Sù t-¬ng thÝch gi÷a c¸c con trá.
TÝnh linh ho¹t cña c¸c h»ng (const).
C¸c ®Æc ®iÓm më réng trong C++
Nh- ®· ®Ò cËp ë trªn C++ chøa c¶ nh÷ng më réng so víi C mµ kh«ng liªn
quan ®Õn kü thuËt h-íng ®èi t-îng. Nh÷ng më réng nµy sÏ ®-îc m« t¶ cô thÓ trong
ch-¬ng sau, ë ®©y chóng ta chØ tãm t¾t l¹i mét vµi ®iÓm chÝnh.
*
*
*
Kh¶ n¨ng viÕt c¸c dßng chó thÝch míi.
Kh¶ n¨ng khai b¸o linh ho¹t h¬n.
Kh¶ n¨ng ®Þnh nghÜa l¹i c¸c hµm: c¸c hµm cïng tªn cã thÓ
thùc hiÖn theo nh÷ng thao t¸c kh¸c nhau. C¸c lêi gäi hµm sÏ dïng kiÓu
vµ sè tham sè ®Ó x¸c ®Þnh ®óng hµm nµo cÇn thùc hiÖn.
Cã thªm c¸c to¸n tö ®Þnh nghÜa bé nhí ®éng míi: new vµ
*
delete.
Kh¶ n¨ng ®Þnh nghÜa c¸c hµm inline ®Ó t¨ng tèc ®é thùc
*
hiÖn ch-¬ng tr×nh.
T¹o c¸c biÕn tham chiÕu ®Õn c¸c biÕn kh¸c.
*
LTH§T trong C++
C++ chøa ®ùng kh¸i niÖm líp. Mét líp bao gåm c¸c thµnh phÇn d÷ liÖu hay lµ
thuéc tÝnh vµ c¸c ph-¬ng thøc hay lµ hµm thµnh phÇn. Tõ mét líp ta cã thÓ t¹o ra
c¸c ®èi t-îng hoÆc b»ng c¸ch khai b¸o th«ng th-êng mét biÕn cã kiÓu lµ líp ®ã
hoÆc b»ng c¸ch cÊp ph¸t bé nhí ®éng nhê sö dông to¸n tö new. C++ cho phÐp
chóng ta ®ãng gãi d÷ liÖu nh-ng nã kh«ng b¾t buéc chóng ta thùc hiÖn ®iÒu ®ã.
§©y lµ mét nh-îc ®iÓm cña C++. Tuy nhiªn còng cÇn thÊy r»ng b¶n th©n C++ chØ
lµ sù më réng cña C nªn nã kh«ng thÓ lµ mét ng«n ng÷ LTH§T thuÇn khiÕt ®-îc.
-11-
Ng«n ng÷ C++
C++ cho phÐp ta ®Þnh nghÜa c¸c hµm thiÕt lËp (constructor) cho mét líp. Hµm
thiÕt lËp lµ mét ph-¬ng thøc ®Æc biÖt ®-îc gäi ®Õn t¹i thêi ®iÓm mét ®èi t-îng cña
líp ®-îc t¹o ra. hµm thiÕt lËp cã nhiÖm vô khëi t¹o mét ®èi t-îng: cÊp ph¸t bé nhí,
g¸n c¸c gi¸ trÞ cho c¸c thµnh phÇn d÷ liÖu còng nh- viÖc chuÈn bÞ chç cho c¸c ®èi
t-îng míi. Mét líp cã thÓ cã mét hay nhiÒu hµm thiÕt lËp. §Ó x¸c ®Þnh hµm thiÕt
lËp nµo cÇn gäi ®Õn, ch-¬ng tr×nh biªn dÞch sÏ so s¸nh c¸c ®èi sè víi c¸c tham sè
truyÒn vµo. T-¬ng tù nh- hµm thiÕt lËp, mét líp cã thÓ cã mét hµm huû bá
(destructor), mét ph-¬ng thøc ®Æc biÖt ®-îc gäi ®Õn khi ®èi t-îng ®-îc gi¶i phãng
khái bé nhí.
Líp trong C++ thùc chÊt lµ mét kiÓu d÷ liÖu do ng-êi sö dông ®Þnh nghÜa.
Kh¸i niÖm ®Þnh nghÜa chång to¸n tö cho phÐp ®Þnh nghÜa c¸c phÐp to¸n trªn mét
líp gièng nh- c¸c kiÓu d÷ liÖu chuÈn cña C. VÝ dô ta cã thÓ ®Þnh nghÜa mét líp sè
phøc víi c¸c phÐp to¸n céng, trõ, nh©n, chia.
Còng gièng nh- C, C++ cã kh¶ n¨ng chuyÓn ®æi kiÓu. Kh«ng nh÷ng thÕ, C++
cßn cho phÐp më réng sù chuyÓn ®æi nµy sang c¸c kiÓu do ng-êi sö dông tù ®Þnh
nghÜa (c¸c líp). VÝ dô, ta cã thÓ chuyÓn ®æi tõ kiÓu chuÈn int cña C sang kiÓu sè
phøc mµ ta ®Þnh nghÜa ch¼ng h¹n.
C++ cho phÐp thùc hiÖn kÕ thõa c¸c líp ®· x©y dùng. Tõ phiªn b¶n 2.0 trë ®i,
C++ cßn cho phÐp mét líp kÕ thõa cïng mét lóc tõ nhiÒu nhiÒu líp kh¸c nhau (gäi
lµ sù ®a kÕ thõa).
Cuèi cïng C++ cung cÊp nh÷ng thao t¸c vµo ra míi dùa trªn c¬ së kh¸i niÖm
luång d÷ liÖu (flow). Sù -u viÖt cña c¸c thao t¸c nµy ë chç:
Sö dông ®¬n gi¶n.
*
*
*
KÝch th-íc bé nhí ®-îc rót gän.
Kh¶ n¨ng ¸p dông trªn c¸c kiÓu do ng-êi sö dông ®Þnh
nghÜa b»ng c¸ch sö dông c¬ chÕ ®Þnh nghÜa chång to¸n tö.
-12-
LËp tr×nh h-íng ®èi t-îng
1.Ph-¬ng ph¸p lËp tr×nh..................................................................................... 1
2.Bµi to¸n quan hÖ gia ®×nh................................................................................2
3.LËp tr×nh h-íng ®èi t-îng...............................................................................6
3.1Mét sè kh¸i niÖm......................................................................................7
3.2C¸c -u ®iÓm cña LTH§T......................................................................... 8
3.3Nh÷ng øng dông cña LTH§T...................................................................9
4.C¸c ng«n ng÷ lËp tr×nh h-íng ®èi t-îng.........................................................9
5.Ng«n ng÷ lËp tr×nh C++
................................................................................
10
-13-
Bạn đang xem tài liệu "Giáo trình Lập trình hướng đối tượng với C++ - Chương 1: Lập trình hướng đối tượng, phương pháp giải quyết bài toán mới", để tải tài liệu gốc về máy hãy click vào nút Download ở trên
File đính kèm:
giao_trinh_lap_trinh_huong_doi_tuong_voi_c_chuong_1_lap_trin.pdf

