摘要本文在介紹程序設計發展歷程的基礎上,分別對面向計算機、面向過程和面向對象3個階段的程序設計思想進行了分析、比較,最后總結得出程序設計思想變遷所帶來的啟示。
關鍵詞程序設計思想 面向計算機 面向過程
中圖分類號:TP31文獻標識碼:A
上個世紀中葉,隨著第一臺電子計算機的問世,人類開始致力于計算機方面的研究。經過短短50多年的迅猛發展,其體積越來越小,功能越來越強,應用領域也越來越廣泛,可以說,計算機已經成為當今世界人類進行信息處理的一種不可或缺的工具。
我們知道,計算機是一種借助程序來控制操作過程的電子設備。因此,計算機的發展和程序的開發息息相關,而程序開發的優劣又受到了不同時期程序設計思想發展的制約。
1 程序設計思想的發展歷程
長期以來,程序設計思想一直隨著人類認識的進步而發生著改變。最初,由于受到計算機硬件的局限,程序設計人員在進行編程時,往往會為節省一個存儲字節而煞費苦心。后來,由于計算機存儲能力的提高,人們逐步開始關注程序的清晰框架結構。1969年,有學者提出了結構化程序設計思想,其著眼點是“面向過程”,強調 “算法設計”,編寫出來的程序在可調試性、可讀性及可維護性等方面都比早期的程序設計方法有了很大的改進。1970年,第一個結構化程序設計語言--Pascal語言出現,標志著結構化程序設計(也稱為面向過程的程序設計)時期的真正開始。
到了70年代末期,由于C++,JAVA等眾多面向對象的程序設計語言的出現,以及結構化程序設計方法逐步暴露出來的一系列弊端,隨之形成了一種全新的程序設計思想——面向對象,此時的程序設計更加接近人類的自然邏輯,并開始大量運用抽象的概念進行編程。時至今日,面向對象的程序設計技術日益成熟,已被越來越多的程序開發人員所接受。
2 面向計算機的程序設計思想介紹
在出現結構化程序設計思想之前,由于程序設計人員編程時需要過多的考慮機器的性能,故將這一時期統稱為面向計算機的程序設計。起初,程序設計完全手工化,采用的語言也僅僅是機器語言,這類語言可以直接被計算機識別,但對人類來說卻是難以掌握。設計人員關注的重心是使程序盡可能地被計算機接受并按指令正確地執行,至于計算機的程序能否讓人理解并不重要。軟件開發工作只能由極少數的軟件工程師完成,這無疑造成了軟件開發的難度大,周期長,功能簡單,界面不友好等缺陷。隨后出現的匯編語言,雖然將機器指令映射為一些能讀懂的助記符,如ADD、SUB等,在一定程度上縮小了程序語言與人類的自然語言之間的鴻溝,但與人類的思想仍然相差甚遠。同時,由于匯編語言的抽象層次太低,此時的程序設計仍需注重計算機的硬件系統,程序員編程時不得不考慮大量的機器細節。
簡而言之,面向計算機的程序設計的基本思想就是:注重機器、逐一執行。
3 面向過程和面向對象程序設計思想的比較
3.1 設計方法的比較
面向過程在解決問題時采用功能分解方法,即將一個系統看作一些功能塊的組合,這些功能塊可以被進一步分解,直到參與設計和編程的人員可以理解的步驟和過程為止。
面向對象采用為數據和代碼建立分塊的內存區域,從而實現對程序模塊化的方法。
3.2 特點的比較
面向過程是一種追求結構良好的程序設計方法,其設計開發的程序特點是:(1)具有單入口,單出口的性質;(2)不包含不會停止執行的語句,即執行時間是有限的: (3)沒有無用語句,即程序中所有語句都有被執行的機會。
面向對象的主要特點是:借助類的封裝以及模塊化技術,有效地控制了程序的復雜性;提高程序的重用性及其可維護性;同時,抽象化概念的引入大大擴展了計算機系統的描述和處理范圍,更加符合人們習慣的思維方法,便于分解大型的復雜多變的問題。
3.3 局限性比較
面向過程的局限性主要表現以下三個方面:
(1)程序的可重用性差,不能直接繼承和引用巳經編好的應用程序的某些部分,程序設計人員每進行一項新系統的開發,幾乎都要從零開始,并且要針對具體問題做大量重復而繁瑣的工作。(2)由于程序的數據與有關操作相分離,致使程序的修改和維護較為復雜。(3)數據處理范圍較小,無法準確描述文本、圖形、圖像、影像、聲音等多種數據類型,從而難以適應大型軟件的設計。
面向對象的局限性主要表現在兩個方面:
(1)由于程序設計者的設計思想和方法、策略大多分布于眾多不連續的程序段中,嚴重影響了維護人員對于程序的理解。(2)繼承機制的廣泛使用,大大增加了程序依賴性分析的難度。
3.4 基本思想的比較
面向過程采用的是自頂向下設計過程庫,逐步加以細化程序設計思想。
面向對象的基本設計思想則是自底向上設計庫類,并把組件的實現和接口分開。
3.5 可擴展性比較
面向過程技術設計開發的程序一旦功能變化,就會危及整個系統,擴展性差。
面向對象的程序可以通過修改或增加操作進行功能的重建,而基本對象結構不變,擴展性好。
3.6 控制程序方式的比較
面向過程是通過設計程序以調用或返回程序。
面向對象則通過“事件驅動”來激活和運行程序。
3.7 處理問題時的出發點比較
面向過程處理問題時強調將過程抽象化和模塊化,以過程為中心構造或處理客觀世界問題的。
面向對象處理問題時強調把問題域的要領直接映射到對象及對象之間的接口上,是用符合人們通常的思維方式來處理客觀世界的問題。
3.8 學習者的接受程度的比較
面向過程的程序設計知識內容相對少,對于初學者而言易于掌握。
面向對象的程序設計知識內容廣,概念多,很多知識又比較抽象,初學者難于理解。
3.9 編程語言的比較
面向過程的程序設計語言主要發展于70年代之前,如:C、BASIC、FORTRAN等。
面向對象的程序設計語言主要形成于70年代以后,如:C++、VB、JAVA等。
3.10 常用概念或術語的比較
面向過程多借助過程、函數、數據等概念描述程序設計。
面向對象采用對象、類、消息、繼承等術語描述程序設計。
3.11 要素的對應關系比較
面向過程以算法為中心,由算法完成對數據的操作,
面向對象技術是以屬性為中心,以消息和方法機制完成對對象的操作,對象作為數據,而不是作為過程被描述。
3.12 程序執行機制的比較
面向過程采用單線程體系結構,每個進程都有一段專用內存區域 ,程序在某一時刻只執行一條語句。
面向對象技術多采用多線程體系結構,允許線程間共享相同的內存單元,并利用這些共享單元來實現數據交換,實時通信及必要的同步操作,在程序執行過程 中為每個線程部分分配代碼,讓其分別動態執行。多線程的實現,可以有效地改善與用戶的交互,使系統得以同時處理多個請求。
4 軟件設計思想變遷帶來的啟示
由于軟件設計思想的變遷,程序開發理念也在不斷得以發展、進化,面向對象技術對數據和算法的封裝,以及繼承多態機制可實現世界的任何對象,使原本在面向過程中難以實現的問題變得既規范又容易,特別為大型軟件團體多人同時開發提供了條件。由于具有更好的可靠性、實用性、可修改性、可維護性、可重用性及易讀易管理等優點,面向對象技術已經發展成為當今軟件開發主流。但同時我們也應該記住,面向對象存在許多不足,如何在實際應用中彌補這些不足,值得每個程序設計人員進行深入研究。我們希望計算機編程思路盡可能地與人類的思維靠近,計算機的編程能夠為更多的人所掌握和利用。
參考文獻
[1]柳青.計算機應用基礎[M].北京:高等教育出版社.2008.
[2]丁益民.程序設計方法發展的幾個階段.武漢工程職韭技術學院學報,2001.6.
[3]張嵐.淺談面向對象的程序設計.內蒙古科技與經濟,2009.3.
[4]喻梅.結構化程序設計方法與面向對象程序設計方法之比較.科技信息,2009.14.