1、第10章 状态图与活动图10.1 动态建模概述动态建模概述 10.2 状态图状态图10.3 活动图活动图10.4 活动图与状态图的比较活动图与状态图的比较 10.1 动态建模概述动态建模概述1.1.状态图与活动图在系统建模中状态图与活动图在系统建模中的位置的位置在在UMLUML软件开发过程中,是通软件开发过程中,是通过建立过建立业务用例模型业务用例模型对系统进行需对系统进行需求分析的,对于某些重要的用例采求分析的,对于某些重要的用例采用用活动图活动图来配合描述用例具体实现来配合描述用例具体实现的流程,在系统分析阶段也经常用的流程,在系统分析阶段也经常用活动图来进一步深入描述用例图的活动图来进一
2、步深入描述用例图的具体功能实现流程。具体功能实现流程。在系统分析与系统设计阶段都在系统分析与系统设计阶段都涉及到对象类的涉及到对象类的动态建模动态建模。对象的。对象的动态模型是描述系统的动态行为的,动态模型是描述系统的动态行为的,分为状态模型和交互模型分为状态模型和交互模型。在在UMLUML中,用中,用状态图和活动图状态图和活动图为状态模型建模,用顺序图和合作为状态模型建模,用顺序图和合作图为交互模型建模。图为交互模型建模。需求分析需求分析系统分析系统分析实现测试部署系统设计系统设计用例建模用例建模对象类建模对象类建模对象交互模型:对象交互模型:顺序图顺序图/协作图协作图对象状态模型:对象状态
3、模型:状态图状态图/活动图活动图活动图活动图1 10 0章章 状状态态图图与与活活动动图图 10.1 动态建模概述动态建模概述1.1.状态图与活动图在系状态图与活动图在系统建模中的位置统建模中的位置在系统分析系统阶段用在系统分析系统阶段用状状态图和活动图态图和活动图为对象动态模型为对象动态模型中的状态模型建模。中的状态模型建模。在系统设计阶段阶段对已在系统设计阶段阶段对已经建立的对象动态模型(经建立的对象动态模型(状态状态图、活动图图、活动图、顺序图和协作图顺序图和协作图)采用迭代式的方式进一步细化采用迭代式的方式进一步细化和完善。和完善。需求分析需求分析系统分析系统分析实现测试部署系统设计系
4、统设计用例建模用例建模对象类建模对象类建模对象交互模型:对象交互模型:顺序图顺序图/协作图协作图对象状态模型:对象状态模型:状态图状态图/活动图活动图活动图活动图1 10 0章章 状状态态图图与与活活动动图图10.1 动态建模概述动态建模概述2.系统设计做什么?系统设计做什么?在在UML 的面向对象开发过程,系统设计是在系统分析的基础上,的面向对象开发过程,系统设计是在系统分析的基础上,对系统分析阶段建立的对象静态模型、对象的动态模型的进一步细化,对系统分析阶段建立的对象静态模型、对象的动态模型的进一步细化,是对这些模型的更加详细的设计、补充和完善。是对这些模型的更加详细的设计、补充和完善。系
5、统设计时,从类中导出对象,关注对象的关系、行为和系统设计时,从类中导出对象,关注对象的关系、行为和对象间对象间的通信是如何实现的的通信是如何实现的。对每个类的属性和操作出更详细的设计,并设。对每个类的属性和操作出更详细的设计,并设计相关联类间的消息规约。加入计相关联类间的消息规约。加入接口类对象接口类对象,建立更完整的,建立更完整的对象的静对象的静态、动态模型态、动态模型。系统设计包括系统对象设计、系统体系结构设计和系统设计的优系统设计包括系统对象设计、系统体系结构设计和系统设计的优化和审查。化和审查。(需求分析的用例模型(需求分析的用例模型 反映系统反映系统能做什么能做什么?系统分析的对象类
6、建?系统分析的对象类建模是关心系统模是关心系统对谁做对谁做的问题,而系统设计的动态建模是解决系统的问题,而系统设计的动态建模是解决系统如何如何做做的。)的。)1 10 0章章 状状态态图图与与活活动动图图10.1 动态建模概述动态建模概述3.顺序图做什么?顺序图做什么?顺序图(顺序图(Sequence Diagram)描述了)描述了对象对象之间之间传送消传送消息息的时间顺序,它用来表示的时间顺序,它用来表示用例中用例中的的行为顺序行为顺序,当执行一个,当执行一个用例行为时,顺序图中的每条消息对应了一个类操作中引起用例行为时,顺序图中的每条消息对应了一个类操作中引起转换的触发事件。转换的触发事件
7、。1)确认和丰富一个使用语境的逻辑表达。确认和丰富一个使用语境的逻辑表达。一个系统的使用情境就一个系统的使用情境就是系统潜在的使用方式的描述,也就是它的名称所要描述的。是系统潜在的使用方式的描述,也就是它的名称所要描述的。一个使用情境的逻辑可能是一个用例的一部分,或是一条控一个使用情境的逻辑可能是一个用例的一部分,或是一条控制流。制流。2)细化用例的表达细化用例的表达。我们前面已经提到,序列图的主要用途之一,。我们前面已经提到,序列图的主要用途之一,就是把用例表达的需求,转化为进一步、更加正式层次的精就是把用例表达的需求,转化为进一步、更加正式层次的精细表达。用例常常被细化为一个或者更多的序列
8、图。细表达。用例常常被细化为一个或者更多的序列图。3)有效地描述如何分配各个类的职责以及各类具有相应职责的原有效地描述如何分配各个类的职责以及各类具有相应职责的原因因。我们可以根据对象之间的交互关系来定义类的职责,各。我们可以根据对象之间的交互关系来定义类的职责,各个类之间的交互关系构成一个特定的用例。个类之间的交互关系构成一个特定的用例。1 10 0章章 状状态态图图与与活活动动图图10.1 动态建模概述动态建模概述4.协作图做什么?协作图做什么?协作图(协作图(Collaboration DiagramCollaboration Diagram)是顺序图之外的另一)是顺序图之外的另一种表示
9、交互的方法。主要描述种表示交互的方法。主要描述协作对象间的交互和链接,强调协作对象间的交互和链接,强调的是对象结构相关的信息的是对象结构相关的信息。顺序图和协作图都描述交互,但是。顺序图和协作图都描述交互,但是顺序图强调的是时间,而顺序图强调的是时间,而协作图强调的是空间协作图强调的是空间。1 1)通过描绘对象之间消息的传递情况来反映具体的使用语境的通过描绘对象之间消息的传递情况来反映具体的使用语境的逻辑表达。一个使用情境的逻辑可能是一个用例的一部分,或逻辑表达。一个使用情境的逻辑可能是一个用例的一部分,或是一条控制流。这和序列图的作用类似。是一条控制流。这和序列图的作用类似。2 2)显示对象
10、及其交互关系的空间组织结构显示对象及其交互关系的空间组织结构。协作图显示了在交。协作图显示了在交互过程中各个对象之间的组织交互关系以及对象彼此之间的链互过程中各个对象之间的组织交互关系以及对象彼此之间的链接。与序列图不同,协作图显示的是对象之间的关系,并不侧接。与序列图不同,协作图显示的是对象之间的关系,并不侧重交互的顺序,它没有将时间作为一个单独的维度,而是使用重交互的顺序,它没有将时间作为一个单独的维度,而是使用序列号来确定消息及并发线程的顺序。序列号来确定消息及并发线程的顺序。3 3)表现一个类操作的实现表现一个类操作的实现。协作图可以说明类操作中使用到的。协作图可以说明类操作中使用到的
11、参数、局部变量以及返回值等。当使用协作图表现一个系统行参数、局部变量以及返回值等。当使用协作图表现一个系统行为时,消息编号对应了程序中嵌套调用结构和信号传递过程。为时,消息编号对应了程序中嵌套调用结构和信号传递过程。1 10 0章章 状状态态图图与与活活动动图图10.1 动态建模概述动态建模概述5.状态图做什么?状态图做什么?状态图状态图(State DiagramState Diagram)主要用来描述对象、子系统、系主要用来描述对象、子系统、系统的生命周期。通过状态图统的生命周期。通过状态图可以表现系统中一个可以表现系统中一个对象对象所具有的所具有的各种各种状态状态和这个对象从一种状态到另
12、一种状态的转换(和这个对象从一种状态到另一种状态的转换(迁移迁移),),以及影响对象这些状态的以及影响对象这些状态的事件事件(如收到消息、时间已到、报错、(如收到消息、时间已到、报错、条件为真)等。它主要描述某个对象从一个状态到另一个状态条件为真)等。它主要描述某个对象从一个状态到另一个状态变化迁移的变化迁移的控制流控制流。1 10 0章章 状状态态图图与与活活动动图图10.1 动态建模概述动态建模概述6.活动图做什么?活动图做什么?活动图(图(Activity DiagramActivity Diagram)主要用于描述系统中对象的)主要用于描述系统中对象的一个一个活动活动到另一个活动的到另
13、一个活动的控制流控制流、一个事务的、一个事务的活动序列活动序列、工作工作的流程的流程和和并发并发的处理能力。的处理能力。需求分析中的活动图主要用来配合描述某个重要的用例,图主要用来配合描述某个重要的用例,用图型的方式对用例的具体实现的过程进行描述用图型的方式对用例的具体实现的过程进行描述,这样比文字,这样比文字的描述更直观、更准确地说明用例的功能,在系统分析与设计的描述更直观、更准确地说明用例的功能,在系统分析与设计过程中,经常用活动图进一步深入描述用例图的具体实现流程。过程中,经常用活动图进一步深入描述用例图的具体实现流程。系统设计中的活动图对系统的系统设计中的活动图对系统的业务工作流业务工
14、作流、操作建模,操作建模,它它描述业务流中从一个活动到另一个活动的控制流。它描述活动描述业务流中从一个活动到另一个活动的控制流。它描述活动的序列,用来的序列,用来分析和验证用例分析和验证用例,理解工作流程,理解工作流程,描述复杂过程描述复杂过程的算法的算法,并具支持带条件的行为和并,并具支持带条件的行为和并发行的多程建模发行的多程建模。1 10 0章章 状状态态图图与与活活动动图图10.2 状态图状态图10.2.1 状态图概述状态图概述10.2.2 状态图的组成状态图的组成10.2.3 状态图创建案例状态图创建案例1 10 0章章 状状态态图图与与活活动动图图10.2.1 状态图概述状态图概述
15、状态图(状态图(Statechart Diagram)是软件系统进行)是软件系统进行面向对象分析的一种常用工具,它通过建立面向对象分析的一种常用工具,它通过建立对象、子系对象、子系统、系统的生命周期统、系统的生命周期模型(状态)来描述对象、子系统模型(状态)来描述对象、子系统随时间变化的动态行为。随时间变化的动态行为。状态图详细说明了一个对象生命周期内的可能的状态图详细说明了一个对象生命周期内的可能的状状态态序列,状态允许发生的序列,状态允许发生的迁移迁移,会引起迁移发生的事件,会引起迁移发生的事件,以及为了响应事件而执行的以及为了响应事件而执行的行为行为。1 10 0章章 状状态态图图与与活
16、活动动图图10.2.1 状态概述状态概述并不是对所有的对象都创建并不是对所有的对象都创建状态图,只有当状态图,只有当行为的改变和状态行为的改变和状态有关有关时才创建状态图。时才创建状态图。如图书管理系统中的图书如图书管理系统中的图书(相关:新书、在架、预订、借出、(相关:新书、在架、预订、借出、注销)和读者帐号(有效、挂失、注销)和读者帐号(有效、挂失、失效)可以创建其状态图,而图书失效)可以创建其状态图,而图书管理员帐号则没有必要建立状态图。管理员帐号则没有必要建立状态图。与类图、对象图和用例图不与类图、对象图和用例图不同,同,状态图只能对单个对象建立模状态图只能对单个对象建立模型型,而类图
17、、对象图和用例图可以,而类图、对象图和用例图可以对一个系统或一组类建立模型。对一个系统或一组类建立模型。1 10 0章章 状状态态图图与与活活动动图图10.2.1 状态概述状态概述状态图清晰地描述了状态之间的转换顺序,通过状态的转换顺状态图清晰地描述了状态之间的转换顺序,通过状态的转换顺序可以清晰看出事件的序可以清晰看出事件的执行顺序执行顺序。清晰的事件顺序有利于程序员在开发程序时避免出现事件错序清晰的事件顺序有利于程序员在开发程序时避免出现事件错序的情况。的情况。状态图清晰地描述了状态转换时所必须触发的状态图清晰地描述了状态转换时所必须触发的事件、监护条件事件、监护条件和动作和动作等影响转换
18、的因素。等影响转换的因素。状态图通过判定可以更好地描述工作流因为不同的条件发生的状态图通过判定可以更好地描述工作流因为不同的条件发生的分支分支。1 10 0章章 状状态态图图与与活活动动图图10.2.2 状态图的组成状态图的组成状态图由状态、转换、事件、活动和动作状态图由状态、转换、事件、活动和动作5部分组成:部分组成:1 状态状态指的是对象在其生命周期中的一种状况,处于某个特定状态指的是对象在其生命周期中的一种状况,处于某个特定状态中的对象必然会满足某些条件、执行某些动作或者是等待某些事件。中的对象必然会满足某些条件、执行某些动作或者是等待某些事件。一个状态的生命周期是一个有限的时间阶段。一
19、个状态的生命周期是一个有限的时间阶段。2 转换转换指的是两个不同状态之间的一种关系,表明对象将在第一个指的是两个不同状态之间的一种关系,表明对象将在第一个状态中执行一定的动作,并且在满足某个特定条件下由某个事件触状态中执行一定的动作,并且在满足某个特定条件下由某个事件触发进入第二个状态。发进入第二个状态。3 事件事件指的是发生在时间和空间上的对状态机来讲有意义的那些事指的是发生在时间和空间上的对状态机来讲有意义的那些事情。事件通常会引起状态的变迁,促使状态机从一种状态切换到另情。事件通常会引起状态的变迁,促使状态机从一种状态切换到另一种状态,如信号、对象额度创建和销毁等。一种状态,如信号、对象
20、额度创建和销毁等。4 活动活动指的是状态机中进行的非原子操作。指的是状态机中进行的非原子操作。5 动作动作指的是状态机中可以执行的那些原子操作,所谓原子操作指指的是状态机中可以执行的那些原子操作,所谓原子操作指的是它们在运行的过程中不能被其他消息所中断,必须一直执行下的是它们在运行的过程中不能被其他消息所中断,必须一直执行下去,最终导致状态的变更或者返回一个值。去,最终导致状态的变更或者返回一个值。1 10 0章章 状状态态图图与与活活动动图图10.2.2 状态图组成状态图组成1起点和终点起点和终点(起始状态与终止状态,特殊状态节点)(起始状态与终止状态,特殊状态节点)起点代表状态图的一个初始
21、状态,此状态代表状态图的起点代表状态图的一个初始状态,此状态代表状态图的起始位置。起点只能作为转换的源,而不是作为转换起始位置。起点只能作为转换的源,而不是作为转换的目标。的目标。起点在一个状态图中只允许有一个起点在一个状态图中只允许有一个。终点代表状态图的最后状态,此状态代表状态图的终止终点代表状态图的最后状态,此状态代表状态图的终止位置。终点只能作为转换的目标,而不是作为转换的位置。终点只能作为转换的目标,而不是作为转换的源。源。终点在一个状态图中可以有一个或多个终点在一个状态图中可以有一个或多个,表示一,表示一个活动图的最后和终结状态。个活动图的最后和终结状态。1 10 0章章 状状态态
22、图图与与活活动动图图10.2.2 状态图组成状态图组成2.状态状态状态是指在对象的生命期中的状态是指在对象的生命期中的一个条件或状况一个条件或状况,在此期间对象将满足某些条件、执行某些在此期间对象将满足某些条件、执行某些活动活动或等待或等待某些某些事件事件。1 10 0章章 状状态态图图与与活活动动图图10.2.2 状态图组成状态图组成理解状态的特征理解状态的特征状态是一个时间段:状态是一个时间段:在在员工下班回家员工下班回家的过程中,经历的状态包括:的过程中,经历的状态包括:到下班时间了,收拾东西到下班时间了,收拾东西准备回家准备回家(不考虑加班);(不考虑加班);开始开始等待电梯等待电梯;
23、乘坐电梯乘坐电梯下楼下楼;乘坐电梯乘坐电梯到达楼下到达楼下;(发现没带家里钥匙,上楼拿)乘坐电梯(发现没带家里钥匙,上楼拿)乘坐电梯上楼上楼;去公交车站去公交车站等车等车;乘公共汽车乘公共汽车去菜场去菜场;买菜买菜;回到家回到家。1 10 0章章 状状态态图图与与活活动动图图10.2.2 状态图组成状态图组成理解状态的特征:理解状态的特征:(1)进入进入/退出动作退出动作:对象本身的一个操作。如果在电梯里是一个:对象本身的一个操作。如果在电梯里是一个状态的话,那员工进电梯和出电梯就是状态状态的话,那员工进电梯和出电梯就是状态“在电梯里在电梯里”的的进进入入/退出动作。退出动作。(2)内部转换内
24、部转换:例如员工在去等电梯的时候发现钥匙没带,此时:例如员工在去等电梯的时候发现钥匙没带,此时我们不用在我们不用在“等电梯等电梯”以后,而是在以后,而是在“准备回家准备回家”的状态中就的状态中就去拿钥匙了。虽然整体的状态没有发生变化,但对于对象本身去拿钥匙了。虽然整体的状态没有发生变化,但对于对象本身来说,前后是不一样的,一个是有钥匙,一个是没有钥匙。来说,前后是不一样的,一个是有钥匙,一个是没有钥匙。(3)子状态子状态:如果需要进一步描述员工对象在电梯里聊天、打电:如果需要进一步描述员工对象在电梯里聊天、打电话等状态时,这些状态就是该对象的话等状态时,这些状态就是该对象的“在电梯里在电梯里”
25、状态的子状状态的子状态。态。(4)延迟事件延迟事件:现在不立即产生的事件,该事件是在一段时间以:现在不立即产生的事件,该事件是在一段时间以后才产生的事件。员工必须等待到达后才产生的事件。员工必须等待到达17:50的时候,才能下班。的时候,才能下班。1 10 0章章 状状态态图图与与活活动动图图10.2.2 状态图组成状态图组成状态图符的三个组成部分:状态名、状态变量、事件。状态图符的三个组成部分:状态名、状态变量、事件。一个状态一般包含三个部分,如图所示。第一个状态一般包含三个部分,如图所示。第事件事件一部分为一部分为状态的名状态的名称称,如空闲、已付、移动、在菜场等。第二部分为,如空闲、已付
26、、移动、在菜场等。第二部分为可选的可选的状态变状态变量量的变量名和变量值的变量名和变量值。属性(变量)指的是状态图中类的属性。属性(变量)指的是状态图中类的属性。第三部分为第三部分为可选的活动表可选的活动表,列出有关的,列出有关的事件和活动事件和活动。1 10 0章章 状状态态图图与与活活动动图图10.2.2 状态图组成状态图组成3.事件事件事件是在事件是在某个时刻某个时刻发生的事情,一个事件是一次激发的产生,激发可发生的事情,一个事件是一次激发的产生,激发可以触发一个状态转换。以触发一个状态转换。“事件事件”指的是发生的且引起某些动作执行指的是发生的且引起某些动作执行的事情,即的事情,即事件
27、表示在某一特定的时间或空间出现的能够引发状态事件表示在某一特定的时间或空间出现的能够引发状态改变的运动变化。改变的运动变化。事件是一个事件是一个时间点,事件种类如下时间点,事件种类如下。1 10 0章章 状状态态图图与与活活动动图图10.2.2 状态图组成状态图组成事件是一个时间点:事件是一个时间点:在在员工下班回家员工下班回家的过程中,的过程中,发生的事件发生的事件包括:包括:到下班时间了到下班时间了,收拾东西,收拾东西准备回家准备回家(不考虑加班);(不考虑加班);开始开始等待电梯等待电梯;电梯到达梯上电梯到达梯上;乘坐乘坐电梯电梯到达楼下到达楼下;(发现没带家里钥匙发现没带家里钥匙,上楼
28、拿)乘坐电梯,上楼拿)乘坐电梯上楼上楼;去公交车站去公交车站等车等车;乘坐的公共汽车到了()乘坐的公共汽车到了()乘公共汽车乘公共汽车去菜场去菜场;买菜买菜;回到家回到家。1 10 0章章 状状态态图图与与活活动动图图10.2.2 状态图组成状态图组成事件的种类:事件可以分成明确或隐含的几种,主要包括:状态状态内部的事件、消息内部的事件、消息事件和时间事件等。状态内部的事件状态内部的事件(又称为动作(又称为动作Activety):):主要有入口事件、出口事件主要有入口事件、出口事件和和DO事件等。事件等。1 10 0章章 状状态态图图与与活活动动图图10.2.2 状态图组成状态图组成消息信号事
29、件和调用事件。调用事件:一个对象调用另一个对象的操作,标在迁移线上,调用事件后,引起状态迁移。如,补办借书证(帐号),调用后,帐号由挂失状态迁移到有效状态。信号事件:由发出信号事件和接收信号事件构成。发出信号事件接收信号事件1 10 0章章 状状态态图图与与活活动动图图10.2.2 状态图组成状态图组成时间事件时间事件:由由after事件、事件、when事件和事件和defer事件。事件。其中其中aftert事件和事件和when事件事件后跟后跟有动作有动作。1 10 0章章 状状态态图图与与活活动动图图10.2.2 状态图组成状态图组成4.迁移(转换)迁移(转换)状态的改变状态的改变转换表示当一
30、个特定事件发生或者某些条件满足时,一转换表示当一个特定事件发生或者某些条件满足时,一个源状态下的对象完成一定的动作后将发生状态转变,个源状态下的对象完成一定的动作后将发生状态转变,转向另一个称之为目标状态的状态。当发生转换时,转转向另一个称之为目标状态的状态。当发生转换时,转换进入的状态为活动状态,转换离开的状态变为非活动换进入的状态为活动状态,转换离开的状态变为非活动状态。状态。1 10 0章章 状状态态图图与与活活动动图图10.2.2 状态图组成状态图组成迁移的特征迁移的特征:1 10 0章章 状状态态图图与与活活动动图图10.2.2 状态图组成状态图组成监护条件监护条件:转换可能具有一个
31、监护条件,监护条件是一个:转换可能具有一个监护条件,监护条件是一个布尔表达式,它是触发转换必须满足的条件。布尔表达式,它是触发转换必须满足的条件。1 10 0章章 状状态态图图与与活活动动图图10.2.2 状态图组成状态图组成触发器事件:触发器事件:触发器事件就是能够引起状触发器事件就是能够引起状态转换的事件。如果此事件有参态转换的事件。如果此事件有参数,则这些参数可以被转换所用,数,则这些参数可以被转换所用,也可以被监护条件和动作的表达也可以被监护条件和动作的表达式所用。式所用。动作:动作:动作(动作(Action)通常是一个)通常是一个简短的计算处理过程或一组可执简短的计算处理过程或一组可
32、执行语句。动作也可以是一个动作行语句。动作也可以是一个动作序列,即一系列简单的动作。序列,即一系列简单的动作。动作有两种情况:动作有两种情况:附加到相应的附加到相应的迁移线上迁移线上或对应的或对应的状态框内状态框内。1 10 0章章 状状态态图图与与活活动动图图10.2.2 状态图组成状态图组成外部转换外部转换:外部转换是一种改变状态的转换,也是最普通最常见的一种转换。在UML中,它用从源状态到目标状态的带箭头的线段表示,其他属性以文字串附加在箭头旁。1 10 0章章 状状态态图图与与活活动动图图10.2.2 状态图组成状态图组成内部转换只有源状态,没有目标状态,不会激发入口和只有源状态,没有
33、目标状态,不会激发入口和出口动作,因此出口动作,因此内部转换激发的结果不改变本来的状内部转换激发的结果不改变本来的状态态。如果一个内部转换带有动作,它也要被执行。内。如果一个内部转换带有动作,它也要被执行。内部转换常用于对不改变状态的插入动作建立模型。要部转换常用于对不改变状态的插入动作建立模型。要注意的是内部转换的激发可能会掩盖使用相同事件的注意的是内部转换的激发可能会掩盖使用相同事件的外部转换。外部转换。内部转换的表示法与入口动作和出口动作的表示法很内部转换的表示法与入口动作和出口动作的表示法很相似。他们的区别主要在于入口和出口动作使用了保相似。他们的区别主要在于入口和出口动作使用了保留字
34、留字“entry”和和“exit”,其它部分两者的表示法相,其它部分两者的表示法相同。同。1 10 0章章 状状态态图图与与活活动动图图判定示例 无判定示例10.2.2 状态图组成状态图组成5.判定判定判定用来表示一个事件依据不同的监护条件有不同的影响。判定用来表示一个事件依据不同的监护条件有不同的影响。在实际建模的过程中,如果遇到需要使用判定的情况,在实际建模的过程中,如果遇到需要使用判定的情况,通常用监护条件来覆盖每种可能,使得一个事件的发通常用监护条件来覆盖每种可能,使得一个事件的发生能生能保证触发一个转换保证触发一个转换。1 10 0章章 状状态态图图与与活活动动图图10.2.2 状态
35、图组成状态图组成6.分叉与汇合分叉与汇合同步条是为了说明并发并发工作流的分支与汇合。状态图和活动图中都可能用到同步。在UML中,同步用一条线段来表示。1 10 0章章 状状态态图图与与活活动动图图10.2.3 状态图创建案例状态图创建案例在在UML中,交互模型描述若于对象共同协作完成一项作,而中,交互模型描述若于对象共同协作完成一项作,而状态图则是描述状态图则是描述一个对象穿越若干用例一个对象穿越若干用例的行为。建立状态图模型的行为。建立状态图模型的建模步骤如下:的建模步骤如下:1)确定状态图的主体,它可以是)确定状态图的主体,它可以是一个系统一个系统、一个用例、一个、一个用例、一个对象对象;
36、2)确定主体的生存期的各种稳定的)确定主体的生存期的各种稳定的状态及顺序状态及顺序;3)确定状态迁移的)确定状态迁移的事件事件;4)附加上必要的)附加上必要的动作动作,把动作附加到相应的,把动作附加到相应的迁移线上迁移线上或对应的或对应的状态状态框内框内;5)审核状态图,确认所有状态在事件触发下都可到达、死锁状态)审核状态图,确认所有状态在事件触发下都可到达、死锁状态(无迁移)。(无迁移)。1 10 0章章 状状态态图图与与活活动动图图 10.2.3 状态图创建案例状态图创建案例进销存管理系统中进销存管理系统中“产品产品”的状态图的状态图要创建状态图,首先要标识出哪些实体需要使用状态图进一步建
37、模。虽然我们可以为每一个类、操作、包或用例创建状态图,但是这样做势必浪费很多的精力。一般来说,不需要给所有的类都创建状态图,只有具有重要动态行为的类才需要。从另一个角度看,状态图应该用于复杂的实体,而不必用于具有复杂行为的实体。使用活动图可能会更加适合那些有复杂行为的实体。具有清晰、有序的状态实体最适合使用状态图进一步建模。对于产品出入仓库来说,需要建模的实体就是产品。1 10 0章章 状状态态图图与与活活动动图图 10.2.3 状态图创建案例状态图创建案例进销存管理系统中进销存管理系统中“产品产品”的状态图的状态图对于一个入库的产品对于一个入库的产品来说,它的状态主要包括:来说,它的状态主要
38、包括:(1)未入库状态未入库状态 (2)入库状态入库状态 (3)被排除状态被排除状态 (4)销售出库状态销售出库状态1 10 0章章 状状态态图图与与活活动动图图 10.2.3 状态图创建案例状态图创建案例进销存管理系统中进销存管理系统中“产品产品”的状态图的状态图当确定了需要建模的实体,并找出当确定了需要建模的实体,并找出了实体的初始状态和终止状态了实体的初始状态和终止状态以及其他相关状态后,就可以以及其他相关状态后,就可以着手创建状态图。着手创建状态图。首先,我们要首先,我们要找出相关的事件找出相关的事件和转换和转换。对于企业的产品来说,。对于企业的产品来说,刚被生产出来的产品可以通过刚被
39、生产出来的产品可以通过仓库管理员添加成为入库的产仓库管理员添加成为入库的产品。当入库产品被出售,产品品。当入库产品被出售,产品品处于被销售状态。品处于被销售状态。当产品由于过期、损坏等因素当产品由于过期、损坏等因素造成的不合格时,产品会被剔造成的不合格时,产品会被剔除。根据产品的各种状态以及除。根据产品的各种状态以及转换规则。转换规则。1 10 0章章 状状态态图图与与活活动动图图10.2.3 状态图创建案例状态图创建案例网上商城中网上商城中“商品商品”的状态图的状态图1.商品对象商品对象2.状态序列状态序列3.转换事件转换事件及活动。及活动。1 10 0章章 状状态态图图与与活活动动图图10
40、.2.3 状态图创建案例状态图创建案例图书管理系统的图书图书管理系统的图书状态图状态图1.图书对象图书对象2.状态序列状态序列3.转换事件转换事件及活动。及活动。1 10 0章章 状状态态图图与与活活动动图图10.2.3 状态图创建案例状态图创建案例员工下班回家状态图员工下班回家状态图(1)确定状态对象:员工。确定状态对象:员工。(2)添加状态)添加状态选择状态图绘图工具栏上的相应按钮,在绘图区域中单击鼠标左选择状态图绘图工具栏上的相应按钮,在绘图区域中单击鼠标左键,就可以绘制状态。键,就可以绘制状态。1 10 0章章 状状态态图图与与活活动动图图10.2.3 状态图创建案例状态图创建案例员工
41、下班回家状态图员工下班回家状态图(3)添加状态之间添加状)添加状态之间添加状态转换态转换单击状态图绘制工具栏上单击状态图绘制工具栏上的按钮的按钮 ,在状态之间,在状态之间添加转换,由此得到的添加转换,由此得到的员式下班回家的状态图员式下班回家的状态图及其状态转换及其状态转换 1 10 0章章 状状态态图图与与活活动动图图10.2.3 状态图创建案例状态图创建案例员工下班回家状态图员工下班回家状态图(4)设置状态转移事件)设置状态转移事件在不同的状态之间进行转换时,需要指定从一种状态转在不同的状态之间进行转换时,需要指定从一种状态转换到另一种状态的事件。换到另一种状态的事件。1 10 0章章 状
42、状态态图图与与活活动动图图10.2.3 状态图创建案例状态图创建案例员工下班回家状态图员工下班回家状态图(5)添加活动)添加活动在绘制状态图时,一般情况下需要指定状态的活动。右在绘制状态图时,一般情况下需要指定状态的活动。右键单击对应的状态(如:等待电梯),打开状态属性键单击对应的状态(如:等待电梯),打开状态属性设置对话框,选择设置对话框,选择【Actions】选项卡,右键单击中间选项卡,右键单击中间空白区域,选择空白区域,选择【Insert】菜单,完成活动的添加。菜单,完成活动的添加。1 10 0章章 状状态态图图与与活活动动图图10.2.3 状态图创建案例状态图创建案例员工下班回家状态图
43、员工下班回家状态图(6)调整大小)调整大小和位置和位置遵循美观、实用遵循美观、实用的原则,调整的原则,调整状态图的大小状态图的大小和位置,得到和位置,得到的员工下班回的员工下班回家的状态图。家的状态图。1 10 0章章 状状态态图图与与活活动动图图课堂实践课堂实践 1阅读如图所示的学生选课系统中的课程状态图,试着对不同状态间的转换阅读如图所示的学生选课系统中的课程状态图,试着对不同状态间的转换进行描述。进行描述。(1)maxstudents表示选修某一门课程的最多人数。表示选修某一门课程的最多人数。(2)students表示选修了某一门课程的人数。表示选修了某一门课程的人数。(3)after
44、this term表示学期结束表示学期结束 1 10 0章章 状状态态图图与与活活动动图图10.3 10.3 活动图活动图1 10 0章章 状状态态图图与与活活动动图图10.3 10.3 活动图活动图活动图活动图(Activity DiagramActivity Diagram)主要用于描述系统中对象的一个)主要用于描述系统中对象的一个活动活动到另一个活动的到另一个活动的控制流控制流、一个事务的、一个事务的活动序列活动序列、工作的流程工作的流程和和并并发发的处理能力。的处理能力。需求分析中的活动图主要用来配合描述某个重要的用例,图主要用来配合描述某个重要的用例,用用图型的方式对用例的具体实现的
45、过程进行描述图型的方式对用例的具体实现的过程进行描述,这样比文字的描,这样比文字的描述更直观、更准确地说明用例的功能,在系统分析与设计过程中,述更直观、更准确地说明用例的功能,在系统分析与设计过程中,经常用活动图进一步深入描述用例图的具体实现流程。经常用活动图进一步深入描述用例图的具体实现流程。系统设计中的活动图对系统的系统设计中的活动图对系统的业务工作流业务工作流、操作建模,操作建模,它描它描述业务流中从一个活动到另一个活动的控制流。它描述活动的序述业务流中从一个活动到另一个活动的控制流。它描述活动的序列,用来列,用来分析和验证用例分析和验证用例,理解工作流程,理解工作流程,描述复杂过程的算
46、法描述复杂过程的算法,并具支持带条件的行为和并并具支持带条件的行为和并发行的多程建模发行的多程建模。1 10 0章章 状状态态图图与与活活动动图图10.3.1 活动图概述活动图概述活动图的作用活动图的作用:*描述一个操作执行过程描述一个操作执行过程中所完成的工作,说明角色、工作流、组中所完成的工作,说明角色、工作流、组织和对象是如何工作的。织和对象是如何工作的。*活活动图对用例描述动图对用例描述尤其有用,它可建模用例的工作流、尤其有用,它可建模用例的工作流、显示用例显示用例内部和用例之间的路径内部和用例之间的路径。*显示如何执行一组相关的显示如何执行一组相关的动作动作,以及这些动作如何影响它们
47、周围,以及这些动作如何影响它们周围的对象。的对象。*活活动图可以画出工作流用以描述业务动图可以画出工作流用以描述业务,有利于与领域专家进行交,有利于与领域专家进行交流。通过活动图可以明确业务处理操作是如何进行的,以及可能流。通过活动图可以明确业务处理操作是如何进行的,以及可能产生的变化。产生的变化。*描述复杂过程的算法描述复杂过程的算法,在这种情况下使用的活动图和传统的程序,在这种情况下使用的活动图和传统的程序流程图的功能是相似的。流程图的功能是相似的。活动图活动图与常用的程序与常用的程序流程图流程图相似,它们的主要区别在于程序流程图相似,它们的主要区别在于程序流程图一般用来表示串行过程,而一
48、般用来表示串行过程,而活动图则可以用来表示活动图则可以用来表示并行并行过程过程。1 10 0章章 状状态态图图与与活活动动图图10.3.1 活动图概述活动图概述1 10 0章章 状状态态图图与与活活动动图图10.3.2 活动图组成活动图组成1动作状态动作状态动作状态是指执行原子的、不可中断的动作,并在此动作完成后转动作状态是指执行原子的、不可中断的动作,并在此动作完成后转换到另一个状态。动作状态有如下换到另一个状态。动作状态有如下特点特点:动作状态是原子的,它是构造活动图的最小单位,无法分解为更小动作状态是原子的,它是构造活动图的最小单位,无法分解为更小的部分;的部分;动作状态是不可中断的,它
49、一旦运行就不能中断,一直运行到结束;动作状态是不可中断的,它一旦运行就不能中断,一直运行到结束;动作状态是瞬时的行为,它所占用的处理时间极短,有时甚至可以动作状态是瞬时的行为,它所占用的处理时间极短,有时甚至可以忽略;忽略;动作状态有入转换,入转换可以是动作流,也可以是对象流。动作动作状态有入转换,入转换可以是动作流,也可以是对象流。动作状态至少有一条出转换,这条转换以内部动作的完成为起点,状态至少有一条出转换,这条转换以内部动作的完成为起点,与外部事件无关;与外部事件无关;动作状态与状态图中的状态不同,它不能有入口动作和出口动作,动作状态与状态图中的状态不同,它不能有入口动作和出口动作,也不
50、能有内部转移;也不能有内部转移;动作状态允许多处出现在同一活动图中。动作状态允许多处出现在同一活动图中。1 10 0章章 状状态态图图与与活活动动图图10.3.2 活动图组成活动图组成2活动状态活动状态活动状态是非原子性的,用来表示一个具有子结构的纯粹计算的执活动状态是非原子性的,用来表示一个具有子结构的纯粹计算的执行。行。活动状态有如下活动状态有如下特点特点:活动状态可以分活动状态可以分解成其他子活动解成其他子活动或动作状态,由于它是一组不可中或动作状态,由于它是一组不可中断的动作或操作的组合,所以断的动作或操作的组合,所以可以被中断可以被中断;活动状态的活动状态的内部活动可以用另一个活动图