程式設計方法的進化 (轉)

worldblog發表於2007-12-14
程式設計方法的進化 (轉)[@more@]  設計方法的進化:namespace prefix = o ns = "urn:schemas--com::office" />

一:開篇

從簡單到複雜,從小到大,從低階到高階是人類認識世界的過程,程式設計正如同此。

從身邊的一草一木到周圍的和大地,到整個地球,太陽系,銀河系,最終到整個宇宙,這是人類認識可感知世界的歷程。

從在紙帶機上敲打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/,如需轉載,請註明出處,否則將追究法律責任。

相關文章