Nhiều khi thiết kế UML mình hay sót là chuyện bình thường mà. Còn phân ra đâu là association, đây là composition, đâu là aggregation nhiều khi chẳng cần quan tâm lắm đâu, he. Miễn đọc dễ hiểu, dễ nhìn và nếu dùng tool output ra code thì tool nó làm được mà không cần mình code.
Thêm chút về tiếng Anh:
Association: liên kết (2 class liên kết với nhau mà không phụ thuộc gì vào nhau cả. Class2 được truyền vào làm tham số cho các function trong class1, hết function là hết nhiệm vụ)
Compostion: thành phần (class 2 là một thành phần cấu thành nên class1. Class2 còn sống khi class1 còn sống) Giống như thân thể mình composite từ “mắt, tai, mũi, chân, tay”. Khi mình còn sống thì mắt, tai, … còn hoạt động. Khi mình ngoẻo thì tất cả dừng hoạt động.
Aggregation: tổng hợp (là 1 trường hợp của composition, nhưng sự phụ thuộc lỏng hơn). Cũng giống như thân thể mình, có thể lắp tay, chân, mắt mũi giả vào để hoạt động. Khi chân tay giả hỏng, mua cái mới để lắp vào, không có liên quan gì tới cái cũ cả. Từ các thành phần nhỏ, tổng hợp nên thành 1 cái to to hơn. Design pattern này thường được dùng trong Dependency Injection để tránh sự phụ thuộc của class1 vào class2. Hoàn toàn có thể truyền một fake class vào. Ví dụ như để test cầm nắm của tay hoạt động ngon không, giờ nếu fix cứng “chân”, nhỡ cái chân hỏng khiến tay làm việc sai thì lại qui tội cho cái “tay” hỏng ah? Giờ mình truyền vào 1 cái chân thật ngon, lúc nào cũng hoạt động đúng thì cái thân thể sẽ không còn phụ thuộc quá vào “chân” nữa, lúc này test “tay” mới đúng được.