【正文】
立一個對象模型,它能夠近似的反映應(yīng)用領(lǐng)域內(nèi)的實體之間的關(guān)系,其本質(zhì)是更接近于一種人類認(rèn)知事物所采用的哲學(xué)觀的計算模型。由此,導(dǎo)致了一個自然的話題,那就是 OOP 到底是什么 ?[Damp。T 1988][ 1991].。在 OOP中,對象作為計算主體,擁有自己的名稱,狀態(tài)以及接受外界消息的接口。在對象模型中,產(chǎn)生新對象,舊對象銷毀,發(fā)送消息,響應(yīng)消息就構(gòu)成 OOP 計算模型的根本。 對象的產(chǎn)生有兩種基本方式。一種是以原型 (prototype)對象為基礎(chǔ)產(chǎn)生新的對象。一種是以類 (class)為基礎(chǔ)產(chǎn)生新對象。原型的概念已經(jīng)在認(rèn)知心理學(xué)中被用來解釋概念學(xué)習(xí)的遞增特性,原型模型本身就是企圖通過提供一個有代表性的對象為基礎(chǔ)來產(chǎn)生各種新的對象,并由此繼續(xù)產(chǎn)生更符合實際應(yīng)用的對象。而原型 委托也是 OOP 中的對象抽象,代碼共享機制中的一種。一個類提供了一個或者多個對象的通用性描敘。從形式化的觀點看,類與類型有關(guān),因此一個類相當(dāng)于是從該類中產(chǎn)生的實例的集合。而這樣的觀點也會帶來一些矛盾,比較典型的就是在繼承體系下,子集 (子類 )對象和父集 (父類 )對象之間的行為相融性可能很難達(dá)到,這也就是 OOP中常被引 用的 子類型 (subtype)不等于子類 (subclass)[Budd 2021]。而在一種所有皆對象的世界觀背景下,在類模型基礎(chǔ)上還誕生出了一種擁有元類 (metaclass)的新對象模型。即類本身也是一種其他類的對象。以上三種根本不同的觀點各自定義了三種基于類 (classbased),基于原型 (prototypebased)和基于元類 (metaclassbased)的對象模型。而這三種對象模型也就導(dǎo)致了許多不同的程序設(shè)計語言 (如果我們暫時把靜態(tài)與動態(tài)的差別放在一邊 )。是的,我們經(jīng)常接觸的 C++,Java 都是使用基于類的對象模型,但除此之外還有很多我們所沒有接觸的 OOPL 采用了完全不一樣的對象模型,他們是在用另外一種觀點詮釋 OOP 的內(nèi)涵。 什么是類型 (type)? 類型以及類型系統(tǒng)的起源以及研究與發(fā)展是獨立于 OOP 的。早在五十年代的 FORTRAN 語言編譯器實現(xiàn)中,就已經(jīng)采用類型系統(tǒng)作為類型檢查的一種手段。廣義的類型一般被定義為一種約束,也就是一種邏輯公式。而在對類型的研究過程中產(chǎn)生多種方法,比如 [Camp。W 1985]等。而代數(shù)方法 (algebraic approach)是一種非常好的建立類型的形式化規(guī) 范的方法。代數(shù)中的一個類型對應(yīng)于一系列元素,在它們之上定義代數(shù)操作。同時在此基礎(chǔ)上二階λ演算已經(jīng)被用于繼承和模板所支持的模型。在上面兩種方法中,類型被認(rèn)為是一系列滿足確定約束條件的元素,更抽象的方式可以把一個類型當(dāng)作規(guī)定一個約束條件,如果我們規(guī)定的約束條件越好,相對應(yīng)的被定義元素的集合就越精密,所以邏輯公式(logical formulas)就成為描敘類型特征的最合適工具。在這里,我們不想深入的探究對于類型理論的各種不同的數(shù)學(xué)模型,我們需要明白的是類型 (type)以及類型理論這個在編程語言中經(jīng)常應(yīng)用到的概念 的內(nèi)涵是極其豐富的,而其自身理論的發(fā)展并非局限于 OOP 之中,但當(dāng)兩者相結(jié)合的時候就對我們的程序觀產(chǎn)生了巨大的影響。 類 (class),類型 (type),接口 (interface) 這三個概念是在 OOP 中出現(xiàn)頻率最多,也最容易混淆的。而對于這三個概念的澄清也是文章寫作的初衷。讓我們先看看大師們對于這三個概念的描敘 The fundamental unit of programming in Java programming language is the class,but the fundamental unit of the objectoriented design is the classes define types,it is very useful and powerful to be able to define atype without defining define types in an abstract form as acollection of methods or other types that form the contract for the type.[Jams 2021]。 In C++,A class is auser definite type[ 1998]。 A type is aname used to denote aparticular interface… An ob