【软件建模与设计】-02-UML图

目录

摘要

1、用例图(use case diagram)

2、类与对象

3、类图

3.1、四种关系

3.2、可见性

4、交互图

4.1、通信图

4.2、顺序图

5、状态机图

6、包图

7、并发通信图

8、部署图

9、UML扩展机制

9.1、构造型

9.2、标记值

9.3、约束


 

摘要

用例图(Use case diagram)
类图(Class diagram )

对象图(Object diagram)

通信图(Communication diagram)
顺序图(Sequence diagram)
状态机图(State Machine diagram)
活动图(Activity diagram)

组合结构图(Compositestructure diagram)
部署图(Deployment diagram)

 

1、用例图(use case diagram)

一个参与者(actor)发起一个用例(use case)。用例定义了参与者与系统之间的一组交互序列。

在用例图中,参与者用一个人形图标表示,系统用一个方框来表示,一个用例表示为方框中的一个椭圆。

通信关联(communication association)将参与者与他们参与的用例进行连接。

用例之间的关系通过包含(include)关系和扩展(extend)关系进行定义。

依赖关系:使用虚线箭头

衍型

extend :指向父类

include:指向子类

f5a1fb26903d45f2968bb587e7966a6b.png

 

2、类与对象

类(class)和对象(obiect)在UML表示法中被描绘成方框,如图2-2所示。表示类的方框总是包含类名,并且可选择性地列出类的属性(attribute)和操作(operation)。当同时描述以上三者时,方框的顶部区域放置类名,中部区域放置属性,底部区域放置操作。

为了区分类(类型)和对象(该类型的一个实例),对象名称需要带有下划线。可以在对象名和类名之间使用冒号分隔来完整地描绘一个对象,例如anObiect:Class。也可选择性地隐藏冒号和类名,仅剩下对象名,例如anObiect。另一种方式是隐藏对象名,仅在冒号后显示类名,例如:Class

bc82e7d5608b4f8d9029d7c6e3d5714b.png

3、类图

在类图中,类用方框描绘,类之间的静态(永久)关系被描绘成连接方框之间的连线。

3.1、四种关系

1)关联(association)

具备多重性,一对一、一对多、多对多

2)整体/部分关系(whole/part relationship)

组合:部分与整体具有相同生命周期,采用实心菱形

聚合:部分与整体具有独立生命周期,采用空心菱形

3)泛化/特化(generalization/specialization relationship)关系

泛化采用实心箭头,特化采用空心箭头

4)依赖关系(dependencyrelationship),经常被用来表示包之间是如何进行关联的

32d8cd41c6c942f5801a335f0b213d82.png

3.2、可见性

1)公有可见性(publicvisibility)使用+号,表示一个元素在类的外部是可见的。

2)私有可见性(private visibility)使用-号,表示一个元素只在定义它的类的内部是可见的,对于其他类是隐藏的。

3)受保护可见性(protected visibility)使用#号,表示一个元素在定义它的类及其所有子类中是可见

485818d34223404e85634721ec10fbe5.png

4、交互图

通信图和顺序图是UML的两种主要类型的交互图,它们用来描绘对象间是如何进行交互的。

在这些交互图中,对象用长方形方框表示,对象的名字不需要使用下划线标绘。

4.1、通信图

展示了合作对象间如何通过发送与接收消息进行动态的交互。

通信图描绘了交互对象的组织结构。其中,对象用方框表示,连接方框的线代表了对象间的交互。

fff57b16d5424b91a8c63f6416660abe.png

星号(*)表示一个可选的迭代,即一条消息被发送了多于一次

中括号(【】)一个可选的条件(condition)表示一条消息在满足特定条件的情况下才会被发送。

 

4.2、顺序图

循序图将对象交互通过时间序列的方式进行描绘。

顺序图具有两个维度,其中参与交互的对象被描绘在水平方向,而乖直方向代表时间维度。

从每一个对象框出发都有一条被称为生命线(lifeline)的垂直虚线。

每条生命线可以选择性地具有一个使用双实线表示的激活期(activation bar)它用来表示对象执行的时间。

参与者通常显示在页面的最左端。带有标签的水平箭头代表消息。仅有箭头连接的源对象和目标对象是相关的,消息从源对象发送到目标对象。时间从页面的顶部开始增加直至底部。另外,消息之间的间隔是不相关的。

543c2f29c0474477823d9b8938e46afb.png

 

5、状态机图

使用状态转化图表示

圆角矩形表示状态

状态图的初始状态(initial state)用一个始于小黑圆圈的弧线表示。

终结状态(final state)是可选的,它被描绘为嵌套在大白圈中的小黑圆圈

状态图可以按层次分解,将一个组合状态分解成为一组子状态。
在表示状态转换的弧线上,使用事件[条件]/动作(Event[Condition]/Action)进行标记。

事件(event)引起了状态的转换,当事件发生时,为发生转换,可选的布尔条件condition)必须为真

可选的动作(action)作为转换的结果被执行。一个状态可具有以下任意的动作::

  • 1)进入动作(entry):进入状态时执行
  • 2)退出动作(exit):退出状态时执行

9f23b7535a4849ec9346e34650fc6566.png

下图描述了一个被分解为正交区域(orthogonal region)BC和BD的组合状态B。在这种情况下状态图在同一个时刻并行进入了每一个正交区域BC和BD中。每一个正交的子状态被进一步分解为顺序的子状态。因此,当进人组合状态B时,同样进入了状态B1和B3。

ccda2ee85f1a4fc6b6029db72bca71e3.png

 

6、包图

包是一组建模元素的组合,例如代表一个系统或一个子系统。

用一个文件夹图标表示包,即在一个大长方形的角上依附一个小长方形。

包也可能被嵌套在其他包里面。依赖(dependency)和泛化/特化(generalization/specialization)是包之间可能具有的关系。

包可用于容纳类、对象或者用例。

5d92a4db10cd4426af732d1aabab1c8d.png

7、并发通信图

一个主动对象可用于描绘一个并发对象(concurrentobiect)、进程process)、线程(thread)或任务(task)。

可以用一个左右两边带有两根垂直线的方框表示一个主动对象。

1)主动对象(activeobiect)拥有自己的控制线程,并且能与其他对象并发执行。

2)被动对象(passiveobject)不具有控制线程。被动对象只在其他对象(主动或被动)调用其方法时才会执行。

10a2fc383e94407aa978b537507ea098.png

消息通信

消息接口:异步松耦合、同步紧耦合

9bfdaf08551e433789ac8f5892e22330.png

实心箭头:call 调用 、同步

普通箭头:send发送、异步

虚线箭头:返回消息

下图表示并发通信图

f4bf721d68a64ad98e3a17e6c54a113b.png

8、部署图

部署图以物理结点和结点间物理连接的方式(例如网络连接)展示了一个系统的物理配置。

一个结点使用一个立方体表示,连接则用这些立方体之间的连接线表示。

本质上,部署图是以系统结点为关注点的一种类图

dc36293065fc412889e5fa1ecdeb520b.png

9、UML扩展机制

9.1、构造型

从已有的UML建模元素中派生新的结构,使用<<>> 衍型表示。

如 <<系统>>、<<子系统>> 表示不同类的包

允许对构造的元素进行剪裁

如<<实体>>类、<<边界>>类、<<控制>>类

c6932e53435945279f89484ba91f0418.png

9.2、标记值

扩展了UML构造块的属性,从而添加新的信息

一个类可以具备多个标记值

表示形式:{ 标记=值 }

55c7c4357b35402da24c3208f32901c1.png

9.3、约束

约束指一个必须为真的条件。

如上图中实体属性中的 -balance: real { balance >= 0 } 的表示形式

 

相关推荐

  1. 统一语言UML

    2024-07-14 04:34:01       27 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-14 04:34:01       50 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-14 04:34:01       54 阅读
  3. 在Django里面运行非项目文件

    2024-07-14 04:34:01       43 阅读
  4. Python语言-面向对象

    2024-07-14 04:34:01       54 阅读

热门阅读

  1. 将获取pose 服务拆分为两个服务

    2024-07-14 04:34:01       22 阅读
  2. TCP/IP 原理、实现方式与优缺点

    2024-07-14 04:34:01       22 阅读
  3. 知识图谱数据库基本知识

    2024-07-14 04:34:01       14 阅读
  4. 【“码上”大模型简介】

    2024-07-14 04:34:01       20 阅读
  5. 在Spring Boot项目中集成分布式追踪系统

    2024-07-14 04:34:01       25 阅读
  6. 小程序中用于跳转页面的5个api是什么和区别

    2024-07-14 04:34:01       20 阅读
  7. GitHub每日最火火火项目(7.13)

    2024-07-14 04:34:01       16 阅读
  8. QTextEdit 设置宽度

    2024-07-14 04:34:01       22 阅读
  9. redis 夺命21问

    2024-07-14 04:34:01       17 阅读
  10. Gitlab介绍

    2024-07-14 04:34:01       11 阅读
  11. 变分法笔记2

    2024-07-14 04:34:01       19 阅读