Roles:A role name explains how an object participates in the relationship.
你有两节课,Professor
and Book
它们的关联如下图所示:
该角色描述了教授和书籍之间的关联。在这种情况下,教授是相关书籍的作者。
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
具有 type 属性Query
named query
。在代码中:
class QueryBuilder {
Query query;
}
你有一个 Query 类,它有一个 type 属性QueryBuilder
named qbuilder
In code:
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
在前面的示例中,存在一个关联,因此我们在类中拥有一个属性(字段)来保存关联对象的引用。
在下图中Acount
有两个关联BookItem
.
因此,在 Account 类中,我们将有两个字段,每个关联一个字段。
class Account {
BookItem[] borrowed;
BookItem[] reserved;
}
请注意,这些关联是一对多的,因此我们用于关联的字段是可以保存多个 BookItem 的数组。
Here你可以找到一篇很好的文章,我在其中借用了这个答案的大部分例子。
EDIT:之间关联的解释Author
and Book
.
连接的线Author
and Book
图中是关联的可视化。这是一个双向关联,这意味着Author
一个或多个Book
对象(作者写的书)而且Book
有一个或多个Author
对象(因为一本书可以有多个作者)。具有多重性的关联many(一个或多个)通常用集合或数组来实现。班级Author
有一个字段可以是集合或数组Book
。该图未提供该字段的名称。
第一个关联图Professor
with Book
还提供这些字段的名称。Professor
有一个名为名称的字段textbook
保持其Book
对象。Book
有一个名为名称的字段author
保持其Author
对象。该图未提供这些字段的类型。场textbook
可以声明为以下任意内容:
Book[] textbook;
or
Set<Book> textbook;
or
List<Book> textbook;
or
Collection<Book> textbook;
此外,不提供字段的可见性(可以是默认的、私有的或公共的)。
从类图中省略此信息有一个很好的理由:图的作者认为它对于他想要与图通信的消息并不重要。我们不能忘记 UML 图用于通过可视化系统的某些方面来帮助理解系统。通常我们会创建多个图表,以便提供系统的不同视角。在大多数情况下,最重要的信息元素是类之间的关系。因此,实现细节常常被省略。请注意,有很多关于Book
-Author
这些图中省略了关联。如何强制这样做Book
总会有至少一个Author
或者如何确保如果Book
has an Author
然后还有Author
有这个Book
是被省略的细节之一。