[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)
blank

相关推荐

  • 职称计算机ppt2003窍门,ppt2003模块职称计算机考试

    职称计算机ppt2003窍门,ppt2003模块职称计算机考试职称计算机考试模块Powerpoint2003基础1、要求:利用“开始”菜单启动PowerPoint2003[略]2、要求:利用桌面快捷方式启动PowerPoint2003,再退出PowerPoint2003[略]3、要求:用开始菜单打开最近使用过的“雷雨课件”文件:点击“开始”→“我最近的文档”→“|雷雨课件”。4、要求:从最近打开过的演示文稿“学习指南”启动PowerPoint2003,然后…

  • php pcs.dll,百度PCS 入门使用示例

    php pcs.dll,百度PCS 入门使用示例百度PCS入门使用示例PCSAPI目前主要分为文件API和结构化数据API。下面将会提供几个示例帮助您理解如何使用RESTAPI和SDK。获取AccessToken示例在您进行PCSAPI调用之前,首先按照ImplicitGrant方法获取AccessToken。1.请您将以下HTTP请求直接粘贴到浏览器地址栏内,并按下回车键。https://openapi.baidu.com/o…

  • mysql的root密码更改_navicat忘记root密码

    mysql的root密码更改_navicat忘记root密码方法1:用SETPASSWORD命令MySQL-urootmysql>SETPASSWORDFOR’root’@’localhost’=PASSWORD(‘newpass’);方法2:用mysqladminmysqladmin-urootpassword”newpass”如果root已经设置过密码,采用如下方法mysqladmin-urootpasswordoldpass”newpass”方法3:用UPDATE直接编辑user

  • High Performance Browser Networking – TCP UDP TLS

    High Performance Browser Networking – TCP UDP TLS

  • 【Javascript】【WebRTC】WebRTC从原理到实现(四):ICE服务器

    【Javascript】【WebRTC】WebRTC从原理到实现(四):ICE服务器ICE全称InteractiveConnectivityEstablishment,翻译成中文就是“交互式连通建立方式”它通过综合利用现有STUN,TURN等协议,有效地穿透各种NAT,以更有效的方式来建立会话…

  • Pytest(1)安装与入门「建议收藏」

    Pytest(1)安装与入门「建议收藏」pytest介绍pytest是python的一种单元测试框架,与python自带的unittest测试框架类似,但是比unittest框架使用起来更简洁,效率更高。根据pytest的官方网站介绍,它

发表回复

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

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