《系统架构设计师教程(第2版)》第10章-软件架构的演化和维护-02-面向对象软件架构演化过程

news2025/1/18 14:03:00

文章目录

  • 1. 对象演化
    • 1.1 添加一个新对象(AO)
    • 1.2 删除一个对象(DO)
  • 2. 消息演化
    • 2.1 消息
    • 2.2 消息演化的操作
      • 2.2.1 Add Message(AM)
      • 2.2.2 Delete Message (DM)
      • 2.2.3 Swap Message Order(SMO)
      • 2.2.4 Overturn Message(OM)
      • 2.2.5 Change Message Module(CMM)
    • 2.3 消息演化的分类
  • 3. 复合片段演化
    • 3.2 复核片段演化操作
      • 3.2.1 Add Fragment(AF)
      • 3.2.2 Delete Fragment(DF)
      • 3.2.3 Fragment Type Change(FTC)
      • 3.2.4 Fragment Condition Change(FCC)
  • 4. 约束演化
    • 4.1 Add Constraint(AC)
    • 4.2 Delete Constraint(DC)

本章以对象软件架构为例,结合UML 顺序图来进一步讨论各种演化操作

1. 对象演化

  • 对架构设计的动态行为产生影响的演化:只包括Add Object(AO) 和 Delete Object(DO) 两种

原因:在顺序图中,组件的实体为对象。对象自身的变化对于描述对象之间的交互过程并无影响。

在这里插入图片描述

1.1 添加一个新对象(AO)

  • Add Object
  • 添加新对象的情况:
    • 系统需要添加新的对象来实现某种新的功能
    • 需要将现有对象的某个功能独立以增加架构灵活性

1.2 删除一个对象(DO)

  • Delete Object
  • 删除对象的情况:
    • 系统需要移除某个现有的功能
    • 需要合并某些对象及其功能来降低架构的复杂度

2. 消息演化

2.1 消息

  • 消息是顺序图中的核心元素
  • 影响架构的元素:名称、源对象、目标对象、时序等信息
  • 不影响架构的元素:消息的自身属性(如:接口、类型等)

2.2 消息演化的操作

2.2.1 Add Message(AM)

  • 增添一条新的消息
  • 产生在对象之间需要增加新的交互行为的时候

2.2.2 Delete Message (DM)

  • 删除当前的一条消息
  • 产生在需要移除某个交互行为的时候,

2.2.3 Swap Message Order(SMO)

  • 交换两条消息的时间顺序
  • 发生在需要改变两个交互行为之间关系的时候

2.2.4 Overturn Message(OM)

  • 反转消息的发送对象与接收对象
  • 发生在需要修改某个交互行为本身的时候

2.2.5 Change Message Module(CMM)

  • 改变消息的发送或接收对象
  • 发生在需要修改某个交互行为本身的时候

下图说明:
状态里的行为(即,圈中的信息)是发出的消息,外边是接收的消息

在这里插入图片描述

讨论
b)图中,演化前,接收到的m1 不应该出现,疑似教材有错误

2.3 消息演化的分类

消息与约束直接相关,消息的演化会直接影响到对象之间的交互行为,但不一定会违背约束

  • 演化与当前约束无关

    • 如:AddMessage在大多数情况下与当前的约束无关
    • 这些演化不会对架构设计的正确性或时态属性产生影响
  • 演化与约束直接关联,但不会违背约束

    • 如, Change Message Module 后的消息不会违背“在某处产生”的约束
    • 这些演化同样不会对架构设计的正确性或时态属性产生影响
  • 演化与约束直接关联,会违背约束

    • 如,Delete Message 删除的某条消息是某条约束的内容之一
    • 这种演化后的架构违背了约束,其是不正确的演化

3. 复合片段演化

  • 复合片段:是一组对象的集合,它们协同工作以实现某个功能
  • 复合片段本身的信息包括:类型、成立条件、内部执行序列
    • 其中内部执行序列的演化等价于消息序列演化
  • 会产生分支的复合片段: cond(条件)ref(引用)、loop(循环)、break(跳出)、alt(转化)、opt(选择)、par(并行)

3.2 复核片段演化操作

3.2.1 Add Fragment(AF)

  • 在某几条消息上新增复合片段
  • 发生在需要增添新的控制流时

复合片段所产生的分支是不同类型的,例如ref会关联到另一个顺序图, par会产生并行消息,其余的则为分支过程。

3.2.2 Delete Fragment(DF)

  • 删除某个现有的复合片段
  • 发生在需要移除当前某段控制流时

3.2.3 Fragment Type Change(FTC)

  • 改变复合片段的类型
  • 发生在需要改变某段控制流时

可以视为复合片段的删除与添加的组合

3.2.4 Fragment Condition Change(FCC)

  • 改变复合片段内部执行的条件
  • 发生在改变当前控制流的执行条件时

包括:符合条件时的转移,不符合条件时的转移

一些常见示例:
在这里插入图片描述

4. 约束演化

  • 来源:系统属性的改变
  • 约束演化:
    • 一般伴随着消息变化
    • 不存在可视化的描述,直接对约束信息进行添加和删除
      • 修改约束可视为删除了原有约束并添加了新的约束

4.1 Add Constraint(AC)

  • 直接添加新的约束信息
  • 对架构设计产生直接的影响
    • 需要判断当前设计是否满足新添加的约束要求

4.2 Delete Constraint(DC)

  • 直接移除某条约束信息
  • 发生在去除某些不必要条件的时候
    • 一般而言架构设计均会满足演化后的约束

在这里插入图片描述

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

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

相关文章

【漏洞复现】泛微e-office系统ajax.php接口存在任意文件上传漏洞

漏洞描述 泛微e-office系统是标准、易用、快速部署上线的专业协同OA软件。泛微 E-Office 9.5版本存在代码问题漏洞,泛微e-office系统ajax.php接口存在任意文件上传漏洞 免责声明 技术文章仅供参考,任何个人和组织使用网络应当遵守宪法法律,遵守公共秩序,尊重社会公德,…

缓存神器-JetCache

序言 今天和大家聊聊阿里的一款缓存神器 JetCache。 一、缓存在开发实践中的问题 1.1 缓存方案的可扩展性问题 谈及缓存,其实有许多方案可供选择。例如:Guava Cache、Caffine、Encache、Redis 等。 这些缓存技术都能满足我们的需求,但现…

电商技术揭秘三十一:智能风控与反欺诈技术

相关系列文章 电商技术揭秘相关系列文章合集(1) 电商技术揭秘相关系列文章合集(2) 电商技术揭秘二十八:安全与合规性保障 电商技术揭秘二十九:电商法律合规浅析 电商技术揭秘三十:知识产权保…

全光谱灯对人体的危害?谨记全光谱灯选购要避开的四大套路

全光谱灯对人体的危害有多大?近年来网上关于护眼台灯对视力有害的言论有很多,引发了很多人空前的关注,事实上这未必是一件坏事,因为随着护眼台灯的热度持续上涨,市面上浑水摸鱼的行为增多了不少,有着不少劣…

不要摆摊,不要开早餐店,原因如下

关注卢松松,会经常给你分享一些我的经验和观点。 我最近开通了视频号会员专区嘛,专区有个问答功能可以提问,有个会员问了我问题,其中一条问答分享给大家: 松哥,突然想去兼职,早上卖点杂粮煎饼果…

像素着色技术在AI去衣中的深度应用与探索

在人工智能(AI)领域,图像处理技术一直是一个热门且充满挑战的研究方向。其中,AI去衣技术作为图像处理技术的一个分支,近年来引起了广大研究者和公众的广泛关注。本文将重点探讨像素着色技术在AI去衣中的重要作用&#…

深度学习图像生成在AI去衣技术中的应用与探索

随着人工智能技术的迅猛发展,深度学习在图像生成领域的应用越来越广泛。其中,AI去衣技术作为深度学习在图像处理中的一个新兴分支,引起了广大科研人员和公众的关注。本文将深入探讨深度学习图像生成在AI去衣技术中的作用,并尝试解…

那些你不知道的数据库知识:行式存储和列式存储

前几天听课,听到老师讲数据列式存储。 我🙋🏻‍♀️:等等,what,什么列式存储,数据一行一行的展示,然后一行一行的存在数据库里面不就好了,什么叫做列式存储,…

前端中不同格式的日期相互转换(字符串、时间戳)js相关

在项目中遇到了,需要实现字符串和Unix时间戳的相互转换,随手记录一下。 我使用的组件库为Naive UI,涉及到的组件为日期选择器(Date Picker)。作者在文档中写道: 实话说我不喜欢这个 feature,因为…

训练营第三十三天贪心(第五部分重叠区间问题)

训练营第三十三天贪心(第五部分重叠区间问题) 435.无重叠区间 力扣题目链接 题目 给定一个区间的集合 intervals ,其中 intervals[i] [starti, endi] 。返回 需要移除区间的最小数量,使剩余区间互不重叠 。 示例 1: 输入: …

TapData + 实时数仓:实时数据如何赋能船舶制造业,助力数字化应用升级和科学管理运营

使用 TapData,化繁为简,摆脱手动搭建、维护数据管道的诸多烦扰,轻量代替 OGG、DSG 等同步工具,「CDC 流处理 数据集成」组合拳,加速仓内数据流转,帮助企业将真正具有业务价值的数据作用到实处&#xff0c…

笔试狂刷--Day5(最小公倍数+最优路径)

大家好,我是LvZi,今天带来笔试狂刷--Day5 一.求最小公倍数 链接:求最小公倍数 分析: 数学知识–辗转相除法(迭代/递归) 代码: import java.util.Scanner;// 注意类名必须为 Main, 不要有任何 package xxx 信息 public class Main {public static void main(String[] args)…

计算机视觉——两视图几何求解投影矩阵

上文我提到了通过图像匹配得到基本矩阵,接下来我们要接着求解投影矩阵。 计算投影矩阵思路 假设两个投影矩阵为规范化相机,因此采用基本矩阵进行恢复。在规范化相机下, P [ I ∣ 0 ] P[I|0] P[I∣0], P ′ [ M ∣ m ] P[M|m] P′[M∣m]。…

【结构型模型】享元模式

一、享元模式概述 享元模式定义:又叫蝇量模式,运用共享技术有效地支持大量细粒度对象的复用。系统只使用少量的对象,而这些对象都很相似,状态变化很小,可以实现对象的多次复用。由于享元模式要求能够共享的对象必须是细…

创建SpringBoot和RabbitMQ的整合项目

文章目录 创建SpringBoot和RabbitMQ的整合项目首先快速创建一个maven项目引入SpringBoot整合rabbitMQ的依赖在src/main目录下创建resources目录并引入配置文件写消息发送者MessageSender写消息接收者MessageReceiver写RabbitMQConfig配置类写SpringBoot启动主类CommandLineRunn…

Bootloader应用启动分析详解

内存->磁盘 引导程序->核心->根文件系统rootfs->app 引导程序加载最重要 由于boot设计比较偏底层,所以根据CPU架构和OS类型可能有所不同 uboot是对CPU架构和OS类型支持得比较多得一种开源引导程序 Bootloader的种类 s5p6818启动流程 芯片最开始是从iROM启动,…

【漏洞复现】泛微e-Mobile 移动管理平台文件上传漏洞

0x01 阅读须知 “如棠安全的技术文章仅供参考,此文所提供的信息只为网络安全人员对自己所负责的网站、服务器等(包括但不限于)进行检测或维护参考,未经授权请勿利用文章中的技术资料对任何计算机系统进行入侵操作。利用此文所提供…

大型企业不同安全域文件交换,常见方式的优势与问题对比

现在越来越多的企业通过对网络进行物理或逻辑隔离,将内部网络与外部网络隔离开来,从而限制非法访问和恶意渗透,防止敏感数据泄露和恶意代码的传播,提高网络安全性。对于大型企业而言,将网络分为内外网并不足以满足安全…

Redis底层数据结构之IntSet

目录 一、概述二、IntSet结构三、自动升级 redis底层数据结构已完结👏👏👏: ☑️redis底层数据结构之SDS☑️redis底层数据结构之ziplist☑️redis底层数据结构之quicklist☑️redis底层数据结构之Dict☑️redis底层数据结构之Int…

UNet网络在图像去模糊方向的应用

前一段时间,我们学习了关于UNet网络的结构和基于UNet网络的去模糊网络MIMO-UNet,DeepRFT等网络的结构,大致的对网络的结构组成和实现过程有了一定的了解,下面考虑在图像去模糊部分,基于UNet的已有的研究工作&#xff0…