1、第五章第五章 需求分析与验证需求分析与验证5.1 5.1 分析模型的表示分析模型的表示 顺序图、通信图、顺序图、通信图、状态图、扩充机制状态图、扩充机制5.2 5.2 需求分析的过程模型需求分析的过程模型5.3 5.3 需求优先级分析需求优先级分析5.4 5.4 用例分析用例分析5.5 5.5 利用快速原型辅助需求分析利用快速原型辅助需求分析5.6 5.6 评审分析模型评审分析模型5.7 5.7 需求规约需求规约5.8 5.8 需求验证需求验证 2022-12-191第五章第五章 需求分析与验证需求分析与验证5.1 5.1 分析模型的表示分析模型的表示 5.1.1 5.1.1 顺序图顺序图 5
2、.1.2 5.1.2 通信图通信图 5.1.3 5.1.3 状态图状态图 5.1.4 5.1.4 扩充机制扩充机制2022-12-1925.1 5.1 分析模型的表示分析模型的表示需求分析的任务:需求分析的任务:在需求获取阶段的输出制品的在需求获取阶段的输出制品的基础上,获得对软件需求的更深入、更完整的理基础上,获得对软件需求的更深入、更完整的理解,并且将软件需求表示为面向软件设计人员、解,并且将软件需求表示为面向软件设计人员、易于修改和维护的分析模型。易于修改和维护的分析模型。基于用例模型建立软件需求的分析模型是基于用例模型建立软件需求的分析模型是需求分需求分析活动的焦点析活动的焦点。在用例
3、模型已成的情形下为何还要构建分析模型?在用例模型已成的情形下为何还要构建分析模型?2022-12-193分析模型的表示分析模型的表示构建分析模型的两点构建分析模型的两点理由:理由:分析模型比用例模型更加结构化、更加清晰分析模型比用例模型更加结构化、更加清晰直观,所以分析模型的构建过程实际上也是不直观,所以分析模型的构建过程实际上也是不断深入理解用例模型的过程,同时也是剔除用断深入理解用例模型的过程,同时也是剔除用例的自然语言描述中可能存在的模糊性和不一例的自然语言描述中可能存在的模糊性和不一致性的过程。致性的过程。分析模型是用例模型与软件设计模型之间的分析模型是用例模型与软件设计模型之间的“桥
4、梁桥梁”,它比用例模型更接近于设计模型,它比用例模型更接近于设计模型,更适合于软件设计师设计软件系统的结构、构更适合于软件设计师设计软件系统的结构、构思软件求解算法,更易于为不太熟悉业务的软思软件求解算法,更易于为不太熟悉业务的软件设计师所理解,换言之,理解分析模型对业件设计师所理解,换言之,理解分析模型对业务知识的要求远低于理解用例模型。务知识的要求远低于理解用例模型。2022-12-194分析模型的表示分析模型的表示需求分析活动参与者:需求分析活动参与者:u主要完成者是来自软件开发方的主要完成者是来自软件开发方的需求工程师需求工程师。u其他参与者包括其他参与者包括软件架构师、利益相关方,以
5、软件架构师、利益相关方,以及项目软件经理、质量保证工程师及项目软件经理、质量保证工程师。需求分析输入与输出:需求分析输入与输出:u输入制品输入制品与需求获取活动的输出制品相同。在与需求获取活动的输出制品相同。在所有这些输入制品中,所有这些输入制品中,用例模型最重要用例模型最重要。u输出制品输出制品主要是软件需求的主要是软件需求的分析模型分析模型。该模型。该模型是需求规约的主要组成部分,同时也是后续软是需求规约的主要组成部分,同时也是后续软件设计、构造和测试活动的工作基础。件设计、构造和测试活动的工作基础。2022-12-195分析模型的表示分析模型的表示分析模型的表示主要采用分析模型的表示主要
6、采用UMLUML的的类图、活动图、交类图、活动图、交互图与状态图。互图与状态图。2022-12-1965.1 5.1 分析模型的表示分析模型的表示用于表示分析模型的用于表示分析模型的UMLUML图形机制主要是类图形机制主要是类图、活动图、交互图与状态图。除此以外,图、活动图、交互图与状态图。除此以外,分析模型及设计模型等可能还需要引入分析模型及设计模型等可能还需要引入UMLUML的扩充机制来表达其标准语法设施无法表的扩充机制来表达其标准语法设施无法表达的语义。达的语义。本节主要内容:本节主要内容:u顺序图顺序图u通信图通信图u状态图状态图uUMLUML的扩充机制。的扩充机制。2022-12-1
7、975.1.1 5.1.1 顺序图顺序图交互图描述一组对象通过交互图描述一组对象通过消息传递消息传递而形成的而形成的协作协作行为行为。交互图的应用:交互图的应用:u经常用于描述经常用于描述单个用例的功能的实现方式单个用例的功能的实现方式,u软件系统在某种给定的使用场景下对象之间的交互协软件系统在某种给定的使用场景下对象之间的交互协作流程,作流程,u软件系统的某个复杂操作的逻辑实现模型。软件系统的某个复杂操作的逻辑实现模型。通过交互图可清晰地了解对象在软件系统中扮演通过交互图可清晰地了解对象在软件系统中扮演的角色以及对象之间的交互协作。的角色以及对象之间的交互协作。2022-12-198顺序图顺
8、序图分类:交互图包括分类:交互图包括顺序图顺序图和和通信图通信图两种。两种。u前者强调前者强调消息传递的时间消息传递的时间序,后者突出序,后者突出交换消息的对交换消息的对象之间的合作关系象之间的合作关系。u虽然它们各有侧重,但从语义上讲基本等价,可从一虽然它们各有侧重,但从语义上讲基本等价,可从一种图自动转换为另一种图,所以没有必要针对同一建种图自动转换为另一种图,所以没有必要针对同一建模目标同时创建顺序图和通信图,这样反而容易引起模目标同时创建顺序图和通信图,这样反而容易引起语义上的冗余和冲突。语义上的冗余和冲突。2022-12-199顺序图顺序图交互图的作用:交互图的作用:u业务分析及需求
9、分析人员业务分析及需求分析人员借助交互图可分析、表述业借助交互图可分析、表述业务处理过程或与软件相关的处理流程;务处理过程或与软件相关的处理流程;u软件设计及实现人员软件设计及实现人员根据交互图确定对象的操作及操根据交互图确定对象的操作及操作实现方法;作实现方法;u测试人员测试人员可从交互图了解软件处理过程并据此设计测可从交互图了解软件处理过程并据此设计测试用例。试用例。图图5.15.1是课程注册管理系统中是课程注册管理系统中“制订选课计划制订选课计划”用用例的顺序图,该图表示将一些课程设置添加至学例的顺序图,该图表示将一些课程设置添加至学生选课计划时软件系统内多个对象之间的交互协生选课计划时
10、软件系统内多个对象之间的交互协作过程。作过程。2022-12-1910图图5.1 5.1 课程注册管理系统中课程注册管理系统中“制订选课计划制订选课计划”用例的顺序图用例的顺序图2022-12-1911(一)顺序图概览(一)顺序图概览顺序图是一张顺序图是一张二维图二维图。其其纵向纵向代表时间轴代表时间轴,时间沿垂直方向向下延伸;,时间沿垂直方向向下延伸;其其横向横向由多个参与由多个参与交互的对象交互的对象构成,这些对象构成,这些对象之间无顺序关系。之间无顺序关系。一般情况下,一般情况下,时间轴上的两点只有相对时序时间轴上的两点只有相对时序的的差异,但在实时应用中,可以使用带时间刻度差异,但在实
11、时应用中,可以使用带时间刻度的时间轴以度量两点之间的绝对时差。的时间轴以度量两点之间的绝对时差。一张基本的顺序图由以下图形元素构成:一张基本的顺序图由以下图形元素构成:对象对象及其生命线与活跃期,消息传递,注解及其生命线与活跃期,消息传递,注解。2022-12-1912顺序图概览顺序图概览顺序图中的对象表示为嵌于矩形框内形如顺序图中的对象表示为嵌于矩形框内形如 “对象名对象名:类名类名”的文本,其中对象名、类名分别可省略,但不能同时的文本,其中对象名、类名分别可省略,但不能同时省略。省略。u当同一类有多个对象参与同一张顺序图所示的交互时,当同一类有多个对象参与同一张顺序图所示的交互时,或者当对
12、象将作为参数出现在本图中的某条消息时,或者当对象将作为参数出现在本图中的某条消息时,对象名就不能省略。对象名就不能省略。对象之下的垂直虚线称为对象的对象之下的垂直虚线称为对象的生命线生命线,表示对,表示对象在始于对象表示图元所处的时间起点、止于对象象在始于对象表示图元所处的时间起点、止于对象生命终结符(见生命终结符(见图图5.15.1中中TimeConflictCheckerTimeConflictChecker对象对象的生命线)之间的时间段内在软件系统中存在。的生命线)之间的时间段内在软件系统中存在。u如果对象生命线的下方没有终结符,则表示对象在顺如果对象生命线的下方没有终结符,则表示对象在
13、顺序图所代表的时间段之后仍然存在。序图所代表的时间段之后仍然存在。2022-12-1913顺序图概览顺序图概览对象中操作的对象中操作的执行期执行期(包括等待同步调用返回(包括等待同步调用返回的时间)称为的时间)称为对象的活跃期对象的活跃期,它由覆盖于对象生,它由覆盖于对象生命线之上的长条形矩形表示。命线之上的长条形矩形表示。如果对象发出传向自身的消息(见如果对象发出传向自身的消息(见图图5.15.1中中TimeConflictChecker TimeConflictChecker 对象的生命线),或者作对象的生命线),或者作为消息接收方的对象在处理消息的过程中又向消为消息接收方的对象在处理消息
14、的过程中又向消息发送方对象传递另一消息,则会导致息发送方对象传递另一消息,则会导致活跃期的活跃期的嵌套嵌套。2022-12-1914顺序图概览顺序图概览对象间的消息传递表示为对象生命线之间的对象间的消息传递表示为对象生命线之间的有向边有向边,边上,边上可标注可标注 “*监护条件监护条件 返回值返回值:=:=消息名消息名(参数表参数表)”)”其中其中“*”为迭代标记,表示同一消息对同一类的多个对象为迭代标记,表示同一消息对同一类的多个对象发送。发送。当出现迭代标记时,监护条件表达式表示迭代条件,例如当出现迭代标记时,监护条件表达式表示迭代条件,例如图图5.15.1中中的的“*对所有无冲突的课程设
15、置对所有无冲突的课程设置”;否则,它表示消息传递实际发生的条件。否则,它表示消息传递实际发生的条件。返回值返回值表示消息被接收方对象处理完成后回送的结果。表示消息被接收方对象处理完成后回送的结果。消息名消息名的命名规则应与类图中操作的命名规则相一致。的命名规则应与类图中操作的命名规则相一致。在消息的在消息的条件表达式条件表达式和和参数表参数表中可以使用关键字中可以使用关键字“self”“self”表示发出消息的源对象。表示发出消息的源对象。2022-12-1915顺序图概览顺序图概览建模者勿需考虑消息发送与接收之间的时延,确需考虑时建模者勿需考虑消息发送与接收之间的时延,确需考虑时(例如,在实
16、时应用中,或者当消息通过网络传输时),(例如,在实时应用中,或者当消息通过网络传输时),可以用斜向下方的消息边来表示,见图可以用斜向下方的消息边来表示,见图5.25.2(c c)。顺序图中的消息分为顺序图中的消息分为同步、异步同步、异步两种,分别用两种,分别用实心三角形实心三角形箭头箭头和和普通箭头普通箭头表示,见表示,见图图5.25.2(a a)和()和(b b)。同步消息的发送者等待消息接收对象将消息处理完成后再同步消息的发送者等待消息接收对象将消息处理完成后再继续,异步消息的发送者在发送完消息后不等待接收方即继续,异步消息的发送者在发送完消息后不等待接收方即继续自己的处理。继续自己的处理
17、。同步消息会指向作为消息接收目标的对象的活跃期的顶端。同步消息会指向作为消息接收目标的对象的活跃期的顶端。2022-12-1916顺序图概览顺序图概览UMLUML中有四种特殊的消息:中有四种特殊的消息:自消息、返回消自消息、返回消息、创建(息、创建(createcreate)消息、销毁()消息、销毁(destroydestroy)消息消息。u自消息自消息是指一个对象传向其自身的消息。是指一个对象传向其自身的消息。u如果一条消息从对象如果一条消息从对象a a传向对象传向对象b b,那么其返回消,那么其返回消息是一条从息是一条从b b指向指向a a的虚线有向边,它表示原消息的虚线有向边,它表示原消
18、息的处理已经完成,处理结果(如果有的话)沿返的处理已经完成,处理结果(如果有的话)沿返回回消息传回消息传回。2022-12-1917顺序图概览顺序图概览u创建消息、销毁消息的名称分别为创建消息、销毁消息的名称分别为 create create、destroydestroy,或或 在消息边上标注构造型在消息边上标注构造型 、,分别表示对消息传递的目标对象的创建和删除分别表示对消息传递的目标对象的创建和删除。对于对于创建消息,目标对象的矩形表示图元的纵向创建消息,目标对象的矩形表示图元的纵向位置应位于消息接收点(因为在此之前此对象并位置应位于消息接收点(因为在此之前此对象并不存在)。不存在)。对于
19、销毁消息,其目标对象的生命线应恰在消息对于销毁消息,其目标对象的生命线应恰在消息接收点之下显示终结符。接收点之下显示终结符。2022-12-1918可以在对象生命线上可以在对象生命线上嵌入状态符嵌入状态符,它表,它表示对象在状态符所处的时间点上必定进入示对象在状态符所处的时间点上必定进入相应的状态。相应的状态。还可以用状态符来表示来自其他对象的某还可以用状态符来表示来自其他对象的某条消息将导致对象状态的改变,此时状态条消息将导致对象状态的改变,此时状态符应在时间轴方向上靠近那条消息。符应在时间轴方向上靠近那条消息。如,如,图图5.35.3表示,表示,ScheduleSchedule对象在收到对
20、象在收到“confirm”“confirm”消息后将进入消息后将进入“confirmed”“confirmed”状态。状态。2022-12-1919顺序图概览顺序图概览在顺序图的左侧,可加在顺序图的左侧,可加注解注解以以阐释消息的意义、阐释消息的意义、有关的约束以及消息传递时间点之间的延时约束。有关的约束以及消息传递时间点之间的延时约束。注解处的位置应在注解处的位置应在水平方向上与对应的消息相齐水平方向上与对应的消息相齐。为精确地描述延时约束,可以在对象的生命线或为精确地描述延时约束,可以在对象的生命线或活跃期上标注时间标签,见图活跃期上标注时间标签,见图5.25.2(c c)。当用例图中的执
21、行者的实例出现在顺序图中时,当用例图中的执行者的实例出现在顺序图中时,它与软件系统内部对象之间的交互消息不同于两它与软件系统内部对象之间的交互消息不同于两个内部对象之间的交互,仅依靠消息名、参数表个内部对象之间的交互,仅依靠消息名、参数表来描述此类消息往往过于形式化,也难以完整、来描述此类消息往往过于形式化,也难以完整、详尽地表达交互的内容,因此应该在注解中以自详尽地表达交互的内容,因此应该在注解中以自然语言予以阐述。然语言予以阐述。2022-12-1920图图 5.25.2 同步、异步及带时延的消息同步、异步及带时延的消息 (b b)异步消息)异步消息2022-12-1921 (a)同步消息
22、(c)带时延的消息图图5.3 5.3 嵌入状态符的对象生命线嵌入状态符的对象生命线2022-12-1922(二)主动对象与被动对象(二)主动对象与被动对象考察整张顺序图(而非局部),在该图表示的时间段内,考察整张顺序图(而非局部),在该图表示的时间段内,如果有如果有多个对象同时处于活跃期多个对象同时处于活跃期,其中,其中某些对象的活跃是某些对象的活跃是直接或间接地起因于某个对象直接或间接地起因于某个对象A A传出的消息传出的消息,则称,则称A A为主动为主动对象对象,称由,称由A A直接或间接激活的对象为直接或间接激活的对象为被动对象被动对象。被动对象在响应、处理消息时接受消息源对象的控制,在
23、被动对象在响应、处理消息时接受消息源对象的控制,在消息处理完毕后将控制权交还,其活跃期的顶部位于消息消息处理完毕后将控制权交还,其活跃期的顶部位于消息接收点,底部位于消息处理完成时刻点。接收点,底部位于消息处理完成时刻点。如,在如,在图图5.15.1和和图图5.5.3 3中,中,ScheduleManagerScheduleManager对象为主动对对象为主动对象,其他对象为被动对象。象,其他对象为被动对象。主动对象在顺序图中以带主动对象在顺序图中以带双竖线的矩形双竖线的矩形表示,也可以采用表示,也可以采用约束特性约束特性activeactive来表示,见来表示,见图图5.45.4。2022-
24、12-1923主动对象与被动对象主动对象与被动对象在一张顺序图中,可能在一张顺序图中,可能存在多个主动对象存在多个主动对象。u此时,这些主动对象所掌控的控制流将此时,这些主动对象所掌控的控制流将并发执行并发执行。u两个主动对象之间的消息传递应该是两个主动对象之间的消息传递应该是异步的异步的。l由于多个主动对象引起的上述语义复杂性,所以建模者应由于多个主动对象引起的上述语义复杂性,所以建模者应尽量避免这种情形,仅在确需强调多个主动对象所掌控的尽量避免这种情形,仅在确需强调多个主动对象所掌控的控制流的并发性及它们之间的异步消息时,才在一张顺序控制流的并发性及它们之间的异步消息时,才在一张顺序图中引
25、入多个主动对象。图中引入多个主动对象。l如,在图如,在图5.35.3所示的场景中,单个主动对象就已足够;但所示的场景中,单个主动对象就已足够;但在刻画协同工作场景时,需要强调任务负责人及多个子任在刻画协同工作场景时,需要强调任务负责人及多个子任务承担者之间的并行处理,就必须引入多个主动对象,见务承担者之间的并行处理,就必须引入多个主动对象,见图图5.45.4。2022-12-1924图图5.4 5.4 多个主动对象构成的顺序图多个主动对象构成的顺序图2022-12-1925(三)建模规则(三)建模规则在进行顺序图建模过程中,建议读者遵循以下经在进行顺序图建模过程中,建议读者遵循以下经验规则:验
26、规则:在业务分析和需求分析阶段,建模者并不需要在业务分析和需求分析阶段,建模者并不需要过于精细地刻画顺序图的所有图形元素。过于精细地刻画顺序图的所有图形元素。消息名和消息传递条件均可采用业务术语及自然消息名和消息传递条件均可采用业务术语及自然语言描述,消息的参数表可以省略。语言描述,消息的参数表可以省略。2022-12-1926建模规则建模规则无论是在分析阶段还是在设计阶段,建模者无论是在分析阶段还是在设计阶段,建模者均应聚焦于均应聚焦于对象间关键的、主要的交互对象间关键的、主要的交互,避免,避免因过多的细节而使顺序图含混不清、复杂不堪。因过多的细节而使顺序图含混不清、复杂不堪。如如u作为业务
27、分析或需求分析模型的顺序图不必考作为业务分析或需求分析模型的顺序图不必考虑用户界面对象与业务对象之间的交互、数据的虑用户界面对象与业务对象之间的交互、数据的持久存储等问题。持久存储等问题。u除非特别必要,一般应尽量避免显式表示返回、除非特别必要,一般应尽量避免显式表示返回、创建、销毁消息及对象生命终结符,也不需要显创建、销毁消息及对象生命终结符,也不需要显式区分同步、异步消息。式区分同步、异步消息。u勿需过多考虑对象的活跃期图元,也不需显式勿需过多考虑对象的活跃期图元,也不需显式表示活跃期的嵌套,一般利用建模工具自动生成表示活跃期的嵌套,一般利用建模工具自动生成的活跃期图元即可。的活跃期图元即
28、可。2022-12-1927建模规则建模规则在设计和实现模型中,如果消息的参数与顺在设计和实现模型中,如果消息的参数与顺序图表述的控制逻辑无关,仅起占位符作用,序图表述的控制逻辑无关,仅起占位符作用,则在消息的参数表中用参数的类型名(大写字则在消息的参数表中用参数的类型名(大写字母开头)表示此参数;母开头)表示此参数;u否则,应尽量采用实例名(小写字母开头)表示否则,应尽量采用实例名(小写字母开头)表示此参数,建模者应保证顺序图的读者能够从实例此参数,建模者应保证顺序图的读者能够从实例名直观、无歧义地推断出参数的类型,如果不然,名直观、无歧义地推断出参数的类型,如果不然,应在参数表中同时示出参
29、数类型和参数实例名。应在参数表中同时示出参数类型和参数实例名。u对消息的返回值,如果后续的消息需要在条件表对消息的返回值,如果后续的消息需要在条件表达式或参数表中使用此返回值,则需给出其实例达式或参数表中使用此返回值,则需给出其实例名;名;u否则,如果建模者需要强调返回值类型,则可采否则,如果建模者需要强调返回值类型,则可采用用“消息名(参数表)消息名(参数表):返回值类型返回值类型”的形式表的形式表示消息;示消息;u其他情况下,应忽略消息的返回值。其他情况下,应忽略消息的返回值。2022-12-1928(四)布局规则(四)布局规则尽管尽管对象在水平轴上的次序没有严格的语义信息对象在水平轴上的
30、次序没有严格的语义信息,但建模应遵,但建模应遵循以下循以下布局规则布局规则:将用例的主动执行者实例安排在顺序图左侧;被动执行者将用例的主动执行者实例安排在顺序图左侧;被动执行者实例安排在顺序图右侧。实例安排在顺序图右侧。采用分层设计时,应将同层对象放在一起采用分层设计时,应将同层对象放在一起u每层对象的排序规则是:接近用户界面层靠左,接近后台每层对象的排序规则是:接近用户界面层靠左,接近后台处理层(如,数据持久存储层)靠右;处理层(如,数据持久存储层)靠右;u在软件分层结构中相邻的层,其对象集合在顺序图的水平在软件分层结构中相邻的层,其对象集合在顺序图的水平布局中也相邻。布局中也相邻。u因同层
31、对象交互较多,相邻层间的交互较少,跨层交互更因同层对象交互较多,相邻层间的交互较少,跨层交互更少,所以此排序规则可有效缩短消息边的长度,简化顺序少,所以此排序规则可有效缩短消息边的长度,简化顺序图。图。在遵守以上两条规则的同时,对象的排序应尽量缩短消息在遵守以上两条规则的同时,对象的排序应尽量缩短消息边的长度,并且尽量使消息边的方向从左至右。边的长度,并且尽量使消息边的方向从左至右。2022-12-1929布局规则布局规则关于消息边上文字的位置,有以下布局规则:关于消息边上文字的位置,有以下布局规则:如果模型读者辨识消息的目标对象较辨识消息的源对象如果模型读者辨识消息的目标对象较辨识消息的源对
32、象为难,则文字应置于消息的目标端为难,则文字应置于消息的目标端;否则;否则,文字应置于消,文字应置于消息的源端。息的源端。当消息的源和目标都易于辨识时,建模者可将文字置于任当消息的源和目标都易于辨识时,建模者可将文字置于任意一端(不宜将文字置于消息边的中间位置),但在本项意一端(不宜将文字置于消息边的中间位置),但在本项目的所有顺序图中应保持风格一致。目的所有顺序图中应保持风格一致。返回消息上的文字一定要置于消息的目标端。返回消息上的文字一定要置于消息的目标端。2022-12-19305.1.2 5.1.2 通信图通信图通信图是顺序图的另一种表现形式。通信图是顺序图的另一种表现形式。如,图如,
33、图5.55.5是与图是与图5.15.1所示的顺序图等价的通信图所示的顺序图等价的通信图(除注解外)(除注解外)2022-12-19312022-12-1932图5.5 课程注册管理系统中“制订选课计划”用例的通信图(一)通信图概览(一)通信图概览通信图的构成元素:通信图的构成元素:通信图的通信图的节点节点是是参与交互的对象参与交互的对象,这些对象的表示方法,这些对象的表示方法与顺序图相同。与顺序图相同。由于由于不再设置单独的时间维度,所以对象在通信图中可不再设置单独的时间维度,所以对象在通信图中可自由定位。自由定位。对象之间的连接称为对象之间的连接称为连接器连接器(connectorconne
34、ctor),它扮演),它扮演对对象之间的消息传递通道象之间的消息传递通道的角色。的角色。连接器可以是连接器可以是无向的无向的,表示此通道支持,表示此通道支持双向双向的消息传递;的消息传递;也可以是也可以是有向的有向的,此时消息只能,此时消息只能沿连接器的方向传递沿连接器的方向传递。在在连接器的两端可以标注连接器的两端可以标注角色名角色名,这与类图中的关联边,这与类图中的关联边相似。相似。在连接器上可以标示一到多条消息。在连接器上可以标示一到多条消息。每条消息的传递方向用每条消息的传递方向用靠近消息的小箭头靠近消息的小箭头表示。表示。与顺序图一样,通信图中也可以区分同步、异步消息,与顺序图一样,
35、通信图中也可以区分同步、异步消息,以及返回消息、创建消息和销毁消息。以及返回消息、创建消息和销毁消息。2022-12-1933通信图概览通信图概览通信图中消息的描述语法与顺序图稍有差异,形如:通信图中消息的描述语法与顺序图稍有差异,形如:序号序号 迭代描述符迭代描述符:条件条件返回值返回值:=:=消息名消息名(参数参数表表):):返回类型返回类型,其中:其中:消息序号采用多层结构化标号。消息序号采用多层结构化标号。如,如,“1.1”“1.1”表示第表示第1 1个步骤中的第个步骤中的第1 1个子步骤,个子步骤,“1.2”“1.2”在时序上一定位于在时序上一定位于“1.1”“1.1”之后,之后,“
36、1.1.3”“1.1.3”表示表示“1.1”“1.1”中的第中的第3 3个子步骤,如此等等。个子步骤,如此等等。在序号中可以在序号中可以嵌入小写字母表示线程名嵌入小写字母表示线程名,用来强调,用来强调并发并发的的消息传递,消息传递,如,如,“1.1a”“1.1a”和和“1.1b”“1.1b”所标引的消息在步骤所标引的消息在步骤“1.1”“1.1”中中可以并发传递,可以并发传递,“1.1b.4”“1.1b.4”表示表示“1.1”“1.1”步骤的第步骤的第2 2个线程个线程中的第中的第4 4个子步骤。个子步骤。2022-12-1934通信图概览通信图概览通信图也可通过通信图也可通过消息序号来表示消
37、息传递的时间序消息序号来表示消息传递的时间序,只不,只不过这种表示不如顺序图那样直观。过这种表示不如顺序图那样直观。迭代描述符形如迭代描述符形如“*迭代条件迭代条件”,表示同一条消息的,表示同一条消息的反复传递,见反复传递,见图图5.55.5中序号为中序号为1.2.21.2.2、1.31.3和和1.41.4的消息前的的消息前的迭代描述符示例。迭代描述符示例。当序号或迭代描述符出现时,第一个分隔符当序号或迭代描述符出现时,第一个分隔符“:”“:”必须必须出现;否则,该分隔符应隐藏。出现;否则,该分隔符应隐藏。条件、返回值、消息名、参数表的表示及意义与顺序图条件、返回值、消息名、参数表的表示及意义
38、与顺序图相同。相同。2022-12-1935通信图概览通信图概览通信图的对象图元附近,可使用以下约束:通信图的对象图元附近,可使用以下约束:“new”“new”表示该对象是在本通信图表示的交互表示该对象是在本通信图表示的交互过程中因对象创建消息而获得生命的。过程中因对象创建消息而获得生命的。“destroyed”“destroyed”表示该对象是在本通信图表示表示该对象是在本通信图表示的交互过程中因对象销毁消息而结束生命的。的交互过程中因对象销毁消息而结束生命的。“transient”“transient”表示该对象在本通信图表示的表示该对象在本通信图表示的交互过程中既被创建,此后又被销毁。交
39、互过程中既被创建,此后又被销毁。2022-12-1936通信图概览通信图概览如果两个对象之间如果两个对象之间存在消息传递存在消息传递,那么它,那么它们所属的类之间起码应们所属的类之间起码应存在依赖关系存在依赖关系。这。这就要求建模者必须仔细检查就要求建模者必须仔细检查顺序图及通信顺序图及通信图与类图之间的一致性图与类图之间的一致性。发现发现不一致性,有两种处理方法:不一致性,有两种处理方法:u 在类图中添加必要的依赖或关联关系在类图中添加必要的依赖或关联关系;u 在在整个项目中约定,如果两个类的对象之间整个项目中约定,如果两个类的对象之间有消息传递,即便类图中未显示它们之间的依有消息传递,即便
40、类图中未显示它们之间的依赖关系,也隐含地认为该依赖关系实际上存赖关系,也隐含地认为该依赖关系实际上存在。在。2022-12-1937(二)布局规则(二)布局规则尽管对象在通信图中可自由定位,但建模者应遵循以下规则:尽管对象在通信图中可自由定位,但建模者应遵循以下规则:对象按行上下对齐,按列左右对齐,连接器绘制成水平对象按行上下对齐,按列左右对齐,连接器绘制成水平线段、垂直线段或者由水平、垂直两种线段组合而成的折线段、垂直线段或者由水平、垂直两种线段组合而成的折线,避免斜线。线,避免斜线。如果有用例的主动执行者的实例,则它应位于通信图的如果有用例的主动执行者的实例,则它应位于通信图的左上部;如果
41、有用例的被动执行者的实例,则它应位于通左上部;如果有用例的被动执行者的实例,则它应位于通信图的右侧。信图的右侧。当采用分层设计的思想(见第七章)时,分层对象的布当采用分层设计的思想(见第七章)时,分层对象的布局方法与顺序图中类似,不过通信图允许同层的多个对象局方法与顺序图中类似,不过通信图允许同层的多个对象布局成多行、多列。布局成多行、多列。在遵守以上三条规则的同时,对象的排列应尽量缩短连在遵守以上三条规则的同时,对象的排列应尽量缩短连接器的长度,并且尽量使消息的传递方向从左至右、从上接器的长度,并且尽量使消息的传递方向从左至右、从上至下至下。当然。当然,也不能禁绝从右至左、从下而上的消息传,
42、也不能禁绝从右至左、从下而上的消息传递。递。2022-12-1938(三)顺序图与通信图之间的选取(三)顺序图与通信图之间的选取顺序图和通信图互为派生视图,建模者往往面临选用顺序顺序图和通信图互为派生视图,建模者往往面临选用顺序图还是通信图的困惑。图还是通信图的困惑。建议读者依次考虑以下规则(前面的规则优先级较高):建议读者依次考虑以下规则(前面的规则优先级较高):当需要强调消息传递的时间序时采用顺序图;当需要强调消息传递的时间序时采用顺序图;当需要强调对象之间的交互、协作关系时采用通信图。当需要强调对象之间的交互、协作关系时采用通信图。当刻画用例的动作序列时,采用顺序图;当刻画用例的动作序列
43、时,采用顺序图;当刻画软件内部等某项功能的实现构想时,采用通信当刻画软件内部等某项功能的实现构想时,采用通信图。图。在业务分析和需求建模阶段,优先考虑顺序图;在设在业务分析和需求建模阶段,优先考虑顺序图;在设计和实现阶段,优先考虑通信图。计和实现阶段,优先考虑通信图。2022-12-19395.1.3 5.1.3 状态图状态图定义定义 :状态图描述一个状态图描述一个实体实体在事件刺激下的在事件刺激下的反应反应式动态行为式动态行为。构成:构成:它包含实体所有可能的它包含实体所有可能的状态状态、在每个状态、在每个状态下能够响应的下能够响应的事件事件以及事件发生时的状态变迁与以及事件发生时的状态变迁
44、与响应响应动作动作。实体实体可以是类的可以是类的典型对象典型对象,也可以是一个,也可以是一个软件系统软件系统(或其子部分)或其中一个软构件(或其子部分)或其中一个软构件,甚至也可以是包,甚至也可以是包含目标软件系统的含目标软件系统的整个大系统整个大系统。作用:作用:状态图可分别用来描述一个类的典型对象、状态图可分别用来描述一个类的典型对象、软件系统、软构件或系统的行为。软件系统、软构件或系统的行为。2022-12-1940状态图状态图并不需要对所有类建立状态图,并不需要对所有类建立状态图,仅针对系统中比较重要的仅针对系统中比较重要的类,并且其对象的行为比较复杂,行为的状态特征比较明类,并且其对
45、象的行为比较复杂,行为的状态特征比较明显的类建立状态图即可。显的类建立状态图即可。u“状态特征明显状态特征明显”指,对象在其生命周期中的行为模指,对象在其生命周期中的行为模式与其当前状态相关,对于同一事件,对象的状态不式与其当前状态相关,对于同一事件,对象的状态不同会导致事件响应行为的不同。同会导致事件响应行为的不同。图图5.65.6是对应于课程注册管理系统中是对应于课程注册管理系统中“课程设置课程设置”类的状类的状态图,图态图,图5.75.7是对应于某个购物网中是对应于某个购物网中“注册客户注册客户”类的结类的结构化状态图。构化状态图。2022-12-1941图图5.6 5.6 课程注册管理
46、系统中课程注册管理系统中“课程设置课程设置”类的典型对象的状态图类的典型对象的状态图2022-12-1942(一)相关概念(一)相关概念UMLUML的状态图四个基本概念:的状态图四个基本概念:状态状态 事件事件 活动(活动(activityactivity)动作(动作(actionaction)状态状态 对象的状态对应于由对象的状态对应于由对象的属性对象的属性构成的一个约束条件,无构成的一个约束条件,无论对象在其生命周期中属性值如何变化,当属性值满足此论对象在其生命周期中属性值如何变化,当属性值满足此约束条件时,对象对事件的响应行为完全一样。约束条件时,对象对事件的响应行为完全一样。因此,也可
47、以将对象的状态定义为对象的具有统一行为模因此,也可以将对象的状态定义为对象的具有统一行为模式的某个生命周期阶段。式的某个生命周期阶段。2022-12-1943事件事件 在对象生命周期中某时刻发生的、值得关注的针对该对在对象生命周期中某时刻发生的、值得关注的针对该对象的一种瞬时象的一种瞬时刺激或触动刺激或触动,包括:,包括:u消息型事件:消息型事件:其他对象传向该对象的同步消息,表示为其他对象传向该对象的同步消息,表示为 “消息名消息名(参数表参数表)”)”;u信号型事件:信号型事件:其他对象传向该对象的异步信号,表示为其他对象传向该对象的异步信号,表示为 “信号名信号名(参数表参数表)”)”;
48、u时间型事件:时间型事件:时间到达指定的绝对时刻点或到达指定时间之后的相对时时间到达指定的绝对时刻点或到达指定时间之后的相对时刻点,分别表示为刻点,分别表示为 “at(“at(绝对时间点绝对时间点)”)”、“after(“after(基准时间点基准时间点,时延时延)”)”;u条件型事件:条件型事件:对象所处环境及对象属性值的变化导致某个条件成立,表对象所处环境及对象属性值的变化导致某个条件成立,表示为示为“when(when(条件表达式条件表达式)”)”。信号型事件的命名最好采用过去式,例如,信号型事件的命名最好采用过去式,例如,“属性已改属性已改变变”。2022-12-1944相关概念相关概
49、念活动和动作都是计算过程,在过程中可以向对活动和动作都是计算过程,在过程中可以向对象发送同步消息或异步信号,创建或删除对象等。象发送同步消息或异步信号,创建或删除对象等。活动与动作之间的差异在于:活动与动作之间的差异在于:u 动作动作位于状态之间的迁移边上,比较简单,执行时间位于状态之间的迁移边上,比较简单,执行时间短;短;u活动位于状态中,可以比动作复杂、执行时间稍长。活动位于状态中,可以比动作复杂、执行时间稍长。2022-12-1945(二)基本机制(二)基本机制状态图的基本机制:状态图的基本机制:状态节点由状态名及可选的状态节点由状态名及可选的入口活动、出口活动、入口活动、出口活动、do
50、do活动、内部迁移活动、内部迁移构成。构成。u一旦对象经迁移边从其他状态进入本状态,那么本状一旦对象经迁移边从其他状态进入本状态,那么本状态态入口活动将被执行入口活动将被执行。u一旦对象经迁移边从本状态进入其他状态,那么本状一旦对象经迁移边从本状态进入其他状态,那么本状态的态的出口活动将被执行出口活动将被执行。udodo活动活动是当对象进入本状态并执行完入口活动(如果是当对象进入本状态并执行完入口活动(如果有的话)后应该执行的活动。有的话)后应该执行的活动。u内部迁移内部迁移不会引起对象状态的变化不会引起对象状态的变化,所以它虽有源状,所以它虽有源状态(包含此迁移的状态),但没有目标状态。态(