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

本文主要是介绍《系统架构设计师教程(第2版)》第10章-软件架构的演化和维护-02-面向对象软件架构演化过程,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

  • 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)

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

在这里插入图片描述

这篇关于《系统架构设计师教程(第2版)》第10章-软件架构的演化和维护-02-面向对象软件架构演化过程的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/934479

相关文章

mysql中的服务器架构详解

《mysql中的服务器架构详解》:本文主要介绍mysql中的服务器架构,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1、背景2、mysql服务器架构解释3、总结1、背景简单理解一下mysqphpl的服务器架构。2、mysjsql服务器架构解释mysql的架

深度解析Spring AOP @Aspect 原理、实战与最佳实践教程

《深度解析SpringAOP@Aspect原理、实战与最佳实践教程》文章系统讲解了SpringAOP核心概念、实现方式及原理,涵盖横切关注点分离、代理机制(JDK/CGLIB)、切入点类型、性能... 目录1. @ASPect 核心概念1.1 AOP 编程范式1.2 @Aspect 关键特性2. 完整代码实

Java Web实现类似Excel表格锁定功能实战教程

《JavaWeb实现类似Excel表格锁定功能实战教程》本文将详细介绍通过创建特定div元素并利用CSS布局和JavaScript事件监听来实现类似Excel的锁定行和列效果的方法,感兴趣的朋友跟随... 目录1. 模拟Excel表格锁定功能2. 创建3个div元素实现表格锁定2.1 div元素布局设计2.

linux重启命令有哪些? 7个实用的Linux系统重启命令汇总

《linux重启命令有哪些?7个实用的Linux系统重启命令汇总》Linux系统提供了多种重启命令,常用的包括shutdown-r、reboot、init6等,不同命令适用于不同场景,本文将详细... 在管理和维护 linux 服务器时,完成系统更新、故障排查或日常维护后,重启系统往往是必不可少的步骤。本文

SpringBoot连接Redis集群教程

《SpringBoot连接Redis集群教程》:本文主要介绍SpringBoot连接Redis集群教程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1. 依赖2. 修改配置文件3. 创建RedisClusterConfig4. 测试总结1. 依赖 <de

k8s上运行的mysql、mariadb数据库的备份记录(支持x86和arm两种架构)

《k8s上运行的mysql、mariadb数据库的备份记录(支持x86和arm两种架构)》本文记录在K8s上运行的MySQL/MariaDB备份方案,通过工具容器执行mysqldump,结合定时任务实... 目录前言一、获取需要备份的数据库的信息二、备份步骤1.准备工作(X86)1.准备工作(arm)2.手

Mac系统下卸载JAVA和JDK的步骤

《Mac系统下卸载JAVA和JDK的步骤》JDK是Java语言的软件开发工具包,它提供了开发和运行Java应用程序所需的工具、库和资源,:本文主要介绍Mac系统下卸载JAVA和JDK的相关资料,需... 目录1. 卸载系统自带的 Java 版本检查当前 Java 版本通过命令卸载系统 Java2. 卸载自定

Nexus安装和启动的实现教程

《Nexus安装和启动的实现教程》:本文主要介绍Nexus安装和启动的实现教程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、Nexus下载二、Nexus安装和启动三、关闭Nexus总结一、Nexus下载官方下载链接:DownloadWindows系统根

基于Python实现一个简单的题库与在线考试系统

《基于Python实现一个简单的题库与在线考试系统》在当今信息化教育时代,在线学习与考试系统已成为教育技术领域的重要组成部分,本文就来介绍一下如何使用Python和PyQt5框架开发一个名为白泽题库系... 目录概述功能特点界面展示系统架构设计类结构图Excel题库填写格式模板题库题目填写格式表核心数据结构

Linux系统中的firewall-offline-cmd详解(收藏版)

《Linux系统中的firewall-offline-cmd详解(收藏版)》firewall-offline-cmd是firewalld的一个命令行工具,专门设计用于在没有运行firewalld服务的... 目录主要用途基本语法选项1. 状态管理2. 区域管理3. 服务管理4. 端口管理5. ICMP 阻断