1、统一建模语言统一建模语言UMLUML核心视图核心视图视图视图l视图是视图是UML的的“语法语法”,lUML通过视图将基本元素组织在一起,形成通过视图将基本元素组织在一起,形成有意义的有意义的“句子句子”来描述系统。来描述系统。如何描述系统?如何描述系统?l要描述系统的结构性特征,结构决定了系统能要描述系统的结构性特征,结构决定了系统能做什么。做什么。lUML中用中用静态视图静态视图来表达。来表达。l也要描述系统的运行时行为,这些行为决定了也要描述系统的运行时行为,这些行为决定了系统怎么做。系统怎么做。lUML中用中用动态视图动态视图来表达。来表达。l这两者结合起来才能把系统描述清楚。这两者结合
2、起来才能把系统描述清楚。视图的类型视图的类型l静态视图:静态视图:l描述静态事物,描述事物的静态结构,不描述描述静态事物,描述事物的静态结构,不描述其动态行为。其动态行为。l动态视图:动态视图:l描述事物的动态行为描述事物的动态行为l动态视图不能独立存在,它必须特指一个静态动态视图不能独立存在,它必须特指一个静态视图或视图或UML元素,说明在静态视图规定的事元素,说明在静态视图规定的事物结构下它们的动态行为。物结构下它们的动态行为。静态视图静态视图 l用例图用例图l类图类图l包图包图用例图用例图l采用参与者与用例作为基本元素,以不同的视采用参与者与用例作为基本元素,以不同的视角展现系统的功能性
3、需求。角展现系统的功能性需求。l对客户:对客户:l用例视图是他们业务领域的逻辑化表达。用例视图是他们业务领域的逻辑化表达。l对建设单位:对建设单位:l用例视图是系统蓝图和开发的依据。用例视图是系统蓝图和开发的依据。用例图的类型用例图的类型l一般来说,有以下几种用例视图:一般来说,有以下几种用例视图:l业务用例视图业务用例视图l业务用例实现视图业务用例实现视图l概念用例视图概念用例视图l系统用例视图系统用例视图l系统用例实现视图系统用例实现视图业务用例视图业务用例视图l使用业务主角和业务用例展现业务建模的结果。使用业务主角和业务用例展现业务建模的结果。l通常业务用例视图需要从通常业务用例视图需要
4、从业务主角业务主角和和业务模块业务模块两个视角进行展示。两个视角进行展示。业务主角视角业务主角视角l展示业务主角在业务中使用哪些业务用例来达展示业务主角在业务中使用哪些业务用例来达成业务目标。成业务目标。l有利于业务主角确认其业务目标是否都已经齐有利于业务主角确认其业务目标是否都已经齐全,以此来检查是否有遗漏的业务用例没有发全,以此来检查是否有遗漏的业务用例没有发现。现。借书管理系统的借阅人业务用例借书管理系统的借阅人业务用例视角视角 借书管理系统的借阅人业务用例借书管理系统的借阅人业务用例视角视角l这个视角的含义是:这个视角的含义是:l借阅人业务主角在借书管理系统中有借阅图书借阅人业务主角在
5、借书管理系统中有借阅图书和办理借阅证两个业务目标。和办理借阅证两个业务目标。l如果主角认为他所有的目标都已经齐全,就可如果主角认为他所有的目标都已经齐全,就可以认为针对这个主角的业务用例定义完成了。以认为针对这个主角的业务用例定义完成了。业务模块视角业务模块视角l展示业务领域的业务目标,将参与了达成这一展示业务领域的业务目标,将参与了达成这一业务目标的业务主角与业务用例展现在这个视业务目标的业务主角与业务用例展现在这个视图中。图中。l这个视角有利于从业务的完整性角度出发,检这个视角有利于从业务的完整性角度出发,检查完成某个业务的所有业务主角和业务用例是查完成某个业务的所有业务主角和业务用例是否
6、都齐全,以此来检查是否有遗漏的业务用例。否都齐全,以此来检查是否有遗漏的业务用例。借书业务视角借书业务视角 借书业务视角借书业务视角l这个视图的含义是:这个视图的含义是:l这些业务主角和业务用例完整的概括了借书业这些业务主角和业务用例完整的概括了借书业务的业务目标。务的业务目标。l如果这些业务能够被这些业务主角和业务用例如果这些业务能够被这些业务主角和业务用例完整的说明,则认为针对此业务模块的业务用完整的说明,则认为针对此业务模块的业务用例定义完成。例定义完成。其他视角其他视角l建模中,还可以根据实际需要,从更多的视角建模中,还可以根据实际需要,从更多的视角来绘制业务用例视图:来绘制业务用例视
7、图:l部门视角部门视角l重要业务的实体的生命周期角度重要业务的实体的生命周期角度l每当需要展现某个方面的视角时,都可以将获每当需要展现某个方面的视角时,都可以将获取到的业务主角和业务用例用例视图展现出来。取到的业务主角和业务用例用例视图展现出来。业务用例实现视图业务用例实现视图l用于展现业务用例有哪些实现途径。用于展现业务用例有哪些实现途径。l实际中:实际中:l如果一个业务用例只有一个实现途径,没必要如果一个业务用例只有一个实现途径,没必要用业务用例实现视图。用业务用例实现视图。l如果一个业务用例有多种实现途径,则应当绘如果一个业务用例有多种实现途径,则应当绘制业务用例实现视图来组织实现业务的
8、那些业制业务用例实现视图来组织实现业务的那些业务对象和业务过程。务对象和业务过程。借阅图书业务用例实现视图借阅图书业务用例实现视图 概念用例视图概念用例视图l用于展现业务用例中经过分析分解出来的关键用于展现业务用例中经过分析分解出来的关键概念用例,并表示概念用例和业务用例之间的概念用例,并表示概念用例和业务用例之间的关系。关系。l一般关系有:扩展、包含、精化一般关系有:扩展、包含、精化l概念用例视图一般以业务用例为单元展现,即概念用例视图一般以业务用例为单元展现,即将视图名称命名为业务用例名称,如果某几个将视图名称命名为业务用例名称,如果某几个业务用例关系紧密也可以放在一个视图里展示。业务用例
9、关系紧密也可以放在一个视图里展示。借阅图书概念用例视图借阅图书概念用例视图 注意注意l概念用例视图不是必须的。概念用例视图不是必须的。l如果业务用例时一个复杂业务,绘制概念用例如果业务用例时一个复杂业务,绘制概念用例视图有助于细化和更准确的理解业务用例。视图有助于细化和更准确的理解业务用例。系统用例视图系统用例视图l用于展现系统范围用于展现系统范围,将对业务用例进行分析以,将对业务用例进行分析以后得到的系统用例展现出来。后得到的系统用例展现出来。l一般,系统用例视图是以业务用例为单位展现一般,系统用例视图是以业务用例为单位展现的,即将视图名称命名为业务用例名称。的,即将视图名称命名为业务用例名
10、称。借阅图书系统用例视图借阅图书系统用例视图 类图类图l用于展示系统中的类及其相互之间的关系。用于展示系统中的类及其相互之间的关系。l类图是现实世界问题领域的抽象对象的结构化、类图是现实世界问题领域的抽象对象的结构化、概念化、逻辑化描述。概念化、逻辑化描述。l类图的建模围绕着三个层次:类图的建模围绕着三个层次:l概念层概念层l说明层说明层l实现层实现层l随着抽象层次的逐步降低而逐步细化。随着抽象层次的逐步降低而逐步细化。概念层类图概念层类图l这个层次的类图描述的是这个层次的类图描述的是现实世界中的问题领现实世界中的问题领域域的概念理解。的概念理解。l类图中表达的类与现实世界的问题领域有着明类图
11、中表达的类与现实世界的问题领域有着明显的对应关系,显的对应关系,l类之间的关系也与问题领域中实际事物的关系类之间的关系也与问题领域中实际事物的关系有着明显的对应关系。有着明显的对应关系。概念层类图概念层类图l概念层类图中的类和类关系与最终的实现类不概念层类图中的类和类关系与最终的实现类不一定有直接和明显的对应关系。一定有直接和明显的对应关系。l在概念层上,类图着重于对问题领域的概念化在概念层上,类图着重于对问题领域的概念化理解,而不是实现,因此类名称通常都是问题理解,而不是实现,因此类名称通常都是问题领域中实际事物的名称。领域中实际事物的名称。l概念层类图是独立于实现语言和实现方式的,概念层类
12、图是独立于实现语言和实现方式的,通常位于业务建模阶段,以业务实体图来表示通常位于业务建模阶段,以业务实体图来表示。概念层类图概念层类图l网上购物的业务实体图,主要由商品、定单、网上购物的业务实体图,主要由商品、定单、支付卡这几个关键类组成,这个几个类的交互支付卡这几个关键类组成,这个几个类的交互可以完成网上购物这个业务目标。可以完成网上购物这个业务目标。l这个类图表达了概念层类图的观点。这个类图表达了概念层类图的观点。说明层类图说明层类图l这个层次的类图为主考察类的接口而不是实现。这个层次的类图为主考察类的接口而不是实现。l类图中表达的类和类关系应当是对问题领域在类图中表达的类和类关系应当是对
13、问题领域在接口层次抽象的描述。接口层次抽象的描述。l即此时不用关心类最终是用何语言编码、用什即此时不用关心类最终是用何语言编码、用什么设计模式,遵循什么标准,只要关心这样一么设计模式,遵循什么标准,只要关心这样一些类,它们通过接口进行交互,进而完成了问些类,它们通过接口进行交互,进而完成了问题领域中的业务目标。题领域中的业务目标。说明层类图说明层类图l是搭建在现实世界和最终实现之间的一座桥梁。是搭建在现实世界和最终实现之间的一座桥梁。l说明层类图位于概念建模阶段,这个阶段,类说明层类图位于概念建模阶段,这个阶段,类图是以图是以分析类分析类和和分析模型图分析模型图来表示的。来表示的。说明层类图说
14、明层类图l网上购物的分析类图,表达了从计算机视角,网上购物的分析类图,表达了从计算机视角,网上购物这个业务目标是由哪些类来完成的,网上购物这个业务目标是由哪些类来完成的,这些类的接口保证了这个业务目标的达成。这些类的接口保证了这个业务目标的达成。实现层类图实现层类图l这个层次的类图中,类是实现代码的描述,类这个层次的类图中,类是实现代码的描述,类图中的类直接映射到可执行代码。图中的类直接映射到可执行代码。l这个层次上,类必须明确采用哪种实现语言、这个层次上,类必须明确采用哪种实现语言、什么设计模式、什么通信标准、遵循什么规范。什么设计模式、什么通信标准、遵循什么规范。l实现层类图是用得最普遍的
15、。实现层类图是用得最普遍的。实现层类图实现层类图l实现层类图位于设计阶段实现层类图位于设计阶段l这个阶段,类图可以视为伪代码,甚至可以用工具直这个阶段,类图可以视为伪代码,甚至可以用工具直接将实现层类图生成可执行代码。接将实现层类图生成可执行代码。l如下图:如下图:J2EE架构的实现查询商品功能的类图。架构的实现查询商品功能的类图。包图包图l一般用于展示高层次的观点。一般用于展示高层次的观点。l使用不同包的版型来绘制包图,包图就展示了使用不同包的版型来绘制包图,包图就展示了这个版型所寓意的软件观点。这个版型所寓意的软件观点。l通过包可以从大到小、从粗到细的建立元素之通过包可以从大到小、从粗到细
16、的建立元素之间的关系。间的关系。领域包图领域包图l展示了网上购物的领域包图,表达了关键业务展示了网上购物的领域包图,表达了关键业务领域及其依赖关系。领域及其依赖关系。层次包图层次包图l展示了查询商品功能的类层次,表达了实现类展示了查询商品功能的类层次,表达了实现类位于哪个层次的软件架构的观点。位于哪个层次的软件架构的观点。动态视图动态视图l活动图活动图l状态图状态图l时序图时序图l协作图协作图活动图活动图l活动图描述为了完成某一个目标需要做的活活动图描述为了完成某一个目标需要做的活动以及这些活动的执行顺序。动以及这些活动的执行顺序。lUML中有两个层面的活动图:中有两个层面的活动图:l用于描述
17、用例场景用于描述用例场景1.用于描述对象交互用于描述对象交互用例活动图用例活动图l用例活动图是最经常使用的,用来描述用例场用例活动图是最经常使用的,用来描述用例场景,也就是通常说的景,也就是通常说的业务流程业务流程。l业务流程一般包括一个基本业务流程和一个或业务流程一般包括一个基本业务流程和一个或多个备选业务流程,多个备选业务流程,l业务流程通过多个活动按照一定的条件和顺序业务流程通过多个活动按照一定的条件和顺序执行来推进。执行来推进。登机手续用例场景活动图登机手续用例场景活动图活动图中的基本元素活动图中的基本元素l起始点起始点l一种特殊状态,标记业务流程的开始。一种特殊状态,标记业务流程的开
18、始。l一个活动图,或一个业务流程只有一个起始点。一个活动图,或一个业务流程只有一个起始点。l结束点结束点l也是一种特殊状态,表示业务流程的终止。也是一种特殊状态,表示业务流程的终止。l一个活动图可以有一个或者多个结束点。一个活动图可以有一个或者多个结束点。活动图中的基本元素活动图中的基本元素l基本流:基本流:l表示最主要的、最频繁使用的、默认的业务流表示最主要的、最频繁使用的、默认的业务流程分支。程分支。l例如:登机手续用例场景活动图中从开始到结例如:登机手续用例场景活动图中从开始到结束办理的流程。束办理的流程。活动图中的基本元素活动图中的基本元素l分支:分支:l判断:根据某个条件进行决策,执
19、行不同的流程分判断:根据某个条件进行决策,执行不同的流程分支。支。l一个分支可以有一个进入转移和两个或多个输出转一个分支可以有一个进入转移和两个或多个输出转移移l在每条输出转移上都有监护条件表达式保护,当且在每条输出转移上都有监护条件表达式保护,当且仅当监护条件表达式为真时,该输出路径才有效。仅当监护条件表达式为真时,该输出路径才有效。l在所有输出转移中,其监护条件不能重叠,而且它在所有输出转移中,其监护条件不能重叠,而且它们应该覆盖所有的可能性。们应该覆盖所有的可能性。l分支在图形表示上分支在图形表示上 用菱形表示用菱形表示分支分支 活动图中的基本元素活动图中的基本元素l活动:活动:l是业务
20、流程中的一个执行单元。是业务流程中的一个执行单元。lUML中活动被赋予四个特定的事件中活动被赋予四个特定的事件lEntry:只进入(启动)活动时要执行的动:只进入(启动)活动时要执行的动作作lDo:活动执行过程中要进行的动作(或者类:活动执行过程中要进行的动作(或者类方法)方法)lEvent:活动在执行中接收到某个事件时执:活动在执行中接收到某个事件时执行的动作行的动作1.Exit:活动在退出时要进行的动作:活动在退出时要进行的动作Make Planentry/SetGoal活动图中的基本元素活动图中的基本元素l同步:同步:l同步起始:表示从它开始多个支流并行执行。同步起始:表示从它开始多个支
21、流并行执行。l同步汇合:表示多个支流同时到达后再执行后同步汇合:表示多个支流同时到达后再执行后续活动。续活动。l同步起始和汇合应该是平衡的。同步起始和汇合应该是平衡的。l同步起始和汇合在图形上都使用同步条来表示。同步起始和汇合在图形上都使用同步条来表示。l示例:描示例:描述打电话述打电话活动中的活动中的并发事件并发事件活动图中的基本元素活动图中的基本元素l组合活动:组合活动:l可以用嵌套的活动来表示。可以用嵌套的活动来表示。l这种方式会导致活动图太复杂,不建议使用,这种方式会导致活动图太复杂,不建议使用,宁可另外用一副活动图来表示这些子活动。宁可另外用一副活动图来表示这些子活动。对象活动图对象
22、活动图l用于展示对用于展示对象之间的交象之间的交互。互。l例如:查询例如:查询商品的对象商品的对象交互图交互图泳道泳道l每个泳道代表了一个特定的类、人、部门、层每个泳道代表了一个特定的类、人、部门、层次等对象的职责区,这些对象在业务流程中负次等对象的职责区,这些对象在业务流程中负责执行的活动集合构成了它们的职责。责执行的活动集合构成了它们的职责。l泳道弥补了活动图不能描述对象职责的遗憾。泳道弥补了活动图不能描述对象职责的遗憾。加入泳道前的对象活动图加入泳道前的对象活动图 加入泳道后的对象活动图加入泳道后的对象活动图 实际情况中实际情况中l活动图主要应用于以下两个场景建模:活动图主要应用于以下两
23、个场景建模:l业务场景业务场景1.用例场景用例场景业务场景建模业务场景建模l客户的业务通常是以业务流程的形式存在,客户的业务通常是以业务流程的形式存在,l仅从单个客户代表处得到的需求不足以说明业仅从单个客户代表处得到的需求不足以说明业务的全貌,此时我们常以务的全貌,此时我们常以业务主角作为泳道业务主角作为泳道,以以从业务主角处获取的用例作为活动来编排活从业务主角处获取的用例作为活动来编排活动图动图。l这种活动图对我们获取正确的业务用例和检查这种活动图对我们获取正确的业务用例和检查已经获得的业务用例有很好的帮助。已经获得的业务用例有很好的帮助。业务主角为泳道建模活动图业务主角为泳道建模活动图l可
24、以:可以:l帮助发现业务用例帮助发现业务用例l帮助检查业务用例粒度帮助检查业务用例粒度 l帮助检查业务主角帮助检查业务主角 l帮助检查业务用例帮助检查业务用例 用例场景建模用例场景建模l通过用例场景来说明如何达到业务目标。通过用例场景来说明如何达到业务目标。l常以业务主角和业务工人为泳道、以工作单元常以业务主角和业务工人为泳道、以工作单元作为活动来编排活动图来描述用例场景。作为活动来编排活动图来描述用例场景。l它能够:它能够:l帮助发现概念用例帮助发现概念用例l帮助发现角色帮助发现角色l帮助发现业务实体帮助发现业务实体l帮助建立领域模型帮助建立领域模型关于活动图的争议关于活动图的争议l活动图描
25、述的是业务流程,是一种过程化的分活动图描述的是业务流程,是一种过程化的分析法。将面向过程的活动图引入是否会导致面析法。将面向过程的活动图引入是否会导致面向对象的类职责的混乱?向对象的类职责的混乱?l面向对象中是没有业务流程的概念,流程不过面向对象中是没有业务流程的概念,流程不过是在某个外部力量推动下对象之间相互交流的是在某个外部力量推动下对象之间相互交流的一个过程。一个过程。l如果从活动图的观点来描述业务,实际上不能如果从活动图的观点来描述业务,实际上不能直接看到对象是如何发挥作用的。直接看到对象是如何发挥作用的。l在观念上很容易导致对象独立性被破坏。在观念上很容易导致对象独立性被破坏。关于活
26、动图的争议关于活动图的争议l面向对象要求对象越独立、封装度越高越好,面向对象要求对象越独立、封装度越高越好,但同时也越难理解这些对象将会做什么。但同时也越难理解这些对象将会做什么。l保持面向对象观点中对象的独立性,又要保持保持面向对象观点中对象的独立性,又要保持现实世界中业务目标的过程化描述,这是一个现实世界中业务目标的过程化描述,这是一个矛盾。矛盾。l活动图的引入虽然给对象分析造成一些混乱,活动图的引入虽然给对象分析造成一些混乱,但解决了业务目标过程化描述的困难。但解决了业务目标过程化描述的困难。状态图状态图l显示一个状态机,用于对模型元素的动态行为显示一个状态机,用于对模型元素的动态行为进
27、行建模,即对系统行为中受事件驱动的方面进行建模,即对系统行为中受事件驱动的方面进行建模。进行建模。l通常使用状态图来说明通常使用状态图来说明单个单个业务实体对象、或业务实体对象、或分析类对象、或设计类对象在它的整个生命周分析类对象、或设计类对象在它的整个生命周期内可能的状态,以及导致状态转换的事件和期内可能的状态,以及导致状态转换的事件和状态转换引起的操作。状态转换引起的操作。l注意:状态图不用于描述对象之间的交互。注意:状态图不用于描述对象之间的交互。状态图状态图l示意图:状态图的基本元素状态图的基本元素状态(状态(State)转换(转换(Transition)初始状态(初始状态(Start
28、 State)终结状态(终结状态(End State)判定(判定(Decision)状态状态l状态(状态(State)是指在对象的生命周期中满足)是指在对象的生命周期中满足某些条件、执行某些活动或等待某些事件时的某些条件、执行某些活动或等待某些事件时的一个条件或状况。一个条件或状况。l例如,打印机例如,打印机printer在工作时可能有在工作时可能有6种状态:种状态:l“就绪就绪”(Ready)l“打印打印”(Print)l“缺纸缺纸”(Lack paper)l“忙忙”(Busy),),“暂停暂停”(Pause)l“停止停止”(Stop)l这里具体的打印机在这里具体的打印机在UML中就表示为对
29、象,中就表示为对象,而它工作时可能出现的状态则是状态图中的状而它工作时可能出现的状态则是状态图中的状态。态。状态概述状态概述l状态图中的状态一般是给定类对象中的一组属状态图中的状态一般是给定类对象中的一组属性值,这组属性值是对象所有属性的子集。性值,这组属性值是对象所有属性的子集。l在对系统建模时,我们可以在对系统建模时,我们可以只关心那些明显影只关心那些明显影响对象行为的属性以及由他们表达的对象状态,响对象行为的属性以及由他们表达的对象状态,而不用理睬那些于对象行为无关的状态。而不用理睬那些于对象行为无关的状态。状态状态l状态由一个带圆角的矩状态由一个带圆角的矩形表示。形表示。状态组成状态组
30、成l状态组成:状态组成:状态名(状态名(Name)活动(活动(Activity)入口动作(入口动作(Entry Action)出口动作(出口动作(Exit Action)状态名状态名l状态名表示状态的名字,通常用字符串表示。状态名表示状态的名字,通常用字符串表示。l一个状态的名称在状态图所在的上下文中应该一个状态的名称在状态图所在的上下文中应该是唯一的。不过,状态允许匿名。是唯一的。不过,状态允许匿名。l状态的名字通常放在状态图标的顶部。状态的名字通常放在状态图标的顶部。活动活动l状态内可以包含活动,通常位于状态名的下面。状态内可以包含活动,通常位于状态名的下面。l活动的语法表示为:活动的语法
31、表示为:do/活动名活动名入口动作与出口动作入口动作与出口动作 l入口动作和出口动作表示进入或退出这个状态入口动作和出口动作表示进入或退出这个状态所要执行的动作。所要执行的动作。l入口动作用入口动作用“entry/要执行的动作要执行的动作”表达,而表达,而出口动作用出口动作用“exit/要执行的动作要执行的动作”表达。表达。状态种类状态种类l状态种类:状态种类:简单状态(简单状态(Simple State)复合状态(复合状态(Composite State)简单状态简单状态 l简单状态是指不包含其他状态的状态。简单状态是指不包含其他状态的状态。l简单状态没有子结构,但它可以具有内部转换、简单状
32、态没有子结构,但它可以具有内部转换、入口动作和出口动作等。入口动作和出口动作等。复合状态复合状态l复合状态是可以包含一些嵌套的子状态的状态。复合状态是可以包含一些嵌套的子状态的状态。l复合状态可以使用复合状态可以使用“与与”关系分解为并发子状关系分解为并发子状态,或者通过态,或者通过“或或”关系分解为互相排斥的顺关系分解为互相排斥的顺序子状态。序子状态。l复合状态的一个入转换代表对其嵌套子状态区复合状态的一个入转换代表对其嵌套子状态区域内的初始状态的入转换;域内的初始状态的入转换;l对嵌套子状态区域内的终结状态的转换代表包对嵌套子状态区域内的终结状态的转换代表包含它的终止状态的相应活动的完成。
33、含它的终止状态的相应活动的完成。复合状态复合状态l1.顺序子状态顺序子状态l2.并发子状态并发子状态1.顺序子状态顺序子状态l如果一个复合状态的子状态所对应的对象在其如果一个复合状态的子状态所对应的对象在其生命期内的任何时刻都只能处于一个子状态,生命期内的任何时刻都只能处于一个子状态,即多个子状态之间是互斥的,不能同时存在,即多个子状态之间是互斥的,不能同时存在,这种子状态称为顺序子状态。这种子状态称为顺序子状态。l当状态机通过转换从某种状态转入复合状态时,当状态机通过转换从某种状态转入复合状态时,此转换的目的可能是这个复合状态本身,也可此转换的目的可能是这个复合状态本身,也可能是这个复合状态
34、的子状态。能是这个复合状态的子状态。2.并发子状态并发子状态l有时复合状态有两个或者多个并发的子状态机,有时复合状态有两个或者多个并发的子状态机,此时称这些子状态为并发子状态。此时称这些子状态为并发子状态。顺序子状态并发子状态顺序子状态并发子状态 l顺序子状态与并发子状态的区别在于后者在同顺序子状态与并发子状态的区别在于后者在同一层次给出两个或多个顺序子状态,对象处于一层次给出两个或多个顺序子状态,对象处于同一层次中来自每个并发子状态的一个时序状同一层次中来自每个并发子状态的一个时序状态中。态中。事件事件l事件表示在某一特定的时间或空间出现的能够事件表示在某一特定的时间或空间出现的能够引发状态
35、改变的一种运动变化。引发状态改变的一种运动变化。l事件是定义一个触发子,触发对象改变其状态,事件是定义一个触发子,触发对象改变其状态,任何影响对象的事物都可以是事件。任何影响对象的事物都可以是事件。事件事件 l例如,当你按下电视机上的例如,当你按下电视机上的Power按钮时,电按钮时,电视开始播放。视开始播放。l其中其中“按下按下Power按钮按钮”就是事件,而事件引就是事件,而事件引起的动作就是起的动作就是“开始播放开始播放”。事件事件l事件可以是内部的事件或外部的事件事件可以是内部的事件或外部的事件l外部事件是在系统和参与者之间传送的事件。外部事件是在系统和参与者之间传送的事件。l内部事件
36、是在系统内部的对象之间传送的事件。内部事件是在系统内部的对象之间传送的事件。事件事件l事件种类:事件种类:入口事件入口事件出口事件出口事件动作事件动作事件信号事件信号事件调用事件调用事件变化事件变化事件时间事件时间事件入口事件入口事件l入口事件表示一个入口的动作序列,它在进入入口事件表示一个入口的动作序列,它在进入状态时执行。状态时执行。l入口事件的动作是原子的,并且先于人和内部入口事件的动作是原子的,并且先于人和内部活动或转换。活动或转换。出口事件出口事件l出口事件表示一个出口的动作序列,它在退出出口事件表示一个出口的动作序列,它在退出状态时执行。状态时执行。l出口事件也是原子的,它跟在所有
37、的内部活动出口事件也是原子的,它跟在所有的内部活动之后,但是先于所有的出口转换。之后,但是先于所有的出口转换。动作事件动作事件l动作事件也称为动作事件也称为“do事件事件”,它表示对一个,它表示对一个嵌套状态机的调用。嵌套状态机的调用。l与动作事件相关的活动必定引用嵌套状态机,与动作事件相关的活动必定引用嵌套状态机,而非引用包含它的对象的操作。而非引用包含它的对象的操作。信号事件信号事件l信号(信号(Signal):是作为两个对象之间通信媒):是作为两个对象之间通信媒介的命名的实体,信号的接收是信号接收对象介的命名的实体,信号的接收是信号接收对象的一个事件。的一个事件。l信号和简单的类有许多共
38、同之处,同样信号也可信号和简单的类有许多共同之处,同样信号也可以有实例。以有实例。l信号还可以包含在泛化关系中。同样信号可以像信号还可以包含在泛化关系中。同样信号可以像类一样,有属性和操作。类一样,有属性和操作。l例如计算机设备的中断信号就是一般的信号,例如计算机设备的中断信号就是一般的信号,而键盘中断信号就是特殊的信号。而键盘中断信号就是特殊的信号。信号事件信号事件l信号可以在类图中被声明为类,并用关键字信号可以在类图中被声明为类,并用关键字signal表示,信号的参数被声明为属性。表示,信号的参数被声明为属性。l在在UML中,可以将信号建模为构造型化的类。中,可以将信号建模为构造型化的类。
39、用构造型为用构造型为Send的依赖关系来表示一个操作的依赖关系来表示一个操作发送了一个特定的信号。发送了一个特定的信号。信号事件信号事件l信号间可以有泛化,信号可以是其他信号的子信号,信号间可以有泛化,信号可以是其他信号的子信号,它们继承父信号的属性,并可以触发包含信号类型的它们继承父信号的属性,并可以触发包含信号类型的转换。转换。调用事件调用事件l调用事件(调用事件(Call Event)是指一个对象对操作)是指一个对象对操作调用的接收。调用的接收。l接收的类可以选择将操作实现为一个方法或实接收的类可以选择将操作实现为一个方法或实现为状态机里的一个调用事件触发器。现为状态机里的一个调用事件触
40、发器。l信号是一个异步事件,而调用事件一般来说是信号是一个异步事件,而调用事件一般来说是同步的。同步的。l也就是说,当对象调用另一对象的操作时,控也就是说,当对象调用另一对象的操作时,控制就从发送者传送到接收者,该事件触发转换,制就从发送者传送到接收者,该事件触发转换,完成操后,接收者转换到一个新的状态,控制完成操后,接收者转换到一个新的状态,控制返还给发送者。返还给发送者。调用事件调用事件l示例示例如图如图未验证图书的状态已验证图书的状态searchBook(name)变化事件变化事件l变化事件(变化事件(change event)是指依赖于指定)是指依赖于指定属性值的布尔表达式得到满足。属
41、性值的布尔表达式得到满足。l这是一种一直等待直到特定条件被满足的声明这是一种一直等待直到特定条件被满足的声明方式。方式。l在在UML中,用关键字中,用关键字When,后面跟随布尔表,后面跟随布尔表达式来对一个变化事件建模。达式来对一个变化事件建模。l你可以用表达式来标记一个绝对时间(如:你可以用表达式来标记一个绝对时间(如:When time10:00),或对表达式作不间断),或对表达式作不间断地测试(如地测试(如when altitude 1000)。)。变化事件变化事件l示例 如图如图暂停打印机when(打印机缺纸)/printTest()打印时间事件时间事件l时间事件(时间事件(Time
42、 event)是表示一段时间推)是表示一段时间推移的事件。移的事件。l在在UML中,用关键字中,用关键字after,后面跟着计算一段,后面跟着计算一段时间的表达式来对时间事件建模。时间的表达式来对时间事件建模。l表达式计时的基准,默认为进入当前状态的时表达式计时的基准,默认为进入当前状态的时间为基准。间为基准。时间事件时间事件l示例如图如图打印就绪打印after(2 seconds)/connectionPrint()转换转换l转换表示当一个特定事件发生或者某些条件得转换表示当一个特定事件发生或者某些条件得到满足时,一个源状态下的对象在完成一定的到满足时,一个源状态下的对象在完成一定的动作后将
43、发生状态转变,转向另一个称之为目动作后将发生状态转变,转向另一个称之为目标状态的状态。标状态的状态。l转换进入的状态为活动状态,转换离开的状态转换进入的状态为活动状态,转换离开的状态变为非活动状态。变为非活动状态。转换转换l例如,当像例如,当像“获取时间片获取时间片”这样的事件发生时,这样的事件发生时,程序可能从程序可能从“就绪就绪”状态转换到状态转换到“运行运行”状态。状态。转换的组成部分转换的组成部分1.源状态(源状态(source state)l即受转换影响的状态即受转换影响的状态;如果对象处于源状态,当如果对象处于源状态,当该对象接收到转换的触发事件或满足监护条件该对象接收到转换的触发
44、事件或满足监护条件(如果有)时,就会激活一个转换。(如果有)时,就会激活一个转换。2.事件触发(事件触发(Event trigger)l是一个事件,源状态中的对象接收这个事件使是一个事件,源状态中的对象接收这个事件使转换合法地激活,并使监护条件满足。转换合法地激活,并使监护条件满足。l例如,将例如,将Mouse(鼠标)作为触发器,那么(鼠标)作为触发器,那么接收到接收到RightMouseButton也可以触发这个转也可以触发这个转换。换。3.监护条件(监护条件(guard condition)l是一个布尔表达式,当触发器事件被触发时是一个布尔表达式,当触发器事件被触发时才对这个布尔表达式求值
45、才对这个布尔表达式求值;l如果表达式取值为真,则激活转换如果表达式取值为真,则激活转换;为假,则为假,则不能激活转换,而且如果没有其他的转换被不能激活转换,而且如果没有其他的转换被此事件所触发,则该事件丢失。此事件所触发,则该事件丢失。l事件能够触发多个转换离开当前状态。事件能够触发多个转换离开当前状态。l每个转换必须具有不同的监护条件。每个转换必须具有不同的监护条件。4.动作(动作(Action)l动作是可执行的一个原子计算,它可以直接的动作是可执行的一个原子计算,它可以直接的作用于拥有状态机的对象,也可以间接作用于作用于拥有状态机的对象,也可以间接作用于那些可见的其他对象。那些可见的其他对
46、象。l当转换被引发时,它对应的动作被执行。它一当转换被引发时,它对应的动作被执行。它一般是一个简短的计算处理过程,通常是赋值操般是一个简短的计算处理过程,通常是赋值操作或算术计算。作或算术计算。5.目标状态(目标状态(target state)l转换完成后的活动状态。转换完成后的活动状态。l示例转换转换l转换种类:转换种类:外部转换外部转换内部转换内部转换完成转换完成转换复合转换复合转换外部转换外部转换l外部转换是一种改变对象状态的转换,是最常见的外部转换是一种改变对象状态的转换,是最常见的一种转换。一种转换。l外部转换用从源状态到目标状态的箭头表示。外部转换用从源状态到目标状态的箭头表示。U
47、sedUnusedMaintainingThe train stopThe train go runningSomebody go intoSomebody go intoSomebody go out内部转换内部转换l内部转换有一个源状态但是没有目标状态,它转换后内部转换有一个源状态但是没有目标状态,它转换后的状态仍旧是它本身。的状态仍旧是它本身。l内部转换的激发规则和改变状态的外部转换的激发规内部转换的激发规则和改变状态的外部转换的激发规则相同。则相同。l内部转换用于对不改变状态的插入动作建立模型。内部转换用于对不改变状态的插入动作建立模型。完成转换完成转换l完成转换又称为自转换。完成转换
48、又称为自转换。l完成转换是因为没有标明触发器事件的转换是完成转换是因为没有标明触发器事件的转换是由状态中的活动的完成引起的,是自然而然地由状态中的活动的完成引起的,是自然而然地完成的转换。完成的转换。l完成转换也可以带一个监护条件,这个监护条完成转换也可以带一个监护条件,这个监护条件在状态中的活动完成时被赋值,而非活动完件在状态中的活动完成时被赋值,而非活动完成后被赋值。成后被赋值。内部转换自转换内部转换自转换l内部转换和自转换(完成转换)不同:内部转换和自转换(完成转换)不同:自转换是离开本状态后重新进入该状态,它自转换是离开本状态后重新进入该状态,它会激发状态的入口动作和出口动作的执行。会
49、激发状态的入口动作和出口动作的执行。内部转换自始至终都不离开本状态,所以没内部转换自始至终都不离开本状态,所以没有出口或入口事件,也就不执行入口和出口有出口或入口事件,也就不执行入口和出口动作。动作。复合转换复合转换l复合转换由简单转换组成,这些简单转换通过复合转换由简单转换组成,这些简单转换通过分支判定、分叉或接合组合在一起。分支判定、分叉或接合组合在一起。l除了两个分支的判定,还有多条件的分支判定。除了两个分支的判定,还有多条件的分支判定。l多条件的分支判定有分为多条件的分支判定有分为链式链式的和的和非链式非链式的分的分支。支。l链式分支:链式分支:NewStateNewState2New
50、State3NewState4NewState5Event1 Condition1 /Action1 Condition2 /Action2 Condition3 /Action3 Condition4 /Action4 Condition5 /Action5 Condition6 /Action6l非链式分支:非链式分支:NewState6NewState7NewState8NewState9NewState10Event1 Condition1&Condition3 /Action1,Action3Event1 Condition1&Condition4 /Action1,Action4E