§Ò c¬ng bµi gi¶ng.
LËp tr×nh híng ®èi tîng.
Ch¬ng 1
Ph¬ng ph¸p híng ®èi tîng 1. C¸c ph¬ng ph¸p x©y dùng ch¬ng tr×nh 1.1 LËp tr×nh híng thñ tôc 1.2 LËp tr×nh híng ®èi tîng 2. C¸c ®Æc ®iÓm lËp tr×nh híng ®èi tîng 2.1 TÝnh ®ãng gãi (encapsulation ) 2.2 TÝnh kÕ thõa ( inheriance ) 2.3 TÝnh t¬ng øng béi ( polymorphism ) 3. C¸c ng«n ng÷ lËp tr×nh híng ®èi tîng.
1.C¸c ph¬ng ph¸p x©y dùng ch¬ng tr×nh 1.1LËp tr×nh híng thñ tôc.
C¸c ng«n ng÷ : COBL, FORTRAN, PASCAL, C... Ph©n r· thµnh c¸c hµm ( thñ tôc ) chøc n¨ng Top-down, chia ®Ó trÞ S¬ ®å cÊu tróc –structure chart
Ch¬ng tr×nh chÝnh CTC1 CTC4
CTC2 CTC5
CTC6
CTC3 CTC7
CTC8
Ch¬ng tr×nh lµ danh s¸ch c¸c c©u lÖnh. Chia thµnh CTC-c¸c hµm, thñ tôc D÷ liÖu : Toµn côc- global : dïng chung Côc bé ( theo tõng møc ) – local : cña riªng tõng hµm, thñ tôc. S¬ ®å d÷ liÖu - hµm D÷ liÖu chung – Global Data
CTC 1 D÷ liÖu
CTC 1 D÷ liÖu
CTC 1 D÷ liÖu
Nhîc ®iÓm : - Khã kiÓm so¸t v× nhiÒu hµm cã thÓ truy cËp. - Thay ®æi cÊu tróc d÷ liÖu thay ®æi c¸c hµm xö lý - Cha s¸t víi hÖ thèng thùc : chØ tËp chung vµo ho¹t ®éng, vµo chøc n¨ng. C¸c ®Æc ®iÓm chÝnh. - Híng c«ng viÖc ( thuËt to¸n ) - Topdown – Chia ®Ó trÞ Ph¹m Thµnh C«ng Hµ néi
Khoa CNTT Trêng Cao ®¼ng C«ng nghiÖp 1
§Ò c¬ng bµi gi¶ng. LËp tr×nh híng ®èi tîng. - D÷ liÖu chuyÓn dÇn qua c¸c hµm ®Ó xö lý - NhiÒu hµm tham gia xö lý d÷ liÖu chung. 1.2LËp tr×nh híng ®èi tîng ( Object-oriented programming ) Kh¸c víi lËp tr×nh cÊu tróc lµ ph©n tÝch bµi to¸n lÊy thñ tôc (hµm) lµm nÒn t¶ng, líp lÊy ®èi tîng lµm nÒn t¶ng ®Ó x©y dùng gi¶i thuËt, x©y dùng ch¬ng tr×nh. LËp tr×nh híng ®èi tuîng ®Æt träng t©m vµo ®èi tîng, yÕu tè quan träng ph¸t triÓn ch¬ng tr×nh vµ kh«ng cho phÐp d÷ liªô biÕn ®æi tù do trong hÖ thèng. D÷ liÖu g¾n chÆt víi c¸c hµm thµnh c¸c vïng riªng mµ chØ 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 lËp ®îc gäi lµ ®èi tîng. C¸c ®èi tîng cã thÓ t¸c ®éng, trao ®æi th«ng tin víi nhau qua c¬ chÕ th«ng b¸o (message). Tæ chøc ch¬ng tr×nh híng ®èi tîng cã thÓ ®îc m« t¶ nh trong h×nh sau. §èi tîng A
messag e
D÷ liÖu
§èi tîng B D÷ liÖu
§èi tîng C D÷ liÖu LTH§T cã nh÷ng ®Æc tÝnh chñ yÕu sau: 1. TËp chung vµo d÷ liÖu thay cho c¸c hµm. 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 ®ã. 5. 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. 6. C¸c ®èi tîng t¸c ®éng vµ trao ®æi th«ng tin víi nhau th«ng qua c¸c hµm. 7. Cã thÓ dÔ dµng bæ sung d÷ liÖu vµ c¸c 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 (boottom-up). Nh vËy trong mét ch¬ng tr×nh híng ®èi tîng cÇn ph¶i x©y dùng ®îc c¸c ®èi tîng, vµ c¸c ®èi tîng ®· cã cÇn ph¶i lµm g× ®Ó gi¶i quyÕt ®îc c¸c c«ng viÖc cô thÓ. VÊn ®Ò ®Æt ra lµ lµm sao ®Ó x©y dùng ®îc mét ®èi tîng cho bµi to¸n ®· ®Æt ra. Mét ®èi tîng lµ sù liªn kÕt gi÷a cÊu tróc d÷ liÖu víi c¸c thao t¸c (ph¬ng thøc-method) trªn nã. §èi tîng =
D÷ liÖu + Thao t¸c
VÝ dô : - §èi tîng §iÓm : d÷ liÖu : x, y, z, mµu thao t¸c : Ph¹m Thµnh C«ng Hµ néi
Khoa CNTT Trêng Cao ®¼ng C«ng nghiÖp 2
§Ò c¬ng bµi gi¶ng.
LËp tr×nh híng ®èi tîng. - g¸n gi¸ trÞ cho gi÷ liÖu - xuÊt gi¸ trÞ - chuyÓn ®iÓm ®Õn vÞ trÝ míi ..... - §èi tîng Chuçi : d÷ liÖu : char* thao t¸c : - cho chiÒu dµi - nèi hai chuçi ..... - §èi tîng Stack : d÷ liÖu : sè nguyªn hay ký tù thao t¸c : - t¹o tËp stack - push 1 phÇn tö vµo stack - pop 1 phÇn tö vµo stack ...... - §èi tîng C©y : - lo¹i thùc vËt cã gç, l¸ - sù ph¸t triÓn ..... - §èi tîng Xe : - b»ng s¾t, cã b¸nh xe, träng t¶i hay sè ghÕ - Di chuyÓn ®îc .... Nh vËy mçi mét ®èi tîng th× l¹i cÇn x¸c ®Þnh thËt chÝnh x¸c ®Æc ®iÓm vµ hµnh vi cô thÓ cho c¸c kiÓu d÷ liÖu trong ®èi tîng. VÝ dô : líp sè nguyªn (int) : ChØ tËp hîp sè nguyªn (-32.... –32... ) chØ cô thÓ lµ 9 vµ còng cã c¸c ph¬ng thøc +, -, *, /.... Líp HCN D÷ liÖu : Dai (float ), Rong (float) Pthøc :DtÝch() Cvi() §èi tîng HCN S1(3,4) =>DtÝch () = 13 =>Cvi() = 14 Mét ®iÓm rÊt ®Æc trng trong ®èi tîng lµ mçi mét ®èi tîng cã cho riªng m×nh mét b¶n sao c¸c phÇn tö d÷ liÖu cña líp (gäi lµ mét thÓ hiÖn). Do ®ã c¸c ®èi tîng ®éc lËp kh¸c nhau, khi thay ®æi d÷ liÖu trªn ®èi tîng nµy sÏ kh«ng ¶nh hëng ®Õn ®èi tîng kh¸c vµ gëi c¸c th«ng ®iÖp cho ®èi tîng nµy sÏ kh«ng ¶nh hëng tíi ®èi tîng kh¸c. §èi tîng HCN S (3,4) => S1. DtÝch() =13 => S1. Cvi() =14 S2 (7,8) => S2. DtÝch() =56 => S2. Cvi() =30 2. C¸c ®Æc ®iÓm lËp tr×nh híng ®èi tîng TÊt c¶ ng«n ng÷ lËp tr×nh híng ®èi tîng hay C ++ ®Òu cã ba ®Æc chung lµ tÝnh ®ãng gãi ( encapsulation), tÝnh kÕ thõa (inherirance) vµ tÝnh t¬ng øng béi (polymorphism) 2.1TÝnh ®ãng gãi ( encapsulation ) Ph¹m Thµnh C«ng Hµ néi
Khoa CNTT Trêng Cao ®¼ng C«ng nghiÖp 3
§Ò c¬ng bµi gi¶ng. LËp tr×nh híng ®èi tîng. TÝnh ®ãng gãi lµ mét kü thuËt mµ nã rµng buéc ®o¹n lÖnh (thñ tôc) hay cßn gäi lµ ph¬ng thøc d÷ liÖu ®îc vËn dông vµ c¶ hai bªn ®Òu ®îc an toµn khi cã sù can thiÖp tõ bªn ngoµi. ChÝnh v× vËy c¸c ph¬ng thøc vµ d÷ liÖu ®îc vËn dông sÏ liªn kÕt thµnh kiÓu d÷ (class). Tõ ®ã c¸c ®èi tîng ®îc khai b¸o thuéc kiÓu class nµy. Trong mét ®èi tîng ph¬ng thøc vµ d÷ liÖu cã thÓ lµ thµnh phÇn private hay lµ public. NÕu chóng lµ c¸c thµnh phÈn private th× bÞ chÞu ¶nh hëng bëi c¸c thµnh phÇn kh¸c cña ®èi tîng (®iÒu ®ã cã nghÜa lµ bÊt kú phÇn nµo ë ngoµi ph¹m vi kiÓu class sÏ kh«ng cã ¶nh hëng g× ®Õn thµnh phÇn nµy). NÕu truy cËp hay lµm thay ®æi th«ng qua ®èi tîng cña nã. Th«ng thêng c¸c thµnh phÇn public cña mét ®èi ®îng sö dông ®èi tîng thuéc thµnh phÇn private. 2.2TÝnh kÕ thõa ( inheritance ) TÝmh kÕ thõa lµ qu¸ tr×nh cña mét nhãm ®èi tîng cã thÓ lÊy ®îc quyÒn së h÷u cña nhãm ®èi tîng kh¸c. HÇu hÕt c¸c ®èi tîng kÕ thõa nh÷ng ®Æc ®iÓm chung ®îc diÔn t¶ nã, ngoµi ra cßn cã thªm vµo nh÷ng ®Æc ®iÓm riªng biÖt vµ chØ ®îc chØ râ bëi chÝnh nã. TÝnh kÕ thõa trong lËp tr×nh híng ®èi tîng rÊt quan träng bëi v× nã cung cÊp mét ®èi tîng kh«ng mang nh÷ng ®Æc tÝnh riªng cña nã mµ cßn mang ®Æc tÝnh chung cña mét líp ®èi tîng nµo ®ã. VÝ dô : Mét cöa hµng b¸n Ên phÈm bao gåm c¸c lo¹i b¨ng cassette, vµ c¸c lo¹i s¸ch. §Ó qu¶n lý tõng cuèn b¨ng, tõng cuèn s¸ch th× ®èi víi tõng mét cuèn b¨ng cÇn qu¶n lý tùa ®Ò, thêi thîng, gi¸ c¶. §èi víi mét cuèn s¸ch th× cÇn qu¶n lý tùa ®Ò, sè trang, gi¸ c¶. NhËn xÐt thÊy r»ng hai lo¹i ®èi tîng nµy cã chung c¸c ®Æc ®iÓm tùa ®Ò, gi¸ c¶. Nh vËy cÇn x©y dùng líp ANPHAM cã chung 2 ®Æc ®iÓm trªn tõ líp ®ã SACH, BANG kÕ thõa líp ANPHAM ngoµi ra líp SACH cã thªm sè trang, líp BANG cã thªm thêi lîng ANPHAM -Tùa ®Ò -Gi¸ c¶ BANG - Thêi l
SACH - Sè
2.3TÝnh t¬ng øng béi ( polymorphism ) Trong lËp tr×nh t¬ng ®èi cÇn cung cÊp mét kh¶ n¨ng rÊt quan träng ®ã lµ tÝnh øng béi. Khi cã nhiÒu líp dÉn xuÊt kÕ thõa tõ mét líp th× ta thêng cã chung mét hµnh ®éng nhng hµnh ®éng nµy cã tÝnh chÊt ®Æc thï cho riªng tõng líp dÉn xuÊt.
Ph¹m Thµnh C«ng Hµ néi
Khoa CNTT Trêng Cao ®¼ng C«ng nghiÖp 4
§Ò c¬ng bµi gi¶ng. LËp tr×nh híng ®èi tîng. VÝ dô : Stack vµ Queue cã chung ph¬ng híng push(), pop() nhng push vµ pop cña Stack kh¸c push vµ pop cña Queue. Nh vËy chØ cÇn mét tªn ph¬ng thøc duy nhÊt ®îc dïng chung cho c¸c líp dÉn xuÊt mÆc dï néi dung ph¬ng thøc ®ã thay ®æi tuú ý theo ®èi tîng thuéc líp dÉn xuÊt nµo ®îc x¸c ®Þnh cô thÓ khi ch¬ng tr×nh thi hµnh . TÝnh t¬ng øng cña béi cã nghÜa lµ víi cïng mét tªn ®Æc biÖt sö dông cho nhiÒu môc ®Ých kh¸c nhau. ANPHAM VÝ dô : Show() SACH Show()
BANG.
BANG Show()
Tuú vµo ®èi tîng SACH hay BANG th× Show() cho th«ng tin vÒ SACH hay
Mét sè vÝ dô kh¸c cã tÝnh chÊt t¬ng øng béi khi tÝnh gi¸ trÞ tuyÖt ®èi mét sè cÇn x©y dùng 3 hµm riªng biÖt: abs( ), labs( ), fabs( ).Ba hµm nµy sÏ tr¶ vÒ gi¸ trÞ tuyÖt ®èi cña mét sè nguyªn, sè nguyªn lín hay sè thùc. Nhng ®èi tîng C++ cung cÊp t¬ng øng béi th× chØ cho mçi hµm abs( ). KiÓu d÷ liÖu ®îc sö dông cho hµm sÏ x¸c ®Þnh phiªn b¶n cô thÓ nµo ®îc gäi ®Õn. Nh vËy víi mét tªn hµm nhng sö dông cho nhiÒu môc ®Ých kh¸c nhau. §©y gäi lµ hµm overload. Kh¸i niÖm t¬ng øng béi thêng cã thÓ ®îc hiÓu lµ “mét giao diÖn, mét ph¬ng thøc“. §iÒu nµy cã nghÜa lµ nã cho phÐp thiÕt kÕ mét giao diÖn chung cho mét nhãm c¸c sù viÖc liªn hÖ víi nhau, mét viÖc cô thÓ ®îc thi hµnh phô thuéc vµo kiÓu d÷ liÖu ch¬ng tr×nh thi hµnh . TÝnh t¬ng øng béi dùa trªn sù liªn kÕt muén tøc ph¬ng thøc cô thÓ nµo ®îc x¸c ®Þnh tuú thuéc vµo d÷ kiÓu liÖu khi ch¬ng tr×nh thi hµnh. Sù thuËn tiÖn cña t¬ng øng béi lµ gi¶m ®é phøc t¹p ch¬ng tr×nh b»ng c¸ch sö dông mét giao diÖn cho c¸c c«ng viÖc kh¸c nhau mµ ngêi lËp ch¬ng tr×nh kh«ng cÇn quan t©m ®Õn bëi v× tr×nh biªn dÞch tù ®éng chän hµnh ®éng cô thÓ v¬Ý kiÓu d÷ liÖu t¬ng øng. Nh vÝ dô trªn chØ cÇn ®Æt mét tªn hµm lÊy gi¸ trÞ tuyÖt ®èi thay v× 3 tªn hµm kh¸c nhau nhng kÕt qu¶ ch¬ng tr×nh kh«ng thay ®æi. Ngoµi ra tÝnh t¬ng øng béi cßn ¸p dông cho c¶ to¸n tö vÝ dô trong C dÊu + ®Ó tÝnh tæng hai hay nhiÒu sè nguyªn, sè thùc, ... vµ tr×nh biªn dÞch tù ®éng biÕt kiÓu d÷ liÖu nµo sÏ thùc hiÖn ®îc thùc hiÖn víi to¸n tö + t¬ng øng, nhng trong C++ cã thÓ më réng kh¸i niÖm nµycho kiÓu d÷ liÖu tù ®Þnh nghÜa. KiÓu t¬ng øng nµy gäi lµ to¸n tö chång. 3. C¸c ng«n tr×nh híng ®èi tîng.
SIMULA (66)
LTH§T kh«ng ph¶i lµ ®Æc quyÒn cña mét ng«nSMALLTALK 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 dîc thÓ hiÖn SMALLTALK trong nhiÒu ng«n ng÷ lËp tr×nh kh¸c nhau. Nh÷ng ng«n ng÷ cung cÊp kh¶ n¨ng LTH§ ®îc gäi(83) lµ ng«n ng÷ lËp tr×nh híng ®èi tîng. Tuy vÉn cã nh÷ng ng«n ADA 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 C++ Ph¹m Thµnh C«ng Hµ néi ADA
EIFEL (90) Khoa CNTT Trêng Cao ®¼ng C«ng nghiÖp JAVA (95) 5
Sù ph¸t triÓn cña c¸c ng«n ng÷
§Ò c¬ng bµi gi¶ng. LËp tr×nh híng ®èi tîng. h¹n chÕ kh¶ n¨ng LTH§T. H×nh sau 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.
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 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 ®ã 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 sö dông ng«n ng÷ C++ ®Ó giíi thiÖu ph¬ng ph¸p LTH§T trong gi¸o tr×nh 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.
Ch¬ng 2
X©y dùng líp – tÝnh ®ãng gãi
1. ThiÕt kÕ mét líp Mét kh¸i niÖm quan träng vµ c¬ b¶n cña lËp tr×nh híng ®èi tînglµ líp (class). Class dïng ®Î t¹o ra c¸c ®èi tîng (object).
Ph¹m Thµnh C«ng Hµ néi
Khoa CNTT Trêng Cao ®¼ng C«ng nghiÖp 6
§Ò c¬ng bµi gi¶ng. LËp tr×nh híng ®èi tîng. Có ph¸p khai b¸o class gièng nh khai b¸o cÊu tróc structure vµ cã d¹ng nh sau: class class_name { private: private function and variable of the class // khai b¸o c¸c hµm, gi¸ trÞ riªng cña líp public: public function and variable of the class // khai b¸o c¸c hµm, gi¸ trÞ chung (c«ng céng) cña líp proteted: }; Trong ®ã class_name lµ c¸c danh ®Þnh cña C++ dïng ®Æt tªn líp. (class_name) ë ®©y còng ®îc xem nh mét kiÓu d÷ míi ®îc ®Þnh nghÜa. C¸c hµm vµ c¸c biÕn ®îc khai b¸o trong líp ®îc gäi lµ c¸c thµnh phÇn cña líp. MÆc ®Þnh tÊt c¶ c¸c hµm hay biÕn khai b¸o trong líp lµ nh÷ng thµnh phÇn riªng (private). §èi víi thµnh phÇn riªng nµy th× chØ kh¸c thµnh phÇn kh¸c ®îc khai b¸o trong líp míi ®îc phÐp truy cËp hay söa ®æi. §Ó khai b¸o c¸c thµnh phÇn chung (public) cña líp th× ph¶i cã tõ kho¸ public theo sau lµ dÊu hai chÊm. TÊt c¶ c¸c thµnh phÇn chung nµy sÏ ®îc truy cËp hay söa ®æi bëi c¸c thµnh phÇn kh¸c trong class thay bÊt kú thµnh phÇn nµo trong ch¬ng tr×nh. Chó ý : Khi khai b¸o class ph¶i cã dÊu chÊm phÈy. VÝ dô : class my class { // khai b¸o thµnh phÇn private int a; public : void set_a (int num ); int get_a ( ) ; }; Trong class nµy cã mét thµnh phÇn private lµ a vµ hai hµm thuéc thµnh phÇn chung gäi lµ ph¬ng thøc lµ set_a( ) vµ get_a ( ), ë ®©y c¸c hµm nµy chØ ®îc khai b¸o lµ prototype. (Còng cã thÓ võa khai b¸o võa ®Þnh nghÜa c¸c hµm nµy ngay trong class ). Trong vÝ dô thµnh phÇn private a sÏ kh«ng ®îc truy cËp bëi bÊt kú trong ch¬ng tr×nhmµ chØ cã c¸c hµm thµnh phÇn cña líp myclass nªn chóng cã thÓ truy cËp bÊt cø ë ®©u trong ch¬ng tr×nh. Trong vÝ dô trªn c¸c hµm thµnh phÇn public míi chØ ®îc khai b¸o d¹ng prototype, do ®ã ph¶i ®Þnh nghÜa c¸c hµm nµy víi có ph¸p nh sau: type_return class_name :: func_name (parameter_list ) { .......... } Trong ®ã : type_return: KiÓu tr¶ vÒ cña hµm thµnh phÇn func_name: Tªn hµm thµnh phÇn parameter_list: Danh s¸ch tham sè hµm thµnh phÇn §Þnh nghÜa c¸c hµm thµnh phÇn puplic cña líp myclass void myclass :: set_a (int num) { Ph¹m Thµnh C«ng Hµ néi
Khoa CNTT Trêng Cao ®¼ng C«ng nghiÖp 7
§Ò c¬ng bµi gi¶ng. LËp tr×nh híng ®èi tîng. a=num; // a lµ thµnh phÇn private nªn hµm set_a ( ) cã thÓ truy cËp. } int myclass :: get_a( ) { return a; } Còng trong vÝ dô trªn chóng ta míi chØ khai b¸o líp mµ cha khai b¸o c¸c ®èi tîng thuéc líp ®ã. §Ó khai b¸o ®èi tîng thuéc mét líp còng gièng nh khai b¸o biÕn víi biÕn lµ mét ®èi tîng vµ kiÓu cña biÕn chÝnh lµ tªn líp. (C¸ch ®Æt tªn cho ®èi tîng còng gièng ®Æt tªn biÕn). Myclass ob1, ob2; // khai b¸o hai ®èi tîng ob1 vµ ob2 thuéc líp myclass. Mét ®èi tîng ®· ®îc t¹o ra th× trong ch¬ng tr×nh cã thÓ truy cËp ®Õn c¸c thµnh puplic cña líp th«ng qua ®èi tîng víi to¸n tö. (chÊm) ob1.set_a(10); // g¸n 10 cho thµnh phÇn a cña líp ®èi tîng ob1 ob2.set_a(99);// g¸n 99 cho thµnh phÇn a cña líp ®èi tîng ob2 Ghi chó : - Khi khai b¸o mét líp gièng nh khai b¸o mét kiÓu d÷ liÖu míi, mét ®èi tîng cã thÓ khai b¸o thuéc c¸c líp nµy, còng gièng nh mét biÕn do ®ã chóng lu«n lu«n chiÕm kho¶ng trèng trong bé nhí, nhng khai b¸o líp th× th× hoµn toµn kh«ng chiÕm bé nhí. - Mçi mét ®èi tîng thuéc mét líp th× lu«n cã b¶n sao c¸c thµnh phÇn trong líp, do ®ã c¸c gi¸ trÞ g¸n cho c¸c thµnh phÇn cña ®èi tîng nµy kh«ng ¶nh hëng g× ®Õn c¸c gi¸ trÞ cña thµnh phÇn cïng líp cña ®èi tîng kh¸c. VÝ dô : nh trªn viÖc g¸n 99 cho a cña ®èi tîng ob2 kh«ng lµm ¶nh hëng tíi gi¸ trÞ 10 cña a cña ®èi tîng ob1. VÝ dô : Sö dông líp myclass dÓ g¸n gi¸ trÞ cho a cña ®èi tîng ob1, ob2 vµhiÓn thÞ gi¸ trÞ cña tõng ®ãi tîng. # include < iostream.h > class myclass{ // khai b¸o thµnh phÇn private int a; public : void set_a (int num ); int get_a ( ); }; void myclass :: set_a ( int num ) { a= num; // a lµ thµnh phÇn private nªnhµm set_a ( ) cã thÓ truy cËp. } int myclass :: get_a( ) { return a; } void main( ) { my class ob1, ob2; ob1.set_a(10); ob2.set_a(99); cout<< ob1.get_a() << “\ n”; cout<< ob2.get_a() << “\ n”; Ph¹m Thµnh C«ng Hµ néi
Khoa CNTT Trêng Cao ®¼ng C«ng nghiÖp 8
§Ò c¬ng bµi gi¶ng. LËp tr×nh híng ®èi tîng. return ; } // Ch¬ng tr×nh trªn cho hiÓn thÞ gi¸ trÞ 10 vµ 99 trªn mµn mµn h×nh. VÝ dô : Trong líp myclass thµnh phÇn a lµ private do ®ã nÕu trong ch¬ng tr×nh chÝnh truy cËp ®Õn th× tr×nh biªn dÞch sÏ th«ng b¸o lçi nh sau : # include < iostream.h > ........ void main() { myclass ob1, ob2; ob1.a = 10 ; // ERROR ! cannot accecc private menber ob2.a =99 ; // by non-menber function. cout << ob1.get_a() << “ \ n”; cout << ob2.get_a() << “ \ n”; return ; } VÝ dô : Trong thµnh phÇn public kh«ng nh÷ng chØ ®îc khai b¸o víi c¸c hµm mµ cã thÓ khai b¸o c¸c biÕn. NÕu vÝ dô trªn khai b¸o a thuéc thµnh phÇn public th× ch¬ng tr×nh chÝnh cã thÓ truy cËp ®îc chóng. # include < iostream.h > class myclass { public : int a; }; void main() { my class ob1, ob2; ob1.a =10; ob2.a =99; cout << ob1.a << “ \ n”; cout << ob2.a << “ \ n”; return; } Ch¬ng tr×nh nµy còng cho kÕt qu¶ lµ 10 vµ 99 trªn mµn h×nh. VÝ dô: Bµi to¸n x©y dùng líp ®iÓm víi c¸c thµnh phÇn d÷ liÖu ®¬n gi¶n lµ gi¸ trÞ x, y vµ c¸c hµm (ph¬ng thøc) nhËp gi¸ trÞ, chuyÓn, xuÊt mét ®iÓm lªn mµn h×nh. Lêi gi¶i minh ho¹. # include
Khai b¸o th viÖn. # include # include // Khai b¸o mét líp point class point{ private: // Thµnh phÇn d÷ liÖu, hµm riªng cña líp Private: x, y int x,y; public: // Thµnh phÇn d÷ liÖu, hµm chung cña líp Public: void init(int ox,int oy);// Khai b¸o hµm nhËp G.trÞ cã tham sè cho x, y void move(int dx,int dy);// Khai b¸o hµm chuyÓn mét ®iÓm cã tham sè Ph¹m Thµnh C«ng Hµ néi
Khoa CNTT Trêng Cao ®¼ng C«ng nghiÖp 9
§Ò c¬ng bµi gi¶ng. LËp tr×nh híng ®èi tîng. void display(); // Khai b¸o hµm xuÊt G.trÞ mét ®iÓm: x, y }; // §Þnh nghÜa néi dung hµm nhËp G.trÞ cã tham sè cho x, y ( ®Þnh nghÜa ngoµi líp ) void point :: init(int ox , int oy) { cout<<"Ham thanh phan init\n"; x=ox; y=oy; // g¸n G.trÞ cho x, y cña líp víi gt tham sè truyÒn vµo return; } // §Þnh nghÜa néi dung hµm di chuyÓn ®iÓm ( ®Þnh nghÜa ngoµi líp ) void point :: move(int dx,int dy) { cout<<"Ham thanh phan Move\n"; x+=dx; y+=dy; // §iÓm míi x, y ->x+dx, y+dy return; } // §Þnh nghÜa néi dung xuÊt G.trÞ x, y cña mét ®iÓm ( ®Þnh nghÜa ngoµi líp ) void point:: display() { cout<<"Ham thanh phan Display\n"; cout<<"Toa do x="<<x<<" y="< x=3, y=6 p.display(); // gäi hµm xuÊt x=3, y=6 getch(); return; } VÝ du : - X©y dùng líp ®iÓm (point) gåm x, y thÓ hiÖn ®iÓm trªn trªn to¹ ®é hai chiÒu x,y víi ph¬ng thøc nhËp gi¸ trÞ x, y tõ bµn phÝm vµ xuÊt gi¸ trÞ x,y ra mµn h×nh. - X©y dùng líp tam gi¸c gåm ba ®iÓm A, B, C trªn hÖ trôc x,y ( A,B,C thô«c kiÓu ®iÓm ®· x©y dùng ë trªn tøc lµ A(x,y), B(x,y), C(x,y)). Thùc hiÖn cµi ®Æt ph¬ng thøc nhËp c¸c gi¸ trÞ cho A,B,C vµ ph¬ng thøc tÝnh, xuÊt diÖn tÝch cña tam gi¸c ra mµn h×nh. Lêi gi¶i minh ho¹. # include Khai b¸o th viÖn. # include # include // Khai b¸o mét líp point class point{ public: // Thµnh phÇn d÷ liÖu, hµm chung cña líp Public: int x,y; Ph¹m Thµnh C«ng Hµ néi
Khoa CNTT Trêng Cao ®¼ng C«ng nghiÖp 10
§Ò c¬ng bµi gi¶ng. LËp tr×nh híng ®èi tîng. void init(); // Khai b¸o hµm nhËp G.trÞ cã tham sè cho x, y void display(); // Khai b¸o hµm xuÊt G.trÞ mét ®iÓm: x, y }; // §Þnh nghÜa néi dung hµm nhËp G.trÞ cã tham sè cho x, y ( ®Þnh nghÜa ngoµi líp ) void point :: init() { cout<<"Ban nhap cac gia tri x,y:\n"; cout<<”x=”; cin>>x; // g¸n G.trÞ cho x, y cña líp víi gt tõ bµn phÝm cout<<”y=”; cin>>y; return; } // §Þnh nghÜa néi dung xuÊt G.trÞ x, y cña mét ®iÓm ( ®Þnh nghÜa ngoµi líp ) void point:: display() { cout<<"Toa do: x="<<x<<" y="<