2012-02-29 69 views
10

Nếu một lớp có chứa con trỏ đến một lớp đơn, có thể là aggregation?Cách hiển thị mối quan hệ Singleton trong sơ đồ lớp

Để hiểu biết của tôi, nó không thể là mối quan hệ has-a vì lớp không tạo ra một thể hiện của lớp đơn, nó chỉ sử dụng nó như mối quan hệ association.

Trả lời

9

Tiêu đề không có ý nghĩa hoàn chỉnh 100% như đã viết. Có các lớp đơn, nhưng không có mối quan hệ thực sự đơn lẻ. Bất kỳ mối quan hệ nào cũng có thể được gán nhiều điểm, vì vậy nếu bạn ngụ ý một - một mối quan hệ, tất cả những gì bạn làm là chỉ định tính đa dạng 1 ở cả hai đầu.

Các lớp học cũng có thể có nhiều cấp độ. Bạn không thường thấy điều này được sử dụng, ngoại trừ trong một trường hợp: singletons.

Khi nói đến A có hoặc chứa hoặc tham chiếu B, về cơ bản có ba mức độ kín trong UML.

Kết hợp (đầu mũi tên thoi rhomboid) ngụ ý rằng ngăn chặn không độc quyền và đối tượng chứa không chia sẻ bất kỳ khía cạnh nào của vòng đời của nó với đối tượng chứa. Trong thực hiện, đây thường là một con trỏ.

Thành phần (đầu mũi tên rhomboid đầy) ngụ ý rằng đối tượng chứa bị hủy khi đối tượng chứa. Làm việc này thường có nghĩa là ngăn chặn là độc quyền. Trong thực hiện, điều này thường là một con trỏ có destructor được gọi trong destructor của lớp chứa (mặc dù nó có thể không được tạo trong constructor của lớp chứa).

Kết hợp được hướng dẫn hoặc thuộc tính thành viên (cùng một điều trong UML) ngụ ý rằng đối tượng chứa là một phần của trạng thái hoặc thành phần nếu bạn muốn, của đối tượng chứa. Trong quá trình thực hiện, điều này thường có nghĩa là tham chiếu không phải là một con trỏ, hoặc nếu nó là đối tượng chứa được đồng tạo và được hủy bỏ với đối tượng chứa.

Kết hợp của một singleton là hoàn toàn cho phép (thậm chí từ một số lớp khác nhau), bởi vì tập hợp theo định nghĩa không độc quyền.

Thành phần có chút khó chịu, trừ khi lớp chứa cũng là một singleton.

Thuộc tính/liên kết được chỉ định có nhiều khả năng là sai. Nếu lớp có chứa là một singleton, nó không có nghĩa là làm cho lớp được chứa một singleton cũng vì nó được ngụ ý. Và nếu lớp được chứa được sử dụng như một thành viên trong hai lớp khác nhau, nó không thể là một singleton.

Ngoài những điều trên, bạn cũng có thể thêm bao nhiêu mối quan hệ Sử dụng tùy thích. Điều này là phổ biến trong tất cả các thiết kế, và ngụ ý rằng lớp ở cuối nguồn của mối quan hệ gọi các phương thức trong lớp ở cuối đích.

enter image description here

1

Ngoài ra còn có một tập hợp với hình vuông mở thay vì điền. Mở có nghĩa là trường hợp đầu tiên không tạo ra trường hợp khác (nhưng vẫn có mối quan hệ có).

1

Bạn có thể giả vờ rằng nó là tập hợp, nhưng sự thật của nó là: những người độc thân không có gì để làm với mã hướng đối tượng. Chúng là một dạng của trạng thái toàn cục (giống như các biến toàn cục).

Bạn có thể muốn xem xét một cách tiếp cận khác cho vấn đề.

PS một số tài liệu có thể giúp:

4

Tôi có thể nói, về mặt kỹ thuật, có, bạn có thể có một biến thành viên đó là một con trỏ đến một đối tượng singleton và gọi nó là tập hợp; sử dụng thuật ngữ tổng hợp không có nhiều ý nghĩa khi bạn viết mã. Đối với tất cả các ý định và mục đích, nó chỉ là một liên kết.

Tuy nhiên, việc sử dụng tổ hợp tổng hợp trong biểu đồ có thể hoặc không thể giúp người xem sơ đồ hiểu được sơ đồ đó. Điều đó có thể phụ thuộc vào người bạn sẽ cho họ thấy và những gì họ có thể hiểu được tổng hợp có ý nghĩa.

Để thực sự trả lời câu hỏi trong tiêu đề (sử dụng thông tin từ Hướng dẫn sử dụng UML (2nd Edition):

______________________   ______________________ 
|     |   |     1| 
| AggregatingClass |   | SingletonClass | 
|____________________|  0..1|____________________| 
|     |<>--------|     | 
|____________________|   |____________________| 
|     |   |     | 
|____________________|   |____________________| 

(Lưu ý 1 ở góc trên bên phải của hộp lớp singleton chỉ cardinality.)

+0

Tôi nhận ra không ai thực sự trả lời câu hỏi tiêu đề! –

+1

... và sau bình luận cuối cùng của tôi, nó vẫn chưa được trả lời! Tôi đã cập nhật sơ đồ của mình và trả lời đúng. Tôi đã hiểu sai "mối quan hệ singleton" là "singleton pattern'. @ahj –

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