資源描述:
《從面向?qū)ο蟮矫嫦颉酚蓵?huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在教育資源-天天文庫(kù)。
1、從面向?qū)ο蟮矫嫦駽OM主講葉長(zhǎng)青華東師大教育信息技術(shù)學(xué)系2006-3-1麗娃河畔ycq@deit.ecnu.edu.cn本課的內(nèi)容及目標(biāo)內(nèi)容:面向?qū)ο蟮囊话愀拍顝拿嫦驅(qū)ο蟮矫嫦駽OMCOM組件技術(shù)目標(biāo):了解程序設(shè)計(jì)技術(shù)的發(fā)展動(dòng)向提升程序設(shè)計(jì)能力開(kāi)闊專(zhuān)業(yè)視野課程參考書(shū)目《COM原理與應(yīng)用》《COM本質(zhì)論》《COM技術(shù)內(nèi)幕》《AdvancedCORBAProgrammingwithC++》面向?qū)ο蟮幕靖拍顬楣?jié)省每一個(gè)字節(jié)而努力的階段例:用PASCAL語(yǔ)句寫(xiě)成的程序段A[I]:=A[I]+A[T];A[T]:=A[I]–A[T];A[I]:=A[I]–A[T];目的是什么?我們現(xiàn)在習(xí)
2、慣的寫(xiě)法是什么?不關(guān)心“空間的浪費(fèi)”,更關(guān)心程序的清晰框架結(jié)構(gòu)階段例:用FORTRAN語(yǔ)言編寫(xiě)的程序段DO5I=1,NDO5J=1,N5V(I,J)=(I/J)*(J/I)程序設(shè)計(jì)的發(fā)展歷程IF(X.LT.Y)GOTO30IF(Y.LT.Z)GOTO50SMALL=ZGOTO7030IF(X.LT.Z)GOTO60SMALL=ZGOTO7050SMALL=YGOTO7060SMALL=X70CONTINUESMALL=XIF(Y.LT.SMALL)SMALL=YIF(Z.LT.SMALL)SMALL=ZX,Y,Z注重“重用性”的問(wèn)題。面向?qū)ο笞⒅亍皹?biāo)準(zhǔn)化元件”的階段。面向組件?軟
3、件企業(yè)分工細(xì)化階段類(lèi)是具有相同屬性特征事物的集合。計(jì)算機(jī)專(zhuān)業(yè)語(yǔ)境下,類(lèi)是封裝了狀態(tài)(變量)和操作(對(duì)變量處理的過(guò)程和函數(shù))的抽象數(shù)據(jù)類(lèi)型。(對(duì)應(yīng)于標(biāo)準(zhǔn)數(shù)據(jù)類(lèi)型)對(duì)象是實(shí)例,它反映了具體的事物。鳥(niǎo),是類(lèi)的概念。麻雀是鳥(niǎo)類(lèi)的一個(gè)實(shí)例。一只麻雀?對(duì)象由類(lèi)來(lái)定義一個(gè)對(duì)象可以與多個(gè)具有繼承關(guān)系的類(lèi)相聯(lián)系,即:A是一個(gè)類(lèi),B、C、D是在A的基礎(chǔ)上擴(kuò)展后的新類(lèi),E,F(xiàn),G則是在C類(lèi)的基礎(chǔ)上發(fā)展而來(lái),而對(duì)象x是F類(lèi)的一個(gè)實(shí)例。有關(guān)術(shù)語(yǔ)封裝、繼承與多態(tài)封裝、繼承與多態(tài)面向?qū)ο蟾拍畹娜齻€(gè)關(guān)鍵詞封裝是實(shí)現(xiàn)面向?qū)ο蟪绦蛟O(shè)計(jì)的第一步,封裝就是將數(shù)據(jù)或函數(shù)等集合在一個(gè)個(gè)的單元中(我們稱(chēng)之為類(lèi))。C++對(duì)類(lèi)和
4、對(duì)象的描述:Classstudent{Public:成員函數(shù)1;成員函數(shù)2;……Private:成員變量1;成員變量2;……}Intx,y;Studentz;類(lèi)名例一:C++中類(lèi)的定義與實(shí)現(xiàn)說(shuō)明:包含成員變量,成員函數(shù),類(lèi)的定義,對(duì)象的定義。例二、例三:成員函數(shù)在類(lèi)內(nèi)、類(lèi)外實(shí)現(xiàn)的情形例四:成員函數(shù)是私有函數(shù)時(shí)的存取特性與意義封裝的意義在于保護(hù)或者防止代碼(數(shù)據(jù))被我們無(wú)意中破壞。在面向?qū)ο蟪绦蛟O(shè)計(jì)中數(shù)據(jù)被看作是一個(gè)中心的元素并且和使用它的函數(shù)結(jié)合的很密切,從而保護(hù)它不被其它的函數(shù)意外的修改。從程序語(yǔ)言角度來(lái)看,在一個(gè)對(duì)象中代碼和(或)數(shù)據(jù)可以是這個(gè)對(duì)象私有的,不能被對(duì)象外的部分直
5、接訪問(wèn)。因而對(duì)象提供了一種高級(jí)保護(hù)以防止程序被無(wú)關(guān)部分錯(cuò)誤修改或錯(cuò)誤地使用了對(duì)象的私有部分。當(dāng)從對(duì)象外部試圖直接對(duì)受保護(hù)的內(nèi)部數(shù)據(jù)進(jìn)行修改時(shí),將被程序拒絕,只有通過(guò)對(duì)象所提供的對(duì)外服務(wù)函數(shù)才能夠?qū)ζ鋬?nèi)部數(shù)據(jù)進(jìn)行必要的加工,從而保證了數(shù)據(jù)加工的合法性。從這一意義上講,把這種代碼和數(shù)據(jù)的聯(lián)系稱(chēng)為“封裝”。換句話說(shuō),封裝是將對(duì)象封閉保護(hù)起來(lái),是將內(nèi)部細(xì)節(jié)隱蔽起來(lái)的能力。實(shí)現(xiàn)的細(xì)節(jié)是“可變的部分”。如果“塊”是單個(gè)類(lèi),那么可變的部分通常用private:或protected:關(guān)鍵字來(lái)封裝?!胺€(wěn)定的部分”是接口。好的接口提供了一個(gè)以用戶(hù)的詞匯簡(jiǎn)化了的視圖,并且被從外到里的設(shè)計(jì)。(此處的“用
6、戶(hù)”是指其它開(kāi)發(fā)者,而不是購(gòu)買(mǎi)完整應(yīng)用的最終用戶(hù))。設(shè)計(jì)一個(gè)清晰的接口并且將實(shí)現(xiàn)和接口分離,只不過(guò)是允許用戶(hù)使用接口并強(qiáng)迫用戶(hù)使用接口。如何才能防止其它程序員查看我的類(lèi)的私有部分而破壞封裝?討論只要其它程序員寫(xiě)的代碼不依賴(lài)于他們的所見(jiàn),那么即使它們看了你的類(lèi)的private:和/或proteced:部分,也不會(huì)破壞封裝。換句話說(shuō),封裝不會(huì)阻止人認(rèn)識(shí)類(lèi)的內(nèi)部。封裝只是防止他們寫(xiě)出依賴(lài)類(lèi)內(nèi)部實(shí)現(xiàn)的代碼。倘若他們寫(xiě)的代碼依賴(lài)于接口而不是實(shí)現(xiàn),就不會(huì)增加維護(hù)成本。不必這么做——封裝是對(duì)于代碼而言的,而不是對(duì)人。封裝是一種安全裝置嗎?封裝要防止的是錯(cuò)誤,而不是間諜封裝!=安全。錢(qián)掉了!成員
7、函數(shù)、成員變量中的另類(lèi)例五:構(gòu)造函數(shù)例六:析構(gòu)函數(shù)例七:何時(shí)使用構(gòu)造函數(shù)例八:友元函數(shù)例九:靜態(tài)變量2005-9-30繼承的概念及重要性inheritance:是軟件重用的一種形式,將相關(guān)的類(lèi)組織起來(lái),并分亨其間的共通數(shù)據(jù)和操作行為。最具吸引力的特點(diǎn):新類(lèi)可以從現(xiàn)有的類(lèi)庫(kù)中繼承。提倡建立與現(xiàn)有的類(lèi)有許多共性的新類(lèi),添加基類(lèi)的所沒(méi)有的特點(diǎn)以及取代和改進(jìn)從基類(lèi)繼承來(lái)的特點(diǎn)來(lái)實(shí)現(xiàn)軟件的重用單重繼承形成樹(shù)狀層次結(jié)構(gòu),由基類(lèi)和派生類(lèi)構(gòu)成了一種層次關(guān)系,繼承的層次在系統(tǒng)的限制范圍內(nèi)是任意的。