正文
綜述
類圖(Class Diagram)是顯示了模型的靜态結構,特别是模型中存在的類,類的内部結構以及它們與其他類的關系等。
UML中描述對象和類之間互相關系的方式包括:
- 依賴(Dependency),
- 關聯(Association),
- 聚合(Aggregation),
- 組合(Composition),
- 泛化(Generalization),
- 實作(Realization)
依賴(Dependency)虛線箭頭表示
元素A的變化會影響元素B,但反之不成立,那麼B和A的關系是依賴關系,B依賴A;
- 依賴關系也是類與類之間的聯結
- 依賴總是單向的。(#add 注意,要避免雙向依賴。一般來說,不應該存在雙向依賴。)
-
依賴關系在 Java 或 C++ 語言中展現為局部變量、方法的參數或者對靜态方法的調用。
class Person
{
void buy(Car car){
}
![](https://img.laitimes.com/img/__Qf2AjLwojIjJCLyojI0JCLicmbw5yY2MzM2MWNwUTO3MTMjRjY2EjZ0MjNlR2NzYTZmF2Mk9CX5d2bs92Yl1iclB3bsVmdlR2LcNWaw9CXt92Yu4GZjlGbh5yYjV3Lc9CX6MHc0RHaiojIsJye.png)
表示方法:虛線加箭頭
特點:當類與類之間有使用關系時就屬于依賴關系,不同于關聯關系,依賴不具有“擁有關系”,而是一種“相識關系”,隻在某個特定地方(比如某個方法體内)才有關系。
關聯(Association)實線箭頭表示
元素間的結構化關系,是一種弱關系,被關聯的元素間通常可以被獨立的考慮。uml中用實線表示Association關系,箭頭指向被依賴元素
-
關聯關系是類與類之間的聯結,它使一個類知道另一個類的屬性和方法。
2、關聯可以是雙向的,也可以是單向的(#add還有自身關聯)。雙向的關聯可以有兩個箭頭或者沒有箭頭,單向的關聯有一個箭頭。
3、在 Java 或 c++ 中,關聯關系是通過使用成員變量來實作的。
class 徒弟
};
class 唐僧
protected: list<徒弟> tdlist;
表示方法:實線箭頭
特征:表示類與類或類與接口之間的依賴關系,表現為“擁有關系”;具體到代碼可以用執行個體變量來表示。
聚合(Aggregation):帶空心菱形頭表示
關聯關系的一種特例,表示部分和整體(整體 has a 部分)的關系。uml中用帶空心菱形頭的實線表示Aggregation關系,菱形頭指向整體。
- 聚合關系是關聯關系的一種,是強的關聯關系。
- 聚合是整體和部分之間的關系,例如汽車由引擎、輪胎以及其它零件組成。
- 聚合關系也是通過成員變量來實作的。但是,關聯關系所涉及的兩個類處在同一個層次上,而聚合關系中,兩個類處于不同的層次上,一個代表整體,一個代表部分。
-
關聯與聚合僅僅從 Java 或 C++ 文法上是無法分辨的,必須考察所涉及的類之間的邏輯關系。
class 引擎
class 輪胎
class 汽車
protected:引擎 engine;
protected:輪胎 tyre[4];
表示方法:空心菱形實線箭頭頭
特征:屬于是關聯的特殊情況,展現部分-整體關系,是一種弱擁有關系;整體和部分可以有不一樣的生命周期;是一種弱關聯;
組合(Composition):帶實心菱形頭的實線表示
組合是聚合關系的變種,表示元素間更強的組合關系。如果是組合關系,如果整體被破壞則個體一定會被破壞,而聚合的個體則可能是被多個整體所共享的,不一定會随着某個整體的破壞而被破壞。uml中用帶實心菱形頭的實線表示Composition關系,菱形頭指向整體。
- 合成關系是關聯關系的一種,是比聚合關系還要強的關系。
-
它要求普通的聚合關系中代表整體的對象負責代表部分的對象的生命周期。
class 肢
class 人
protected: 肢 limb[4];
表示方法:實心菱形加實線箭頭
特征:屬于是關聯的特殊情況,也展現了展現部分-整體關系,是一種強“擁有關系”;整體與部分有相同的生命周期,是一種強關聯;
泛化(Generalization)帶空心箭頭的實線
泛化是用于對繼承進行模組化的UML元素。在Java中,用extends關鍵字來直接表示這種關系。
泛化關系表示類與類之間的繼承關系,接口與接口之間的繼承關系。
public abstract class Employee{
}
public class Professor extends Employee{
}
實作 (Realization):空心箭頭和虛線表示
對Java應用程式進行模組化時,實作關系可直接用implements關鍵字來表示。
public interface CollegePerson{
}
public class Professor implements CollectPersion{
}
總結
沒什麼好總結的,多用多查,記得就行。。。。。。