Class Relationships
Trong thực tế, class không chỉ nằm một mình là chúng quan hệ với các class khác thông qua các loại relationship khác nhau. Các relationship giữa các class có điểm mạnh khác nhau.
Điểm mạnh của các relationship dựa trên mức độ phụ thuộc giữa các class trong mối relationship đó.
Hai class mà có độ phụ thuộc mạnh với nhau thì được gọi là tightly coupled, nếu một class thay đổi thì sẽ ảnh hưởng lớn đến class còn lại. Tight coupling thường (không phải luôn luôn) là điều không tốt, vì vậy, một relationship càng mạnh thì càng phải cẩn thận.
Dependency
Một dependency giữa hai class nói rằng một class cần được biết về class kia để sử dụng các object là thể hiện của class đó. Nếu một UserInterface class của một CMS cần làm việc với một object của class BlogEntry, thì dependency này sẽ được vẽ sử dụng dependency arrow.
UserInterface và BlogEntry class đơn giản là chỉ làm việc với nhau tại thời điểm khi mà user interface cần hiển thị nội dung của blog entry. Trong class diagram, hai class của hai object này là phụ thuộc vào nhau để đảm bảo chúng làm việc với nhau tại runtime.
Dependency cho biết là hai object có thể làm việc được cùng nhau, vì vậy, đây là một relationship yếu nhất giữa hai class.
Dependency được sử dụng khi ta có một lớp mà cung cấp các hàm hỗ trợ, ví dụ như Java regular expression (java.util.regrex) và mathematics (java.math) package. Các class mà phụ thuộc vào các class thuộc hai package này sử dụng các hàm hỗ trợ của các class đó.
Association
Mặc dù dependency cho phép một class sử dụng object của class khác, association yêu cầu chặt chẽ hơn một chút là một class sẽ thật sự có một tham chiếu đến một object, hoặc tập các object của class khác bằng một attribute. Nếu ta thấy nếu một class cần làm việc với một class khác thì mối quan hệ giữa chúng nên là dependency.
Nếu không có thông tin nào thêm ngoài association relationship giữa 2 class, ta không thể biết được class nào chứa thuộc tính hỗ trợ cho relationship. Ta sẽ cho cả 2 class đều có thuộc tính tham chiếu. Tuy nhiên trong nhiều trường hợp, chỉ có một class chứa thuộc tính tham chiếu mà thôi.
Association classes
Đôi khi một association tự bản thân nó tạo ra một class mới. Association class hữu dụng trong các trường hợp phức tạp, khi bạn muốn thể hiện rằng một class có quan hệ với hai class và hai class này có mối quan hệ với nhau.
Trong hình dưới, BlogEntry được associated với BlogAccount. Tuy nhiên, dựa trên các category mà account chứa, blog entry cũng associated với một số các category. Nói cách khác, relationship giữa blog account và blog entry tạo ra một association relationship với một tập các category.
Không có một quy tắc cứng và nhanh chóng để xác định association class được implement thế nào trong code. Nhưng đây là một ví dụ cho hình trên.
public class BlogAccount { private String name; private Category[] categories; private BlogEntry[] entries; } public class Category { private String name; } public class BlogEntry { private String name; private Category[] categories }
Aggregation
Tiến thêm một bước từ association relationship, ta đến với aggregation. Aggregation là một relationship mạnh hơn associtation, nó cho biết một class thực sự sở hữu các object của một class kia, nhưng có thể share với class khác.
Một author có nhiều blogAccount. Anh ta có thể chia sẻ blogAccount với các class khác, tuy nhiên, anh ta có thể xoá blogAccount nếu muốn.
Vậy việc implement trong code như thế nào? Nó cũng giống như association, cũng sẽ có một attribute để hỗ trợ cho relationship.
Composition
Composition là một relationship mạnh hơn cả aggregtion, mặc dù chúng hoạt động giống nhau.
Một blog entry có phần introduction và main body và nó sẽ không share chúng với bất kỳ phần còn lại nào của hệ thống. Khi blog entry bị xoá, introduction và main body cũng bị xoá theo.
Generalization (Otherwise Known as Inheritance)
Generalization và inheritance được sử dụng để mô tả một class mà là một type của một class khác. Khái niệm "has a" và "is a type of" trở thành một cách để quyết định khi nào relationship giữa hai class là aggregation hay generalization. Nếu ta thấy một class là một phần của một object của một class khác, thì relationship là association, aggregation hoặc composition. Nếu ta thấy một class là một type của một class khác, thì ta sẽ dùng generalization.
Nhận xét
Đăng nhận xét