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

news2024/9/25 15:29:27

目录

摘要

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 } 的表示形式

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1924018.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

log4j2的日志框架(详细,springboot和异步日志的实现)

目录 log4j2的介绍 Log4j2的性能 SpringBoot中的使用Log4j2 log4j2的进阶--异步日志 AsyncAppender方式 AsyncLogger方式 log4j2的介绍 Apache Log4j 2是对Log4j的升级版&#xff0c;参考了logback的一些优秀的设计&#xff0c;并且修复了一些问题&#xff0c;因此带 来…

韦东山嵌入式linux系列-驱动进化之路:总线设备驱动模型

1 驱动编写的 3 种方法 以 LED 驱动为例 1.1 传统写法 使用哪个引脚&#xff0c;怎么操作引脚&#xff0c;都写死在代码中。 最简单&#xff0c;不考虑扩展性&#xff0c;可以快速实现功能。 修改引脚时&#xff0c;需要重新编译。 应用程序调用open等函数最简单的方法是驱动…

ISO 45001:提升职业健康与安全管理水平的关键

在现代企业管理中&#xff0c;员工的职业健康与安全&#xff08;OH&S&#xff09;已经成为不可忽视的重要议题。ISO 45001作为国际标准化组织&#xff08;ISO&#xff09;制定的职业健康与安全管理体系标准&#xff0c;为企业提供了科学有效的管理规范和指南。实施这一标准…

C#中的反射

dll和exe文件的区别 用途&#xff1a; .exe&#xff08;可执行文件&#xff09;&#xff1a;是可以直接运行的程序文件。当你双击一个 .exe 文件或在命令行中输入它的名字&#xff0c;操作系统会加载并执行这个程序。 .dll&#xff08;动态链接库&#xff09;&#xff1a;包含…

如何在SpringCloud中使用Kafka Streams实现实时数据处理

使用Kafka Streams在Spring Cloud中实现实时数据处理可以帮助我们构建可扩展、高性能的实时数据处理应用。Kafka Streams是一个基于Kafka的流处理库&#xff0c;它可以用来处理流式数据&#xff0c;进行流式计算和转换操作。 下面将介绍如何在Spring Cloud中使用Kafka Streams实…

从零开学C++:类和对象(中)

引言&#xff1a;在我们学习了类和对象&#xff08;上&#xff09;的基础知识后&#xff0c;我们就需要进入类和对象&#xff08;中&#xff09;的学习。本篇博客将会介绍C的几个默认成员函数&#xff0c;它们的存在虽然难以理解&#xff0c;但也是C如此简单实用的原因之一。相…

C++学习指南(一)——C++入门基础

欢迎来到繁星的CSDN&#xff0c;本期内容主要包括C第一个程序&#xff0c;命名空间&#xff0c;缺省参数&#xff0c;函数重载&#xff0c;引用、inline以及nullptr这些基础概念。 在进入正题之前&#xff0c;我需要先阐述一下。本系列涉及的内容为C部分&#xff0c;可以理解为…

The Open Group 爱丁堡大会高光集锦——企业架构、人工智能和可持续发展的创新交叉点

4月底&#xff0c;The Open Group峰会在英国爱丁堡顺利举办。活动邀请到数十位领域专家、技术、论坛成员、工作组和联合组织等相聚在一起&#xff0c;围绕生态系统架构和人工智能标准、可持续性、企业架构、数字转型等话题进行了对话与探讨。大会吸引了来自30个国家的400位观众…

bi项目笔记

1.bi是什么 bi项目就是商业智能系统&#xff0c;也就是数据可视画、报表可视化系统&#xff0c;如下图的就是bi项目了 2.技术栈

Mysql数据库的备份与恢复以及索引操作

一&#xff0c;备份与恢复操作 1&#xff0c;创建数据库booksDB CREATE DATABASE booksDB; use booksDB; 2&#xff0c;建表 &#xff08;1&#xff09;创建表books CREATE TABLE books ( bk_id INT NOT NULL PRIMARY KEY, bk_title VARCHAR(50) NOT NUL…

MYSQL--第八次作业

MYSQL–第八次作业 一、备份与恢复 环境搭建&#xff1a; CREATE DATABASE booksDB; use booksDB;CREATE TABLE books ( bk_id INT NOT NULL PRIMARY KEY, bk_title VARCHAR(50) NOT NULL, copyright YEAR NOT NULL );CREATE TABLE authors ( auth_id INT NOT NULL PRI…

SpringCloud第三篇(服务中心与OpenFeign)

p 文章目录 一、服务中心二、Nacos注册中心 一、服务中心 在上一章我们实现了微服务拆分&#xff0c;并且通过Http请求实现了跨微服务的远程调用。不过这种手动发送Http请求的方式存在一些问题。 试想一下&#xff0c;假如商品微服务被调用较多&#xff0c;为了应对更高的并发…

【JavaEE】AOP实现原理

概述 Spring AOP 是基于动态代理来实现AOP的, 此处主要介绍代理模式和Spring AOP的源码剖析 一.代理模式 代理模式是一种常用的设计模式&#xff0c;它允许为其他对象提供代理&#xff0c;以控制对这个对象的访问。这种结构在不改变原始类的基础上&#xff0c;通过引入代理类…

前端的页面代码

根据老师教的前端页面的知识&#xff0c;加上我也是借鉴了老师上课所说的代码&#xff0c;马马虎虎的写出了页面。如下代码&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>Title</ti…

Gitea 仓库事件触发Jenkins远程构建

文章目录 引言I Gitea 仓库事件触发Jenkins远程构建1.1 Jenkins配置1.2 Gitea 配置引言 应用场景:项目部署 I Gitea 仓库事件触发Jenkins远程构建 Gitea支持用于仓库事件的Webhooks 1.1 Jenkins配置 高版本Jenkins需要关闭跨域限制和开启匿名用户访问 在Jenkins启动前加入…

微前端基础知识

1. 前言 随着Web应用程序规模的日益扩大和复杂性的增加&#xff0c;传统的前端开发模式逐渐显现出其在维护、扩展以及团队协作方面的局限性。微前端作为一种新兴的前端架构模式&#xff0c;正是为了应对这些挑战而诞生的。 微前端&#xff08;Micro-Frontends&#xff09;并没有…

matine组件库踩坑日记 --- react

Mantine实践 一 禁忌核心css样式二 添加轮播图扩展组件 一 禁忌核心css样式 import React from react import ReactDOM from react-dom/client import { BrowserRouter } from react-router-dom; import App from ./App.jsx import ./index.css import mantine/core/styles.cs…

收银系统源码-会员功能

随着新零售时代不断更新迭代&#xff0c;私域会员已经成为很多连锁门店必要的选择。自然离开不了一套能高效管理会员的收银系统。今天给大家推荐一下&#xff0c;智慧新零售收银系统的会员功能。 了解更多查看下文&#xff1a; 门店收银系统源码-CSDN博客文章浏览阅读2.6k次&…

开源项目:机遇与挑战共存的创新之路

开源项目&#xff1a;机遇与挑战共存的创新之路 开源&#xff08;Open Source&#xff0c;开放源码&#xff09;被非盈利软件组织&#xff08;美国的Open Source Initiative协会&#xff09;注册为认证标记&#xff0c;并对其进行了正式的定义&#xff0c;用于描述那些源码可以…

倒计时 2 周!CommunityOverCode Asia 2024 IoT Community 专题部分

CommunityOverCode 是 Apache 软件基金会&#xff08;ASF&#xff09;的官方全球系列大会&#xff0c;其前身为 ApacheCon。自 1998 年以来&#xff0c;在 ASF 成立之前&#xff0c;ApacheCon 已经吸引了各个层次的参与者&#xff0c;在 300 多个 Apache 项目及其不同的社区中探…