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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/21616.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

pyqt绘制各种直线

pyqt绘制各种直线 介绍效果代码 介绍 使用pyqt绘制各种直线 效果 代码 import sys from PyQt5.QtWidgets import QApplication, QWidget from PyQt5.QtGui import QPainter, QPen, QPainterPath, QColor, QBrush from PyQt5.QtCore import Qt, QPoint, QLineF, QPointFclass…

JVM 指针压缩

运用java内存对齐填充,对java内存进行8字节划分,java对象指针映射到每个划分区域上,使得4个字节(32位)表示2^32个地址,从而使4个字节指针映射32G内存空间。 1.为什么进行指针压缩: jvm从32位变…

【全开源】Java代驾小程序APP代驾跑腿源码微信小程序代驾源码

🚗代驾小程序:便捷、安全的出行新选择 一、引言:出行新风尚 在如今繁忙的都市生活中,出行问题一直是人们关注的焦点。代驾小程序的出现,为我们提供了一种便捷、安全的出行新选择。无论是酒后不能驾车,还是…

牛客网刷题 | BC116 [NOIP2013]记数问题

目前主要分为三个专栏,后续还会添加: 专栏如下: C语言刷题解析 C语言系列文章 我的成长经历 感谢阅读! 初来乍到,如有错误请指出,感谢! 描述 试计算在区间1 到n…

LeetCode:环形链表II

文章收录于LeetCode专栏 LeetCode地址 环形链表II 题目 给定一个链表,返回链表开始入环的第一个节点。如果链表无环,则返回null。   为了表示给定链表中的环,我们使用整数pos来表示链表尾连接到链表中的位置(索引从0开始&#…

安防监控视频平台LntonCVS视频监控汇聚平台遏制校园暴力保护校园学生安全应用方案

未成年人被誉为祖国的花朵,是我们国家的未来。然而,最近频繁曝出的未成年霸凌事件却引发了社会的广泛关注。这些事件手段残忍,事态恶劣,引发了全社会对如何保护未成年身心健康、规避霸凌事件发生的深刻思考。 为了更好地保障学生的…

使用软件分享--剪映(不需要会员版)剪映 Jianying_pro_3_2_0_8778_beta9_jianyingpro_beta(Windows)

专栏介绍:本专栏主要分享一些实用的软件(Po Jie版); 声明1:软件不保证时效性;只能保证在写本文时,该软件是可用的;不保证后续时间该软件能一直正常运行;不保证没有bug&am…

深度学习-06-手动进行反向传播

深度学习-06-手动进行反向传播 本文是《深度学习入门2-自製框架》 的学习笔记,记录自己学习心得,以及对重点知识的理解。如果内容对你有帮助,请支持正版,去购买正版书籍,支持正版书籍不仅是尊重作者的辛勤劳动&#xf…

【网关】工业智能网关-02

一 公司简介 保定飞凌嵌入式技术有限公司始于2006年,是一家专注嵌入式核心控制系统研发、设计和生产的高新技术企业,是国内最早专业从事嵌入式技术的企业之一。 经过十几年的发展与积累,公司拥有业内一流的软硬件研发团队,在北京…

SuperMap GIS基础产品FAQ集锦(20240603)

一、SuperMap iDesktopX 问题1:请教一下,桌面把火星坐标系的数据投影转换为4326坐标系数据如何才能没有偏移呢? 11.1.1 【解决办法】可以使用iDesktopX提供的“电子地图坐标转换”插件实现对火星坐标系数据的纠偏。 问题2:请教…

麦肯锡:ChatGPT等生成式AI应用激增,大中华区增长最快

全球顶级咨询公司麦肯锡(McKinsey & Company)在官网发布了《he state of AI in early 2024:Gen AI adoption spikes and starts to generate value》,一份关于生成式AI应用的调查报告。 麦肯锡对多个国家/地区的1,363位管理者进行了调查…

前端表单校验完成之后,点击确认功能无反应FormInstance, FormRules

**产生原因:可能是在el-form 中添加的ref 前面加了“:”,也可能是ref中的值写错了** FormInstance, FormRules

海外仓平台系统选择指南:中小海外仓如何选到经济实惠的WMS系统

对于中小海外仓来说,选择一套性价比高、功能又比较齐全的系统还是很关键的,这直接关系到海外仓的运转效率和盈利能力。 今天我们就来探讨一下,针对中小海外仓这个群体,要怎么才能选到经济实惠又功能齐全的wms系统。 1、性价比—…

【Microelectronic Systems】

PART1 嵌入式系统概述与玩转mbed 1 嵌入式系统,微控制器,与ARM 1.1什么是嵌入式系统? 微处理器不仅仅存在于通用计算机中,也可以安置在一些不需要计算的设备内部,比如洗衣机,摄像机。微处理器常常可以控制…

vscode快捷键英文单词对照表

今天想改我的vscode快捷键,unfoldall这条跟我其他的ide都不一样,我得挨个记……但是ctrlshiftp一打开快捷键 点击右侧齿轮进行快捷键录制,但是我这次点左边进去查看了一下unfoldall当前是什么 后来看到了……这些oem_5是什么鬼? {…

防爆AGV叉车在现代物流行业的应用

AGV 随着机器人技术在中国的快速发展,国内企业开始推出区别于传统叉车的叉车AGV,旨在为企业降本增效,降低人工成本与对人的依赖;同时,也将人工从危险恶劣的环境中解放出来。随着技术的持续提升,叉车AGV已经…

npm run dev 同时运行vue前端项目和node后端项目

将两个项目放到一个目录下 项目拖进vscode中,安装包依赖,修改配置 npm i concurrently "dev": "concurrently \"vite --mode development\" \"nodemon app.js\"" 命令行 npm run dev 运行 没有运行成功排查 …

【第九课】空间数据基础与处理——空间参考处理

一、前言 地图图层中的所有元素都具有特定的地理位置和范围,这使得它们能够定 位到地球表面上相应的位置。精确定位地理要素对于制图和 GIS来说都至关 重要,而要正确地描述要素的位置和形状,需要引入一个用于定义位置的框 架———空间参考。…

数青蛙 ---- 模拟

题目链接 题目: 分析: 题目的意思是: 一次蛙鸣是一个完整的字符串"croak", 给你一个字符串, 让你求出最少的青蛙数目 示例一: 两次完整的"croak", 可以由一只青蛙完成, 所以答案为1 示例二: 第一次蛙鸣还没有结束, 又出现了"c", 说明有第二只青…

RTPS协议之Structure

目录 概览RTPS中的各实体和类RTPS实体和类的属性类型:RTPS Entities属性 HistoryCacheCacheChangeRTPS EntityRTPS ParticipantRTPS EndPointRTPS WriterRTPS Reader和DDS Entities的关联DDS DataWriterDDS DataReader 每个RTPS实体和DDS实体是一对一对应的。Histor…