2009-07-17 36 views
8

Tôi đã sử dụng UML một thời gian và tôi đã đọc một vài bài báo, sách, diễn đàn về nó nhưng tôi vẫn KHÔNG THỰC SỰ khi hai lớp phải được kết nối với đường kết hợp (một dòng đơn giản hoặc mũi tên (hoặc những cái này không giống nhau?)). Tôi sẽ cung cấp ba ví dụ - bạn có thể cho tôi biết cái nào sẽ khiến hai lớp này có mối quan hệ này không?Vấn đề hiểu biết về hiệp hội UML

1.

//a field of OtherClass 
    public class MainClass 
    { 
     private OtherClass other; 
    } 

2.

//method argument 
    public class MainClass 
    { 
     public void Action(OtherClass other) 
     { } 
    } 

3.

//method return value 
    public class MainClass 
    { 
     public OtherClass Action() 
     { } 
    } 

4.

//used inside a method 
    public class MainClass 
    { 
     private Something something; 

     public void Action() 
     { 
      OtherClass other = something.GetOtherClass(); 
     } 
    } 

Trả lời

0

tôi thường sử dụng hai các trình kết nối khác nhau trong UML:

  1. Khi lớp học phụ thuộc vào việc triển khai lớp khác. Điều này có nghĩa là một lớp đang tạo hoặc xử lý một thể hiện của một lớp khác. Vì vậy, lớp gọi là phụ thuộc vào lớp thực hiện. Điều này sẽ hiển nhiên trong tất cả các ví dụ của bạn.

  2. Khi lớp học mở rộng hoặc triển khai lớp khác.

+0

Vì vậy, bạn sử dụng trình kết nối nào trong mỗi trường hợp? –

4

Edit: Viết lại câu trả lời thảo luận sau đây trong ý kiến ​​(nhờ Chimp để chỉ ra những gì tôi bỏ qua trong ví dụ 4)

Ví dụ 1: OtherClass là một thuộc tính của MainClass, và do đó được mô phỏng như một hiệp hội.

Ví dụ 2 và 3: OtherClass được tham chiếu trong định nghĩa lớp, mặc dù không được lưu trữ trong một thuộc tính, do đó là phụ thuộc.

Ví dụ 4: Lớp Cái gì đó là một thuộc tính và do đó một liên kết, trong khi OtherClass được tham chiếu, không được lưu trữ trong một thuộc tính và do đó nó phụ thuộc.

Trong UML, các phụ thuộc và liên kết là cả hai loại Mối quan hệ và không liên quan chặt chẽ (ngoại trừ thông qua siêu phổ biến), mặc dù theo ý kiến ​​của tôi, một hiệp hội ngụ ý sự phụ thuộc.

Các liên kết được biểu thị bằng một đường thẳng giữa 2 lớp có nhiều cấp độ ở mỗi đầu. Khả năng điều hướng được biểu thị bằng các mũi tên cho biết lớp nào nhận biết được (Ví dụ: Lớp A ___> Lớp B nghĩa là A biết B, nhưng không phải theo cách khác) khả năng điều hướng theo cả hai hướng được thể hiện bằng mũi tên ở cả hai đầu. Trường hợp không có mũi tên, nó thường an toàn hơn để không đưa ra giả định về khả năng điều hướng trừ khi được nêu ở nơi khác.

Các phụ thuộc được biểu thị bằng một đường đứt nét với mũi tên từ lớp phụ thuộc (máy khách) đến lớp phụ thuộc vào (nhà cung cấp) (Ví dụ: A ----> B nghĩa là A phụ thuộc vào B). Các phụ thuộc cho thấy rằng một lớp được tham chiếu tại một số điểm, và như vậy máy khách phụ thuộc vào các hoạt động được cung cấp bởi nhà cung cấp, nhưng nó không chỉ ra cách nó được tham chiếu (không giống như một liên kết gợi ý tham chiếu được lưu trữ trong một thuộc tính).

+0

ok nhưng không phải là lớp nhận thức của các lớp học được cung cấp như là đối số? và bạn có chắc chắn về những gì bạn đang nói, bởi vì tôi đang tìm kiếm một câu trả lời "đây là những gì lý thuyết nói, kết thúc chủ đề"? – agnieszka

+0

hmm, tôi có thể nói lại một chút: hành trình từ tâm trí đến bàn phím không phải lúc nào cũng dễ dàng, và tôi nghĩ tôi đã mất đi một số ý nghĩa trên đường đi. Các liên kết được thể hiện dưới dạng thuộc tính. Có thể chấp nhận hiển thị các liên kết trong UML theo cách tương tự như các kiểu dữ liệu nguyên thủy, nhưng việc sử dụng các đường kết nối thường có nhiều thông tin hơn. Tôi sợ tôi không thể nghĩ ra giải thích cho thấy lý do tại sao các đối số cho các phương thức không cấu thành liên kết (ngoài "vì chúng không" không phải là giải thích). Nhưng, bất kể, tôi chắc chắn điều này là chính xác. – chrisbunney

+0

Nhân tiện, tôi luôn giữ một bản sao của UML Chưng cất trong tay khi làm việc với UML, tôi thấy nó là một tài liệu tham khảo rất tốt: http://www.martinfowler.com/books.html#uml – chrisbunney

6

Đầu tiên của tất cả mũi tên thể hiện khả năng điều hướng của liên kết.Mũi tên đơn có nghĩa là một chiều mối quan hệ, trong trường hợp này chỉ có lớp nguồn biết về lớp đích. Mũi tên trên cả hai đầu có nghĩa là hai chiều mối quan hệ, nơi cả hai lớp đều biết về nhau. Nếu không có mũi tên nào thì sự kết hợp có thể là hai chiều theo mặc định hoặc bị ngăn chặn vì mục đích dễ đọc. Trong thực tế, bạn nên vẽ mũi tên chỉ khi bạn muốn nhấn mạnh sự chỉ đạo của hiệp hội.

Khi nói đến câu hỏi thứ hai của bạn, chỉ trường hợp đầu tiên mô tả liên kết (một chiều) giữa MainClassOtherClass. Cả đối số lẫn giá trị trả về đều không ngụ ý sự liên kết theo nghĩa UML (mặc dù cả hai hàm ý phụ thuộc). Trong ví dụ cuối cùng, có một liên kết giữa các lớp MainClassSomething thông qua thuộc tính something. Theo quy tắc chung, bạn nên tìm kiếm các liên kết trong thuộc tính.

Xin lưu ý rằng có một khái niệm về dependency trong UML và được biểu diễn bằng một đường đứt nét.

Pozdrowienia!

+0

Điều đó khá nhiều tiền nó lên . +1 – Randolpho

1

Một liên kết thể hiện hai hoặc nhiều thuộc tính liên quan.

Trong ví dụ 1, MainClass có thuộc tính loại OtherClass. Nếu OtherClass có một thuộc tính rõ ràng của kiểu MainClass thì sẽ có một liên kết hai chiều giữa lớp; nếu OtherClass có một thuộc tính ngầm của kiểu MainClass (nghĩa là không có thuộc tính, nhưng mối quan hệ có thể được dẫn xuất bằng cách làm việc theo hướng khác) thì sẽ có một liên kết một chiều từ MainClass đến OtherClass.

Trong ví dụ 2, 3 và 4, MainClass không có bất kỳ thuộc tính nào thuộc loại OtherClass. Tuy nhiên, nó phụ thuộc vào OtherClass, vì vậy sẽ có một mối quan hệ phụ thuộc từ MainClass đến OtherClass. Trong mã, mã này được biểu thị bằng một số sử dụng hoặc #include.

Các vấn đề liên quan