作为一名高级开发者需要具备的技能之画UML类图

 写在前面:大家好!我是晴空๓。如果博客中有不足或者的错误的地方欢迎在评论区或者私信我指正,感谢大家的不吝赐教。我的唯一博客更新地址是:https://ac-fun.blog.csdn.net/。非常感谢大家的支持。一起加油,冲鸭!
用知识改变命运,用知识成就未来!加油 (ง •̀o•́)ง (ง •̀o•́)ง

文章目录

  • 简介
  • 类与类之间的关系
    • 继承关系
    • 实现关系
    • 关联关系
    • 聚合关系
    • 组合关系
    • 依赖关系
  • 总结

简介

 在之前的博客:如何使用IDEA画UML图 中已经详细的说明了如何使用 IDEAUML图。本篇博客来详细的讲解一下 UML 的类图怎样画。在 UML13 种图中,类图 是使用频率最高的 UML 图之一。作为一名开发人员画类图是必须具备的技能。类图可以帮助我们简洁明了的描述系统中的类,以及各个类之间的关系的静态视图,能够更好的帮助我们在开发系统之前对系统有一个全面的认识。

 类图也可以更好的帮助其他开发者快速的了解我们的系统。类图是一种静态模型类型。类图表示类、接口和它们之间的协作关系,用于 系统设计阶段

 类图用 3 个矩形拼接表示,最上面的部分标识类的名称,如果是接口则需要在类名上方添加 <<Interface>>,中间标识类的属性,最下面标识类的方法。如下图所示:
类图简介
生成该图的 UML 语言代码如下:

@startumlclass Person {+ name : String- age : int# weight : double~ height : double+ sex : char+ eat(food)# drink()- walk()~ run()+ study()+ {static}playGames()
}note left of Person : + 表示 public\n - 表示 private\n # 表示 protected\n ~ 表示 default,可省略不写
note right of Person : 字段和方法返回值的类型非必须,可以不写。\n静态类或者静态方法在下方画横线,\n在PlantUML中在静态方法或属性前面加{static},抽象加{abstract}right footer <font color=red>https://ac-fun.blog.csdn.net/</font>
@enduml

类与类之间的关系

 类与类之间的关系一共有 6 种,分别是:继承(泛化)关系、实现关系、组合关系、聚合关系、关联关系和依赖关系。下面分别来详解一下如何只用 PlantUML 画这 6 种关系。

继承关系

 继承关系又叫做泛化关系,在此关系中子类继承父类的所有功能,也就是说父类有的属性、方法,子类都会具有。除了从父类继承来的功能,子类还可以继续扩展父类的功能,从而具有父类所不具有的功能。比如一个师傅带一个徒弟练武,徒弟继承了师傅的所有武功,后来徒弟又自创了武功,这就是继承关系。

 结合代码来说,例如,汽车的种类有很多种,有公交车、出租车等等。它们都有自己的特点,但是它们又有很多共同点。这里的汽车就可以作为父类,而公交车和出租车则是汽车的子类。其代码和类图如下:

public class Car {private String name;public void run(){}
}public class Bus extends Car {}public class Taxi extends Car {}

Car类图
生成该图的 UML 语言代码如下:

@startumlclass Car {- name : String+ run()
}class Busclass TaxiCar <|-- Bus
Car <|-- Taxiright footer <font color=red>https://ac-fun.blog.csdn.net/</font>
@enduml

注:类之间的继承(泛化)关系通过 <|-- 或者 --|>来表示,其中箭头指向父类,表示箭尾的类继承了箭头的类。

实现关系

 实现关系实际上就是 A 类实现了 B 类,在实现关系中,类实现了接口,类中的方法实现了接口中的所有方法。例如:或火车和飞机都是交通工具,而交通工具只是一个抽象的概念,它们的运行方式不同,都通过不同的方式具体实现了移动的功能。其代码以及类图如下:

package com.acfun.practice;public interface Vehicle {void run();
}
package com.acfun.practice;/*** @description: 火车类* @author: ACfun* @create: 2021-07-03 18:00**/
public class Train implements Vehicle{@Overridepublic void run() {System.out.println("火车在地上跑...");}
}
package com.acfun.practice;/*** @description: 飞机类* @author: ACfun* @create: 2021-07-03 18:01**/
public class Plane implements Vehicle{@Overridepublic void run() {System.out.println("飞机在天上飞...");}
}

Vehicle类图
生成该图的 UML 语言代码如下:

@startumlinterface Vehicle {+ {static}run()
}class Plant {- name : String+ run()
}class Train {- name : String+ run()
}Vehicle <|.. Train
Vehicle <|.. Plantright footer <font color=red>https://ac-fun.blog.csdn.net/</font>
@enduml

注:类之间的实现关系通过 ..|> 或者 <|.. 表示,箭头指向的为接口,箭尾为实现接口的类。注意顺序不要反了。

关联关系

 关联关系是类与类之间最常见的一种关系,表示一类对象与另一类对象之间有联系。后面的聚合、组合也属于关联关系,它们之间的区别在于关联关系的类之间的关系比聚合、组合关系都要弱。组合关系最强。

 关联关系有四种:双向关联、单向关联、自关联、多重性关联。例如汽车和司机,一辆汽车对应特定的司机,一个司机对应特定的汽车。其代码和类图如下:

package com.acfun.practice.Association;/*** @description: 司机类* @author: ACfun* @create: 2021-07-03 19:31**/
public class Driver {private Car car;public void addCar(Car car) {this.car = car;}
}
package com.acfun.practice.Association;/*** @description: 汽车类* @author: ACfun* @create: 2021-07-03 19:30**/
public class Car {private Driver driver;public void addDriver(Driver driver) {this.driver = driver;}
}

关联关系
生成该图的 UML 语言代码如下:

@startumlclass Driver {- car : Car+ addCar()
}class Car {- driver : Driver+ addDriver()
}Driver "1"--"1" Carright footer <font color=red>https://ac-fun.blog.csdn.net/</font>@enduml

聚合关系

 聚合关系表示整体与部分之间的关系,整体与部分可以进行分离,部分对象可以脱离整体对象独立存在。比如台式电脑的主机和屏幕、鼠标的关系。屏幕和鼠标可以放在别的主机使用,主机也可以更换别的屏幕、鼠标。其代码和类图如下:

package com.acfun.practice.computer;/*** @description: 鼠标类* @author: ACfun* @create: 2021-07-03 18:54**/
public class Mouse {
}
package com.acfun.practice.computer;/*** @description: 屏幕类* @author: ACfun* @create: 2021-07-03 18:55**/
public class Screen {
}
package com.acfun.practice.computer;/*** @description: 电脑类* @author: ACfun* @create: 2021-07-03 18:55**/
public class Computer {private Mouse mouse; // 鼠标可以和主机分离private Screen screen; // 屏幕可以和主机分离public void setMouse(Mouse mouse) {this.mouse = mouse;}public void setScreen(Screen screen) {this.screen = screen;}
}

Computer类图
生成该图的 UML 语言代码如下:

@startumlclass Computer {- mouse : Mouse- screen : Screen+ setMouse()+ setScreen()
}class Mouse
class ScreenComputer o-- Mouse
Computer o-- Screenright footer <font color=red>https://ac-fun.blog.csdn.net/</font>@enduml

注:类之间的聚合关系通过 o-- 或者 --o 表示,箭头指向的为整体,箭尾为部分。

组合关系

 组合关系表示类之间整体与部分的关系,这里要重点强调的是这个整体与部分有一直的生存周期,共同存亡。一旦整体对象不在,部分对象也将不会存在。例如,人由头和身体组成,两者不可分割,共同存在。其代码和类图如下:

package com.acfun.practice.Person;/*** @description: 头部类* @author: ACfun* @create: 2021-07-03 19:42**/
public class Head {private String name;
}
package com.acfun.practice.Person;/*** @description: 身体类* @author: ACfun* @create: 2021-07-03 19:43**/
public class Body {private String name;
}
package com.acfun.practice.Person;/*** @description: 人类* @author: ACfun* @create: 2021-07-03 19:42**/
public class Human {private Head head;private Body body;
}

组合关系
生成该图的 UML 语言代码如下:

@startumlclass Head {- name : String
}class Body {- name : String
}class Human {- head : Head- body : Body
}Human *-- Head
Human *-- Bodyright footer <font color=red>https://ac-fun.blog.csdn.net/</font>
@enduml

依赖关系

 依赖关系是一种“使用”关系,只要是在类中用到了对方,那么它们之间就有依赖关系。比如说 A类 用到了 B类,那么就说 A类 依赖于 B类。如果没有 B类,那么将会编译不通过。使用依赖关系在大多数情况下,依赖关系体现在某个类的方法是用另一个类的对象作为参数。例如,汽车依赖汽油,如果没有汽油,那么汽车将无法行驶。该例子的代码和类图如下:

package com.acfun.practice.CarOil;/*** @description: 汽油类* @author: ACfun* @create: 2021-07-06 17:56**/
public class Oil {private String type;
}
package com.acfun.practice.CarOil;/*** @description: 汽车类* @author: ACfun* @create: 2021-07-06 18:00**/
public class Car {public void run(Oil oil) {}
}

依赖关系示例
生成该图的 UML 语言代码如下:

@startumlclass Car {+ run(Oil oil)
}class Oil {- type : String
}Car ..> Oilright footer <font color=red>https://ac-fun.blog.csdn.net/</font>@enduml

注:

总结

 从以上讲解我们可以看出:继承关系、实现关系和关联关系是依赖关系的特例,组合关系和聚合关系是关联关系的特例。所以归根到底它们都是一种关系,那就是依赖关系。只是根据情况的不同将它们具体分成了不同的关系。我们可以从强弱角度来进行理解,各类关系从强到弱依次是:继承关系 > 实现关系 > 组合关系 > 聚合关系 > 关联关系 > 依赖关系


未完待续,持续更新中……

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

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

相关文章

[UML] --- 类图

1 类图简介 类图以反映类的结构(属性、操作)以及类之间的关系为主要目的&#xff0c;描述了软件系统的结构&#xff0c;是一种静态建模方法 类图中的“类”与面向对象面向对象面向对象语言中的“类”的概念是对应的&#xff0c;它用来描述系统中的有意义的概念&#xff0c;包括…

UML 类图各符号含义速查

链接&#xff1a;https://pan.baidu.com/s/1RePYipe_4hnW_EtCbD-r9Q 提取码&#xff1a;0000 概述 类图 类名 访问修饰符 变量名 : 返回类型&#xff08;例&#xff1a; Username : String&#xff09; 访问修饰符 方法名 () : 返回类型&#xff08;例&#xff1a; getUserna…

快速识别UML类图

在UML类图中&#xff0c;常见的有以下几种关系: 泛化&#xff08;Generalization&#xff09;, 实现&#xff08;Realization&#xff09;&#xff0c;关联&#xff08;Association)&#xff0c;聚合&#xff08;Aggregation&#xff09;&#xff0c;组合(Composition)&#xf…

小马识途分享创建品牌百科的流程和技巧

大家知道百度百科是人人可参与协作的网络百科全书&#xff0c;无论是创建词条、编辑现有词条&#xff0c;都可以亲手为百度百科作出贡献。虽然理论上百度百科是可以人人创建的&#xff0c;但并不是创建后马上就可以得到展示的&#xff0c;需要通过百度百科的审核机制。所以&…

在线类图各种UML图分享

好工具一定要分享给最好的朋友&#xff0c;ProcessOn助您和好友一起高效办公&#xff01; https://www.processon.com/i/5a37774de4b0dce99f032667

UML图:类图 --详细介绍

类图的概念 描述类、接口及它们之间关系的图&#xff0c;显示系统中各个类的静态结构 类图的元素 类 面向对象系统组织结构的核心对一组具有相同属性、操作、关系和语义的对象的抽象包括名称部分&#xff08;Name&#xff09;、属性部分&#xff08;Attribute&#xff09;…

UML-认识六种箭头,轻松读懂UML图

进行系统设计时&#xff0c;UML是一种常见的面向对象结构设计方式&#xff0c;里面的各种箭头表示经常会把人弄糊涂&#xff0c;如果不能正确理解&#xff0c;实现阶段就会出大问题&#xff0c;失之毫厘&#xff0c;谬以千里&#xff0c;下面带着大家认识下6种常用箭头。 1. 泛…

一文学会UML类图

1.关系图解 2.类图详解 1.类 类图分三层&#xff1a; 第一层显示类的名称&#xff0c;如果是抽象类&#xff0c;则就 用斜体显示。 第二层是类的特性&#xff0c;通常就是字段和属性。 第三层是类 的 操 作 &#xff0c; 通 常 是 方 法 或 行 为 &#xff0c;前面的符号表示…

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

统一建模语言(Unified Modeling Language&#xff0c;UML) 可分类成&#xff1a; 功能模型&#xff1a;从用户的角度展示系统的功能&#xff0c;包括用例图。对象模型&#xff1a;采用对象&#xff0c;属性&#xff0c;操作&#xff0c;关联等概念展示系统的结构和基础&#…

人工智能存在安全隐患?网络安全还得靠人来维护!

前言 继今年3月对ChatGPT进行安全审查后&#xff0c;意大利隐私监管机构表示将计划创建一个人工智能咨询委员会&#xff0c;对目前所有人工智能平台的数据搜集行为进行密切审查。 意大利数据保护机构 Garante 某高级官员表示&#xff0c;该委员会将加入目前由四人组成的隐私法…

短信接收流程分析

5,短信接收 如果有信息,RIL层会主动上报消息,RIL.java 的processUnsolicited方法会进行分发,根据网络制式,信息分为GSM和CDMA, 在此就以GSM信息为例论述, processUnsolicited方法对RIL_UNSOL_RESPONSE_NEW_SMS消息处理逻辑如下, 1,调用responseString方法从ril层读取消息内容…

Android 发送短信

一、发送短信的方法 使用 Intent 隐式调用系统短信应用进行发送 Uri uri Uri.parse("smsto:10086");Intent it new Intent(Intent.ACTION_SENDTO, uri);it.putExtra("sms_body", "Hello World&#xff01;");startActivity(it); 使…

量化策略和level2行情数据股票市场需求大吗?

国内量化交易起步较晚&#xff0c;大约15年开始&#xff0c;20年开始爆发&#xff0c;21年量化私募规模飙升。由于容量过大&#xff0c;出现了一个头部量化私募中性策略导致大幅回调的问题。对于a股来说&#xff0c;量化交易仍然是一种相对较新的投资方式。自20年以来&#xff…

DFQ量化论文阅读

Data-Free Quantization Through Weight Equalization and Bias Correction 高通的训练后量化&#xff0c;提高性能 量化的不同水平 水平1&#xff1a;无需数据和反向传播 水平2&#xff1a;需要数据但不需要反向传播&#xff0c;例如IAO的校准 水平3&#xff1a;需要数据也…

【vn.py】量化策略历史回测(基于本地csv数据)

文章目录 写在前面获取数据csv数据导入历史回测写在后面REF 写在前面 策略研发之后&#xff0c;为了检测我们策略的效果&#xff0c;不可能一上来就接入实盘&#xff0c;所以需要的就是通过历史数据对我们的策略进行检验&#xff0c;也就是历史回测。vn.py也有推出历史回测的教…

「量化技术」Inv_Strategy 胜率76%的趋势反转策略

0 简介 Inv_Strategy为自研的趋势反转策略&#xff0c;能够有效识别到时间序列的趋势拐点&#xff0c;能辅助进行交易决策&#xff0c;规避风险、降低持仓成本。策略基于深度神经网络技术&#xff0c;利用前2个月的量价关系进行inference&#xff08;推理&#xff09;&#xf…

基于BigQuant的量化策略实现

文章目录 一、BigQuant的重要模块说明 1.回测模块 二、基于技术指标的策略实现 1.库函数导入与全局变量初始化 2.每日逻辑函数编写 策略1: MACD金叉MA多头买入 策略2: 利用MA指标进行择股 3.策略结果展示 策略1: MACD金叉MA多头买入 策略2: MA择股 三、基于QP优化的策略实现 …

【定量分析、量化金融与统计学】纵向数据分析(1)——截面数据、时间序列数据和纵向数据

一、截面数据&#xff08;Cross-sectional Data&#xff09; 截面数据就是固定时间来分析其他变量同一时间内的关系。 例如&#xff1a;比较2022年的全国20个省市的GDP与人口&#xff0c;那么我们就是限定了2022年&#xff0c;去找GDP和人口的可能关系。 再例如&#xff1a;…

gdp数据分析

1 概述 本文主要分析china,usa,king,japan,russia5个国家的gdp&#xff0c;时间从1800-2040&#xff0c;后面的数据为预测数据&#xff0c;不准确。 2 绘制折线图 import pandas as pd import matplotlib.pyplot as pltdata pd.read_csv("line_animation.csv") x…

Python量化策略入门1-如何利用聚宽(JoinQuant)下载金融数据

[TOC]量化策略入门1-如何利用聚宽(JoinQuant)下载金融数据 前言 量化策略入门系列文章是本人学习股票量化笔记&#xff0c;最终输出结果希望是一个可在本地运行的回测框架&#xff0c;包含数据获取&#xff0c;数据处理&#xff0c;策略回测等。 本文主要为了介绍如何利用聚…