Lap Trinh Huong Doi Tuong Cong2b

  • November 2019
  • PDF

This document was uploaded by user and they confirmed that they have the permission to share it. If you are author or own the copyright of this book, please report to us by using this DMCA report form. Report DMCA


Overview

Download & View Lap Trinh Huong Doi Tuong Cong2b as PDF for free.

More details

  • Words: 53,094
  • Pages: 139
§Ò 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="<
Lap Trinh
June 2020 25
Thuyet Tuong Doi
May 2020 4