【UML】第11篇 类图(6种关系)(3/3)

目录

五、类图中的6种关系

5.1 关联关系(Association)

5.2 聚合关系(Aggregation)

5.3 组合关系(Composition)

5.4 依赖关系(Dependency)

5.5 继承关系(Inheritance)或泛化关系(Generalization)

5.6 实现关系(Realization)

六、关联的几种形式


(接上篇,序号延续)

五、类图中的6种关系

在UML(统一建模语言)类图中,类之间的关系是描述软件系统结构和行为的关键部分。从专业的角度来看,类图中主要存在以下几种关系:

5.1 关联关系(Association)

  • 定义:关联表示两个类之间的结构性连接,它说明一个类的对象可以与另一个类的对象有连接。关联可以是双向的或单向的,也可以有特定的名称、角色和多重性。
  • 例子:在订单处理系统中,Customer(客户)类和Order(订单)类之间可能有一个关联关系,表示一个客户可以下多个订单。
  • 图形:通常使用实线表示。
  • 箭头:无特定箭头,但线的两端连接相关的类。
  • 示例:一条实线连接两个类。
public class Customer {  private String name;  // ... 其他属性和方法 ...  
}  public class Order {  private Customer customer;  // ... 其他属性和方法 ...  
}

5.2 聚合关系(Aggregation)

  • 定义:聚合是一种表示“整体-部分”关系的二元关联,其中整体和部分都是独立的对象,但整体包含部分。聚合是关联的一种特殊形式,具有方向性,并通过一个空心菱形表示。
  • 例子:在车辆类中,Car(汽车)和Wheel(轮子)之间可以有聚合关系,表示汽车由轮子等组成,但轮子可以独立于汽车存在。
  • 图形:使用带有空心菱形的实线表示。
  • 箭头:空心菱形一端指向整体,线的另一端指向部分。
  • 示例:空心菱形连接Car类,线的另一端连接Wheel类。
public class Car {  private Wheel wheel;  // ... 其他属性和方法 ...  
}  public class Wheel {  // ... 轮的属性和方法 ...  
}

5.3 组合关系(Composition)

  • 定义:组合也是一种“整体-部分”的关系,与聚合类似,但更为强烈。在组合中,当整体被销毁时,部分也会被销毁。组合关系通过实心菱形表示。
  • 例子House(房子)和Room(房间)之间可能存在组合关系,因为房子被销毁时,房间通常也会不复存在。
  • 图形:使用带有实心菱形的实线表示。
  • 箭头:实心菱形一端指向整体,线的另一端指向部分。
  • 示例:实心菱形连接House类,线的另一端连接Room类。
public class House {  private Room room;  // ... 其他属性和方法 ...  public House() {  room = new Room(); // 创建房间作为房子的一部分  }  
}  public class Room {  // ... 房间的属性和方法 ...  
}

5.4 依赖关系(Dependency)

  • 定义:依赖表示一个类依赖于另一个类的定义。这种依赖通常是因为一个类使用了另一个类的某些信息或功能,而这种使用是通过参数传递、方法调用或访问静态成员等方式实现的。依赖关系用带箭头的虚线表示。
  • 例子:如果ClassA中的方法使用了ClassB的一个对象作为参数,那么ClassA就依赖于ClassB
  • 图形:使用虚线表示。
  • 箭头:虚线带有箭头,箭头指向被依赖的类。
  • 示例:虚线箭头从ClassA指向ClassB
public class ClassA {  public void methodA(ClassB classB) {  // 使用 ClassB 的对象进行操作...  }  
}  public class ClassB {  // ... ClassB 的属性和方法 ...  
}

5.5 继承关系(Inheritance)或泛化关系(Generalization)

  • 定义:继承表示一个类是另一个类的特化形式。子类继承了父类的所有属性和操作,还可以添加自己特有的属性和操作。继承关系用带空心三角形的实线表示,箭头指向父类。
  • 例子:在图形界面中,可以有Shape(形状)类作为基类,而Circle(圆形)和Rectangle(矩形)类作为它的子类。
  • 图形:使用虚线表示。
  • 箭头:虚线带有箭头,箭头指向被依赖的类。
  • 示例:虚线箭头从ClassA指向ClassB
public class Shape {  // ... 形状的通用属性和方法 ...  
}  public class Circle extends Shape {  // ... 圆形的特有属性和方法 ...  
}

5.6 实现关系(Realization)

  • 定义:实现关系用于表示类与接口之间的关系,即类实现了接口中声明的所有操作。实现关系用带空心三角形的虚线表示,箭头指向接口。
  • 例子:如果一个Button类实现了一个Clickable接口,那么Button类和Clickable接口之间就存在实现关系。
  • 图形:使用虚线表示。
  • 箭头:虚线带有空心三角形,箭头指向接口。
  • 示例:空心三角形连接Button类,箭头指向Clickable接口。
public interface Clickable {  void click(); // 接口中声明的方法...  
}  public class Button implements Clickable {  @Override  public void click() {  // 实现点击操作...  }  
}

这些关系是UML类图中描述软件系统结构和行为的基础工具,它们提供了丰富的语义和可视化手段来帮助开发人员更好地理解和设计软件系统。

六、关联的几种形式

关联关系(Association)是类与类之间最常用的一种关系,表示两个类之间存在某种连接。这种连接可以是一般的关联,也可以是更为特殊的聚合和组合关系。

在UML中,关联关系可以通过多种方式进一步详细描述,其中包括多重性(Multiplicity)。多重性用来表示类之间关联的数量。常见的多重性表示有:

  • 1:表示一个实例必须与另一个类的一个实例相关联。
  • 0..1:表示一个实例可以与另一个类的一个实例相关联,或者不与任何实例相关联。
  • * 或不指定:表示一个实例可以与另一个类的任意数量的实例相关联。
  • n..m:表示一个实例可以与另一个类的n到m个实例相关联。

多重性在关联关系的两端都可以指定,用来更精确地描述类之间的连接。例如,在订单和商品的关系中,一个订单可能包含多个商品,但每个商品只能属于一个订单。这样的关系可以通过在订单端指定*和在商品端指定1来表示。

此外,关联关系还可以通过角色(Role)导航性(Navigability)、关联类(Association Class)等属性来进一步详细描述。角色用于给关联关系的端点命名,以便更清晰地表达关系的含义;导航性用于表示是否可以从一个类的实例导航到另一个类的实例;关联类用于表示关联本身具有属性和操作的情况。

总的来说,关联关系是UML中描述类与类之间连接的基础工具,通过不同的属性和标记,可以精确地表达类之间各种复杂的连接关系。

(未完,下次我们来学习序列图。)

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

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

相关文章

【MIKE】MIKE河网编辑器操作说明

目录 MIKE河网编辑器说明河网定义河网编辑工具栏河网文件(.nwk11)输入步骤1. 从传统的地图引入底图1.1 底图准备1.2 引入河网底图1.3 输入各河段信息2. 从ARCView .shp文件引入底图MIKE河网编辑器说明 河网编辑器主要功能有两个: ①河网的编辑和参数输人,包括数字化河网及…

spark中 write.csv时, 添加第一行的标题title

在 Spark 中使用 write.csv 写入 CSV 文件时,默认情况下是不会在文件中添加标题行的。但是,你可以通过设置 header 选项来控制是否包含标题行。 下面是一个示例: val data Seq((1, "John", 28),(2, "Alice", 22),(3, …

Netty Review - Netty与Protostuff:打造高效的网络通信

文章目录 概念PrePomServer & ClientProtostuffUtil 解读测试小结 概念 Pre 每日一博 - Protobuf vs. Protostuff&#xff1a;性能、易用性和适用场景分析 Pom <dependency><groupId>com.dyuproject.protostuff</groupId><artifactId>protostuff-…

论文阅读——RS DINO

RS DINO: A Novel Panoptic Segmentation Algorithm for High Resolution Remote Sensing Images 基于MASKDINO模型&#xff0c;加了两个模块&#xff1a; BAM&#xff1a;Batch Attention Module 遥感图像切分的时候把一个建筑物整体比如飞机场切分到不同图片中&#xff0c;…

STM32微控制器在热电偶传感器应用中的性能评估

热电偶传感器是一种常用的温度测量技术&#xff0c;广泛应用于工业和自动化领域。在本文中&#xff0c;我们将探讨STM32微控制器在热电偶传感器应用中的性能评估。我们将涵盖STM32的特性、热电偶传感器的原理、硬件连接、软件编程以及性能评估的方法和指标。 STM32微控制器的特…

swing快速入门(二十三)弹球小游戏

注释很详细&#xff0c;直接上代码 上一篇 新增内容 1. 键盘响应监听 2. 使用定时器事件更新画板 3. 定时器事件的开始与暂停 4. 弹球小游戏的坐标逻辑判断 import javax.swing.*; import java.awt.*; import java.awt.event.*;public class swing_test_19 {//创建一个窗…

Ubuntu 常用命令之 du 命令用法介绍

&#x1f4d1;Linux/Ubuntu 常用命令归类整理 Ubuntu系统下的du命令是一个用来估计和显示文件和目录所占用的磁盘空间的命令。du是“disk usage”的缩写&#xff0c;这个命令可以帮助用户了解磁盘被哪些文件和目录使用。 du命令的常见参数有 -a&#xff1a;列出所有文件和目…

R语言【stringr】——str_detect 检测是否存在字符串的匹配项

Package stringr version 1.5.1 str_detect(string, pattern, negate FALSE) 参数【string】&#xff1a;输入向量。既可以是字符向量&#xff0c;也可以是强制作为一个字符向量。 参数【pattern】&#xff1a;要寻找的模式。默认解释为正则表达式&#xff0c;如 vignette(&…

React网页转换为pdf并下载|使用jspdf html2canvas

checkout 分支后突然报错&#xff0c;提示&#xff1a; Cant resolve jspdf in ... Cant resolve html2canvas in ... 解决方法很简单&#xff0c;重新 yarn install 就好了&#xff0c;至于为什么&#xff0c;我暂时也不知道&#xff0c;总之解决了。 思路来源&#xff1a; 先…

qt 信号和槽的简明使用

目录 1. connect函数 2. 自定义的信号和槽 3. 带参数的信号和槽 1. connect函数 connect(btn, &QPushButton::clicked, this, &Widget::close); 四个参数&#xff1a; 参数1&#xff1a;信号发送者参数2&#xff1a;发送的信号signals&#xff08;函数地址&…

JVM启动流程(JDK8)

JVM启动流程(JDK8) JVM的启动入口是位于jdk/src/share/bin/java.c的JLI_Launch函数,其定义如下: int JLI_Launch(int argc, char ** argv, /* main argc, argc */int jargc, const char** jargv, /* java args */int appclassc, const char** appclass…

centos7安装开源日志系统graylog5.1.2

安装包链接&#xff1a;链接&#xff1a;https://pan.baidu.com/s/1Zl5s7x1zMWpuKfaePy0gPg?pwd1eup 提取码&#xff1a;1eup 这里采用的shell脚本安装&#xff0c;脚本如下&#xff1a; 先使用命令产生2个参数代入到脚本中&#xff1a; 使用pwgen生成password_secret密码 …

Java Web Day07

Layui概念介绍 layui&#xff08;谐音&#xff1a;类 UI) 是一套开源的 Web UI 解决方案&#xff0c;采用自身经典的模块化规范&#xff0c;并遵循原生 HTML/CSS/JS 的开发方式&#xff0c;极易上手&#xff0c;拿来即用。其风格简约轻盈&#xff0c;而组件优雅丰盈&#xff0c…

在ClickHouse数据库中启用预测功能

在这篇博文中&#xff0c;我们将介绍如何将机器学习支持的预测功能与 ClickHouse 数据库集成。ClickHouse 是一个快速、开源、面向列的 SQL 数据库&#xff0c;对于数据分析和实时分析非常有用。该项目由 ClickHouse&#xff0c; Inc. 维护和支持。我们将探索它在需要数据准备以…

C++中多态的原理

文章目录 前言多态的原理多态的条件要求虚函数表用程序打印虚表多继承的虚函数表静态多态和动态多态菱形虚拟继承 前言 上篇讲解了多态的原理&#xff0c;这篇文章来详细讲解一下多态的原理。 这里有一道常考笔试题&#xff1a;sizeof(Base)是多少&#xff1f; 为什么不是8&…

【CF闯关练习】—— 800分段

&#x1f30f;博客主页&#xff1a;PH_modest的博客主页 &#x1f6a9;当前专栏&#xff1a;cf闯关练习 &#x1f48c;其他专栏&#xff1a; &#x1f534;每日一题 &#x1f7e1; C跬步积累 &#x1f7e2; C语言跬步积累 &#x1f308;座右铭&#xff1a;广积粮&#xff0c;缓…

推荐一个vscode看着比较舒服的主题:Dark High Contrast

主题名称&#xff1a;Dark High Contrast &#xff08;意思就是&#xff0c;黑色的&#xff0c;高反差的&#xff09; 步骤&#xff1a;设置→Themes→Color Theme→Dark High Contrast 效果如下&#xff1a; 感觉这个颜色的看起来比较舒服。

腾讯云发布升级版金融音视频解决方案,提供全新架构、安全和特性

远程银行、视频尽调、全媒体客服、路演直播……近年来&#xff0c;音视频技术支撑下的非接触式金融服务&#xff0c;成为了金融机构数字化转型和探索服务创新的重要方向。 12月21日&#xff0c;腾讯云正式发布升级版金融级音视频解决方案。新方案在架构、安全和特性上进行全面…

使用 stream 流构建树(不使用递归)

你知道的越多&#xff0c;你不知道的越多 点赞再看&#xff0c;养成习惯 如果您有疑问或者见解&#xff0c;欢迎指教&#xff1a; 企鹅&#xff1a;869192208 文章目录 前言代码实现定义测试实体类实现方法 前言 最近遇到一个地区数据需要转换成树的需求&#xff0c;研究了一种…

系统学习Python——装饰器:基础知识-[类装饰器:使用方法]

分类目录&#xff1a;《系统学习Python》总目录 前面的文章证明了函数装饰器已经被如此有用&#xff0c;以至于这一模式从Python2.6和Python3.0起就被扩展&#xff0c;并允许使用类装饰器。因为与元类相重叠的角色&#xff0c;它们最初是被抵制的&#xff1b;然而因为它们提供了…