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

Advertisement

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

  1. Bài viết rất hay, cám ơn bạn rất nhiều, mình cũng đang thắc mắc về vấn đề này. Tiện đây bạn có thể cho mình hỏi thêm là Biểu đồ lớp thì nó không miêu tả được những cái gì không ?

  2. @ToanBK: Để trả lời câu hỏi của bạnMình có gợi ý thế này nhé. Trong uml khi thiết kế phần mềm sau khi đã qua bước phân tích, tại sao chúng ta cần có các biểu đồ (diagram) khác biểu đồ lớp như: Activity Diagram, Sequence Diagram, Flow Data Diagram? Trả lời được câu trên là bạn sẽ biết được điểm mạnh điểm yếu của từng lại biểu đồ rồi đó.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Connecting to %s