Quan hệ giữa các class trong UML, gồm có các 4 quan hệ chính sau:
- Realization
- Generation
- Dependency
- Association: có 2 quan hệ phân biệt Aggregation & Composition
Quan hệ Realization (hiện thực hóa)
Là quan hệ giữa một classifier đóng vai trò là hợp đồng và một classifier đóng vai trò thực hiện. Hay nói cách khác:
Mối quan hệ giữa 1 class implement 1 interface được gọi là quan hệ realization, được biểu diễn bởi đường đứt nét có hình mũi tên tam giác chỉ vào interface.
Quan hệ generalization (tên khác là Inheritance)
Còn có tên khác là:
- Quan hệ tổng quát hóa
- Quan hệ khái quát hóa
- Quan hệ kế thừa
Đối tượng cụ thể (concrete) sẽ kế thừa các thuộc tính và phương thức của đối tượng tổng quát (general)
Ký hiệu: A is-a B
Đọc là :
- A là tổng quát của B, B là chi tiết của A
- B là trường hợp đặc biệt của A
- A là cha của B, B là con của A
Quan hệ Dependency (phụ thuộc)
Là quan hệ giữa 2 phần tử trong mô hình mà thay đổi ở phần tử này (phần tử độc lập) có thể gây ra thay đổi ở phần tử kia (phần tử phục thuộc).
Là loại quan hệ giữa 2 object
ClassA và ClassB không có quan hệ Association
Trong ClassA có sử dụng biến toàn cục (kiểu B), hoặc sử dụng phương thức/thuộc tính static của ClassB
Ký hiệu : A use-a B , bằng mũi tên 1 chiều nét đứt , từ bên phụ thuộc sang bên độc lập ;
ClassA “phụ thuộc” vào ClassB ;
Client –> Supplier (phần tử phục thuộc –> phần tử độc lập)
Dependency còn có một số biểu hiện khác , thường dùng các stereotype sau :
<<use>>
: chỉ rằng ngữ nghĩa của lớp gốc (mũi tên) phụ thuộc vào lớp ngọn (mũi tên) . Đặc biệt trong trường hợp lớp gốc dùng lớp ngọn làm tham số trong 1 số method của nó<<permit>>
: chỉ rằng lớp gốc được quyền truy cập 1 cách đặc biệt vào lớp ngọn (chẳng hạn truy cập các thao tác riêng tư). Tương ứng với khái niệm friend trong C++<<refine>>
: chỉ rằng lớp gốc ở 1 mức độ tinh chế cao hơn từ lớp ngọn . Chẳng hạn 1 lớp lập ở giai đoạn thiết kế nhằn tinh chế cùng lớp đó lập ở giai đoạn phân tích
Lưu ý : Phân biệt giữa Dependency và Association
- Association là quan hệ cấu trúc
- Dependency là qua hệ phi cấu trúc
Association
Giữa 2 object của 2 lớp có sự ghép cặp (vợ – chồng , thầy – trò , khách hàng – hóa đơn …) . Tập hợp các kết nối cùng loại (cùng ý nghĩa) giữa các object của 2 lớp tạo thành mối liên kết association , quan hệ giữa 2 tập hợp (2 lớp)
Là mỗi liên hệ giữa 2 lớp có role, role là tên vai trò của mối liên kết : vd như : của , cho , có , liên kết tới , trao đối với , …. (thường tên role có kèm theo 1 mũi tên để chỉ hướng quan hệ áp dụng từ lớp nào sang lớp nào)
Ký hiệu : A has-a B
Ý nghĩa : (trường hợp mũi tên không có chiều) - Hoặc : Trong ClassA có thuộc tính có kiểu là ClassB - Hoặc : Trong ClassB có thuộc tính có kiểu là ClassA
Nhận xét :
- Về mặt lập trình, thuộc tính có thể được lưu trữ dạng biến đơn, biến mảng, hay biến con trỏ
- Có hoặc không có bản số cũng được
- Có hoặc không có mũi tên cũng được
- Nếu có mũi tên 1 chiều , chỉ ra chiều đối tượng thuộc lớp này chỉ có gọi đối tượng của lớp kia, không có chiều ngược lại
- Nếu không có mũi tên nào thì tương đương là mũi tên 2 chiều , hoặc chiều không quan trọng.
Multiplicity
là bản số , lượng số , số object bên này tham gia vào mối kết hợp so với 1 object bên kia.
Quan hệ Aggregation (còn gọi là quan hệ thu nạp)
Đã xác định được ClassA và ClassB có quan hệ Association với nhau
Xác định rõ hơn:
Trong object của ClassA có chứa (trong phần thuộc tính) object của ClassB
ObjectX của ClassA bị hủy thì ObjectY của ClassB (bên trong ObjectX) vẫn có thể còn tồn tại
Còn gọi là shared-aggregation.Một dạng của nối kết, trong đó một phần tử này chứa các phần tử khác.
Ký hiệu :
Ý nghĩa : còn gọi là : Whole A – Part B . Nghĩa là A được tạo từ nhiều B kết hợp lại , và B có thể tạo ra độc lập , không cần phải tạo ra A , B có thể cùng thuộc 1 whole khác A.
Chú ý : Từ share ở đây có nghĩa là , B có thể là bộ phận của whole khác, do đó A bị hủy thì chưa chắc B bị hủy .
Quan hệ Composition (hợp thành)
Là loại aggregation chặt chẽ hơn , còn gọi là non-shared aggregation.
Ký hiệu :
Ý nghĩa : còn gọi là Whole A – Part B . Nghĩa là A được tạo từ nhiều B kết hợp lại , nhưng B không thể đứng 1 mình được , B chỉ là thuộc A mà thôi không thể cùng thuộc Whole khác được.
Đã xác định được ClassA và ClassB có quan hệ Association với nhau
Xác định rõ hơn:
- Trong object của ClassA có chứa (trong phần thuộc tính) object của ClassB
- ObjectX của ClassA bị hủy thì ObjectY của ClassB (bên trong ObjectX) không thể còn tồn tại
Chú ý :
- B chỉ có thể là bộ phận của whole A
- A chết thì tất cả B chết
- B chết không ảnh hưởng đến A
- Bản số của Whole A luôn là 1, nghĩa là B luôn thuộc 1 A thôi