[架构之路-214]- UML-类图图解、详解、结构化、本质化讲解

news2024/9/22 5:28:59

目录

一、什么是类

1.1 概述

1.2 UML中类的表示

1.3  接口

1.4 抽象类

1.5 模板类

二、什么类图

2.1 概述

2.2 类关系

三、UML类图

3.1 结构关系

3.1.1 完全一体:继承关系 (类与类耦合度最高,类与类之间最强的关系)

3.1.2 组合关系

3.1.3 聚合关系

3.1.4 关联关系

3.2  操作关系

3.2.1 操作上的继承关系:实现关系(Implementation)

3.2.2 依赖关系

四 总结


一、什么是类

1.1 概述

类是面向对象语言的程序设计中的概念,是面向对象编程的基础。

类的实质是一种引用数据类型,类似于 byte、short、int(char)、long、float、double 等基本数据类型,不同的是它是一种复杂的数据类型。因为它的本质是数据类型,而不是数据,所以不存在于内存中,不能被直接操作,只有被实例化为对象时,才会变得可操作。

结构化面向对象
简单数据类型char,short,int,long,float,doublechar,short,int,long,float,double
复合数据类型struct ABC   ;//结构体类型class ABC; //类类型
组成

结构体成员变量

结构体成员函数(新增加)

类成员变量

类成员函数

数据struct ABC val;//变量定义=》变量

class ABC  val; //实例化-》对象

类是对现实生活中一类具有共同特征的事物的抽象。如果一个程序里提供的数据类型与应用中的概念有直接的对应,这个程序就会更容易理解,也更容易修改。一组经过很好选择的用户定义的类会使程序更简洁。此外,它还能使各种形式的代码分析更容易进行。特别地,它还会使编译器有可能检查对象的非法使用。 

类的内部封装了属性和方法,用于操作自身的成员。类是对某种对象的定义,具有行为(behavior),它描述一个对象能够做什么以及做的方法(method),它们是可以对这个对象进行操作的程序和过程。它包含有关对象行为方式的信息,包括它的名称、属性、方法和事件。

类的构成包括成员属性和成员方法(数据成员和成员函数)。数据成员对应类的属性,类的数据成员也是一种数据类型,并不需要分配内存。成员函数则用于操作类的各项属性,是一个类具有的特有的操作,比如“学生”可以“上课”,而“水果”则不能。类和外界发生交互的操作称为接口。

备注:

类有两种组成:成员变量和成员函数,因此类与类之间的关系,也是从这两个角度去看:是在成员函数结构上建立关联? 还是在成员函数上建立关联?

1.2 UML中类的表示

在类的UML图中,使用长方形描述一个类的主要构成,长方形垂直地分为三层,以此放置类的名称、属性和方法。

在这里插入图片描述

 一般类的类名用正常字体粗体表示,如上图抽象类名用斜体字粗体,如User;接口则需在上方加上<< interface >>。

属性和方法都需要标注可见性符号,+代表public,#代表protected,-代表private。

另外,还可以用冒号:表明属性的类型和方法的返回类型,如+$name:string+getName():string。当然,类型说明并非必须。

在这里插入图片描述

 1. 从上到下分为三部分,分别是类名、属性和操作。类名是必须有的

​ 2.类如果有属性,则每一个属性必须有一个名字,另外还可以有其他的描述信息,如可见性、数据类型、缺省值等

​ 3.类如果有操作,则每一个操作也都有一个名字,其他可选的信息包括可见性、参数的名、参数类型、参数缺省值和操作的返回值的类型等

1.3  接口

​ 一组操作的集合,只有操作的声明而没有实现。

1.4 抽象类

​ 不能被实例化的类,一般至少包含一个抽象操作

1.5 模板类

​ 一种参数化的类,在编译时把模板参数绑定到不同的数据类型,从而产生不同的类。

在这里插入图片描述

二、什么类图

2.1 概述

类图以反映一个类与其他类在类的结构(属性、操作)以及类之间的关系为主要目的,描述了软件系统的结构,是一种静态建模方法。

​ 类图中的“类”与面向对象语言中的“类”的概念是对应的,是对现实世界中的事物的抽象。

类是一种复合数据类型,是一种自定义复合数据类型,既然是数据类型,就意味着会被其他数据类似使用,在UML中,称为类与类的关系。

2.2 类关系

类与类之间的关系主要有六种:

继承、实现、组合、聚合、关联和依赖,

这六种关系的箭头表示如下。
在这里插入图片描述

类的关系的强弱,体现在如下两个大的方面:

(1)通过内存结构体现,由强到弱为:继承-》组合-》聚合-》关联

(2)通过操作函数体现,由强到弱为:实现-》....................-》依赖

三、UML类图

3.1 结构关系

3.1.1 完全一体:继承关系 (类与类耦合度最高,类与类之间最强的关系)

继承关系也称泛化关系(Generalization),用于描述父类与子类之间的关系。父类又称作基类,子类又称作派生类。

继承关系中,子类继承父类的所有功能,父类所具有的属性、方法,子类应该都有。子类中除了与父类一致的信息以外,还包括额外的信息。

例如:公交车、出租车和小轿车都是汽车,他们都有名称,并且都能在路上行驶。

在这里插入图片描述

继承关系:Bus或Taxi完成拥有Car的一切,包括所有的成员属性和成员函数。

与在Bus或Taxi空的类定义上增加一个Car类型的成员变量不同的是,后者称为关联。

继承关系:子类可以直接操作父类中的成员函数和成员属性的名字。而关联关系必须通过新定义的成员变量名才能访问。如:

Class A

{

        int x;

}

1. 继承关系

Class B: A

{

}

在使用B的实例时,可以直接访问A中的x.

2. 组合关系

Class C

{

        Class A  a;

}

是在使用C的实例时,需要通过新定义的变量访问,如a.x

3.1.2 组合关系

组合关系(Composition):整体与部分的关系,但是整体与部分不可以分开。

组合关系表示类之间整体与部分的关系,整体和部分有一致的生存期。一旦整体对象不存在,部分对象也将不存在,是同生共死的关系。

例如:人由头部和身体组成,两者不可分割,共同存在。
在这里插入图片描述

两个类的耦合程度,组合关系仅次于继承关系。

与继承关系相似,组合关系表示一个类是另一个类结构上(成员变量)的组成部分。

只不过,需要听过新定义变量才能访问。

3.1.3 聚合关系

聚合关系(Aggregation):整体和部分的关系,整体与部分可以分开。

聚合关系也表示类之间整体与部分的关系,成员对象是整体对象的一部分,但是成员对象可以脱离整体对象独立存在

例如:公交车司机和工衣、工帽是整体与部分的关系,但是可以分开,工衣、工帽可以穿在别的司机身上,公交司机也可以穿别的工衣、工帽。
在这里插入图片描述

 与组合关系一样,组合关系表示一个类是另一个类结构上(成员变量)的组成部分,是整体与部分的关系。

与组合关系不同的是:

组合关系:两个类对应的对象(实例化后的变量,内存空间)的生命周期是相同的。体现在代码上,是通过成员变量的建立了部分与整体的关系。

聚合关系:两个类对应的对象(实例化后的变量,内存空间)的生命周期可以不同,体现在代码上,是通过引用或指针建立了部分与整体的关系。

3.1.4 关联关系

关联关系(Association):表示一个类的成员属性中保存了对另一个类的一个实例(或多个实例)的引用。即两个类的实例,在结构上并没有部分与整体这种强关系,仅仅表示结构上(不是成员函数、成员操作上)有某种内在的联系而已。

关联关系是类与类之间最常用的一种关系,表示一类对象与另一类对象之间有联系

组合、聚合也属于关联关系,是一种强关联关系,是一种特殊的关联关系:部分与整体的关系,只是关联关系的类间关系比其他两种要弱。

关联关系有四种:双向关联、单向关联、自关联、多重数关联。

例如:汽车和司机,一辆汽车对应特定的司机,一个司机也可以开多辆车。
在这里插入图片描述

在多重性关系中,可以直接在关联直线上增加一个数字,表示与之对应的另一个类的对象的个数。

1..1:仅一个
0..*:零个或多个
1..*:一个或多个
0..1:没有或只有一个
m..n:最少m、最多n个 (m<=n)

3.2  操作关系

3.2.1 操作上的继承关系:实现关系(Implementation)

主要用来规定接口和实现类的关系。

接口(包括抽象类)是方法的集合,在实现关系中,类实现了接口,类中的方法实现了接口声明的所有方法。

例如:汽车和轮船都是交通工具,而交通工具只是一个可移动工具的抽象概念,船和车实现了具体移动的功能。

在这里插入图片描述

 实现关系本质上是一种继承关系,因此图形表示与继承是相似的,只不过,只有成员函数,没有成员变量,因此用了虚线表示。

3.2.2 依赖关系

依赖关系(Dependence):假设A类的变化引起了B类的变化,则说名B类依赖于A类。

大多数情况下,依赖关系体现在某个类的方法使用另一个类的对象作为参数

并没有体现在对象的内存结构(成员属性,成员变量)上有某种关系。

依赖关系是一种“使用”关系,特定事物的改变有可能会影响到使用该事物的其他事物,在需要表示一个事物使用另一个事物时使用依赖关系。

例如:汽车依赖汽油,如果没有汽油,汽车将无法行驶。
依赖关系

备注:

普通的关联关系本质也是一种依赖关系,依赖关系本质上也是一种关联关系,因此他们的图形是相似的。

  • 普通的关联关系:内存结构上、成员变量上的依赖关系,通过成员变量关联,即在内存结构上进行关联,因此用的是实线。
  • 依赖关系:成员函数上的依赖关系,通过成员函数进行关联,因此,用的是虚线

四 总结

这六种类关系中,组合、聚合和关联的代码结构一样,可以从关系的强弱来理解,各类关系从强到弱依次是:继承→实现→组合→聚合→关联→依赖。如下是完整的一张UML关系图。

在这里插入图片描述


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

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

相关文章

空天|谈一谈飞机引擎的应急断离

为什么突然想到这个话题呢&#xff1f;归功于即将到来的材料力学考试。在复习科学出版社出版的苟文选、王安强等编写的《材料力学&#xff08;1&#xff09;》第三版第三章的连接键强度校核等内容时&#xff0c;一个例题吸引了我的注意力。 例3-4&#xff1a; 水平力Fg。 强而…

理论实战源码齐飞!架构师社区疯传的SpringSecurity进阶小册真香

安全管理是Java应用开发中无法避免的问题&#xff0c;随着Spring Boot和微服务的流行&#xff0c;Spring Security受到越来越多Java开发者的重视&#xff0c;究其原因,还是沾了微服务的光。作为Spring家族中的一员,其在和Spring家族中的其他产品如SpringBoot、Spring Cloud等进…

Unity UGUI3——三大基础控件

一、Image ​ Image 是图像组件&#xff0c;是 UGUI 中用于显示精灵图片的关键组件 ​ 除了背景图等大图&#xff0c;一般都使用 Image 来显示 UI 中的图片元素 &#xff08;一&#xff09;参数介绍 Source Image&#xff1a;图片来源 图片类型必须是“精灵 Sprite”类型 Col…

IBM N系列存储和NetApp FAS之间的对应关系

IBM在很长一段时间都是OEM NetApp的FAS存储作为他的NAS产品线&#xff0c;在IBM叫做Storage N series&#xff0c;就是N系列&#xff0c;在2014年IBM终止了和NetApp之间的OEM关系&#xff0c;目前在市场上的OEM的NetApp存储型号主要是 FAS3000&#xff0c;FAS31和FAS32的中端系…

HTB靶场:简单inject

HTB靶场&#xff1a;简单inject 1、进入靶场&#xff0c;连接vpn后开启靶机 inject 2、nmap扫描一下靶机 nmap -v -A 10.10.11.*扫描后显示服务和端口信息8080和22 3、打开web服务 1&#xff09;有上传文件功能 简单上传了几个文件&#xff08;txt,img等 上传过程根据参数简…

SpringBoot 实现 PDF 添加水印有哪些方案?

简介 PDF&#xff08;Portable Document Format&#xff0c;便携式文档格式&#xff09;是一种流行的文件格式&#xff0c;它可以在多个操作系统和应用程序中进行查看和打印。在某些情况下&#xff0c;我们需要对 PDF 文件添加水印&#xff0c;以使其更具有辨识度或者保护其版…

全国青少年软件编程(Scratch)等级考试二级考试真题2023年5月——持续更新.....

一、单选题(共25题,共50分) 1.运行下列哪段程序,可以让狗狗走到木屋门口?() A. B. C. D. 标准答案:C 2.下列哪个选项可以控制:按下左键扫帚向左旋转15度,按下右键扫帚向右旋转15度?() A. B. C.

LLM系列 | 09: 基于ChatGPT构建智能客服系统(query分类安全审核防注入)

简介 竹斋眠听雨&#xff0c;梦里长青苔。门寂山相对&#xff0c;身闲鸟不猜。小伙伴们好&#xff0c;我是卖热干面的小女孩。紧接前面几篇ChatGPT Prompt工程系列文章&#xff1a; 04:ChatGPT Prompt编写指南05:如何优化ChatGPT Prompt&#xff1f;06:ChatGPT Prompt实践&am…

如何安装MySQL数据库

目录 什么是MySQL数据库 第一步 安装依赖环境 第二步 创建MySQL相关进程用户 第三步 导入MySQL相关包 第四步 解包到指定目录下 第五步 切换到MySQL目录下编译安装 第六步 编译 第七步 更改指定文件的所有者和所属组 第八步 进入指定配置文件清空内容 第九步 配置指定…

软件测试复习题

一、填空题 软件从“出生”到“消亡”的过程称为___。早期的线性开发模型称为_______开发模型。引入风险分析的开发模型为_______开发模型。ISO 9126-1991标准提出的质量模型包括_______和________和________和______和_______和_______6大特性。按照缺陷的严重程度可以将缺陷…

如何做Web测试?测试者必知的常见测试点总结

目录 一、Web应用程序 二、功能测试 三、易用性测试(界面测试)整体界面测试 四、茶客性测试 五、安全性测试安全性测试要求: 六、性能测试 总结&#xff1a; 如何做Web测试?以下为大家比较全面地总结一下Web测试的票点 一、Web应用程序 应用程序有两种模式&#xff0c…

article-五轴机械臂正逆分析(标准法)VQ

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-A2CiIK0R-1687071926271)(data:image/svgxml;utf8, )] 五轴机械臂正逆解仿真 标准的D-H参数法 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-PbUOp13D-1687071926272)(da…

设计模式-策略工厂

在介绍策略工厂的实现前&#xff0c;我们要先了解spring中beanFactory&#xff1a; BeanFactory 作为IOC服务的提供者&#xff0c;通过XmlBeanFactory来得到实例 生产Bean的工厂&#xff0c;采用延迟初始化策略&#xff08;只有在需要某个对象时&#xff0c;才进行初始化和依…

网络安全如何从零基础到精通?

在看这篇文章之前&#xff0c;有个问题想确认一下&#xff0c;你现在自学网络安全是出于兴趣原因&#xff0c;还是说之后准备走网络安全这个方向&#xff1f; 因为目的不同&#xff0c;学习的方式和深度也会不一样。 今天我就围绕职业发展这个方向来和你聊聊。 如果你真的想通过…

全国青少年软件编程(Scratch)等级考试一级考试真题2023年5月——持续更新.....

一、单选题(共25题&#xff0c;共50分) 1.看图找规律&#xff0c;请问下图红框中是&#xff1f;&#xff08; &#xff09; A. B. C. D. 标准答案&#xff1a;D 试题解析&#xff1a;通过观察每种图形有两个&#xff0c;所以选择D 2.用一根绳子绕树一圈余30厘米&#x…

小说推文洗稿的工作流程

牙叔教程 简单易懂 第一步 找到十万赞以上的爆款视频 自己刷呗, 多刷一些, 最好是那种粉丝几万到几十万的作者, 点赞数量在万赞以上的作品, 十万赞就更好啦 第二步 提取视频的文案 我们分享视频的时候, 有一个复制链接的按钮, 然后把链接复制到 逗哥配音 , 就可以把文案提取…

【QQ界面展示-通知的发布2 Objective-C语言】

一、我再把这个通知的发布与监听给大家复习一下, 1.我们发布和监听通知, 1)第一,需要一个对象,通知的发布者 2)第二,需要一个对象,通知的监听者 只有它俩,还不够,一个是通知的发布者、一个是通知的监听者, 只有它俩,根本不够, 你要想进行通知的发布、和监听,…

leetcode329. 矩阵中的最长递增路径(java)

矩阵中的最长递增路径 矩阵中的最长递增路径题目描述 暴力递归代码演示 递归 缓存代码演示 动态规划专题 矩阵中的最长递增路径 来源&#xff1a;力扣&#xff08;LeetCode&#xff09; 链接&#xff1a;https://leetcode.cn/problems/longest-increasing-path-in-a-matrix 题…

一文搞懂文件系统

目录 1.文件系统概述 2.文件命名 3.目录 3.1一级目录系统 3.2层次目录系统 4.文件系统的实现 4.1引导块 4.2超级块 4.3空闲空间块 4.3.1位图 4.3.2 使用链表进行管理 4.inode 5.记录文件所用磁盘块的方法 5.1连续分配 5.2链表分配 5.3inode 1.文件系统概述 文件系…

DC综合入门【待完善】

一、文件说明 工艺库 1、.db 格式&#xff1a;二进制工艺库文件&#xff1b;. lib 格式&#xff1a;可读工艺库文件&#xff08;包含 operating _ conditions ). 二、. synopsys _ dc . setup 搜索路径定义 1、set_search _ path [ list ./ home xxx(路径)] 2、多个地址可用&…