一、基本概念
1、結構化方法
結構化方法是一種傳統的軟件開發方法,它是由結構化分析、結構化設計和結構化程序設計三部分有機組合而成的。
基本思想:把一個復雜問題的求解過程分階段進行,而且這種分解是自頂向下,逐層分解,使得每個階段處理的問題都控制在人們容易理解和處理的范圍內。
2、面向對象方法
面向對象方法是一種把面向對象的思想應用於軟件開發過程中,指導開發活動的系統方法,簡稱OO,是建立在“對象”概念基礎上的方法學。對象是由數據和容許的操作組成的封裝體,與客觀實體有直接對應關系,一個對象類定義了具有相似性質的一組對象。
基本思想:盡可能模擬人類習慣的思維方式,使開發軟件的方法與過程盡可能接近人類認識世界、解決問題的方法與過程, 也就是使描述問題的問題空間與實現解法的求解空間在結構上盡可能一致。
二、兩者對比
1、基本單位不同
結構化方法的基本單位是模塊。
面向對象方法的基本單位是對象。
2、分析方法不同
結構化分析方法是一種面向數據流而基於功能分解的分析方法, 在該階段主要通過采用數據流程圖、編制數據字典等工具, 描述邊界和數據處理過程的關系, 力求尋找功能及功能之間的說明。
面向對象分析是把對問題域和系統的認識理解, 正確地抽象為規范的對象( 包括類、繼承層次) 和消息傳遞聯系, 最終建立起問題域的簡潔、精確、可理解的面向對象模型, 為后續的面向對象設計和面向對象編程提供指導。面向對象分析通常建立三種模型: 對象模型、動態模型、功能模型。其中, 對象模型描述了系統的靜態結構,確定類的名稱和類間的關系;動態模型表示瞬時的、行為化的系統的“ 控制”性質, 規定了對象模型中的對象的合法變化序列;功能模型表明了系統中數據之間的依賴關系, 以及有關數據的處理功能。
3、各自局限
(1)結構化方法
i.不能直接反映問題域: 結構化分析方法以數據流為中心, 強調數據的流動及每一個處理過程, 不是以問題域中的各事物為基礎, 打破了各事物的界限, 分析結果不能直接反映問題域, 容易隱蔽一些對問題域的理解偏差。
ii.數據和代碼缺乏保護機制: 一個特定全程數據既可以被操作這些數據的過程訪問, 也可以被其他過程訪問, 這給程序設計帶來了不安定因素, 一個不正常的數據修改或者過程調用可能會破壞正常的程序執行流程或結果。
iii.分析和設計體系不一: 結構化分析的結果是數據流圖, 結構化設計的結果是模塊結構圖。 二者的表示體系不一致, 分析文檔很難與設計文檔對應, 所以從分析到設計的“ 轉換”過程容易因理解上的錯誤而使得設計文檔與用戶的原本需求相差甚遠。
iv.開發過程復雜: 由於結構化方法將過程和數據分離為相互獨立的實體, 程序員在編程時必須時刻考慮到所要處理的數據的格式。 對於不同的數據格式做相同的處理或對於相同的數據格式做不同的處理都需要編寫不同的程序, 而且往往不能對數據的安全性進行有效的控制。 如果程序進行擴充或升級, 也需要大量修改函數, 因此結構化程序的可重用性不好。 要使數據與程序始終保持兼容, 已成為程序員的一個沉重的負擔。
(2)面向對象方法
i.開發過程管理要求高:在面向對象分析過程中,需要多次迭代,開發過程要經過“修改-評價-再修改”的多次反復。
ii.系統復用性低:面向對象方法通過信息隱藏和封裝等手段屏蔽了對象內部的執行細節,控制了錯誤的蔓延,但發生錯誤時,定位故障代價大,對於需求變化頻繁的系統,很難得到一個高度可復用的面向對象軟件系統設計。
iii.開發人員易將原型取代規范系統分析:缺乏規范化的文檔資料,不易於后期維護。
三、個人體會
在用C語言寫時,我需要想的是,我要做什么事情,我需要完成什么功能,自然,完成不同的功能就要用到不同的模塊;而在學習JAVA時,我需要思考的是,有幾個對象,這個對象需要什么屬性,需要完成什么事情,與其他對象之間又有什么聯系。
所以在設計C語言的結構時,我是這么一層一層,逐漸細化設計的,功能之間是利用數據流進行聯系。在真正實現時,如果發現哪個功能還不完善或可以更加細化時,需要由下往上依次修改子模塊,工作量比較大。

而在設計JAVA語言時,我基本是利用UML圖設計,不存在層次關系,每個類就是一個對象,類里包括了對象的屬性和對象可以做的事情,類之間通過發送請求來進行通信。我感覺實現起來比C語言更為方便,它的繼承機制很好地提高了代碼的復用性,並且在進行功能擴展時,僅需要設計新的對象,或在對象原有基礎上進行擴展。

結構化和面向對象是軟件工程的程序設計方法中最本質的思想方法。結構化編程的基本思想就是把大的程序划分為若干個相對獨立、功能簡單的程序模塊,它以過程為中心, 強調的是過程, 強調功能和模塊化, 通過一系列過程的調用和處理完成相應的任務。 面向對象編程以對象為中心, 是對一系列相關對象的操縱, 發送消息給對象, 由對象執行相應的操作並返回結果, 強調的是對象。 理論上, 面向對象的程序設計方法將產生更好的模塊內聚和耦合特性, 使得軟件更易於重用與維護。在執行效率上來說,結構化方法比面向對象方法產生的代碼更直接,更高效。從應用的范圍看,結構化方法適用於數據少而操作多的問題。時間證明對於像操作系統這樣的以功能為主的系統,結構化方法比較適應它。面向對象方法正好相反,對於數據庫,信息管理等以數據為主的而操作較少的系統,用面向對象方法描述要好於結構化方法。 在實踐中程序設計方法關注軟件生命周期的各個環節, 從需求分析、總體設計到編碼、測試和維護,同時設計方法在各個階段需要工具和環境的支撐, 因此在選擇程序設計方法時, 需要綜合考慮這些因素。
四、參考文獻
- http://baike.baidu.com/view/551681.htm,百度百科,結構化方法
- http://baike.baidu.com/subview/7867/11370681.htm,百度百科,面向對象方法
- http://www.docin.com/p-725901488.html,結構化方法與面向對象方法之比較
- 《程序設計中過程化方法與面向對象方法的比較》,符於江,2008
