『软件工程13』浅谈面向对象方法,统一建模语言UML

浅谈面向对象方法UML

  • 一、UML的含义
  • 二、UML的主要内容
    • 1、UML的概念模型
    • 2、UML概念模型图例
  • 三、UML的基本构造块
    • 1、UML中的事物
      • (1)UML中的四种事物
      • (2)UML中各种事物的图示法
    • 2、UML中的四种关系
      • (1)依赖
      • (2)关联
      • (3)泛化
      • (4)实现
    • 3、UML中的图形(五大类十种图)
      • (1)用例图
      • (2)静态图:类图、对象图、包图
      • (3)行为图:状态图、活动图
      • (4)交互图:顺序图、协作图
      • (5)实现图:构建图、部署图
  • 四、写在最后

在下面的这篇文章中,将讲解我们平常常用的一种面向对象的画图方法,即统一建模语言UML(Unified Modeling Language)。

接下来开始进行讲解。

一、UML的含义

  • 标准的建模语言(具有语言的规范)
  • 促进沟通(各种图示表达规范)
  • 支持系统构建(正向工程,反向工程)

二、UML的主要内容

1、UML的概念模型

UML具有一个完整的概念模型,提供了一套完整、全面的表达方法,其主要元素包括:①UML的基本构造块支配这些构造块如何放在一起的规则一些运用于整个UML的公共机制

2、UML概念模型图例

UML概念模型{基本构造块{事物:结构事物、行为事物、分组事物、注释事物关系:依赖、关联、泛化、实现图:用例图、类图、对象图、包图、交互图等规则公共机制{规格说明修饰通用划分扩展机制\begin{cases} 基本构造块\begin{cases} 事物:结构事物、行为事物、分组事物、注释事物 \\ 关系:依赖、关联、泛化、实现 \\ 图:用例图、类图、对象图、包图、交互图等 \end{cases} \\ 规则 \\ 公共机制\begin{cases} 规格说明 \\ 修饰 \\ 通用划分 \\扩展机制 \end{cases} \end{cases}

下面依据概念模型中的这三大类进行一一讲解。

三、UML的基本构造块

在UML中可以将词汇划分为3中构造块,即3类词汇或基本元素:事物、关系和图。

1、UML中的事物

(1)UML中的四种事物

事物是对模型中最具有代表性的成分的抽象,可分为结构事物行为事物分组事物注释事物

1)结构事物

通常是模型的静态部分,描述概念的物理元素。主要有以下五种结构事物:

  • (class) :与面向对象方法中类的概念一致。
  • 接口 (interface) :描述了一个类或构件的一个服务的操作集。
  • 用例 (use case) :代表了一个系统功能,是对一组动作序列的描述,系统执行这些动作将产生一个对特定的参与者(即系统用户)有价值而且可观察的结果。
  • 构件 (component) :描述的是系统中的软件物理事物。
  • 节点 (node) :是在运行时存在的物理元素,表示了一种可计算的资源。

2)行为事物

行为事物主要有:状态、交互。

3)分组事物

分组事物主要有:包。

4)注释事物

注释事物主要有:注解。

(2)UML中各种事物的图示法

依据上面对四种事物的描述,下面给出UML中各种事物的图示。

UML中各种事物的图示法

2、UML中的四种关系

UML中的四种关系是:依赖、关联、泛化、实现。

(1)依赖

两个模型元素中,有一个是独立的,一个是非独立的,独立的模型元素发生改变,会影响非独立的模型元素

用带箭头的虚线来表示依赖关系。

如图所示:

依赖关系

(2)关联

关联是一种结构化的关系,指两个模型元素有联系。双向关联用一条实线来表示。

注意:关联关系有多重度,主要有: 010..10..*1..*

如图所示:

关联关系

值得注意的是,关联中有两种特殊的关联关系:组合和聚合

如果是组合和聚合类型,则再加一个棱形符号

如下图所示:

组合
聚合

(3)泛化

一般特殊的关系,也就是继承的关系。用实线加空心三角号来表示。

如图所示:

泛化关系

(4)实现

实现关系是,一种模型元素保证另外一种模型元素的执行,该关系主要用在接口中。用一条实线来表示。

如图所示:

实现关系

讲到这里,以下再给出一张完整的图来回顾这四种关系。

四种关系

3、UML中的图形(五大类十种图)

(1)用例图

1)用例图的定义

用例图从用户角度描述系统功能,并指出各功能的操作者。

用例图显示若干角色执行者 (actor) 以及这些角色与系统提供的用例之间的连接关系。用例图定义的是系统的功能需求

2)用例图的基本构成

  • 用例;
  • 角色;
  • 角色之间的关系(如果有,主要是泛化);
  • 角色和用例之间的关系(单向关联或双向关联);
  • 用例和用例之间的关系(包含、扩展、泛化)。

3)元素与元素之间的关系

include:

  • include(包含关系),当两个或多个用例中共用一组相同的动作,可以将其抽出来作为一个独立的子用例,供多个基用例所共享。
  • 基用例并非一个完整的用例,所以必须和子用例一起使用才够完整。
  • include关系在用例图中使用带箭头的虚线表示(在线上标注 <<include>> ),箭头从基用例指向子用例

extend:

  • extend(扩展关系),对基用例的扩展,基用例是一个完整的用例,即使没有子用例的参与,也可以完成一个完整的功能。
  • extend的基用例中将存在一个扩展点,只有当扩展点被激活时,子用例才会被执行。
  • extend关系在用例图中使用带箭头的虚线表示(在线上标注 <<extend>> ),箭头从子用例指向基用例

子用例和基用例的关系:

(泛化关系)子用例将继承父用例的所有结构、行为和关系。也就是说在任何使用基用例的地方都可以用子用例来代替。

(泛化关系)在用例图中使用空心的箭头表示,箭头方向从子用例指向基用例

4)图示

用例图

(2)静态图:类图、对象图、包图

1)类图

①定义: 类图(class diagram)描述系统所有涉及到的类以及类和类之间的关系。

②类图的基本构成:

  • 类(类名、属性和方法);
  • 类和类之间的关系(依赖、关联、泛化、实现)。

2)对象图

①定义: 对象图是类图的实例,几乎使用与类图完全相同的标识,但两者之间又有一定的差别,如下图例所示。

②图例:

对象图

(3)行为图:状态图、活动图

1)状态图

①定义: 状态图(state chart diagram)描述系统涉及到的某个对象的所有状态以及状态和状态之间转换的事件。

②状态图的基本构成:

  • 状态(圆角矩形);
  • 状态的起点、终点;
  • 状态之间转换的事件;
  • 注解(有时会有)。

③图例:

状态图

2)活动图

①定义: 活动图(activity diagram)描述满足用例功能需求所要进行的活动以及活动间的约束关系。

②活动图的基本构成:

  • 活动(注意符号与状态不同);
  • 活动的起点、终点(终点有时有多个);
  • 活动之间用箭头连接;
  • 判定(有时会有,棱型框);
  • 同步条(表示活动的分叉或汇合,包括水平、垂直两种);
  • 泳道(表示活动的不同职责)。

③图例:

活动图

(4)交互图:顺序图、协作图

1)顺序图

①定义: 顺序图显示对象之间的动态合作关系。。

②顺序图的基本构成:

  • 对象;
  • 生命线(对象正下方的虚线,表示对象在一段时期内的存在) ;
  • 窄矩形条(表示对象被激活,说明对象正在执行某种操作);
  • 交互的消息(有顺序之分,消息其实就是接收对象的操作方法);
  • 注解(有时会有);
  • 可以转换成协作图。

③图例:

顺序图

2)协作图

①定义: 协作图(callobaration diagram)和顺序图的作用一样,反映的也是动态协作

②协作图的基本构成:

  • 对象;
  • 实线(对象之间的连接线,注意没有箭头) ;
  • 交互的消息(有顺序之分,消息其实就是接收对象的操作方法);
  • 注解(有时会有);
  • 可以转换成顺序图。

③图例:

协作图

(5)实现图:构建图、部署图

1)构件图

**①定义:**描述代码构件的物理结构以及各构件之间的依赖关系。

②构件图的基本构成: 构件。

③图例:

构件图

2)部署图

①定义: 系统中硬件的物理体系结构。

②部署图的基本构成:

  • 三维立方体表示部件;
  • 节点名称位于立方体上部。

③图例:

部署图

四、写在最后

到这里,关于软件工程的体系知识就讲解结束啦!后面将会继续更新一些实践的内容。敬请期待!

如有需要了解软件工程相关的其他内容,可到『软件工程』栏目进行查看学习~

🙋🙋🙋

同时,有不理解或有误的地方也欢迎评论区评论或私信我交流~

  • 关注公众号 星期一研究室 ,不定期分享学习干货,学习路上不迷路~
  • 如果这篇文章对你有用,记得点个赞加个关注再走哦~

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

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

相关文章

leetcode54:螺旋矩阵

一:题目 二&#xff1a;上码 class Solution { public:vector<int> spiralOrder(vector<vector<int>>& matrix) {vector<int> ans;int startx 0,starty 0;int n matrix.size();//求出行int m matrix[0].size();//求出列int loop m/2 < n/…

查漏补缺方为上策!!两万六字总结vue的基本使用和高级特性,周边插件vuex和vue-router任你挑选

vue的基本使用和高级特性&#xff0c;周边插件vuex和vue-router一、vue的使用1、vue-cli2、基本使用&#xff08;1&#xff09;模板&#xff08;插值&#xff0c;指令&#xff09;&#xff08;2&#xff09;computed和watch&#xff08;3&#xff09;class和style&#xff08;4…

数据库单表千万行 LIKE 搜索优化手记

我们经常在数据库中使用 LIKE 操作符来完成对数据的模糊搜索&#xff0c;LIKE 操作符用于在 WHERE 子句中搜索列中的指定模式。如果需要查找客户表中所有姓氏是“张”的数据&#xff0c;可以使用下面的 SQL 语句&#xff1a;SELECT * FROM Customer WHERE Name LIKE 张%如果需要…

Mybatis第一个程序

一:整体流程 这个流程可以根据官方文档进行编写 mybatis的官方文档 二:实现 1:创建一个表 CREATE DATABASE mybatis;CREATE TABLE user(id INT NOT NULL PRIMARY KEY,name VARCHAR(30) NOT NULL DEFAULT ,pwd VARCHAR(20) NOT NULL DEFAULT )ENGINE INNODB;INSERT I…

基于.NetCore3.1系列 —— 日志记录之初识Serilog

前言对内置日志系统的整体实现进行了介绍之后&#xff0c;可以通过使用内置记录器来实现日志的输出路径。而在实际项目开发中&#xff0c;使用第三方日志框架&#xff08;如&#xff1a;Log4Net、NLog、Loggr、Serilog、Sentry 等&#xff09;来记录也是非常多的。首先一般基础…

手把手教你剖析vue响应式原理,监听数据不再迷茫

Object.defineProperty实现vue响应式原理一、组件化基础1、“很久以前”的组件化&#xff08;1&#xff09;asp jsp php 时代&#xff08;2&#xff09;nodejs2、数据驱动视图&#xff08;MVVM&#xff0c;setState&#xff09;&#xff08;1&#xff09;数据驱动视图 - Vue MV…

leetcode:203. 移除链表元素(两种方法)

一:题目 二:上码 1:方法一&#xff1a;(虚拟一个首结点) class Solution { public:ListNode* removeElements(ListNode* head, int val) {//1.虚拟一个头结点 这样就不用单独处理了ListNode * virtuals new ListNode(0);//给其开辟个空间并且赋初值virtuals->next head…

面试中的网红虚拟DOM,你知多少呢?深入解读diff算法

深入浅出虚拟DOM和diff算法一、虚拟DOM&#xff08;Vitual DOM&#xff09;1、虚拟DOM&#xff08;Vitual DOM&#xff09;和diff的关系2、真实DOM的渲染过程3、虚拟DOM是什么&#xff1f;4、解决方案 - vdom&#xff08;1&#xff09;问题引出&#xff08;2&#xff09;vdom如…

Blazor带我重玩前端(六)

本文主要讨论Blazor事件内容&#xff0c;由于blazor事件部分很多&#xff0c;所以会分成上下两篇&#xff0c;本文为第二篇。双向绑定概述如图所示当点击单项绑定的时候&#xff0c;MyOnewayComponent里的属性值会发生变化&#xff0c;这种变化是单项的&#xff0c;仅仅只是本地…

leetcode707:设计链表(增删差)

一:题目 二:上码 class MyLinkedList { public://定义链表节点结构体struct LinkedNode {int val;LinkedNode* next;LinkedNode(int val):val(val), next(nullptr){}};// 初始化链表MyLinkedList() {node new LinkedNode(0); // 这里定义的头结点 是一个虚拟头结点&#xff0…

深入探究.Net Core Configuration读取配置的优先级

前言在之前的文章.Net Core Configuration源码探究一文中我们曾解读过Configuration的工作原理&#xff0c;也.Net Core Configuration Etcd数据源一文中探讨过为Configuration自定义数据源需要哪些操作。由于Configuration配置系统也是.Net Core的核心&#xff0c;其中也包含了…

TypeScript,从0到入门带你进入类型的世界

从0到入门进入TS的世界一、什么是TypeScript&#xff1f;1、编程语言的类型2、TypeScript究竟是什么&#xff1f;二、为什么要学习TypeScript&#xff1f;1、程序更容易理解2、效率更高3、更少的错误4、非常好的包容性5、一点小缺点三、typescript入门1、如何安装TypeScript2、…

编写第一个 .NET 微服务

介绍本文的目的是&#xff1a;通过创建一个返回列表的简单服务&#xff0c;并在 Docker 容器中运行该服务&#xff0c;让您熟悉使用 .NET 创建微服务的构建过程。安装 .NET SDK要开始构建 .NET 应用程序&#xff0c;首先下载并安装 .NET Core SDK&#xff08;软件开发工具包&am…

模板编译template的背后,究竟发生了什么事?带你了解template的纸短情长

解析模板编译template的背后发生了什么一、&#x1f4d1;初识模板编译1、vue组件中使用render代替template2、模板编译总结二、✏️感受模板编译的美1、with语法&#xff08;1&#xff09;例子展示&#x1f330;&#xff08;2&#xff09;知识点归纳三、&#x1f4c8;编译模板1…

leetcode24. 两两交换链表中的节点(思路+解析)

一:题目 二:思路 思路: 1.分析题意 这是相邻结点进行交换 如果是4个结点 那么1和2交换 3和4交换 如果是3个结点 那么就1和2进行交换 3不动 2.这里我们定义一个虚拟头节点方便操作&#xff0c;我们只需三步实现结点的交换 <1>:让虚拟结点指向第二个结点(进行交换的结点我…

把Autofac玩的和java Spring一样6

大家好&#xff0c;今天来介绍我开源的一个autofac.Annotation项目 源码&#xff1a;https://github.com/yuzd/Autofac.Annotation本项目是autofa的一个扩展组件&#xff0c;autofac是一个老牌的DI容器框架 &#xff0c;支持netframework和netcoreAnnotdation是注解的意思&…

『软件测试5』测开岗只要求会黑白盒测试?NO!还要学会性能测试!

浅谈软件测试中的性能测试一、&#x1f92a;性能测试概念1、为什么要有性能测试&#xff1f;2、性能测试是什么&#xff1f;3、性能测试的目的二、&#x1f910;性能测试指标1、响应时间2、吞吐量3、并发用户数4、TPS(Transaction Per Second)5、点击率6、资源利用率三、&#…

CLR的简单理解

CLR加载程序生成进程&#xff0c;一个进程中可以存在多个线程&#xff0c;当创建一个线程时&#xff0c;会分配1Mb的空间&#xff0c;也就是线程的栈空间&#xff0c;对应jvm的虚拟机堆栈&#xff0c;是线程执行过程中用到的工作内存。这片内存用于方法传递实参&#xff0c;并存…

『软件测试6』bug一两是小事,但安全漏洞是大事!

详解软件测试中的安全测试一、&#x1f4bf;安全测试概念1、安全测试概述2、安全测试与软件生命周期的关系3、常规测试与安全测试的不同&#xff08;1&#xff09;测试目标不同&#xff08;2&#xff09;假设条件不同&#xff08;3&#xff09;思考域不同&#xff08;4&#xf…

我们真的需要JWT吗?

JWT&#xff08;JSON Web Token&#xff09;是目前最流行的认证方案之一。博客园、各种技术公众号隔三差五就会推一篇JWT相关的文章&#xff0c;真的多如牛毛。但我对JWT有点困惑&#xff0c;今天写出来跟大家探讨探讨&#xff0c;不要喷哈。JWT原理本文默认读者已经对JWT有所了…