二 逻辑视图
逻辑视图用来描述用例视图中提出的系统功能的实现,该视图以图形方式说明关键的用例实现、子系统、包和类,它们包含了在构架方面具有重要意义的行为。逻辑视图在每次迭代过程中都会加以改进,主要是作为概要设计,详细设计阶段的主要利器。
1 类图 Class Diagram
类图显示了一组说明性(静态)的模型元素,例如:类、包以及它们的内容和关系。
边界类用于对一个或多个主角与系统之间的交互进行建模。
实体类代表受控的信息单元;
抽象类和具体类:如果某个类未被实例化,并且只是为了让其他类继承它而存在,那么它就是抽象类。而实际上被实例化的类则是具体类。请注意,抽象类要成为有用的类,必须至少有一个后代。
类图关系(难点):
关联关系: 关联关系表示不同类的对象之间的结构关系,它在一段时间内将多个类的实例连接在一起(这与依赖关系不同,依赖关系表示两个实例之间的临时关联关系)。有时,对象必须相互引用才能实现交互,例如互相发送消息。
聚合关系: 聚合关系用于对模型元素之间的组装关系进行建模。有许多组成关系的示例:图书馆包括大量的书籍,公司部门由雇员组成,计算机由许多设备组成。如果对此进行建模,那么聚合关系体(部门)与其组成部分(雇员)之间存在聚合关系关联关系。在关联关系路径上,用位于聚合关系体端的空心菱形来表示聚合。
泛化关系: 泛化关系表示一个类对另一个类的继承。继承而得的类称为后代。被继承的类称为祖先。
聚合关系或者关联关系?
仅当类之间存在组装关系(即一个类由其他的类组成,或者“部分”游离于整体之外就会显得不完全)时才能使用聚合关系。以订单为例:如果订单为“空”或不包含任何内容,那么订单就毫无意义。对于所有聚合关系来说也是如此:部门必须有雇员,家庭必须有家庭成员,等等。
如果类脱离其他类所形成的环境后仍可能有自己的身份,或者类不是某个更大整体的部分,则应使用关联关系。此外,在没有把握的情况下,关联关系将更为合适;而聚合关系一般比较明显,所以选择聚合关系仅仅是为了更加明确。这对建模工作的成败并不具有决定性的意义。
描述关联关系和聚合关系的类图示例如下:
2 状态图 StateChart Diagram
状态图显示一个状态机。状态机是一种行为,说明一个对象在其生命期中对事件进行响应而经过的一系列状态及其响应和操作。
状态
状态是对象执行某项活动或等待某个事件时的条件。对象可能会在有限的时间长度内保持某一状态。状态具有以下几项特征:
名称
将一个状态与其他状态区分开来的文本字符串;状态也可能是匿名的,这表示它没有名称。
进入/退出操作
在进入和退出状态时所执行的操作。
内部转移
在不使状态发生变更的情况下进行的转移。
子状态
状态的嵌套结构,包括不相连的(依次处于活动状态的)或并行的(同时处于活动状态的)子状态。
延迟的事件
未在该状态中处理但被延迟处理(即列队等待由另一个状态中的对象来处理)的一系列事件。
如图 1 所示,可以为对象的状态机定义两种特殊的状态。初始状态指示状态机或子状态的默认起始位置。初始状态被描绘为黑色的实心圆。终止状态指示状态机的执行过程已完成,或者包含状态已完成。终止状态被描绘为外套空圆的黑色实心圆。初始状态和终止状态实际上是伪状态。除了名称外,它们都没有常规状态通常所具有的部分。从初始状态到终止状态的转移可以具有全部特性(包括警戒条件和操作),但也可能没有触发事件。
图 1:状态机符号
3 活动图
活动图是状态图的一种特殊形式。其中所有或多数状态都是活动状态,而且所有或多数转移都在源状态中的活动完成时立即触发。活动图支持嵌套。
4 序列图
多数情况下,我们使用序列图来阐明用例实现。在典型的组织结构中,主事件流将有一个序列图,而每个独立的用例分支流都分别有一个序列图。序列图显示了消息的明确顺序,所以更适用于实时的规约和复杂的场景。
序列图的内容
在序列图中可以有对象和主角实例,以及说明它们如何交互的消息。序列图描述了在参与交互的对象中所发生的事件(从激活的角度来说明),以及这些对象如何通过相互发送消息进行通信。您可以为用例事件流的各种不同形式制作序列图。