LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG

165 180 0
LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

I HC NNG TRNG I HC K THUT KHOA CễNG NGH THễNG TIN - IN T VIN THễNG GIO TRèNH MễN HC LP TRèNH HNG I TNG BIấN SON: Lấ TH M HNH NNG, 09/2002 Giỏo trỡnh mụn Lp trỡnh hng i tng Trang MC LC CHNG 1: GII THIU V LP TRèNH HNG I TNG I LP TRèNH HNG I TNG (OOP) L Gè ? I.1 Lp trỡnh tuyn tớnh I.2 Lp trỡnh cu trỳc I.3 S tru tng húa d liu I.4 Lp trỡnh hng i tng II MT S KHI NIM MI TRONG LP TRèNH HNG I TNG II.1 S úng gúi (Encapsulation) II.2 Tớnh k tha (Inheritance) II.3 Tớnh a hỡnh (Polymorphism) 10 III CC NGễN NG V VI NG DNG CA OOP 11 CHNG 2: CC M RNG CA C++ 12 I LCH S CA C++ 12 II CC M RNG CA C++ 12 II.1 Cỏc t khúa mi ca C++ 12 II.2 Cỏch ghi chỳ thớch 12 II.3 Dũng nhp/xut chun 13 II.4 Cỏch chuyn i kiu d liu 14 II.5 V trớ khai bỏo bin 14 II.6 Cỏc bin const 15 II.7 V struct, union v enum 16 II.8 Toỏn t nh phm vi 16 II.9 Toỏn t new v delete 17 II.10 Hm inline 23 II.11 Cỏc giỏ tr tham s mc nh 24 II.12 Phộp tham chiu 25 II.13 Phộp a nng húa (Overloading) 29 CHNG 3: LP V I TNG 39 I DN NHP 39 II CI T MT KIU DO NGI DNG NH NGHA VI MT STRUCT 39 III CI T MT KIU D LIU TRU TNG VI MT LP 41 IV PHM VI LP V TRUY CP CC THNH VIấN LP 45 V IU KHIN TRUY CP TI CC THNH VIấN 47 VI CC HM TRUY CP V CC HM TIN CH 48 VII KHI NG CC I TNG CA LP : CONSTRUCTOR 49 VIII.S DNG DESTRUCTOR 51 IX KHI NO CC CONSTRUTOR V DESTRUCTOR C GI ? 53 X S DNG CC THNH VIấN D LIU V CC HM THNH VIấN 54 XI TR V MT THAM CHIU TI MT THNH VIấN D LIU PRIVATE 57 XII PHẫP GN BI TON T SAO CHẫP THNH VIấN MC NH 59 XIII.CC I TNG HNG V CC HMTHNH VIấN CONST 60 XIV.LP NH L CC THNH VIấN CA CC LP KHC 64 XV CC HM V CC LP FRIEND 67 Biờn son: Lờ Th M Hnh Giỏo trỡnh mụn Lp trỡnh hng i tng Trang XVI.CON TR THIS 68 XVII.CC I TNG C CP PHT NG 71 XVIII.CC THNH VIấN TNH CA LP 72 CHNG 4: A NNG HểA TON T 76 I DN NHP 76 II CC NGUYấN TC C BN CA A NNG HểA TON T 76 III CC GII HN CA A NNG HểA TON T 76 IV CC HM TON T Cể TH L CC THNH VIấN CA LP HOC KHễNG L CC THNH VIấN 77 V A NNG HO CC TON T HAI NGễI 80 VI A NNG HểA CC TON T MT NGễI 87 VII A NNG HểA MT S TON T C BIT 90 VII.1.Toỏn t [] 91 VII.2.Toỏn t () 92 VIII.TON T CHUYN I KIU 94 IX TON T NEW V DELETE 95 IX.1.a nng húa toỏn t new v delete ton cc 96 IX.2.a nng húa toỏn t new v delete cho mt lp 97 X A NNG HểA CC TON T CHẩN DềNG > 98 XI MT S V D 99 XI.1.Lp String 99 XI.2.Lp Date 103 CHNG 5: TNH K THA 107 I DN NHP 107 II K THA N 107 II.1.Cỏc lp c s v cỏc lp dn xut 107 II.2.Cỏc thnh viờn protected 109 II.3.ẫp kiu cỏc tr lp c s ti cỏc tr lp dn xut 109 II.4.nh ngha li cỏc thnh viờn lp c s mt lp dn xut: 113 II.5.Cỏc lp c s public, protected v private 113 II.6.Cỏc contructor v destructor lp dn xut 113 II.7.Chuyn i ngm nh i tng lp dn xut sang i tng lp c s 116 III A K THA (MULTIPLE INHERITANCE) 116 IV CC LP C S O (VIRTUAL BASE CLASSES) 119 CHNG 6: TNH A HèNH 122 I DN NHP 122 II PHNG THC O (VIRTUAL FUNCTION) 122 III LP TRU TNG (ABSTRACT CLASS) 125 IV CC THNH VIấN O CA MT LP 127 IV.1.Toỏn t o 127 IV.2.Cú constructor v destructor o hay khụng? 129 CHNG 7: THIT K CHNG TRèNH THEO HNG I TNG 132 I DN NHP 132 II CC GIAI ON PHT TRIN H THNG 132 III CCH TèM LP 133 IV CC BC CN THIT THIT K CHNG TRèNH 133 V CC V D 134 Biờn son: Lờ Th M Hnh Giỏo trỡnh mụn Lp trỡnh hng i tng Trang CHNG 8: CC DNG NHP/XUT 143 I DN NHP 143 II CC DềNG(STREAMS) 143 II.1.Cỏc file header ca th vin iostream 143 II.2.Cỏc lp v cỏc i tng ca dũng nhp/xut 144 III DềNG XUT 145 III.1.Toỏn t chốn dũng 145 III.2.Ni cỏc toỏn t chốn dũng v trớch dũng 146 III.3.Xut ký t vi hm thnh viờn put(); Ni vi hm put() 147 IV DềNG NHP 148 IV.1.Toỏn t trớch dũng: 148 IV.2.Cỏc hm thnh viờn get() v getline() 149 IV.3.Cỏc hm thnh viờn khỏc ca istream 151 IV.4.Nhp/xut kiu an ton 151 V NHP/XUT KHễNG NH DNG VI READ(),GCOUNT() V WRITE() 151 VI DềNG NHP/ XUT FILE 152 VI.1.Nhp/xut file bn 154 CHNG 9: HM V LP TEMPLATE 159 I CC HM TEMPLATE 159 II CC LP TEMPLATE 161 Biờn son: Lờ Th M Hnh Giỏo trỡnh mụn Lp trỡnh hng i tng Trang CHNG GII THIU V LP TRèNH HNG I TNG I LP TRèNH HNG I TNG (OOP) L Gè ? Lp trỡnh hng i tng (Object-Oriented Programming, vit tt l OOP) l mt phng phỏp mi trờn bc ng tin húa ca vic lp trỡnh mỏy tớnh, nhm lm cho chng trỡnh tr nờn linh hot, tin cy v d phỏt trin Tuy nhiờn hiu c OOP l gỡ, chỳng ta hóy bt u t lch s ca quỏ trỡnh lp trỡnh xem xột OOP ó tin húa nh th no I.1 Lp trỡnh tuyn tớnh Mỏy tớnh u tiờn c lp trỡnh bng mó nh phõn, s dng cỏc cụng tt c khớ np chng trỡnh Cựng vi s xut hin ca cỏc thit b lu tr ln v b nh mỏy tớnh cú dung lng ln nờn cỏc ngụn ng lp trỡnh cp cao u tiờn c a vo s dng Thay vỡ phi suy ngh trờn mt dóy cỏc bit v byte, lp trỡnh viờn cú th vit mt lot lnh gn vi ting Anh v sau ú chng trỡnh dch thnh ngụn ng mỏy Cỏc ngụn ng lp trỡnh cp cao u tiờn c thit k lp cỏc chng trỡnh lm cỏc cụng vic tng i n gin nh tớnh toỏn Cỏc chng trỡnh ban u ch yu liờn quan n tớnh toỏn v khụng ũi hi gỡ nhiu ngụn ng lp trỡnh Hn na phn ln cỏc chng trỡnh ny tng i ngn, thng ớt hn 100 dũng Khi kh nng ca mỏy tớnh tng lờn thỡ kh nng trin khai cỏc chng trỡnh phc hn cng tng lờn Cỏc ngụn ng lp trỡnh ngy trc khụng cũn thớch hp i vi vic lp trỡnh ũi hi cao hn Cỏc phng tin cn thit s dng li cỏc phn mó chng trỡnh ó vit hu nh khụng cú ngụn ng lp trỡnh tuyn tớnh Tht ra, mt on lnh thng phi c chộp lp li mi chỳng ta dựng nhiu chng trỡnh ú chng trỡnh di dũng, logic ca chng trỡnh khú hiu Chng trỡnh c iu khin nhy n nhiu ch m thng khụng cú s gii thớch rừ rng, lm th no chng trỡnh n ch cn thit hoc ti nh vy Ngụn ng lp trỡnh tuyn tớnh khụng cú kh nng kim soỏt phm vi nhỡn thy ca cỏc d liu Mi d liu chng trỡnh u l d liu ton cc ngha l chỳng cú th b sa i bt k phn no ca chng trỡnh Vic dũ tỡm cỏc thay i khụng mong mun ú ca cỏc phn t d liu mt dóy mó lnh di v vũng vốo ó tng lm cho cỏc lp trỡnh viờn rt mt thi gian I.2 Lp trỡnh cu trỳc Rừ rng l cỏc ngụn ng mi vi cỏc tớnh nng mi cn phi c phỏt trin cú th to cỏc ng dng tinh vi hn Vo cui cỏc nm 1960 v 1970, ngụn ng lp trỡnh cú cu trỳc i Cỏc chng trỡnh cú cu trỳc c t chc theo cỏc cụng vic m chỳng thc hin V bn cht, chng trỡnh chia nh thnh cỏc chng trỡnh riờng r (cũn gi l hm hay th tc) thc hin cỏc cụng vic ri rc quỏ trỡnh ln hn, phc hn Cỏc hm ny c gi cng c lp vi cng nhiu cng tt, mi hm cú d liu v logic riờng.Thụng tin c chuyn giao gia cỏc hm thụng qua cỏc tham s, cỏc hm cú th cú cỏc bin cc b m khụng mt nm bờn ngoi phm vi ca hm li cú th truy xut c chỳng Nh vy, cỏc hm cú th c xem l cỏc chng trỡnh c t chung vi xõy dng nờn mt ng dng Mc tiờu l lm cho vic trin khai cỏc phn mm d dng hn i vi cỏc lp trỡnh viờn m ci thin c tớnh tin cy v d bo qun chng trỡnh Mt chng trỡnh cú cu trỳc c hỡnh thnh bng cỏch b góy cỏc chc nng c bn ca chng trỡnh thnh cỏc mnh nh m sau ú tr thnh cỏc hm Bng cỏch cụ lp cỏc cụng vic vo cỏc hm, chng trỡnh cú cu trỳc cú th lm gim kh nng ca mt hm ny nh hng n mt hm khỏc Vic ny cng lm cho vic tỏch cỏc tr nờn d dng hn S gúi gn ny cho phộp chỳng ta cú th vit cỏc chng trỡnh sỏng sa hn v gi c iu khin trờn tng hm Cỏc bin ton cc khụng cũn na v c thay th bng cỏc tham s v bin cc b cú phm vi nh hn v d kim soỏt hn Cỏch t chc tt hn ny núi lờn rng chỳng ta cú kh nng qun lý logic ca cu trỳc chng trỡnh, lm cho vic trin khai v bo dng chng trỡnh nhanh hn v hu hin hn v hiu qu hn Biờn son: Lờ Th M Hnh Giỏo trỡnh mụn Lp trỡnh hng i tng Trang Mt khỏi nim ln ó c a lp trỡnh cú cu trỳc l s tru tng húa (Abstraction) S tru tng húa cú th xem nh kh nng quan sỏt mt s vic m khụng cn xem xột n cỏc chi tit bờn ca nú Trong mt chng trỡnh cú cu trỳc, chỳng ta ch cn bit mt hm ó cho cú th lm c mt cụng vic c th gỡ l Cũn lm th no m cụng vic ú li thc hin c l khụng quan trng, chng no hm cũn tin cy c thỡ cũn cú th dựng nú m khụng cn phi bit nú thc hin ỳng n chc nng ca mỡnh nh th no iu ny gi l s tru tng húa theo chc nng (Functional abstraction) v l nn tng ca lp trỡnh cú cu trỳc Ngy nay, cỏc k thut thit k v lp trỡnh cú cu trỳc c s rng rói Gn nh mi ngụn ng lp trỡnh u cú cỏc phng tin cn thit cho phộp lp trỡnh cú cu trỳc Chng trỡnh cú cu trỳc d vit, d bo dng hn cỏc chng trỡnh khụng cu trỳc S nõng cp nh vy cho cỏc kiu d liu cỏc ng dng m cỏc lp trỡnh viờn ang vit cng ang tip tc din Khi phc ca mt chng trỡnh tng lờn, s ph thuc ca nú vo cỏc kiu d liu c bn m nú x lý cng tng theo Vn tr rừ rng l cu trỳc d liu chng trỡnh quan trng chng kộm gỡ cỏc phộp toỏn thc hin trờn chỳng iu ny cng tr rừ rng hn kớch thc ca chng trỡnh cng tng Cỏc kiu d liu c x lý nhiu hm khỏc bờn mt chng trỡnh cú cu trỳc Khi cú s thay i cỏc d liu ny thỡ cng cn phi thc hin c cỏc thay i mi ni cú cỏc thao tỏc tỏc ng trờn chỳng õy cú th l mt cụng vic tn thi gian v kộm hiu qu i vi cỏc chng trỡnh cú hng ngn dũng lnh v hng trm hm tr lờn Mt yu im na ca vic lp trỡnh cú cu trỳc l cú nhiu lp trỡnh viờn lm vic theo nhúm cựng mt ng dng no ú Trong mt chng trỡnh cú cu trỳc, cỏc lp trỡnh viờn c phõn cụng vit mt hp cỏc hm v cỏc kiu d liu Vỡ cú nhiu lp trỡnh viờn khỏc qun lý cỏc hm riờng, cú liờn quan n cỏc kiu d liu dựng chung nờn cỏc thay i m lp trỡnh viờn to trờn mt phn t d liu s lm nh hng n cụng vic ca tt c cỏc ngi cũn li nhúm Mc dự bi cnh lm vic theo nhúm, vic vit cỏc chng trỡnh cú cu trỳc thỡ d dng hn nhng sai sút vic trao i thụng tin gia cỏc thnh viờn nhúm cú th dn ti hu qu l mt rt nhiu thi gian sa cha chng trỡnh I.3 S tru tng húa d liu S tru tng húa d liu (Data abstraction) tỏc ng trờn cỏc d liu cng tng t nh s tru tng húa theo chc nng Khi cú tru tng húa d liu, cỏc cu trỳc d liu v cỏc phn t cú th c s dng m khụng cn bn tõm n cỏc chi tit c th Chng hn nh cỏc s du chm ng ó c tru tng húa tt c cỏc ngụn ng lp trỡnh, Chỳng ta khụng cn quan tõm cỏch biu din nh phõn chớnh xỏc no cho s du chm ng gỏn mt giỏ tr, cng khụng cn bit tớnh bt thng ca phộp nhõn nh phõn nhõn cỏc giỏ tr du chm ng iu quan trng l cỏc s du chm ng hot ng ỳng n v hiu c S tru tng húa d liu giỳp chỳng ta khụng phi bn tõm v cỏc chi tit khụng cn thit Nu lp trỡnh viờn phi hiu bit v tt c cỏc khớa cnh ca , mi lỳc v v tt c cỏc hm ca chng trỡnh thỡ ch ớt hm mi c vit ra, may mn thay tru tng húa theo d liu ó tn ti sn mi ngụn ng lp trỡnh i vi cỏc d liu phc nh s du chm ng Tuy nhiờn ch mi gn õy, ngi ta mi phỏt trin cỏc ngụn ng cho phộp chỳng ta nh ngha cỏc kiu d liu tru tng riờng I.4 Lp trỡnh hng i tng Khỏi nim hng i tng c xõy dng trờn nn tng ca khỏi nim lp trỡnh cú cu trỳc v s tru tng húa d liu S thay i cn bn ch, mt chng trỡnh hng i tng c thit k xoay quanh d liu m chỳng ta cú th lm vic trờn ú, hn l theo bn thõn chc nng ca chng trỡnh iu ny hon ton t nhiờn mt chỳng ta hiu rng mc tiờu ca chng trỡnh l x lý d liu Suy cho cựng, cụng vic m mỏy tớnh thc hin thng c gi l x lý d liu D liu v thao tỏc liờn kt vi mt mc c bn (cũn cú th gi l mc thp), mi th u ũi hi th cú mc tiờu c th, cỏc chng trỡnh hng i tng lm tng minh mi quan h ny Lp trỡnh hng i tng (Object Oriented Programming - gi tt l OOP) hay chi tit hn l Lp trỡnh nh hng i tng, chớnh l phng phỏp lp trỡnh ly i tng lm nn tng xõy dng thut gii, xõy Biờn son: Lờ Th M Hnh Giỏo trỡnh mụn Lp trỡnh hng i tng Trang dng chng trỡnh Thc cht õy khụng phi l mt phng phỏp mi m l mt cỏch nhỡn mi vic lp trỡnh phõn bit, vi phng phỏp lp trỡnh theo kiu cu trỳc m chỳng ta quen thuc trc õy, hay cũn gi l phng phỏp lp trỡnh hng th tc (Procedure-Oriented Programming), ngi lp trỡnh phõn tớch mt nhim v ln thnh nhiu cụng vic nh hn, sau ú dn dn chi tit, c th hoỏ c cỏc n gin, tỡm cỏch gii quyt di dng nhng thut gii c th rừ rng qua ú d dng minh ho bng ngụn ng gii thut (hay cũn gi cỏc thut gii ny l cỏc chng trỡnh con) Cỏch thc phõn tớch v thit k nh vy chỳng ta gi l nguyờn lý lp trỡnh t trờn xung (top-down), th hin quỏ trỡnh suy din t cỏi chung cho n cỏi c th Cỏc chng trỡnh l nhng chc nng c lp, s ghộp ni chỳng li vi cho chỳng ta mt h thng chng trỡnh gii quyt t Chớnh vỡ vy, cỏch thc phõn tớch mt h thng ly chng trỡnh lm nn tng, chng trỡnh úng vai trũ trung tõm ca vic lp trỡnh, c hiu nh phng phỏp lp trỡnh hg v th tc Tuy nhiờn, phõn tớch thit k mt h thng khụng nht thit phi luụn luụn suy ngh theo hng lm th no gii quyt cụng vic, chỳng ta cú th nh hng t theo phong cỏch vi mt s i tng ó cú, phi lm gỡ gii quyt c cụng vic t hoc phong phỳ hn, lm cỏi gỡ vi mt s i tng ó cú ú, t ú cng cú th gii quyt c nhng cụng vic c th Vi phng phỏp phõn tớch ú i tng úng vai trũ trựng tõm ca vic lp trỡnh nh vy, ngi ta gi l nguyờn lý lp trỡnh t di lờn (Bụttm-up) Lp trỡnh hng i tng liờn kt cu trỳc d liu vi cỏc thao tỏc, theo cỏch m tt c thng ngh v th gii quanh mỡnh Chỳng ta thng gn mt s cỏc hot ng c th vi mt loi hot ng no ú v t cỏc gi thit ca mỡnh trờn cỏc quan h ú Vớ d1.1: d hỡnh dựng hn, chỳng ta th nhỡn qua cỏc cụng trỡnh xõy dng hin i, nh sõn ng cú mỏi che hỡnh vũng cung, nhng kin trỳc thm m vi ng nột hỡnh cong Tt c nhng sn phm ú xut hin cựng vi nhng vt liu xõy dng Ngy nay, khụng ch chng lờn nhng viờn gch, nhng tng ỏ to nờn nhng qun th kin trỳc (nh Thỏp Chm Nha Trang, Kim T Thỏp, ), m cú th vi bờtụng, st thộp v khụng nhiu lm nhng viờn gch, ngi xõy dng cng cú th thit k nhng cụng trỡnh kin trỳc tuyt m, nhng to nh hin i Chớnh cỏc cht liu xõy dng ó lm nh hng phng phỏp xõy dng, cht liu xõy dng v nguyờn lý kt dớnh caỏ cht liu ú li vi cho chỳng ta mt i tng kho sỏt, Cht liu xõy dng v nguyờn lý kt dớnh cỏc cht liu li vi c hiu theo ngha d liu v chng trỡnh tỏc ng trờn d liu ú Vớ d1.2: Chỳng ta bit rng mt chic xe cú cỏc bỏnh xe, di chuyn c v cú th i hng ca nú bng cỏch quo tay lỏi Tng t nh th, mt cỏi cõy l mt loi thc vt cú thõn g v lỏ Mt chic xe khụng phi l mt cỏi cõy, m cỏi cõy khụng phi l mt chic xe, chỳng ta cú th gi thit rng cỏi m chỳng ta cú th lm c vi mt chic xe thỡ khụng th lm c vi mt cỏi cõy Chng hn, tht l vụ ngha mun lỏi mt cỏi cõy, cũn chic xe thỡ li chng ln thờm c chỳng ta ti nc cho nú Lp trỡnh hng i tng cho phộp chỳng ta s dng cỏc quỏ trỡnh suy ngh nh vy vi cỏc khỏi nim tru tng c s dng cỏc chng trỡnh mỏy tớnh Mt mu tin (record) nhõn s cú th c c ra, thay i v lu tr li; cũn s phc thỡ cú th c dựng cỏc tớnh toỏn Tuy vy khụng th no li vit mt s phc vo tin lm mu tin nhõn s v ngc li hai mu tin nhõn s li khụng th cng vi c Mt chng trỡnh hng i tng s xỏc nh c im v hnh vi c th ca cỏc kiu d liu, iu ú cho phộp chỳng ta bit mt cỏch chớnh xỏc rng chỳng ta cú th cú c nhng gỡ cỏc kiu d liu khỏc Chỳng ta cũn cú th to cỏc quan h gia cỏc kiu d liu tng t nhng khỏc mt chng trỡnh hng i tng Ngi ta thng t nhiờn phõn loi mi th, thng t mi liờn h gia cỏc khỏi nim mi vi cỏc khỏi nim ó cú, v thng cú th thc hin suy din gia chỳng trờn cỏc quan h ú Hóy quan nim th gii theo kiu cu trỳc cõy, vi cỏc mc xõy dng chi tit hn k tip cho cỏc th h sau so vi cỏc th h trc õy l phng phỏp hiu qu t chc th gii quanh chỳng ta Cỏc chng trỡnh hng i tng cng lm vic theo mt phng thc tng t, ú chỳng cho phộp xõy dng cỏc cỏc c cu d liu v thao tỏc mi da trờn cỏc c cu cú sn, mang theo cỏc tớnh nng ca cỏc c cu nn m chỳng da trờn ú, thờm vo cỏc tớnh nng mi Biờn son: Lờ Th M Hnh Giỏo trỡnh mụn Lp trỡnh hng i tng Trang Lp trỡnh hng i tng cho phộp chỳng ta t chc d liu chng trỡnh theo mt cỏch tng t nh cỏc nh sinh hc t chc cỏc loi thc vt khỏc Theo cỏch núi lp trỡnh i tng, xe hi, cõy ci, cỏc s phc, cỏc quyn sỏch u c gi l cỏc lp (Class) Mt lp l mt bn mu mụ t cỏc thụng tin cu trỳc d liu, ln cỏc thao tỏc hp l ca cỏc phn t d liu Khi mt phn t d liu c khai bỏo l phn t ca mt lp thỡ nú c gi l mt i tng (Object) Cỏc hm c nh ngha hp l mt lp c gi l cỏc phng thc (Method) v chỳng l cỏc hm nht cú th x lý d liu ca cỏc i tng ca lp ú Mt thc th (Instance) l mt vt th cú thc bờn b nh, thc cht ú l mt i tng (ngha l mt i tng c cp phỏt vựng nh) Mi mt i tng cú riờng cho mỡnh mt bn cỏc phn t d liu ca lp cũn gi l cỏc bin thc th (Instance variable) Cỏc phng thc nh ngha mt lp cú th c gi bi cỏc i tng ca lp ú iu ny c gi l gi mt thụng ip (Message) cho i tng Cỏc thụng ip ny ph thuc vo i tng, ch i tng no nhn thụng ip mi phi lm vic theo thụng ip ú Cỏc i tng u c lp vi vỡ vy cỏc thay i trờn cỏc bin th hin ca i tng ny khụng nh hng gỡ trờn cỏc bin th hin ca cỏc i tng khỏc v vic gi thụng ip cho mt i tng ny khụng nh hng gỡ n cỏc i tng khỏc Nh vy, i tng c hiu theo ngha l mt thc th m ú caỏ d liu v th tc tỏc ng lờn d liu ó c úng gúi li vi Hay i tng c c trng bi mt s thao tỏc (operation) v cỏc thụng tin (information) ghi nh s tỏc ng ca caỏ thao tỏc ny. Vớ d 1.3: Khi nghiờn c v ngn xp (stack), ngoi cỏc d liu vựng cha ngn xp, nh ca ngn xp, chỳng ta phi ci t kốm theo cỏc thao tỏc nh to (creat) ngn xp, kim tra ngn xp rng (empty), y (push) mt phn t vo ngn xp, ly (pop) mt phn t ngn xp Trờn quan im ly i tng lm nn tng, rừ rng d liu v cỏc thao tỏc trờn d liu luụn gn bú vi nhau, s kt dớnh chỳng chớnh l i tng chỳng ta cn kho sỏt Cỏc thao tỏc i tng c gi l cỏc phng thc hay hnh vi ca i tng ú Phng thc v d liu ca i tng luụn tỏc ng ln v cú vai trũ ngang i tng, Phng thc ca i tng c qui nh bi d liu v ngc li, d liu ca i tng c t trng bi cỏc phng thc ca i tng Chớnh nh s gn bú ú, chỳng ta cú th gi cựng mt thụng ip n nhng i tng khỏc iu ny giỳp ngi lp trỡnh khụng phi x lý chng trỡnh ca mỡnh mt dóy cỏc cu trỳc iu khin tu theo thụng ip nhn vo, m chng trỡnh c x lý vo thi im thc hin Túm li, so sỏnh lp trỡnh cu trỳc vi chng trỡnh lm nn tng: Chng trỡnh = Cu trỳc d liu + Thut gii Trong lp trỡnh hng i tng chỳng ta cú: i tng = Phng thc + D liu õy chớnh l quan im lp trỡnh ang tn ti v phỏt trin th gii ngy II MT S KHI NIM MI TRONG LP TRèNH HNG I TNG Trong phn ny, chỳng ta tỡm hiu cỏc khỏi nim nh s úng gúi, tớnh k tha v tớnh a hỡnh õy l cỏc khỏi nim cn bn, l nn tng t tng ca lp trỡnh hng i tng Hiu c khỏi nim ny, chỳng ta bc u tip cn vi phong cỏch lp trỡnh mi, phong cỏch lp trỡnh da vo i tng lm nn tng m ú quan im che du thụng tin thụng qua s úng gúi l quan im trung tõm ca II.1 S úng gúi (Encapsulation) S úng gúi l c ch rng buc d liu v thao tỏc trờn d liu ú thnh mt th thng nht, trỏnh c cỏc tỏc ng bt ng t bờn ngoi Th thng nht ny gi l i tng Biờn son: Lờ Th M Hnh Giỏo trỡnh mụn Lp trỡnh hng i tng Trang Trong Objetc Oriented Software Engineering ca Ivar Jacibson, tt c cỏc thụng tin ca mt h thng nh hng i tng c lu tr bờn i tng ca nú v ch cú th hnh ng cỏc i tng ú c lnh thc hin cỏc thao tỏc Nh vt, s úng gúi khụng ch n thun l s gom chung d liu v chng trỡnh vo mt khi, chỳng cũn c hiu theo ngha l s ng nht gia d liu v cỏc thao tỏc tỏc ng lờn d liu ú Trong mt i tng, d liu hay thao tỏc hay c hai cú th l riờng (private) hoc chung (public) ca i tng ú Thao tỏc hay d liu riờng l thuc v i tng ú ch c truy cp bi cỏc thnh phn ca i tng, iu ny ngha l thao tỏc hay d liu riờng khụng th truy cp bi cỏc phn khỏc ca chng trỡnh tn ti ngoi i tng Khi thao tỏc hay d liu l chung, cỏc phn khỏc ca chng trỡnh cú th truy cp nú mc dự nú c nh ngha mt i tng Cỏc thnh phn chung ca mt i tng dựng cung cp mt giao din cú iu khin cho cỏc thnh thnh riờng ca i tng C ch úng gúi l phng thc tt thc hin c ch che du thụng tin so vi cỏc ngụn ng lp trỡnh cu trỳc II.2 Tớnh k tha (Inheritance) Chỳng ta cú th xõy dng cỏc lp mi t cỏc lp c thụng qua s k tha Mt lp mi cũn gi l lp dn xut (derived class), cú th tha hng d liu v cỏc phng thc ca lp c s (base class) ban u Trong lp ny, cú th b sung cỏc thnh phn d liu v cỏc phng thc mi vo nhng thnh phn d liu v cỏc phng thc m nú tha hng t lp c s Mi lp (k c lp dn xut) cú th cú mt s lng bt k cỏc lp dn xut Qua c cu k tha ny, dng hỡnh cõy ca cỏc lp c hỡnh thnh Dng cõy ca cỏc lp trụng ging nh cỏc cõy gia ph vỡ th cỏc lp c s cũn c gi l lp cha (parent class) v cỏc lp dn xut c gi l lp (child class) Vớ d 1.2: Chỳng ta s xõy dng mt cỏc lp mụ t cho th vin cỏc n phm Cú hai kiu n phm: v sỏch Chỳng ta cú th to mt n phm tng quỏt bng cỏch nh ngha cỏc thnh phn d liu tng ng vi s trang, mó s tra cu, ngy thỏng xut bn, bn quyn v nh xut bn Cỏc n phm cú th c ly ra, ct i v c ú l cỏc phng thc thc hin trờn mt n phm Tip ú chỳng ta nh ngha hai lp dn xut tờn l v sỏch Tp cú tờn, s ký phỏt hnh v cha nhiu bi ca cỏc tỏc gi khỏc Cỏc thnh phn d liu tng ng vi cỏc yu t ny c t vo nh ngha ca lp Tp cng cn cú mt phng thc na ú l t mua Cỏc thnh phn d liu xỏc nh cho sỏch s bao gm tờn ca (cỏc) tỏc gi, loi bỡa (cng hay mm) v s hiu ISBN ca nú Nh vy chỳng ta cú th thy, sỏch v cú chung cỏc c trng n phm, cú cỏc thuc tớnh riờng ca chỳng Hỡnh 1.1: Lp n phm v cỏc lp dn xut ca nú Vi tớnh k tha, chỳng ta khụng phi mt cụng xõy dng li t u cỏc lp mi, ch cn b sung cú c cỏc lp dn xut cỏc c trng cn thit Biờn son: Lờ Th M Hnh Giỏo trỡnh mụn Lp trỡnh hng i tng Trang 10 II.3 Tớnh a hỡnh (Polymorphism) ú l kh nng cho mt thụng ip cú th thay i cỏch thc hin ca nú theo lp c th ca i tng nhn thụng ip Khi mt lp dn xut c to ra, nú cú th thay i cỏch thc hin cỏc phng thc no ú m nú tha hng t lp c s ca nú Mt thụng ip c gi n mt i tng ca lp c s, s dựng phng thc ó nh ngha cho nú lp c s Nu mt lp dn xut nh ngha li mt phng thc tha hng t lp c s ca nú thỡ mt thụng ip cú cựng tờn vi phng thc ny, c gi ti mt i tng ca lp dn xut s gi phng thc ó nh ngha cho lp dn xut Nh vy a hỡnh l kh nng cho phộp gi cựng mt thụng ip n nhng i tng khỏc cú cựng chung mt c im, núi cỏch khỏc thụng ip c gi i khụng cn bit thc th nhn thuc lp no, ch bit rng hp cỏc thc th nhn cú chung mt tớnh cht no ú Chng hn, thụng ip v hỡnh c gi n c hai i tng hỡnh hp v hỡnh trũn Trong hai i tng ny u cú chung phng thc v hỡnh, nhiờn tu theo thi im m i tng nhn thụng ip, hỡnh tng ng s c v lờn Trong cỏc ngụn ng lp trỡnh OOP, tớnh a hỡnh th hin qua kh nng cho phộp mụ t nhng phng thc cú tờn ging cỏc lp khỏc c im ny giỳp ngi lp trỡnh khụng phi vit nhng cu trỳc iu khin rm r chng trỡnh, cỏc kh nng khỏc ca thụng ip ch thc s ũi hi chng trỡnh thc hin Vớ d 1.3: Xột li vớ d 1.2, chỳng ta thy rng c v v sỏch u phi cú kh nng ly Tuy nhiờn phng phỏp ly cho cú khỏc so vi phng phỏp ly cho sỏch, mc dự kt qu cui cựng ging Khi phi ly chớ, thỡ phi s dng phng phỏp ly riờng cho (da trờn mt bn tra cu) nhng ly sỏch thỡ li phi s dng phng phỏp ly riờng cho sỏch (da trờn h thng phiu lu tr) Tớnh a hỡnh cho phộp chỳng ta xỏc nh mt phng thc ly mt hay mt cun sỏch Khi ly mt nú s dựng phng thc ly dnh riờng cho chớ, cũn ly mt cun sỏch thỡ nú s dng phng thc ly tng ng vi sỏch Kt qu l ch cn mt tờn phng thc nht c dựng cho c hai cụng vic tin hnh trờn hai lp dn xut cú liờn quan, mc dự vic thc hin ca phng thc ú thay i tựy theo tng lp Tớnh a hỡnh da trờn s ni kt (Binding), ú l quỏ trỡnh gn mt phng thc vi mt hm thc s Khi cỏc phng thc kiu a hỡnh c s dng thỡ trỡnh biờn dch cha th xỏc nh hm no tng ng vi phng thc no s c gi Hm c th c gi s tu thuc vo vic phn t nhn thụng ip lỳc ú l thuc lp no, ú hm c gi ch xỏc nh c vo lỳc chng trỡnh chy iu ny gi l s kt ni mun (Late binding) hay kt ni lỳc chy (Runtime binding) vỡ nú xy chng trỡnh ang thc hin Hỡnh 1.2: Minh tớnh a hỡnh i vi lp n phm v cỏc lp dn xut ca nú Biờn son: Lờ Th M Hnh Giỏo trỡnh mụn Lp trỡnh hng i tng Trang 151 Hỡnh 8.13: Kt qu ca vớ d 8.11 IV.3 Cỏc hm thnh viờn khỏc ca istream Hm ignore(): istream& ignore(int nCount = 1, int delim = EOF); Trớch v loi b lờn n nCount ký t Vic trớch dng nu delim c bt gp hoc nu end-of-file bt gp Hm putback(): istream& putback(char ch); t mt ký t ngc li dũng nhp Hm peek(): int peek(); Hm tr v ký t k tip m khụng trớch nú t dũng IV.4 Nhp/xut kiu an ton C++ cung cp nhp/xut kiu an ton (type-safe) Cỏc toỏn t > c a nng húa nhn cỏc mc d liu ca kiu c th Nu d liu bt ng c x lý, cỏc c hiu li khỏc c thit lp m ngi dựng cú th kim tra xỏc nh nu mt thao tỏc nhp/xut thnh cụng hoc tht bi Phn sau chỳng ta s kho sỏt k hn V NHP/XUT KHễNG NH DNG VI READ(),GCOUNT() V WRITE() Nhp/xut khụng nh dng c thc hin vi cỏc hm thnh viờn istream::read() v ostream::write() Hm istream::read(): istream& read(unsigned char* puch, int nCount); istream& read(signed char* psch, int nCount); Trớch cỏc byte t dũng cho n gii hn nCount t n hoc cho n end- of-file t n Hm ny cú ớch cho dũng nhp nh phõn Hm ostream::write(): ostream& write(const unsigned char* puch, int nCount); ostream& write(const signed char* psch, int nCount); Chốn nCount byte vo t vựng m (c tr bi puch v psch) vo dũng Nu file c m ch text, cỏc ký t CR cú th c chốn vo Hm ny cú ớch cho dũng xut nh phõn Chng hn: char Buff[]="HAPPY BIRTHDAY"; Biờn son: Lờ Th M Hnh Giỏo trỡnh mụn Lp trỡnh hng i tng Trang 152 cout.write(Buff,10); Hm istream::gcount(): int gcount(); Hm tr v s ký t ó trớch bi hm nhp khụng nh dng cui cựng VI DềNG NHP/ XUT FILE thc thi x lý file C++, cỏc chng trỡnh phi include tin v Header gm nh ngha cho cỏc lp dũng ifstream cho nhp (c) t mt file, ofstream cho xut (ghi) ti mt file) v fstream cho nhp/xut (c/ghi) ti mt file Cỏc file c m bng cỏch to cỏc i tng ca cỏc lp dũng ny Cõy ph h ca cỏc lp ny hỡnh 8.2 Constructor ca lp ofstream: (1) ofstream(); (2) ofstream(const char* szName,int nMode=ios::out,int nProt=filebuf::openprot); (3) ofstream(int fd); (4) ofstream(filedesc fd, char* pch, int nLength); Trong ú: szName: Tờn file c m nMode: Mt s nguyờn cha cỏc bit mode nh ngha l kiu liy kờ ca ios Cú th kt hp bng toỏn t | Tham s ny cú th mt cỏc giỏ tr sau: Mode í ngha ios::app Hm di chuyn tr file ti end-of-file Khi cỏc byte mi c ghi lờn file, chỳng luụn luụn ni thờm vo cui, c v trớ c di chuyn vi hm ostream::seekp() ios::ate Hm di chuyn tr file ti end-of-file Khi byte mi u tiờn c ghi lờn file, chỳng luụn luụn ni thờm vo cui, nhng cỏc byte k tip c ghi, chỳng ghi vo v trớ hin hnh ios::in M file c.Vi dũng ifstream, vic m file ng nhiờn c thc hin ch ny ios::out M file c.Vi dũng ofstream, vic m file ng nhiờn c thc hin ch ny ios::trunc Xúa file hin cú trờn a v to file mi cựng tờn Cng cú hiu õy l cht ct file c, lm cho kớch thc ca nú bng 0, chun b ghi ni dung mi Mode ny c ỏp dng nu ios::out c ch nh v ios::app, ios::ate, v ios::in khụng c ch nh ios::nocreate Nu file khụng tn ti thỡ thao tỏc m tht bi ios::noreplace Nu file tn ti thỡ thao tỏc m tht bi ios::binary M file ch nh phõn (mc nh l ch bn) nProt: c t ch bo v file fd: Mó nhn din file Biờn son: Lờ Th M Hnh Giỏo trỡnh mụn Lp trỡnh hng i tng Trang 153 pch: Con tr tr ti vựng dnh riờng chiu di nLength Giỏ tr NULL (hoc nLength=0) dn n dũng khụng vựng m nLength: Chiu di tớnh theo byte ca vựng dnh riờng (0=khụng vựng m) Dng (1) xõy dng mt i tng ofstream m khụng m file Dng (2) xõy dng mt i tng ofstream v m file ó ch nh Dng (3) xõy dng mt i tng ofstream v gn (attach) vi mt file m Dng (4) xõy dng mt i tng ofstream m liờn kt vi i tng filebuf i tng filebuf c gn ti file m v vựng dnh riờng Constructor ca lp ifstream: (1) ifstream(); (2) ifstream(const char* szName,int nMode=ios::in,int nProt=filebuf::openprot); (3) ifstream(int fd); (4) ifstream(filedesc fd, char* pch, int nLength); Dng (1) xõy dng mt i tng ifstream m khụng m file Dng (2) xõy dng mt i tng ifstream v m file ó ch nh Dng (3) xõy dng mt i tng ifstream v gn (attach) vi mt file m Dng (4) xõy dng mt i tng ofstream m liờn kt vi i tng filebuf i tng filebuf c gn ti file m v vựng dnh riờng Constructor ca lp fstream: (1) fstream(); (2) fstream(const char* szName,int nMode,int nProt=filebuf::openprot); (3) fstream(int fd); (4) fstream(filedesc fd, char* pch, int nLength); Dng (1) xõy dng mt i tng fstream m khụng m file Dng (2) xõy dng mt i tng fstream v m file ó ch nh Dng (3) xõy dng mt i tng fstream v gn (attach) vi mt file m Dng (4) xõy dng mt i tng ofstream m liờn kt vi i tng filebuf i tng filebuf c gn ti file m v vựng dnh riờng Nu chỳng ta s dng constructor dng (1) thỡ chỳng ta dựng hm open() m file: Hm ofstream::open(): void open(const char* szName,int nMode=ios::out,int nProt=filebuf::openprot); Hm ifstream::open(): void open(const char* szName,int nMode=ios::in,int nProt=filebuf::openprot); Hm fstream::open(): void open(const char* szName,int nMode,int nProt=filebuf::openprot); úng file chỳng ta dựng hm close(), hm ny cỏc lp ifstream, ofstream, v fstream u cú dng: void close(); Biờn son: Lờ Th M Hnh Giỏo trỡnh mụn Lp trỡnh hng i tng Trang 154 Cỏc hm liờn quan n tr file: - Lp istream: Hm seekg(): (seek get) (1) istream& seekg(streampos pos); (2) istream& seekg(streamoff off,ios::seek_dir dir); Trong ú: + pos: V trớ mi streampos l tng ng typedef vi long + off: Giỏ tr offset mi l tng ng typedef vi long + dir: hng seek Cú mt cỏc tr sau: Seek t bt u ca dũng ios::begin ios::cur Seek t ứv trớ hin hnh ca dũng ios::end Seek t cui ca dũng Hm tellg(): (tell get) streampos tellg(); Hm tr v v trớ hin hnh ca tr file - Lp ostream: Hm seekp(): (seek put) (1) ostream& seekp(streampos pos); (2) ostream& seekp(streamoff off,ios::seek_dir dir); Hm tellp(): (tell put) streampos tellp(); Hm tr v v trớ hin hnh ca tr file VI.1 Nhp/xut file bn Nu dũng c gn vi file bn, vic nhp/xut file c thc hin mt cỏch n gin bi cỏc toỏn t >> v

Ngày đăng: 06/11/2016, 19:10

Từ khóa liên quan

Tài liệu cùng người dùng

  • Đang cập nhật ...

Tài liệu liên quan