设计模式中的UML类图

在线绘图工具:

https://app.diagrams.net/

https://www.processon.com/

第一个需要挂梯子,但很好用,本文用它绘制样例图


最近在看Head First一书,即使在软件工程的课程中学习过UML类图如何绘制,但显然已经忘掉很多了..希望通过这篇博客拾起来吧

在下文中,将类图抽象为“节点”与“边”,从图论的角度将类图的概念抽象成这两种方式进行描述;其中,节点为具体类、抽象类、接口和包等实体的介绍,边即为他们之间关系的介绍,主要是泛化、关联与依赖关系。


目录

节点

接口

泛化关系

继承关系

实现关系

关联关系

聚合关系

组合关系

依赖关系

总结

References


节点

类是封装对象的一种结构,也是人们认识世界的一种抽象方法..

一般来说,类由两部分组成:1、标识类自身特性的属性集合 2、定义在属性集合上的操作/方法

常见的UML类图有以下两种:

其中,类图 (左) 从上至下分为三部分;第一部分为类名,第二部分是类的自身属性,每个属性开始的+ - #表示属性的公共、私有或保护权限,type为属性的类型,如 int  、string等,第三部分为类的方法,+ - #仍然代表方法权限,当然还有以static为标识的静态方法。 此外,default表示待定。

右边的类图就是一种简单版了,可在还不知道类的操作的情况下对对象进行抽象。

接口

接口的概念像所谓的组件、元素一样,都比较泛。

我对接口的概述:

接口是一类方法的集合。方法的实现、实现的对象与调用的对象都是default的, 接口它自己并不care这三者。

一个典型的接口如下所示:

其中,从上至下分为三部分,第一部分是以<< Interface>>作为接口的标识,在这之下是接口的名词;第二部分与第三部分跟类图类似,但不同的是接口中只提供抽象方法,此外,大多数接口中的属性都是一些常量。

值得说明的是,java在不同版本中逐渐增加了对接口内部属性与方法的权限支持,具体可参考:

java 接口(interface)在不同JDK版本中的变化_猎人在吃肉的博客-CSDN博客icon-default.png?t=N176https://blog.csdn.net/xiaojin21cen/article/details/104346018不同语言的接口多多少少有些不同,但不变的是,接口内部的方法一定是抽象方法;如果没了这个特性,那接口就是一个纯纯的类了也失去了存在的必要。

包的概念也比较泛,不同语言有着不同的实现。我们姑且认为包(packet)是某个封装好的代码集合吧,这个集合对外提供了一些接口/函数供调用。

如cv2是一个包名,一般来说这个包也是一个.class文件: 

 

除了包之外,还有一些模块、组件、注释之类的东东,暂且不管他们吧..

好了,描述完节点后,自然会联想起图中节点间的关系(包括节点的自环也就是与自身的关系)。

搞软件工程理论的那帮人使用了以下名词描述边的关系:继承关系、关联关系、聚合关系、泛化关系、组合关系、实现关系、依赖关系、信赖关系、引用关系..

但他们之间是否能够单独作为一个划分?这是很难说清的事情。

说实话,我看了一些不同的博客,甚至去问了下chatgpt,发现存在一些不同的分类方式..这个领域这么久了应该有统一的分类标准吧,但为啥各种复制粘贴别人教科书的博客又各不相同呢?

模糊的定义将导致滥用和不统一,严格意义的划分或许又无法简单地描述边的复杂...难受

我认为关系的划分可以由以下几部分构成:1、实体之间属性的关系  2、实体间关联关系的强弱

3、实体间关系的权限..

先给出chatgpt的定义吧:


  1. 继承关系(Is-A Relationship):表示一个类是另一个类的子类,继承关系用带有空心箭头的实线表示,箭头指向父类。继承关系是一种类之间的关系,也称为Is-A关系,如“一个圆是一个形状”。

  2. 关联关系(Has-A Relationship):表示两个类之间存在关联,关联关系用实线表示,箭头指向被关联的类。关联关系是一种对象之间的关系,也称为Has-A关系,如“一个人有一张身份证”。

  3. 聚合关系(Aggregation):表示整体与部分之间的关系,聚合关系用带空心菱形的实线表示,菱形指向整体。聚合关系是一种对象之间的关系,也称为Part-Of关系,如“一个班级有多个学生”。

  4. 组合关系(Composition):表示整体与部分之间的强关系,组合关系用带实心菱形的实线表示,菱形指向整体。组合关系是一种对象之间的关系,也称为Has-A关系,如“一台电脑由多个硬件组成”。

  5. 依赖关系(Dependency):表示一个类的实现依赖于另一个类,依赖关系用带箭头的虚线表示,箭头指向被依赖的类。依赖关系是一种类之间的关系,如“一个汽车需要燃料”。

  6. 实现关系(Realization):表示一个类实现了一个接口或抽象类,实现关系用带有空心箭头的虚线表示,箭头指向接口或抽象类。实现关系是一种类之间的关系,如“一个人实现了教师接口”。


根据国内的一些文章(教材没在身边,下次更新),有些文章将边的关系划分为为以下三种:泛化关系、关联关系、依赖关系。

各种关系的强弱顺序:

泛化 > 关联 > 依赖

 继承 = 实现 > 组合 > 聚合 > 依赖

其中,泛化关系定义了 is a 的特性,关联关系定义了 has a 的特性,依赖关系定义了using a的特性。 

泛化关系

泛化关系表示一般与特殊的关系,如子类如何特性化父类的属性与行为,同类个体间相同属性类型、行为的不同特性。

继承关系

 

实现关系

实现关系是指接口及其实现类之间的关系

 

值得说明的是,java中支持接口对象作为类属性(成员变量)。

关联关系

关联关系是抽象模糊的定义

 

聚合关系

集体与个体的关系

 

组合关系

整体与部分的关系(强联系),整体与部分是不可分的,部分也不能给其它整体共享

 

依赖关系

一种弱关联关系。如果对象A用到对象B,但是和B的关系不是太明显的时候,就可以把这种关系看作是依赖关系。但我觉得这个关系还是挺强的,可能是定义者想强调被依赖对象的可替代性?但也存在很多不可替代的依赖对象诶

 

总结

没啥总结的,多用或许就熟悉了

有空写写设计模式的文章..

References

 UML详解(1):类的关系与如何绘制类图_类图怎么画_凯文叔叔的博客-CSDN博客

30分钟学会UML类图 - 知乎 (zhihu.com)

Java 在线工具 | 菜鸟工具 (runoob.com)

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

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

相关文章

面向对象分析之UML

大一的时候就已经接触过UML图,当时也只是懵懵懂懂,结合项目代码大概知道这是一种类似流程图的东西。如今要软考了,重新接触UML才知道这不仅仅只是流程图那么简单。 简介 UML,也就是所谓的统一建模语言,这是一种被广泛接受的面向对象的分析方法。说是一种语言,可它并不像…

介绍一个生成流程图工具—解放生产力

ChatGPT生成流程图 ChatGPTPlantUML生成流程图 ChatGPTPlantUML生成流程图 环境&#xff1a; 科学上网&#xff08;或者有其他渠道可以直接访问chatgpt&#xff09;PlantUML在线生成地址&#xff1a;链接: PlantUML 首先来到GPT&#xff0c;生成指令&#xff0c;下面我直接让…

Idea+PlantUML自动生成UML图(最详教学)

目录 一、下载idea插件 二、安装Graphviz 三、idea结合Graphviz 四、PlantUML结合ChatGPT ​ 五、无ChatGPT 一、下载idea插件 idea从 FIle-->Settings-->Plugins-->Marketplace 进入到插件下载界面&#xff0c;搜索PlantUML&#xff0c;点击"install"下载…

使用 PlantUML 绘制的 UML——代码画时序图

使用 PlantUML 绘制的 UML——代码画时序图 前言 在看源码的时候&#xff0c;看见有些大佬画的各种图&#xff0c;能更加方便可视的理解源码逻辑。就想着学习自己画&#xff0c;但是在找了一些画UML图的工具&#xff0c;但是不仅难画&#xff0c;而且难看&#xff08;仅仅表示…

chatgpt赋能Python-pythonuml图

Python UML图&#xff1a;如何使用UML图来提高Python程序员的效率&#xff1f; 如果你是一位Python程序员&#xff0c;那么你一定知道Python是一种高效的编程语言&#xff0c;被广泛用于各种领域&#xff0c;如机器学习、人工智能、Web开发等。然而&#xff0c;对于复杂的程序…

穿搭速递网页

<!DOCTYPE html> <html><head><meta http-equiv"Content-Type" content"text/html;charset utf-8"/><link rel"stylesheet" href"css/style05.css" type"text/css"/><title>穿搭速递…

Midjourney如何给模特换衣服

Midjourney如何给模特换衣服 文章来源&#xff1a;【探金圈】http://tanjin.wydxda.ltd/article/11023 【Midjourney如何给模特换衣服】 视频教程地址&#xff1a;http://tanjin.wydxda.ltd/article/11023 1、把衣服的素材准备好 2、在MIDJOURNEY中输入想要的模特描述词 Full-b…

最新薪酬调研报告:2021年中国薪资增长率预计为5.2%

全球领先的健康、财富及人才咨询服务公司美世正式发布了新一年度的《中国整体薪酬调研报告》。报告来自对近4,000家企业人员的整体薪酬调研反馈&#xff0c;其结果显示&#xff0c;2020年参与调研的中国企业有21%冻薪&#xff0c;而薪资增长率预计为5.2%&#xff08;不含冻薪&a…

人力社保部发布2018年失业率结果,这组数据扎痛了多少人的心?

6月10日&#xff0c;人力社保部发布2018年度人力资源和社会保障事业发展统计公报。公报显示&#xff0c;全年基本养老保险基金总收入55005亿元&#xff0c;基金总支出47550亿元。年末基本养老保险基金累计结存58152亿元。2018年7月1日&#xff0c;建立实施企业职工基本养老保险…

商业图表案例6-学历与收入失业率关系

#图表挑战 #Excel图表 #Excel数据分析 案例6:学历与收入失业率关系&#xff0c;使用横向的条形图&#xff0c;平均水平使用趋势线。不用斜线图&#xff0c;主要是交叉没有一根线突出表示。2个反比关系&#xff0c;做2个条形图比较突出反比关系。

2020 年中国程序员薪资和生活现状调查报告

作者 | 程序员客栈 来源 | ID&#xff1a;proginnwx 根据中国互联网络信息中心&#xff08;CNNIC&#xff09;近日发布第 44 次《中国互联网络发展状况统计报告》。截至 2019 年 06 月&#xff0c;中国网民规模为 8.54 亿&#xff0c;较 2018 年底增加 2598 万。网上外卖用户规…

2019年国外程序员薪资报告分析,40岁以后薪资呈下降趋势

最近&#xff0c;在小编在网上看到由高盛及Hackerrank公司发布的关于国外程序员的薪资报告&#xff0c;该报告根据地域和行业等维度将程序员薪资进行划分&#xff0c;详情如下&#xff1a; 在欧洲&#xff0c;程序员工资最高的行业是汽车行业&#xff0c;平均薪资达到了5.2W美元…

啥?失业率到了18%?别慌,咱仔细看看数据再说~~

编 辑&#xff1a;彭文华 来 源&#xff1a;大数据架构师 彭友们好&#xff0c;我是老彭呀。前两天网上到处都在传中国的失业率达到了惊人的18%&#xff01;&#xff01;&#xff01;我都蒙了呀&#xff01;这数据这么惊人了吗&#xff1f; 吓得我连夜到处查数据来源&#xff0…

2017中国程序员薪资生存现状调查报告

程序员一直都是一个备受人们关注的群体。2014年&#xff0c;据IDC统计&#xff0c;全球约有1850万名程序员&#xff0c;中国占10%。随着近年全国互联网创业热潮的兴起&#xff0c;“互联网”、“云计算”以及“智能硬件”等领域发展迅速&#xff0c;市场对程序员的需求更为旺盛…

以太坊又迎来重要升级,1600万ETH会不会解锁砸盘?这个赛道热起来了…

这是白话区块链的第1838期原创 作者 | Joyce出品&#xff5c;白话区块链&#xff08;ID&#xff1a;hellobtc&#xff09; 去年9月15日讨论得轰轰烈烈的以太坊合并事件依然历历在目&#xff0c;以太坊的价格也从最低的800多U涨幅超过100%&#xff0c;达到将近2000U的小高峰。短…

业绩大幅上扬 AR/VR营收喜人,飞天云动的商业模式有何竞争力?

VR无疑是近年来大热的商业概念之一&#xff0c;被认为是通往元宇宙的“钥匙”&#xff0c;但是在过去的一年&#xff0c;关于VR“凉了”的言论甚嚣尘上&#xff0c;不少报道指出VR产业存在内容短板、场景不足等诸多痛点&#xff0c;市场似乎正在对VR失去兴趣。 不过&#xff0…

看了百度Q1财报 我发出了“All In 百度”的交易指令

‍数据智能产业创新服务媒体 ——聚焦数智 改变商业 2023年5月16日傍晚&#xff0c;百度公布了截至2023 年 3 月 31 日的第一季度未经审计的财务业绩。数据显示&#xff0c;2023年一季度百度实现营收311.44亿元&#xff0c;同比增长10%&#xff1b;归属百度的净利润&#xff0…

全面注册制对量化交易的影响 | A+CLUB 2023专题峰会圆桌论坛

4月1日下午&#xff0c;ACLUB 2023专题峰会在上海陆家嘴圆满举行&#xff0c;本届峰会主题为“守正创新 聚力前行——助力量化行业高质量发展”&#xff0c;近80家业内领先机构逾百人参加会议&#xff0c;大家齐聚一堂&#xff0c;就量化行业的技术与生态、趋势与未来&#xff…

没有这些,别妄谈做 ChatGPT 了

文&#xff5c;卖萌酱&#xff0c;转自公众号「夕小瑶的卖萌屋」 ChatGPT 破圈爆火后&#xff0c;越来越多人开始问&#xff1a; “啥时候出现中国版的 ChatGPT&#xff1f;” 国内学术界和工业界&#xff0c;都纷纷躁动起来——百度、阿里、字节等大厂纷纷喊口号&#xff0c;一…

英阅浏览器APP_Android_畅读英文文章

软件介绍 英阅浏览器是一款英语阅读增强的浏览器&#xff0c;在浏览英文网页只需点击单词即可显示中文翻译释义&#xff0c;无需切换到字典查询&#xff0c;单词收藏并且记录单词来源网址&#xff0c;支持全文翻译。支持自定义 UA、自定义 hosts 文件、广告过滤。 使用指南 …