【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.mfbz.cn/a/676814.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

flask轻松入门,概念讲解

Hello World Flask 是轻量级web框架,仅保留了核心功能: 请求响应处理模板渲染URL路由 文章目录 Hello Worldflask命令模式python命令模式两种模式对比修改入口文件配置flask命令修改python命令修改 修改端口和地址flask命令修改python命令修改 修改 URL …

jupyter之plt 画图弹出窗口展示图片以及静态图片切换方法

1. jupyter出图的三种方式 在python的Jupyter Notebook中,使用matplotlib绘制动态图形时,可能出现只显示一张静态图像。 这是因为在notebook中使用plt绘图共有三种模式: %matplotlib inline:这是默认的模式,输出的图片…

JavaScript 基础 - 对象

对象 对象是一种无序的数据集合&#xff0c;可以详细的描述描述某个事物。 注意数组是有序的数据集合。它由属性和方法两部分构成。 语法 声明一个对象类型的变量与之前声明一个数值或字符串类型的变量没有本质上的区别。 <script>let 对象名 {属性名&#xff1a;属性值…

【OPENMV】学习记录 (持续更新)

一、图像 1 设置彩色&#xff0f;黑白&#xff1a; sensor.set_pixformat() 设置像素模式。 sensor.GRAYSCALE: 灰度&#xff0c;每个像素8bit。sensor.RGB565: 彩色&#xff0c;每个像素16bit。 2 设置图像大小&#xff1a; sensor.set_framesize() 设置图像的大小 sensor.…

前端优化之图片压缩——tinyPNG

今天前端前辈新介绍的一个压缩图片的工具——tinyPNG&#xff0c;地址&#xff1a;TinyPNG – Compress WebP, PNG and JPEG images intelligently可以将图片压缩&#xff0c;进行优化。 一、使用方法——手动压缩 将超过200kb的图片拖到我标注的红框框里&#xff0c;拖到这里…

如何快速定位到影响mysql cpu飙升的原因——筑梦之路

通常我们只需要执行show processlist 进行查看&#xff0c;一般执行时间最长的SQL八九不离十就是罪魁祸首&#xff0c;但当show processlist的输出有近千条&#xff0c;那么很难第一眼就发现有问题的SQL&#xff0c;那么如何快速找到呢&#xff1f;其实也非常简单。我们知道mys…

多卡聚合智能融合通信设备在无人机无线视频传输应用

无人驾驶飞机简称“无人机”&#xff0c;是利用(无线电)遥控设备和自备的程序控制装置操纵的不载人飞行器&#xff0c;现今无人机在航拍、农业、快递运输、测绘、新闻报道多个领域中都有深度的应用。 无人机无线视频传输保证地面人员利用承载的高灵敏度照相机可以进行不间断的画…

HCIA--OSPF实验(复习)

实验拓扑&#xff1a; 实验思路&#xff1a; 1.规划IP&#xff0c;配置环回&#xff0c;接口IP 2.把R1&#xff0c;R2优先级改为0&#xff0c;让R1、R2放弃选举&#xff0c; [r1]interface g0/0/0 [r1-GigabitEthernet0/0/0]ospf dr-priority 0 <r1>reset ospf…

【linux】线程同步和生产消费者模型

线程同步 当我们多线程访问同一个临界资源时&#xff0c;会造成并发访问一个临界资源&#xff0c;使得临界资源数据不安全&#xff0c;我们引入了锁的概念&#xff0c;解决了临界资源访问不安全的情况&#xff0c;对于线程而言竞争锁的能力有强有弱&#xff0c;对于之前就抢到…

图形学初识--颜色混合

文章目录 前言正文为什么要有颜色混合&#xff1f;颜色混合常见实现方式&#xff1f;上述颜色混合注意点 结尾&#xff1a;喜欢的小伙伴点点关注赞哦! 前言 本章节补充一下颜色混合的内容&#xff0c;主要包含&#xff1a;为什么要有颜色混合&#xff1f;颜色混合常实现方式&a…

外星人Alienware x17R1 原厂Windows11系统

装后恢复到您开箱的体验界面&#xff0c;包括所有原机所有驱动AWCC、Mydell、office、mcafee等所有预装软件。 最适合您电脑的系统&#xff0c;经厂家手调试最佳状态&#xff0c;性能与功耗直接拉满&#xff0c;体验最原汁原味的系统。 原厂系统下载网址&#xff1a;http://w…

全文检索-ElasticSearch

1.基本概念 1.Index索引 动词&#xff1a;相当于MySQL中的insert&#xff1b; 名词&#xff1a;相当于MySQL中的DataBase&#xff1b; 2.Type&#xff08;类型&#xff09; 在Index&#xff08;索引&#xff09;中&#xff0c;可以定义一个或多个类型 类似于MySQL中的Tab…

Docker大学生看了都会系列(二、2.1Mac通过Homebrew安装Docker)

系列文章目录 第一章 Docker介绍 第二章 2.1 Mac通过Homebrew安装Docker 第二章 2.2 CentOS安装Docker 文章目录 前言Mac通过Homebrew安装本机环境系统要求terminal命令安装查看安装信息配置阿里云镜像加速登陆阿里云配置加速地址其他国内加速地址 总结 前言 在上一章了解了Do…

步进电机双闭环细分控制(matlab仿真)内含课设等参考文件

1.1 步进电机工作原理 步进电机是一种用电脉冲进行控制&#xff0c;将电脉冲信号转换成相位移的电机&#xff0c;其机械位移和转速分别与输入电机绕组的脉冲个数和脉冲频率成正比,每一个脉冲信号可使步进电机旋转一个固定的角度。脉冲的数量决定了旋转的总角度&#xff0c;脉…

FebHost:什么是国别国外域名以及用途?

在数字时代的浪潮中&#xff0c;互联网如同一张无形的网&#xff0c;将全球的人们紧密相连。尽管世界因此变得“更小”&#xff0c;但在网络上展示个人或企业身份时&#xff0c;标明国家归属或地理位置依然显得格外重要。今天&#xff0c;我们将深入探讨国别域名的重要性、使用…

查看所用数据库的版本

通过查询 SELECT VERSION();

java面试题及答案2024,java2024最新面试题及答案(之二)

四、反射 57. 什么是反射&#xff1f; 反射主要是指程序可以访问、检测和修改它本身状态或行为的一种能力 Java反射&#xff1a; 在Java运行时环境中&#xff0c;对于任意一个类&#xff0c;能否知道这个类有哪些属性和方法&#xff1f;对于任意一个对象&#xff0c;能否调…

顺序表的讲解与实现

顺序表的讲解与实现 一、顺序表的概念及结构二、顺序表分类顺序表和数组的区别顺序表分类静态顺序表动态顺序表 三、动态顺序表的实现(使用VS2022)1.初始化、销毁、打印内容2.检查扩容3.尾部插入、尾部删除、头部插入、头部删除尾部插入尾部删除头部插入头部删除 4.指定插入、指…

Go语言 几种常见的IO模型用法 和 netpoll与原生GoNet对比

【go基础】16.I/O模型与网络轮询器netpoller_go中的多路io复用模型-CSDN博客 字节开源的netPoll多路复用器源码解析-CSDN博客 一、几种常见的IO模型 1. 阻塞I/O (1) 解释&#xff1a; 用户调用如accept、read等系统调用&#xff0c;向内核发起I/O请求后&#xff0c;应用程序…

装机必备——鲁大师安装教程

装机必备——鲁大师安装教程 软件下载 软件名称&#xff1a;鲁大师 软件语言&#xff1a;简体中文 软件大小&#xff1a;144.75M系统要求&#xff1a;Windows7或更高&#xff0c; 32/64位操作系统 硬件要求&#xff1a;CPU2GHz &#xff0c;RAM2G或更高 下载通道①迅雷云盘丨…