4.4 软件设计:UML顺序图

UML顺序图

  • 1、 UML
  • 2、 UML顺序图
    • 2.1 顺序图组成
      • 对象
      • 生命线
      • 消息
    • 2.2 顺序图和用例
      • 登录用例
    • 2.3 顺序图建模
      • 顺序图建模参考策略
      • 建立顺序图的步骤
      • 建立顺序图的示例
  • 3、面对对象的设计原则
    • 3.1 特点
    • 3.2 层次
    • 3.3 注意点
      • 类设计需要强内聚,弱耦合
      • 可重用性
      • 框架

1、 UML

统一建模语言(Unified Modeling Language)

  • UML由3个元素组成:UML的基本构造块、支配这些构造块如何放置在一起的规则和运用于整个语言的一些公共机制。
  • UML的词汇表包含3种构造块:事物、关系和图。事物是对模型中最具有代表性的成分的抽象;关系把事物结合在一起;图聚集了相关的事物。
    1. 事务:结构事务、行为事务、分组事务和注释事务。
    2. 关系:依赖、关联、泛化和实现。

2、 UML顺序图

强调消息时间顺序的交互图。顺序图描述了对象之间传送消息的时间顺序,用来表示用例中的行为顺序。

顺序图将交互关系表示为一个二维图,即在图形上,顺序图是一张表,其中显示的对象沿横轴排列,从左到右分布在图的顶部;而信息则沿纵轴按时间顺序排序。创建顺序图时,以能够使图尽量简洁为依据布局。

购买小车的顺序图:
在这里插入图片描述

2.1 顺序图组成

在这里插入图片描述

对象

顺序图中对象的符号和对象图中对象所用的符号一样。
将对象置于顾序图的顶部意味着在交互开始的时候对象就已经存在了,如果对象的位置不在顶部,那么表示对象是在交互的过程中被创建的。
参与者和对象按照从左到右的顺序排列。
一般最多两个参与者,他们分列两端,启动这个用例的参与者往往排在最左边;接受消息的参与者则律在最右端;
对象从左到右按照重要性排列或按照消息先后顺序排列。
在这里插入图片描述

  • 对象命名方式
    在这里插入图片描述

  • 对象创建的两种情况

    1. 顺序图中的对象的默认位置是在图的顶部,如果对象在这个位置上,那么说明在发送消息时,该对象就已经存在了;
    2. 如果对象是在执行的过程中创建的,那么它的位置应该处在图的中间部分。
  • 对象创建两种方法
    在这里插入图片描述

  • 对象撤销的两种情况

    1. 在处理新创建的对象,或顺序图中的其他对象时,都可以发送“destroy”消息来撤销对象。
    2. 要想说明某个对象被撤销,需要在被撤销对象的生命线末端放一个“x”符号进行标识。
      在这里插入图片描述

生命线

在这里插入图片描述
每个对象都有自己的生命线,用来表示在该用例中一个对象在一段时间内的存在;
生命线使用垂直的虚线表示;
如果对象生命期结束,则用注销符号表示;
对象默认的位置在图顶部,表示对象在交互之前已经存在;
如果是在交互过程中由另外的对象所创建则位于图的中间某处;
激活表示该对象被占用以完成某个任务,去激活指的则是对象处于空闲状态、在等待消息;
在UML中,为了表示对象是激活的,可以将该对象的生命线拓宽成为矩形。其中的矩形称为激活条(期)或控制期,对象就是在激活条的顶部被激活的,对象在完成自己的工作后被去激活。
在这里插入图片描述

消息

面向对象方法中,消息是对象间交互信息的主要方式,
1. 在任何一个软件系说中,对象都不是孤立存在的,它们之间通过消息进行通信。
2. 消息是用来说明顺序图中不同活动对象之同的通信,因此,消息可以激发某个提作,创建或销某个对象。

结构化程序设计中,模块间传递信息的方式主要是过程(或函数)调用。对象A向对象B发送消息,可以简单地理解为对象A调用对象B的一个提作(operatcn)。

在顺序图中,消息是由从一个对象的生命线指向另一个对象的生命线的直线箭头来表示的,箭头上面还可以表明要发送的消息名及序号。顺序图中消息编号可显示,也可不显示。协作图中必须显示。

顺序图中,尽力保持消息的顺序是从左到右排列的。在各对象之间,消息的次序由它们在重直轴上的相对位置决定,
一个顺序图的消息流开始于左上方,消息2的的置比消息1低,这意味着消息2的股序比消息1要迟。因为西方的阅读习惯量从左到右。

在这里插入图片描述

在UML中,消息使用箭头来表示,箭头的类型表示了消息的类型。进行顺序图建模时,所用到的消息主要包括以下几种类型:

  1. 简单消息(Simple Message)

  2. 同步消息(Synchronous iMessage)
    同步消息最常见的情况是调用,即消息发送者对象在它的一个操作执行时调用接收者对象的一个操作,此时消息名称通常就是被调用的操作名称。
    当消息被处理完后,可以回送一个简单消息,或者是隐含的返回。
    在这里插入图片描述

  3. 异步消息(Asynchronous Message)
    异步消息表示发送消息的对象不用等待回应的返回消息,即可开始另一个活动。
    异步消息在某种程度上规定了发送方和接收方的责任,即发送方只负责将消息发送到接收方,至于接收方如何响应,发送方则不需要知道。对接收方来说,在接收到消息后它既可以对消息进行处理,也可以什么都不做。
    在这里插入图片描述

  4. 反身消息(Message to Self)
    顺序图建模过程中,一个对象也可以将一个消息发送给它自己,这就是反身消息。

    1. 如果一条消息只能作为反身消息,那么说明该操作只能由对象自身的行为触发。
    2. 这表明该操作可以被设置为private属性,只有属于同一个类的对象才能够调用它。
    3. 在这种情况下,应该对顺序图进行彻底的检查以确定该操作不需要被其他对象直接调用。
      在这里插入图片描述
  5. 返回消息(Retur Message)
    返回消息是顺序图的一个可选择部分,它表示控制流从过程调用的返回。
    返回消息一般可以缺省,隐含表示每一个调用都有一个配对的调用返回。
    是否使用返回消息依赖于建模的具体/抽象程度。如果需要较好的具体化,返回消息是有用的;否则,主动消息就足够了。
    在这里插入图片描述

2.2 顺序图和用例

顺序图的主要用途之一是用来为某个用例的泛化功能提供其所缺乏的解释,即把用例表达的要求转化为更进一步的精细表达。
用例常常被细化为一个或多个顺序图。
顺序图除了在设计新系统方面的用途之外,它还能用来记录一个存在于系统的对象现在如何交互。
在这里插入图片描述

登录用例

在这里插入图片描述

2.3 顺序图建模

对系统动态行为建模的过程中,当强调按时间展开信息的传送时,一般使用顺序图建模技术。
一个单独的顺序图只能显示一个控制流。一般情况下,一个完整的控制流是非常复杂的,要描述它需要创建很多交互图(包括顺序图和协作图),一些图是主要的,另一些图用来描述可选择的路径和一些例外,再用一个包对它们进行统一的管理。

顺序图建模参考策略

在这里插入图片描述

建立顺序图的步骤

在这里插入图片描述

建立顺序图的示例

在这里插入图片描述
在这里插入图片描述

3、面对对象的设计原则

3.1 特点

  1. 面向对象设计强调定义软件对象,并且使这些软件对象相互协作来满足用户需求。
  2. 面向对象分析和设计的界限是模糊的,从面向对象分析到面向对象设计是一个逐渐扩充模型的过程。分析的结果通过细化直接生成设计结果,在设计过程中逐步加深对需求的理解,从而进一步完求分析的结果。
  3. 分析和设计活动是一个反复选代的过程。
  4. 面向对象方法学在概念和表示方法上的一致性,保证了各个开发阶段之间的平滑性。

3.2 层次

四个层次:
在这里插入图片描述

3.3 注意点

面向对象设计与结构化设计的过程和方法完全不同,要设计出高质量的软件系统,记住:

  1. 对接口进行设计
  2. 发现变化并且封装它
  3. 先考虑聚合然后考虑继承

类设计需要强内聚,弱耦合

交互耦合:如果对象之间的耦合是通过消息连接来实现的,则这种调合就是交互耦合。在设计时应该尽量减少对象之间发送的消息数和消息中的参数个数,降低消息连接的复杂程度,

继承耦合:继承耦合是一般化类与特殊化类之间的一种关联形式,设计时应该适当使用这种耦合。在设计时要特别认真分析一般化类与特殊化类之间继承关系,如果抽象层次不合理,可能会适成对特殊化类的修改影响到一般化类,使得系统的稳定性降低,另外,在设计时特殊化类应该尽可能多地继承和使用一般化类的属性和服务,充分利用继承的优势。

  1. 单一责任原则:让一个类只做一种类型责任;
  2. 开关原则:可扩展和修改的;
  3. 里氏替换原则:可以用子类来替换父类;
  4. 依赖倒置原则:高层模块不能依赖底层模块;
  5. 接口分离原则:依赖于抽象,不要依赖于具体,同时在抽象级别不应该有对于细节的依赖。

可重用性

软件重用是从设计阶段开始的,所有的设计工作都是为了使系统完成预期的任务,为了提高工作效率、减少错误、降低成本,就要充分考虑软件元素的重用性。重用性有两个方面的含义:
1. 尽量使用已有的类,包括开发环境提供的类库和已有的相似的类;
2. 如果确实需要创建新类,则在设计这些新类时考虑将来的可重用性。

设计一个可重用的软件比设计一个普通软件的代价要高,但是随着这些软件被重用次数的增加,分摊到它的设计和实现成本就会降低。

框架

框架是一组可用于不同应用的类的集合。框架中的类通常是一些抽象类并且相互有联系,可以通过继承的方式使用这些类。例如,Java应用程序接口(API)就是一个成功的框架包,为众多的应用提供服务,但一个应用程序通常只需要其中的部分服务,可以采用继承或聚合的方式将应用包与框架包关联在一起来获得需要的服务。

一般不会直接去修改框架的类,而是通过继承或聚合为应用创建合适的GUI类。

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

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

相关文章

云计算:定义、类型及对企业的影响

💓 博客主页:瑕疵的CSDN主页 📝 Gitee主页:瑕疵的gitee主页 ⏩ 文章专栏:《热点资讯》 云计算:定义、类型及对企业的影响 云计算:定义、类型及对企业的影响 云计算:定义、类型及对企…

【FPGA开发】AXI-Lite总线协议解读、Verilog逻辑开发与仿真、Alex Forencich代码解读

目录 AXI是什么AXI是如何工作的AXI-Lite定义AXI-Lite的关键特性AXI-Lite信号列表AXI-Lite信号时序时钟和复位握手机制写请求通道(AW)写数据通道(W)写响应通道(B)读请求通道(AR)读数据…

场地预约系统(源码+文档+部署+讲解)

本文将深入解析“场地预约系统”的项目,探究其架构、功能以及技术栈,并分享获取完整源码的途径。 系统概述 本项目名称为场地预约系统,是一款方便用户进行场地预约的系统。该系统主要包括用户管理、分类管理、活动管理、场地管理、提现管理…

MYSQL——事务管理

什么是事务 在数据库使用者角度,事务就是完成一个事件。例如一个员工信息数据库,要完成员工离职的事件,可能需要很多操作,比如删除员工基本信息以及员工在公司的表现,薪资水平等。而这一系列的操作就是为了完成员工离…

计算机网络基本概念总结

IP地址 概念 使网络中的设备都有唯一的地址标识,用于表示其在网络中的位置。 格式 IP地址是一个32位的二进制数,通常被分割为4个8位二进制数(也就是4个字节),如:01100100.00001000.00001010.00000110。通常…

MySQL系列之如何在Linux只安装客户端

导览 前言Q:如何安装一个Linux环境下的MySQL客户端一、准备文件1. 确认Server版本2. 选择Client安装文件 二、下载并安装1. 下载1.1 寻找文件1.2 文件说明 2. 安装2.1 上传至Linux服务器2.2 执行安装 三、连接验证1. 确认远程授权2. 建立远程连接 结语精彩回放 前言…

flink实战-- flink任务的火焰图如何使用

火焰图 Flame Graphs 是一种有效的可视化工具,可以帮助我们排查如下问题: 目前哪些方法正在消耗 CPU 资源?一个方法的消耗与其他方法相比如何?哪一系列的堆栈调用导致了特定方法的执行?y 轴表示调用栈,每一层都是一个函数。调用栈越深,火焰就越高,顶部就是正在执行的…

【css flex 多行均分有间隙布局】

小程序、web均可使用&#xff0c;我当前用的是小程序 <view class"job_tab_container flex_between"><view class"job_tab_item"></view><view class"job_tab_item"></view><view class"job_tab_item&qu…

高效实现多站点管理的策略与工具解读

内容概要 在当前的数字化环境中&#xff0c;多站点管理显得尤为重要。它不仅能帮助企业在多个市场中有效布局&#xff0c;还能促进资源的合理配置和利用。为了实现高效的多站点管理&#xff0c;首先需要了解其定义及重要性。多站点管理指的是企业在不同地理位置或市场上运营多…

C++STL容器详解——list

目录 一.list 1.list的介绍 2.为什么会有list? 二.list的常见接口 1.list的构造函数 2.list的遍历 3.迭代器类型 4.list的头插头删和尾插尾删 5.list任意位置的插入和删除 6.list的sort()及reverse() 7.迭代器失效 三.整体代码 一.list 1.list的介绍 list的文档说…

【Linux系统编程】第四十四弹---从TID到线程封装:全面掌握线程管理的核心技巧

✨个人主页&#xff1a; 熬夜学编程的小林 &#x1f497;系列专栏&#xff1a; 【C语言详解】 【数据结构详解】【C详解】【Linux系统编程】 目录 1、tid是什么 1.1、理解库 1.2、理解tid 1.3、tid中线程局部存储 2、封装线程 2.1、基本结构 2.2、函数实现 2.3、使用…

WPF 打包

打包为单个exe文件直接运行 - - -版本.NET8 新建WPF项目 右键 - 发布 选择发布文件夹 选择发布文件夹 选择发布文件夹 配置 配置,保存 发布 WPF 打包为exe安装程序 示例 实现思路 引导项目中嵌入其它项目可运行目录的zip引导项目中解压zip文件到指定文件夹是…

percona tpc-c程序压测mysql8.0并绘图

1 概述 OLTP数据库选型一般会从稳定性、性能、易用性、官方文档等因素考虑。而在性能这因素&#xff0c;基准测试有sysbench和tpc-c&#xff08;tpc-e是tpc-c的升级版&#xff09;。sysbench的底层测试用例的表结构是简单的&#xff0c;并且不支持join&#xff0c;针对以上两个…

ArcGIS软件之“计算面积几何”地图制作

目录 一、消防站的泰森多边形ex12二、人口调查的泰森多边形三、人口调查的泰森多边形属性设置四、计算面积几何,用于求密度五、求密度六、给“现有中学”属性 R1赋值七、“现有中学”设置多环缓存区 并为它赋值八、“土地使用”为不同的功能区赋值九、三个图层相交十、计算面积…

【Web前端】使用 JSON 处理数据

JSON 是一种基于 JavaScript 对象语法的数据格式&#xff0c;由道格拉斯克罗克福特推广。尽管其语法源于 JavaScript&#xff0c;JSON 仍然是独立于 JavaScript 的&#xff0c;这也是为什么许多编程环境能够解析和生成 JSON 的原因。JSON 可以以对象或字符串的形式存在&#xf…

SMOTE算法深度解析及代码实现

SMOTE算法介绍 SMOTE算法是较为常用的数据增广算法&#xff0c;其核心思路是在少数类别样本内部进行数据合成&#xff0c;更具体的说&#xff0c;其后隐藏的猜想是假定样本 x 0 , x 1 , . . , x N x_0,x_1,..,x_N x0​,x1​,..,xN​都为同一类别&#xff0c;那么他们的线性组合…

基于Redis缓存机制实现高并发接口调试

创建接口 这里使用的是阿里云提供的接口服务直接做的测试&#xff0c;接口地址 curl http://localhost:8080/initData?tokenAppWithRedis 这里主要通过参数cacheFirstfalse和true来区分是否走缓存&#xff0c;正常的业务机制可能是通过后台代码逻辑自行控制的&#xff0c;这…

鸿蒙系统:智能生态的新纪元与开发者的新机遇

正文&#xff1a; 在数字化时代&#xff0c;操作系统作为智能设备的灵魂&#xff0c;其重要性不言而喻。随着技术的不断进步&#xff0c;我们见证了安卓和iOS在全球范围内的广泛应用和影响力。如今&#xff0c;鸿蒙系统&#xff08;HarmonyOS&#xff09;以其创新的分布式架构…

Netty入门二

文章目录 EventLoopChannelFuture 与 PromiseHandler与PipelineByteBuf Netty的核心组件包括以下几种&#xff1a; EventLoop&#xff1a;负责处理注册到其上的channel的所有I/O事件。Channel&#xff1a;表示数据传输的网络通道。Future 与 Promise&#xff1a;Future用于等待…

一文读懂剪枝(Pruner):大模型也需要“减减肥”?

当你听到「剪枝」二字&#xff0c;或许会联想到园丁修整枝叶的情景。而在 AI 大模型领域&#xff0c;这个词有着特殊的含义 —— 它是一种通过“精简”来提升大模型效率的关键技术。随着 GPT、LLaMA 等大模型规模的持续膨胀&#xff0c;如何在保持性能的同时降低资源消耗&#…