So sanh aggregation với Composition khi thiet ke class diagram

Khi thiết kế class-diagram bằng UML, chắc hẳn ai cũng gặp khúc mắc về sự khác nhau giữa hai quan hệ aggregation và composition. Thực ra chẳng có gì là khó khăn cả nếu các bạn đọc qua 2 trường hợp ví dụ về 2 quan hệ trên.

* Trước hết là sự  ging nhau: cả hai đều là quan h kết hp ( association).

* Khác nhau:
aggregation ( tụ hp) là quan hệ giữa toàn thể và bộ phận, trong đó một lớp biểu diễn cái lớn hơn(tổng thể) còn lớp kia biểu diễn cái nhỏ hơn(bộ phận). Aggregation biểu diễn quan hệ has-a, có nghĩa rằng một đối tượng của lớp tổng thể có nhiều đối tượng của lớp thành phần. Ví dụ: Một môn học được mở (cái này trong học tín chỉ) có nhiều sinh viên theo học, môn học được mở là class tổng thể, còn sinh viên là class thành phần. Nếu không có môn học được mở thì sinh viên vẫn tồn tại, hoặc khi hủy môn học được mở đi thì sinh viên vẫn không bị hủy.
Trong class-diagram thì quan hệ aggregation được biểu diễn bằng đoạn thẳng kết thúc bởi hạt kim cương trắng gần với lớp toàn thể(aggregate class).
Ngược li,composition(gp) mạnh hơn aggregation về sự phụ thuộc lẫn nhau, ví dụ cho dễ hiểu nhé: Một công ty (Company) có nhiều phòng ban( Department). Như thế khi công ty bị hủy đi thì phòng ban (Department) không còn tồn tại, hoặc Một phòng học( Class-room) có nhiều bàn ghế (table), thực tế là tất cả các phòng học đều có bàn ghế riêng cho từng phòng và bàn của phòng nào đều có mã số phòng đi kèm với mã số bàn, như vậy nếu phòng học bị hủy thì bàn ghể của phòng đó bị hủy theo (composition relationship). Tuy nhiên nếu ta đặt vấn đề khác đi một tí là có một số bàn trong kho, có một lúc nào đó muốn mở một số phòng học tăng cường thì trong trường hợp này số bàn trong kho đó không thuộc về nhất định một phòng nào cả như thế khi phòng học tăng cường bị hủy thì bàn trong kho này không bị hủy.
Trong class-diagram thì quan hệ composition được biểu diễn bằng đoạn thẳng kết thúc bởi hạt kim cương màu đen.

* Vậy thì 2 quan hệ này trong JAVA được thể hiện thế nào nhỉ:

Java is always using references. It it always pass by value, because the thing that’s being passed is not the object itself, which is out on the heap, but a reference to that object.

And that’s not the difference between aggregation and composition. Both describe a parent-child relationship between objects, but in aggregation the children have a life outside the parent. Composition means that when you delete the parent the children are deleted, too.

link ref: http://forums.sun.com/thread.jspa?threadID=696709

Ref:

http://tcle.wordpress.com/2008/05/20/aggregation-vs-composition-a-review-on-uml/

http://design-antony.blogspot.com/2007/07/aggregation-vs-composition.html

http://www.c-sharpcorner.com/uploadfile/pcurnow/compagg07272007062838am/compagg.aspx