結構化方法和面向對象方法的比較


結構化方法和面向對象方法的比較

翁松秀

北京航空航天大學

    摘要:編程之精髓在於編程思想,而不同的編程方法有不同的編程思想。結構化程序設計方法一直以來都是編程人員基本的編程方法,而近年來流行的面向對象方法也備受人們青睞。文章通過介紹編程世界的這兩種主要編程方法,結構化方法和面向對象方法的分析、設計和應用。並在最后對兩種方法進行比較分析,比較結構化方法和面向對象方法編程思想的異同和兩種方法的應用。

關鍵詞:結構化方法;面向對象方法;編程思想;再抽象;再模塊化;

   0 前言

  結構化方法和面向對象方法是當前軟件開發最常用的方法。基於“瀑布模型”的軟件開發方法中,以軟件架構為核心,采用結構化設計和分析方法將軟件開發的生命周期划分為制定計划、需求分析、軟件設計、程序編寫、軟件測試和運行維護六個基本階段。而在通過迭代式和增量式進行開發的敏捷軟件開發方法中,主要采用面向對象的設計和分析方法。結構化方法與面向對象方法的使用,與具體的開發環境和開發方法有關,如傳統軟件工程中更適合用結構化方法,而敏捷軟件開發方法中面向對象開發方法更受青睞。

  1   結構化方法

  結構化編程思想由艾慈格·迪傑斯特拉在1976年在《GOTO陳述有害論》中提出,1975年賴瑞·康斯坦丁和愛德華·尤登提出結構化設計,1978年湯姆·迪馬克和愛德華·尤登等在1975年提出結構化分析,后來逐漸被完善,形成現在軟件開發方法中主要采用的結構化方法。結構化方法從功能上對系統進行划分,將系統按功能划分成各個模塊,將子模塊編寫成子程序,通過子程序之間的結構和層次之間的耦合來解決復雜的問題。結構化方法按軟件周期可划分為結構化分析、結構化設計和結構化實現,這里主要討論SA和SD。

  1.1 結構化分析(Structured Analysis)

  結構化分析是通過數據來對需求進行分析,功能模塊之間通過數據進行聯系,采用的建模技術有:數據流圖DFD(Data Flow Diagram)、ERD(Entity Relation Diagram)和數據字典DD(Data Dictionary)等。數據在結構化分析方法中舉足輕重,就相當於血管之於人體,系統的各個模塊通過數據的傳遞進行溝通和聯系,導致了功能模塊的強耦合性,模塊之間的耦合性降低了結構化程序的可重用性和可維護性。主要分析步驟如下:

  ①  分析當前的情況,做出反映當前物理模型的DFD;

  ②  推導出等價的邏輯模型的DFD;

  ③  設計新的邏輯系統,生成數據字典和基元描述;

  ④  建立人機接口,提出可供選擇的目標系統物理模型的DFD;

  1.2 結構化設計(Structured Design)

  結構化設計階段將分析階段得到的目標系統物理模型的DFD表示的具體信息轉化成程序結構的設計描述,過渡成軟件結構。在這個過程中采用的建模技術有:系統結構圖SSD(System Struct Diagram)。這個過程分兩步完成,第一步是從分析得到的結果出發,構造一個設計方案,決定系統功能模塊的結構。第二步進行詳細設計,確定每個功能模塊的內部控制結構和算法,最終產生每個功能模塊的程序流程圖。具體步驟如下:

  ①   評審和細化數據流圖;

  ②   確定數據流圖的類型;

  ③   把數據流圖映射到軟件模塊結構;

  ④   基於數據流圖逐層分解高層模塊,設計中下層模塊;

  ⑤   對模塊的控制結構和算法進行優化;

  ⑥   描述模塊接口;

  1.3 結構化方法的應用

  結構化方法對需求變化的適應能力比較弱,功能的改變甚至會牽一發而動全身,但由於結構化分析和設計對系統進行完整的架構和具體功能的分析以及實現的各個階段嚴謹的測試,所以結構化程序可靠性高。基於結構化分析、設計和實現中的這些主要優點和缺點,結構化比較適合於像操作系統、實時處理系統等這樣以功能為主的系統。比如絕大多數操作系統都是以結構化語言C語言寫的。

  2   面向對象方法

  面向對象OO(Object Oriented)方法把面向對象的思想應用於軟件開發,將系統中的數據和相關操作進行分類和封裝,抽象成一種新的數據結構——類,並在系統的實現過程中實例化,實例化的對象與客觀實體有直接對應關系,通過對象的屬性和行為,以及對象之間的關系來解決實際問題。面向對象方法吸收了結構化的基本思想和優點,在數據抽象的基礎上添加對操作的抽象,使面向對象程序具有高重用性。面向對象方法其實就是結構化的再抽象和再模塊化。

  2.1 面向對象分析(Object Oriented Analysis)

  面向對象分析階段通過分析,確定問題空間和解空間中所有對象及其屬性,進而確定每個對象的操作,即對事務的處理能力,然后通過對象之間的行為來確定對象之間的關系。具體步驟如下:

  ①   確定問題域和解空間;

  ②   區分類和對象;

  ③   區分整體對象以及組成部分,確定類的關系以及內部結構;

  ④   定義類的數據(屬性)和操作(處理事務的行為);

  ⑤   確定附加的系統約束

  2.2 面向對象設計(Object Oriented Design)

  面向對象設計階段主要對分析階段的結果進行進一步的規范化整理,以便后面的具體實現。OOA階段和OOD階段沒有明顯的划分界限,兩者相互銜接,最能體現出這種關系的是近年來出現的新的軟件生命周期模型——噴泉模型。如圖(1)

                                                                                           圖(1)

  面向對象設計階段的主要步驟如下:

  ①   改進和完善分析階段對系統的分析結果;

  ②   設計交互過程和用戶接口;

  ③   設計任務管理、子系統以及任務之間的協調方式;

  ④   設計全局資源,確定任務或者子系統的資源分配;

  ⑤   設計對象;

  2.3 面向對象方法的應用

  面向對象方法從問題的模型開始,模擬人對事物的認識對事物進行分類,進而識別對象,通過整理對象的內部結構和對象之間的關系不斷細化問題,它的本質就是敏捷開發方法中的迭代和遞增。開發過程通過不斷地對功能進行反復的迭代,使系統的功能不斷完善。所以面向對象方法適用於SCRUM、XP(極限編程)、CRYSTAL(水晶編程)、PDD(特性驅動開發)等敏捷軟件開發。

  3   結構化方法和面向對象方法的比較

  3.1 編程思想的比較

  軟件開發的過程就是人們使用各種計算機語言將現實世界的問題翻譯到計算機世界,可描述為圖(2):

圖(2)

  結構化方法的編程思想是自上而下,逐步求精,按系統的功能進行模塊化設計,將一個復雜和完整的系統按功能分解成小的模塊,模塊內由順序、分支和循環等基本控制結構組成,各模塊的功能由子程序進行實現。如圖(3)

圖(3)

  而面向對象方法通過模擬人類日常的邏輯思維中經常采用的思想方法和原則,將系統中的事物進行抽象、分類、繼承和封裝。通過抽象出來的類之間的行為關系來確定整個系統的聯系,並在系統中實例化需要的對象,在系統的設計中盡可能地運用人類的思維方式。與結構化相比面向對象更符合人們對事物和解決問題的過程和思維方法。如圖(4)

圖(4)

  3.2 應用的比較分析

  結構化開發方法開發前期對系統的功能需求和非功能需求進行完整的架構,使軟件具有高可靠性。開發過程自上而下,按照嚴謹的軟件開發生命周期:計划、分析、設計、編碼、測試和維護逐個階段進行開發,各個階段相互銜接,每一個階段都要通過嚴格的審查,測試通過才能進入下一個階段,保證了軟件的高質量。所以比較適合於像操作系統、實時處理系統等這樣以功能為主的系統。而由於面向對象方法迭代和遞增的本質,所以面向對象方法更適合於在敏捷軟件開發中使用。如SCRUM、XP(極限編程)、CRYSTAL(水晶編程)、PDD(特性驅動開發)等。

參考文獻:

[1]雷西玲,謝天保,何文娟. 面向對象方法與結構化方法的比較. 2001

[2]邵維忠,楊芙清. 面向對象的系統分析. 1998

[3]蔡希堯. 面向對象技術. 2001

[4]翁松秀. 敏捷軟件開發與傳統軟件工程概述比較. 2016

[5]張莉,裘國永. 結構化方法與面向對象方法的比較分析. 陝西師范大學學報. 2001

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM