【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

相关文章

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 模型通过简单易用的网页界面,使得用户无需深入了

Java 创建图形用户界面(GUI)入门指南(Swing库 JFrame 类)概述

概述 基本概念 Java Swing 的架构 Java Swing 是一个为 Java 设计的 GUI 工具包,是 JAVA 基础类的一部分,基于 Java AWT 构建,提供了一系列轻量级、可定制的图形用户界面(GUI)组件。 与 AWT 相比,Swing 提供了许多比 AWT 更好的屏幕显示元素,更加灵活和可定制,具有更好的跨平台性能。 组件和容器 Java Swing 提供了许多

基于UE5和ROS2的激光雷达+深度RGBD相机小车的仿真指南(五):Blender锥桶建模

前言 本系列教程旨在使用UE5配置一个具备激光雷达+深度摄像机的仿真小车,并使用通过跨平台的方式进行ROS2和UE5仿真的通讯,达到小车自主导航的目的。本教程默认有ROS2导航及其gazebo仿真相关方面基础,Nav2相关的学习教程可以参考本人的其他博客Nav2代价地图实现和原理–Nav2源码解读之CostMap2D(上)-CSDN博客往期教程: 第一期:基于UE5和ROS2的激光雷达+深度RG

POJ1269 判断2条直线的位置关系

题目大意:给两个点能够确定一条直线,题目给出两条直线(由4个点确定),要求判断出这两条直线的关系:平行,同线,相交。如果相交还要求出交点坐标。 解题思路: 先判断两条直线p1p2, q1q2是否共线, 如果不是,再判断 直线 是否平行, 如果还不是, 则两直线相交。  判断共线:  p1p2q1 共线 且 p1p2q2 共线 ,共线用叉乘为 0  来判断,  判断 平行:  p1p

pip-tools:打造可重复、可控的 Python 开发环境,解决依赖关系,让代码更稳定

在 Python 开发中,管理依赖关系是一项繁琐且容易出错的任务。手动更新依赖版本、处理冲突、确保一致性等等,都可能让开发者感到头疼。而 pip-tools 为开发者提供了一套稳定可靠的解决方案。 什么是 pip-tools? pip-tools 是一组命令行工具,旨在简化 Python 依赖关系的管理,确保项目环境的稳定性和可重复性。它主要包含两个核心工具:pip-compile 和 pip

数学建模笔记—— 非线性规划

数学建模笔记—— 非线性规划 非线性规划1. 模型原理1.1 非线性规划的标准型1.2 非线性规划求解的Matlab函数 2. 典型例题3. matlab代码求解3.1 例1 一个简单示例3.2 例2 选址问题1. 第一问 线性规划2. 第二问 非线性规划 非线性规划 非线性规划是一种求解目标函数或约束条件中有一个或几个非线性函数的最优化问题的方法。运筹学的一个重要分支。2

【Kubernetes】K8s 的安全框架和用户认证

K8s 的安全框架和用户认证 1.Kubernetes 的安全框架1.1 认证:Authentication1.2 鉴权:Authorization1.3 准入控制:Admission Control 2.Kubernetes 的用户认证2.1 Kubernetes 的用户认证方式2.2 配置 Kubernetes 集群使用密码认证 Kubernetes 作为一个分布式的虚拟

如何掌握面向对象编程的四大特性、Lambda 表达式及 I/O 流:全面指南

这里写目录标题 OOP语言的四大特性lambda输入/输出流(I/O流) OOP语言的四大特性 面向对象编程(OOP)是一种编程范式,它通过使用“对象”来组织代码。OOP 的四大特性是封装、继承、多态和抽象。这些特性帮助程序员更好地管理复杂的代码,使程序更易于理解和维护。 类-》实体的抽象类型 实体(属性,行为) -》 ADT(abstract data type) 属性-》成

OCC开发_变高箱梁全桥建模

概述     上一篇文章《OCC开发_箱梁梁体建模》中详细介绍了箱梁梁体建模的过程。但是,对于实际桥梁,截面可能存在高度、腹板厚度、顶底板厚度变化,全桥的结构中心线存在平曲线和竖曲线。针对实际情况,通过一个截面拉伸来实现全桥建模显然不可能。因此,针对变高箱梁,本文新的思路来实现全桥建模。 思路 上一篇文章通过一个截面拉伸生成几何体的方式行不通,我们可以通过不同面来形成棱柱的方式实现。具体步骤