结构化方法与面向对象方法的比较
本博客旨在通過基本概念、主要特征以及針對需求變更的項目所選用的開發模型等方面進行結構化方法與面向對象方法的比較。
?
軟件開發方法指在項目投資規模和時間限制內,設計、實現符合用戶需求的高質量軟件,根據軟件開發的特點,提出的多種軟件開發策略。結構化方法和面向對象方法都是計算技術中常用的軟件開發方法,兩種開發方法各有利弊,選擇哪一種方法要根據分析者的熟練程度和項目的具體類型而定。
?
1結構化開發方法
結構化開發方法是一種傳統的軟件開發方法,用系統工程的思想和工程化的方法,按用戶至上的原則,結構化、模塊化、自頂向下地對系統進行分析和設計。結構化開發方法又稱生命周期法,是迄今為止最傳統、應用最廣泛的一種信息系統開發方法。
?
1.1基本思想
結構化開發方法的基本思想是軟件功能的分解和抽象。
系統按功能要求分為若干子功能模塊,子模塊又進一步分解為若干個子子模塊,循此進行,從上往下進行功能分解。分解的結果將逐層地產生一系列的功能模塊,隨著分解的層次由高到低的發展,模塊功能是逐層地由抽象變得具休,由綜合變得單一。
?
1.2基本要點
1.2.1自頂向下
將復雜的大問題分解為相對簡單的小問題,找出每個問題的關鍵、重點所在,然后用精確的思維定性、定量地去描述問題。
1.2.2逐步求精
將現實問題經過幾次抽象(細化)處理,最后只需解決一些簡單的算法描述和算法實現問題。
1.2.3模塊化設計
逐步求精的結果是得到一系列以功能塊為單位的算法描述。以功能塊為單位進行程序設計,實現其求解算法的方法稱為模塊化。模塊化的目的是為了降低程序復雜度,使程序設計、調試和維護等操作簡單化。
?
1.3開發過程
在結構化軟件開發方法的瀑布模型中,項目團隊首先分析,然后確定需求和需求的優先級。接下來,在設計階段,根據需求說明進行詳細設計。接下來就會執行代碼實現。代碼實現后使用合理的數據用于實施和測試,以供最終用戶評估。最后階段涉及評估和維護,后者確保一切順利運行。
?
因此,軟件開發過程經歷了一系列五個基本階段:規劃,分析,設計,實施和運行。這些階段中的每個階段還包括一系列步驟或活動,這些步驟或活動依賴于一些技術來產生所需的可交付成果。項目團隊可能在邏輯上連續地、增量地或迭代地移動到某一階段或步驟。
?
?
2面向對象軟件開發方法
面向對象方法(Object-Oriented Method)是一種把面向對象的思想應用于軟件開發過程中指導開發活動的系統方法,是建立在“對象”概念基礎上的方法學。
所謂面向對象就是基于對象概念,以對象為中心,以類和繼承為構造機制,來認識、理解、刻畫客觀世界和設計、構建相應的軟件系統。面向對象方法的出發點和基本原則,是主張從客觀世界固有的事物出發來構造系統,提倡用人類在現實生活中常用的思維方法來認識、理解和描述客觀事物,強調最終建立的系統能夠映射問題域,也就是說,系統中的對象以及對象之間的關系能夠如實地反映問題域中固有事物及其關系。
?
2.1開發模型
面向對象方法遵循系統開發的迭代和增量方法。系統開發生命周期被視為由幾個增量或階段組成:開始,闡述,構造和過渡。這是一種自底向上和自頂向下相結合的方法,以對象建模為基礎,不僅考慮了輸入、輸出數據結構,也包含了所有對象的數據結構。
?
2.2UML
面向對象方法使用統一建模語言UML(Unified Modeling Language)。它專注于系統的三個架構視圖:功能,靜態和動態。所有圖都迭代地進行細化,直到信息系統的要求被完全理解。
?
功能視圖從用戶的角度描述了系統的外部行為。用例和用例圖用于描述功能視圖。靜態視圖按照屬性,方法,類,關系和消息來描述。類責任標記(CRC)卡,類圖和對象圖用于描繪靜態視圖。動態視圖由序列圖,協作圖和狀態圖表示。
?
2.3需求分析
面向對象開發方法中,需求分析過程與系統模型的形成過程一致,開發人員與用戶的討論從實體開始,即開發人員必須清晰地明白現實系統才能導出系統模型,這就使用戶與開發人員之間的信息交流更加通暢,從而避免了需求討論中可能出現的問題。
?
2.4可維護性
在面向對象語言中,子類不僅可以繼承父類的屬性和行為,而且也可以重寫父類的某個行為。利用這一特點,設計者可以方便地進行功能修改:引入某類的一個子類,對要修改的行為進行重寫。由于不再在原來的程序模塊中引入修改,所以改善了軟件的可修改性,從而也改善了軟件的可維護性。
?
2.5主要特征
2.5.1封裝性
封裝是一種信息隱蔽技術,它體現于類的說明,是對象的重要特性。其目的在于把對象的設計者和對象者的使用分開,使用者不必知曉行為實現的細節,只須用設計者提供的消息來訪問該對象。
2.5.2繼承性
繼承性是子類自動共享父類之間數據和方法的機制。類的對象是各自封閉的,如果沒有繼承性機制,則類對象中數據、方法就會出現大量重復。繼承不僅支持系統的可重用性,而且還促進系統的可擴充性。
2.5.3多態性
同一消息為不同的對象接受時可產生完全不同的行動,這種現象稱為多態性。多態性的實現受到繼承性的支持,利用類繼承的層次關系,把具有通用功能的協議存放在類層次中盡可能高的地方,而將實現這一功能的不同方法置于較低層次。
?
3兩種軟件開發方法的主要區別
?
3.1出發點
結構化方法的出發點是“怎樣做”,即用計算機求解這個實際問題應該“怎樣做”。從實際問題到數學模型的抽象都是圍繞“怎樣做”去進行的。結構化方法的著眼點是系統功能,要點是系統的功能分解,重點是建立功能模型。即自頂而下進行功能分解,逐步求精,這是從抽象到具體,從綱要到細節的過程。
面向對象(OO)方法的出發點是“是什么”即要求解的實際問題,它“是什么”,面向對象方法的著眼點是系統中的對象,要點是對象特性的抽象,重點是建立對象模型。面向對象方法需要自頂向下的分解與自低向上的構造,這是從一般到具體,由具體到一般的過程;通過類的選擇逐步求精。
?
3.2實現著重
結構化方法中的實現著重于編寫代碼。面向對象方法中的實現可以簡化為創建類的實例,開發新的類,并對這些對象建立聯系,使它們可以相互通訊。
?
3.3重用
結構化方法很少考慮重用問題。面向對象方法本質上是基于重用的軟件開發法。
另外,面向對象方法認為一個類,在邏輯上既包含數據,又包含功能。它取代了實體只能定義數據的概念,繼承性取代了實體關系的子類型。處理分析圖描述了不同類的實例之間的消息傳送,取代了數據流圖。傳統的實體關系圖被類的關系圖和類的分層圖所取代。面向對象方法強調數據結構,使得開發過程更為穩定。
?
3.4需求變更
面向軟件開發的面向對象方法相對于傳統方法在處理復雜性方面具有決定性的優勢,大多數當代語言和工具都是面向對象的,對需求規格頻繁變化的大型項目也普遍偏好面向對象方法。
Fig 1
?
圖1顯示了當軟件項目存在頻繁變更的需求規格時,分別使用瀑布模型和面向對象模型失敗的大型項目數量。顯然,此時使用面向對象開發模型的項目相較于使用傳統結構化開發模型(瀑布模型)的項目具有更小的失敗率。
Fig 2
?
圖2顯示了在開發過程中沒有需求規格變化的小型項目分別使用結構模型(螺旋)和面向對象模型的影響開發階段的偏差/成本。我們可以觀察到傳統模型稱為螺旋和面向對象的模型在大多數開發階段提供相同的效率。與螺旋相比,面向對象的模型成本太高。 因此,我們可以認為,傳統的軟件開發模型如瀑布、螺旋、增量模型是可行的,以開發具有穩定需求規格的小型項目。
?
4結論
與人類發明的任何技術或工具一樣,所有軟件開發方法都有局限性。目前軟件工程開發主要有兩種方法來開發項目:結構化方法和面向對象方法。
結構化方法具有開發思想清晰,易學易用,模塊層次分明,便于分工開發和調試,程序可讀性強等特點。但程序較固定,界面簡單,使用周期長等軟件。結構化開發方法在整合,部署和維護方面是可行的,但僅限于具有穩定需求規格的小型項目。這一方法使軟件開發者專注于將較大的算法分解成較小的算法。但傳統的方法如瀑布,螺旋缺乏靈活性來處理面向對象的模型。
面向對象方法充分利用對象的封裝性,繼承性和多態性使得軟件的可靠性、可重用性、可擴充性和可維護性得到充分體現。面向對象的開發方法最適合于那些意味著使用新興對象技術來構建,管理和組裝這些對象到有用的計算機應用程序的系統的項目。
事實上,真正實用的系統開發方法往往是多種開發方法的結合。如何綜合應用,要根據開發系統的規模、系統的復雜程度、系統開發方法的特點,以及所能使用的計算機軟件等諸多因素綜合考慮后決定。
?
?
參考文獻:
[1] http://baike.baidu.com/link?url=jgu_iZed2EZaje-WzQlS673XI2jIa1IhaJEgUAeMhRqjlO5WZAsi8B6YfDl905G_3IzYAXU5rHiUdzcM40TDfbnkzkc6Zy6cycwwbhzrBlMiiDpFHLJJD-TaVVxFwt64DD88HFR5ItZgi8zL7L9v0q
[2] http://baike.baidu.com/link?url=qx4kSRoPDVSPxH1luWH0pEQm0SpMCsLzauQ9IU-ZQT0YaagISBZw1ksQiQSMDDcBZi8Lo_Zq3vlcMFobf9O3OQx2fUBAk42CDE0QAKKVUgM9dyFsRa2BE2bLicMLmjZdMfRB35Z0eKLDjvcmzbrONa
[3] http://baike.baidu.com/link?url=hgf-729zQDNnatBUhiCPBtG_mDJJSZhlwVKaoifFt28n0_JXf4HAW2FXJFg1ib49P5Zq27qErjOLnrG8HUrUV_jbgrgOq6pcDwBDofh1Dk_YkHSNfw8KHIiYRMMS91CRc4-j0b1ytAqf6UCQZzCRdsKD3n2-_m5fN1RmFsR5D_e
[4] 王茹, 淺談結構化和面向對象軟件開發方法, 《電大理工》2007年6月第2期
[5] 汪寒昊, 謝加勝, 邢躍, 軟件開發方法——結構化方法與面向對象方法比較, 《SCIENCE & TECHNOLOGY INFORMATION》2011年第13期
?
轉載于:https://www.cnblogs.com/ty-alison-seblogs/p/Structured-vs-ObjectOriented.html
總結
以上是生活随笔為你收集整理的结构化方法与面向对象方法的比较的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: WPF 资源字典【转】
- 下一篇: OAuth2.0相关知识