统一建模语言(UML) | 类图
什么是 UML?
UML 是一种用于可视化描述系统, 具有广泛用途的建模语言. 作为一种标准化的图形语言, 在软件工业中被用于软件系统部件的具体化, 可视化, 结构化描述以及撰写文档, 同样在商业模型中也得到应用.
UML 的优点:
使复杂的软件设计更为简单, 也能够实现像 OOP(面向对象编程)这一类被广泛应用的概念.
用理解起来可能更容易的图来描述, 避免了大量的文字.
是表达和交流概念或系统结构变得更容易.
在一张图中就能够描绘出整个系统.
程序员实用类图来描述实际需求时, 可让问题更加清晰明了, 实现起来更容易.
UML 的分类
UML 通常分为两类: 描述结构的 UML 图 (Structural UML diagrams) 和描述行为的 UML 图(Behavioral UML diagrams), 具体见下表:
描述结构的 UML 图 | 描述行为的 UML 图 |
|
|
UML | 类图
类图展示出 OOP 中的类, 接口, 及其中存在的关系, 关联与协作. UML 在类图中是标准化的. 类是 OOP 的主要构件模块, 而类图用恰当的结构展示 OOP 中遇到的一切, 包括类, 继承关系, 类关系. 它能够描述各种对象和它们之间的静态关系. 使用类图的主要目的:
类图是唯一能够恰当的展示出 OOP 中各种不同概念的 UML.
利用类图来对应用程序做出优化的设计与分析高效而快速.
类图是部署图和组件图的基础.
类图一般的规则如下:
每个类用一个矩形框表示, 框内由类名, 属性, 及定义的操作三个子部件构成.
三种表示可见性的修饰符:
+ 表示 public
# 表示 protected
- 表示 private
~ 表示 default(无修饰符)
一些常用的构成模型的组件:
类(Class){名(name), 属性(attribute), 方法(method)
对象(Object)
接口(Interface)
关系(Relationships) { 继承(inheritance), 关联(association), 泛化(generalization)}
关联(association){双向, 单向(unidirectional,aggregation)}
常用表示关系的组件:
关于绘制类图:
一些在线或离线的软件都能够完成类图的制作, 比如 Edraw max, lucid chart 等. 如果能在相关网站软件找到模板, 制作类图更为方便.
推荐网站 https://www.draw.io/ , 可制作各种各样的 diagram, 使用很快捷, 可保存文件到本地, 免费无需登录. 之前也经常用来画流程图.
例子:
下图为实现 interface 和 aggregation 的类图描述. MovablePoint, MovableCircle 实现 Movable.MovablePoint 成为 MovableCircle 一部分.
如下是一张类图, 父类 Animal 有两个子类 dog,cat.d1 为子类 dog 的对象.
以下为对应代码:
- import java.io.*;
- class GFG {
- public static void main(String[] args)
- {
- dog d1 = new dog();
- d1.bark();
- d1.run();
- cat c1 = new cat();
- c1.meww();
- }
- }
- class Animal {
- public void run()
- {
- String name;
- String colour;
- System.out.println("animal is running");
- }
- }
- class dog extends Animal {
- public void bark()
- {
- System.out.println("wooh!wooh! dog is barking");
- }
- public void run()
- {
- System.out.println("dog is running");
- }
- }
- class cat extends Animal {
- public void meww()
- {
- System.out.println("meww! meww!");
- }
- }
参考资料:
[1]. Unified Modeling Language (UML) | Class Diagrams - GeeksforGeeks
[2]. UML Class Diagrams Tutorial, Step by Step - Salma - Medium
来源: https://www.cnblogs.com/wyzersblog/p/10699354.html