1、l Interaction diagramInteraction diagram,是描述对象之间的关,是描述对象之间的关系和对象之间的信息传递的图;系和对象之间的信息传递的图;l 强调对象交互的图强调对象交互的图l顺序图(顺序图(Sequence DiagramSequence Diagram)l通信图(通信图(Communication DiagramCommunication Diagram)l 专门的图专门的图l时间图(时间图(Timing DiagramTiming Diagram)l交互纵览图(交互纵览图(Interaction Overview DiagramInteraction
2、 Overview Diagram)l Sequence DiagramSequence Diagraml 面向时间描述对象交互的面向时间描述对象交互的视图视图l Communication DiagramCommunication Diagraml 对象间消息的结构化视图对象间消息的结构化视图l Timing Diagraml 交互中消息有关的时间交互中消息有关的时间约束视图约束视图l Interaction Overview Diagraml 混合逻辑序列的高级交混合逻辑序列的高级交互视图互视图l 按照时间顺序显示对象之间交互的图;按照时间顺序显示对象之间交互的图;l 可以用来概要描述交互
3、的场景(考虑分析)可以用来概要描述交互的场景(考虑分析)l 活动者(活动者(actoractor)l 对象(对象(objectobject)l 生命线(生命线(lifelinelifeline)l 控制焦点(控制焦点(focus of control focus of control)/激活期激活期l 消息(消息(messagemessage)l 交互片断(交互片断(Interaction FrameInteraction Frame)l 一般活动者和对象按照从左到右的顺序排列,主要活动一般活动者和对象按照从左到右的顺序排列,主要活动者排在最左边;者排在最左边;l 对象的命名方式有三种:对象的
4、命名方式有三种:l包括对象名和类名包括对象名和类名l类名(匿名对象)类名(匿名对象)l对象名(不关心类)对象名(不关心类)l 每个对象都有自己的生命线,是一条垂直的虚线,每个对象都有自己的生命线,是一条垂直的虚线,用来表示一个对象在一段时间内存在。用来表示一个对象在一段时间内存在。如对象生命期结束,则用注销符号表示;如对象生命期结束,则用注销符号表示;l 控制焦点(控制焦点(focus of control focus of control)/激活期激活期 对象执行某个动作的时期对象执行某个动作的时期l 对象间交互信息的方式,消息分为五种:对象间交互信息的方式,消息分为五种:对象创建、同步调用
5、、返回、异步消息、交叉异步消对象创建、同步调用、返回、异步消息、交叉异步消息、对象销毁息、对象销毁UMLUML三种消息:三种消息:l 同步调用(同步调用(Procedure CallProcedure Call):):发送者把消息发送后,等待直到接收者返回控制,可以表示同步;l 异步(异步(AsynchronousAsynchronous):):消息发送后,发送者继续操作,不等待,常用于并发;l 返回(返回(ReturnReturn):):表示消息的返回。一般同步(过程调用)的返回不需画出,直接隐含,而异步返回则可用它。l 自调用(Self Call)l UML 标记l Alt(Alt(备选备
6、选)l表示多条件的分支结构(选择结构)表示多条件的分支结构(选择结构)l虚线分隔区域,每一个区域设置一个监护条件,代虚线分隔区域,每一个区域设置一个监护条件,代表一个分支表一个分支l Opt(可选)(可选)l表示满足条件则执行分表示满足条件则执行分支结构支结构l loop(循环)(循环)l表示该片断执行多次表示该片断执行多次l assertl用来表示内容所描述的行为是执行过程中那个时刻用来表示内容所描述的行为是执行过程中那个时刻唯一的有效行为。如果执行到这个片断的前面,则唯一的有效行为。如果执行到这个片断的前面,则说明该片断就一定会发说明该片断就一定会发 生。它通常和生。它通常和ignorei
7、gnore 或或considerconsider一起使用,一起使用,以断言某种特定种类以断言某种特定种类 的消息行为的消息行为.l considerl表示只允许出现列表表示只允许出现列表 中的消息中的消息l Breakl通常通常breakbreak用来定义一个含有监护条件的子片断。用来定义一个含有监护条件的子片断。如果监护条件为如果监护条件为“真真”则执行子片断,而且不执行则执行子片断,而且不执行包含子片断的图包含子片断的图 中其它交互;如中其它交互;如 果监护条件为果监护条件为 “假假”,那么,那么 执行将正常地继执行将正常地继 续进行续进行.l Criticall表示该子片断是表示该子片断
8、是“临界区域临界区域”,在临界区域中生命,在临界区域中生命线上的事件序列不能够和其它区域中的任何其他事线上的事件序列不能够和其它区域中的任何其他事件交错。通常用来表示一个原子性的连续操作,例件交错。通常用来表示一个原子性的连续操作,例如事务性操作。如事务性操作。l Parl用来表示用来表示“并行并行”的,也就是用来表示两个或多个的,也就是用来表示两个或多个并发执行的子片断,并行子片断中单个元素的执行并发执行的子片断,并行子片断中单个元素的执行次序可以以任何可能的顺序相互操作。次序可以以任何可能的顺序相互操作。l Refl在一个交互图中,我们可以引用其它的交互图,在一个交互图中,我们可以引用其它
9、的交互图,其表示的方法是用一个矩形,加上其表示的方法是用一个矩形,加上refref操作符,操作符,并写明引用的交互图名称即可。并写明引用的交互图名称即可。l确定交互的范围;确定交互的范围;l识别参与交互的对象和活动者;识别参与交互的对象和活动者;l设置对象生命线的开始和结束;设置对象生命线的开始和结束;l设置消息;设置消息;l细化消息;细化消息;*l提取边界类、实体类和控制类;提取边界类、实体类和控制类;l构造交互图;构造交互图;l根据交互图精化类图根据交互图精化类图。边界类边界类描述目标软件系统与外部环境的交互,主要任务:描述目标软件系统与外部环境的交互,主要任务:(1)(1)界面控制:包括
10、输入数据的格式及内容转换,输出结果界面控制:包括输入数据的格式及内容转换,输出结果的呈现,软件运行过程中界面的变化与切换等。的呈现,软件运行过程中界面的变化与切换等。(2)(2)外部接口:实现目标软件系统与外部系统或外部设备之外部接口:实现目标软件系统与外部系统或外部设备之间的信息交流和互操作。主要关注跨越目标软件系统边间的信息交流和互操作。主要关注跨越目标软件系统边界的通信协议。界的通信协议。(3)(3)环境隔离:将目标软件系统与操作系统、数据库管理系环境隔离:将目标软件系统与操作系统、数据库管理系统、应用服务器中间件等环境软件进行交互的功能与特统、应用服务器中间件等环境软件进行交互的功能与
11、特性封装于边界类之中,使目标软件系统的其余部分尽可性封装于边界类之中,使目标软件系统的其余部分尽可能地独立于环境软件。能地独立于环境软件。例如,“家庭保安系统”中的边界类有“输入键盘接口类”、“传感器接口类”、“警报器接口类”、“报警电话接口类”和“显示面板接口类”。实体类实体类表示目标软件系统中具有持久意义的信息表示目标软件系统中具有持久意义的信息项及其操作。实体类的操作具有项及其操作。实体类的操作具有“内向收敛内向收敛”特征,它们仅向目标软件系统的其余部分提供特征,它们仅向目标软件系统的其余部分提供读、写信息项内容的必要的操作接口,并不涉读、写信息项内容的必要的操作接口,并不涉及业务逻辑处
12、理。实体类的及业务逻辑处理。实体类的UMLUML构造型为构造型为entityentity。例如,“家庭保安系统”中的“异常事件”为实体类。控制类控制类作为完成用例任务的责任承担者,协调、作为完成用例任务的责任承担者,协调、控制其他类共同完成用例规定的功能或行为。控制其他类共同完成用例规定的功能或行为。对于比较复杂的用例,控制类通常并不处理具对于比较复杂的用例,控制类通常并不处理具体的任务细节,但是它应知道如何分解任务,体的任务细节,但是它应知道如何分解任务,如何将子任务分派给适当的辅助类,如何在辅如何将子任务分派给适当的辅助类,如何在辅助类之间进行消息传递和协调。助类之间进行消息传递和协调。例
13、如,“家庭保安系统”中,“用户命令处理器”和“监测器”均为控制类。l 在讨论了边界类、实体类和控制类的基本概念在讨论了边界类、实体类和控制类的基本概念之后,下面介绍如何从分析模型中的用例描述之后,下面介绍如何从分析模型中的用例描述和领域概念模型出发获取这些类。和领域概念模型出发获取这些类。l 通常情况下,执行者与用例之间的一种通信连通常情况下,执行者与用例之间的一种通信连接对应一个边界类。但是,如果两个以上的用接对应一个边界类。但是,如果两个以上的用例与同一执行者交互,并且这些交互具有共同例与同一执行者交互,并且这些交互具有共同的行为、完成相同或类似的任务,就可以考虑的行为、完成相同或类似的任
14、务,就可以考虑用同一边界类实现用例与执行者之间的交互。用同一边界类实现用例与执行者之间的交互。这就意味着边界类的作用范围可以超越单个用这就意味着边界类的作用范围可以超越单个用例。例。l 实体类源于领域概念模型。有时也需要认真研读实体类源于领域概念模型。有时也需要认真研读用例描述,从中发掘具有持久意义的信息项。用例描述,从中发掘具有持久意义的信息项。l 如果执行者的属性需要持久保存,也可以建立相如果执行者的属性需要持久保存,也可以建立相应于执行者的实体类。应于执行者的实体类。l 假设一个实体类假设一个实体类A A仅仅被系统中的另一个类仅仅被系统中的另一个类B B引用引用,并且系统勿需关心,并且系
15、统勿需关心A A的行为特征,那么,为了简的行为特征,那么,为了简化设计模型,应将化设计模型,应将A A中信息项直接作为中信息项直接作为B B的属性。的属性。l 如果如果A A被系统中的多个类引用,或者被系统中的多个类引用,或者A A具有不容忽具有不容忽略的行为特征,那么应将略的行为特征,那么应将A A作为独立的实体类。作为独立的实体类。l 一个用例通常对应一个控制类。一个用例通常对应一个控制类。l 如果不同用例的任务有较多类似之处,也可以如果不同用例的任务有较多类似之处,也可以考虑在多个用例的实现方案中共享同一控制类考虑在多个用例的实现方案中共享同一控制类,此种情况应审慎对待,不同用例所需要的
16、控,此种情况应审慎对待,不同用例所需要的控制、协调行为往往会有差异。制、协调行为往往会有差异。l 对于那些事件流非常简单的用例,可以不设独对于那些事件流非常简单的用例,可以不设独立的控制类,直接在边界类中设置控制、协调立的控制类,直接在边界类中设置控制、协调功能,边界类在实体类的帮助下完成用例要求功能,边界类在实体类的帮助下完成用例要求的功能及行为。的功能及行为。在标识边界类、实体类和控制类之后,接下来的在标识边界类、实体类和控制类之后,接下来的任务是,任务是,将分析模型中的用例描述转化成将分析模型中的用例描述转化成UMLUML交互图,以交互图作为用例的精确实现方案。交互图,以交互图作为用例的
17、精确实现方案。l 用例描述中已包含事件流说明。用例描述中已包含事件流说明。l 事件流中的事件应直接对应于交互图中的消息事件流中的事件应直接对应于交互图中的消息,而事件间的先后关系体现为交互图中的时序,而事件间的先后关系体现为交互图中的时序,对消息的响应则构成消息接收者的职责。,对消息的响应则构成消息接收者的职责。这种职责在后续的设计活动中将被确立为类的方这种职责在后续的设计活动中将被确立为类的方法。法。l 对于比较复杂的用例,仅仅依靠控制类、边界对于比较复杂的用例,仅仅依靠控制类、边界类和实体类会使单个控制类过于庞大、复杂,类和实体类会使单个控制类过于庞大、复杂,它既承担控制、协调的任务,又承
18、担复杂的计它既承担控制、协调的任务,又承担复杂的计算任务。算任务。l 在设计复杂用例的实施方案时,应考虑为控制在设计复杂用例的实施方案时,应考虑为控制类设置一些独立的辅助类,让控制类将一些任类设置一些独立的辅助类,让控制类将一些任务委托给辅助类完成。务委托给辅助类完成。如,在“家庭保安系统”类图中,“系统配置管理器”和“日志管理器”就是这种意义上的辅助类。UMLUML顺序图的横向排列次序顺序图的横向排列次序l 用例的主动执行者用例的主动执行者 l 用户界面的边界类用户界面的边界类 l 控制类控制类 l 实体类和辅助类实体类和辅助类 l 外部接口和环境隔离层的边界类外部接口和环境隔离层的边界类l
19、 目标软件系统的边界之外的被动执行者目标软件系统的边界之外的被动执行者 按此布局,在顺序图中不应该出现穿越控制类生按此布局,在顺序图中不应该出现穿越控制类生命线的消息,即,主动执行者向界面类发出命令,界面命线的消息,即,主动执行者向界面类发出命令,界面类将命令进行适当转换后传送至控制类,控制类通过消类将命令进行适当转换后传送至控制类,控制类通过消息请求辅助类、实体类的帮助,协调、控制它们共同完息请求辅助类、实体类的帮助,协调、控制它们共同完成来自主动执行者的命令。成来自主动执行者的命令。l 控制类或辅助类可以向右侧的边界类发送消控制类或辅助类可以向右侧的边界类发送消息,将信息或外部处理请求由边
20、界类传向外息,将信息或外部处理请求由边界类传向外部系统(被动执行者)。部系统(被动执行者)。l 在用例描述中,许多用例除主事件流外,往在用例描述中,许多用例除主事件流外,往往还包含备选事件流,以说明在某些特殊或往还包含备选事件流,以说明在某些特殊或者异常情况下的事件和响应动作序列。为易者异常情况下的事件和响应动作序列。为易于理解,在设计模型中应该用分离的于理解,在设计模型中应该用分离的UMLUML交互交互图分别表示事件流和每个备选事件流。图分别表示事件流和每个备选事件流。l 按照上述布局规则绘制的典型的顺序图如图按照上述布局规则绘制的典型的顺序图如图所示所示l 在在UMLUML交互图中,对每个
21、类的对象都规定了它必须响应的消交互图中,对每个类的对象都规定了它必须响应的消息以及类的对象之间的消息传递通道。前者对应于类的操作息以及类的对象之间的消息传递通道。前者对应于类的操作,后者则对应于类之间的连接关系。因此,可以利用交互图,后者则对应于类之间的连接关系。因此,可以利用交互图精化分析模型中的类图,将交互图中出现的新类添加到原有精化分析模型中的类图,将交互图中出现的新类添加到原有类图中,并且对相关的类进行精化,定义其属性和操作。类图中,并且对相关的类进行精化,定义其属性和操作。l 原则上,每个类都应该有一个操作来响应交互图中指向其对原则上,每个类都应该有一个操作来响应交互图中指向其对象的
22、那条消息。但是,这并不意味着消息与操作一定会一一象的那条消息。但是,这并不意味着消息与操作一定会一一对应,因为类的一个操作可能具有响应多条消息的能力。同对应,因为类的一个操作可能具有响应多条消息的能力。同理,两个类之间的一条连接关系也可以为多条消息提供传递理,两个类之间的一条连接关系也可以为多条消息提供传递通道。为了简化设计模型,也为了提高重用程度,设计人员通道。为了简化设计模型,也为了提高重用程度,设计人员应该尽量使用已有的操作来响应新消息,并尽量使用已存在应该尽量使用已有的操作来响应新消息,并尽量使用已存在的连接路径作为消息传递的通道。如果两个类之间存在明确的连接路径作为消息传递的通道。如
23、果两个类之间存在明确、自然的聚合或组合关系,则可以在类图中直接用相应的、自然的聚合或组合关系,则可以在类图中直接用相应的UMLUML图元符号表示类间的聚合和组成关系,这两个关系均可图元符号表示类间的聚合和组成关系,这两个关系均可提供消息传递通道。提供消息传递通道。l 接下来讨论如何根据交互图确立类的属性。类的操作完接下来讨论如何根据交互图确立类的属性。类的操作完成消息响应责任的能力,来源于两方面的知识,一是类成消息响应责任的能力,来源于两方面的知识,一是类本身具有的信息,即类的属性,二是类能够找到的其他本身具有的信息,即类的属性,二是类能够找到的其他类,通过其他类协助其完成消息响应。在综合考虑
24、这两类,通过其他类协助其完成消息响应。在综合考虑这两个因素之后,类的操作应该明确哪些子任务可通过消息个因素之后,类的操作应该明确哪些子任务可通过消息传递路径委托给其他类完成,哪些子任务必须由自身完传递路径委托给其他类完成,哪些子任务必须由自身完成。根据后一种子任务的需要,结合领域和业务知识即成。根据后一种子任务的需要,结合领域和业务知识即可推导出类应具有的属性。可推导出类应具有的属性。在类图的基础上,得出“家庭保安系统”的类图如下图所示。为简洁见,仅标出控制类“监测器”和“用户命令处理器”的方法,以及实体类“异常事件”的属性。l描述系统对象(或活动者)如何共同协描述系统对象(或活动者)如何共同
25、协作实现用例;作实现用例;l 链:链:l连接器,是用来表示对象之间的语义连接,一般而言,连接器,是用来表示对象之间的语义连接,一般而言,链是关联的一个实例(包括链是关联的一个实例(包括associationassociation、selfself、globalglobal、locallocal等)。不过在等)。不过在UML 2UML 2中已经中已经开始弱化它们的使用,因此除非必要,无需过多地考虑开始弱化它们的使用,因此除非必要,无需过多地考虑它们。它们。l 消息编号:消息编号:l消息的编号有两种,一种是无层次编号,它简单直观;消息的编号有两种,一种是无层次编号,它简单直观;另一种是嵌套的编号,
26、它更易于表示消息的包含关系另一种是嵌套的编号,它更易于表示消息的包含关系l 迭代标记:迭代标记:l用用*号表示,表示循环,通常还有迭代表达式,用来说号表示,表示循环,通常还有迭代表达式,用来说明循环规则明循环规则l监护条件:监护条件:l通常是用来表示分支的,也就是表示通常是用来表示分支的,也就是表示“如果如果条件为条件为truetrue,才发送消息,才发送消息”l多重对象多重对象l多个对象的集合,往往是同类的对象;多个对象的集合,往往是同类的对象;l如果消息同时发给多个对象,则用多重对象如果消息同时发给多个对象,则用多重对象表示;表示;l在顺序图中仍然显示为单对象一样的图标;在顺序图中仍然显示
27、为单对象一样的图标;l活动对象活动对象l拥有控制线程的对象,能够发起控制活动;拥有控制线程的对象,能够发起控制活动;l某种意义下,代表线程;某种意义下,代表线程;l 1 1、用户打印文件,计算机向打印服务器发送、用户打印文件,计算机向打印服务器发送打印命令,打印机如果空闲,则直接打印,否打印命令,打印机如果空闲,则直接打印,否则把打印文件存储在打印队列中。则把打印文件存储在打印队列中。l2 2、管理员通过课程管理器打印所有课程、管理员通过课程管理器打印所有课程信息信息l坐标轴交换了位置,改为从左到右来表示坐标轴交换了位置,改为从左到右来表示时间的推移时间的推移l用生命线的用生命线的“凹下凸起凹下凸起”来表示状态的变来表示状态的变化,每个水平位置代表一种不同的状态,化,每个水平位置代表一种不同的状态,状态的顺序可以有意义、也可以没有意义状态的顺序可以有意义、也可以没有意义l定时图与顺序图的区别定时图与顺序图的区别l生命线可以跟在一根线后面,在这根线上显生命线可以跟在一根线后面,在这根线上显示些不同的状态值示些不同的状态值,可显示一个度量时间值的可显示一个度量时间值的标尺,用刻度表示时间间隔标尺,用刻度表示时间间隔