2009-04-08 48 views
22

Trong OOP, sự khác nhau giữa bố cục (được biểu thị bằng kim cương được lấp đầy trong UML) và mối liên hệ (được biểu thị bằng quan hệ rỗng trong UML) giữa các lớp. Tôi hơi bối rối. Tập hợp là gì? Tôi có thể có một ví dụ thế giới thực thuyết phục không?Sự khác biệt giữa mối quan hệ Thành phần và Hiệp hội là gì?

+3

Bạn không có nghĩa là Tổng hợp thay vì Hội? – Joey

+0

không khác nhau? –

+1

Hiệp hội không giống như tập hợp; trong UML, tập hợp được biểu diễn bằng một viên kim cương rỗng. – Rob

Trả lời

1

Thông thường, bố cục có nghĩa là tuổi thọ của đối tượng chứa được bao bọc bởi đối tượng chứa, trong khi liên kết là tham chiếu đến đối tượng có thể tồn tại độc lập.

Tuy nhiên, đây chỉ là thực tế tôi đã quan sát. Tôi ghét phải thừa nhận nó, nhưng cày qua thông số kỹ thuật của UML2 không cao trong danh sách những điều thú vị của tôi để làm!

1

Sự tồn tại độc lập.

Hóa đơn bao gồm các chi tiết đơn hàng.

Chi tiết đơn hàng không có trên hóa đơn là gì? Nó - tốt - không có gì. Nó không thể tồn tại độc lập.

Mặt khác, Hóa đơn được liên kết với Khách hàng.

Khách hàng có một sự tồn tại độc lập, có hoặc không có hóa đơn.

Nếu hai điều có sự tồn tại độc lập, chúng có thể được liên kết.

Nếu một thứ không thể tồn tại độc lập, thì đó là một phần của bố cục.

11

Sở hữu và sử dụng.

Thành phần: đối tượng có tham chiếu sở hữu đối tượng được đề cập và chịu trách nhiệm về "tuổi thọ" của nó, sự hủy diệt (và thường được tạo, mặc dù nó có thể được chuyển vào). Còn được gọi là có mối quan hệ.

Hiệp hội: đối tượng có tham chiếu sử dụng đối tượng được đề cập, có thể không phải là người dùng độc quyền và không chịu trách nhiệm về việc anh ấy đã gọi đến tuổi thọ của đối tượng. Còn được gọi là mối quan hệ sử dụng-a.

Các OP nhận xét:

Bạn có thể cung cấp một ví dụ thế giới thực. Ngoài ra, tập hợp là gì? - Marc

Tổng hợp: một Hiệp hội từ toàn bộ đến một phần và không thể tuần hoàn được.

Ví dụ:

Thành phần: Xe có một động cơ, một người có địa chỉ. Về cơ bản, phải có, kiểm soát suốt đời.

Hiệp hội: Xe có trình điều khiển, một số cá thể lớp có Trình ghi lỗi. Tuổi thọ không được kiểm soát, có thể được chia sẻ.

Tập hợp: Một DOM (Mô hình đối tượng tài liệu, đó là các đối tượng tạo thành một cây các phần tử HTML) Nút có nút con (một mảng). Nút là đỉnh (tốt, cao hơn); nó "chứa" con cái của nó, chúng không chứa nó.

+0

Bạn có thể cung cấp ví dụ về thế giới thực hay không. Ngoài ra, tập hợp là gì? –

+1

Động cơ ô tô là tập hợp theo Sommerville. Mối quan hệ có một nghĩa là tổng hợp không phải là thành phần. Thành phần là mối quan hệ một phần của mối quan hệ. "Người có địa chỉ" cũng là một tập hợp theo http://www.c-sharpcorner.com/UploadFile/pcurnow/compagg07272007062838AM/compagg.aspx – Slazer

0

Thành phần có nghĩa là một phần của trạng thái thực thể được đóng gói theo loại khác nhưng nó là một phần khái niệm của trạng thái thực thể. Ví dụ: bạn có thể có loại địa chỉ và loại thực thể nhân viên bao gồm địa chỉ.

Hiệp hội có nghĩa là loại thực thể được kết hợp với một loại thực thể khác nhưng thực thể được kết hợp là khái niệm không phải là một phần của trạng thái thực thể. Ví dụ, một nhân viên có thể được kết hợp với một công ty.

16

đây đi một vài ví dụ:

  • Tôi là một nhân viên của một công ty, vì vậy tôi đang liên quan đến công ty đó. Tôi không phải là một phần của nó, tôi cũng không sáng tác nó, nhưng tôi có liên quan đến nó.

  • Tôi bao gồm các nội tạng, trừ khi được cấy ghép, sẽ chết cùng tôi. Đây là thành phần, là một liên kết rất mạnh giữa các đối tượng. Về cơ bản các đối tượng được sáng tác bởi các đối tượng khác. Động từ nói mọi thứ.

  • Ngoài ra còn có một loại thành phần bị ràng buộc ít hơn, được gọi là tập hợp. Một tập hợp là khi các đối tượng được sáng tác bởi các đối tượng khác, nhưng chu kỳ sống của chúng không nhất thiết phải bị ràng buộc. Sử dụng một ví dụ cực đoan, một đồ chơi Lego là một tập hợp các phần. Mặc dù đồ chơi có thể được tháo dỡ, các bộ phận của nó có thể được kết hợp lại để tạo ra một món đồ chơi khác.

+6

+1 cho ví dụ về lego ;-) – EricSchaefer

1

Thành phần là mối quan hệ chặt chẽ hơn so với tập hợp. Thành phần có nghĩa là một cái gì đó có liên hệ chặt chẽ đến cái gì đó khác mà về cơ bản họ không thể tồn tại một cách độc lập, hoặc nếu họ có thể, họ sống trong các ngữ cảnh khác nhau.

Ví dụ thế giới thực: bạn xác định cửa sổ GUI và sau đó là trường văn bản để viết nội dung nào đó. Giữa lớp xác định GUI và lớp xác định trường văn bản có thành phần. Cùng nhau, họ tạo ra một widget có thể được xem như là một thực thể. Giả sử bạn xóa cửa sổ và bạn cũng xóa trường văn bản.

Tổng hợp là khác nhau, theo nghĩa là liên kết giữa hai thực thể là tạm thời, không ổn định và thỉnh thoảng. Một ví dụ thế giới thực. Giả sử bạn có một cơ sở dữ liệu các đối tượng chứa nhiều cá thể dữ liệu. Bây giờ bạn chạy một số bộ lọc để thu thập các trường hợp dữ liệu tuân theo một tiêu chí nhất định, và các cá thể kết quả được đẩy vào một danh sách đồ họa để người dùng có thể nhìn thấy chúng. Khi widget đồ họa nhận các đối tượng, nó có thể tạo thành một tập hợp các thực thể này và trình bày chúng. Nếu người dùng đóng cửa sổ với danh sách đồ họa, và cửa sổ thứ hai bị xóa, các đối tượng dữ liệu sẽ không bị xóa. Có thể chúng được hiển thị ở một nơi khác, hoặc bạn vẫn cần chúng.

Ngoài ra, nói chung, bố cục được xác định tại thời điểm tạo. Thay vào đó, tập hợp được định nghĩa sau trong thời gian tồn tại của đối tượng.

34

THÀNH PHẦN

Hãy tưởng tượng một công ty phần mềm bao gồm các đơn vị khác nhau kinh doanh (hoặc bộ phận) như lưu trữ BU, Networking BU. Ô tô BU. Thời gian sống của các Đơn vị Kinh doanh này được điều chỉnh bởi tuổi thọ của tổ chức. Nói cách khác, các Đơn vị Kinh doanh này không thể tồn tại độc lập nếu không có công ty. Đây là THÀNH PHẦN.(Ví dụ: công ty bao gồm đơn vị sự nghiệp)

HIỆP HỘI

Các công ty phần mềm có thể cung cấp thực phẩm bên ngoài phục vụ thức ăn cho người lao động. Những người cung cấp thực phẩm này KHÔNG PHẢI LÀ PHẦN CỦA công ty. Tuy nhiên, chúng được hợp nhất với công ty. Các nhà cung cấp thực phẩm có thể tồn tại ngay cả khi công ty phần mềm của chúng tôi đóng cửa. Họ có thể phục vụ một công ty khác! Vì vậy, tuổi thọ của các nhà cung cấp thực phẩm không bị chi phối bởi tuổi thọ của công ty phần mềm. Đây là Hiệp hội tiêu biểu

AGGREGATION

Hãy xem xét một đơn vị sản xuất xe. Chúng ta có thể nghĩ về chiếc xe như một thực thể toàn bộ và Car Wheel như một phần của chiếc xe. (tại thời điểm này, nó có thể trông giống như composition..hold on) Các bánh xe có thể được tạo ra tuần trước thời hạn, và nó có thể ngồi trong một nhà kho trước khi được đặt trên một chiếc xe trong quá trình lắp ráp. Trong ví dụ này, cá thể của lớp Wheel rõ ràng sống độc lập với cá thể của lớp Car. Vì vậy, không giống như thành phần, trong tập hợp, vòng đời của các vật thể liên quan không được kết hợp chặt chẽ.

+8

Vậy sự khác biệt là gì giữa liên kết và tập hợp? – nawfal

+0

Ví dụ hay, nhưng bạn có thể vui lòng cung cấp giải thích chung không? Tôi hiểu rằng câu hỏi đã không yêu cầu nó. Cảm ơn bạn. – chischaschos

+0

@nawfal, từ ví dụ trên có vẻ như tiện ích độc lập của một phần mà không có toàn bộ – charany1

2

Tôi tin rằng một ví dụ dựa trên mã có thể giúp minh họa các khái niệm được đưa ra bởi các câu trả lời ở trên.

import java.util.ArrayList; 

public final class AssoCia 
{ 
    public static void main(String args[]) 
    { 
     B b = new B(); 
     ArrayList<C> cs = new ArrayList(); 

     A a = new A(b, cs); 

     a.addC(new C()); 
     a.addC(new C()); 
     a.addC(new C()); 
     a.listC(); 
    } 
} 

class A 
{ 
    // Association - 
    // this instance has a object of other class 
    // as a member of the class. 
    private B b; 

    // Association/Aggregation - 
    // this instance has a collection of objects 
    // of other class and this collection is a 
    // member of this class 
    private ArrayList<C> cs; 

    private D d; 

    public A(B b, ArrayList<C> cs) 
    { 
     // Association 
     this.b = b; 

     // Association/Aggregation 
     this.cs = cs; 

     // Association/Composition - 
     // this instance is responsible for creating 
     // the instance of the object of the 
     // other class. Therefore, when this instance 
     // is liberated from the memory, the object of 
     // the other class is liberated, too. 
     this.d = new D(); 
    } 

    // Dependency - 
    // only this method needs the object 
    // of the other class. 
    public void addC(C c) 
    { 
     cs.add(c); 
    } 

    public void listC() 
    { 
     for (C c : cs) 
     { 
      System.out.println(c); 
     } 
    } 

} 

class B {} 

class C {} 

class D {} 
Các vấn đề liên quan