




下載本文檔
版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、面向?qū)ο蟪绦蛟O(shè)計(jì)的基本概念面向?qū)ο蟪绦蛟O(shè)計(jì)的基本概念2010-04-1420:01前言:面向?qū)ο蟪绦蛟O(shè)計(jì)(Object-OrientedProgramming,以下簡(jiǎn)稱(chēng)OOP)!種起源于六十年代的Simula語(yǔ)言,發(fā)展已經(jīng)將近三十年的程序設(shè)計(jì)思想。其自身理論已經(jīng)十分完善,并被多種面向?qū)ο蟪绦蛟O(shè)計(jì)語(yǔ)言(Object-OrientedProgrammingLanguage,以下簡(jiǎn)稱(chēng)OOPL決現(xiàn)。如果把Unix系統(tǒng)看成是國(guó)外在系統(tǒng)軟件方面的文化根基,那么Smalltalk語(yǔ)言無(wú)疑在OOPL域和Unix持有相同地位。由于很多原因,國(guó)內(nèi)大部分程序設(shè)計(jì)人員并沒(méi)有很深的OO似及OOPL!論,很多人從一開(kāi)始學(xué)
2、習(xí)到工作很多年都只是接觸到c/c+,java,vb,delphi等靜態(tài)類(lèi)型語(yǔ)言,而對(duì)純粹的OO刖想以及作為OOPL艮基的Smalltalk以及動(dòng)態(tài)類(lèi)型語(yǔ)言知之甚少,不知道其實(shí)世界上還有一些可以針對(duì)變量不綁定類(lèi)型的編程語(yǔ)言。而這些對(duì)比卻是深刻理解OO理論的重要部分,而國(guó)內(nèi)這方面的資料也為數(shù)不多。故把自己的一些OC習(xí)心得寫(xiě)下來(lái)做為一個(gè)系歹0文章(一共三篇,第一篇描敘OOP勺一些基本但容易被誤解的理論,第二篇主要說(shuō)明各種OOPL典化和發(fā)展以及對(duì)于OOP理論的支持,第三篇主要是說(shuō)模式和組件在OO仲的地位以及展望OOP勺未來(lái)),由于文章描敘的只是自己對(duì)于OOP/OOPL理解,錯(cuò)誤以及淺薄之處在所難免,只
3、是希望對(duì)大家能起到拋磚引玉的作用。淺析OO的基石從抽象說(shuō)起B(yǎng)ooch曾經(jīng)在他自己的。頃域內(nèi)的名著B(niǎo)ooch94中開(kāi)篇就論敘到了復(fù)雜性是軟件開(kāi)發(fā)過(guò)程中所故有的特質(zhì)。而人們處理復(fù)雜性的最根本武器就是抽象。廣義的抽象代表的是對(duì)復(fù)雜系統(tǒng)的簡(jiǎn)化描敘或規(guī)格說(shuō)明,為了突出系統(tǒng)的本質(zhì)屆性而故意忽略其中的非實(shí)質(zhì)性細(xì)節(jié)?!币粋€(gè)概念只有當(dāng)能被最終用來(lái)實(shí)現(xiàn)的機(jī)制獨(dú)立的描敘,理解,分析時(shí),才將這個(gè)概念限定為抽象的概念”。而B(niǎo)ooch也給出了他心目中關(guān)于OO域內(nèi)的狹義抽象定義:抽象表示一個(gè)對(duì)象與其他所有對(duì)象相區(qū)別的基本特征,因此提供了同觀察者角度有關(guān)的活晰定義的概念界限?!币虼?,根據(jù)不同觀察角度,我們可以針對(duì)OOP合出不
4、同級(jí)別的抽象層次。通常,面對(duì)一個(gè)典型的面向?qū)ο蟪绦?,Budd2002將其分成五個(gè)抽象層,分別覆蓋了OO仲的分析,設(shè)計(jì)與編程的各個(gè)階段:1, 最高級(jí)別的抽象層上,程序被看成是由很多相互作用并且遵守契約的對(duì)象所組成的對(duì)象集合。對(duì)象之間相互合作完成程序的計(jì)算任務(wù)。這個(gè)抽象級(jí)別上的典型代表就是設(shè)計(jì)模式思想(DesignPattern)。2, 第二個(gè)抽象層就是一個(gè)對(duì)象集單元,也就是一群定義之間有相互聯(lián)系的對(duì)象,在程序設(shè)計(jì)語(yǔ)!級(jí)別來(lái)看Java中是packages,C+中是namespace。這個(gè)抽象級(jí)別上的典型代表就是模塊化思想(Modularity)。3, 第三個(gè)抽象層所代表的是典型的OOP莫式:客戶(hù)/
5、服務(wù)器模型,這主要是用來(lái)抽象兩個(gè)對(duì)象之間的互交過(guò)程。在這個(gè)抽象級(jí)別上的典型代表就是對(duì)象之間的消息機(jī)制(MessagePassing)。4, 第四個(gè)抽象層就是針對(duì)一組相似對(duì)象定義一個(gè)類(lèi)作為生成對(duì)象的棋板,類(lèi)定義了對(duì)象的對(duì)外使用接口以及繼承對(duì)象所需的內(nèi)部繼承接口,而這個(gè)抽象層次的典型代表就是接口編程(InterfaceProgramming)。5, 第五個(gè)抽象層就是實(shí)現(xiàn)一個(gè)類(lèi)所需要的方法和成員變量的實(shí)現(xiàn)(Implementation)。在這里OOP終和POP(Procedure-OrientedProgramming)相融合。當(dāng)然,我們可以根據(jù)各自的觀察角度劃分成更細(xì)的抽象層次比如說(shuō)針對(duì)第五層抽象
6、用到的POPS論,我們還可以進(jìn)一步的劃分出控制抽象(三種完全描敘圖靈機(jī)計(jì)算模型所需要的控制結(jié)構(gòu))以及數(shù)據(jù)抽象(ADTs)等等,并由此繼續(xù)下去(如果你的想象力足夠豐富的話(huà):)。什么是OOP?OOP勺許多原始思想都來(lái)之于Simula語(yǔ)言,并在Smalltalk語(yǔ)言的完善和標(biāo)準(zhǔn)化過(guò)程中得到更多的擴(kuò)展和對(duì)以前的思想的重新注解??梢哉f(shuō)OC想和OOP乎是同步發(fā)展相互促進(jìn)的。與函數(shù)式程序設(shè)計(jì)(functionalprogramming)和邏輯式程序設(shè)計(jì)(logic-programming)所代表的接近于機(jī)器的實(shí)際計(jì)算模型所不同的是,OOP!乎沒(méi)有引入精確的數(shù)學(xué)描敘,而是傾向于建立一個(gè)對(duì)象模型,它能夠近似的反
7、映應(yīng)用領(lǐng)域內(nèi)的實(shí)體之間的關(guān)系,其本質(zhì)是更接近于一種人類(lèi)認(rèn)知事物所采用的哲學(xué)觀的計(jì)算模型。由此,導(dǎo)致了一個(gè)自然的話(huà)題,那就是OO倒底是什么?D&T1988B.S1991.。在OO仲,對(duì)象作為計(jì)算主體,擁有自己的名稱(chēng),狀態(tài)以及接受外界消息的接口。在對(duì)象模型中,產(chǎn)生新對(duì)象,舊對(duì)象銷(xiāo)毀,發(fā)送消息,響應(yīng)消息就構(gòu)成OOP+算模型的根本。對(duì)象的產(chǎn)生有兩種基本方式。一種是以原型(prototype)對(duì)象為基礎(chǔ)產(chǎn)生新的對(duì)象。一種是以類(lèi)(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)生更符
8、合實(shí)際應(yīng)用的對(duì)象。而原型-委托也是OO仲的對(duì)象抽象,代碼共享機(jī)制中的一種。一個(gè)類(lèi)提供了一個(gè)或者多個(gè)對(duì)象的通用性描敘。從形式化的觀點(diǎn)看,類(lèi)與類(lèi)型有關(guān),因此一個(gè)類(lèi)相當(dāng)于是從該類(lèi)中產(chǎn)生的實(shí)例的集合。而這樣的觀點(diǎn)也會(huì)帶來(lái)一些矛盾,比較典型的就是在繼承體系下,子集(子類(lèi))對(duì)象和父集(父類(lèi))對(duì)象之間的行為相融性可能很難達(dá)到,這也就是OOW常被引用的-子類(lèi)型(subtype)不等于子類(lèi)(subclass)Budd2002。而在一種所有皆對(duì)象的世界觀背景下,在類(lèi)模型基礎(chǔ)上還誕生出了一種擁有元類(lèi)(metaclass)的新對(duì)象模型。即類(lèi)本身也是一種其他類(lèi)的對(duì)象。以上三種根本不同的觀點(diǎn)各自定義了三種基于類(lèi)(clas
9、s-based),基于原型(prototype-based)和基于元類(lèi)(metaclass-based)的對(duì)象模型。而這三種對(duì)象模型也就導(dǎo)致了許多不同的程序設(shè)計(jì)語(yǔ)言(如果我們暫時(shí)把靜態(tài)與動(dòng)態(tài)的差別放在一邊)。是的,我們經(jīng)常接觸的C+,Java都是使用基于類(lèi)的對(duì)象模型,但除此之外還有很多我們所沒(méi)有接觸的OOPIX用了完全不一樣的對(duì)象模型,他們是在用另外一種觀點(diǎn)訟釋OOP勺內(nèi)涵。什么是類(lèi)型(type)?類(lèi)型以及類(lèi)型系統(tǒng)的起源以及研究與發(fā)展是獨(dú)立于OOP勺。早在五十年代的FORTRAN言編譯器實(shí)現(xiàn)中,就已經(jīng)采用類(lèi)型系統(tǒng)作為類(lèi)型檢查的一種手段。廣義的類(lèi)型一般被定義為一種約束,也就是一種邏輯公式。而在對(duì)
10、類(lèi)型的研究過(guò)程中產(chǎn)生多種方法,比如C&W1985等。而代數(shù)方法(algebraicapproach)是一種非常好的建立類(lèi)型的形式化規(guī)范的方法。代數(shù)中的一個(gè)類(lèi)型對(duì)應(yīng)于一系列元素,在它們之上定義代數(shù)操作。同時(shí)在此基礎(chǔ)上二階入演算已經(jīng)被用于繼承和棋板所支持的模型。在上面兩種方法中,類(lèi)型被認(rèn)為是一系列滿(mǎn)足確定約束條件的元素,更抽象的方式可以把一個(gè)類(lèi)型當(dāng)作規(guī)定一個(gè)約束條件,如果我們規(guī)定的約束條件越好,相對(duì)應(yīng)的被定義元素的集合就越精密,所以邏輯公式(logicalformulas)就成為描敘類(lèi)型特征的最合適工具。在這里,我們不想深入的探究對(duì)于類(lèi)型理論的各種不同的數(shù)學(xué)模型,我們需要明白的是類(lèi)型(type)以
11、及類(lèi)型理論這個(gè)在編程語(yǔ)言中經(jīng)常應(yīng)用到的概念的內(nèi)涵是極其豐富的,而其自身理論的發(fā)展并非局限于OO比中,但當(dāng)兩者相結(jié)合的時(shí)候就對(duì)我們的程序觀產(chǎn)生了巨大的影響。類(lèi)(class),類(lèi)型(type),接口(interface)這三個(gè)概念是在OO叫出現(xiàn)頻率最多,也最容易混淆的。而對(duì)于這三個(gè)概念的澄活也是文章寫(xiě)作的初衷。讓我們先看看大師們對(duì)于這三個(gè)概念的描敘-ThefundamentalunitofprogramminginJavaprogramminglanguageistheclass,butthefundamentalunitoftheobject-orienteddesignisthetype.wh
12、ileclassesdefinetypes,itisveryusefulandpowerfultobeabletodefineatypewithoutdefiningaclass.Interfacedefinetypesinanabstractformasacollectionofmethodsorothertypesthatformthecontractforthetype.”Jams2000。InC+,AclassisauserdefinitetypeB.S1998。Atypeisanameusedtodenoteaparticularinterface-Anobjectmayhavema
13、nytypes,andwidelydifferentobjectscanshareatype.Partofanobjectsinterfacemaybecharacterizedbyonetype,andotherpartsbyothertypes.Twoobjectsofthesametypeneedonlysharepartsoftheirinterface.Interfacecancontainotherinterfaceassubset.Wesaythatatypeisasubtypeofanotherifitsinterfacecontaintheinterfaceofitssupe
14、rtype.OftenwespeakofasubtypeinheritingtheinterfaceofitssupertypeGamma1995在其中,一共出現(xiàn)了四個(gè)概念:類(lèi)(class),類(lèi)型(type),接口(interface)以及契約(contract)。這里我們說(shuō)到的類(lèi)型和上面提到的類(lèi)型有所不同,是狹義的OO叫的類(lèi)型。為了理解這幾個(gè)概念,我先劃分出三個(gè)概念域:一個(gè)是針對(duì)現(xiàn)實(shí)世界的,一個(gè)是針對(duì)特定程序設(shè)計(jì)范型的(在這里就是OC設(shè)計(jì)范型),最后一個(gè)是針對(duì)編譯器實(shí)現(xiàn)的。也就是說(shuō),在現(xiàn)實(shí)世界中的概念必須有一種手段映射到。砒型中去,而OO范型中的概念也應(yīng)該在編譯器實(shí)現(xiàn)中有相同的概念對(duì)應(yīng)。由此
15、,我們可以這樣說(shuō),類(lèi)是做為現(xiàn)實(shí)世界中的概念,而傳統(tǒng)的OOPLTK會(huì)提供class關(guān)鍵字來(lái)表示對(duì)現(xiàn)實(shí)世界模擬的支持。而接口,是作為OOS序設(shè)計(jì)范型中與類(lèi)對(duì)應(yīng)的一個(gè)概念。在OO設(shè)計(jì)中,我們所要做的就是針對(duì)接口進(jìn)行設(shè)計(jì)和編程,而接口的實(shí)質(zhì)含義就是對(duì)象之間的一種契約。而類(lèi)型就是編譯器實(shí)現(xiàn)中針對(duì)類(lèi)和接口所定義的對(duì)應(yīng)概念??梢赃@樣說(shuō),類(lèi)是現(xiàn)實(shí)世界中存在的客觀概念,是唯物的。接口是設(shè)計(jì)人員定義出來(lái)的,存在于設(shè)計(jì)人員心中的概念,是唯心的。而類(lèi)型是類(lèi)和接口這兩種概念的編譯器實(shí)現(xiàn)的映射概念,也是唯物的。類(lèi)型主要是用來(lái)指導(dǎo)編譯器的類(lèi)型檢查的謂詞,類(lèi)是創(chuàng)建現(xiàn)實(shí)對(duì)象的棋板,接口是OO設(shè)計(jì)中的關(guān)鍵概念。這三個(gè)概念相互區(qū)別
16、(分別位于不同的概念域),乂相互聯(lián)系(都是代表相同的概念的不同概念域的映射)。有了上面的理解,我們看看下面最常見(jiàn)的Java語(yǔ)句:peoplea=newman();這代表了什么狒序員向編譯器聲明了一個(gè)people類(lèi)型(type)的對(duì)象變量a,而對(duì)象變量a本身卻指向了一個(gè)man類(lèi)(class)的實(shí)體(而在編譯器中理解是對(duì)象變量a指向了一個(gè)類(lèi)型為man的實(shí)體)。再讓我們回到Jams2000,其中句子的根本含義我們可以概括如下:聲明一個(gè)類(lèi)或者一個(gè)接口都同時(shí)向編譯器注冊(cè)了一個(gè)新的類(lèi)型,而此類(lèi)或者接口以及類(lèi)型都是共享同樣的一個(gè)名字。也就是說(shuō)。編譯器所能理解的全部都是類(lèi)型,而程序員的工作是把現(xiàn)實(shí)中的類(lèi)概念轉(zhuǎn)
17、化為設(shè)計(jì)中的接口概念,而編譯器對(duì)應(yīng)于上兩種概念都有直接的支持,那就是一個(gè)類(lèi)聲明或者接口聲明在編譯器的理解來(lái)看就是一個(gè)類(lèi)型聲明。但是反過(guò)來(lái)卻不一定成立。一個(gè)類(lèi)可以有多個(gè)接口(一個(gè)類(lèi)完全有可能實(shí)現(xiàn)了設(shè)計(jì)人員的多個(gè)契約條件),同時(shí)也就可能有多個(gè)類(lèi)型(因?yàn)轭?lèi)型不過(guò)是接口這個(gè)設(shè)計(jì)域內(nèi)的概念在編譯器中的實(shí)現(xiàn))。多態(tài),替換原則,對(duì)象切割多態(tài)作為OO中的核心機(jī)制之一擁有著豐富的內(nèi)涵。顧名思義,多態(tài)就是一種名稱(chēng)多種形態(tài)的意思。其主要有三種形式:函數(shù)多態(tài),對(duì)象變量多態(tài),泛型多態(tài)。函數(shù)多態(tài)主要包括函數(shù)重載(overload)和改寫(xiě)(overriding)。泛型多態(tài)(genericity)主要是提供了一種創(chuàng)建通用工具
18、的方法,可以在特定的場(chǎng)合將其特化。在這里,我們重點(diǎn)要考量的是對(duì)象變量多態(tài)。在理解對(duì)象變量多態(tài)之前,我們首先了解一下0誠(chéng)心機(jī)制之一的替換原則。靜態(tài)類(lèi)型的OOPL勺一個(gè)特征就是一個(gè)變量所包含的值(value)的類(lèi)型可能并不等于這個(gè)變量所聲明的類(lèi)型,在傳統(tǒng)的編程語(yǔ)言中并不具備這樣的特征,因?yàn)槲覀儾豢赡馨崖暶鳛檎偷淖兞抠x上字符申的變量值。而替換原則發(fā)生作用的情況就隱含的描敘了兩種不同類(lèi)型所具有的關(guān)聯(lián)-類(lèi)型繼承。BarbaraLiskov曾經(jīng)這樣描敘替換原則以及起作用的類(lèi)型之間的關(guān)聯(lián):對(duì)于類(lèi)型為S的每個(gè)對(duì)象s,存在一個(gè)類(lèi)型為T(mén)的對(duì)象t,對(duì)于根據(jù)類(lèi)型T所定義的所有程序P,如果用對(duì)象s替換對(duì)象t,程序P的
19、行為保持不變,那么類(lèi)型S就是類(lèi)型T的子類(lèi)型Liskov1988在理解了多態(tài)以及替換原則后,我們可以繼續(xù)深入理解繼承與替換原則相結(jié)合所帶來(lái)的新的觀點(diǎn)??梢哉f(shuō)繼承與替換原則的引入影響了幾乎所有的OOPL包括類(lèi)型系統(tǒng),值語(yǔ)義/引用語(yǔ)義,對(duì)象內(nèi)存空間分配等等。下面,我將試圖逐步的撥開(kāi)其中的各種因果。首先考慮,peoplea;這樣的代碼在編譯器中將如何實(shí)現(xiàn)?可以肯定是首先將把類(lèi)型people綁定到對(duì)象a上,然后必須為對(duì)象a分配空間。同時(shí),我們創(chuàng)建people的子類(lèi)man由于manISApeople。根據(jù)多態(tài)以及替換原則,我們當(dāng)然可以讓對(duì)象a保存一個(gè)man類(lèi)型的值(這就是替換原則的表現(xiàn))。這是一種直觀的描
20、敘,但在編程語(yǔ)言的實(shí)現(xiàn)過(guò)程中就出現(xiàn)一些困難。我們知道繼承是一種擴(kuò)展接口與實(shí)現(xiàn)的方式,那么我們就很難保證man類(lèi)型不對(duì)people類(lèi)型做擴(kuò)展,而一旦做出擴(kuò)展,我們?nèi)绾文苡么鎯?chǔ)people對(duì)象的空間去存儲(chǔ)man類(lèi)型的對(duì)象值呢?peoplea;manb=newman();a=b;這樣的代碼將首先把b對(duì)象進(jìn)行切割,然后再存儲(chǔ)到a對(duì)象空間去。然而這并不是我們所期望的。那么,為了支持OOP勺繼承,多態(tài),替換原則,但卻需要避免對(duì)象切割的發(fā)生,面對(duì)對(duì)象a我們將采用何種分配空間模型呢?常用的有下面三種方式:1, 只為a分配基類(lèi)people的存儲(chǔ)空間,不支持對(duì)象多態(tài)以及替換原則。這樣的模型內(nèi)存分配緊湊,存儲(chǔ)效率很
21、高。2, 分配繼承樹(shù)中的最大類(lèi)對(duì)象所需要空間(在這里是man類(lèi)的對(duì)象值空間),這樣的模型簡(jiǎn)單,同時(shí)可以實(shí)現(xiàn)多態(tài)和替換原則而避免對(duì)象切割問(wèn)題,但是十分浪費(fèi)內(nèi)存空間十分明顯。3, 只分配用于保存一個(gè)指針?biāo)枰拇鎯?chǔ)空間,在運(yùn)行時(shí)通過(guò)堆來(lái)分配對(duì)象實(shí)際類(lèi)型所需要的空間大小,這樣也可以實(shí)現(xiàn)多態(tài)和替換原則而避免對(duì)象切割問(wèn)題。(也就是說(shuō)a只是一個(gè)對(duì)象的引用,而不是真實(shí)的對(duì)象,真實(shí)對(duì)象的生成必須靠程序員顯式的聲明)。對(duì)于上面提到的三種內(nèi)存模型,1和3都被一些程序設(shè)計(jì)語(yǔ)言所采用。相信說(shuō)到這里,大家應(yīng)該開(kāi)始慢慢明白了。是的,C+乍為C語(yǔ)言的繼承者,對(duì)于效率的追求迫使它必須采用第一種最小靜態(tài)空間分配的方式,由于基于
22、棧空間的程序運(yùn)行效率要比基于堆空間的程序運(yùn)行效率高出許多,所以C+院許用棧空間保存對(duì)象,但同時(shí)也允許堆空間保存對(duì)象,可以說(shuō)C+兜采用了1和3兩種相混合的內(nèi)存模型,而C+州基于1內(nèi)存模型的對(duì)象,也就是說(shuō)基于棧內(nèi)存空間的對(duì)象是沒(méi)有辦法體現(xiàn)多態(tài)和替換原則的(請(qǐng)思考一下在C+州什么對(duì)象是基于棧的),而基于3內(nèi)存模型的對(duì)象將支持多態(tài)和替換原則(乂想一想在C+中什么對(duì)象是基于堆的)。這里,我們終于可以揭開(kāi)第一層迷霧了,很多人都知道在C+州只有指針和引用才能支持對(duì)象的多態(tài)行為,但是為什么會(huì)如此?上面做出了最好的解釋。Java語(yǔ)舌由于設(shè)計(jì)理念和C+用著很大的區(qū)別,它米用的是第3種對(duì)象棋型,一切對(duì)象(除了基本類(lèi)
23、型對(duì)象)都是基于堆分配的。這也是Java語(yǔ)言必須采用虛擬機(jī)的原因所在。在C+州很大一部分對(duì)象是不需要程序員進(jìn)行管理的(靜態(tài)空間對(duì)象),而在Java中,如果不采用虛擬機(jī)機(jī)制,所有的對(duì)象都需要程序員管理,而這樣的開(kāi)發(fā)代價(jià)將是巨大而不現(xiàn)實(shí)的。這也就揭開(kāi)了第二層迷霧,當(dāng)我們?cè)趯?duì)比C+新日J(rèn)ava語(yǔ)言的時(shí)候總是為虛擬機(jī)是否有其價(jià)值而爭(zhēng)論不休,但當(dāng)你拋開(kāi)所謂的好與不好的簡(jiǎn)單討論,進(jìn)入到其語(yǔ)言本身的內(nèi)在對(duì)象存儲(chǔ)本質(zhì)的時(shí)候,也許對(duì)于各種聲音才會(huì)有一個(gè)屆于自己的活醒認(rèn)識(shí)。讓我們繼續(xù)望下走,不同的對(duì)象內(nèi)存分配模型直接影響到其程序設(shè)計(jì)語(yǔ)言的賦值的含義。在各種編程語(yǔ)言中,賦值可以給出兩種不同的語(yǔ)義解釋?zhuān)簭?fù)制語(yǔ)義和指針
24、語(yǔ)義。很明顯,由于C+找持兩種相混合的對(duì)象存儲(chǔ)模型(但是默認(rèn)的存儲(chǔ)方式是棧存儲(chǔ)),所以在C+州默認(rèn)賦值語(yǔ)義米用的是前者,但C+W時(shí)提供了指針語(yǔ)義的功能支持(在拷貝構(gòu)造函數(shù)和=運(yùn)算符重載中用戶(hù)進(jìn)行自定義)而在Java中采用的是后者。這也就是我們揭開(kāi)的最后一道迷霧,不同的對(duì)象存儲(chǔ)模型直接導(dǎo)致了不同的賦值語(yǔ)義。面向?qū)ο蟮挠?jì)算模型和可計(jì)算性編程就是用計(jì)算所需要的指令構(gòu)成一種運(yùn)算裝置,無(wú)論我們的程序設(shè)計(jì)思想以及程序設(shè)計(jì)語(yǔ)言如何發(fā)展和提高,最終我們所使用的底層計(jì)算數(shù)學(xué)模型并沒(méi)有改變。但高級(jí)程序設(shè)計(jì)語(yǔ)言給我們帶來(lái)的變革是在其語(yǔ)言環(huán)境中構(gòu)建起了一個(gè)全新的,更抽象的虛擬計(jì)算模型。Smalltalk語(yǔ)言引入的對(duì)象
25、計(jì)算模型從根本上改變了以前的傳統(tǒng)計(jì)算模型,以前的計(jì)算模型突出的是順序計(jì)算過(guò)程中的機(jī)器狀態(tài),而現(xiàn)在的對(duì)象計(jì)算模型突出的對(duì)象之間的協(xié)作其計(jì)算結(jié)果由參加計(jì)算的所有的對(duì)象的狀態(tài)總體構(gòu)成。而由于對(duì)象本身具有自身狀態(tài),我們也可以把一個(gè)對(duì)象看成是一個(gè)小的計(jì)算機(jī)器。這樣,面向?qū)ο蟮挠?jì)算模型就演變成了許多小的計(jì)算機(jī)器的合作計(jì)算模型。圖靈機(jī)作為計(jì)算領(lǐng)域內(nèi)的根本計(jì)算模型,精確的抓住了計(jì)算的要點(diǎn):什么是可計(jì)算的,計(jì)算時(shí)間和空間存儲(chǔ)大小開(kāi)銷(xiāo)有多大。計(jì)算模型活楚的界定了可計(jì)算性的范圍,也就界定了哪些問(wèn)題是可求解,哪些問(wèn)題是不可求解的。OOF%程序員提供了一種更加抽象和易于理解的新的計(jì)算模型,但其本身并沒(méi)有超越馮.諾依曼體
26、系所代表的圖靈機(jī)數(shù)學(xué)計(jì)算模型。所以我們不能期望00甬它幫助我們解決更多的問(wèn)題,或者減少運(yùn)算的復(fù)雜度。但OOFW能幫助我們用一種更容易被我們所理解和接受的方式去描敘和解決現(xiàn)實(shí)問(wèn)題。結(jié)束這篇文章做為這個(gè)系列的第一篇,對(duì)于OO仲的許多核心概念和機(jī)制進(jìn)行了有益的討論,作者衷心的希望通過(guò)這篇文章能夠讓大家對(duì)于OOFW更深入的理解,同時(shí)明白OOP乍為已經(jīng)發(fā)展將近三十年的程序設(shè)計(jì)思想,其自身豐富的理論內(nèi)涵不是單單學(xué)習(xí)幾門(mén)OOPIM可以領(lǐng)悟。最后期望本文能實(shí)現(xiàn)了它的初衷-拋磚引玉。Reference:D&T1988:TypeTheoriesandObject-OrientedprogrammingbyScottDanforthandChrisTomlinsononACMComputingSurveysVol.20No.1March1988Liskov1988:DataAbstractionandHierarchybyBarbaraLiskovonSigplanNotices,23(5),1988C&W1985Onunderstandingtypes,dataabstraction,andpolymorphismbyCardelli.LandWegne
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025至2030中國(guó)電腦式微波爐行業(yè)發(fā)展研究與產(chǎn)業(yè)戰(zhàn)略規(guī)劃分析評(píng)估報(bào)告
- 2025至2030中國(guó)電影院行業(yè)市場(chǎng)發(fā)展分析及競(jìng)爭(zhēng)格局與投資發(fā)展報(bào)告
- 2025至2030中國(guó)電子煙與抽氣行業(yè)產(chǎn)業(yè)運(yùn)行態(tài)勢(shì)及投資規(guī)劃深度研究報(bào)告
- 2025至2030中國(guó)電子臨床試驗(yàn)行業(yè)產(chǎn)業(yè)運(yùn)行態(tài)勢(shì)及投資規(guī)劃深度研究報(bào)告
- 2025至2030中國(guó)玉米剝殼機(jī)行業(yè)市場(chǎng)深度研究及發(fā)展前景投資可行性分析報(bào)告
- 專(zhuān)業(yè)安全知識(shí)培訓(xùn)課件
- 教育大數(shù)據(jù)分析中的倫理與隱私問(wèn)題探討
- 消防中級(jí)培訓(xùn)課件下載
- 企業(yè)園區(qū)內(nèi)的基礎(chǔ)設(shè)施智能化升級(jí)方案
- 教育心理學(xué)在職業(yè)規(guī)劃課程中的應(yīng)用
- 閩教版(2024)三年級(jí)英語(yǔ)下冊(cè)全冊(cè)大單元整體教學(xué)設(shè)計(jì) 教案
- YS/T 3045-2022埋管滴淋堆浸提金技術(shù)規(guī)范
- 2025年1月國(guó)家開(kāi)放大學(xué)漢語(yǔ)言文學(xué)本科《古代詩(shī)歌散文專(zhuān)題》期末紙質(zhì)考試試題及答案
- 工廠生產(chǎn)管理制度流程
- 《弟子規(guī)之信篇》課件
- 電力設(shè)施的定期檢查與維修記錄管理
- 四升五數(shù)學(xué)暑假思維訓(xùn)練題90道
- 光伏發(fā)電工程可行性研究報(bào)告編制辦法(試行)-GD-003-2025
- 新能源車(chē)輛充電樁建設(shè)和運(yùn)營(yíng)合同
- 蘇教版三年級(jí)英語(yǔ)單詞表
- 2025年極兔速遞有限公司招聘筆試參考題庫(kù)含答案解析
評(píng)論
0/150
提交評(píng)論