OO,OO以後,及其極限(3)

2021-08-21 22:43:38 字數 4534 閱讀 6832

4. oo之後是什麼?

一、 從軟體工程的發展歷史來看

2023年nato會議之後,「軟體危機」成為人們關注的焦點。為迎接軟體危機的挑戰,人們進行了不懈的努力。這些努力大致上是沿著兩個方向同時進行的。一是從管理的角度,希望實現軟體開發過程的工程化。這方面最為著名的成果就是提出了大家都很熟悉的「瀑布式」生命週期模型。它是在60年代末「軟體危機」後出現的第乙個生命週期模型。如下所示。

分析 → 設計 → 編碼 → 測試 → 維護

後來,又有人針對該模型的不足,提出了快速原型法、螺旋模型、噴泉模型等對「瀑布式」生命週期模型進行補充。現在,它們在軟體開發的實踐中被廣泛採用。

這方面的努力,還使人們認識到了文件的標準以及開發者之間、開發者與使用者之間的交流方式的重要性。一些重要文件格式的標準被確定下來,包括變數、符號的命名規則以及原**的規範格式。

軟體工程發展的第二個方向,側重與對軟體開發過程中分析、設計的方法的研究。這方面的第乙個重要成果就是在70年代風靡一時的結構化開發方法,即po(面向過程的開發或結構話方法)。 po是人們在用計算機世界來表達現實世界時,追求過程話、模組化、封裝以及更高的抽象的結果。 人們用計算機來對映現實世界時,最低層的實現無非是靠數位電路技術產生的高電平與低電平訊號。用數學的語言來表示,就是像 010101000010111 這樣的二進位制串。這樣的抽象層次是極低的,遠離了自然語言,對一般人是不可理解的。人們把這些二進位制串分塊定義,提出了位元組、ascii碼這樣的更高抽象層次的概念,使之對應於自然語言的乙個個字母。在此基礎再借助某種形式語言,抽象出變數、表示式、運算、語句等概念。在這個層面上,一般經過訓練的程式設計師已經可以比較不那麼痛苦地進行軟體開發了。下一步的抽象就產生了po。 在po中,人們關注的是如何用函式和過程來實現對現實世界的模擬,將其對映到計算機世界之中。 oo是這種抽象層次不斷提高的過程的自然發展結果,它採用類和物件的概念,把變數以及對變數進行操作的函式和過程封裝在一起,用這種更高一級的抽象來表達客觀世界。通常,乙個物件包含一些屬性和方法,它對應於自然語言中乙個有意義的名詞,描述了現實世界中的乙個物體(物理實體)或概念(抽象實體)。 這個抽象層次如下圖所示:

計算機世界中的抽象層次

*xo(x?-oriented) 最高的抽象層次

*oo(物件、類)

*po(過程、函式、變數)

*變數、運算、表示式、語句

*位元組(4位、8位、16位、32位、64位)

*二進位制串 0101011110001 最低的抽象層次

從上圖及以上的討論我們知道,軟體工程的發展歷史就是人們不斷追求更高的抽象、封裝和模組化的歷史。oo當然不會是歷史的終結。儘管不能精確得到oo之後是什麼,我們至少可以推知,oo之後的xo,必然將是比oo更高一級的抽象。它所依賴的核心概念必然高於幷包容物件這一概念。正如物件高於幷包容了函式和變數一樣。

二、 從維根斯坦在《邏輯哲學論》一書中的思想來看

前面我們已經知道,維根斯坦在《邏輯哲學論》 一書中提出了如下思想:

*世界可以分解為事實 ( the world divides into facts.)

*事實是由原子事實(atomic facts)組成的。

*乙個原子事實是多個物件(objects)的組合。

*物件是簡單的(基本的) the object is ******。

*物件形成了世界的基礎。

即: 世界---事實----原子事實----物件這樣乙個從整體到區域性、從抽象到具體的認識之鏈。在這個層次中,物件作為最基本的模組,構成了整個認識大廈的基石。物件通過相互之間的複雜的關聯構成了整個世界。這個觀點也是物件導向理論的基石。

上一段我們通過對計算機世界的分析得出,oo之後的發展,必將產生比oo更高一級的抽象的概念用於程式設計。按照維根斯坦的思想可以很自然地得出結論:這個概念就是事實(fact)。即物件導向之後是面向事實,oo之後是fo(fact-oriented)。   那麼,什麼是事實(fact)?讓我們再次重溫一下維根斯坦的觀點。

首先,世界是所有事實的總和。世界可以分解為事實。任一事實或者為真,或者不為真。(即事實應返回乙個布林變數,或為true,或為false)

其次,那些為真的事實,是由原子事實(atomic facts)組成的。

原子事實和簡單物件的關係是這樣的:乙個原子事實是多個物件(object)的組合。在原子事實中,物件以某種確定的方式相連。原子事實中物件相互連線的方式即是原子事實的結構。 也就是說,原子事實是有結構的,這種結構被維根斯坦看作是現實世界的模式(form)。

這裡,維根斯坦提出了幾個重要的概念:事實(fact)、原子事實(atomic fact)和模式(form)。

如果我們以上的推理過程正確的話,我們將得出乙個結論:物件導向(oo)之後是面向事實(fo),在面向事實(fo)的分析、設計和程式設計中,我們將主要圍繞事實(fact)、原子事實(atomic fact)和模式(form)這些基本概念來組織我們的軟體開發活動。在人們認識世界的層次結構中,這些概念是比物件(object)和類(class)更高一級的抽象。

5. 最後的極限

oo之後如果fo,那麼我們當然要問,fo之後又是什麼?再往後哪?有沒有乙個最後的極限?若有,極限何在?這是個很困難的問題,不過還是讓我們繼續思考下去,看看能有些什麼結果,儘管它可能會是十分愚蠢和幼稚。

我們知道,軟體的實質是人們以計算機程式語言為橋梁,將客觀感知世界對映於計算機世界中去,以解決人們在客觀感知世界中要解決的問題。這裡牽涉三個主要的範疇:

客觀感知世界--------計算機程式語言----------計算機世界

(1)計算機世界

在計算機世界中,可以想象的是,單位面積的一塊晶元上可以整合的電晶體數目總會有個上限,摩爾定律早晚要失效。另外,現在多數電腦採用的馮.諾依曼結構也需要被突破。(如平行計算的研究)

(2)計算機程式語言

現在的計算機程式語言,都是某種型別的形式語言。要解決乙個問題,首先我們必須為它構造演算法。也就是說,對於沒有演算法的問題,我們是束手無策的。這類問題被成為是「不可計算的」。它們的解不能由圖靈機來產生。這是我們面臨的乙個極限。

那麼乙個問題有了演算法,是不是就一定可以解決哪?很遺憾,答案是不。對於那些np(非多項式)問題,尤其是np完備的問題,儘管存在演算法,我們仍然是無法在多項式時間內解決的。著名的「哈密頓線路問題」和「旅行推銷員問題」都屬於這類問題。它們的共同特徵是,當問題的規模(或複雜度)線形增加時,解決該問題所要化的時間將呈指數上公升,以至於它們儘管理論上是可求解的,但實際上卻是不可能的。因為要花費的時間可能已經超過了宇宙的壽命。這也是我們面臨的乙個極限。

還需要指出,現在的計算機語言作為形式語言的一種,也必然具有形式語言自身所有的侷限性。數學的發展史上,曾經有三次危機,第三次危機是有羅素的乙個「佯謬」引發的悖論危機。為解決此危機,希爾伯特提出了巨集偉的形式化規劃,企圖使數學一勞永逸地處於無可爭辯的安全基礎之上。可是,2023年奧地利25歲的天才數學邏輯學家歌德爾提出了一條劃時代的定理,粉碎了希爾伯特形式化的美夢。哥德爾定理向我們展示,公理系統本身的協調性的陳述在被編碼成適當的算術命題後,將成為一道這樣「不能決定的」不能決定的命題。想象乙個表示式既不為真,也不為假,它的真假對乙個形式系統(計算機)而言它是不可判定的。因此在這方面,哥德爾定理是我們面臨的又乙個極限。

(3)客觀感知世界

現在讓我們假設軟體工程已經發展到了這樣乙個理想的境界,有一天我們實現了自然語言程式設計,是否就萬事大吉了?換句話,自然語言是否能很好地描述、表達客觀感知世界?   維根斯坦在《邏輯哲學論》裡已經指出了。

*世界的意義必定存在於世界之外;

*顯然倫理學是無法表述的。 倫理學是超越現實的;

*實際上存在著不可表達的東西;這顯示了它的存在;它是神秘的。

(見《邏輯哲學論》第六節)

也就是說,外部世界中存在一些我們可以感知卻無法用語言來表達的東西。

他接著說:

「對於那些不可言說的,必須保持沉默。」(whereof one cannot speak,thereof one must be silent)

這句話,成為我們最後的極限。

在討論完這三個範疇中我們將面臨的主要問題後,我們最後來討論一下人的主觀世界對軟體及軟體開發的影響。

6. 極限之外的空間

世界可以分為主觀想象世界和客觀可感知世界,或者說是內世界和外世界。其中,主觀想象世界是計算機從未涉足的空間。這是屬於我們個人的私有空間,充斥著我們自己離奇古怪的幻想和起伏不定的情緒。它具有極大的跳躍性和不確定性,常常以直覺、想象的方式進行著自己的活動。它們通常是語言所不能表達的。

儘管這個內世界是如此的複雜、混亂、難以捉摸,但它卻是我們與生俱來的一部分。   我們就是這樣的人。

就是這樣的人從事著軟體開發的工作。

這樣的人開發出來的軟體究竟在多大程度上是對客觀世界不折不扣的對映?還是這個對映過程已經被扭曲或摻雜了?軟體開發者的這個主觀想象世界,他們的歡樂、沮喪、奇想、恐懼、希望等等,究竟是怎樣影響著軟體開發的質量?

人們是要用計算機來複製整個世界?還是來複製人本身?

人們是在扮演上帝的角色嗎?

這樣的問題我實在不知該如何去解答,甚至覺得根本無從下手。

如果你還有足夠的耐心讀到這裡,請你也來想一想,希望它們不會使你頭疼。   :)

「自以為是的立法者(人類)犯下了乙個大錯,以為自己能定義整個軟體開發過程。他們既不了解其開始也不了解其結果。學術界試了一下,然後就知難而退了。商業界則對其毫無辦法。大型軟體開發商們斥巨資來製造**,明明想要扮演上帝的角色,卻還裝作自己是人類的公僕。所有人都在盯著鏡子裡的自己。計算機卻在一旁偷偷的笑。」

SQL及其使用 3

sql及其使用 3 sql索引 sql索引有兩種,聚集索引和非聚集索引,索引主要目的是提高了sql server系統的效能,加快資料的查詢速度與減少系統的響應時間 1,概念 資料庫索引是對資料表中乙個或多個列的值進行排序的結構,就像一本書的目錄一樣,索引提供了在行中快速查詢特定行的能力.2,優缺點 ...

極限挑戰第3季的最新訊息

現在的真人騷節目如雨後春筍般的出現我們的電視螢屏上,不管是好的還是不好的,一直在肆虐著我們的眼球。這麼多的真人騷節目,自然也就有人喜歡其中的某幾個,也有討厭其中的某幾個。對於喜歡的真人騷節目,我們就希望他一直演下去,對於不喜歡的節目,有的人不止是不看,還有可能去人家的地盤上嘲諷一下。目前而言,最好的...

ca qa 3 ILP 及其開發

指令可並行執行 本章和附錄h研究一系列通過提高指令並行度來擴充套件基本流水線概念的技術 理解本章中一些基礎的材料時並不要前兩節的全部思想,基於硬體動態方法的處理器 core系列 在桌面和伺服器佔主導 pmd市場,能耗是關鍵,80年代到最近的itanium,嘗試基於編譯器的方法 程式結構與硬體結構之間...