陸偉
(無錫職業技術學院,江蘇無錫 214121)
哲學與面向對象的關系及軟件開發的發展方向
陸偉
(無錫職業技術學院,江蘇無錫 214121)
本文主要就哲學和面向對象從軟件工程的發展到面向對象方法的產生做了簡單的介紹,同時概要的描述了面向對象方法,也從哲學的角度對軟件工程的發展方向作出了適當的猜測。
面向過程(PO) 面向對象(OO) 對象(OBJECT) 事實(FACT)
軟件開發的過程就是人們使用各種計算機語言將人們關心的現實世界映射到計算機世界的過程。這方面的第一個重要成果就是在70年代風靡一時的結構化開發方法,即面向過程的開發或結構化方法(PO)。面向過程方法是人們在用計算機世界來表達現實世界時,追求過程化、模塊化、封裝以及更高的抽象的結果。人們使用計算機來映射現實世界時,最低層的實現無非是靠數字電路技術產生的高電平與低電平信號,用數學的語言來表示,就是像0和1這樣的二進制碼,這樣的抽象層次是極低的,遠離了自然語言,對一般人是不可理解的。人們把這些二進制串分塊定義,提出了字節、ASCII碼這樣的更高抽象層次的概念,使之對應于自然語言的一個個字母。在此基礎再借助某種形式語言,抽象出變量、表達式、運算、語句等概念,下一步的抽象就產生了面向過程方法。在面向過程方法中,人們關注的是如何用函數和過程來實現對現實世界的模擬,將其映射到計算機世界之中。但是到了七十年代末期,軟件行業受到軟件危機的困擾,面向過程這種結構化的開發方法不能夠很好地解決軟件危機,面向對象這種全新概念的方法由此出現。
對象是人腦中的物質意識和精神意識,通俗地講,就是事物在人腦中的映象和人腦對事物的意向,對象不是實體,它可以脫離實體而存在,對象之間也可以包含對象。對象(Object)一詞,早在十九世紀就有現象學大師胡塞爾提出并定義,對象是世界中的物體在人腦中的映象,是人的意識之所以為意識的反映,是做為一種概念而存在的先念的東西,它還包括了人的意愿。對象就是客觀世界中物體在人腦中的映象及人的意向。只要這個對象存在我們的思維意識當中,我們就可以借此判斷同類的東西,這是哲學意義上的對象。我們經常所說的“對象”,一般指的是解決信息領域內所遇到問題的方法,特別是應用軟件技術來解決問題的方法。如我們經常碰到的面向對象的編程(Object-Oriented Programming)、面向對象的分析(Object-Oriented Analysis)、面向對象的設計(Object-Oriented Design)等。應用前面所介紹的關于對象的概念,可以對這些問題做進一步的分析。在面向較復雜的系統,我們可以將它作為一個對象來進行分析。一個系統,或者說解決某個問題的全套解決方案,作為一個對象來看,可以由多個部分組成。同樣,這個對象也可以由多個對象組成。對于同類的事物,可以由一個對象來表示。
哲學家維特跟斯坦(Wittgenstein),在哲學史上第一次清楚地表達了對象的思想,更進一步提及了以后的事情。他在他的著作《邏輯哲學論》(Tractatus Logico-Philosophicus)中闡述了一種世界觀,或者說一種認識世界的觀點,這種觀點,在六七十年后的今天,終于由一種哲學思想沉淀到技術的層面上來,成為計算機業界的寵兒,這就是面向對象(OO)-----(Object-Oriented)。他的思想主要可以概括為:世界由實際發生的一切事實(facts)所組成;事實(facts)由原子事實(atomic facts)所組成;原子事實(atomic facts)由更基本的對象(objects)所組成;我們的關于外部世界的主觀描述圖畫,與它所描述的外部世界具有相同的邏輯結構;我們的思想與客觀世界是邏輯同構的;語言的極限就是世界的極限,等等。中心思想是(1)世界可以分解為事實(The world divides into facts),(2)事實是由原子事實(atomic facts)組成的。(3)一個原子事實是多個對象(objects)的組合。(4)對象是基本的(The Object is simple)。(5)對象形成了世界的基礎。即:世界---事實----原子事實----對象,這樣一個從整體到局部、從抽象到具體的認識鏈,在這個層次中,對象作為最基本的模塊,構成了整個認識大廈的基石。對象通過相互之間的復雜的關聯構成了整個世界,這個觀點也是面向對象理論的基石。
面向對象是人們認識客觀世界的抽象層次不斷提高的過程的發展結果,它采用類和對象的概念,把變量以及對變量進行操作的函數和過程封裝在一起,用這種更高一級的抽象來表達客觀世界。面向對象方法起源于六十年代末期,它是一種新的認知和表示世界的分析方法、設計方法和思維方法。面向對象方法學的出發點和所追求的基本目標是使人們分析、設計與實現一個系統的方法盡可能接近人們認識一個系統的方法。也就是使描述問題的問題空間和解決問題的方法空間在結構上盡可能一致。其基本思想是:對問題空間進行自然分割,以更接近人類思維的方式建立問題域模型,以便對客觀實體進行結構模擬和行為模擬,從而使設計出的軟件盡可能直接地描述現實世界,構造出模塊化的、可重用的、維護性好的軟件,同時限制軟件的復雜性和降低開發維護費用。
面向對象方法在軟件開發中對方案的解決具有很大的好處,在設計優秀合理的情況下尤其如此,人們可以只編寫一次代碼而在今后能夠反復重用,面向對象編程減少了編寫代碼的總量,加快了開發的進度,也同時降低了軟件中的錯誤量。同時面向對象技術也為軟件工業實現工程化提供了強有力的支持。
人們提出了許多面向對象的計算機程序設計語言、面向對象的軟件設計方法、面向對象的數據庫等等。自80年代后期以來,相繼出現的多種面向對象開發的方法有O M T(O b j e c t M o d e l i n g Technique),OOD(Object Oriented Design),RDD(Responsibility-Driven Design),OOAD(Object-Oriented Analysis and Design),OOSE(Object-Oriented Software Engineering)和VMT(Visual Modeling Technique)等等,C++,Objective-C,Object Pascal,CLOS(Common Lisp Object System),Eiffel,Actor這些語言也相繼出現。面向對象方法已經發展成一種完整的方法論和系統化的技術體系。
那么面向對象方法之后呢,軟件工程的發展方向又應該是什么呢?由上面的討論可以知道,軟件工程的發展歷史就是人們不斷追求更高的抽象、封裝和模塊化的歷史。由維特根斯坦在《邏輯哲學論》中提出的思想得知,比對象更為抽象的概念是“事實(FACT)”,即面向對象之后是面向事實,OO之后是FO(Fact-Oriented)。在他的哲學思想上來說,世界是所有事實的總和,世界可以分解為事實。任一事實或者為真,或者不為真。其次,那些為真的事實,是由原子事實(atomic facts)組成的。原子事實和簡單對象的關系是一個原子事實是多個對象(object)的組合。在原子事實中,對象以某種確定的方式相連。原子事實中對象相互連接的方式即是原子事實的結構。也就是說,原子事實是有結構的,這種結構被維特根斯坦看作是現實世界的模式(form)。這里有幾個重要的概念:事實(fact)、原子事實(atomic fact)和模式(form)。這樣可以知道面向對象(OO)之后是面向事實(FO),在面向事實(FO)的分析、設計和編程中,我們將主要圍繞事實(fact)、原子事實(atomic fact)和模式(form)這些基本概念來組織我們的軟件開發活動。在人們認識世界的層次結構中,這些概念是比對象(object)和類(class)更高一級的抽象。
那么面向事實以后又該是什么呢,這在哲學上看來這個問題似乎是無法解決的,它表明,存在一個極限。首先,要知道,軟件的實質是人們以計算機編程語言為橋梁,將客觀感知世界映射于計算機世界中去,以解決人們在客觀感知世界中要解決的問題。這里牽涉三個主要的范疇:客觀世界,計算機編程語言和計算機世界,計算機方面很顯然,在單片CHIP上集成的元件個數總會有限,發展不可能無限進行下去,軟件直接受硬件的發展限制;計算機編程語言方面,人們利用軟件解決問題,總會求助于數學上的算法,如果一個問題根本沒有算法,那么肯定是得不到解決的,還有一些問題,雖然理論上存在算法,但在人類有限的時間和空間里也同樣不可能得到解決,這類的問題人們也是束手無策;再看客觀世界,人們總是不斷在用自己的主觀思維來描述身邊的客觀世界,人類的主觀思維充斥著自己離奇古怪的幻想和起伏不定的情緒,具有極大的跳躍性和不確定性,常常以直覺、想象的方式進行著自己的活動,通常是語言所不能表達的,也就更談不上用程序去表達,軟件開發者的這個主觀想象世界很大程度上地影響著軟件的開發,這里存在一個極限。維特根斯坦在《邏輯哲學論》中有一句話清楚地表達了這種思想:“對于那些不可言說的,必須保持沉默(Whereof one cannot speak,thereof one must be silent)?!?/p>
[1]全增暇,主編.《西方哲學史》.1996年.
[2]李光志,等.對象分析與設計方法比較.電子工業出版社,1996年.
[3]馮玉琳,等.對象技術導論.科學出版社,1998年.
[4]邵維忠,楊芙清.面向對象的分析.清華大學出版社,1998年.