2011-08-25 29 views
6

Tôi biết Có nhiều cách khác nhau để học việc chuyển đổi Hiệp hội, Tổng hợp và thành phần trong java. Nhưng khi chúng ta chuyển đổi chúng thành mã (các lớp java) chúng đều được biểu diễn theo cùng một cách. Giống như Học sinh được giảng dạy bởi giáo viên là hiệp hội sẽ được đại diện với lớp Học sinh có biến mẫu của Giáo viên lớp.Chuyển đổi Hiệp hội, Tổng hợp và thành phần thành mã trong java?

Sở có giáo sư là tập hợp cũng sẽ được đại diện với lớp Sở có biến mẫu (mảng) của các giáo sư lớp.

Trường đại học có các phòng ban là thành phần cũng sẽ được đại diện với lớp Đại học có biến mẫu (mảng) của bộ phận Lớp.

Vì vậy, tất cả đều được reprented theo cách tương tự về mặt mã. Vậy Hiệp hội, tổ hợp và thành phần mang lại lợi ích gì cho nhà phát triển?

Trả lời

4

Bạn đang bỏ lỡ một phần của câu chuyện bằng Thành phần. Đạo luật này quy một vài thuộc tính thêm:

  • bất biến của phụ huynh (ví dụ: con không thể chuyển đổi các bậc cha mẹ)
  • vòng đời trách nhiệm đối với những đứa trẻ nằm với phụ huynh. tức là phụ huynh chịu trách nhiệm tạo và xóa các phiên bản con. Trẻ em không thể sống sau khi cha mẹ qua đời.

Bạn nói đúng rằng liên kết sẽ hiển thị dưới dạng tham chiếu/tập hợp các tham chiếu ở trẻ em & cấp độ gốc tương ứng. Nhưng mã cũng phải thực thi các quy tắc ở trên nếu nó để đảm bảo ngữ nghĩa thành phần được thi hành.

Đối với Tổng hợp: Tôi không sử dụng. Ngữ nghĩa quá lỏng lẻo và nó không mang lại lợi ích gì cho các hiệp hội thẳng.

hth.

+0

Xin lỗi, tôi đã bỏ lỡ cả hai điểm. Point1: - Nếu chúng ta xem xét ví dụ thành phần trong bài gốc, bạn có nói rằng lớp University nên có biến mẫu (mảng) của bộ phận Class là final.If không phải cách chúng ta sẽ biểu diễn nó trong mã. Điểm2: - vâng tôi đồng ý với quan điểm của bạn nhưng không tạo sự khác biệt khi chúng tôi chuyển đổi sơ đồ uml thành mã hóa bởi vì nó vẫn sẽ là một biến cá thể đơn giản. –

+0

điểm 1: có. Điểm 2: Nó không chỉ là về tham chiếu. Ngữ nghĩa tổng hợp UML yêu cầu "Nếu một tổng hợp bị xóa, tất cả các phần của nó thường bị xóa với nó" (cấu trúc thượng tầng UML 2.3, trang 40). Trong các ngôn ngữ không phải GC như C++, điều này có nghĩa là mã hủy phải đảm bảo tất cả trẻ em đều bị xóa trước khi cha mẹ bị xóa. Đối với môi trường GC, điều này ít rõ ràng hơn. Tuy nhiên, có những thành ngữ - như cách tiếp cận "Tổng hợp gốc" được phổ biến bởi Domain Driven Design - trong đó cách duy nhất để tạo (hoặc xóa) một đứa trẻ là thông qua các phương thức trên chính bố mẹ ... (ctd). – sfinnie

+0

... vì vậy trong trường hợp Order/OrderLine nguyên mẫu, cách duy nhất để thêm một OrderLine từ một Order là gọi Order.AddOrderLine() (tương tự để loại bỏ). Vì vậy, để tóm tắt: không có trực tiếp, khai báo tương tự trong mã biểu thị một Composite. Thay vào đó bạn phải xây dựng hành vi theo cách thủ tục. Việc xác định các vật liệu tổng hợp trong mã do đó đòi hỏi một lượng 'nhận dạng mẫu'. Nếu tham chiếu là cuối cùng, và cách duy nhất để tạo/xóa một đứa trẻ là thông qua giao diện của cha mẹ, thì mối quan hệ có khả năng là Composite. hth. – sfinnie

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