程式設計方法的進化 (轉)
一:開篇
從簡單到複雜,從小到大,從低階到高階是人類認識世界的過程,程式設計正如同此。
從身邊的一草一木到周圍的和大地,到整個地球,太陽系,銀河系,最終到整個宇宙,這是人類認識可感知世界的歷程。
從在紙帶機上敲打0和1到,到結構化程式設計,面向設計(-oriented programme),面向主體設計(Agent-oriented programme),這是上個世紀程式設計的發展歷程,但其最終將駛向何方,我們都在拭目以待。
這裡引入一個術語---“粒度”來表達程式設計的發展方向,在紙帶機上的粒度是位,0和1;彙編的粒度是一條條語句,mov 30H, ds ;結構化設計的粒度是,int add(int a, int b){……};物件導向設計的粒度是類,class Man extend Object {…};面向主體的設計粒度是主體(Agent),人的化身;應用歸納原理,我們不難得出這樣的結論,程式設計的發展是設計粒度從小到大的發展過程。這也正符合人類使用模擬複雜社會的需要。面向主體是比物件導向更大的社會描述單位,因而也更適合用來解決複雜,大型問題。
結構化程式設計現在已經很少有人再討論,因為它已經成為程式設計師的基本技能。物件導向程式設計現在正如日中天,但我相信在不久的將來面向主體設計將大行其道。下面將簡單介紹和比較物件導向設計和麵向主體設計。
二:物件導向與面向主體
從某一角度來看,客觀世界是由由客觀世界中的實體及其相互關係構成的,我們把客觀世界中的實體抽象成問題空間的物件,於是我們得到了物件導向程式設計方法。對於物件導向設計我們可以用以下語言來描述:物件導向程式設計是透過物件,物件間訊息傳遞等語言機制,使開發者在解空間中直接模擬問題空間中的物件及其行為,從而提供了一種直觀的,自然的語言支援和方法學指導。物件導向設計的基本操縱單位為物件,即類的例項。物件間透過訊息傳遞機制實現功能。使用封裝,繼承和多型等方法具體實現資料的操作,程式碼複用和方法過載。
社會是人和人與人之間關係的複雜組合體,我們用主體(Agent)來模擬人的思想和行為,進而用多主體(Multi-Agent system)模擬社會,於是我們得到了面向主體設計方法。對於面向主體設計我們可以用以下語言簡單描述:面向主體方法是希望透過對人解決應用問題的智慧行為進行模擬,在軟體解空間中建立一種嵌入在不斷變化,不確定世界中,能進行感知並能自主採取行動的計算實體。主體是含有心智成分,如信念,願望,能力,職責,承諾等,的實體。主體程式控制主體的行為和心智狀態,主體間透過各種型別的Speech Act原語實現通訊。
為了得到對面向主體更清晰的認識,這裡對面向主體和麵向物件進行以下四方面的比較:
1:自主性
主體是位於某一環境中的一個計算實體,它有能力在該環境中自主的採取行動,即在沒有人直接干預下能夠採取行動,並能控制自己的行為和內部狀態。物件不具有自主性,不能控制自己的行為。物件導向有public 關鍵字,如果將一個方法置於其下,則其他物件可任意呼叫該方法,擁有該方法的物件不能控制該方法是否。既物件導向透過直接的方法呼叫實現互動。面向主體是透過任務請求的方法實現互動,當主體A需要主體B來完成某個功能時,A不能直接呼叫B的方法和屬性,只能向B傳送一個任務請求,B返回結果,至於B如何完成,A無權知道。
2:反應性
主體能夠感知它們的環境,如客觀世界,,其他主體等,並以實時方式響應環境中發生的變化。物件不能自主感知外部世界,並實時做出反應。
3:社會性
主體能夠在履行其自身職能的同時,還能夠根據其求解狀態和技能,在合適的時候與其他主體互動,以提高自己的問題求解能力或幫助其他主體的問題求解活動。而物件系統中的物件之間的關係是單向的呼叫關係,不存在相互作用。
4:學習能力
主體在執行過程中,透過學習以往的不斷改善自己對同一問題的求解能力,而物件的方法卻是一成不變的。假如主體M和物件N都可以求解Sin(x)和Cos(y),主體M可以透過自學習求解出Sin(x)+Cos(y),而物件N則不會,必須人工加入Sin(x)+Cos(y)函式。
看完上面的內容,請大家不要產生誤解,即將物件導向和麵向主體對立起來,認為是兩種截然不同的方法,其實它們之間的關係是包含關係,即面向主體包含物件導向,物件導向設計方法的一切優點都可以被面向主體所吸收和容納。從最初的SmallTalk到純物件導向的 , 物件導向的程式設計語言現在已經相當成熟;但到目前為止,還沒有任何一種面向主體設計語言,我給不出詳盡的面向主體的程式設計實現方法,這裡討論的只能稱之為面向主體設計思想和方法。就目前的技術結構而言,面向主體的設計還需要靠物件導向程式設計語言來具體實現。
三:篇後語
面向主體設計技術的核心是人工智慧,但用當前的技術和知識表達方式開發人工智慧始終缺少突破,現在的人工智慧就象一個醜小鴨,生活在錯誤的環境中,故始終不能飛翔於藍天。人工智慧的發展亟待硬體技術和知識表達方式的撤底變革,變革後硬體我引用《駭客帝國》裡的名詞,稱之為----母體:孕育智慧和生命的搖籃。從程式設計粒度從小到大的進化過程來看,我們可以預言程式設計方法的明天,答案是什麼呢?從不同的角度分析我們這個複雜的世界,可以得到不同的答案。
四:參考文獻
姚莉,張維明:智慧協作資訊科技,電子工業出版社;
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10752043/viewspace-993416/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 程式設計師的進化程式設計師
- 設計一個十進位制轉化為隨意進位制的程式
- 程式設計師的迴歸式進化程式設計師
- 趣文:程式設計師的進化史程式設計師
- Linux核心模組的程式設計方法(轉)Linux程式設計
- 真正的程式設計方法是什麼? (轉)程式設計
- Java程式設計中資源物件管理的進化Java程式設計物件
- 非同步程式設計方案進化論非同步程式設計
- 趣文:Python程式設計師的進化史Python程式設計師
- FE.ES-非同步程式設計進化史非同步程式設計
- 程式設計的精進之法程式設計
- 物件式程式設計方法 作者:夏寒 (轉)物件程式設計
- 遊戲字幕設計的進化之路遊戲
- 在 Oracle JDeveloper 中進行 Ajax 程式設計(轉)OracleDeveloper程式設計
- 進化感悟:從程式設計小白到應用開發者程式設計
- 招聘程式設計師的方法程式設計師
- 網頁設計的進化–資訊圖網頁
- 程式設計師的進階之路程式設計師
- 用Delphi進行OpenGL程式設計學習心得 (轉)程式設計
- 程式設計師程式設計時的簡單方法與技巧程式設計師
- 進位制轉化--Java自帶方法Java
- 開發JAVA程式設計中字串分割的兩種方法(轉)Java程式設計字串
- 多程式程式設計 (轉)程式設計
- 多程式程式設計(轉)程式設計
- shell程式設計進階程式設計
- Excel 的VB程式設計 (轉)Excel程式設計
- 成功的程式設計師 (轉)程式設計師
- 程式設計師的生命 (轉)程式設計師
- 真正的程式設計師 (轉)程式設計師
- 程式程式碼進化的一些思考:從物件導向到設計模式,到函數語言程式設計物件設計模式函數程式設計
- Web前端進階之JavaScript模組化程式設計知識Web前端JavaScript程式設計
- Javascript非同步程式設計模型進化,從promise到generatorJavaScript非同步程式設計模型Promise
- 論工業化方向上的程式設計發展思路 (轉)程式設計
- 用C語言技術進行CGI程式設計(轉)C語言程式設計
- 第1章 程式設計的方法程式設計
- 遊戲中“血條”設計的進化史遊戲
- 進入程式設計師的自由天地程式設計師
- Linux 程式設計之Shell程式設計(轉)Linux程式設計