[UML] 类图介绍 —— 程序员(灵魂画手)必备画图技能之一

[UML] 类图介绍 —— 程序员(灵魂画手)必备画图技能之一统一建模语言(UnifiedModelingLanguage,UML)可分类成:功能模型:从用户的角度展示系统的功能,包括用例图。对象模型:采用对象,属性,操作,关联等概念展示系统的结构和基础,包括类别图、对象图。动态模型:展现系统的内部行为。包括序列图,活动图,状态图。类图说到类图,它包含的东西确实有点多,你去网上看总能看到,同样都是类图,但是好像各有各家的章法,总让人摸不着头脑。要么少个箭头要么实线变成虚线了… 那这个类图到底有没有标准呢?别慌,有的,《大话设.

大家好,又见面了,我是你们的朋友全栈君。

 
 
 

统一建模语言(Unified Modeling Language,UML) 可分类成:
 

  • 功能模型:从用户的角度展示系统的功能,包括用例图。
  • 对象模型:采用对象,属性,操作,关联等概念展示系统的结构和基础,包括类别图、对象图。
  • 动态模型:展现系统的内部行为。包括序列图,活动图,状态图。
     
                                            ——本文将带您深入浅出,详细透彻的了解类图

 
 
 

类图


 
 
 
 

 
   谈到 UML 家族中的 类图,不得不说其本身包含的细节相对确实有点多,并且你在网上看总能找到一些看似同属于类图,却又有点细微差别的表示方法,似乎各有各家的章法,它们之中要么就是结尾少个箭头,要么就是实线变成虚线,让人摸不着头脑 …
 
    那到底什么是类图 ?类图怎么画 ?有没有一个标准呢? 别慌,从广义上来说其实是有的,你也可以参考类似《大话设计模式》书中对类图的详细介绍。 因为经历过上述的困扰和摸索,为方便大家学习也为方便自己记忆,在这里我特意提炼总结了一下,并将其 划分成了 两个学习部分,分别是 —— 主要掌握 和 次要掌握 , 在坐的吃瓜群众切莫急躁, 相信我认真看完下文,以后不会再对类图有任何疑问 ~~~ ?​
 

 
 
 
 
 
 
 

【 主要需掌握的 】

  1. 类图基础属性

 
 
 
 
 
 
 

在这里插入图片描述

 
 
 
 
 
 
 

  • : private
  • +: public
  • ~: default
  • #: protected
  • 下划线: static
  • 斜体: 抽象 (注意也可以用两个尖括号包裹来表示抽象,比如 —— <<我是抽象类or接口>>)
  • 冒号前是方法名/变量名(根据有无括号区分),冒号后是返回参数/变量类型(根据有无括号区分),如果没有冒号的话表示方法返回空(也有人通过:void表示返空)

 
 
 
 
 
 

2. 泛化关系(你可以理解为继承)

 
 

在这里插入图片描述
 
网上标准解释: 泛化关系为 is-a 的关系;两个对象之间如果可以用 is-a 来表示,就是泛化关系 。

笔者通俗解释: Mac is a 电脑,懂了吧 ? 也就是说Mac 继承 了电脑,是电脑的子类 。

总结: 空心(也有实心表示的,你反正记住这个形状就行)三角 + 实线 == 继承关系

 
 
 
 
 
 

3. 实现关系

在这里插入图片描述
 
网上标准解释: 程序里面实现关系表现为继承抽象类 。

笔者通俗解释: 继承 抽象类实现 接口 都属于实现关系 。 需要特别注意的是实现关系有种 "棒棒糖" 表示法,就是被实现的那个对象是用圆形表示的(这个在下面巩固栏目里会说明)。

总结: 空心(也有实心表示的,你反正记住这个形状就行)三角 + 虚线 == 实现关系

 
 
 
 
 
 
 

【 次要需掌握的 】

 

1. 关联关系

在这里插入图片描述
 
网上标准解释: 通常用一条直线表示,当然 如果需要标明方向 可以添加箭头。它是描书不同的类对象之间的关系,通常不会随着状态的变化而变化,可以理解为被关联者属于关联者的一部分。
 
笔者通俗解释: 其实就是一个类中的 对象与对象 之间的引用关系,你可以理解为一个类中的 所有 成员变量当然如果是多对多关系(比如一个类中的成员变量含有另一个对象的List, 另一个类的成员变量又含有当前对象的List), 那么就可以不用箭头表示, 也可以用双向箭头表示。
 

总结: 尖括号 + 实线 == 关联关系

 
 
 
 
 
 

1. 1 组合关系(组合关系是关联关系的一种,属于强关联关系)

在这里插入图片描述
 
网上标准解释: 与聚合关系一样,组合关系同样表示整体由部分构成的关系,不同之处在于整体和部分是强依赖关系,如果整体不存在了,部分也不复存在。
 
笔者通俗解释: 你可以直接理解为 非集合类的成员变量, 它与类共存亡 。
 

需要另外注意的是,组合关系可特殊标明 0..1(0至1)、 n(规定数量) 、 0..* (0至多) 、 1..* (1至多)、 m..n(规定的数量区间)。 比如棱形一头是 1,而另一头是 1 … * —— 那它的意思就是 “1” 对 “多”,且这个“多”最少为一个。

 
总结: 实心 棱形 + 实线 == 组合关系

 
 
 
 
 
 
 

1. 2 聚合关系( 聚合关系也是关联关系的一种,属于弱关联关系 )

在这里插入图片描述
 
网上标准解释: 与组合关系不同的是,整体和部分不是强依赖的,即使整体不存在了,部分仍然存在。
 
笔者通俗解释: 你可以理解为 集合类的成员变量, 集合类中聚合的对象就代表了这层聚合关系 。 如 List<码农> ,这个集合中 聚合 的 “码农” 对象是可有可无的, 他不影响自身, 这就是聚合关系 。
 
总结: 空心 棱形 + 实线 == 聚合关系

 
 
 
 
 
 

2. 依赖关系

在这里插入图片描述
 
网上标准解释: 通常描述一个对象在运行期间会用到另一个对象的关系。
 
笔者通俗解释: 当一个对象依赖另一个对象提供的服务时,就是依赖关系 。 函数方法的入参 局部变量的引用 静态方法的直接调用 都属于这个范畴 。 一个对象中的函数方法依赖另一个对象作为实例入参的表现形式最为常见, 拿函数方法举例 —— 比如 A 函数方法的入参实例 B,就是需要依赖过来的调用对象。
 
总结: 尖括号 + 虚线 == 依赖关系

 
 
 
 
 
 

总结:


   如果你能理解下图,那基本上说明你已经把 [ UML-类图 ] 弄懂了,再去多结合一些代码和对应的类图巩固一下,以后再看到类图就不会懵圈圈了 ~

 
 
 
 
 

在这里插入图片描述

 
 
 
 
 
 
 

图中的意思概括就是:

  1. 一个 公司 中可以有多个 部门 —— 非集合类的成员变量(公司亡,部门必亡)
  2. 一个 部门 中可以有多个 码农 —— 集合类成员变量,如 List<码农>(码农可有可无,没了换掉就是了,不影响部门的存活)
  3. 一个 码农 可以有多个 手机 —— 成员变量
  4. 一个 码农 依赖多个 Mac —— 很简单,有了 Mac 我才能敲代码嘛,可以理解为需要 Mac 来完成自身的方法调用
  5. Mac电脑 的一种拓展 —— 继承关系
  6. 电脑可处理计算机 这个概念的一种实现 —— 实现关系

 
 
 
 
 

 

巩固


 
 

 

   上面几乎把该有的标准都列举出来了,但你依然能在网上看到除上述展现形式之外的其他各种五花八门 又 看似熟悉 的类图展现形式,它们要么就是没标明箭头,要么就是线条对不上 …
 
 

    万变不离其宗,尽管其标识没有表示清楚,但在绝大多数情况下还是会留有注释的,只要你理解了,并把上面的 类图基础属性 记牢, 结合图里留下的 中/英文注释 一定能看懂。 OK,话不多说,下面再列出一些类图的例子,供大家巩固学习  ~ ~
 

 
 
 
 

在这里插入图片描述
 


[ 依赖关系 ]

 
 
 
 
 
 
 
 
在这里插入图片描述 


[ 关联关系 ]

 
 
 
 
 
 
 
 
 
在这里插入图片描述
 


[ 聚合关系 ]

 
 
 
 
 
 
 
 
 
在这里插入图片描述
 


[ 组合关系 ]

 
 
 
 
 
 
 
 
 
在这里插入图片描述
 


[ 标明对应数量的组合关系 ]

 
 
 
 
 
 
 
 
 
在这里插入图片描述
 


[ 泛化(继承)关系 ]

 
 
 
 
 
 
 
 
 
 

在这里插入图片描述
 


[ 实现关系 —— 棒棒糖表示法 ]

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

   如果你通过上面的内容,自认为对类图有了一个更加深入的理解,那么可以抓住这个记忆点挑战一下自己。借助对类图的巩固理解,通过这篇文章 —— 【彻底搞懂建造者模式】, 进一步获取对 设计模式 方面思想和能力的提升 !!!

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

? 你学废了吗? 如果有帮助欢迎点赞收藏 ~
 


 
 
 
 
 
 
​?​ 另外如果觉得在 灵魂画手 这条路上走的还不过瘾,这里再额外送您两张机票:
 
【程序员必备画图技能之 —— 时序图介绍】 ✈️​

【程序员必备画图技能之 —— 流程图介绍】 ✈️​
 
 
 
 
 
 


 
 
 
 
参考资料:

https://csdnnews.blog.csdn.net/article/details/89838014?utm_medium=distribute.pc_relevant_t0.none-task-blog-2%7Edefault%7EBlogCommendFromMachineLearnPai2%7Edefault-1.baidujs&dist_request_id=&depth_1-utm_source=distribute.pc_relevant_t0.none-task-blog-2%7Edefault%7EBlogCommendFromMachineLearnPai2%7Edefault-1.baidujs
注: 该篇文章中的图有明显错误,笔者已通过PS手段在当前博文修正过来

http://c.biancheng.net/view/1319.html

https://www.jianshu.com/p/57620b762160

https://www.bilibili.com/video/BV1ct411U7hk/?spm_id_from=333.788.recommend_more_video.1

https://baike.baidu.com/item/%E7%B1%BB%E5%9B%BE/4670826?fr=aladdin

 
 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/158067.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(1)


相关推荐

  • 作用域链和原型链的区别_原型链和作用域链

    作用域链和原型链的区别_原型链和作用域链题外话:最近面试一直被问到作用域链的问题,所以还是要深入透彻的学习一下这两个概念。作用域链在红宝书中对作用域链的描述有这么一段话:当代码在一个环境中执行时,会创建变量对象的一个作用域链。作用域链的用途是保证对执行环境有权访问的所有变量和函数的有序访问。作用域链的前端始终是当前执行的代码所在环境的变量对象。如果这个环境是函数,则将其活动对象作为变量对象。活动对象在最开始时只包含一个变量,即argume

    2022年10月27日
  • 数据结构项目——单向链表[通俗易懂]

    数据结构项目——单向链表[通俗易懂]使用单向链表(增加,删除,查询,修改)代码如下:#include “pch.h”#include<string>#include <iostream>using namespace std;struct LNode{ int data;// 数据域 LNode *next; // 指针域};//新建链表void NewList(LNode *…

  • 数据库索引的优缺点

    数据库索引的优缺点索引的优缺点索引的优点:①建立索引的列可以保证行的唯一性,生成唯一的rowId②建立索引可以有效缩短数据的检索时间③建立索引可以加快表与表之间的连接④为用来排序或者是分组的字段添加索引可以加快分组和排序顺序索引的缺点:①创建索引和维护索引需要时间成本,这个成本随着数据量的增加而加大②创建索引和维护索引需要空间成本,每一条索引都要占据数据库的物理存储空间,数据…

  • c语言随机数生成(c语言在线编程网站)

        C标准库中生成伪随机数的是rand函数,使用这个函数需要包含头文件stdlib.h,它没有参数,返回值是一个介于0和RAND_MAX之间的接近均匀分布的整数。RAND_MAX是该头文件中定义的一个常量,在不同的平台上有不同的取值,但可以肯定它是一个非常大的整数。    通常我们用到的随机数是限定在某个范围之中的,例如限定在某个范围之中的,例如0~9,而不是0~RAND_MAX,我们可以用…

  • 重启IBMP750小型机之后:telnet登陆相当缓慢以及xmanger登陆工具无法打开图形界面的解决…

    重启IBMP750小型机之后:telnet登陆相当缓慢以及xmanger登陆工具无法打开图形界面的解决…shutdown-Fr重启IMB小机之后,使用xmanger工具telnet小机,可以打开telent,但是大约40多秒之后,才能登陆到机器,重启之前,telnet打开就能登陆。[@more@]原因是:该台小型机配置了DNS服…

  • 一维卷积神经网络处理序列模型

    一维卷积神经网络处理序列模型fromkeras.datasetsimportimdbfromkeras.modelsimportSequentialfromkeras.layersimportEmbedding,Conv1D,MaxPooling1D,GlobalMaxPooling1D,Densefromkeras.optimizersimportRMSpropmax_featu…

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号