【问题标题】:UML concepts and their application in JavaUML 概念及其在 Java 中的应用
【发布时间】:2014-06-18 07:02:51
【问题描述】:

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

Book.java

class Book {

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

作者.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 是一个简单的关联。如果会有一个章节类,与一本书相关,那就是作文。我的理解是否正确?

【问题讨论】:

    标签: java oop uml aggregation composition


    【解决方案1】:

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

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

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

    组合是一种特殊的聚合,它意味着强大的生命周期联系。换句话说,组合类一般不能存在于父类之外。例如,没有 Map,A Map.Entry 就无法存在。上面没有这方面的例子。

    您还应该知道,与 UML 相关的“组合”比 Java 中的更严格/更窄。

    【讨论】:

    • 谢谢。那很有用。所以,我手头的关系,在 UML 中是 (Book)----(Author) 和 (Publisher)-----(Book) ?
    【解决方案2】:

    根据 UML 上层结构规范 v2.4.1(阅读下文),UML 中没有特别定义“共享聚合”。所以是否共享取决于模型,是否复合取决于存在的管理方式。

    "AggregationKind 是以下文字值的枚举:

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

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

    【讨论】:

      【解决方案3】:

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

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2016-03-08
        • 1970-01-01
        • 1970-01-01
        • 2016-09-21
        • 1970-01-01
        • 2011-07-02
        • 1970-01-01
        相关资源
        最近更新 更多