結構化方法與物件導向方法的比較

來源:互聯網
上載者:User

標籤:物件導向設計   通訊   dem   模組   使用   互動   domain   bsp   參考文獻   

 

摘要:

    結構化方法在軟體工程中得到廣泛接受和使用,而物件導向方法提出後,當代軟體工程的發展面臨著從傳統的結構化方法到物件導向方法的轉變,本文剖析了結構化方法和物件導向方法這兩種軟體開發方法具體的分析設計過程,討論了各自在不同軟體開發中的應用及局限性,提出了在選用物件導向方法開發大型軟體系統的同時可結合結構化方法。

關鍵詞:軟體工程、結構化方法、物件導向方法。

 

 

 

1. 引言

結構化方法(SD方法)是一種傳統的軟體開發方法,它是由結構化分析、結構化設計和結構化程式設計三部分有機組合而成的。它的基本思想:把一個複雜問題的求解過程分階段進行,而且這種分解是自頂向下,逐層分解,使得每個階段處理的問題都控制在人們容易理解和處理的範圍內。物件導向方法(Object-Oriented Method)是一種把物件導向的思想應用於軟體開發過程中,指導開發活動的系統方法,簡稱OO (Object-Oriented)方法,是建立在“對象”概念基礎上的方法學。對象是由資料和容許的操作組成的封裝體,與客觀實體有直接對應關係,一個對象類定義了具有相似性質的一組對象。而每繼承性是對具有層次關係的類的屬性和操作進行共用的一種方式。所謂物件導向就是基於對象概念,以對象為中心,以類和繼承為構造機制,來認識、理解、刻畫客觀世界和設計、構建相應的軟體系統。

2. 結構化方法2.1結構化分析

結構化分析是 70 年代中期由DeMarco 和Yourdon等倡導的一種基於功能分解的分析方法,即使用資料流程圖、決策表、決策樹等工具,來建立一種符合使用者需求的結構化說明書。它主要採用的工具是資料流圖DFD(Data Flow Diagram),利用DFD描述邊界和資料處理過程的關係。

2.2結構化程式設計

結構化設計是一種面向資料流的設計方法,是將資料流程圖示的資訊轉換成程式結構的設計描述,在該階段力求尋找功能的實現方法,採用系統結構圖表示系統所具有的功能和功能之間的關係.設計過程分兩步完成,第一步以需求分析的結果作為出發點,構造出一個具體的系統設計方案,決定系統的模組結構(包括決定模組的劃分、模組間的資料傳遞及調用關係).第二步詳細設計即過程設計,在總體設計的基礎上,確定每個模組的內部結構和演算法,最終產生每個模組的程式流程圖.因此,結構化方法比較適合於像作業系統、即時處理系統等這樣的以功能為主的系統。

2.3局限

       結構化方法在軟體行業得到廣泛接受和使用,並一度成為早期佔主導地位的軟體構造與開發方法。結構化方法的本質是功能分解,從代表目標系統整體功能的單個處理著手,自頂向下不斷地把複雜的處理分解為子處理,這樣一層一層地分解下去,直到僅剩下的若干個容易實現的子處理為止。隨著軟體工程的發展,結構化方法具體表現出以下問題:

  1. 結構化方法在需求分析中對問題域的認識和描述不是以問題域中固有的事物作為基本單位,而是打破了各項事物之間的界限,在全域範圍內以資料流為中心進行分析,所以分析結果不能直接反映問題域.同時,當系統較複雜時,很難檢驗分析的正確性.因此,結構化分析方法容易隱蔽一些對問題域的理解偏差,與後續開發階段的銜接也比較困難;
  2. 結構化方法中設計文檔很難與分析文檔對應,因為二者的表示體系不一致.結構化方法的結果-資料流圖(DFD)和結構化設計結果-模組結構圖(MSD)是兩種不同的表示體系,從分析到設計的“轉換”實際上並不存在可靠的轉換規則,而是帶有人為的隨意性,容易因理解上的錯誤而埋下隱患,使得設計文檔與問題域的本來面貌相差甚遠
  3. 結構化方法對需求變化的適應能力比較弱,軟體系統結構對功能的變化十分敏感,功能的變化會引起一個加工和它相連的許多資料流的修改,同時設計出的軟體難以重用,延緩了開發的過程.
3.物件導向方法

       物件導向包括以下概念:

    屬性——說明一個類的資料集合;類——封裝資料和過程的抽象,這些是說明某些真實世界中的實體的內容和行為所必需的。換種方式說,類是一組相似對象的概括說明(如:模板、模式、藍圖);對象——某個特定類的執行個體。對象繼承類的屬性和操作;操作——也稱作方法和服務,表現類的某個行為;子類——超類的特化,子類可以從超類繼承屬性和操作;超類——也稱作基

類,是一組相關類的泛化。

物件導向技術包括物件導向分析(OOA)、物件導向設計(OOD)及物件導向程式設計(OOP)3 部分內容。

3.1物件導向分析

       Object-Oriented Analysis(物件導向分析方法)是確定需求或者業務的角度,按照物件導向的思想來分析業務。例如:OOA只是對需求中描述的問題,進行模組化的處理,描述問題的本質,區別每個問題的不同點相同點,確定問題中的對象。OOA與結構化分析有較大的區別。OOA所強調的是在系統調查資料的基礎上,針對OO方法所需要的素材進行的歸類分析和整理,而不是對管理業務現狀和方法的分析。

3.2物件導向設計

       OOD的目標是管理程式內部各部分的相互依賴。為了達到這個目標,OOD要求將程式分成塊,每個塊的規模應該小到可以管理的程度,然後分別將各個塊隱藏在介面(interface)的後面,讓它們只通過介面相互交流。比如說,如果用OOD的方法來設計一個伺服器-用戶端(client-server)應用,那麼伺服器和用戶端之間不應該有直接的依賴,而是應該讓伺服器的介面和用戶端的介面相互依賴。

這種依賴關係的轉換使得系統的各部分具有了可複用性。還是拿上面那個例子來說,用戶端就不必依賴於特定的伺服器,所以就可以複用到其他的環境下。如果要複用某一個程式塊,只要實現必須的介面就行了。

OOD是一種解決軟體問題的設計範式(paradigm),一種抽象的範式。使用OOD這種設計範式,我們可以用對象(object)來表現問題領域(problem domain)的實體,每個對象都有相應的狀態和行為。我們剛才說到:OOD是一種抽象的範式。抽象可以分成很多層次,從非常概括的到非常特殊的都有,而對象可能處於任何一個抽象層次上。另外,彼此不同但又互有關聯的對象可以共同構成抽象:只要這些對象之間有相似性,就可以把它們當成同一類的對象來處理。

3.3對象程式設計

       物件導向編程技術的關鍵性觀念是它將資料及對資料的操作行為放在一起,作為一個相互依存、不可分割的整體——對象。對於相同類型的對象進行分類、抽象後,得出共同的特徵而形成了類。物件導向編程就是定義這些類。類是描述相同類型的對象集合。類定義好之後將作為資料類型用於建立類的對象。程式的執行表現為一組對象之間的互動通訊。對象之間通過公用介面進行通訊,從而完成系統功能。類中聲明的public成員組成了對象的對外公用介面。

3.4局限性

1.物件導向方法中對象的確定有時會因客觀邊界模糊而難以確定,這樣就很難保證軟體描述的正確性;

2.物件導向在描述問題域方面的不足.在問題領域模型中,物件導向方法把具體或抽象的問題域現象直接表述為對象,同時把現象類型直接表述為類.大多數OOA方法支援多視角模型,即對同一問題域現象,不同的主體可以將它表述為同一對象或類型.但系統的描述者在應用物件導向方法進行建模時常遇到這樣的困惑,描述者力圖通過物件導向的表述對存在的問題域現象達成一致,然而,結果得到的對象或類並不很適合於某個描述者對對象的獨自觀察而得到的表述.也就是說,在物件導向模型中,不同的系統描述者在觀察描述同一個問題域現象時,都可以把該現象表述為對象(或類),但卻不能表述各自之間存在的對問題域現象的不同認識,除非通過底層結構(如操作、協議等)的處理

 

4. 二者的比較

從上面的分析設計過程可以看出,結構化方法是對系統功能建模,基於功能分解設計系統結構,從內部功能上類比客觀世界.物件導向方法則是從行為的角度進行建模,基於行為分析法認定對象及它們之間的關係,從內部結構上類比客觀世界,它採用了新概念、新方法、新的表示形式,有助於軟體開發人員加深對系統的理解,給軟體開發帶來很大益處.但在實際應用中,開發的大型軟體系統通常是混合型系統,即需要處理即時資訊、又需要資料庫的支援,同時還涉及大量的事務性操作請求,在這種情況下,在選用物件導向方法的同時在局部處理上可以結合使用結構化方法

結構化方法首先關心的是功能,強調以模組(即過程)為中心,採用模組化、自頂向下、逐步求精設計過程,系統是實現模組功能的函數和過程的集合,結構清晰、可讀性好,的確是提高軟體開發品質的一種有效手段。每個模組有可能保持較強的獨立性,但它往往與資料庫結構相獨立,功能模組與資料庫邏輯模式間沒有映射關係,程式與資料結構很難封裝在一起。如果問題世界的功能比資料更複雜或者更重要,那麼結構化方法仍然應是首選的方法。如果資料結構複雜,模組獨立性很難保證。

物件導向方法抽象的系統結構往往並不比結構化方法產生的系統結構簡單,但它能映射到資料庫結構中,很容易實現程式與資料結構的封裝。

結構化設計從系統的功能入手,按照工程標準和嚴格規範將系統分解為若干功能模組。然而,由於使用者的需求和軟、硬體技術的不斷髮展變化,作為系統基本成分的功能模組很容易受到影響,局部修改甚至會引起系統的根本性變化。開發過程前期入手快而後期頻繁改動的現象比較常見。

物件導向方法則從所處理的資料入手,以資料為中心來描述系統,資料相對於功能而言,具有更強的穩定性,這樣設計出的系統模型往往能較好地映射問題領域模型。對象、類、繼承性、多態性、動態定連概念和設施的引入使用,顯然令物件導向的設計方法具有一定的優勢,能為生產可重用的軟體構件和解決軟體的複雜性問題提供一條有效途徑。

物件導向方法的優點並不是減少開發時間,相反,初次使用這種技術軟體,可能比結構化方法開發時間更長,開發人員必須花很大精力去分析對象是什麼,每個對象應該承擔什麼責任,所有這些對象怎樣很好地合作以完成預定的目標。這樣做換來的好處是,提高了目標系統的可重用性,減少了生命週期後續階段的工作量和可能犯的錯誤,提高了軟體的可維護性。

5.參考文獻

[1].   全兆明,對結構化方法和物件導向方法的對比和討論

[2].   王德軍,結構化程式設計方法與物件導向的程式設計方法的比較

[3].   張莉,結構化方法與物件導向方法的比較分析

[4].   霍迎旦,軟體工程中結構化方法與物件導向方法之比較

結構化方法與物件導向方法的比較

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.