2011-10-20 35 views
8

Tôi không chắc chắn liệu mình có sử dụng đúng cách association and aggregation or composition diamond hay không.Sơ đồ lớp UML Hiệp hội vs (Tập hợp | Thành phần) -Diamonds

Tôi sẽ sử dụng Hiệp hội cho giao diện vì tôi không thể khởi tạo chúng. Giống như họ làm điều đó here ví dụ. Hoặc cho các lớp tĩnh, cùng một lý do.

Và kim cương tôi chỉ sử dụng cho các đối tượng tôi có thể khởi tạo. Giống như các lớp bình thường.

Nhưng tôi không chắc liệu đây có phải là cách chính xác để phân biệt chúng hay không, bởi vì nếu bạn check một lần nữa, bạn sẽ thấy chúng không cụ thể về nó. Trong UML 2.3 specification Tôi không thể tìm hiểu thêm, vậy bạn sử dụng nó như thế nào?

Và có cách thứ ba, dấu gạch ngang có đường viền <> mũi tên, nhưng tôi không có keo khi sử dụng cái này. Vì vậy, có lẽ bạn có thể giúp tôi với một trong đó, quá?

Trả lời

16

Tôi sẽ sử dụng Hiệp hội cho giao diện vì tôi không thể khởi tạo chúng. Giống như họ làm điều đó ở đây chẳng hạn. Hoặc cho các lớp tĩnh, cùng một lý do.

Và kim cương tôi chỉ sử dụng cho các đối tượng tôi có thể khởi tạo. Giống như các lớp bình thường.

Đó không thực sự là cách chúng hoạt động. Ba hình thức (Hiệp hội, Tổng hợp và Thành phần) xác định các thuộc tính khác nhau về mối quan hệ. Cả ba thường được sử dụng giữa các lớp mặc dù có thể liên quan đến Giao diện. Hiệp hội và Thành phần là hai cách dễ nhất:

  • Hiệp hội (không có kim cương) là hình thức chung nhất, cho phép xác định số lượng và khả năng điều hướng ở cả hai đầu.
  • Thành phần (đầy kim cương) là mối quan hệ toàn bộ phần mà 'toàn bộ' (kết thúc bằng viên kim cương đen) 'chứa' phần. Nó áp đặt hai hạn chế chính:
    1. Chỉ có thể có 1 vùng chứa (ví dụ: số lượng cuối cùng là chính xác 1);
    2. Nó áp đặt trách nhiệm vòng đời cho các bộ phận trên toàn bộ. Vì vậy, vùng chứa chịu trách nhiệm tạo và xóa các phần. Một phần không thể tiếp tục tồn tại nếu vùng chứa của nó bị xóa.

Tổng hợp (hình kim cương không được đặt) nằm đâu đó ở giữa. Nó giống như một thành phần - ngoại trừ nó không bắt buộc các thuộc tính được mô tả ở trên. Tôi không đích thân sử dụng nó. Các ngữ nghĩa quá không rõ ràng cho nó là đáng giá.

Và có cách thứ ba, dấu gạch ngang có đường viền <> mũi tên, nhưng tôi không có keo khi sử dụng cái này.

Tôi nghĩ bạn có nghĩa là mối quan hệ phụ thuộc. Đó là một dạng hiệp hội yếu hơn. Ví dụ: lấy định nghĩa lớp sau

class Foo { 

def bar(Baz: aParam) { 
    ... 
} 
} 

Trong trường hợp này, Foo phụ thuộc vào loại Baz khi sử dụng trong ký hiệu phương thức thanh(). Tuy nhiên không có mối liên hệ nào giữa chúng (không thể thảo luận một cách hợp lý ví dụ như cardinality của mối quan hệ giữa một thể hiện của Foo và một thể hiện của Baz).

Từ góc độ thực tế tôi muốn nói:

  • bạn có thể sử dụng thẳng Hiệp hội cho 80% + các mối quan hệ bạn đang có khả năng muốn để mô hình
  • Thành phần có thể giải thích cho hầu hết các còn lại các tình huống
  • Sự phụ thuộc có thể hữu ích trong một số trường hợp
  • Bạn có thể nhận được khá hạnh phúc mà không bao giờ sử dụng Tổng hợp.

hth.

+0

bạn được chào đón. – sfinnie

0

Hãy đặt các điều khoản. Tập hợp là một metaterm trong tiêu chuẩn UML, và có nghĩa là BOTH thành phần và tập hợp được chia sẻ, chỉ cần đặt tên là được chia sẻ. Thông thường nó được đặt tên không chính xác là "tập hợp". Nó là BAD, cho thành phần là một tập hợp, quá. Theo tôi hiểu, bạn có nghĩa là "chia sẻ".

Tiếp tục từ tiêu chuẩn UML:

composit - Chỉ ra rằng tài sản được tổng hợp compositely, ví dụ, đối tượng composit có trách nhiệm đối với sự tồn tại và lưu trữ của các đối tượng bao gồm (bộ phận).

Vì vậy, Đại hiệp hội cathedras là một thành phần, vì cathedra không tồn tại ra khỏi Đại học (IMHO)

ngữ nghĩa chính xác của sự kết hợp chia sẻ khác nhau theo từng khu vực ứng dụng và modeler.

I.e, tất cả các liên kết khác có thể được rút ra dưới dạng tập hợp được chia sẻ, nếu bạn chỉ tuân theo một số nguyên tắc của bạn hoặc của người khác. Ngoài ra, hãy xem here.

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