面向?qū)ο蟪绦蛟O(shè)計(jì)的基本概念_第1頁
面向?qū)ο蟪绦蛟O(shè)計(jì)的基本概念_第2頁
面向?qū)ο蟪绦蛟O(shè)計(jì)的基本概念_第3頁
面向?qū)ο蟪绦蛟O(shè)計(jì)的基本概念_第4頁
面向?qū)ο蟪绦蛟O(shè)計(jì)的基本概念_第5頁
已閱讀5頁,還剩5頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(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)稱OOP)!種起源于六十年代的Simula語言,發(fā)展已經(jīng)將近三十年的程序設(shè)計(jì)思想。其自身理論已經(jīng)十分完善,并被多種面向?qū)ο蟪绦蛟O(shè)計(jì)語言(Object-OrientedProgrammingLanguage,以下簡(jiǎn)稱OOPL決現(xiàn)。如果把Unix系統(tǒng)看成是國(guó)外在系統(tǒng)軟件方面的文化根基,那么Smalltalk語言無疑在OOPL域和Unix持有相同地位。由于很多原因,國(guó)內(nèi)大部分程序設(shè)計(jì)人員并沒有很深的OO似及OOPL!論,很多人從一開始學(xué)

2、習(xí)到工作很多年都只是接觸到c/c+,java,vb,delphi等靜態(tài)類型語言,而對(duì)純粹的OO刖想以及作為OOPL艮基的Smalltalk以及動(dòng)態(tài)類型語言知之甚少,不知道其實(shí)世界上還有一些可以針對(duì)變量不綁定類型的編程語言。而這些對(duì)比卻是深刻理解OO理論的重要部分,而國(guó)內(nèi)這方面的資料也為數(shù)不多。故把自己的一些OC習(xí)心得寫下來做為一個(gè)系歹0文章(一共三篇,第一篇描敘OOP勺一些基本但容易被誤解的理論,第二篇主要說明各種OOPL典化和發(fā)展以及對(duì)于OOP理論的支持,第三篇主要是說模式和組件在OO仲的地位以及展望OOP勺未來),由于文章描敘的只是自己對(duì)于OOP/OOPL理解,錯(cuò)誤以及淺薄之處在所難免,只

3、是希望對(duì)大家能起到拋磚引玉的作用。淺析OO的基石從抽象說起B(yǎng)ooch曾經(jīng)在他自己的。頃域內(nèi)的名著Booch94中開篇就論敘到了復(fù)雜性是軟件開發(fā)過程中所故有的特質(zhì)。而人們處理復(fù)雜性的最根本武器就是抽象。廣義的抽象代表的是對(duì)復(fù)雜系統(tǒng)的簡(jiǎn)化描敘或規(guī)格說明,為了突出系統(tǒng)的本質(zhì)屆性而故意忽略其中的非實(shí)質(zhì)性細(xì)節(jié)?!币粋€(gè)概念只有當(dāng)能被最終用來實(shí)現(xiàn)的機(jī)制獨(dú)立的描敘,理解,分析時(shí),才將這個(gè)概念限定為抽象的概念”。而Booch也給出了他心目中關(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ì)語!級(jí)別來看Java中是packages,C+中是namespace。這個(gè)抽象級(jí)別上的典型代表就是模塊化思想(Modularity)。3, 第三個(gè)抽象層所代表的是典型的OOP莫式:客戶/

5、服務(wù)器模型,這主要是用來抽象兩個(gè)對(duì)象之間的互交過程。在這個(gè)抽象級(jí)別上的典型代表就是對(duì)象之間的消息機(jī)制(MessagePassing)。4, 第四個(gè)抽象層就是針對(duì)一組相似對(duì)象定義一個(gè)類作為生成對(duì)象的棋板,類定義了對(duì)象的對(duì)外使用接口以及繼承對(duì)象所需的內(nèi)部繼承接口,而這個(gè)抽象層次的典型代表就是接口編程(InterfaceProgramming)。5, 第五個(gè)抽象層就是實(shí)現(xiàn)一個(gè)類所需要的方法和成員變量的實(shí)現(xiàn)(Implementation)。在這里OOP終和POP(Procedure-OrientedProgramming)相融合。當(dāng)然,我們可以根據(jù)各自的觀察角度劃分成更細(xì)的抽象層次比如說針對(duì)第五層抽象

6、用到的POPS論,我們還可以進(jìn)一步的劃分出控制抽象(三種完全描敘圖靈機(jī)計(jì)算模型所需要的控制結(jié)構(gòu))以及數(shù)據(jù)抽象(ADTs)等等,并由此繼續(xù)下去(如果你的想象力足夠豐富的話:)。什么是OOP?OOP勺許多原始思想都來之于Simula語言,并在Smalltalk語言的完善和標(biāo)準(zhǔn)化過程中得到更多的擴(kuò)展和對(duì)以前的思想的重新注解??梢哉fOC想和OOP乎是同步發(fā)展相互促進(jìn)的。與函數(shù)式程序設(shè)計(jì)(functionalprogramming)和邏輯式程序設(shè)計(jì)(logic-programming)所代表的接近于機(jī)器的實(shí)際計(jì)算模型所不同的是,OOP!乎沒有引入精確的數(shù)學(xué)描敘,而是傾向于建立一個(gè)對(duì)象模型,它能夠近似的反

7、映應(yīng)用領(lǐng)域內(nèi)的實(shí)體之間的關(guān)系,其本質(zhì)是更接近于一種人類認(rèn)知事物所采用的哲學(xué)觀的計(jì)算模型。由此,導(dǎo)致了一個(gè)自然的話題,那就是OO倒底是什么?D&T1988B.S1991.。在OO仲,對(duì)象作為計(jì)算主體,擁有自己的名稱,狀態(tài)以及接受外界消息的接口。在對(duì)象模型中,產(chǎn)生新對(duì)象,舊對(duì)象銷毀,發(fā)送消息,響應(yīng)消息就構(gòu)成OOP+算模型的根本。對(duì)象的產(chǎn)生有兩種基本方式。一種是以原型(prototype)對(duì)象為基礎(chǔ)產(chǎn)生新的對(duì)象。一種是以類(class)為基礎(chǔ)產(chǎn)生新對(duì)象。原型的概念已經(jīng)在認(rèn)知心理學(xué)中被用來解釋概念學(xué)習(xí)的遞增特性,原型模型本身就是企圖通過提供一個(gè)有代表性的對(duì)象為基礎(chǔ)來產(chǎn)生各種新的對(duì)象,并由此繼續(xù)產(chǎn)生更符

8、合實(shí)際應(yīng)用的對(duì)象。而原型-委托也是OO仲的對(duì)象抽象,代碼共享機(jī)制中的一種。一個(gè)類提供了一個(gè)或者多個(gè)對(duì)象的通用性描敘。從形式化的觀點(diǎn)看,類與類型有關(guān),因此一個(gè)類相當(dāng)于是從該類中產(chǎn)生的實(shí)例的集合。而這樣的觀點(diǎn)也會(huì)帶來一些矛盾,比較典型的就是在繼承體系下,子集(子類)對(duì)象和父集(父類)對(duì)象之間的行為相融性可能很難達(dá)到,這也就是OOW常被引用的-子類型(subtype)不等于子類(subclass)Budd2002。而在一種所有皆對(duì)象的世界觀背景下,在類模型基礎(chǔ)上還誕生出了一種擁有元類(metaclass)的新對(duì)象模型。即類本身也是一種其他類的對(duì)象。以上三種根本不同的觀點(diǎn)各自定義了三種基于類(clas

9、s-based),基于原型(prototype-based)和基于元類(metaclass-based)的對(duì)象模型。而這三種對(duì)象模型也就導(dǎo)致了許多不同的程序設(shè)計(jì)語言(如果我們暫時(shí)把靜態(tài)與動(dòng)態(tài)的差別放在一邊)。是的,我們經(jīng)常接觸的C+,Java都是使用基于類的對(duì)象模型,但除此之外還有很多我們所沒有接觸的OOPIX用了完全不一樣的對(duì)象模型,他們是在用另外一種觀點(diǎn)訟釋OOP勺內(nèi)涵。什么是類型(type)?類型以及類型系統(tǒng)的起源以及研究與發(fā)展是獨(dú)立于OOP勺。早在五十年代的FORTRAN言編譯器實(shí)現(xiàn)中,就已經(jīng)采用類型系統(tǒng)作為類型檢查的一種手段。廣義的類型一般被定義為一種約束,也就是一種邏輯公式。而在對(duì)

10、類型的研究過程中產(chǎn)生多種方法,比如C&W1985等。而代數(shù)方法(algebraicapproach)是一種非常好的建立類型的形式化規(guī)范的方法。代數(shù)中的一個(gè)類型對(duì)應(yīng)于一系列元素,在它們之上定義代數(shù)操作。同時(shí)在此基礎(chǔ)上二階入演算已經(jīng)被用于繼承和棋板所支持的模型。在上面兩種方法中,類型被認(rèn)為是一系列滿足確定約束條件的元素,更抽象的方式可以把一個(gè)類型當(dāng)作規(guī)定一個(gè)約束條件,如果我們規(guī)定的約束條件越好,相對(duì)應(yīng)的被定義元素的集合就越精密,所以邏輯公式(logicalformulas)就成為描敘類型特征的最合適工具。在這里,我們不想深入的探究對(duì)于類型理論的各種不同的數(shù)學(xué)模型,我們需要明白的是類型(type)以

11、及類型理論這個(gè)在編程語言中經(jīng)常應(yīng)用到的概念的內(nèi)涵是極其豐富的,而其自身理論的發(fā)展并非局限于OO比中,但當(dāng)兩者相結(jié)合的時(shí)候就對(duì)我們的程序觀產(chǎn)生了巨大的影響。類(class),類型(type),接口(interface)這三個(gè)概念是在OO叫出現(xiàn)頻率最多,也最容易混淆的。而對(duì)于這三個(gè)概念的澄活也是文章寫作的初衷。讓我們先看看大師們對(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è)概念:類(class),類型(type),接口(interface)以及契約(contract)。這里我們說到的類型和上面提到的類型有所不同,是狹義的OO叫的類型。為了理解這幾個(gè)概念,我先劃分出三個(gè)概念域:一個(gè)是針對(duì)現(xiàn)實(shí)世界的,一個(gè)是針對(duì)特定程序設(shè)計(jì)范型的(在這里就是OC設(shè)計(jì)范型),最后一個(gè)是針對(duì)編譯器實(shí)現(xiàn)的。也就是說,在現(xiàn)實(shí)世界中的概念必須有一種手段映射到。砒型中去,而OO范型中的概念也應(yīng)該在編譯器實(shí)現(xiàn)中有相同的概念對(duì)應(yīng)。由此

15、,我們可以這樣說,類是做為現(xiàn)實(shí)世界中的概念,而傳統(tǒng)的OOPLTK會(huì)提供class關(guān)鍵字來表示對(duì)現(xiàn)實(shí)世界模擬的支持。而接口,是作為OOS序設(shè)計(jì)范型中與類對(duì)應(yīng)的一個(gè)概念。在OO設(shè)計(jì)中,我們所要做的就是針對(duì)接口進(jìn)行設(shè)計(jì)和編程,而接口的實(shí)質(zhì)含義就是對(duì)象之間的一種契約。而類型就是編譯器實(shí)現(xiàn)中針對(duì)類和接口所定義的對(duì)應(yīng)概念??梢赃@樣說,類是現(xiàn)實(shí)世界中存在的客觀概念,是唯物的。接口是設(shè)計(jì)人員定義出來的,存在于設(shè)計(jì)人員心中的概念,是唯心的。而類型是類和接口這兩種概念的編譯器實(shí)現(xiàn)的映射概念,也是唯物的。類型主要是用來指導(dǎo)編譯器的類型檢查的謂詞,類是創(chuàng)建現(xiàn)實(shí)對(duì)象的棋板,接口是OO設(shè)計(jì)中的關(guān)鍵概念。這三個(gè)概念相互區(qū)別

16、(分別位于不同的概念域),乂相互聯(lián)系(都是代表相同的概念的不同概念域的映射)。有了上面的理解,我們看看下面最常見的Java語句:peoplea=newman();這代表了什么狒序員向編譯器聲明了一個(gè)people類型(type)的對(duì)象變量a,而對(duì)象變量a本身卻指向了一個(gè)man類(class)的實(shí)體(而在編譯器中理解是對(duì)象變量a指向了一個(gè)類型為man的實(shí)體)。再讓我們回到Jams2000,其中句子的根本含義我們可以概括如下:聲明一個(gè)類或者一個(gè)接口都同時(shí)向編譯器注冊(cè)了一個(gè)新的類型,而此類或者接口以及類型都是共享同樣的一個(gè)名字。也就是說。編譯器所能理解的全部都是類型,而程序員的工作是把現(xiàn)實(shí)中的類概念轉(zhuǎn)

17、化為設(shè)計(jì)中的接口概念,而編譯器對(duì)應(yīng)于上兩種概念都有直接的支持,那就是一個(gè)類聲明或者接口聲明在編譯器的理解來看就是一個(gè)類型聲明。但是反過來卻不一定成立。一個(gè)類可以有多個(gè)接口(一個(gè)類完全有可能實(shí)現(xiàn)了設(shè)計(jì)人員的多個(gè)契約條件),同時(shí)也就可能有多個(gè)類型(因?yàn)轭愋筒贿^是接口這個(gè)設(shè)計(jì)域內(nèi)的概念在編譯器中的實(shí)現(xiàn))。多態(tài),替換原則,對(duì)象切割多態(tài)作為OO中的核心機(jī)制之一擁有著豐富的內(nèi)涵。顧名思義,多態(tài)就是一種名稱多種形態(tài)的意思。其主要有三種形式:函數(shù)多態(tài),對(duì)象變量多態(tài),泛型多態(tài)。函數(shù)多態(tài)主要包括函數(shù)重載(overload)和改寫(overriding)。泛型多態(tài)(genericity)主要是提供了一種創(chuàng)建通用工具

18、的方法,可以在特定的場(chǎng)合將其特化。在這里,我們重點(diǎn)要考量的是對(duì)象變量多態(tài)。在理解對(duì)象變量多態(tài)之前,我們首先了解一下0誠(chéng)心機(jī)制之一的替換原則。靜態(tài)類型的OOPL勺一個(gè)特征就是一個(gè)變量所包含的值(value)的類型可能并不等于這個(gè)變量所聲明的類型,在傳統(tǒng)的編程語言中并不具備這樣的特征,因?yàn)槲覀儾豢赡馨崖暶鳛檎偷淖兞抠x上字符申的變量值。而替換原則發(fā)生作用的情況就隱含的描敘了兩種不同類型所具有的關(guān)聯(lián)-類型繼承。BarbaraLiskov曾經(jīng)這樣描敘替換原則以及起作用的類型之間的關(guān)聯(lián):對(duì)于類型為S的每個(gè)對(duì)象s,存在一個(gè)類型為T的對(duì)象t,對(duì)于根據(jù)類型T所定義的所有程序P,如果用對(duì)象s替換對(duì)象t,程序P的

19、行為保持不變,那么類型S就是類型T的子類型Liskov1988在理解了多態(tài)以及替換原則后,我們可以繼續(xù)深入理解繼承與替換原則相結(jié)合所帶來的新的觀點(diǎn)??梢哉f繼承與替換原則的引入影響了幾乎所有的OOPL包括類型系統(tǒng),值語義/引用語義,對(duì)象內(nèi)存空間分配等等。下面,我將試圖逐步的撥開其中的各種因果。首先考慮,peoplea;這樣的代碼在編譯器中將如何實(shí)現(xiàn)?可以肯定是首先將把類型people綁定到對(duì)象a上,然后必須為對(duì)象a分配空間。同時(shí),我們創(chuàng)建people的子類man由于manISApeople。根據(jù)多態(tài)以及替換原則,我們當(dāng)然可以讓對(duì)象a保存一個(gè)man類型的值(這就是替換原則的表現(xiàn))。這是一種直觀的描

20、敘,但在編程語言的實(shí)現(xiàn)過程中就出現(xiàn)一些困難。我們知道繼承是一種擴(kuò)展接口與實(shí)現(xiàn)的方式,那么我們就很難保證man類型不對(duì)people類型做擴(kuò)展,而一旦做出擴(kuò)展,我們?nèi)绾文苡么鎯?chǔ)people對(duì)象的空間去存儲(chǔ)man類型的對(duì)象值呢?peoplea;manb=newman();a=b;這樣的代碼將首先把b對(duì)象進(jìn)行切割,然后再存儲(chǔ)到a對(duì)象空間去。然而這并不是我們所期望的。那么,為了支持OOP勺繼承,多態(tài),替換原則,但卻需要避免對(duì)象切割的發(fā)生,面對(duì)對(duì)象a我們將采用何種分配空間模型呢?常用的有下面三種方式:1, 只為a分配基類people的存儲(chǔ)空間,不支持對(duì)象多態(tài)以及替換原則。這樣的模型內(nèi)存分配緊湊,存儲(chǔ)效率很

21、高。2, 分配繼承樹中的最大類對(duì)象所需要空間(在這里是man類的對(duì)象值空間),這樣的模型簡(jiǎn)單,同時(shí)可以實(shí)現(xiàn)多態(tài)和替換原則而避免對(duì)象切割問題,但是十分浪費(fèi)內(nèi)存空間十分明顯。3, 只分配用于保存一個(gè)指針?biāo)枰拇鎯?chǔ)空間,在運(yùn)行時(shí)通過堆來分配對(duì)象實(shí)際類型所需要的空間大小,這樣也可以實(shí)現(xiàn)多態(tài)和替換原則而避免對(duì)象切割問題。(也就是說a只是一個(gè)對(duì)象的引用,而不是真實(shí)的對(duì)象,真實(shí)對(duì)象的生成必須靠程序員顯式的聲明)。對(duì)于上面提到的三種內(nèi)存模型,1和3都被一些程序設(shè)計(jì)語言所采用。相信說到這里,大家應(yīng)該開始慢慢明白了。是的,C+乍為C語言的繼承者,對(duì)于效率的追求迫使它必須采用第一種最小靜態(tài)空間分配的方式,由于基于

22、??臻g的程序運(yùn)行效率要比基于堆空間的程序運(yùn)行效率高出許多,所以C+院許用??臻g保存對(duì)象,但同時(shí)也允許堆空間保存對(duì)象,可以說C+兜采用了1和3兩種相混合的內(nèi)存模型,而C+州基于1內(nèi)存模型的對(duì)象,也就是說基于棧內(nèi)存空間的對(duì)象是沒有辦法體現(xiàn)多態(tài)和替換原則的(請(qǐng)思考一下在C+州什么對(duì)象是基于棧的),而基于3內(nèi)存模型的對(duì)象將支持多態(tài)和替換原則(乂想一想在C+中什么對(duì)象是基于堆的)。這里,我們終于可以揭開第一層迷霧了,很多人都知道在C+州只有指針和引用才能支持對(duì)象的多態(tài)行為,但是為什么會(huì)如此?上面做出了最好的解釋。Java語舌由于設(shè)計(jì)理念和C+用著很大的區(qū)別,它米用的是第3種對(duì)象棋型,一切對(duì)象(除了基本類

23、型對(duì)象)都是基于堆分配的。這也是Java語言必須采用虛擬機(jī)的原因所在。在C+州很大一部分對(duì)象是不需要程序員進(jìn)行管理的(靜態(tài)空間對(duì)象),而在Java中,如果不采用虛擬機(jī)機(jī)制,所有的對(duì)象都需要程序員管理,而這樣的開發(fā)代價(jià)將是巨大而不現(xiàn)實(shí)的。這也就揭開了第二層迷霧,當(dāng)我們?cè)趯?duì)比C+新日J(rèn)ava語言的時(shí)候總是為虛擬機(jī)是否有其價(jià)值而爭(zhēng)論不休,但當(dāng)你拋開所謂的好與不好的簡(jiǎn)單討論,進(jìn)入到其語言本身的內(nèi)在對(duì)象存儲(chǔ)本質(zhì)的時(shí)候,也許對(duì)于各種聲音才會(huì)有一個(gè)屆于自己的活醒認(rèn)識(shí)。讓我們繼續(xù)望下走,不同的對(duì)象內(nèi)存分配模型直接影響到其程序設(shè)計(jì)語言的賦值的含義。在各種編程語言中,賦值可以給出兩種不同的語義解釋:復(fù)制語義和指針

24、語義。很明顯,由于C+找持兩種相混合的對(duì)象存儲(chǔ)模型(但是默認(rèn)的存儲(chǔ)方式是棧存儲(chǔ)),所以在C+州默認(rèn)賦值語義米用的是前者,但C+W時(shí)提供了指針語義的功能支持(在拷貝構(gòu)造函數(shù)和=運(yùn)算符重載中用戶進(jìn)行自定義)而在Java中采用的是后者。這也就是我們揭開的最后一道迷霧,不同的對(duì)象存儲(chǔ)模型直接導(dǎo)致了不同的賦值語義。面向?qū)ο蟮挠?jì)算模型和可計(jì)算性編程就是用計(jì)算所需要的指令構(gòu)成一種運(yùn)算裝置,無論我們的程序設(shè)計(jì)思想以及程序設(shè)計(jì)語言如何發(fā)展和提高,最終我們所使用的底層計(jì)算數(shù)學(xué)模型并沒有改變。但高級(jí)程序設(shè)計(jì)語言給我們帶來的變革是在其語言環(huán)境中構(gòu)建起了一個(gè)全新的,更抽象的虛擬計(jì)算模型。Smalltalk語言引入的對(duì)象

25、計(jì)算模型從根本上改變了以前的傳統(tǒng)計(jì)算模型,以前的計(jì)算模型突出的是順序計(jì)算過程中的機(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ǔ)大小開銷有多大。計(jì)算模型活楚的界定了可計(jì)算性的范圍,也就界定了哪些問題是可求解,哪些問題是不可求解的。OOF%程序員提供了一種更加抽象和易于理解的新的計(jì)算模型,但其本身并沒有超越馮.諾依曼體

26、系所代表的圖靈機(jī)數(shù)學(xué)計(jì)算模型。所以我們不能期望00甬它幫助我們解決更多的問題,或者減少運(yùn)算的復(fù)雜度。但OOFW能幫助我們用一種更容易被我們所理解和接受的方式去描敘和解決現(xiàn)實(shí)問題。結(jié)束這篇文章做為這個(gè)系列的第一篇,對(duì)于OO仲的許多核心概念和機(jī)制進(jìn)行了有益的討論,作者衷心的希望通過這篇文章能夠讓大家對(duì)于OOFW更深入的理解,同時(shí)明白OOP乍為已經(jīng)發(fā)展將近三十年的程序設(shè)計(jì)思想,其自身豐富的理論內(nèi)涵不是單單學(xué)習(xí)幾門OOPIM可以領(lǐng)悟。最后期望本文能實(shí)現(xiàn)了它的初衷-拋磚引玉。Reference:D&T1988:TypeTheoriesandObject-OrientedprogrammingbyScottDanforthandChrisTomlinsononACMComputingSurveysVol.20No.1March1988Liskov1988:DataAbstractionandHierarchybyBarbaraLiskovonSigplanNotices,23(5),1988C&W1985Onunderstandingtypes,dataabstraction,andpolymorphismbyCardelli.LandWegne

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論