1、導語 編程思想之於軟體開發,正如建築結構之於一磚一瓦。不同的編程思想對於軟體如何構在某些地方略有相似,在很多地方又有著顯著的差異,而這些差異不僅僅在於語言的不同,而是編程開發思想的區別。本片文章將分別介紹結構化方法中的結構化設計和結構化分析,面向對象方法中的面向對象分析並分別總結優缺點。 2、結 ...
1、導語
編程思想之於軟體開發,正如建築結構之於一磚一瓦。不同的編程思想對於軟體如何構在某些地方略有相似,在很多地方又有著顯著的差異,而這些差異不僅僅在於語言的不同,而是編程開發思想的區別。本片文章將分別介紹結構化方法中的結構化設計和結構化分析,面向對象方法中的面向對象分析並分別總結優缺點。
2、結構化方法
上世紀60年代,由於電腦計算能力和處理的問題複雜度的急速增長,爆發了眾所周知的軟體危機。為了應對軟體危機帶來的危害,解決管理大型複雜軟體的難題,學術界與工業界共同研究並提出了許多有效的軟體開發方法。而其中影響最為深遠的,分支最為龐大的方法就是結構化方法。目前,很多軟體開發工作組對於結構化方法依舊情有獨鍾。結構化方法著重強調對現實世界的應用問題進行分解,面向過程設計問題空間的解域,強調自頂向下、逐步求精、模塊化設計,這與傳統軟體開發模式在一定程度上有所契合。結構化分析由結構化分析、結構化設計以及結構化程式設計三部分有機組合而成,接下來筆者將對結構化分析和結構化設計進行介紹。
2·1、結構化分析
結構化分析(Structured Analysis)是軟體工程中的一種方法,結構化分析和結構化設計可以分析軟體需求,將軟體設計和需求轉換為規格文件,最後生成軟體、硬體配置及相關的手冊及程式。結構化分析以數據在不同模塊中移動的觀點來看待一個系統,系統的功能可以用轉換數據流的程式來表示;其善用功能拆解(或由上到下設計)的信息隱藏特性,因此可以關註在重要的細節,而不會被無關的細節干擾。當細節的層級提高時,信息的廣度也隨之減少。結構化分析的結果是一組相關的圖,程式描述以及數據定義,這些數據描述一個程式為符合機能性需求所需要的數據以及需進行的轉換。
目前較為通用的結構化分析方法是由湯姆·狄馬克於1978年在著作《結構化設計和系統規格》中提出,其中包括的內容為:
a) 系統關係圖
b) 數據流程圖
c) 數據字典
系統關係圖是表示系統和外界環境之間的作用,系統關係圖可以表示一個系統和外界相關係統的輸入及輸出。系統關係圖將系統放在整個圖的中心,不描述其內部結構,周圍則是和其有關的系統、活動及環境,環境圖的目的是專註在哪些會影響系統需求及限制的外部因素及事件。
數據流程圖(DFD)是結構化分析方法中使用的工具,它反映了系統必須完成的邏輯功能,是一種功能模型,描述了程式中各個功能點的數據變化。在描述複雜的軟體系統的信息流向時,通常使用分層DFD來對數據流進行描述。分層DFD分為頂層、中層和底層,從圖中可以明顯看出自頂向下的設計特點
數據字典是指對數據的數據項、數據結構、數據流、數據存儲、處理邏輯、外部實體等進行定義和描述,其目的是對數據流程圖中的各個元素做出詳細的說明,使用數據字典為簡單的建模項目。在結構化分析中,數據字典的作用是給數據流圖上每個成分加以定義和說明,數據流圖上所有的成分的定義和解釋的文字集合就是數據字典,而且在數據字典中建立的一組嚴密一致的定義很有助於改進分析員和用戶的通信。
2·2、結構化設計
結構化設計方法給出一組幫助設計人員在模塊層次上區分設計質量的原理與技術。它通常與結構化分析方法銜接起來使用,以數據流圖為基礎得到軟體的模塊結構。SD方法尤其適用於變換型結構和事務型結構的目標系統。在設計過程中,它從整個程式的結構出發,利用模塊結構圖表述程式模塊之間的關係。結構化設計的步驟如下:
a) 評審和細化數據流圖;
b) 確定數據流圖的類型;
c) 把數據流圖映射到軟體模塊結構,設計出模塊結構的上層;
d) 基於數據流圖逐步分解高層模塊,設計中下層模塊;
e) 對模塊結構進行優化,得到更為合理的軟體結構;
2·3、結構化設計的優缺點
結構化開發的優點在於著重開發過程的整體性和局部功能的局部性,在整體優化的條件下考慮具體的分析設計,同時強調各個開發過程的完整性和順序性,嚴格的按照系統規格設計,及時總結反饋,這與傳統的軟體開發模式一致,也因此導致了結構化開發需要在早期開發中做好充足的數據調查,完備的規格設計,較為合理的管理以及對可能發生的問題具有一定的預見性,儘管自頂向下的設計模式符合大部分開發者的開發習慣,然而對於早期的準備要求相對苛刻,比較容易在開發過程中出現瑕疵而導致開發進度緩慢甚至推翻整個開發計劃。
3、面向對象方法
面向對象方法(Object-Oriented Method)是一種把面向對象的思想應用於軟體開發過程中,指導開發活動的系統方法,簡稱OO (Object-Oriented)方法,是建立在“對象”概念基礎上的方法學。與客觀實體有直接對應關係,一個對象類定義了具有相似性質的一組對象。而每繼承性是對具有層次關係的類的屬性和操作進行共用的一種方式。所謂面向對象就是基於對象概念,以對象為中心,以類和繼承為構造機制,來認識、理解、刻畫客觀世界和設計、構建相應的軟體系統。與結構化方法相比,面向對象方法提出的時間相對較晚,然而由於面向對象方法的特點讓其在軟體開發領域迅速被認可和接受。其特點為使用現實世界的概念抽象的思考問題,強調模擬現實中的概念而不是強調過程和演算法。
3·1、面向對象分析
面向對象分析(object-oriented analysis)一種新的系統分析方法,它是採用面向對象的風格進行系統分析和需求定義的重要方法。面向對象分析的關鍵在於理解問題空間並將其模型化,通過分析模型的屬性,進而對對象進行操作。由於面向對象程式設計課程給學生帶來的衝擊過於強烈深刻,在此不再多餘贅述何為對象何為抽象,感興趣的同學可以登錄北航的mooc網站觀看吳際老師的公開課。
面向對象分析的具體方法如下:
a) 認識對象及其屬性
b) 認識對象的整體及其組成部分
c) 區分整體對象以及組成部分,確定類的關係以及內部結構
d) 對象的形成及類的區分
e) 確定附加的系統約束
f) 對問題空間進行理解並抽象成模型
3·2、面向對象設計
面向對象設計是一種軟體設計方法,是一種工程化規範。面向對象設計的主要工作包括:
a) 確定需要的類
b) 給每個類提供一組完整的操作
c) 明確地使用繼承來表現共同點
從面向對象分析到面向對象設計是一個逐步擴充模型的過程。面向對象分析以實際問題為中心,可以不考慮與軟體實現相關的任何問題,主要考慮“做什麼”的問題;面向對象設計則是面向軟體實現的實際開發活動,主要考慮“怎麼做”的問題。
面向對象設計的主要原則如下。
1.模塊化
面向對象開發方法很自然地支持了把系統分解成模塊的設計原則:對象就是模塊。它是把數據結構和操作這些數據的方法緊密地結合在一起所構成的模塊。
2.抽象
面向對象方法不僅支持過程抽象,而且支持數據抽象。
3.信息隱藏
在面向對象方法中,信息隱藏通過對象的封裝性來實現。
4.低耦合
在面向對象方法中,對象是最基本的模塊,因此,耦合主要指不同對象之間相互關聯的緊密程度。低耦合是設計的一個重要標準,因為這有助於使得系統中某一部分的變化對其他部分的影響降到最低程度。
3·3、面向對象方法的優缺點
面向對象方法與結構化方法最大的不同點在於對問題分析的角度。面向對象方法更加傾向於從問題出發,分析所需的對象的實質特性並構建其結構,這樣更加符合人的思維,同時面向對象的特點更加適合於不著眼於規格的增量型開發,因而更加受到敏捷性開發團隊的青睞。同樣,面向對象方法可以大大提高代碼的復用率,減少開發的工作量,同時由於面向對象語言的特點保證了代碼的安全性和可修改性。然而這種開發模式有一個較為明顯的缺陷,由於對象的構建基於開發人員對於對象特點的認知而不是根據一定的規格,在代碼整合的過程中會由於不同人的認知差異而導致代碼合併的困難,降低開發效率。
4、總結
結構化開發和麵向對象開發都是目前相對流行的開發方式,選擇正確的開發方式將對整個開發計劃有著至關重要的作用。正如上文所提到的,不同的開發模式可能有不同的方法選擇,如何審慎的分析哪種開發方法更加適合自己的項目將是每一個開發團隊終將直面的問題,而如何解決這個問題也會很大程度上影響整個開發計劃的相率和軟體的保障。
5、引用
1、Tom DeMarco (1978). Structured Analysis and System Specification. Yourdon Press, New York, 1978.
2、《Object Oriented Programming》,中科永聯高級技術培訓中心。
3、CN博客http://blog.csdn.net/dql1982/article/details/2048748
4、維基百科 面向對象方法、結構化方法