10.2 面向对象软件架构演化过程 ★★★☆☆
10.2.1 对象演化
在顺序图中,组件的实体为对象。组件本身包含了众多的属性,如接口、类型、语义等,
这些属性的演化是对象自身的演化,对于描述对象之间的交互过程并无影响。因此,会对架构设计的动态行为产生影响的演化只包括AddObject(AO) 和 DeleteObject(DO) 两种
A O在顺序图中添加一个新的对象。一般是在系统需要添加新的对象来实现某种新的功能,或需要将现有对象的某个功能独立以增加架构灵活性的时候发生。
DO 删除顺序图中现有的一个对象。一般在系统需要移除某个现有的功能,或需要合并某些对象及其功能来降低架构的复杂度的时候发生。
10.2.2 消息演化
消息演化分为AddMessage (AM)、DeleteMessage(DM)、SwapMessageOrder(SMO)、OverturnMessage(OM)、 ChangeMessageModule(CMM)5种
AM增添一条新的消息,产生在对象之间需要增加新的交互行为的时候。
DM删除当前的一条消息,产生在需要移除某个交互行为的时候,是AM的逆向演化。
SMO交换两条消息的时间顺序,发生在需要改变两个交互行为之间关系的时候。
OM反转消息的发送对象与接收对象,发生在需要修改某个交互行为本身的时候。
CMM改变消息的发送或接收对象,发生在需要修改某个交互行为本身的时候。
消息与约束直接相关,消息的演化会直接影响到对象之间的交互行为,但不一定会违背约束。可以将这种演化分为3类。
第 1类演化与当前约束无关,如AddMessage在大多数情况下与当前的约束无关,不会对架构设计的正确性或时态属性产生影响。
第2类演化与约束直接关联但不会违背约束,如 ChangeMessageModule后的消息不会违背“在某处产生” 的约束,不会对架构设计的正确性或时态属性产生影响。
第3类演化与约束直接关联并会违背约束,如DeleteMessage删除的某条消息是某条约束的内容之一,演化后的架构违背了约束,其是不正确的演化。
消息是顺序图的核心内容,消息演化是顺序图演化的核心。对象的演化会伴随着消息演化,复合片段和约束均基于消息存在,二者的演化也直接受到消息演化的影响。因此,对其他演化进行分析研究的同时,也要对相关联的消息演化进行分析。
10.2.3 复合片段演化
复合片段是对象交互关系的控制流描述,表示可能发生在不同场合的交互,与消息同属于连接件范畴。复合片段本身的信息包括类型、成立条件和内部执行序列,其中内部执行序列的演化等价于消息序列演化。
复合片段的演化分为AddFragment(AF)、DeleteFragment(DF)、FragmentTypeChange(FTC) 和 FragmentConditionChange(FCC),
AF在某几条消息上新增复合片段,发生在需要增添新的控制流时。
DF 删除某个现有的复合片段,发生在需要移除当前某段控制流时。
FTC 改变复合片段的类型,发生在需要改变某段控制流时。
FCC改变复合片段内部执行的条件,发生在改变当前控制流的执行条件时。
10.2.4 约束演化
顺序图中的约束信息以文字描述的方式存储于对象或消息中,约束演化即直接对约束信息进行添加和删除。
AC(Add Constraint) 直接添加新的约束信息,会对架构设计产生直接的影响,需要判断当前设计是否满足新添加的约束要求。
DC(Delete Constraint) 直接移除某条约束信息,发生在去除某些不必要条件的时候,一般而言架构设计均会满足演化后的约束。