
- OOAD 教程
- OOAD - 首頁
- OOAD - 面向物件正規化
- OOAD - 面向物件模型
- OOAD - 面向物件系統
- OOAD - 面向物件原則
- OOAD - 面向物件分析
- OOAD - 動態建模
- OOAD - 功能建模
- OOAD - UML分析模型
- OOAD - UML基本符號
- OOAD - UML結構圖
- OOAD - UML行為圖
- 面向物件設計 - OOAD
- OOAD - 實現策略
- OOAD - 測試與質量保證
- OOAD有用資源
- OOAD - 快速指南
- OOAD -有用資源
面向物件設計 - OOAD
在分析階段之後,概念模型將使用面向物件設計 (OOD) 進一步發展成為面向物件模型。在 OOD 中,分析模型中與技術無關的概念被對映到實現類,識別約束並設計介面,從而產生解決方案域的模型。簡而言之,構建了一個詳細的說明,指定了系統如何基於具體的技術進行構建。
面向物件設計的階段可以識別為:
- 定義系統的上下文
- 設計系統架構
- 識別系統中的物件
- 構建設計模型
- 指定物件介面
系統設計
面向物件系統設計包括定義系統的上下文,然後設計系統的架構。
上下文 - 系統的上下文具有靜態部分和動態部分。系統的靜態上下文使用整個系統的簡單框圖設計,該框圖擴充套件為子系統的層次結構。子系統模型由UML包表示。動態上下文描述系統如何與其環境互動。它使用用例圖建模。
系統架構 - 系統架構是根據系統的上下文,根據架構設計原則以及領域知識設計的。通常,系統被劃分為多個層,每一層都被分解成子系統。
面向物件分解
分解意味著根據分治原則,將大型複雜系統分解成具有較低複雜性的較小元件的層次結構。系統的每個主要元件稱為子系統。面向物件分解識別系統中獨立的自主物件以及這些物件之間的通訊。
分解的優點是:
各個元件的複雜性較低,因此更易於理解和管理。
它能夠劃分擁有專業技能的勞動力。
它允許替換或修改子系統而不會影響其他子系統。
識別併發性
併發允許多個物件同時接收事件,並且多個活動可以同時執行。併發在動態模型中被識別和表示。
為了啟用併發,每個併發元素都被分配一個單獨的控制執行緒。如果併發在物件級別,則兩個併發物件被分配兩個不同的控制執行緒。如果單個物件的兩個操作本質上是併發的,則該物件將在不同的執行緒之間拆分。
併發與資料完整性、死鎖和飢餓問題相關。因此,每當需要併發時,都需要制定明確的策略。此外,併發需要在設計階段本身識別,而不能留到實現階段。
識別模式
在設計應用程式時,一些普遍接受的解決方案被用於某些類別的問題。這些是設計模式。模式可以定義為一組記錄在案的構建塊,可用於某些型別的應用程式開發問題。
一些常用的設計模式包括:
- 外觀模式
- 模型檢視分離模式
- 觀察者模式
- 模型檢視控制器模式
- 釋出訂閱模式
- 代理模式
控制事件
在系統設計過程中,需要識別可能在系統物件中發生的事件並進行適當處理。
事件是對在時間和空間上具有位置的重要事件的規範。
可以建模四種類型的事件,即:
訊號事件 - 一個命名物件由一個物件丟擲,並被另一個物件捕獲。
呼叫事件 - 表示操作排程的同步事件。
時間事件 - 表示時間流逝的事件。
更改事件 - 表示狀態更改的事件。
處理邊界條件
系統設計階段需要解決整個系統以及每個子系統的初始化和終止。記錄的不同方面如下:
系統的啟動,即系統從非初始化狀態到穩定狀態的轉換。
系統的終止,即關閉所有正在執行的執行緒,清理資源以及要傳送的訊息。
系統的初始配置以及在需要時重新配置系統。
預見系統的故障或意外終止。
邊界條件使用邊界用例建模。
物件設計
在開發了子系統的層次結構之後,將識別系統中的物件並設計其細節。在這裡,設計者詳細說明了在系統設計期間選擇的策略。重點從應用程式域概念轉向計算機概念。分析期間識別的物件被刻畫出來以進行實現,目標是最小化執行時間、記憶體消耗和總體成本。
物件設計包括以下階段:
- 物件識別
- 物件表示,即設計模型的構建
- 操作分類
- 演算法設計
- 關係設計
- 外部互動的控制實現
- 將包類和關聯打包到模組中
物件識別
物件設計的第一個步驟是物件識別。面向物件分析階段中識別出的物件被分組到類中並被細化,以便它們適合實際實現。
此階段的功能包括:
識別和細化每個子系統或包中的類
定義類之間的連結和關聯
設計類之間的層次關聯,即泛化/特化和繼承
設計聚合
物件表示
一旦識別出類,就需要使用物件建模技術來表示它們。此階段主要涉及構建UML圖。
需要生成兩種型別的設計模型:
靜態模型 - 使用類圖和物件圖來描述系統的靜態結構。
動態模型 - 描述系統的動態結構並使用互動圖和狀態圖顯示類之間的互動。
操作分類
在此步驟中,透過組合在OOA階段開發的三個模型(即物件模型、動態模型和功能模型)來定義要對物件執行的操作。操作指定要做什麼,而不是如何做。
關於操作,將執行以下任務:
開發系統中每個物件的狀體轉換圖。
為物件接收的事件定義操作。
識別一個事件觸發相同物件或不同物件中其他事件的情況。
識別操作中的子操作。
將主要操作擴充套件到資料流圖。
演算法設計
使用演算法定義物件中的操作。演算法是一個逐步解決操作中規定的問題的過程。演算法側重於如何去做。
可能存在多個與給定操作對應的演算法。一旦識別出備選演算法,就為給定的問題域選擇最佳演算法。選擇最佳演算法的指標包括:
計算複雜度 - 複雜度根據計算時間和記憶體需求來確定演算法的效率。
靈活性 - 靈活性決定了所選演算法是否可以在各種環境中適當地實現,而不會損失適用性。
可理解性 - 這決定了所選演算法是否易於理解和實現。
關係設計
在物件設計階段需要制定實現關係的策略。需要解決的主要關係包括關聯、聚合和繼承。
關於關聯,設計者應執行以下操作:
確定關聯是單向還是雙向。
分析關聯的路徑,並在必要時更新它們。
在多對多關係的情況下,將關聯實現為一個不同的物件;或者在一對一或一對多關係的情況下,實現為對其他物件的連結。
關於繼承,設計者應執行以下操作:
調整類及其關聯。
識別抽象類。
制定規定,以便在需要時共享行為。
控制的實現
物件設計者可以改進狀態圖模型的策略。在系統設計中,制定了實現動態模型的基本策略。在物件設計期間,此策略得到了恰當的完善,以實現適當的實現。
實現動態模型的方法包括:
將狀態表示為程式中的位置 - 這是傳統的程式驅動方法,其中控制位置定義程式狀態。有限狀態機可以實現為程式。轉換形成輸入語句,主控制路徑形成指令序列,分支形成條件,後向路徑形成迴圈或迭代。
狀態機引擎 - 此方法透過狀態機引擎類直接表示狀態機。此類透過應用程式提供的轉換和操作集來執行狀態機。
併發任務作為控制 - 在這種方法中,物件在程式語言或作業系統中實現為任務。在這裡,事件被實現為任務間呼叫。它保留了真實物件的固有併發性。
包類
在任何大型專案中,將實現細緻地劃分成模組或包都非常重要。在物件設計過程中,類和物件被分組到包中,以便多個組能夠合作完成專案。
打包的不同方面包括:
隱藏內部資訊,防止外部檢視 − 這允許將一個類視為“黑盒”,並允許更改類實現而無需任何類的客戶端修改程式碼。
元素的一致性 − 如果一個元素(例如類、操作或模組)是根據一致的計劃組織的,並且其所有部分都內在相關,從而服務於共同的目標,則該元素具有一致性。
物理模組的構建 − 構建物理模組時,以下指南有所幫助:
模組中的類應該表示相同複合物件中的相似事物或元件。
緊密相關的類應該位於同一個模組中。
不相關或弱相關的類應該放在單獨的模組中。
模組應該具有良好的內聚性,即其元件之間具有高度的協作性。
模組應該與其他模組的耦合度低,即模組之間的互動或相互依賴性應該最小。
設計最佳化
分析模型捕獲關於系統的邏輯資訊,而設計模型新增細節以支援高效的資訊訪問。在實現設計之前,應該對其進行最佳化,以便使實現更有效率。最佳化的目標是最大限度地減少時間、空間和其他指標方面的成本。
然而,設計最佳化不應過度,因為易於實現、可維護性和可擴充套件性也是重要的考慮因素。人們經常看到,經過完美最佳化的設計效率更高,但可讀性和可重用性較差。因此,設計人員必須在這兩者之間取得平衡。
可以為設計最佳化執行的各種操作包括:
- 新增冗餘關聯
- 省略不可用的關聯
- 演算法最佳化
- 儲存派生屬性以避免重新計算複雜的表示式
新增冗餘關聯
在設計最佳化過程中,檢查是否可以推匯出新的關聯以降低訪問成本。儘管這些冗餘關聯可能不會新增任何資訊,但它們可能會提高整個模型的效率。
省略不可用的關聯
關聯過多可能會使系統難以理解,從而降低系統的整體效率。因此,在最佳化過程中,所有不可用的關聯都被刪除。
演算法最佳化
在面向物件的系統中,資料結構和演算法的最佳化以協作的方式進行。一旦類設計到位,就需要最佳化操作和演算法。
演算法最佳化可以透過以下方式獲得:
- 重新安排計算任務的順序
- 反轉迴圈的執行順序(與功能模型中規定的順序相反)
- 刪除演算法中的死路徑
派生屬性的儲存和儲存
派生屬性是指其值作為其他屬性(基屬性)的函式計算的屬性。每次需要時重新計算派生屬性的值是一個耗時的過程。為了避免這種情況,可以計算其值並以計算後的形式儲存。
但是,這可能會導致更新異常,即基屬性值發生變化而派生屬性值沒有相應變化。為了避免這種情況,採取以下步驟:
每次更新基屬性值時,也重新計算派生屬性。
定期批次重新計算和更新所有派生屬性,而不是每次更新後都進行。
設計文件
文件是任何軟體開發過程中必不可少的部分,它記錄了製作軟體的過程。對於任何非平凡的軟體系統,都需要記錄設計決策,以便將設計傳達給他人。
使用領域
雖然是次要產品,但良好的文件是必不可少的,尤其是在以下領域:
- 在由多位開發人員開發的軟體設計中
- 在迭代式軟體開發策略中
- 在開發軟體專案的後續版本中
- 用於評估軟體
- 用於查詢測試條件和領域
- 用於維護軟體。
內容
有益的文件應主要包括以下內容:
高階系統架構 − 流程圖和模組圖
關鍵抽象和機制 − 類圖和物件圖。
說明主要方面行為的場景 − 行為圖
特點
良好文件的特點包括:
簡潔明瞭,同時準確、一致和完整
可追溯到系統的需求規範
結構良好
圖示而非描述性