首页 > 其他分享 >UML之关联

UML之关联

时间:2024-12-31 10:54:57浏览次数:3  
标签:.. 关联 Person Book 名称 UML 属性

关联指两个类之间的各种联系。UML使用各种单实线表示关联,这个单实线可以是直线(垂直的、水平的或者倾斜的)、折线甚至曲线。

事实上,关联也是展示类的属性的另一外的一种形式。例如在下图中,我们通过一条实线连接类Book和类Person,表示它们之间存在关联。在关联的末端,标出多重性[*]和关联端名称(通常称为“角色名称”)author。

从上图中我们可以看到关联端名称(角色名称)author是类Book的一个属性。

在上图中,类Book的属性author在类Book的属性描述中和关联的角色名称中同时出现了。一般情况下,我们不会同时使用这两种形式,它可能会带来混淆并且带来了冗余,故可将上图中类Book的属性author删除掉,以下图的形式表示即可。

上图有两种解读方法:

一本书(Book)有多位作为作者(author)的人(Person)。

一本书(Book)有一组由多个人(Person)组成的作者(author)。

1.属性和角色修饰符

在类图中,我们可以为属性添加一些修饰符以表达对属性的约束。类属性的表达方式与角色名称的表达方式都是表达源端类的属性信息的手段,故在使用角色名称时,同样也可以通过修饰符对角色名称进行约束。

例如在下图中,我们为角色名称author添加ordered和readOnly属性。这些属性被包含在一对大括号中(大括号表示约束)。

此时,上图可以解读为:

一本书(Book)有一个由多个人(Person)组成的只读的、有序的作者(author)集合。

一本书(Book)有一个由多位担任作者(author)角色的人(Person)组成的只读的、有序的集合。

我们几乎可以将能赋予属性的所有内容都赋予关联端。下表展示了属性几乎所有可用的修饰元素。

在表格中,给出了这些修饰元素的符号表示以及其多重性,即该符号可以出现的次数。0..1表示这是一个可选符号;0..*表示该符号可以根据需要出现多次。表格中各表示元素的顺序也是它们在表示时所应采取的大致顺序。

名称

符号

多重性

备注

可见性

+、-、#、~

0..1

继承标志

^

0..1

派生/起源

/

0..1

版型(构造型)

« »

0..*

属性名

String

0..1

空罕见

静态作用域

下划线

0..1

缺省时类域可见

属性类型

:类型名

:类名

0..1

空罕见

多重性范围

[L..H]

0..1

缺省值为[1]

多重性属性

例如{set}

0..*

如果多重性是多值的,则默认值是{set}

缺省值/默认值

=值

0..*

每个多重性只允许一个值

约束和其他属性

{ }

0..*

注:上述表格是不完整的,但它已经覆盖了大多数情况。

而下表则是关联端(角色名称)可以使用的修饰元素,在这个表格中也给出了修饰元素的符号表示以及其多重性,同时也给出了使用修饰符时其所处的位置。

名称

符号

多重性

位置

备注

聚合种类

AggregationKind

None(-),

shared(◇),

composite(◆)

0..1

源端(整体端)

限定符

枚举类型

0..*

源端

所有权

0..1

目标端(被拥有端)

可见性

+、-、#、~

0..1

目标端,关联端名称之前

继承标志

^

0..1

目标端,关联端名称之前

派生/起源

/

0..1

目标端

版型(构造型)

« »

0..*

目标端

属性名

String

0..1

静态作用域

下划线

0..1

目标端

属性类型

:类型名

:类名

0..1

通常,连接元素的类型/类是(该连接所指向的)类型/类

多重性范围

L..H

0..1

多重性在关联端不需要括号

多重性属性

例如{set}

0..*

如果多重性是多值的,则默认值是{set}

缺省值/默认值

=值

0..*

似乎并未在关联端上使用

约束和其他属性

{ }

0..*

目标端

关联具有表征类与其属性之间关系双向性的优势。当属性是一个类(而非数据类型)时,使用关联形式最为常见。各个类(或数据类型)可以进一步与类相连接,而图表则展示了它们之间关系的更完整图景。

当然,一个类也可以同时与多个类产生关联。例如对于类Person,它既可以是类Book的author,也可以是Score的composer,此时这两个关联可以用下图进行表示。

2.解读关联

在上述说明中,我们由类Book关联到类Person、由类Score关联到类Person。但关联是两个相关类的关系,故而也应当可以由类Person关联到类Book、由类Person关联到类Score。因此,我们也可以考虑在关联的另一端提供关联端装饰。

在下图中,同时给出了两个方向的关联信息。

上图中的关联的可以分别解读为如下:

  • 一本书(Book)有一个由多个人(Person)组成的有序的作者(author)集合。
  • 一个人(Person)有一个由多本书(Book)组成的我的书籍(myBooks)集合。
  • 一个乐谱(Score)有一个由多个人(Person)组成的有序的作曲家(composer)集合。
  • 一个人(Person)有一个由多个乐谱(Score)组成的我的乐谱(myScore)集合。

当阅读一个关联关系时,从一侧开始(源侧),但只读另一侧(目标侧)上的修饰符。目标侧是远离开始端的那一侧,源侧是靠近开始端的那一侧。

请特别注意,上述关联中所涉及的名称是关联端(角色)名称,而关联关系本身也可以拥有名称,关联关系的名称独立于两端的关联端名称(角色名称),也独立于两端类或类型的名称。这些名称通常使用动词形式,例如下图中所使用的名称是“is authored by”。当为关联提供名称时,通常采用从左向右或者从上到下的形式书写。

在阅读一个关联关系时,总是以“一个”“某个”“每个”或类似的词开始,多重性只在目标侧读取,而源侧的多重性和修饰符被忽略掉。

上图是对从一本书(A Book)到多个人(many Persons)以及从一个人(A Person)到多本书(many Books)的关系进行建模。这种解读是基于关联关系与属性之间的等价性。由于属性仅是实例的属性,因此目标侧的关联端点也仅是实例的属性。

Book --> Person:一本书(Book)由多个人(Person)组成的有序的作者(author)[集合]所著。

当你反向阅读时,通常需要将动词形式从主动语态改为被动语态,或者反之。

Person --> Book:一个人(Person)有一个由多本书(Book)组成的我的书籍(myBooks)[集合]。

在下图中,关联被命名为“authors”,这是“to author”现在时第三人称主动形式。当反向阅读时,则需要使用被动形式“is authored by”。这里我们使用了另一种表示法,即使用了阅读方向指示符►或◄,这个三角形指示了关联名称预期的阅读方向。这个指示符在绘制图表(如改变关联方向)时很有用,但由于它可能需要手动维护三角形的方向而增加了困难。

下表给出了关联关系所可能使用的属性及其说明。

名称

符号

多重性

位置

备注

可导航性

0..1

与目标分类器内联且相邻

版型(构造型)

« »

*

在关联名称之上

关联名称

字符串

0..1

紧挨关联线并居中

有助于阅读和理解关联关系

阅读方向

►或◄

0..1

关联名称旁边

它指示了关联名称应该被阅读的方向

回顾上述说明,我们可以发现其实两个类之间可以存在多个关联,例如上例中,Person既可能是Book的author,也可能是Book的editor。此时可以描述两个关联关系,并分别描绘其关联端名称(角色名称)及关联名称等信息。但要注意的是,角色名称会被映射为属性名称,受限于在同一个类的命名空间中不允许有两个同名属性的规定,在两个类之间存在多个关联时其角色名称也不可以重复。但在使用工具描绘关联时,角色名称可以为空,此时工具会为它们生成不透明的不同名称。

3.关联和数据类型

正如我们上文所讨论的,可以将属性表示为关联。在前述示例中,我们讨论了类型为类(例如Book、Person或Score)的属性及其工作方式。当属性为数据类型时,通常只对从源类到目标数据类型的单向关联建模,除此之外,其他都基本相同。另外,在目标是数据类型的情况下,一般也不会使用关联名称。例如,对于Book的pages属性而言,可以通过下图所示的关联表示。

4.链接和实例

前文关联都是在类图中进行描绘,在对象图(实例图)中,也有类似的场景。我们只需使用实例代替类,用链接代替关联即可,如下图所示。

按UML规范,实例名称会带有下划线,实例之间的链接名称也应带有下划线,但与实例名称不同,链接名称的下划线是可以省略的。

特别提醒一点,链接上是不会显示多重性的,因为在对象图的链接中每一侧总是只有一个实例,多重性需要通过对多个实例建立多条链接来体现。

关联 – 光头颜说ITicon-default.png?t=O83Ahttps://gtyan.com/archives/339

UML之图框架标题类型之谬-CSDN博客

UML之类与类图-CSDN博客

UML之修饰符-CSDN博客

UML之类型-CSDN博客

UML之包与包图-CSDN博客

UML之包的导入与访问-CSDN博客

UML之模型、包及包的版型(构造型)_uml 查询类包-CSDN博客

UML之属性与参数的多重性-CSDN博客

UML之集合类型-CSDN博客

标签:..,关联,Person,Book,名称,UML,属性
From: https://blog.csdn.net/mboy2008/article/details/144801758

相关文章

  • UML图
    用例图(UseCaseDiagram):描述系统功能及其与外部用户(角色)的交互关系。用于识别系统的用例,以便了解系统的需求。类图(ClassDiagram):显示系统中的类、属性、方法以及类之间的关系(如继承、关联等)。用于静态结构设计,是面向对象设计的核心图表。顺序图(SequenceDiagram):......
  • UML之组合与聚合
    关联和链接关系在很多情况下是对称的,即被关联的两个类都有以自己为源端对方为目标端的角色存在,而且角色与源端类的属性是等价的,即在关联一端的关联端(角色)等价于另外一端的属性。例如,在下图中,我们可以认为author:Person是类Book的一个属性,而myBooks:Person是类Person的一个属性。......
  • UML类图
    在UML(统一建模语言)中,类是最基本的构造块之一,用于描述系统中的实体以及它们之间的关系。类图(ClassDiagram)展示了系统中类的结构,包括类名、属性、操作(方法)以及类之间的关系。一个典型的类在UML中的表示通常如下所示:+------------------+|类名|+------------------+|......
  • 2024-12-12《UML类图》
    UML九图  1.类图类图(ClassDiagram)是面向对象系统建模中最常用和最重要的图,是定义其它图的基础。类图主要是用来显示系统中的类、接口以及它们之间的静态结构和关系的一种静态模型。类图不仅用于可视化描述和记录系统的不同方面,也为构建可执行代码的软件应用程序。类图描述......
  • UML之关联
    关联指两个类之间的各种联系。UML使用各种单实线表示关联,这个单实线可以是直线(垂直的、水平的或者倾斜的)、折线甚至曲线。事实上,关联也是展示类的属性的另一外的一种形式。例如在下图中,我们通过一条实线连接类Book和类Person,表示它们之间存在关联。在关联的末端,标出多重性[*]和关......
  • FTYPE命令 显示或修改文件类型,应用于文件扩展名关联。
    FTYPE命令的起源可以追溯到早期的MS-DOS和Windows操作系统。它是用于管理和配置文件扩展名与程序关联的工具之一。具体而言,FTYPE命令与ASSOC命令一起工作,允许用户在文件扩展名与特定程序之间建立关联,控制如何打开不同类型的文件。起源与历史背景:MS-DOS和早期的Windo......
  • UML之集合类型
    无论何时当我们要使用一个多值对象时,我们必须要清楚两个问题,一是这些值的顺序重要吗?二是允许重复值的存在吗?在编程语言中还会有其他的明确的信息,在UML中,只需明确这两个问题的答案即可确定对应的集合类型。1.SetSet是一个不允许存在重复值且未排序的集合。例如一个骑行活动中,有......
  • uml类图总结
    类图用于描述系统的静态结构,通过展示类、接口及其之间的关系,以便理解和设计系统类图的基本元素1.类(Class):类通常使用矩形框表示,其中包含三部分:类名、属性和方法。示例: 2.接口(Interface):表示方法类似类,但是会在矩形框顶部加上<<interface>>标识示例: 3.......
  • uml上机实验 4
    一实验目的 理解顺序图、协作图、活动图、状态机图的概念及其在系统分析设计中的作用; 了解和掌握软件工程中用例逻辑时序的分析方法; 掌握两种交互图(顺序图和协作图)的差别; 掌握描述一个操作执行过程中所完成工作(动作)的方法; 掌握描述对象内部工作的具体步骤; 掌握使用Rational......
  • uml上级实验 5
    一实验目的 了解系统物理体系结构模型和表示方法; 了解部署图的概念及其在系统设计中的作用; 掌握使用RationalRose绘制部署图的方法;二实验环境及实验准备 所需硬件环境为微机; 所需软件环境为RationalRose、MiscrosoftWord等; 熟悉RationalRose下部署图模型建模的方法和......