中文字幕日韩一区二区_国产一区二区av_国产毛片av_久久久久国产一区_色婷婷电影_国产一区二区精品

對象已死?

  最近常有一種說法,就是我們如今面臨著另外一場編程模型的變革,面向對象技術已經(jīng)處在被淘汰的邊緣,函數(shù)式語言會取代面向對象技術成為主流方式,甚至出現(xiàn)了面向對象已死的言論。作為一個硬核函數(shù)語言的狂熱者,我個人當然希望函數(shù)式語言可以一統(tǒng)天下,成為主流之選。但是不是應該把對象技術和函數(shù)技術對立起來,說式后者取前者而代之,我個人認為,這和如何看待面向對象技術有關。

  做為工程實踐的對象技術

  在這個年代,大家有一種神圣化面向對象技術的傾向,很多人都把對象技術奉為高深的思想和理論。但實際上,面向對象技術僅僅一種工程實踐而已,它是依托于其他技術而存在的一種實踐,本身并不是一種完備的計算模型。

  在計算機科學發(fā)展的早期,對于計算機的非數(shù)值計算應用的討論,以及對于可計算性問題的研究和發(fā)展,大抵確立了幾種的計算模型:遞歸函數(shù)類、圖靈機、Lambda演算、Horn子句、Post系統(tǒng)等等。其中遞歸函數(shù)類是可計算性問題的數(shù)學解釋;Horn子句是prolog這類邏輯語言的理論基礎;lambda演算成為了函數(shù)式語言的理論基礎;圖靈機是圖靈解決可計算問題的時候所設計的裝置,其后成為計算機的裝置模型,與圖靈機相關的自動機以及馮諾依曼結構,成為了命令式語言的理論基礎。

  因此當我們談及函數(shù)語言和命令式語言優(yōu)劣的時候,我們實際上是在討論其背后的計算模型——也就是lambda演算和馮結構裝置操作——在執(zhí)行效率和抽象層次上的優(yōu)劣。

  而面向對象技術則比較尷尬了,其背后沒有一個對應的計算模型(80年代的時候曾有人研究過,Pi演算是個備選,但是這個模型更多的是在并發(fā)對象領域的語義,而不是通常意義上的計算模型)。它有點類似于“最佳實踐”,在不同的計算模型上有著完全不同實現(xiàn)方式和含義。因此對比對象技術和其他技術的時候,搞清楚到底是哪一種面向對象就變得格外重要起來。

  兩種不同的面向對象

  目前流行的對象技術,實際上有兩個截然不同的源頭。它們分別在兩個完全不同的計算模型上發(fā)展起來,但是都頂著“面向對象”這個帽子。

  第一種對象技術出現(xiàn)的較晚,在1979年以后。它是以抽象數(shù)據(jù)類型(ADT,Abstract Data Type)為源起,發(fā)展出來的面向對象技術。也就是首先被C++所采用的面向對象技術。

  C++作為“更好的C”,繼承了C語言對于程序的看法,也就是數(shù)據(jù)抽象(Data Abstraction)和過程。面向對象技術在C++中,是作為一種更好的數(shù)據(jù)抽象的方式而存在的。

  數(shù)據(jù)抽象在這類面向對象語言中是一種關鍵的抽象方式。所謂數(shù)據(jù)抽象,在計算機發(fā)展的早期是一種非常關鍵的技術。眾所周知,計算機在裝置模型上是一個存儲和一組指令集,而二進制的存儲實際上是沒有任何類型表示的。整數(shù),浮點這些操作必須通過相應的約定,再以指令集的形式進行支持。而隨著計算機的發(fā)展,簡單的數(shù)據(jù)類型顯然已經(jīng)不能滿足應用的需要。這時候一種靈活且有效的類型系統(tǒng),就成了一種自然的追求(直到80年代初,類型系統(tǒng)都是計算機科學研究的重要方向之一)。

  在C++中(以及后來的Java和C#),對象是一種構造數(shù)據(jù)類型的方式,把每個“類”看作一段存儲(狀態(tài))和操作(方法)的集合。“類”作為已經(jīng)存在的類型系統(tǒng)的一種擴展(這一點在C++中體現(xiàn)得尤其強烈)。在這類語言中,“類”(class)實際上代替了“對象”(object)成為了頭等公民。構造一個更好的類型系統(tǒng),是這種面向對象技術所要解決的問題。與其說是面向對象,不如說是面向類或面向類型的。

  從計算語義上說,這類對象技術仍然是裝置的操作語義,和面向過程的沒有實質上的區(qū)別。唯一的不同是,被這種對象語言操作的機器,可以借由對象技術擴展機器所支持的類型。這種面向對象技術是過程技術的一種發(fā)展,雖然在抽象層次上沒有什么太大的提高,但在實踐上已經(jīng)是巨大的進步。

  另一種對象技術出現(xiàn)的很早,大概在60年代末就出現(xiàn)了,直到80年代初還有發(fā)展。但是很長一段時間內并不是太主流的做法,反而并不太為人所知。

  在函數(shù)式語言里,因為高階函數(shù)(High Order Function)的存在,數(shù)據(jù)可由函數(shù)來表達。這就是函數(shù)語言里一個非常重要的觀點:Data as Procedure。在函數(shù)語言中,可以構造一種非常類似于對象的高階函數(shù):

(define (make-user name age sex)
(define (dispatch message)
(cond ((eq? message 'getName) name)
((eq? message 'getAge) age)
((eq? message 'getSex) sex))
(else (error 'messageNotUnderstand))))
dispatch)

(define vincent (make-user 'Vincent
30 'Male))
(vincent 'getName)

it知識庫對象已死?,轉載需保留來源!

鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯(lián)系我們修改或刪除,多謝。

主站蜘蛛池模板: 欧美一区二区三区视频在线观看 | 一区二区三区四区在线 | 久久久久国产 | 另类专区成人 | 久草.com | 91久久国产综合久久91精品网站 | 丁香一区二区 | 凹凸日日摸日日碰夜夜 | 日本成人毛片 | 全免费a级毛片免费看视频免费下 | 日韩欧美在线观看 | 影视一区| 欧美无乱码久久久免费午夜一区 | 日韩视频一区二区在线 | 天天天天操 | 国产福利久久 | 国产日韩一区二区 | 日日操视频 | 欧洲妇女成人淫片aaa视频 | 成人av片在线观看 | 91精品入口蜜桃 | 国产精品夜夜春夜夜爽久久电影 | 成人小视频在线免费观看 | 99色在线 | 国产乱码精品1区2区3区 | 亚洲国产精品一区二区三区 | 狠狠操狠狠干 | 国产一区 | 亚洲综合色视频在线观看 | 精品91视频| 久久9热 | av大片| 午夜一级黄色片 | 久久精品国产一区二区三区不卡 | 一区二区三区电影网 | 日韩一区二区三区在线视频 | 九九国产在线观看 | 日韩在线| 国产一区二区视频在线 | 夜夜操天天艹 | 一区二区三区观看视频 |