天天看點

系統架構設計師筆記第14期:系統分析與設計

面向對象的方法

面向對象方法(Object-oriented methods)是一種軟體開發方法,其核心思想是将軟體系統模組化為對象的集合,這些對象之間通過消息傳遞進行互動。面向對象方法強調對象的概念、封裝、繼承和多态等特性,以實作軟體系統的可重用性、可維護性和靈活性。

以下是面向對象方法的一些關鍵概念和特點:

  1. 對象:對象是系統中具有狀态和行為的實體。對象可以是現實世界中的實際物體(如汽車、人員)或概念(如訂單、賬戶),也可以是軟體系統中的抽象實體(如類、子產品)。
  2. 類:類是一種描述對象的模闆或藍圖,定義了對象共同具有的屬性和行為。通過執行個體化類,可以建立多個具體的對象。
  3. 封裝:封裝是指将相關的資料和方法組合成一個單元,對外部隐藏内部的實作細節。通過封裝,對象的内部狀态和行為對其他對象是不可見的,隻能通過對象的公共接口進行通路和操作。
  4. 繼承:繼承是指一個類可以從另一個類繼承屬性和方法。通過繼承,子類可以繼承和擴充父類的特性,實作代碼的重用和階層化的組織結構。
  5. 多态:多态是指同一類型的對象在不同的上下文中可以表現出不同的行為。通過多态,可以實作基于對象類型的動态排程,提高系統的靈活性和可擴充性。
  6. 消息傳遞:對象之間通過發送消息進行互動和通信。一個對象發送消息給另一個對象,接收者對象根據消息類型和參數執行相應的行為。
  7. 關聯和聚合:關聯和聚合描述了對象之間的關系。關聯表示對象之間的靜态關系,表明它們之間有通信和互動。聚合表示一種包含關系,其中一個對象包含其他對象。

面向對象方法的優勢包括:

  • 可重用性:通過封裝和繼承,可以實作代碼的重用,提高開發效率和系統的可維護性。
  • 子產品化:将系統分解為對象的集合,每個對象負責特定的功能,便于系統的了解、設計和維護。
  • 靈活性和擴充性:通過多态和繼承,可以輕松地添加新的功能和行為,以應對需求的變化。
  • 可測試性:面向對象方法支援單元測試和子產品化測試,便于對系統進行測試和調試。

常用的面向對象方法包括統一模組化語言(UML)、面向對象分析和設計(OOA/D)、面向對象程式設計(OOP)等。這些方法提供了一些工具和技術,如類圖、時序圖、用例圖等,幫助開發人員進行面向對象的模組化和設計。

統一模組化語言(UML):UML是一種廣泛使用的面向對象模組化語言,用于描述和設計軟體系統。它提供了一組圖形符号和符号規則,用于表示類、對象、關聯、繼承、消息傳遞等概念。UML包括類圖、時序圖、用例圖、活動圖等不同類型的圖表,可以用于可視化系統結構、行為和互動。

  1. 面向對象分析和設計(OOA/D):OOA/D是面向對象方法的一部分,強調在軟體開發的早期階段進行系統的需求分析和設計。在OOA階段,開發人員通過識别問題領域中的概念和關系,建立概念模型和用例模型等。在OOD階段,通過使用UML類圖、序列圖等進行詳細設計,定義類的屬性和方法,以及類之間的關系。
  2. 面向對象程式設計(OOP):OOP是一種程式設計範式,旨在通過組織資料和操作為對象,實作系統的設計和開發。OOP的核心概念包括封裝、繼承和多态,以及其他特性如抽象、接口、重用等。通過OOP,開發人員可以将系統分解為對象,每個對象負責特定的功能和行為,進而提高代碼的可維護性、可擴充性和重用性。
  3. 設計模式:設計模式是一種面向對象方法的重要組成部分,提供了一些經過驗證的設計思想和解決方案,用于解決常見的軟體設計問題。設計模式通過定義和描述在特定情境下的問題和解決方案,幫助開發人員提高系統的靈活性、可擴充性和可維護性。常見的設計模式包括單例模式、工廠模式、觀察者模式等。
  4. 靈活開發方法:靈活開發方法是一種基于疊代和增量的軟體開發方法,與面向對象方法有一定的關聯。靈活方法強調通過緊密合作的團隊、疊代開發和持續回報,以快速适應需求的變化和傳遞有價值的軟體。面向對象方法可以與靈活方法相結合,以支援快速的系統模組化、設計和開發。

通過面向對象方法,開發人員可以更好地了解和模組化現實世界的問題領域,将系統分解為可管理的子產品和對象,實作高度子產品化和可擴充的軟體系統。同時,面向對象方法還提供了一些工具和技術,幫助開發人員可視化、共享和溝通設計和實作的思想。

結構化方法

結構化開發方法(Structured Development Methods)是一種軟體開發方法,旨在通過分階段和逐漸細化的方式開發軟體系統。結構化開發方法強調系統的結構、子產品化和邏輯流程,以實作可維護性、可測試性和可擴充性。

以下是結構化開發方法的一些關鍵特點和階段:

  1. 需求分析階段:在需求分析階段,開發人員與使用者和相關利益相關者合作,收集和了解系統的需求。通過需求分析技術,如面談、觀察、問卷調查等,将使用者需求轉化為可驗證的系統規範。
  2. 概念設計階段:在概念設計階段,将需求轉化為概念模型和功能設計。開發人員使用流程圖、資料流圖等工具來描述系統的功能、資料流動和處理邏輯。這些圖形表示幫助開發人員了解系統的結構和行為。
  3. 資料設計階段:在資料設計階段,開發人員定義系統中使用的資料模型和資料庫結構。這包括識别實體、屬性和關系,并設計資料庫表和資料字典。
  4. 過程設計階段:在過程設計階段,開發人員定義系統的處理邏輯和算法。使用結構化程式設計語言,如結構化查詢語言(SQL)和結構化程式設計語言(例如,Pascal、C)來編寫和實作系統的處理過程。
  5. 編碼和單元測試階段:在這個階段,開發人員根據過程設計階段的規範編寫源代碼。單元測試用于驗證代碼的正确性和可靠性,通常使用單元測試架構來自動化測試過程。
  6. 綜合和內建測試階段:在綜合和內建測試階段,将各個子產品組合起來,并進行整體的功能和性能測試。這確定了子產品的正确內建和系統的整體一緻性。
  7. 系統驗收和部署階段:在系統驗收和部署階段,系統傳遞給使用者進行驗收測試,并部署到實際的生産環境中。使用者對系統進行評估,驗證系統是否滿足其需求和預期。

結構化開發方法強調子產品化和逐漸細化,以便于系統的了解、維護和演化。通過明确的階段和規範,結構化開發方法幫助開發人員在軟體開發過程中進行有效的計劃、設計和測試。

需要注意的是,随着時間的推移,結構化開發方法在某種程度上已被更靈活和疊代的方法(如面向對象方法和靈活方法)所取代。盡管如此,結構化開發方法仍然提供了一種重要的基礎概念和原則,對于了解軟體開發過程和設計原則仍然具有重要意義。

當談到結構化開發方法時,以下是一些進一步的介紹:

  1. 結構化分析:結構化分析是結構化開發方法的一部分,用于将系統需求轉化為系統結構的抽象表示。它采用資料流圖、資料字典和實體關系圖等技術來描述系統中的資料流、資料存儲和處理過程。通過結構化分析,開發人員可以分析系統的功能和流程,并确定子產品化的組織方式。
  2. 結構化設計:結構化設計是結構化開發方法的另一部分,用于将系統結構轉化為可執行的程式設計。在結構化設計中,使用結構化程式設計語言(如Pascal、C)來編寫子產品化的代碼,通過定義子產品的接口和内部邏輯來實作系統的功能。結構化設計強調子產品化、可讀性和可維護性,以及避免備援和複雜性。
  3. 結構化程式設計:結構化程式設計是結構化開發方法中的一個重要概念,強調使用結構化的控制流程(如順序、選擇和循環)來編寫可靠和可測試的代碼。結構化程式設計通過避免使用goto語句和複雜的控制結構,提高了代碼的可讀性和可維護性。這種程式設計風格有助于降低代碼錯誤的機率,并使代碼更易于了解和調試。
  4. 自頂向下和逐漸細化:結構化開發方法強調從系統級别的整體視角開始,逐漸細化和分解系統為更小的、更具體的子產品。這種自頂向下的方法使開發人員能夠以更系統化和有條理的方式進行開發,同時保持對整體系統的控制和把握。
  5. 子產品化和資訊隐藏:結構化開發方法倡導将系統分解為互相獨立的子產品,每個子產品負責特定的功能。子產品化有助于降低複雜性,使系統更易于開發、測試和維護。資訊隐藏是指将子產品的内部實作細節隐藏起來,隻暴露必要的接口。通過資訊隐藏,可以實作子產品的獨立性和子產品之間的解耦,提高代碼的可重用性和靈活性。
  6. 結構化測試:結構化開發方法強調對軟體系統進行系統化和全面的測試。結構化測試包括單元測試、內建測試和系統測試,以驗證系統的功能、性能和穩定性。通過結構化測試,可以發現和糾正系統中的錯誤和缺陷,確定系統符合規格和使用者需求。

結構化開發方法在過去幾十年中被廣泛應用,特别是在較大和較複雜的軟體項目中。然而,随着軟體開發的演變和新的開發方法的出現,如面向對象方法和靈活方法,結構化開發方法的使用逐漸減少。盡管如此,結構化開發方法的基本原則和思想仍然具有重要意義,并對軟體開發者的思維方式和設計能力産生積極影響。

系統架構設計師筆記第14期:系統分析與設計

繼續閱讀