乐趣区

关于uml:架构师必须学会的UML图小结

一、UML 是什么

定义

UML 是对立建模语言, 是一种凋谢的办法,用于阐明、可视化、构建和编写一个正在开发的、面向对象的、软件密集零碎的制品的凋谢办法。

对立建模语言 (Unified Modeling Language,UML) 是一种为面向对象零碎的产品进行阐明、可视化和编制文档的一种规范语言,是非专利的第三代建模和规约语言。UML 是面向对象设计的建模工具,独立于任何具体程序设计语言。
UML 自身是一套符号的规定,就像数学符号和化学符号一样,这些符号用于形容软件模型中的各个元素和他 们之间的关系,比方类、接口、实现、泛化、依赖、组合、聚合等。

作用

  1. 帮组开发团队以一种可视化的形式了解零碎的性能需要。
  2. 有利于开发团队队员之间在各个开发环节间确立沟通的规范,便于零碎文档的制订和我的项目的治理。因为 UML 的简略、直观和规范性,在一个团队中用 UML 来交换比用文字说明的文档要好的多。
  3. UML 为非专业编程人士了解软件的性能和结构,提供了一种直白、简略、艰深的办法。
  4. 应用 UML 能够不便的了解各种框架的设计形式。

二、UML 画图的工具举荐

  1. MarkDown
  2. PlantUML
  3. Draw.io (Mac)
  4. 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 是每一个软件开发者都必须要熟练掌握的,如何你还不会,连忙学习(卷)起来吧。

参考资料:

  1. https://plantuml.com/zh/seque…
退出移动版