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