類圖主要是用來顯示系統中的類、接口以及它們之間的靜態結構和關係的一種靜態模型。
類圖的3個基本組件:類名、屬性、方法。
關係 | 內容 |
---|---|
is-a | 繼承 實現 |
use-a | 依賴 |
has-a | 關聯 聚合 |
contains-a | 組合 |
繼承
繼承表示一種is-a的關係,是對象間耦合度最大的一種關係,子類繼承父類所有的細節。類圖表示如下:
實現
依賴
依賴表示的是use-a的關係,是對象之間最弱的一種關係,是臨時的關聯。代碼中一般指由局部變量、函數參數、返回值建立的對於其他對象的調用關係。
代碼:
class Car{
public void move(){}
}
class Person{
public void move(Car car){
car.move();
}
}
類圖:
關聯
關聯是對象之間的一種引用關係,關係比依賴強,是一種長期性的關係。在代碼中通常是以類的屬性的形式類表達,也就是全局變量。關聯分爲一般關聯、聚合關聯和組合關聯。關聯可以是單向的也可以是雙向的。
代碼:
//一般的單向關聯
class Car{
public void move(){}
}
class Person{
private Car car;//作爲屬性存在於類中,
public void setCar(Car car){
this.car = car;
}
}
//一般的雙向關聯
class Car{
private Person person;
public void setDriver(Person person){
this.person = person;
}
}
class Person{
private Car car;//作爲屬性存在於類中,
public void setCar(Car car){
this.car = car;
}
}
類圖:
聚合
聚合表示has-a 的關係,是一種不穩定的包含關係。強於一般的關聯,有整體與局部的關係,沒有了整體,局部也可單獨存在。比如公司與員工的關係,公司包含員工, 如果公司倒閉了,員工依然可以換公司。
代碼:
class Employee{
}
class Company{
private Employee employee;
public Company(Employee employee) {
this.employee = employee;
}
}
類圖:
組合
組合表示一種contains-a的關係,是一種強烈的包含關係 。組合類負責被組合類的生命週期,是一種更強的聚合關係。部分不能脫離整體。
代碼:
class Heart{}
class Person{
private Heart heart;//心臟,
public Person(){
this.heart = new Heart();
}
}
類圖: