結構化方法和物件導向方法的比較
翁松秀
北京航空航天大學
摘要:程式設計之精髓在於程式設計思想,而不同的程式設計方法有不同的程式設計思想。結構化程式設計方法一直以來都是程式設計人員基本的程式設計方法,而近年來流行的物件導向方法也備受人們青睞。文章通過介紹程式設計世界的這兩種主要程式設計方法,結構化方法和物件導向方法的分析、設計和應用。並在最後對兩種方法進行比較分析,比較結構化方法和物件導向方法程式設計思想的異同和兩種方法的應用。
0前言
結構化方法和物件導向方法是當前軟體開發最常用的方法。基於「瀑布模型」的軟體開發方法中,以軟體架構為核心,採用結構化設計和分析方法將軟體開發的生命週期劃分為制定計畫、需求分析、軟體設計、程式編寫、軟體測試和執行維護六個基本階段。而在通過迭代式和增量式進行開發的敏捷軟體開發方法中,主要採用物件導向的設計和分析方法。結構化方法與物件導向方法的使用,與具體的開發環境和開發方法有關,如傳統軟體工程中更適合用結構化方法,而敏捷軟體開發方法中物件導向開發方法更受青睞。
1結構化方法
結構化程式設計思想由艾慈格·迪傑斯特拉在2023年在《goto陳述有害論》中提出,2023年賴瑞·康斯坦丁和愛德華·尤登提出結構化設計,2023年湯姆·迪馬克和愛德華·尤登等在2023年提出結構化分析,後來逐漸被完善,形成現在軟體開發方法中主要採用的結構化方法。結構化方法從功能上對系統進行劃分,將系統按功能劃分成各個模組,將子模組編寫成子程式,通過子程式之間的結構和層次之間的耦合來解決複雜的問題。結構化方法按軟體週期可劃分為結構化分析、結構化設計和結構化實現,這裡主要討論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
結構化方法和物件導向方法之比較
從目前大多數資訊系統的開發現狀來看,結構化方法是運用最為普遍,同時也是最為成熟的一種開發方式。其基本要點是以系統的邏輯功能設計和資料流關係為基礎,根據資料流程圖和資料字典,通過 自上而下 和 自下而上 的反覆,逐層把系統劃分為多個大小適當 功能明確 具有一定獨立性並容易實現的模組,從而把複雜系統的設...
結構化方法與物件導向方法的比較
結構化方法,是70年代末,由demarco等人提出的,旨在減少分析活動中的錯誤,建立滿足使用者需求的系統邏輯模型。結構化方法是強調開發方法的結構合理性以及所開發軟體的結構合理性的軟體開發方法,也稱為新生命週期法,是生命週期法的繼承與發展,是生命週期法與結構化程式設計思想的結合。其基本思想是用系統工程...
結構化方法與物件導向方法之應用比較
結構化方法與物件導向方法之應用比較 結構化方法是計算學科的一種典型的系統開發方法。它採用了系統科學的思想方法,從層次的角度,自頂向下地分析和設計系統。結構化方法包括結構化分析 sa 結構化設計 sd 和結構化程式設計 sp 三部分內容。其中,sa 和sd 主要屬於學科抽象的內容,sp 則主要屬於學科...