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.rhkb.cn/news/470848.html

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

相关文章

除了 Mock.js,前端还有更方便的 Mock 数据工具吗?

在前端开发中,模拟数据(Mock Data)是不可或缺的一部分,它能够帮助开发者在后端接口未完成前进行界面和逻辑的测试。而 Mock.js 是一个广泛使用的库,它通过简洁的语法和强大的功能,让前端开发者可以轻松地创…

继承和多态(上)

目录 一.继承 1.何为继承 2.继承的语法 3.子类访问父类 (1)子类访问父类的成员变量 (2)子类访问的父类方法 二.super关键字 1.super用于调用父类的构造方法 2.super用于调用父类的实例方法 3.super用于访问父类的实例变量 三.子父类构造方法 和代码块的执行优先顺序…

【练习案例】30个 CSS Javascript 加载器动画效果

本文分享一些 Loader CSS、Javascript 示例,这些示例均来源于Codepen网站上,里面有案例的源码与显示效果,您可以用于练习,也可以将您认为有趣的动画,添加到您的项目中,以帮助您创建更加有趣的等待页面加载动…

45.第二阶段x86游戏实战2-hook监控实时抓取游戏lua

免责声明:内容仅供学习参考,请合法利用知识,禁止进行违法犯罪活动! 本次游戏没法给 内容参考于:微尘网络安全 本人写的内容纯属胡编乱造,全都是合成造假,仅仅只是为了娱乐,请不要…

限流算法(令牌通漏桶计数器)

限流算法(令牌桶&漏桶&计数器 ) 什么是限流? 限流是为保护自身系统和下游系统不被高并发流量冲垮,导致系统雪崩等问题 限流在很多场景中用来限制并发请求量,比如说秒杀抢购、双11高并发流量等 在保证系统可…

❤React-React 组件基础(类组件)

❤React-React 组件基础 1、组件化开发介绍 组件化开发思想:分而治之 React的组件按照不同的方式可以分成类组件: 划分方式一(按照组件的定义方式) 函数组件(Functional Component )和类组件(Class Component); …

2024/11/13 英语每日一段

The new policy has drawn many critics. Data and privacy experts said the Metropolitan Transit Authority’s new initiative doesn’t address the underlying problem that causes fare evasion, which is related to poverty and access. Instead, the program tries “…

MySQL重难点(一)索引

目录 一、引子:MySQL与磁盘间的交互基本单元:Page 1、重要问题:为什么 MySQL 每次与磁盘交互,都要以 16KB 为基本单元?为什么不用多少加载多少? 2、有关MySQL的一些共识 3、如何管理 Page 3.1 单个 P…

【软件工程】一篇入门UML建模图(类图)

🌈 个人主页:十二月的猫-CSDN博客 🔥 系列专栏: 🏀软件开发必练内功_十二月的猫的博客-CSDN博客 💪🏻 十二月的寒冬阻挡不了春天的脚步,十二点的黑夜遮蔽不住黎明的曙光 目录 1. 前…

vue2+ element ui 集成pdfjs-dist

目录 1. 下载Pdf.js1.1 下载1.2 修改配置1.2.1 将pdfjs-3.8.162-dist复制到项目中1.2.2 解决跨域问题1.2.3 将pdf.worker.js文件复制到public目录下1.2.4 安装 pdfjs-dist1.2.5 前端vue代码(示例) 3. 参考资料 1. 下载Pdf.js 1.1 下载 下载链接(官方)需…

蓝桥杯每日真题 - 第7天

题目:(爬山) 题目描述(X届 C&C B组X题) 解题思路: 前缀和构造:为了高效地计算子数组的和,我们可以先构造前缀和数组 a,其中 a[i] 表示从第 1 个元素到第 i 个元素的…

大语言模型:解锁自然语言处理的无限可能

0.引言 在当今的科技时代,自然语言处理技术正以前所未有的速度发展,语言大模型作为其中的核心力量,对各个领域产生了深远的影响。本文旨在探讨语言大模型的发展历程、核心技术以及广泛的应用场景,以帮助读者更好地理解这一前沿技…

【vue2.0入门】vue基本语法

目录 引言一、页面动态插值1. 一般用法 二、计算属性computed三、动态class、style绑定四、条件渲染与列表渲染五、事件处理六、表单输入绑定七、总结 引言 本系列教程旨在帮助一些零基础的玩家快速上手前端开发。基于我自学的经验会删减部分使用频率不高的内容,并不…

【STM32F1】——无线收发模块RF200与串口通信

【STM32F1】——无线收发模块RF200与串口通信 一、简介 本篇主要对调试无线收发模块RF200的过程进行总结,实现了以下功能。 串口普通收发:使用STM32F103C8T6的USART2串口接收中断,实现两个无线收发模块RF200间的通信。 二、RF200介绍 电压…

《TCP/IP网络编程》学习笔记 | Chapter 8:域名及网络地址

《TCP/IP网络编程》学习笔记 | Chapter 8:域名及网络地址 《TCP/IP网络编程》学习笔记 | Chapter 8:域名及网络地址域名系统什么是域名?DNS 服务器IP 地址和域名之间的转换使用域名的必要性利用域名获取 IP 地址利用 IP 地址获取域名 基于 Wi…

前端开发中常用的包管理器(npm、yarn、pnpm、bower、parcel)

文章目录 1. npm (Node Package Manager)2. Yarn (Yarn Package Manager)3. pnpm4. Bower5. Parcel总结 前端开发中常用的包管理器主要有以下几个: 1. npm (Node Package Manager) 简介: npm 是 Node.js 的默认包管理器,也是最广泛使用的包…

HarmonyOS 如何实现传输中的数据加密

文章目录 摘要引言数据传输加密概述选择加密算法和传输协议加密实现方案与 Demo 代码配置 HTTPS/TLSAES 加密的实现代码详解RSA加密的实现代码详解 QA环节总结参考资料 摘要 本文将介绍在 HarmonyOS 应用中如何实现数据传输的加密策略。我们将讨论常见的加密算法(如…

ArkTs简单入门案例:简单的图片切换应用界面

在鸿蒙 OS 应用开发的过程中,我们常常需要通过组合各种组件和编写相应的逻辑来实现丰富多样的功能。今天,我就来和大家详细解析一段实现简单图片切换功能的代码,希望能帮助到那些刚接触鸿蒙 OS 应用开发的朋友们。 一、代码导入部分 Entry …

influxDB 时序数据库安装 flux语法 restful接口 nodjsAPI

安装 Install InfluxDB | InfluxDB OSS v2 Documentation Debian和Ubuntu用户可以用apt-get包管理来安装最新版本的InfluxDB。 对于Ubuntu用户,可以用下面的命令添加InfluxDB的仓库,添加之后即可apt-get 安装influxdb2 wget -q https://repos.influx…

丹摩征文活动|丹摩智算平台使用指南

目录 1. 登录平台与工作环境设置1.1 访问与登录1.2 创建或选择项目1.3 初始化项目环境 2. 数据上传与管理2.1 数据上传2.2 数据管理与预处理2.3 数据可视化 3. 模型构建与训练3.1 模型选择3.2 参数配置3.3 模型训练与评估 4. 模型部署与应用4.1 模型部署4.2 接口调用与集成4.3 …