一、UML 是什么
定义
UML 是对立建模语言, 是一种凋谢的办法,用于阐明、可视化、构建和编写一个正在开发的、面向对象的、软件密集零碎的制品的凋谢办法。
对立建模语言 (Unified Modeling Language,UML) 是一种为面向对象零碎的产品进行阐明、可视化和编制文档的一种规范语言,是非专利的第三代建模和规约语言。UML 是面向对象设计的建模工具,独立于任何具体程序设计语言。
UML 自身是一套符号的规定,就像数学符号和化学符号一样,这些符号用于形容软件模型中的各个元素和他 们之间的关系,比方类、接口、实现、泛化、依赖、组合、聚合等。
作用
- 帮组开发团队以一种可视化的形式了解零碎的性能需要。
- 有利于开发团队队员之间在各个开发环节间确立沟通的规范,便于零碎文档的制订和我的项目的治理。因为 UML 的简略、直观和规范性,在一个团队中用 UML 来交换比用文字说明的文档要好的多。
- UML 为非专业编程人士了解软件的性能和结构,提供了一种直白、简略、艰深的办法。
- 应用 UML 能够不便的了解各种框架的设计形式。
二、UML 画图的工具举荐
- MarkDown
- PlantUML
- Draw.io (Mac)
- PowerDesigner (Windows)
工作中第一个罕用用来写文档,二三个用来画 UML 图比拟多(举荐联合应用)。
只有把握罕用的几种图 (用例图、类图、时序图、流动图),就曾经迈向架构第一步了,工作学习中交换起来就容易多了。
三、UML 类图中的关系
在 UML 类图中,常见的有以下几种关系:
- 泛化(Generalization)(继承)
- 实现(Realization)
- 关联(Association)
- 聚合(Aggregation)
- 组合(Composition)
- 依赖(Dependency)
他们的强弱级别为:
泛化 = 实现 > 组合 > 聚合 > 关联 > 依赖
UML 类与类之间的关系示意总览:
以下 UML 图用的是 Draw.io 来画的,开源地址:https://github.com/jgraph/drawio
1. 泛化(继承)
【泛化关系】:是一种继承关系,示意个别与非凡的关系,它指定了子类如何特化父类的所有特色和行为。【例如】:男人是人的一种,既有男人的个性也有人的共性。女人也是如此。【箭头指向】:带三角箭头的实线,箭头指向父类。
2. 实现(Realization)
【实现关系】:是一品种与接口的关系,示意类是接口所有特色和行为的实现。【例如】:USB 是一个接口,每一个电脑都能够插上 USB 这个接口。【箭头指向】:带三角箭头的虚线,箭头指向接口。
3. 关联(Association)
【关联关系】:是一种领有的关系,它使一个类晓得另一个类的属性和办法。关联能够是双向的,也能够是单向的。【例如】:老师与学生是双向关联,老师有多名学生,学生也可能有多名老师。但学生与某课程间的关系为单向关联,一名学生可能要上多门课程,课程是个形象的货色,他不领有学生。【代码体现】:成员变量。【箭头及指向】:双向的关联能够有两个箭头或者没有箭头,单向的关联有一个箭头。
4. 聚合(Aggregation)
【聚合关系】:是整体与局部的关系,能够看成「has-a」的关系,局部能够来到整体而独自存在。【例如】:电脑和键盘是整体和局部的关系,电脑没了键盘依然能够存在。【代码体现】:成员变量。【箭头及指向】:带空心菱形的实心线,菱形指向整体。
5. 组合(Composition)
聚合关系】:是整体与局部的关系,能够看成「contains-a」的关系,局部来到整体后无奈独自存在。【例如】:鸟儿和翅膀是整体和局部的关系,鸟儿没了翅膀不能独立存在。【代码体现】:成员变量。【箭头及指向】:带实心菱形的实心线,菱形指向整体。
6. 依赖(Dependency)
【聚合关系】:是一种应用的关系,即一个类的实现须要另一个类的帮助,所以要尽量不应用双向的相互依赖。【例如】:人依赖计算机实现玩电脑游戏的目标。【代码体现】:局部变量、办法的参数或者对静态方法的调用。【箭头及指向】:带箭头的虚线,指向被使用者。
如果要画我的项目的设计图,有很多类的关系图,这个软件能够应用。如果须要疾速在设计某个性能时也能够应用 PlantUML 来实现,怎么快怎么来。
能够在网页上画,在 IDE 中也有插件:
比方我在总结设计模式系列时,就用这个来画。
用代码来间接渲染生成 UML 设计图片
代码如下:
@startuml
skinparam classAttributeIconSize 0
package "class ChainOfResponsibility(责任链模式)" {
abstract class Handler
{#setSuccessor(Handler)
+handle():void}
note left: 形象解决者
class HandlerA
{+handle():void
}
class HandlerB
{+handle():void
}
class HandlerC
{+handle():void
}
Handler o-- Handler:0..1
Handler <|-- HandlerA
Handler <|-- HandlerB
Handler <|-- HandlerC
Client ..> Handler
}
@enduml
生成的效果图:
四、小结
UML 是每一个软件开发者都必须要熟练掌握的,如何你还不会,连忙学习(卷)起来吧。
参考资料:
- https://plantuml.com/zh/seque…