UML圖中類之間的關系:依賴,泛化,關聯,聚合,組合,實現
依賴關系(Dependence):假設A類的變化引起了B類的變化,則說名B類依賴於A類。
- public class Driver
- {
- public void drive(Car car)
- {
- car.move();
- }
- ……
- }
- public class Car
- {
- public void move()
- {
- ......
- }
- ……
- }
依賴關系有如下三種情況:
1、A類是B類中的(某中方法的)局部變量;
2、A類是B類方法當中的一個參數;
3、A類向B類發送消息,從而影響B類發生變化;
泛化關系(Generalization):A是B和C的父類,B,C具有公共類(父類)A,說明A是B,C的一般化(概括,也稱泛化)
- public class Person
- {
- protected String name;
- protected int age;
- public void move()
- {
- ……
- }
- public void say()
- {
- ……
- }
- }
- public class Student extends Person
- {
- private String studentNo;
- public void study()
- {
- ……
- }
- }
在UML當中,對泛化關系有三個要求:
1、子類與父類應該完全一致,父類所具有的屬性、操作,子類應該都有;
2、子類中除了與父類一致的信息以外,還包括額外的信息;
3、可以使用父類的實例的地方,也可以使用子類的實例;
關聯關系(Association):類之間的聯系,如客戶和訂單,每個訂單對應特定的客戶,每個客戶對應一些特定的訂單,再如籃球隊員與球隊之間的關聯(下圖所示)。

- public class Customer
- {
- private Product[] products;
- ……
- }
- public class Product
- {
- private Customer customer;
- ……
- }
- public class Customer
- {
- private Address address;
- ……
- }
- public class Address
- {
- ……
- }
- public class Node
- {
- private Node subNode;
- ……
- }
| 表示方式 |
多重性說明 |
| 1..1 |
表示另一個類的一個對象只與一個該類對象有關系 |
| 0..* |
表示另一個類的一個對象與零個或多個該類對象有關系 |
| 1..* |
表示另一個類的一個對象與一個或多個該類對象有關系 |
| 0..1 |
表示另一個類的一個對象沒有或只與一個該類對象有關系 |
| m..n |
表示另一個類的一個對象與最少m、最多n個該類對象有關系 (m<=n) |
- public class Form
- {
- private Button buttons[];
- ……
- }
- public class Button
- {
- …
- }
聚合關系(Aggregation):表示的是整體和部分的關系,整體與部分 可以分開.
- public class Car
- {
- private Engine engine;
- public Car(Engine engine)
- {
- this.engine = engine;
- }
- public void setEngine(Engine engine)
- {
- this.engine = engine;
- }
- ……
- }
- public class Engine
- {
- ……
- }
如:電話機包括一個話筒
電腦包括鍵盤、顯示器,一台電腦可以和多個鍵盤、多個顯示器搭配,確定鍵盤和顯示器是可以和主機分開的,主機可以選擇其他的鍵盤、顯示器組成電腦;

組合關系(Composition):也是整體與部分的關系,但是整體與部分不可以分開.
- public class Head
- {
- private Mouth mouth;
- public Head()
- {
- mouth = new Mouth();
- }
- ……
- }
- public class Mouth
- {
- ……
- }
如:公司和部門,部門是部分,公司是整體,公司A的財務部不可能和公司B的財務部對換,就是說,公司A不能和自己的財務部分開; 人與人的心臟.

實現關系(Implementation):是用來規定接口和實線接口的類或者構建結構的關系,接口是操作的集合,而這些操作就用於規定類或者構建的一種服務。
- public interface Vehicle
- {
- public void move();
- }
- public class Ship implements Vehicle
- {
- public void move()
- {
- ……
- }
- }
- public class Car implements Vehicle
- {
- public void move()
- {
- ……
- }
- }
