1. 对象演化

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

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

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)

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

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

2.3 消息演化的分类

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

  • 演化与当前约束无关

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

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

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

3. 复合片段演化

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

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)

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

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

04-25 08:42