文章目录

  • UML
    • UML类图
  • UML绘图语言——PlantUML
    • 简介
    • 绘制类图
  • 一个典型示例
    • 基本元素
    • 组合、聚合关系
    • 接口和实现
    • 其它关系
  • 总结与问答练习

时效性
本篇撰写时间为2021.11.9,由于计算机技术日新月异,博客中所有内容都有时效和版本限制,具体做法不一定总行得通,链接可能改动失效,各种软件的用法可能有修改。但是其中透露的思想往往是值得学习的。
Windows 10家庭中文版,版本20H2,操作系统内部版本19042.1288

UML

UML是Unified Modeling Language的简称
https://en.wikipedia.org/wiki/Unified_Modeling_Language
(可能需梯子)

The Unified Modeling Language (UML) is a general-purpose, developmental, modeling language in the field of software engineering that is intended to provide a standard way to visualize the design of a system.
In 1997, UML was adopted as a standard by the Object Management Group (OMG), and has been managed by this organization ever since. In 2005, UML was also published by the International Organization for Standardization (ISO) as an approved ISO standard. Since then the standard has been periodically revised to cover the latest revision of UML. In software engineering, most practitioners do not use UML, but instead produce informal hand drawn diagrams; these diagrams, however, often include elements from UML.

可以理解为OMG(Object Management Group)是一个致力于标准化的联合体,ISO(International Organization for Standarization, 国际标准化组织)是更大的标准化组织。UML是一种标准,被OMG adopt,然后又被ISO approve了。
软件工程师即使不画完全标准的UML图,也会在草图中体现相关元素。一些书籍(如著名的Head First Design Patterns)也会采用正式或不正式的UML帮助读者理解。
时效性:UML目前最新版本如图所示

UML类图

UML图有许多种,分别适用于不同的软件开发场景。
本篇中我们主要关注UML类图。
https://en.wikipedia.org/wiki/Class_diagram
(可能需梯子)

In software engineering, a class diagram in the Unified Modeling Language (UML) is a type of static structure diagram that describes the structure of a system by showing the system’s classes, their attributes, operations (or methods), and the relationships among objects.
The class diagram is the main building block of object-oriented modeling.

UML类图的规范节选(详细完全的版本可以参见维基或者一些知乎文章等等)

  • 类被包括三部分的“盒子”表示,顶部是类名,中间是attribute,底部是operation.
  • 类继承关系用表示


    该图就表示Student继承Person,具有public属性grades,其类型为list,等等。

UML绘图语言——PlantUML

简介

http://www.plantuml.com/plantuml/uml/SyfFKj2rKt3CoKnELR1Io4ZDoSa70000
该网址是UML绘图语言——PlantUML的在线服务器。可以敲纯文本的代码绘制UML图。
时效性:PlantUML版本V1.2021.13
例如

@startuml
!theme spacelab
Bob -> Alice : hello
@enduml

可以画出(以spacelab为主题)的简单的Sequence Diagram

绘制类图

http://plantuml.com/guide
在该pdf教程中,搜索class diagram,很容易翻到该章节。

这是一些常见的element画法示例,该pdf下面还有一些relation画法示例,等等。

一个典型示例


其代码

@startuml
abstract Animal{
+alive
+metabolism(x: O2, y: Water)
+reproduce()
}
note "This is a note." as n0
Animal .. n0abstract Bird{
+feather
+lay()
}
Animal <|-- Birdclass Wing
Bird "1"*-->"2" Wing
note on link: Compositionclass Duck{
+lay()
}
Bird <|-- Duckclass WildGoose{
+flyInLine()
}
Bird <|-- WildGooseclass WildGooseFlock{
+flyInLine()
}
WildGooseFlock o-->WildGoose
note on link: Aggregationinterface Fly{
{abstract}+fly()
}
Fly <|..WildGoose
note on link: Implementationclass Penguin{
+lay()
}
Bird <|-- Penguinclass Climate
Climate <-- Penguin
note on link: Associationclass DonaldDuck{
+speak()
}
Duck <|-- DonaldDuck
note on link: InheritanceHaveATalk ()-- DonaldDuck
note on link: Lollipop interfaceclass Oxygen
Oxygen <.. Animal
class Water
Water <.. Animal
note on link: Dependence
@enduml

基本元素

  • abstract, class, interface是常见的三种基本构成元素。

    • 默认情况,属性用不带括号来表示(+alive),方法用带括号表示(+speak())。+, #等标记public等等。
  • 代码中的note "mock" as n0note on link是常见的添加注释的方式。

组合、聚合关系

https://en.wikipedia.org/wiki/Class_diagram 中用一句话概括
(可能需梯子)

Thus the aggregation relationship is often “catalog” containment to distinguish it from composition’s “physical” containment.

  • 组合表示“物理组成部分”,“有机整体”,比如心脏之于人。组合往往共享生命周期。
  • 聚合表示“数据库关系”,“编目录”,比如学生之于班级。解散班级不代表杀死所有学生。
    本例子中的组合关系:
@startuml
abstract Bird{
+feather
+lay()
}class Wing
Bird "1"*-->"2" Wing
note on link: Composition
@enduml


其中2表示一只鸟有2只翅膀,1表示一只翅膀属于1只鸟。
本例子中的聚合关系:略。

接口和实现

  • 接口跟抽象类有类似之处,都是要求继承它的类实现一些指定的抽象方法。但抽象类里可能有普通的方法(“功能性代码”),接口里不允许有。
  • 接口可以用矩形表示法表示。即:
@startuml
class WildGoose{
+flyInLine()
}interface Fly{
{abstract}+fly()
}
Fly <|..WildGoose
note on link: Implementation
@enduml


这跟一般的类继承基本类似。容易记忆语法。

  • 也可以用棒棒糖(Lollipop)表示法表示,即:
@startuml
class DonaldDuck{
+speak()
}HaveATalk ()-- DonaldDuck
note on link: Lollipop interface
@enduml


这种表示方法比较简略,即不再显式画出接口对应的矩形,而是用一个圆圈(旁注接口名)简单表示。实现了接口的类必须实现指定的方法(如speak(),而这些方法名在矩形表示法中应当画在接口对应矩形里的)。
请特别注意区分接口名HaveATalk和方法名speak()是两个不同的概念,以及它们的联系。

其它关系

  • Inheritance继承:一者更广泛,一者更具体。子类的对象一定是基类的对象。
  • Dependence依赖:动物依赖于氧气和水,进行新陈代谢。
  • Association关联:企鹅的分布、栖居、迁徙和气候有关联。
    • 此处并不是双向关联,因为说“气候和企鹅有关联”多多少少有一点勉强(弱)。

总结与问答练习

  1. Q: 对于WildGooseWildGooseFlock的link,可以用什么样的数字(cardinality)标示比较恰当?
    A:
@startuml
class WildGoose
class WildGooseFlock
WildGooseFlock "1" o--> "1..*" WildGoose
@enduml


当然,你也可以把1..*改成m..*,按照你个人认为的标准,可以取m为2,3或10…合理即可。

  1. Q: 前述图中的棒棒糖表示法(Lollipop)等价于怎样的矩形表示法?
    A:
@startuml
class DonaldDuck
interface HaveATalk{
{abstract} +speak()
}
HaveATalk <|.. DonaldDuck
@enduml

  1. Q: 书和书页更像是聚合还是组合关系?
    A: 组合。如果你认为是聚合,那么你理解的销毁书应当是把书拆成单独的页。这显然不太符合一般人的理解了。
  2. Q: PlantUML的语法和语义分别是什么?
    A: 语法:略。
    语义:PlantUML的语义本质上就是UML的语义,具体到本篇中的类图就是类间关系等等。对于UML(当然以及PlantUML),我们最关心的就是其语义。

ExpRe[2] UML,UML类图,UML绘图语言——PlantUML相关推荐

  1. [UML]UML系列——类图class的关联关系(聚合、组合)

    关联的概念 关联用来表示两个或多个类的对象之间的结构关系,它在代码中表现为一个类以属性的形式包含对另一个类的一个或多个对象的应用. 程序演示:关联关系(code/assocation) 假设:一个公司 ...

  2. java中类图概念,程序员眼中的UML(4)--类图释疑之一,Attribute和Property之区别

    程序员眼中的UML(4) --类图释疑之一,Attribute和Property之区别 上一篇中提出了很多问题,其中最令人费解的可能就是Attribute和Property之区别了吧.我在网络上寻找良 ...

  3. Eclipse 答疑:Eclipse 使用 Amateras UML 创建类图点击 Finish 没反应解决方式汇总

    文章目录 前言 一.问题产生场景 1.1.Amateras UML 创建类图没反应 二.问题原因分析 三.问题定位及解决 3.1.定位检查版本支持信息 3.2.问题确认过程 3.3.解决方式验证 四. ...

  4. UML软件工程--类图

    UML 基础:类图 选自:IBM 这是关于统一建模语言.即UML 里采用的基本图的一系列文章的一部分.在我 先前关于序列图的文章 里,我把重点从 UML 1.4 版,转移到 OMG的采用UML 2.0 ...

  5. 建立对象模型即使用UML画类图

    UML类图画法及其之间的几种关系 最近复习软件工程的考试,大题需要画一下类图,发现类图的画法及其之间的几种关系已经淡忘了很多, 上百度进行搜索,发现了一篇学习笔记,整理总结的不错哦 自我总结: 看见建 ...

  6. 统一建模语言(UML) | 类图

    什么是UML? UML是Unified Model Language的缩写,中文是统一建模语言,是由一整套图表组成的标准化建模语言 UML的优点: 1.在程序开发前用UML对整个软件设计有个直观的表现 ...

  7. 看懂类图——UML类图基础

    类图 要学懂设计模式,就需要先看得懂类图,类与类之间的关系是学习设计模式的基础,而在软件工程中,类与类之间的关系是通过UML中的类图来体现. 这篇笔记包含的不会是类图的所有东西,包含的只是各个类之间的 ...

  8. 使用Visio—UML画类图

    在一个VS工程中,由于类的个数较多,而参数描述不是特别清晰.若此工程的生命周期较长,则有必要对工程进行完整分析,给出完整的文档.需要画出类图,并对每个成员进行详细描述. 一.画出类图 在VIsio中, ...

  9. UML学习——类图(三)

    1.类图 UML类图是用来描述类.接口.协作及它们之间的关系的图.用来显示系统中各个类的静态结构. 2.类图的组成元素 类图由以下六种元素组成:类,接口,泛化关系,关联关系,依赖关系,实现关系. 3. ...

最新文章

  1. isp 图像算法(二)之dead pixel correction坏点矫正
  2. Tick技术栈之InfluxDB
  3. C++中的虚函数(virtual function)
  4. AmazeUI基本样式
  5. 我的react+material-ui之路
  6. NP、OSPF路由聚合
  7. EO CAT软件下载数据
  8. KnockoutJS 3.X API 第七章 其他技术(3) 延迟更新
  9. js输入汉字转拼音简码和五笔简码
  10. Mysql开发实践:error while loading shared libraries: libaio解决方案
  11. Qt界面刷新优化的一些心得
  12. 支持跨域的html元素
  13. 安全面试之WEB安全(一)
  14. 通过Xcode中的Packetlogger抓取iPhone蓝牙交互封包
  15. java微信机器人_GitHub - linux-china/weixin-robot-java: 微信公共平台机器人Java SDK
  16. 【安卓wechat微信导出聊天记录】
  17. 冰雪奇缘 --用爱铸就经典
  18. 正态分布与泊松分布的关系
  19. win10如何通过局域网从浏览器访问ip
  20. Watering Grass UUV 1038 贪心

热门文章

  1. 二分搜索算法(以力扣周赛“每个小孩最多分到多少糖果”为例)
  2. “逆袭”博士 3 年发 2 篇 Nature 引热议:二本本科毕业,此前研究刷新世界纪录
  3. 如何使两个div在同一行?
  4. three.js学习二
  5. 51nod 1571 最近等对 CQD分治
  6. smartbi 移动版报注册失败错误
  7. File类常用的方法以及
  8. Healthcare
  9. 『docker笔记』通过docker搭建深度学习环境
  10. Java开发环境配置/Vscode搭建