UML
统一建模语言(Unified Modeling Language,UML)是一种为面向对象系统的产品进行说明、可视化和编制文档的一种标准语言,是非专利的第三代建模和规约语言。UML是面向对象设计的建模工具,独立于任何具体程序设计语言。
JAVA 中的类图概念,markdown用mermaid编辑classDiagram语法
类图classDiagram语法
全语法介绍:https://plantuml.com/zh/class-diagram
一、类图说明
在UML中,类使用包含类名、属性t和操作且带有分隔线的长方形来表示,类图分为三层。
第一层
- 是类的名称,如果是 抽象类(struct) 或 接口(interface),就用 斜体 表示,其中接口名称的上部会用<>修饰。
第二层
- 是类的成员变量,通常是字段和属性。表示方式为:
可见性 名称:类型 [ = 缺省值 ]
。例如 : + ID : int = 1
第三层
- 是类的成员方法。表示方式为:
可见性 名称(参数列表) [ : 返回类型]
。例如 + getID(): int
可见性修饰符表
可见性 | 修饰符 | 描述 |
---|---|---|
private | - | 同 一类 |
default | ~ | 同一包 |
protect | # | 不同包的子类 |
public | + | 不同包的非子类 |
Java有四种访问权限, 其中三种有访问权限修饰符,分别为private,public和protected,还有一种不带任何修饰符。
- private: Java语言中对访问权限限制的最窄的修饰符,一般称之为“私有的”。被其修饰的类、属性以及方法只能被该类的对象访问,其子类不能访问,更不能允许跨包访问。
- default:即不加任何访问修饰符,通常称为“默认访问模式“。该模式下,只允许在同一个包中进行访问。
- protect: 介于public 和 private 之间的一种访问修饰符,一般称之为“保护形”。被其修饰的类、属性以及方法只能被类本身的方法及子类访问,即使子类在不同的包中也可以访问。
- public: Java语言中访问限制最宽的修饰符,一般称之为“公共的”。被其修饰的类、属性以及方法不仅可以跨类访问,而且允许跨包(package)访问。
下面用表格的形式来展示四种访问权限之间的异同点,这样会更加形象。表格如下所示:
同一个类 | 同一个包 | 不同包的子类 | 不同包的非子类 | |
---|---|---|---|---|
Private | √ | |||
Default | √ | √ | ||
Protected | √ | √ | √ | |
Public | √ | √ | √ | √ |
二、类之间的关系
类之间的关系有
- 实现(Realize),用来表示类与接口、抽象类与接口之间的关系。
- 泛化(Generalize),泛化(就是继承),用来表示类与类、类与抽象类、抽象类与抽象类、接口与接口之间的关系。
- 依赖(Dependency)依赖用来表示两者之间的依从关系。关联可以是双向的,也可以是单向的;
- 关联(Associate),关联关系可以是抽象的,例如花朵依赖阳光,也可以进一步具体划分为聚合及组合关系。
- 聚合(Aggregate),聚合用来表示整体与部分的关系,是一种弱的关联关系,体现为A可以包含B,但B不一定是A的一部分(可分割)。
- 组合(Compose)。组合用来表示整体与部分的关系,是一种强的关联关系,体现了严格的整体和部分的关系(不可分割),整体和部分的生命周期一样(人和身体器官)。
其中,聚合(Aggregate),组合(Compose)属于关联(Associate),是特殊的关联(Associate)关系。
关系强度(耦合度)由高到低为:泛化=实现>组合>聚合>关联>依赖。
图例参考:https://www.cnblogs.com/shamao/p/10875550.html
关系 | 语法 | 描述 | 图示 |
---|---|---|---|
实现 | –|> | 实线 + 空心三角 | [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-NiXmHTtK-1609490352752)(imges/实现.png)] |
泛化(继承) | …|> | 虚线 + 空心三角 | [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-NDRPhTsZ-1609490352755)(imges/泛化.png)] |
关联 | –> | 实线 + 箭头 | [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-lPSn3Nw4-1609490352756)(imges/关联.png)] |
聚合 | –o | 实线 + 空心四边形 | [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Xzp3x7uw-1609490352757)(imges/聚合.png)] |
组合 | –* | 实线 + 实心四边形 | [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-le5YRMEd-1609490352758)(imges/组合.png)] |
依赖 | …> | 虚线 + 箭头 | [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Qk4k83b0-1609490352759)(imges/依赖.png)] |