一区二区久久-一区二区三区www-一区二区三区久久-一区二区三区久久精品-麻豆国产一区二区在线观看-麻豆国产视频

對象已死?

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

  做為工程實踐的對象技術

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

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

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

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

  兩種不同的面向對象

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

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

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

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

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

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

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

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

(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知識庫對象已死?,轉載需保留來源!

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

主站蜘蛛池模板: 亚洲国产天堂久久综合图区 | 国产综合色精品一区二区三区 | 精品99视频 | 国内精品在线播放 | 国产成人午夜视频 | 婷婷在线免费视频 | 国产h视频在线观看网站免费 | 激情综合网五月婷婷 | 99视频这里有精品 | 在线精品国产成人综合第一页 | japanese无码中文字幕 | 久青草国产视频 | 亚洲国产91在线 | 激情视频图片小说 | 亚洲社区在线观看 | 国产麻豆综合视频在线观看 | 国产精品视频区 | 久色伊人 | 色综合合久久天天综合绕视看 | 久久久久青草线蕉亚洲麻豆 | www.色多多 | 中国女人真人一级毛片 | 精品国产91久久久久久久 | 伊香蕉大综综综合久久 | 青青草原伊人网 | 国产精品免费一区二区三区四区 | 亚洲综合激情视频 | 美女很黄很黄是免费的 | 91久久婷婷国产综合精品青草 | 亚洲精品人成无码中文毛片 | 亚洲图片偷拍区 | 国产在线视频福利 | 午夜国产精品福利在线观看 | 在线国产小视频 | 日本一区二区三区久久 | 亚洲图片校园另激情类小说 | 国产正在播放 | 美女扒开腿让男人捅爽 | 精品综合网 | 国产极品白嫩美女在线观看看 | 一本久道久久综合多人 |