【问题标题】:Role name in association relationship关联关系中的角色名称
【发布时间】:2013-05-19 21:58:24
【问题描述】:

来自UML圣经,关于角色

角色:角色名称解释了对象如何参与关系。 每个对象都需要持有对关联对象或对象的引用。引用保存在对象内的属性值中。当只有一个关联时,只有一个属性持有引用。

  1. 这句话是什么意思?
  2. 谁能提供一个例子来解释它?

【问题讨论】:

    标签: object associations roles uml


    【解决方案1】:

    Roles:A role name explains how an object participates in the relationship.

    您有两个类,ProfessorBook,它们的关联如下图所示:

    角色描述了教授和书之间的关联。在这种情况下,教授是相关书籍的作者。

    Each object needs to hold a reference to the associated object or objects. The reference is held in an attribute value within the object.

    为此,我将使用另一个具有一对一多重性的示例。

    图表显示查询构建器有一个查询(反之亦然)。代码中如何描述这种关联?

    您有一个类QueryBuilder,它有一个类型为Query 的属性,名为query。在代码中:

    class QueryBuilder {
        Query query;
     }
    

    你有一个类 Query 有一个类型为 QueryBuilder 的属性名为 qbuilder

    在代码中:

    class Query {
        QueryBuilder qbuilder;
     }
    

    属性(QueryBuilder 类的查询和 Query 类的 qbuilder)是reference to the associated object

    When there is only one association then there is only one attribute holding a reference

    在前面的例子中,有一个关联,所以我们在类中有一个属性(字段)来保持关联对象的引用。

    在下图中,AcountBookItem 有两个关联。

    因此,在 Account 类中,我们将有两个字段,每个关联一个字段。

    class Account {
        BookItem[] borrowed;
        BookItem[] reserved;
    }
    

    请注意,这些关联是一对多的,因此我们为关联所拥有的字段是可以保存多个 BookItem 的数组。

    Here你可以找到一篇好文章,我借用了这个答案的大部分例子。

    编辑:解释AuthorBook之间的关联。

    图中连接AuthorBook的线是关联的可视化。这是一个双向关联,这意味着Author 有一个或多个Book 对象(作者写的书)而且Book 有一个或多个Author 对象(因为书可以有多个作者) .具有多重性许多(一个或多个)的关联通常使用集合或数组来实现。 Author 类有一个字段,该字段可以是 Book 的集合或数组。该图未提供此字段的名称。

    ProfessorBook 关联的第一个图表也提供了这些字段的名称。 Professor 有一个名为 textbook 的字段以保留其 Book 对象。 Book 有一个名为 author 的字段来保留其 Author 对象。图表未提供这些字段的类型。字段textbook 可以声明为以下任何内容:

    Book[] textbook; 
    

    Set<Book> textbook;
    

    List<Book> textbook;
    

    Collection<Book> textbook;
    

    也没有提供字段的可见性(可以是默认的、私有的或公共的)。

    从类图中省略此信息有一个很好的理由:图表的作者认为他想与图表交流的消息并不重要。我们不能忘记,UML 图用于通过可视化系统的某些方面来帮助理解系统。通常我们创建多个图表以提供系统的不同视角。在大多数情况下,最重要的信息元素是类之间的关系。所以实现细节经常被省略。请注意,这些图中省略了很多关于Book-Author 关联的实现细节。如何强制Book 总是至少有一个Author 或者如何确保如果Book 有一个Author 那么Author 也有这个Book 是省略的细节之一。

    【讨论】:

    • 所以如果作者写了一对多的书,这是否意味着该类作者将包含一个书籍列表(数组、数组列表或其他),如果是这样,为什么这个列表没有可视化为Author 的字段(或者相反,为什么作者没有被可视化为 Book 的字段)。
    • @AndrewS 编辑了我的答案。希望它能解决你的问题。
    • 感谢您的回答,只有两件事。我不相信多对多关系是完全正确或允许的。我也希望书包含作者类型的字段。当然,如果您使用 CASE 工具并对这种关系进行建模,那么 Book 类会得到一个 Author 类型的数组。我问这个问题是因为我经常看到你在你的文章中描述的那种遗漏,我想知道为什么。
    • 关联的多重性取决于正在建模的真实世界领域。这就是为什么有时“多对多”的多样性是不可避免的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-01-02
    • 2011-02-06
    • 1970-01-01
    • 1970-01-01
    • 2011-03-03
    • 2016-10-18
    • 2018-05-08
    相关资源
    最近更新 更多