【UML用户指南】-06-面向对象建模-关系(relationship)

2024-06-04 05:12

本文主要是介绍【UML用户指南】-06-面向对象建模-关系(relationship),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

1、面向对象建模常见的关系

2、关系的组成元素

3、依赖关系

4、泛化关系

5、关联关系

关联的四种修饰

1.名称

2.角色

3.多重性

4.聚合

6、常用建模技术

6.1、对简单依赖建模

6.2、对单继承建模

6.3、对结构关系建模


1、面向对象建模常见的关系

依赖 (dependency)

它表示类之间的使用关系(包括精化、跟踪和绑定关系)。

例如,水管依赖热水器,对它们所运送的水进行加热。
 

泛化 (generalization)

它把一般类连接到它的特殊类,也称为超类/子类关系或父/子关系。

例如,观景窗是一种带有固定的大窗格的窗户,庭院窗是一种带有向两边开的窗格的窗户。
 

关联 (association)

是实例之间的结构关系。1对1、1对多、多对多等

例如,房间是由墙和一些其他事物组成的,墙上可以镶嵌门和窗,管道可以穿过墙体。
 

实现(realization)

它表示接口与类之间的关系 。(不作为后续重点)

其中的每一种关系都为组合抽象提供了不同的方法。
 

2、关系的组成元素

关系名、关系所连接的事物、关系的特性


3、依赖关系

说明一个事物(如类 Window)使用另一个事物(如类Event)的信息和服务,但反之未必。

在图形上,把依赖画成一条有向的虚线,指向被依赖的事物。

当要指明一个事物使用另一个事物时,就选用依赖。

在大多数情况下,在类与类之间用依赖指明一个类使用另一个类的操作,或者使用其他类所定义的变量和参量

如果被使用的类发生变化,那么另一个类的操作也会受到影响,因为这个被使用的类此时可能表现

出不同的接口或行为。

在一般情况下,用衍型区别依赖的不同含义

4、泛化关系

一般事物(称为超类或父类)和该事物的较为特殊的种类(称为子类或子)之间的关系。有时也

称泛化为“is-a-kind-of” 关系:

一个事物(如类BayWindow)是更一般的事物(如类 Window)的“一个种类”。泛化意味着子类的对象可以被用在父类的对象可能出现的任何地方,反之则不然。

换句话说,泛化意味着子类可以替换父类的声明。子类继承父类的特性,特别是父类的属性和操作。

若子类的一个操作的实现覆盖了父类的同样一个操作的实现,则这种情况称为多态性。其共同之处是,两个操作必须具有相同的特征标记(相同的名字和参数)。

在图形上,把泛化画成一条带有空心三角形大箭头的有向实线,指向父类,如图所示。当要表示父/子关系时,就使用泛化。

没有父类并且最少有一个子类的类称为根类或基类;

没有子类的类称为叶子类。

如果一个类只有一个父类,则说它使用了单继承;

如果一个类有多个父类,则说它使用了多继承。

5、关联关系

是一种结构关系,它指明一个事物的对象与另一个事物的对象间的联系。

给定一个连接两个类的关联,可以从一个类的对象联系到另一个类的对象。

关联的两端都连到同一个类是完全合法的。

从类的一个给定对象能连接到该类的其他对象。恰好连接两个类的关联叫做二元关联。尽管不太常见,但可以有连接多于两个类的关联,这种关联叫做n元关联。

在图形上,把关联画成一条连接相同类或不同类的实线。当要表示结构关系时,就使用关联。

关联的四种修饰

1.名称

关联可以有一个名称,用以描述该关系的性质。为了消除名称的歧义,可提供一个指出读名称方向的三角形,给名称一个方向

2.角色

当一个类参与了一个关联时,它就在这个关系中扮演了一个特定的角色。角色是关联中靠近它的一端的类对另一端的类呈现的面孔。可以显式地命名一个类在关联中所扮演的角色。

3.多重性

关联表示了对象间的结构关系。在很多建模问题中,说明一个关联的实例中有多少个相互连接的对象是很重要的。

一个(1)、零个或一个(0..1)、多个(0..*)、一个或多个(1..*)

一个整数范围(如2..5)

4.聚合

两个类之间的简单关联表示了两个同等地位的类之间的结构关系,这意味着这两个类在概念上是同级别的,一个类并不比另一个类更重要。

有时要对“整体/部分”关系建模,其中一个类描述了一个较大的事物(“整体”),它由较小的事物(“部分”)组成。这种关系称为聚合,它描述了“has-a”关系,意思是整体对象拥有部分对象。

其实聚合只是一种特殊的关联,它被表示为在整体的一端用一个空心菱形修饰的简单关联

空心菱形

6、常用建模技术

6.1、对简单依赖建模

是两个类之间的连接,其中的一个类只是使用另一个类作为它的操作参数

创建一个依赖关系,从含有操作的类指向被该操作用来作为参数的类。

下图中显示了一个从CourseSchedule到Course的依赖,因为Course被用作CourseSchedule的操作add和remove的参数。
 

6.2、对单继承建模

在结构或行为上与其他的类相似的类。可以把这样的每一个类建模为独立的、不相关的抽象。但更好的方法是提取所有共同的结构特征和行为特征,并把它们提升到较为一般的类中,特殊类从中继承这些特征。

给定一组类,寻找两个或两个以上的类中的共同职责、属性和操作

把这些共同的职责、属性和操作提升到较为一般的类中。如果需要,创建一个新类,用以指派这些元素

画出从每个特殊类到它的较一般的父类的泛化关系,用以表示较特殊的类继承较一般的类。
 

针对斜体的Security类、presentValue()方法

经常会遇到不完全的或不想让它有任何对象的非叶子类。通常把这样的类称为抽象类(abstract class)。

在UML中,通过把类名写为斜体,以指明这个类是抽象的,例如类 Security 就是如此。

同理,针对操作presentValue,它是不完全的,必须在较低的抽象层次用一定的方法实现

6.3、对结构关系建模

当用依赖或泛化关系建模时,可能是对表示了不同重要级别或不同抽象级别的类建模。给定两个类间的依赖,则一个类依赖另一个类,但后者没有前者的任何信息。给定两个类间的泛化关系,则子类从它的父类继承,但父类没有任何子类所特有的信息。简而言之,依赖和泛化关系都是不对称的。

当用关联关系建模时,是在对相互同等的两个类建模。给定两个类间的关联,则这两个类以某种方式相互依赖,并且常常从两边都可以导航。

依赖是使用关系,泛化是“is-a-kind-of”关系,而关联描述了类的对象之间相互作用的结构路径。

结构建模过程

关联关系

  • 对于每一对类,如果需要从一个类的对象到另一个类的对象导航,就要在这两个类之间说明一个关联。这是关联的数据驱动观点。
  • 对于每一对类,如果一个类的对象要与另一个类的对象相互交互,而后者不作为前者的过程局部变量或者操作参数,就要在这两个类间说明一个关联。这是关联的行为驱动观点。
  • 对于这样的每一个关联,要说明其多重性(特别是当多重性不为*时,其中*是默认的多重性)和角色名(特别是在有助于解释模型的情况下)。
  • 如果关联中的一个类与另一端的类相比,前者在结构或者组织上是一个整体,后者看起来像它的部分,则在靠近整体的一端用一个菱形对该关联进行修饰,从而把它标记为聚合。
  • 怎样才能知道一个给定类的对象何时必须与另一个类的对象相互作用?答案是,CRC 卡和用况分析非常有助于考虑结构性和行为性脚本。在有两个或两个以上的类用数据关系进行交互的地方说明一个关联。

从该图的左下部开始,可以找到名称为Student、Course和Instructor的类。在Student和Course之间有一个关联,它描述了学生参加的课程。同时,每一名学生可以参加任意门数的课程,而每一门课程可以由任意名学生参加。类似地,在Course和Instructor之间也有一个关联,它描述了教师所教的课程。每一门课至少有一名教师,而每一名教师可以教零到多门课。每门课精确地属于一个系。

School和Student以及它和Department之间的关系有点不同。在这里可以看到聚合关系。一所学校可以有零到多名学生,一名学生可以是在一所或者多所学校注册的学员,一所学校可以有一个或多个系,每个系只能属于一所学校。可以不用聚合修

饰而用简单的关联,但通过说明School是整体,Student和Department是部分,可以说清楚在组织上哪个高于哪个。因此,学校在一定程度上由学生和学生所在的系来定义。类似地,实际上学生和系并不是与他们所属的学校无关,而是从他们的学校能得到他们的身份。

在Department和Instructor之间有两个关联。其中的一个关联说明可以指派一名教师到一个或多个系中,而一个系可以有一名或多名教师。由于在学校的组织结构中系比教师的层次要高,所以这要用聚合来建模。另一个关联表明一个系只能有一名教师是系主任。这种建模方式说明,一名教师最多是一个系的系主任,并且某些教师不是任何系的系主任。
 

这篇关于【UML用户指南】-06-面向对象建模-关系(relationship)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1029156

相关文章

数据库oracle用户密码过期查询及解决方案

《数据库oracle用户密码过期查询及解决方案》:本文主要介绍如何处理ORACLE数据库用户密码过期和修改密码期限的问题,包括创建用户、赋予权限、修改密码、解锁用户和设置密码期限,文中通过代码介绍... 目录前言一、创建用户、赋予权限、修改密码、解锁用户和设置期限二、查询用户密码期限和过期后的修改1.查询用

Python使用qrcode库实现生成二维码的操作指南

《Python使用qrcode库实现生成二维码的操作指南》二维码是一种广泛使用的二维条码,因其高效的数据存储能力和易于扫描的特点,广泛应用于支付、身份验证、营销推广等领域,Pythonqrcode库是... 目录一、安装 python qrcode 库二、基本使用方法1. 生成简单二维码2. 生成带 Log

高效管理你的Linux系统: Debian操作系统常用命令指南

《高效管理你的Linux系统:Debian操作系统常用命令指南》在Debian操作系统中,了解和掌握常用命令对于提高工作效率和系统管理至关重要,本文将详细介绍Debian的常用命令,帮助读者更好地使... Debian是一个流行的linux发行版,它以其稳定性、强大的软件包管理和丰富的社区资源而闻名。在使用

macOS怎么轻松更换App图标? Mac电脑图标更换指南

《macOS怎么轻松更换App图标?Mac电脑图标更换指南》想要给你的Mac电脑按照自己的喜好来更换App图标?其实非常简单,只需要两步就能搞定,下面我来详细讲解一下... 虽然 MACOS 的个性化定制选项已经「缩水」,不如早期版本那么丰富,www.chinasem.cn但我们仍然可以按照自己的喜好来更换

Python使用Pandas库将Excel数据叠加生成新DataFrame的操作指南

《Python使用Pandas库将Excel数据叠加生成新DataFrame的操作指南》在日常数据处理工作中,我们经常需要将不同Excel文档中的数据整合到一个新的DataFrame中,以便进行进一步... 目录一、准备工作二、读取Excel文件三、数据叠加四、处理重复数据(可选)五、保存新DataFram

使用JavaScript将PDF页面中的标注扁平化的操作指南

《使用JavaScript将PDF页面中的标注扁平化的操作指南》扁平化(flatten)操作可以将标注作为矢量图形包含在PDF页面的内容中,使其不可编辑,DynamsoftDocumentViewer... 目录使用Dynamsoft Document Viewer打开一个PDF文件并启用标注添加功能扁平化

电脑显示hdmi无信号怎么办? 电脑显示器无信号的终极解决指南

《电脑显示hdmi无信号怎么办?电脑显示器无信号的终极解决指南》HDMI无信号的问题却让人头疼不已,遇到这种情况该怎么办?针对这种情况,我们可以采取一系列步骤来逐一排查并解决问题,以下是详细的方法... 无论你是试图为笔记本电脑设置多个显示器还是使用外部显示器,都可能会弹出“无HDMI信号”错误。此消息可能

如何安装 Ubuntu 24.04 LTS 桌面版或服务器? Ubuntu安装指南

《如何安装Ubuntu24.04LTS桌面版或服务器?Ubuntu安装指南》对于我们程序员来说,有一个好用的操作系统、好的编程环境也是很重要,如何安装Ubuntu24.04LTS桌面... Ubuntu 24.04 LTS,代号 Noble NumBAT,于 2024 年 4 月 25 日正式发布,引入了众

06 C++Lambda表达式

lambda表达式的定义 没有显式模版形参的lambda表达式 [捕获] 前属性 (形参列表) 说明符 异常 后属性 尾随类型 约束 {函数体} 有显式模版形参的lambda表达式 [捕获] <模版形参> 模版约束 前属性 (形参列表) 说明符 异常 后属性 尾随类型 约束 {函数体} 含义 捕获:包含零个或者多个捕获符的逗号分隔列表 模板形参:用于泛型lambda提供个模板形参的名

Retrieval-based-Voice-Conversion-WebUI模型构建指南

一、模型介绍 Retrieval-based-Voice-Conversion-WebUI(简称 RVC)模型是一个基于 VITS(Variational Inference with adversarial learning for end-to-end Text-to-Speech)的简单易用的语音转换框架。 具有以下特点 简单易用:RVC 模型通过简单易用的网页界面,使得用户无需深入了