結構化與面向對象方法之比較
一、總述
早期的程序開發,如C語言程序開發,使用的基本都是結構化開發方法。現在較常用的開發方法為面向對象開發(Object-Oriented),分為分析(Analysis)、設計(Design)、編程(Programming)三部分。
本文將對結構化方法和面向對象方法簡單進行分別的討論和分析,並對比這兩種方法。
二、結構化方法[1]
結構化方法(SD方法)是一種傳統的軟件開發方法,它是由結構化分析、結構化設計和結構化程序設計三部分有機組合而成的。它的基本思想:把一個復雜問題的求解過程分階段進行,而且這種分解是自頂向下,逐層分解,使得每個階段處理的問題都控制在人們容易理解和處理的范圍內。
結構化方法的基本要點是:自頂向下、逐步求精、模塊化設計、結構化編碼。
結構化分析方法是以自頂向下,逐步求精為基點,以一系列經過實踐的考驗被認為是正確的原理和技術為支撐,以數據流圖,數據字典,結構化語言,判定表,判定樹等圖形表達為主要手段,強調開發方法的結構合理性和系統的結構合理性的軟件分析方法。
結構化設計方法是以自頂向下,逐步求精,模塊化為基點,以模塊化,抽象,逐層分解求精,信息隱蔽化局部化和保持模塊獨立為准則的設計軟件的數據架構和模塊架構的方法學。
結構化方法按軟件生命周期划分,有結構化分析(SA),結構化設計(SD),結構化實現(SP)。
三、面向對象方法[2]
面向對象方法(Object-Oriented Method)是一種把面向對象的思想應用於軟件開發過程中,指導開發活動的系統方法,簡稱OO (Object-Oriented)方法,是建立在“對象”概念基礎上的方法學。對象是由數據和容許的操作組成的封裝體,與客觀實體有直接對應關系,一個對象類定義了具有相似性質的一組對象。而每繼承性是對具有層次關系的類的屬性和操作進行共享的一種方式。所謂面向對象就是基於對象概念,以對象為中心,以類和繼承為構造機制,來認識、理解、刻畫客觀世界和設計、構建相應的軟件系統。
面向對象方法的實質就是主張從客觀世界固有的事物出發來構造系統,提倡用人類在現實生活中常用的思維方法來認識、理解和描述客觀事物,強調最終建立的系統能夠映射問題域,也就是說,系統中的對象以及對象之間的關系能夠如實地反映問題域中固有事物及其關系。
面向對象開發是基於結構化開發的,還保留着結構化開發中的“函數”、“結構體”等元素,但面向對象方法作為一種新型的獨具優越性的新方法正引起全世界越來越廣泛的關注和高度的重視,它被譽為"研究高技術的好方法",更是當前計算機界關心的重點。十多年來,在對OO方法如火如荼的研究熱潮中,許多專家和學者預言:正像70年代結構化方法對計算機技術應用所產生的巨大影響和促進那樣,90年代OO方法會強烈地影響、推動和促進一系列高技術的發展和多學科的綜合。
四、結構化與面向對象方法之比較
1、結構化方法的優點:
(1)、從系統整體出發,強調在整體優化的條件下“自上而下”地分析和設計,保證了系統的整體性和目標的一致性;
(2)、結構化方法強調功能抽象和模塊化。由於它采取了分塊處理問題的方法,可以把一個比較復雜的問題分解為若干個容易處理解決的部分,從而降低了問題處理的難度;
(3)、嚴格區分系統開發的階段性,每一階段的工作成果是下一階段的依據,便於系統開發的管理和控制;
(4)、文檔規范化,按工程標准建立標准化的文檔資料,便於軟件在以后的維護。而且由於結構化方法思路清晰,條理清楚,又有效地分解了繁復的問題,使得編寫程序時清晰明了,也大大簡化了編程人員繁雜的工作。
2、結構化方法的缺點
(1)、重用性差:結構化分析與設計清楚的定義了系統的接口, 當系統對外界接口發生變動時,可能會造成系統結構產生較大變動, 難以擴充新的功能接口;
(2)、軟件可維護性差: 由於軟件的可修改性差,導致維護困難,造成維護時費用和成本高,可維護性變差;
(3)、開發的軟件難以滿足用戶需要:用傳統的結構化方法開發大型軟件時,往往此系統涉及各種不同領域的知識,在開發需求模糊或需求不斷變化的系統時,所開發出的軟件系統往往不能真正滿足用戶的需要。
3、面向對象方法的優點
(1)、編程容易。因為面向對象更接近於現實,所以你可以從現實的東西出發,進行適當的抽象。對象是有狀態的(也就是屬性),對象的行為與它的所處的狀態密切相關;
(2)面向對象方法的可重用好,並且由於它是把大的問題分解成相互獨立的小問題處理,降低了開發的技術難度,開發工作的管理也變的容易了,開發大型軟件邊的容易,成本也降低了;
(3)它與人類習慣的思維方法一致,使得使用者和維護人員都容易理解,在用戶使用時不會出現理解困難,在軟件維護中可維護性也較高,並且易於測試和調試;
(4)、面向對象可以使工程更加模塊化,實現更低耦合高內聚思想;
(5)、符合人們認識事物的規律,系統開發循序漸進,反復修改,確保較好的用戶滿意度。
4、面向對象方法的缺點
(1)、開發過程管理要求高,整個開發過程要經過“修改—評價—再修改”的多次反復;
(2)、面向對象方法通過信息隱藏和封裝等手段屏蔽了對象內部的執行細節,控制了錯誤的蔓延,但發生錯誤時,定位故障的代價大,尤其是繼承的深度很大時。對於需求變化頻繁的系統,得到一個高度可復用的面向對象軟件系統設計是很困難的事情。
(3)、開發人員易將原型取代系統分析;缺乏規范化的文檔資料,不利於以后的維護。[3]
5、比較兩種開發方式
面向對象開發更加接近於現實生活,可以使人的思路更加明確,而面向結構開發則更注重思維邏輯,具有一定難度。結構化的語言,像C語言一樣,是以函數為編程主體。面向對象的語言,像java等,是以對象為編程主體。區別:函數只是操作,數據由其它的地方提供,對象是數據與操作的封裝,是獨立的個體。
五、個人思考
我想就我自己的經驗談一談結構化和面向對象方法。對這兩種方法的接觸來自C語言程序設計以及面向對象程序設計這兩門課程。或許以語言的學習來說明,雖然不是很契合軟件開發這一主題,但因為是個人經歷,總算也能有點發言權,總有點共通之處。
在大一剛開始學習編程的時候,我們以C語言作為入門語言。經過了一個學期的學習,總算由一開始的無比費勁變得較為熟練了。總的來說,以C語言為代表的一眾結構化設計語言邏輯嚴密,操作和使用都有諸多規定章程,感覺看上去就很適合科學研究,雖然復雜但是用得漂亮就能令人無比驚艷,有種孤絕的高級感。
后來在大二,我們經歷了和OO激烈抗爭的一個學期。拋開課程制度等等問題,單純討論面向對象方法,可以說是為我打開了一扇新世界的大門。一開始寫作業的時候,因為其實是不會java的,所以只是用C寫完了再簡單地修改一下語法就當作最終的作業交了上去。后來在逐漸掌握了java之后,發現面向對象方法其實是一種新穎有效的思考問題的方式。它的封裝將“模塊化”放大到極致,讓人可以較為獨立地思考每一部分的功能。個人以為與這種方式相比,C語言等結構化設計語言更傾向於一個整體,雖然函數起到了“模塊化”的作用,但還是沒法做到完全獨立,讓人在使用的時候還是要考慮很多。這一點在本學期編譯設計課程中體現地更明顯,在工程的規模上升了,需要處理需要使用的量明顯增多的情況下,就不得不考慮很多全局的設計,否則依靠大量傳參是較復雜很容易凌亂的。我曾經嘗試用java重寫以前的C語言程序,還是發現能有較明顯的順暢感。雖然我的經驗依然不夠,解決的問題尚停留在較低級的階段,但總的來說,我覺得面向對象方法令人思路相對清晰,更加貼近實際生活中人的思考方式。
六、參考文獻
[1]百度百科——結構化方法 baike.baidu.com/結構化方法
[2]百度百科——面向對象方法 baike.baidu.com/面向對象方法
[3]結構化方法和面向對象方法之比較http://wenku.baidu.com/link?url=9zY7VV2CgyyDMunNLyfSMzgrcZIKJEySyCsw6qlEpGNiP4Y_Oxw8PRYCaD5yoHKNg720kk7RXoooTlEDqEVnYfKYEELBFnFGtRHIYUg4Sq