软件工程之UML建模

  从公众号转载,关注微信公众号掌握更多技术动态

---------------------------------------------------------------

一、建模基础

1.建模的底层逻辑

用一个公式表达建模的底层逻辑:建模 = 图形 + 逻辑 + 现实的抽象,用一句概括即是用图形逻辑地表达现实业务的抽象

(1)图形

图形即为UML图形,下面是6种对象间的关联图形,在建模中尽量遵循UML标准画图,方便大家理解。

  • 继承:子类继承父类的特性,有的语言仅支持单继承。

  • 实现:子类实现父类定义的接口。

  • 组合:一个类包含另外的类,但它强调的是一种强关联关系。

  • 聚合:也是表达一个类包含另外的类,但它的关联关系比组合要弱。

  • 关联:通过一个类可以关联到另外一个类,可分为单向关联和双向关联,一般以类的成员变量体现。

  • 依赖:比较弱的一类关联关系,一般是以接口参数的形式体现。

(2)现实的抽象

我们的现实业务有的是非常复杂的,如果涉及到专业领域概念,新手想入门是挺难的,当我们不清楚业务链路和逻辑时,直接看代码实现时很难有全局的视野,不能够串起全局业务间的内在联系。

当我们切入到一个新领域中,并非短时间内就要成为该领域的专家,急需一种方法用20%的时间能够掌握该领域80%的业务知识,一个可行的方法就是建模,通过对现实业务进行抽象,构建出全局业务概念模型,有了全局的认识,再去了解业务细节就会快得多。我们要建模的对象即是问题域,我们并不需要覆盖所有的点,而是基于核心的内容进行建模,Eric Evans 在建模书中提到一个观点:建模是出于某种目的而概括地反映现实,这里的概括就是抓住核心的意思。

现实的抽象有三层意思:一类是直接映射,比如现实有一个杯子,那么我们的模型中就有一个杯子;另一类是往上抽象一层映射,比如我们的组织中有一级结构、二级结构、三级结构等,那我们可以抽象成组合结构,形成父子节点的结构,这种抽象就更灵活了;最后一类是隐性抽象,前面两类抽象比较容易做到,最难的是隐性概念抽象,它很大可能是之前不存在的,需要新造出一个概念,就像软件设计中,通过新增加一层来实现解耦一样,通过新造的概念串联元素间的内在关联关系

(3)逻辑

逻辑即为因果,也即元素之间存在某种关系,如果两个完全没有关系的元素放在一些,就会显得前因不达后果、风马牛不相及,让人不好理解。那么对应到建模上,我们的模型应该是非常具有逻辑性的,从模型上能看出业务核心要素,要素与要素之间的关系是怎样的。

逻辑主要体现在时空两个维度上:时间维度,一件事情节点完成之后,会影响后续的事情节点;空间维度,更多的体现在结构上,我们常说的空间结构就是这个意思。以时间维度为例,在电商结算中,当订单支付成功后,结算收单,收单后接受到放款的执行指令,在放款之前需要计算出放款明细信息,如卖家应收到多少钱、公司应收到多少佣金等,最后是打款转账,这个过程就是按照时间节点不断往后驱动,可抽象出如下图的模型。

空间维度即是结构关系,比如下图中的组织结构,像这样的结构类型,我们还可以找到更多的实际案例,比如交易订单有主子订单结构,执行单包含多个执行明细信息,模型最终呈现出来的就是一个结构,从结构维度也可以将其分解出更小的粒度。

不管哪种建模的方法,最根本的还是体现出了建模的逻辑性,用例建模的逻辑性体现在能够清晰地定义出用例场景,把所需要做的事讲清楚;四色建模通过人、事、物、时间、地点维度描述清楚一件事;事件风暴通过时间轴勾画出核心关键的事件。当我们构建不出模型时,并不是我们缺少建模的方法,而是建模的逻辑性上有问题,建模缺的不是方法而是经验和实践。我们不能神化建模,建模是很纯粹的,就是为了简化对复杂事物的认识,并且模型能够映射到实际开发的模型中。

2.建模的方法

因果法的本质同事件风暴建模一样的,在用熟的基础上按照自己的习惯进行运用,不管什么方法,只有内化成自己的方法才有用。它的核心是基于一个对象不断往前和往后找因果关联对象,最终构建出完整的业务概念模型。

二、UML简介

1.什么是UML

UML(Unified Modeling Language)的是要成为一种标准的统一语言,使得IT专业人员能够进行计算机应用程序的建模。UML成为"标准"建模语言的原因之一在于,它与程序设计语言无关。而且,UML符号集只是一种语言而不是一种方法学。因为语言与方法学不同,它可以在不做任何更改的情况下很容易地适应任何公司的业务运作方式。

2.用例图(UseCaseDiagram)

从用户角度描述系统功能,并指各功能的操作者;主要用来描述用户、需求、系统功能单元之间的关系。它展示了一个外部用户能够观察到的系统功能模型图。

  • 描述方式:椭圆表示某个用例;人形符号表示角色。

  • 目的:帮助开发团队以一种可视化的方式理解系统的功能需求,建立需求模型。

3.静态图

主要描述系统的静态表示和关系。

(1)类图(ClassDiagram)

描述系统中类的静态结构。是显示了一组类、接口、协作以及他们之间的关系。在UML中问题域最终要被逐步转化,通过类来建模,通过编程语言构建这些类从而实现系统。描述方式:三个矩形 

在UML类图中,常见的有以下几种关系: 泛化(Generalization),  实现(Realization),关联(Association),聚合(Aggregation),组合(Composition),依赖(Dependency)

(2)包图(PackageDiagram)

是包和类组成的,表示包与包之间的关系,包图描述系统的分层结构。

(3)对象图(ObjectDiagram)

类图的一个实例,描述系统在具体时间点上所包含的对象以及各个对象的关系

4.行为图

描述系统动态模型和对象组成的交换关系。

(1)活动图(ActiveDiagram)

描述了业务实现用例的工作流程。一种特殊的状态图,展现了系统内一个活动到另一个活动的流程。活动图有利于识别并行活动。表示两个或多个对象之间在处理某个活动时的过程控制流程。

【描述方式】 

  • 起始点:实心圆 

  • 活动:圆角矩形 

  • 终止点:内部包含实心圆的圆 

  • 泳道:实际执行活动的对象

(2)状态图(StateDiagram)

是描述状态到状态控制流,常用于动态特性建模,由状态、转换、事件和活动组成,描述类的对象所有可能的状态以及事件发生时的转移条件。通常状态图是对类图的补充,仅需为那些有多个状态的、行为随外界环境而改变的类画状态图。表示某个类所处的不同状态以及该类在这些状态中的转换过程

【描述方式】 

  • 起始点:实心圆 

  • 状态之间的转换:使用开箭头的线段 

  • 状态:圆角矩形 

  • 判断点:空心圆 

  • 一个或多个终止点:内部包含实心圆的圆

(3)数据流图

数据流图(Data Flow Diagram, DFD)是一种便于用户理解和分析系统数据流程的图形工具,他摆脱了系统和具体内容,精确的在逻辑上描述系统的功能、输入、输出和数据存储等,是系统逻辑模型的重要组成部分

  • 数据流:是由一组固定成分的数据组成,表示数据的流向,除了流向数据存储或从数据存储流出的数据不必命名外,每个数据流必须要有一个合适的名字,以反映该数据流的含义

  • 加工:加工描述了输入数据流到输出数据之间的变换,也就是输入数据流经过什么处理后变成了输出数据

  • 数据存储:数据存储表示暂时存储的数据,每个数据存储都有一个名字

  • 外部实体:外部实体是存在于软件系统之外的人员或组织


5.交互图

用于描述对象间的交互关系,由一组对象和它们之间的关系组成,包含它们之间可能传递的消息。

(1)顺序图/序列图(SequenceDiagram)

描述对象之间的交互顺序,着重体现对象间消息传递的时间顺序

  • 描述方式:横跨图的顶部,每个框表示每个类的实例或对象;类实例名称和类名称使用冒号分开

  • 目的:显示流程中不同对象之间的调用关系,还可以显示不同对象的不同调用。

(2)协作图(CollaborationDiagram)

描述对象之间的协助关系

6.实现图

就是指示如何组织构件和具体的构件部署到具体的节点上。

(1)组件图(ComponentDiagram)

展现了一组组件的物理结构和组件之间的依赖关系。部件图有助于分析和理解组件之间的相互影响程度。提供系统的物理视图,根据系统的代码构件显示系统代码的整个物理结构

(2)部署图(DeploymentDiagram)

展现了运行处理节点以及其中的组件的配置。部署图给出了系统的体系结构和静态实施视图。它与组件图相关,通常一个节点包含一个或多个构建。显示系统的硬件和软件的物理结构

【描述方式】 

  • 三维立方体表示部件 

  • 节点名称位于立方体上部

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

一张图理解接口测试框架

测试框架先向测试数据库中插入测试数据(如:name”Tom“) 调用被测系统提供的接口(传参:name”Tom“) 从测试数据库中查到符合参数的数据 将查询到的数据组成Json格式,并返回给测试框架 提供…

添加新公司代码的配置步骤-Part4

原文地址:配置公司代码 概述 这是一系列讨论和列出向系统添加新公司代码时必须完成的事务的四篇博客中的最​​后一篇。以下是这四个文档涵盖的主题列表: 企业结构 - 第 1 部分 FI 配置 – 第 2 部分 SD 配置 – 第 3 部分 物流 – 概述 – 第 3 部分…

SpringBoot集成系列--ElasticJob

文章目录 一、集成步骤1、添加 ElasticJob 的依赖2、配置 ElasticJob3、定义Job 二、ElasticJob-UI三、Elastic-Job分片理解四、原理 一、集成步骤 1、添加 ElasticJob 的依赖 引入相关依赖到pom.xml <!-- Elastic-Job --> <dependency><groupId>org.apac…

随笔-这都是命吗

我与鹏哥、小付有个小群&#xff0c;前几天&#xff0c;鹏哥在群里发了一个图&#xff0c;是他那个城市准备扶持的高新产业&#xff0c;有元宇宙、量子信息、生物制药、人工智能什么的。 先前的时候鹏哥给我说过&#xff0c;当地准备了六百多亩地&#xff0c;准备发展高新产业…

模块化机房在大数据时代的角色:高效、可扩展的数据存储和处理平台

随着大数据时代的到来&#xff0c;数据已经成为企业竞争的核心资源。然而&#xff0c;传统的数据中心已经无法满足现代业务的需求&#xff0c;尤其是在数据存储和处理方面。模块化机房作为一种新型的数据中心建设模式&#xff0c;具有高效、可扩展等优势&#xff0c;逐渐成为大…

linux加速访问github的方法(2023.12.2)

本文通过修改hosts文件的方法实现加速访问github 本文查询的GitHub域名映射的ip地址时间为2023.12.2&#xff0c;建议大家先查询域名对应的IP是否有变化 查询方法 进入网址&#xff1a;IP/IPv6查询&#xff0c;服务器地址查询 - 站长工具快速查询用户的IP和浏览器、操作系统…

【Hung-Yi Lee】强化学习笔记

文章目录 What is RLPolicy GradientPolicy Gradient实际是怎么做的On-policy v.s. Off-policyExploration配音大师 Actor-Critic训练value function的方式网络设计DQN Reward ShapingNo Reward&#xff1a;Learning from Demonstration What is RL 定义一个策略网络&#xff0…

一则广告,一个故事,这就我选择学习计算机专业的两个原因

还记得当初自己为什么选择计算机&#xff1f; 现在回想起来&#xff0c;当初驱使自己选择学习计算机专业的原因&#xff0c;一共有两个&#xff1a; 一、一则长城电脑的广告。 上个世纪80年代&#xff0c;我还在读小学&#xff0c;当时在中央电视台上经常播放着的长城电脑的一则…

二十一章(网络通信)

计算机网络实现了多台计算机间的互联&#xff0c;使得它们彼此之间能够进行数据交流。网络应用程序就是在已连接的不同计算机上运行的程序&#xff0c;这些程序借助于网络协议&#xff0c;相互之间可以交换数据。编写网络应用程序前&#xff0c;首先必须明确所要使用的网络协议…

05 硬件知识入门(三极管)

1 三极管简介 三极管又称晶体三极管&#xff0c;是一种具有放大功能的半导体器件。图6-1&#xff08;a&#xff09;所示是一些 常见的三极管实物外形&#xff0c;三极管的图形符号如图6-1&#xff08;b&#xff09;所示。 1. 三极管引脚的基本介绍 三极管通常有三个引脚&…

二叉树的层平均值[中等]

优质博文&#xff1a;IT-BLOG-CN 一、题目 给定一个非空二叉树的根节点 root , 以数组的形式返回每一层节点的平均值。与实际答案相差 10-5 以内的答案可以被接受。 示例 1&#xff1a; 输入&#xff1a;root [3,9,20,null,null,15,7] 输出&#xff1a;[3.00000,14.50000,1…

postman实现接口自动化图解步骤,测试用例集,断言,动态参数,全局变量的随笔记录

实现接口自动化的方式有很多种&#xff0c;requests unittest ddt 的接口自动化框架有些朋友也有接触&#xff0c;但是考虑到很多没有代码基础&#xff0c;且这种框架实现需要的时间周期比较长&#xff0c;但是大多数公司的项目时间并不充裕。 这篇随笔主要就是记录实现效率…

如何解决5G基站高能耗问题?

安科瑞 须静燕 截至2023年10月&#xff0c;我国5G基站总数达321.5万个&#xff0c;占全国通信基站总数的28.1%。然而&#xff0c;随着5G基站数量的快速增长&#xff0c;基站的能耗问题也逐渐日益凸显&#xff0c;基站的用电给运营商带来了巨大的电费开支压力&#xff0c;降低5…

网络机房的功能有哪些?

网络机房的功能主要包括&#xff1a; 信息存储和管理&#xff1a;机房作为信息系统的核心&#xff0c;需要提供可靠的存储和管理能力&#xff0c;包括服务器、存储设备、备份系统等硬件设备&#xff0c;以及数据备份、数据迁移、容灾等管理方法和技术。网络连接和通信&#xf…

202350读书笔记|《再别康桥:徐志摩诗选》——微风起,清芬酝藉,不减荼

202350读书笔记|《再别康桥&#xff1a;徐志摩诗选》——微风起&#xff0c;清芬酝藉&#xff0c;不减荼 《再别康桥&#xff1a;徐志摩诗选》我觉得有时候诗人是很狂热的&#xff0c;上头的感觉。 有几首很喜欢&#xff0c;节选如下&#xff1a; 偶然 我是天空里的一片云&…

代码随想录算法训练营第44天| 完全背包 518. 零钱兑换 II 377. 组合总和 Ⅳ

JAVA代码编写 52. 携带研究材料 题目描述 小明是一位科学家&#xff0c;他需要参加一场重要的国际科学大会&#xff0c;以展示自己的最新研究成果。他需要带一些研究材料&#xff0c;但是他的行李箱空间有限。这些研究材料包括实验设备、文献资料和实验样本等等&#xff0c;…

matplot函数调整子图大小测试

调整subplot()函数的子图间距 import numpy as np import matplotlib.pyplot as plt for i in range(1,7):figsize 10,6plt.subplot(2,3,i)plt.text(0.5,0.5,str((2,3,i)),fontsize18,hacenter) **plt.subplots_adjust(hspace3.3, wspace0.3)** plt.show()import numpy as np…

结构体精讲2

老铁们&#xff0c;有没有坚持每天敲代码呢&#xff1f;坚持做一件事确实很难&#xff0c;但还是要坚定一点咯&#xff01; 接下来我们接着上一期的知识进行讲解&#xff01; 结构体传参 那么对于上述的 print1 和 print2 函数哪个好些&#xff1f; 那么首选是我们的pri…

基于 Flink CDC 构建 MySQL 的 Streaming ETL to MySQL

简介 CDC 的全称是 Change Data Capture &#xff0c;在广义的概念上&#xff0c;只要是能捕获数据变更的技术&#xff0c;我们都可以称之为 CDC 。目前通常描述的 CDC 技术主要面向数据库的变更&#xff0c;是一种用于捕获数据库中数据变更的技术。CDC 技术的应用场景非常广泛…

探索SpringBoot发展历程

✅作者简介&#xff1a;大家好&#xff0c;我是Leo&#xff0c;热爱Java后端开发者&#xff0c;一个想要与大家共同进步的男人&#x1f609;&#x1f609; &#x1f34e;个人主页&#xff1a;Leo的博客 &#x1f49e;当前专栏&#xff1a; 循序渐进学SpringBoot ✨特色专栏&…