UML Class Diagram

UML class diagram 只是個概觀,不會說明所有細節(例如如何實作),可以為需要建立的 class 進行 modeling。

用一張圖解釋:

繼承

1
2
3
4
class Parent
class Child

Child -up-|> Parent

實作(implement)

1
2
3
4
interface Interface
class Concrete

Concrete .up.|> Interface

class 間的關係

抽象上來看 class 之間的關係,程式語言裡不見得有對應的語法,但是釐清抽象上的關係有助寫 code。只要對系統來說是合理的,class 間的關係可能因為系統的演進而改變。

關聯強度:composition > aggregation > association

Association

class 間有關係但關聯性較弱。

1
2
3
class Foo
class Bar
Foo -right-> Bar

class Foo 知道 class Bar

Aggregation

class 間是 has a 的關係。class A 包含 class B,但 B 不是 A 的一部分。

main object 不負責 composed object 的 create 及 destroy,composed object 可以獨立於 main object 之外。例如車子跟輪胎間的關係(Car has a Tire),輪胎可以獨立於車子之外(可以從車子上拆下來)。

UML 以空心菱形表示:

1
Car o-right- Tire

Composition

class 間是 own 的關係。(碎念:own 跟 has 根本沒辦法用中文區分…)

main object own composed object.

composed object 是 main object 的一部分(a part of),composed object 不會獨立存在於 main object 之外。main object 負責 composed object 的 create 及 destroy,main object destroy 時 composed object 也會 destroy。例如生物跟細胞間的關係(Animal owns Cell)。

UML 以實心菱形表示:

1
2
3
4
class Animal
class Cell

Animal *-right- Cell

composition 跟 aggregation 最大的不同在於 composed object 的生命週期是否與 main object 有關。

Dependency

class 間是依賴關係時,UML 以虛線箭頭表示:

1
2
3
4
5
6
class Animal
class Water
class Air

Animal .right.> Water
Animal .left.> Air