UML概念及其在Java中的应用

时间:2014-05-01 18:14:34

标签: java oop uml aggregation composition

我正在尝试学习UML概念及其在Java编程中的应用。我知道关联,共享聚合和组合概念。我感到困惑的是它们如何应用于特定场景。例如如果我们有一组三个类:Book,Author和Publisher,我们如何应用这些概念。

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之间有很多关系呢?

对我而言,Publisher-Book似乎是一个共享聚合,Book-Author是一个简单的关联。如果有一个章节类,与一本书有关,那就是作文。我的理解是对的吗?

3 个答案:

答案 0 :(得分:1)

Association,Aggregation和Composition都是“有”关系。

关联意味着两个类彼此关联,但每个类的实例可以彼此独立存在。您的示例显示没有简单的关联。

聚合是一种特殊的关联,其中一个类包含另一个类的集合。作者有很多书,出版社有很多书等。

组合是一种特殊的聚合,意味着强大的生命周期联系。换句话说,组合类通常不能存在于父类之外。例如,没有Map,Map.Entry就不能存在。你没有上述例子。

您还应该意识到,与UML相关的“组合”比Java更严格/更窄。

答案 1 :(得分:1)

根据UML超结构规范,v2.4.1(见下文),&#34;共享聚合&#34;在UML中没有特别定义。因此,它是否共享取决于模型以及它是否是复合模型取决于存在的管理方式。

&#34; AggregationKind是以下文字值的枚举:

none - 表示该属性没有聚合。 shared - 表示该属性具有共享聚合。 composite - 表示属性是复合聚合的,即复合对象负责组合对象(部件)的存在和存储。

语义变化点 - 共享聚合的精确语义因应用领域和建模者而异。&#34;

enter image description here

答案 2 :(得分:0)

虽然BookAuthor之间存在多对多关联,但BookPublisher之间存在多对一关联。

在Java类中,您一直使用两对互反向引用属性Book::authorsAuthor::books以及Book::publisherPublisher::books。这是实现双向关联的模式。

有关关联的更多信息,请参阅my tutorial about associations的第1部分。