面向對象設計
以面向對象分析階段產生的分析模型作為輸入,通過對分析模型中所有對象和類的分析,明確對象的屬性和操作,指定屬性的類型特徵,補全對象之間的關係,並在不斷細化的基礎上,把分析模型轉化成詳細描述如何解決問題、如何實現軟件系統的對象模型。
面向對象設計的工作步驟
細化和重組類;
細化和實現類間關係,明確其可見性;
增加遺漏的屬性,指定屬性的類型和可見性;
分配職責,定義執行每個職責的方法;
對消息驅動的系統,明確消息傳遞方式;
利用設計模式進行局部設計;
畫出詳細的順序圖或協作圖。
面向對象設計的工作步驟——細化和重組類
以面向對象分析過程中得到的分析類為基礎,以與對象繼承和聚合力度相關的原則為依據,正確地確定繼承樹的層次和聚合關係的細化程度。
對於架構分析中確定的各個子系統,也必須進一步細化其內部設計。
子系統封裝了一組相對獨立但比較複雜、無法用一個類來概括的分析類。
把分析類轉化成具體的設計類,賦予合適的名字;再分析繼承層次和聚合關係,已達到設計類是否能保證代碼複用目標的實現。
面向對象設計的工作步驟——細化和實現類間關係,明確其可見性——關係可見性
一個對象能夠“看見”並且引用另一個對象的能力。
對象A到對象B的可見性:
1.屬性可見性:對象A的一個屬性指向或引用了對象B,這是一種相對持久的關係,只要對象A存在,它就能引用對象B。
2.參數可見性:對象B是對象A中一個方法的參數,對象A只有在該方法內才能發送消息給對象B。
3.局部聲明可見性:對象B是對象A中一個方法內部定義的局部變量,對象A只有在該方法中才會發送消息給對象B。
4.全局可見性:對象B是全局對象,對象A任何時刻都可以發送消息給對象B。
全局可見性不會在類圖中表現出來,參數可見性和局部聲明可見性是一種比較短暫的關係,只在某個函數中存在,也不需要在類圖中出現(特別必要時用依賴關係來表述)。
在類圖出現的基本上是具備屬性可見性的關係,即通過類屬性來實現的類間關係。
面向對象設計的工作步驟——細化和實現類間關係,明確其可見性——關係分類
根據相關對象的數量來確定類間關係的類型:一對一、一對多、多對多、歸納關係。
面向對象設計的工作步驟——細化和實現類間關係,明確其可見性——關係分類——依賴關係
依賴是一種比較弱的關係,以參數可見性或局部聲明可見性的方式使用。
代碼:
面向對象設計的工作步驟——細化和實現類間關係,明確其可見性——關係分類——關聯關係
屬性可見性。
代碼:
java代碼:
面向對象設計的工作步驟——細化和實現類間關係,明確其可見性——關係分類——聚合關係
聚合關係是一種特殊的關聯關係,表達的是整體和部分之間的關聯。
Class7和Class8是聚合關係,Class9和Class10是組合關係。
Class9對象除了包含Class10的對象之外,還需要負責管理Class10對象的創建、維護、釋放等工作。
由一個類包含另一個類的對象實例,並全面管理後者的生命週期的聚合關係:組合關係。