資源描述:
《面向?qū)ο蟮母拍钤斀狻酚蓵?huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在工程資料-天天文庫(kù)。
1、一.OOP簡(jiǎn)介OOP達(dá)到了軟件工程的三個(gè)主要目標(biāo):重用性、靈活性和擴(kuò)展性。為了實(shí)現(xiàn)整體運(yùn)算,每個(gè)對(duì)象都能夠接收信息、處理數(shù)據(jù)和向其它對(duì)象發(fā)送信息。OOP主要有以下的概念和組件:組件一數(shù)據(jù)和功能一起在運(yùn)行著的計(jì)算機(jī)程序小形成的單元,組件在OOP計(jì)算機(jī)程序屮是模塊和結(jié)構(gòu)化的基礎(chǔ)。抽象性一程序有能力忽略止在處理中信息的某些方面,即對(duì)信息主要方面關(guān)注的能力。封裝一也叫做信息封裝:確保組件不會(huì)以不可預(yù)期的方式改變其它組件的內(nèi)部狀態(tài);只有在那些提供了內(nèi)部狀態(tài)改變方法的組件屮,才可以訪問(wèn)其內(nèi)部狀態(tài)。每類組件都提供了一個(gè)與其它組件聯(lián)系的接口,并規(guī)定了其它組件進(jìn)
2、行調(diào)用的方法。多態(tài)性一組件的引用和類集會(huì)涉及到其它許多不同類型的組件,而且引用組件所產(chǎn)生的結(jié)果得依據(jù)實(shí)際調(diào)用的類型。繼承性一允許在現(xiàn)存的組件基礎(chǔ)上創(chuàng)建子類組件,這統(tǒng)一并增強(qiáng)了多態(tài)性和封裝性。典型地來(lái)說(shuō)就是用類來(lái)對(duì)組件進(jìn)行分組,而且還可以定義新類為現(xiàn)存的類的擴(kuò)展,這樣就可以將類組織成樹(shù)形或網(wǎng)狀結(jié)構(gòu),這體現(xiàn)了動(dòng)作的通用性。OOP的許多原始思想都來(lái)之于Simula語(yǔ)言,并在Smalltalk語(yǔ)言的完善和標(biāo)準(zhǔn)化過(guò)程中得到更多的擴(kuò)展和對(duì)以前的思想的重新注解。叮以說(shuō)00思想和OOPL幾乎是同步發(fā)展相互促進(jìn)的。與函數(shù)式程序設(shè)計(jì)(functional-prog
3、ramming)和邏輯式程序設(shè)計(jì)(logic-programming)所代表的接近于機(jī)器的實(shí)際計(jì)算模型所不同的是,OOP兒乎沒(méi)有引入精確的數(shù)學(xué)描敘,而是傾向于建立一個(gè)對(duì)象模型,它能夠近似的反映應(yīng)用領(lǐng)域內(nèi)的實(shí)體之間的關(guān)系,其本質(zhì)是更接近于-?種人類認(rèn)知事物所采用的哲學(xué)觀的計(jì)算模型。由此,導(dǎo)致了一個(gè)自然的話題,那就是OOP到底是什么?[D&T1988][B.S1991]?。在OOP中,對(duì)象作為計(jì)算主體,擁有自己的名稱,狀態(tài)以及接受外界消息的接口。在對(duì)象模型中,產(chǎn)生新對(duì)象,in對(duì)象銷毀,發(fā)送消息,響應(yīng)消息就構(gòu)成oop計(jì)算模型的根木。對(duì)象的產(chǎn)生有兩種基
4、本方式。一種是以原型(prototype)對(duì)象為基礎(chǔ)產(chǎn)生新的對(duì)象。一種是以類(class)為基礎(chǔ)產(chǎn)生新對(duì)象。原型的概念己經(jīng)在認(rèn)知心理學(xué)小被用來(lái)解釋概念學(xué)習(xí)的遞增特性,原型模型本身就是企圖通過(guò)提供-?個(gè)有代表性的對(duì)象為基礎(chǔ)來(lái)產(chǎn)生各種新的對(duì)象,并由此繼續(xù)產(chǎn)生更符合實(shí)際應(yīng)用的對(duì)象。而原型-委托也是OOP中的對(duì)象抽象,代碼共享機(jī)制中的一種。一個(gè)類提供了一個(gè)或者多個(gè)對(duì)象的通用性描敘。從形式化的觀點(diǎn)看,類與類型有關(guān),因此一個(gè)類相當(dāng)于是從該類中產(chǎn)生的實(shí)例的集合。而這樣的觀點(diǎn)也會(huì)帶來(lái)一些矛盾,比較典型的就是在繼承體系下,子集(子類)對(duì)彖和父集(父類)對(duì)象Z間的
5、行為相融性可能很難達(dá)到,這也就是OOP屮常被引用的一-子類型(subtype)不等于子類(subclass)[Budd2002]。而在一種所有皆對(duì)象的世界觀背景下,在類模型基礎(chǔ)上還誕生出了一種擁有元類(metaclass)的新對(duì)象模型。即類本身也是一種其他類的對(duì)象。以上三種根本不同的觀點(diǎn)各自定義了三種基于類(class-based),基于原型(prototype-based)和基于元類(mctaclass-based)的對(duì)象模型。而這三種對(duì)象模型也就導(dǎo)致了許多不同的程序設(shè)計(jì)語(yǔ)言(如果我們暫時(shí)把靜態(tài)與動(dòng)態(tài)的井別放在一邊)。是的,我們經(jīng)常接觸的C+
6、+,Java都是使用基于類的對(duì)象模型,但除此Z外述冇很多我們所沒(méi)冇接觸的OOPL采用了完全不一樣的對(duì)彖模型,他們是在用另外一種觀點(diǎn)詮釋OOP的內(nèi)涵。二OOP特征1.1面向?qū)ο蟪绦蛟O(shè)計(jì)的特征:1)封裝2)繼承3)多態(tài)1.2類與數(shù)據(jù)封裝].2.1什么是類?簡(jiǎn)單的說(shuō),類就是一種用戶定義的數(shù)據(jù)類型,跟結(jié)構(gòu)類似;并且,類具有自己的成員變量和成員函數(shù)(方法),通過(guò)它們可以對(duì)類自身進(jìn)行操作。如:汽車可以看作是發(fā)動(dòng)機(jī)、車輪、座椅等諸如此類的集合。也可以從功能的角度來(lái)研究,譬如,能移動(dòng),加速,減速,剎車等。例如classCMvClassl{protected:C
7、MyClassl();public:virtual、CMyClassl();}1.2.2封裝(encapsulation)定義:指能夠把一個(gè)實(shí)體的信息、功能、響應(yīng)都裝入一個(gè)單獨(dú)的對(duì)象中的特性。封裝的優(yōu)點(diǎn)如下:1)封裝允許類的客戶不必關(guān)心類的工作機(jī)理就可以使用它。就彖駕駛員不必了解發(fā)動(dòng)機(jī)的工作原理就可以駕駛汽車一樣,類的客戶在使用一個(gè)類吋也不必了解它是如何工作的,而只需了解它的功能即可。2)所有對(duì)數(shù)據(jù)的訪問(wèn)和操作都必須通過(guò)特定的方法,否則便無(wú)法使用,從而達(dá)到數(shù)據(jù)隱藏的目的。1.2.3對(duì)象對(duì)象就是類的實(shí)例。類與對(duì)象的關(guān)系就如類型和變量的關(guān)系,所有對(duì)
8、類的操作都必須通過(guò)對(duì)象來(lái)實(shí)現(xiàn)。當(dāng)一個(gè)類定義了多個(gè)對(duì)象時(shí),每個(gè)對(duì)象擁冇各自的成員數(shù)據(jù)。1.2.4類的三種成員類型1)私有成員(private):缺省情況