2014-05-01 20 views
0

我想了解UML概念及其在Java編程中的應用。我意識到關聯,共享聚合和組合概念。我感到困惑的是它們如何應用於特定場景。例如如果我們有一組三個類:Book,Author和Publisher,那麼我們如何應用這些概念。UML概念及其在Java中的應用

Book.java

class Book { 

private String ISBN; 
private String category; 
private Publisher publisher; 
private ArrayList<Author> authors; 
} 

Author.java

class Author { 

private String authorName; 
private String phoneNo; 
private String email; 
private ArrayList<Book> books; 
} 

Publisher.java

class Publisher { 

private String publisherName; 
private String publisherAddress; 
private ArrayList<Book> books; 
} 

這些是純粹的聯想?我們可以說發佈者和書籍之間的關係是共享聚合嗎?書籍作者之間的許多關係如何?

對我來說,Publisher-Book是一個共享聚合,Book-Author是一個簡單的關聯。如果將有一個與書有關的章節課,那將是構圖。我的理解是正確的嗎?

回答

1

關聯,聚合和組合都是「有」關係。

關聯意味着兩個類彼此關聯,但每個類的實例可以彼此獨立存在。你的例子顯示沒有簡單的關聯。

聚合是一個特殊的協會,其中一個類別收集另一個類別的集合。作者有很多書籍,出版商有很多書籍等。

構圖是一種特殊的聚合,意味着強烈的生命週期關係。換句話說,組合類通常不能存在於父類之外。例如,Map.Entry不能在沒有Map的情況下存在。你沒有上面的例子。

您還應該意識到,與UML相關的「組合」比Java更嚴格/更窄。

+0

謝謝。這很有用。那麼,我在UML中的關係是(Book)<> ---- <>(作者)和(Publisher)<> -----(Book)? –

1

根據UML上層結構規範v2.4.1(請參閱下文),「共享聚合」在UML中沒有特別定義。所以不管它是否被共享取決於模型以及它是否合成取決於存在的管理方式。

「AggregationKind是以下文字值的枚舉:

無 - 指示該屬性沒有聚集 共享 - 指示該屬性具有共享聚合 複合 - 指示該屬性是聚集的。複合對象,即複合對象負責組合對象(零件)的存在和存儲。

語義變化點 - 共享聚合的精確語義因應用程序區域和建模者而異。

enter image description here

0

雖然有BookAuthor和之間的許多一對多關聯,有BookPublisher之間的多到一個關聯。

在您的Java類中,您一直使用兩對相互反向的參考屬性Book::authorsAuthor::books以及Book::publisherPublisher::books。這是實施雙向關聯的模式。

關於關聯的更多信息,請參閱my tutorial about associations的第1部分。