从理论到实践掌握UML

news2024/11/19 14:29:05

统一建模语言(UML)是软件工程师用来设计软件系统的一种工具,就像是一套图形化的说明书。它让开发团队能够以图形化的方式来理解、设计和开发软件系统,比起用文字来描述,更加直观易懂。本文通过UML实例化的理论和实践相合,以电商系统为例,演示如何将UML实例化应用于实际项目中。无论您是软件工程师、系统分析师还是对软件开发感兴趣的学习者,希望有助于大家深入了解如何将UML应用于解决实际的软件工程问题。

一.UML 基础概念

1.类和对象

理解类和对象的概念是学习面向对象编程(OOP)和面向对象建模(OOM)的基础。

(1).类和对象的概念

类是对具有共同属性和行为的对象进行抽象定义。如商品类可以定义名称、价格、描述等共同属性,以及查看、添加到购物车等共同行为。每个具体的商品实例都是商品类的一个实例,比如一台手机、一本书等。

  • 对象

对象代表了系统中的一个实体,它是属性和行为的结合体。对象不仅包含属性,还包含了可以对这些属性进行操作的行为。举例来说,如果我们考虑一个电商系统,每个具体的商品、用户、订单等都可以作为一个对象。商品的名称、价格、描述等这些就是对象属性,商品可以查看、添加到购物车等这些就是行为。因此,对象实际上是属性和行为的组合,它能够记录操作的结果并且执行特定的行为。

(2).类的属性、方法(行为)

属性是描述对象特征的数据,也称为成员变量或实例变量。它们定义了对象的状态。方法(行为)是对象能够执行的操作,用于改变对象的状态或执行特定的功能。它们定义了对象的行为。如:

  • 用户类

    **属性:**用户类的属性可以包括用户名、密码、邮箱等。

    **方法:**用户类的方法可以包括注册、登录等。

  • 商品类

    **属性:**商品类的属性可以包括商品名称、价格、库存等。

    **方法:**商品类的方法可以包括添加到购物车、购买等。

  • 订单类

    **属性:**订单类的属性可以包括订单号、用户、总量、总价、状态
    等。

    **方法:**订单类的方法可以包括支付、取消、发货等。

2.类之间的关系

(1).关联关系

关联关系描述了两个或多个对象之间的联系。在关联关系中,每个对象都保留自己的生命周期,它们之间的关系可以是一对一、一对多或多对多。关联关系是最常见的关系类型之一。

如在电商系统中,订单类与用户类之间存在关联关系。一个订单被创建时,通常会指定一个用户作为订单的拥有者,因此订单类将会与用户类相关联。

表示元素:箭头连接两个类,箭头上标注的文字描述关联的性质,如 “has-a”、“uses” 等。

(2).聚合关系

聚合关系表示一种整体与部分之间的关系,即一个对象包含另一个对象,但它们之间不是强依赖关系,即便整体对象不存在,部分对象仍然可以存在。聚合关系通常用“整体-部分”的形式来表示。

如在电商系统中,购物车类与商品类之间存在聚合关系。购物车包含了多个商品,但商品可以独立存在,即使购物车被销毁,商品也可以继续存在。

表示元素:一个空心菱形连接到整体类的一端,箭头指向部分类。

(3).组合关系

组合关系是一种更强的聚合关系,表示整体对象拥有部分对象,并且整体对象的生命周期决定了部分对象的生命周期。如果整体对象被销毁,部分对象也会被销毁。组合关系通常用“整体-部分”的形式来表示,并且部分对象的创建和销毁由整体对象管理。

如在电商系统中,订单类与订单项类之间存在组合关系。订单项是订单的一部分,它们只存在于订单的上下文中。如果订单被取消或删除,订单项也会被销毁。

表示元素:一个实心菱形连接到整体类的一端,箭头指向部分类。

(4).依赖关系

依赖关系表示一个类(或模块)在其实现中使用了另一个类(或模块)的功能或服务。在软件设计中,这种依赖通常表现为一个类的方法中使用了另一个类的对象。

如在电商系统中,订单服务类可能需要使用用户服务类来获取用户信息。订单服务在执行订单处理时需要根据用户信息进行一些操作,比如验证用户身份或获取配送地址。因此,订单服务类依赖于用户服务类。

表示元素:通常用箭头从依赖者指向被依赖者。

(5).继承关系(泛化关系)

继承关系(泛化关系)是面向对象设计中的一种关系,用于表示类之间的继承关系。在泛化关系中,一个类(子类)可以继承另一个类(父类)的属性和方法,并且可以在此基础上添加新的属性和方法。

在电商系统中,泛化关系可以用来表示不同类型商品之间的继承关系。例如,有普通商品、电子商品和服装商品等不同类型的商品,它们都具有一些共同的属性和方法,比如商品名称和价格。因此,可以定义一个通用的商品类作为父类,然后具体的商品类型类可以继承这个通用的商品类。

表示元素:通常用一个空心的三角箭头从子类指向父类来表示。

(6).实现关系

实现关系表示一个类实现了一个接口或抽象类,从而承诺要实现接口或抽象类中定义的所有方法。这种关系通常用于定义类与类之间的协议或契约,以确保类能够提供特定的行为。

可以使用实现关系来定义各种服务类与接口之间的关系。例如,可以有一个支付服务接口,定义了各种支付方式应该具有的方法,比如支付、退款等。然后具体的支付服务类可以实现这个接口,以提供不同支付方式的具体实现。

表示元素:通常用一个空心三角箭头从实现类指向接口来表示。

二.UML 建模

1.UML 图形

在 UML 中,有多种图形表示方式用于不同的建模目的。以下是常见的 UML 图形表示方式。

Visio 中可用的 UML 关系图分为两类关系图:行为图和结构图。

2.应用场景

3.UML 工具

(1).绘图工具:掌握使用 UML 绘图工具,如 Visio、Lucidchart、StarUML 等,进行 UML 图的绘制和编辑。本文使用的Microsoft Visio 专业版 2019以例。

(2).启动 Visio。 或者,如果已打开文件,请单击“ 文件 > 新建”。

(3). 转到 “类别 > 软件和数据库 > UML 组件”,就可以根据需要选择要绘制的图型,进行建模。如下图:

三. UML建模实例

1.功能需求描述

实现电商系统的消费者购物功能,需要包括如下内容:

(1). 参与者(消费者):游客、会员;

(2). 活动过程:搜索、添加购物车、下单、付款;

(31). 其中:搜索又可以按价格、品牌等条件进行扩展筛选;付款可以通过支付宝、微信或网上银行等方式。

2.UML建模

根据上述需求,绘制常用的UML图形。

(1).用例图

  • 用于描述系统的功能需求和用户之间的交互。就像是系统的用户手册,如描述了系统的各种功能和用户如何与系统进行交互。在开发项目的早期阶段,使用用例关系图来描述实际活动和动机。 可以在后续阶段优化关系图,以反映用户界面和设计详细信息。
  • 理解主要元素符号:

  • 绘制流程

    明确系统范围。

    有什么角色,角色与角色之间关系

    有什么用例,角色与用例之间关系,用例的子用例及扩展。

如上述要求可以包括搜索商品、添加到购物车、下单、支付等功能,每个功能都是一个用例,用箭头表示用户和系统之间的交互流程。

从用例图中可以非常清晰的看到:

  • 包括了游客、会员两种参与者(消费者);
  • 电商系统的前端选购的四个过程;
  • 按条件进行搜索,这是对搜索功能的扩展,而不同的条件是筛选搜索的泛化;
  • 付款包含了支付宝、微信、银行卡三种方式;

上图清晰并简洁的描述了用户、需求和系统主要功能之间的关系,这便是用例图最大的优点。

(2).活动图

  • 活动图强调了用例中各项活动之间的约束关系及其控制流程,说白了活动图用于展示系统中一个功能(用例)的操作步骤。活动图类似于流程图。 控制流通过完成系统中的操作 (或 活动) 触发。 流可以是顺序流、并发流或分支流,由泳道、分支和联接等形状指示。使用活动图描述如何协调多个活动来提供服务或其他最终结果。 活动图可以显示用例中的事件如何相互关联,或者用例集合如何协调以表示业务工作流。
  • 理解主要元素符号:
  • 绘制流程

    明确该流程要表达怎么样的业务目的?

    该流程有什么角色?

    画出正常情况下的流程,是流程的主干,一般是线性的流程。

    明确主干流程中的角色与活动

    逐步增加分支流程,将关键的流程分支画出,部分异常流程可简单画出并用文字说明

    适当控制活动粒度

    优化流程

如上述需求可以使用活动图进行类似如下的绘图:

从图中可以清晰的看到,用户从登录到购物结束的整个活动过程,并能看到每个活动所对应的对象,这在业务流程梳理环节能带来很大的帮助。

(3).顺序图(序列图)

  • 顺序图通过引入时间的概念,展示了用例中各个对象的行为顺序以及对象之间的消息交互过程,所以顺序图也叫做时序图。
  • 理解主要元素符号:

  • 绘制流程

    针对某一条流程中分析各角色的交互方式时先分析有哪些角色参与这个流程

    分析各角色在这个流程中的职责,各角色的专业特色

    将流程分解为角色与角色之间的交互,想清楚各角色之间的“接口”是怎样的

    用顺序图按照时间顺序将“交互”动作组织起来

    适当控制好粒度,不断优化和重组。有太复杂分支机构的流程不适用。

如上述需求可以使用顺序图进行类似如下的绘图:

从上图可以清晰的看到随着时间变化,用户与用例中其他对象的消息交互顺序,这可以提供了更加简洁有效的沟通方式。

(4).类图

  • 类图是用于描述系统/产品结构化设计的静态图形,显示了类、类的方法、类的接口以及它们之间静态结构和关系。
  • 理解主要元素符号:

  • 绘制流程

    识别类,先记下类的名称

    识别出类的主要属性、操作

    描绘出类之间的关系

    对各类进行分析、抽象、整理

如下所示:

(5).组件图

  • 组件图用于描述系统中的组件及其之间的依赖关系。组件图显示了软件系统的物理组织结构,包括组件、接口、依赖关系等,有助于理解系统的结构和组织。
  • 理解主要元素符号:

如下所示:

(6).部署图

  • 部署图用于描述系统中的物理部署结构,包括硬件设备、软件组件和它们之间的关系。部署图显示了系统的物理拓扑结构,有助于理解系统的部署环境和配置方式。
  • 理解主要元素符号:

如下所示:

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

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

相关文章

小米HyperOS 澎湃os机型免答题 免社区等级 秒接bl锁操作步骤解析【二】

前面两期博文; 小米HyperOS 澎湃os机型免答题 免社区等级 秒接bl锁操作步骤解析 小米机型解锁bl 绕过社区等级5才可以解锁的限制的教程_没有五级社区怎么解锁bl-CSDN博客 小米对米粉解锁bl是越来越苛刻了。目前社区等级 答题 审核等等步骤越来越繁琐。而且通过率很低。知名开…

04 Pytorch tensor

一:老版本的 variable 二:新版 tensor 曾经:求导相关 如今:数据相关 –dtype: 张量的数据类型,三大类,共9种。torch.FloatTensor, torch.cuda.FloatTensor –shape: 张量的形状。如:&#x…

PTP简介及Linux phy ptp驱动实现

1、PTP简介 PTP(precision time protocol)精确时间协议,是一种时间同步的协议,对应 IEEE 1588 标准,是基于网络数据包的一种时间同步协议,1588v2的同步精度可以达到ns级,但1588协议对硬件有依赖。 2、PTP原理 时间同…

手把手!从头构建LLaMA3大模型(Python)

1. 前期准备 让我们先来想一想大概需要做什么。 首先是模型架构的选择。原工作用的是 GPT Neo 架构(可以看他们的 config),这个算是很老的模型了,最初是 EleutherAI 用来复现追踪 GPT-3 的工作的,现在用的也比较少了…

java入门1.4.0

前言: 在1.4.0版本中,更新了对语言三大要素的理解 红字为更新,绿字为迭代 这时我们目前拥有的知识 正片: 有了这些内容,我们就可以顺利进入到Spring Boot阶段了 Q:有人就会问,面向对象的特性…

瑞典农业科学大学《Nature Geoscience》(IF=18)!揭示北方森林碳汇对干旱的响应机制!

本文首发于“生态学者”微信公众号! 北方森林覆盖了地球陆地面积的11%,储存了全球陆地碳储量的约三分之一。因此,它们被认为是减缓气候变化政策的一个重要因素。然而,环极寒带地区是气候变化速度最快的地区。这包括更频繁和更严重…

谷粒商城实战(042集群学习-mysql集群-主从同步)

Java项目《谷粒商城》架构师级Java项目实战,对标阿里P6-P7,全网最强 总时长 104:45:00 共408P 此文章包含第361p-第p363的内容 集群 集群的基础形式 MySQL集群 MMM机制 这里使用了vip虚拟ip方式(如192.168.0.101,192.168.0.102&…

换位置(C++)

问题描述 体育课上,有一个班级的同学站成了一队,体育老师请最高的和最矮的两位同学调换一下位置,其余的同学不要动,请编程实现!(假设所有人的高矮都是不一样的) 输入 第一行有一个整数 &…

【html】爱心跳动动画:CSS魔法背后的故事

效果展示: 代码介绍: 爱心跳动动画:CSS魔法背后的故事 在前端开发中,CSS不仅仅是一种用于控制网页样式的工具,它也是一种表达创意和想象力的艺术手段。今天,我要为大家介绍一段使用CSS实现的爱心跳动动画…

【TB作品】MSP430G2553,单片机,口袋板, 交通灯控制系统

题8 交通灯控制系统 十字路口交通灯由红、绿两色LED显示器(两位8段LED显示器)组成,LED显示器显示切换倒计时,以秒为单位,每秒更新一次;为确保安全,绿LED计数到0转红,经5秒延时&#…

深度解析:河南资信预评价乙级资质人员专业背景要求

深度解析:河南资信预评价乙级资质人员专业背景要求 河南资信预评价乙级资质对人员的专业背景有着明确的要求,这些要求旨在确保工程咨询单位具备足够的专业能力和技术水平。以下是对这些专业背景要求的深度解析: 一、咨询工程师(投…

基于IDEA的Maven(依赖介绍和引用)

如何通过一个坐标信息(依赖)去引用 ,某个"jar 包" 会在这篇博客进行学习。 目录 一、学习开始 (0)项目的结构组成和 "pom.xml" 文件内容。 (1)首先需要一个标签&#xf…

Open3D点云处理学习

Color ICP Colored point cloud registration — Open3D 0.11.0 documentation Colored point cloud registration - Open3D 0.18.0 documentation 展示了使用color-icp结果 对比gicp错误处理结果 intel自己的论文 Colored Point Cloud Registration Revisited 优化方程 参…

计算机行业的现状与未来之2024

年年都说编程好,编程工资涨不了。 人家骑车送外卖,月入两万好不好。 一、计算机专业的背景与现状 在过去几十年里,计算机科学相关专业一直是高考考生的热门选择。无论是计算机科学与技术、软件工程,还是人工智能与大数据&#xff…

vue项目首页优化问题(前后端都要优化)

2.1 config/index.js 开启productionGzip 将其productionGzip 配置成true 2.2 配置Gzip的 插件配置 打开webpack.prod.config.js 配置一下这段代码 代码如下 if (config.build.productionGzip) { const CompressionWebpackPlugin require(‘compression-webpack-plugin’)…

深入探索Stable Diffusion:从原理到应用的全面解析

目录 一 Stable Diffusion的基本概念 什么是Stable Diffusion? Stable Diffusion与传统生成模型的区别 二 Stable Diffusion的理论基础 扩散过程的数学描述 马尔可夫链蒙特卡罗方法(MCMC) 三 Stable Diffusion的算法实现 基本步骤 代码实现 四 Stable Diffusion的…

jdk下载安装及电脑上同时安装多个jdk

一、jdk的下载 官方地址: Java Software | Oracle 系统环境变量配置 1、首先新建JDK1.8和17的JAVA_HOME,他们的变量名区分开,分别为JAVA17_HOME,JAVA8_HOME。分别指向他们的安装地址。 2、新建配置他们可变的地址,这个环境变量的值…

智能建筑与物联网技术:重塑未来空间的智慧交响曲

在21世纪的建筑领域,智能建筑已经成为城市发展的新地标,而物联网技术(IoT)正是驱动这一变革的核心引擎。下面大家一起窥探智能建筑与物联网技术结合的奇妙世界,探讨其广泛应用与未来发展趋势。 物联网技术&#xff1a…

保障信息安全!等保2.0的二级和三级到底有何不同?详细解析

在应用场景上,二级是地市级以上的国家机关、企业、事业单位的一般信息系统,三级是各级政府、企业、事业单位的内部重要信息系统,还有各个部委的官方网站等。 在评定标准方面,第二级和第三级则是以系统受损后对公共和国家安全的损害…

LoReFT——大语言模型的表示微调

引言 参数高效的微调或 PeFT 方法寻求通过更新少量权重来适应大型语言模型。然而,大多数现有的可解释性工作已经证明,表示编码了丰富的语义信息,这表明它可能是编辑这些表示的更好、更强大的替代方案。预先训练的大型模型通常经过微调以用于…