软件工程之UML建模

news2024/11/27 11:29:57

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

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

一、建模基础

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)

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

【描述方式】 

  • 三维立方体表示部件 

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

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

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

相关文章

智慧园区可视化综合管理平台建设方案,智能化、数字化才是关键

园区作为城市的基本单元,是经济发展的重要载体。随着我国经济的快速发展,各类工业园区、办公园区等园区的规划建设也越来越多。伴随着互联网新兴技术的发展和应用,智慧园区已成为当今城市规划和社会发展的关注焦点,今天我们来介绍…

【AIGC】Midjourney的使用技巧

Midjourney介绍 《Midjourney》是一款2022年3月面世的AI绘画工具,创始人是David Holz。只要输入想到的文字,就能通过人工智能产出相对应的图片,耗时只有大约一分钟。 Midjourney依托于Discord社区平台对外提供服务。使用前需要准备好飞机。…

ROS小练习——参数设置

目录 一、参数名获取 二、参数修改 1、代码修改 C python 2、命令行修改 3、启动时修改 4、launch文件传参修改 一、参数名获取 rosparam list 二、参数修改 1、代码修改 C #include "ros/ros.h"int main(int argc, char *argv[]) {ros::init(argc,argv,…

文心一言大模型应用开发入门

本文重点介绍百度智能云平台、文心一言、千帆大模型平台的基本使用与接入流程及其详细步骤。 注册文心一言 请登录文心一言官方网站 https://yiyan.baidu.com/welcome 点击登录;图示如下: 请注册文心一言账号并点击登录,图示如下&#xff1…

【WPF.NET开发】WPF中的窗口

目录 1、窗口类 2、实现窗口 2.1 为 MSBuild 配置窗口 3、窗口生存期 3.1 打开窗口 3.2 窗口激活 3.3 关闭窗口 3.4 窗口生存期事件 4、窗口位置 4.1 最顶层窗口和 z 顺序 5、窗口大小 6、大小调整属性的优先级顺序 7、窗口状态 8、窗口外观 8.1 重设大小模式 …

HeyGen推出Avatar2.0:AI视频翻译工具引领虚拟分身创作新时代

在数字创意领域迈向新的里程碑,HeyGen公司正式推出了Avatar2.0,这是一款令人惊叹的AI视频翻译工具,仅需短短5分钟,用户即可在手机上打造一个逼真的虚拟分身。HeyGen的这一最新创新标志着他们在多模态内容生成领域的持续引领地位&a…

Ubuntu18安装(重启黑屏问题)

1. F10 进入bios,选择u盘里的ubuntu镜像 2.进入使用ubuntu,下载 3.重启,esc 4.ubuntu 安e进入 5. nomodeset() F10 保存启动 6. 7.没有网 手机usb提供网络 下载有限网卡驱动

什么牌子的开放式耳机好用?手把手教你选,小白必看!

开放式耳机大揭秘,小白也能秒变发烧友,在这个喧嚣的音乐世界,究竟哪个牌子的开放式耳机好用?戴着这个问题我会手把手教你如何挑选,不仅仅是推荐,还会详细解析各个品牌的特色,让你在挑选的过程中…

从 ByteHouse 网关,看如何进一步提升 OLAP 引擎性能

更多技术交流、求职机会,欢迎关注字节跳动数据平台微信公众号,回复【1】进入官方交流群 随着数字化转型的加速,企业面临着海量数据收集、处理和分析挑战。ClickHouse因其分析速度快、高性能的特点,被开发者广泛使用。 作为连接客户…

R语言手册30分钟上手

文章目录 1. 环境&安装1.1. rstudio保存工作空间 2. 创建数据集2.1. 数据集概念2.2. 向量、矩阵2.3. 数据框2.3.1. 创建数据框2.3.2. 创建新变量2.3.3. 变量的重编码2.3.4. 列重命名2.3.5. 缺失值2.3.6. 日期值2.3.7. 数据框排序2.3.8. 数据框合并(合并沪深300和中证500收盘…

河南诗词大会规则和流程

河南省诗词大赛是一场充满诗意的盛会,分为小学组、中学组和社会组。流程包括四个环节:“大浪淘沙” 、“月宫折桂” 、“飞花令”和“诗画南阳”。 比赛前两轮为“大浪淘沙”和“月宫折桂”环节,所有赛手采用平板现场答题,时间为2…

安科瑞智慧型动态无功补偿的工业应用—— 以江苏某陶瓷生产企业配电房改造为例

安科瑞电气股份有限公司 摘 要:低压配电系统的无功补偿是电能质量治理的重要环节。在传统无功补偿中,响应速度较慢,补偿电流呈阶梯式,存在过补或欠补的现象,有时未必能到达理想的效果。为了解决这一问题,…

软件测试工程师基本要求的经验之谈

作为一位从事软件测试行业三年左右的初级测试工程师,下面给大家分享一些日常工作中的一些经验哈,专业大佬勿喷哈~ 首先,何为软件测试。软件测试顾名思义,就是测试软件系统的功能、性能,尽可能多的发现其中存在的问题&…

代码随想录算法训练营 ---第五十七天

今天是两道动态规划的经典题目。 第一题: 简介: 做了今天的题目我有了新的理解,我觉得过去我过于注重对于二维数组的理解,忽略了对dp数组i 和 j 的含义的理解。 动态规划五部曲: 1.确定dp数组的含义 本题我们将i …

MES管理系统提升车间数字化的五个关键功能模块

随着科技不断进步,生产管理信息系统也越来越智能化。其中,MES管理系统是生产管理领域中广泛应用的系统之一。通过实时数据采集、监控、分析和控制,MES管理系统能够给协助企业实现生产过程的可视化、标准化和优化,从而提高生产效率…

制作一个RISC-V的操作系统五-RISC-V汇编语言编程三

文章目录 分析code/asm/add中的makefile相关命令 算数运算指令addadd2sub 练习5-1 分析code/asm/add中的makefile makefile EXEC testSRC ${EXEC}.sGDBINIT ../gdbinitinclude ../rule.mk很明显还要去执行rule.mk rule.mk include ../../common.mk.DEFAULT_GOAL : all a…

微信小程序中生命周期钩子函数

微信小程序 App 的生命周期钩子函数有以下 7 个: onLaunch(options):当小程序初始化完成时,会触发 onLaunch(全局只触发一次)。onShow(options):当小程序启动或从后台进入前台显示时,会触发 on…

Numpy 实现ID3决策树

Numpy 实现ID3决策树 # 定义节点类 二叉树 class Node:def __init__(self, rootTrue, labelNone, feature_nameNone, featureNone):self.root rootself.label labelself.feature_name feature_nameself.feature featureself.tree {}self.result {label:: self.label,fea…

Python第三次练习

Python 一、如何判断一个字符串是否是另一个字符串的子串二、如何验证一个字符串中的每一个字符均在另一个字符串中出现三、如何判定一个字符串中既有数字又有字母四、做一个注册登录系统 一、如何判断一个字符串是否是另一个字符串的子串 实现代码: string1 inp…

Java随记

Java java保留两位小数 1、使用String.format()方法: public static void stringFormatdecimalFormatKeepTwoDecimalPlaces(){double number 3.1415926;String result String.format("%.2f", number);System.out.println(result);}输出:3…