本节主要讲解顺序图,通信图,活动图,状态机图,包图。
顺序图,通信图,活动图,状态机图用于描述系统的行为,包图用于组织系统的模型。
顺序图:
顺序图和通信图都是用于详细描述对象间的交互(通信图根据顺序图生成,反之亦然)
顺序图示例:76页,图5-1
顺序图是二维的,垂直方向表示时间,水平方向放置不同的对象。
对象生命线:表示对象在一段时间内的存在。
对象生命线表示为垂直虚线,位于对象符号之下
执行规约:一个对象执行一个操作的时期,用窄长的矩形表示,并覆盖对象生命线
自调用的表示法:77页,图5-2
消息:对象之间的通信的规格说明,这样的通信用于传输将发生的活动所需要的信息,即包含了控制的规格说明,也包含了所使用的数据的规格说明。
消息的表示:水平 实 虚 线
消息的返回:水平 虚 箭 线
消息可分为同步消息,异步消息
同步消息,消息返回,异步消息的表示:77页
信号:对象之间的一步通信的规格说明。
表示收发信息的时间差的3种方式:78页
发送信号示例:80页,图5-7
顺序图中的控制操作符:81页,图5-9
1、可选执行(opt):如条件成立则进行该区域交互
2、条件执行(alt):类似opt
3、并行执行(par):多个par区域并行执行
4、循环执行(loop):循环执行该区域
通信图:
通信图:一种强调发送和接收消息的对象组织结构的图,用以展示围绕对象以及他们之间的连接器而组织的交互。
通信图示例:84页,图5-11
活动图:
活动图是描述动作、动作的执行次序以及动作的输入和输出的图,由动作结点和边构成。
动作:可执行的基本单元功能,用以描述系统中的状态转换或活动,它是原子(在该抽象层次上)和即时(执行时间忽略不计)的。
活动:由一组相互协作的动作构成的行为单元。
动作和活动与抽象层次有关。
活动的表示法:86页,图5-14
通常一个活动图表示一个活动。
动作和操作是直接相关的。对于一个活动,可以由一个类的几个操作实现,也可以由几个类的操作实现。
控制流:当前动作结束,马上进入下一个动作的流程,用一个带箭头的实线表示,87页,图5-15
动作流的分支和合并都使用菱形表示,87页,图5-16
控制流也可以是并发的,使用同步条来表示并发控制流的分岔和汇合,87页,图5-17
对象流示例:88页,图5-18
泳道:在对业务建模的时候(强调是业务建模),可以把动作分组,每组由特定的履行者来执行。每个分组称为一个泳道。
泳道示例:88页,图5-19
通常用活动图对业务过程和操作建模。
状态机图:
状态机图描述了一个对象在其生命周期内因响应事件所经历的状态序列以及对这些事件所作出的反应。
状态机图主要是由状态和状态间的转移构成的。
事件:在时间和空间上可以定位并具有实际意义,值得关注所发生的事情。
事件可分为:信号事件,调用事件,时间事件,改变事件。
1、信号事件:一个对象对一个信号的接收而触发的一个信号事件。
2、调用事件:对象接收到一个对其操作的调用,而触发一个调用事件。
3、时间事件:经过一段时间或是到了指定时间,而触发一个时间事件。
4、改变事件:用布尔表达式描述的指派条件变为真,而触发一个改变事件。例如:when(···)。
状态表示法:91页,图5-20
在一个状态机图中,有一个初始状态,1个或多个终止状态,91页,图5-21
初始状态和终止状态都是伪状态。
转移分为两种:状态间转移和状态内转移。
状态内转移:在一个状态内由事件引起的动作或活动执行后,对象仍处于该状态的情形。
状态间转移:由于某个特定对事件的触发,对象从一个状态转移到另一个状态的情形。
转移的格式:事件触发器[ (参数列表) ] [ 监护条件 ] / [ 动作表达式 ]
状态机图的3个保留字:entry,exit,do
entry:进入状态的事件触发器,进入状态后首先执行的动作表达式。
exit:退出状态的事件触发器,退出状态时最后执行的动作表达式
do:状态期内的事件触发器,在执行完进入动作表达式之后执行的动作表达式。
状态机图示例:94页,图5-24 , 图5-25
非正交状态示意图:97页,图5-29
正交状态示意图:97页,图5-30
包图:
包图是描绘模型元素分组以及分组之间依赖的图,其中,包是对模型元素进行分组的机制。
一个模型元素职能被一个包所拥有,如果包被撤销了,其中的元素也会跟着被撤销。
包的表示法:99页,图5-31
包的嵌套结构:99页,图5-32
包间关系:拥有,引入依赖,访问依赖
引入依赖:一个包中的公共命名空间的模型元素,可以被其他包引用,相当于把被引入包的内容附加到引入包的公共命名空间中。
访问依赖:同上,不同的是,被引入包的内容被附加到引入包的私有命名空间。
嵌套包的可见性问题:
1、里层包的模型元素可以使用外层包的公共命名空间的模型元素(包括《import》进来的包)。
2、一个外层包要访问里层包,就需要使用引入或是访问依赖,或是需要指定包名。
3、里层包的模型元素的名字会掩盖外层包的同名模型元素,这时就需要使用限定名来使用外层包的同名模型元素。