29/08/2013

Một số quan hệ giữa các class trong UML

Hôm nay tôi sẽ trình bày về các loại quan hệ giữa các class trong , gồm có các 4 quan hệ chính sau
  1. Realization
  2. Generation
  3. Dependency
  4. Association: có 2 quan hệ phân biệt
    1. Aggregation
    2. 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.
Ký hiệu : có 2 loại ký hiệu

hoặc

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 : , 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 :

  • VD :

  • Ý 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
Thời gian : 4h:44pAM  -  4/1/2009
Người viết : Đặng Thanh Tùng
Nguồn tham khảo : Lời giảng của Ths:  Trần Minh Triết

No comments:

Post a Comment