• 1. 第五章 状态图和活动图 统一建模语言 Unified Modeling Language
  • 2. 第五章 状态图和活动图 状态图 状态图的定义 状态图的符号 状态图的动作和事件 组合状态 状态图的建模方法 活动图 活动图的定义 活动图的符号 活动图中的条件 活动图的建模方法
  • 3. 状态图的定义 状态图用来建模对象是如何改变其状态以响应事件和展示对象从创建到删除的生命周期。状态定义为对象行为在某一个时刻的快照或者转折点。例如,计算机的状态可以定义为开机、启动、工作中、空闲、关机和离线等。状态图的任务就是用来描述一个对象所处的可能状态以及状态之间的转移,并给出状态变化序列的起点与终点。
  • 4. 状态图除了可以用于描述对象接收事件触发时的行为状态外,它还可以用于许多其他情况。例如,状态图可以用来说明基于用户输入的屏幕状态改变,也可以用来说明复杂用例的状态进展情况。可建模状态图的对象有:UNIX进程状态图状态图的定义 类 用例 子系统 整个系统
  • 5. 在一般系统中,不需对每个类创建状态图。当一个类实例(对象)有多种状态,每种状态中的行为表现又不相同,则可创建状态图。例如,银行帐户可以有几种不同的状态,可以打开、关闭或透支。在这些不同状态下,帐户的处理功能是不同的。
  • 6. 第五章 状态图和活动图 状态图 状态图的定义 状态图的符号 状态图的动作和事件 组合状态 状态图的建模方法 活动图 活动图的定义 活动图的符号 活动图中的条件 活动图的建模方法
  • 7. 状态图的符号 状态图由状态、转移和事件组成。联合使用状态和转移可以更好地建模它们,有时需要包含决策点和同步条来显示更高层次的细节信息。 1.状态 状态图中共有3种独立的状态标记符,如下图所示
  • 8. 基本状态显示为圆角矩形。状态的名称放在矩形中。这种标记符代表模型中满足条件的一个点。例如,诊断机的状态示例可能包含开、关、诊断和空闲等。标准状态的名称指示满足了什么条件,如下图所示。状态图的符号(续)
  • 9. 开始状态和结束状态标记符是指示模型的开始和结束状态的特殊标记符。模型中的开始状态是一个实心点。结束状态是带有圆圈的实心点。模型不必同时具有开始和结束状态,因为模型可以总是运行,从不停止。 状态图中可以包含0到多个开始状态。状态图中也可以包含多个结束状态,每一个都表示一个模型能够终止的点。状态图的符号(续)
  • 10. 状态细节是指当对象处于特定状态时,可能要进行一些活动,例如生成报表、进行计算或向另一对象发送事件。 为了进一步描述对象在特定状态下的一些活动,可加入细节活动、进入、退出、事件和状态历史信息。状态图的符号(续)
  • 11. 送货处理状态图
  • 12. 2.转移 转移用来显示从一个状态到另一个状态的处理流。转移使用从一个状态到另一个状态的开放箭头来标记,如下图所示。状态图的符号(续)
  • 13. 下面的示例演示了银行帐户中的转移及其有效状态,如下图所示。状态图的符号(续)
  • 14. 3.决策点 决策点在建模状态图时提供了方便,因为它通过在中心位置分组转移到各自的方向,从而提高了状态图的可视性,如下图所示。状态图的符号(续)
  • 15. 4.同步 状态图中使用同步条是为了说明并发工作流的分叉与联合。下图所示为同步条的标记符。状态图的符号(续)
  • 16. 第五章 状态图和活动图 状态图 状态图的定义 状态图的符号 状态图的动作和事件 组合状态 状态图的建模方法 活动图 活动图的定义 活动图的符号 活动图中的条件 活动图的建模方法
  • 17. 条件用来描述状态转移的前提。事件用来指示什么触发了转移,动作用来说明当转移发生时会产生什么情况。事件、条件和动作是转移的三个选项,其定义格式见下图所示。该图描述的信息是—“如果guardCondition为true,当anEvent发生时,将执行anAction,并立即进入状态B”状态图的动作和事件事件条件动作
  • 18. 状态图的动作和事件1.事件 事件通常在从一个状态到另一个状态的转移路径上直接指定。事件用来指示是什么导致了模型中状态的改变。下图演示了事件的标记符。事件
  • 19. 状态图的动作和事件(续)2.动作 动作说明了当事件发生时发生了什么行为。Event类型的动作示例如右图.这个示例说明了只要ResetUsers事件传递的所有用户都没有打开,他们就会被全部删除。动作
  • 20. 状态图的动作和事件(续)3.条件 条件说明状态转移必须要满足的前提。条件一般为一个布尔表达式。如下图所示。条件
  • 21. 练习: 阅读一个电梯系统的状态图 步骤: 1)标识出状态。 2)标识出转移。 3)标识出事件和动作。
  • 22. (本页无文本内容)
  • 23. 第五章 状态图和活动图 状态图 状态图的定义 状态图的符号 状态图的动作和事件 组合状态 状态图的建模方法 活动图 活动图的定义 活动图的符号 活动图中的条件 活动图的建模方法
  • 24. 组合状态 一个对象可以通过同步操作同时拥有多个状态。有时,对象还可以拥有层次结构的状态。当单个状态具有独有的附加的子状态时,可以在状态图中使用层次结构的状态。
  • 25. 组合状态(续) 在一个复杂的状态中可以细化为多个子状态的合成。该复杂状态称为组合状态。如下图所示。
  • 26. 组合状态(续)收录机状态图
  • 27. 并发子状态 在一个状态中可能多个并发的子状态。如右图所示的订货对象状态图。 组合状态(续)
  • 28. 第五章 状态图和活动图 状态图 状态图的定义 状态图的符号 状态图的动作和事件 组合状态 状态图的建模方法 活动图 活动图的定义 活动图的符号 活动图中的条件 活动图的建模方法
  • 29. 状态图的建模方法 状态图建模需要执行以下步骤: 1)标识出需要进一步建模的实体。 2)标识出每一个实体的开始状态和结束状态。 3)确定与每一个实体相关的事件。 4)从起始状态开始创建状态图。 5)如果必要则创建组合状态。
  • 30. 状态图的建模方法(续) 1.标识出需要进一步建模的实体 首先要标识出哪些实体需要使用状态图进一步建模。状态图应该用于复杂的实体,而不必用于具有复杂行为的实体。对于有复杂行为的实体,使用活动图可能会更加适合。具有清晰、有序的状态实体最适合使用状态图进一步建模。后面将会建模一个Grade对象,尤其是它的保存功能。
  • 31. 状态图的建模方法(续) 2.标识出每一个实体的开始和结束状态 要想标识出某个实体的开始状态,需要知道实体是如何实例化的,以及实体是如何开始的。Grade对象在有了一个新的分数需要保存时实例化。要想标识出某个实体的结束状态,需要知道相反的信息:实体何时从系统中退出?Grade对象在完成保存数据的操作之后退出系统,不管该操作是否成功。
  • 32. 状态图的建模方法(续) 因此,Grade对象的状态图具有如下描述保存功能的开始状态和结束状态: Information Entered 开始状态。 Destroy 结束状态。
  • 33. 状态图的建模方法(续) 3.确定与每一个实体相关的事件 事件用来最终完成实体的功能。要想确定实体的事件,需要知道事件的任务。对于Grade对象,它的任务是保存分数。进一步了解事件的任务之后,就可以确定Grade对象的事件包括接受数据、成功地保存数据和不成功地保存数据。 有了这些事件之后,就可以为Grade对象创建这些事件的状态列表,如下所示: Ready 用于数据加载时。 Persisting 用于数据保存时。 Saved 用于数据已经保存后。 Error 用于数据由于出错而未成功保存时。
  • 34. 状态图的建模方法(续) 4.从开始状态开始创建状态图 利用上述的信息,我们就可以创建一个简单的状态图来描述Grade对象的不同状态,以及触发状态改变的事件,如下图所示。
  • 35. 状态图的建模方法(续) 5.如果必要则指定合成状态 创建状态图的第一步工作完成之后,可以检查一下是否需要通过创建合成状态来进一步修饰某些状态。 在本例中,我们认为Persisting状态过于笼统,因此可以为其提供子状态,其中包括Load、Update和Save,或者只包括Insert,如下图所示。
  • 36. 状态图的建模方法(续)
  • 37. 状态图的建模方法(续) 练习: 建模航班状态图 创建一个状态图来描述航班如何从提出申请、制定航班计划、售票、起飞、飞行、到着陆的状态过程。 练习步骤; 1)标识出要建模的实体。 2)标识出实体的状态。
  • 38. (本页无文本内容)
  • 39. 第五章 状态图和活动图 状态图 状态图的定义 状态图的符号 状态图的动作和事件 组合状态 状态图的建模方法 活动图 活动图的定义 活动图的符号 活动图中的条件 活动图的建模方法
  • 40. 活动图的定义 活动图是一种用于描述系统行为的模型视图,它可用来描述过程(业务过程、工作流、事件流等)中的活动及其迁移。简单地讲,活动图是“OO流程图”。 活动图的标记符与状态图的标记符非常相似,有时会让人混淆。其实,状态图用来表示单个对象的行为如何改变其状态。而活动图是用来建模不同区域的工作如何彼此交互。
  • 41. 活动图的定义 活动图能够附加在如下建模元素中以描述该元素的行为。用例 类 接口 组件 节点
  • 42. 活动图的定义活动图的主要应用 1.描述用例的行为 活动图对用例描述尤其有用,它可建模用例的工作流,显示用例内部和用例之间的路径;它也可以向读者说明需要满足什么条件用例才会有效,以及用例完成后系统保留的条件或者状态。
  • 43. 活动图的定义2.理解工作流程 活动图对理解业务处理过程十分有用。可以画出描述业务工作流的活动图与领域专家进行交流,明确业务处理操作是如何进行的,将会有怎样的变化。 3.描述复杂过程的算法 在这种情况下使用的活动图不过是UML版的程序流程图,常规的顺序、分支过程在活动图中都能得到充分的表现。
  • 44. 第五章 状态图和活动图 状态图 状态图的定义 状态图的符号 状态图的动作和事件 组合状态 状态图的建模方法 活动图 活动图的定义 活动图的符号 活动图中的条件 活动图的建模方法
  • 45. 活动图的符号 活动图保留了许多传统的流程图的特征,它包含如下元素。活动 操作 状态 转移 对象流 分叉 决策 联结
  • 46. 活动图的符号活动 活动在活动图中,用来指示要完成某项工作的动作或表示工作流的步骤。其UML标记符是一个带有圆角的矩形,如下图所示。 在确定活动名称时应该恰当地命名,选择准确描述所发生动作的几个词。例如,Save File或者 Create New Document就是比较恰当的活动名称,而Run或者Update 对读者而言是不完整的名称。
  • 47. 2. 操作 可以用操作在活动中增加更多详细的步骤。操作是活动中执行的小步骤。在下列情况下发生: 进入活动时发生的操作,标有entry字样。 活动进行时发生的操作,直到离开活动,标有do字样。 离开活动时发生的操作,标有exit字样。 特定事件发生时的操作,标有event字样和事件名。 操作是可选的,但提供的详细信息有助于后面完成系统设计。如果包括操作,则其在活动内显示,不管其属于上面哪一类。下面是带操作的活动例子。活动图的符号
  • 48. 活动图的符号
  • 49. 活动图的符号3. 状态 状态的标记符与活动类似,也是带圆角的矩形,但状态的圆角比较小,如下图所示。 状态通常使用一个指示系统当前状态的单词或者短语来标识。例如,Stopped是一个状态,而stop则是一个活动。 UML包含两个特殊状态,即开始状态和结束状态。开始状态以实心黑点表示,结束状态以带有圆圈的实心黑点表示。
  • 50. 活动图的符号 注意:每一个活动图只能有一个开始状态,但是可以有无数个结束状态。如下图所示:与状态图不同
  • 51. 活动图的符号
  • 52. 活动图的符号4.转移 转移用来指示一种状态到另一个状态的控制流。它们可以显示活动之间或者状态之间的控制流。转移的标记符是带开放箭头的实线,如下图所示。
  • 53. 活动图的符号综合运用 现在已经学习了活动图的4种主要标记符,下面综合运用这些标记来生成一个活动图,如下图所示。
  • 54. 活动图的符号5. 决策 决策是基于判断条件选择控制流继续的方向。决策的UML符号是一个小菱形标记符,然后从这里再按条件控制分支转移到满足条件的活动,如下图所示。
  • 55. 活动图的符号例 描述教师记录学生成绩用例的活动图
  • 56. 活动图的符号学习活动图中的其他标记符 1.泳道 泳道可以使活动图非常整洁,因为它们在很大程度上增强了活动图的可读性。泳道使用几个大矩形框表示,如右图所示。
  • 57. 活动图的符号 下面示例显示了一个在Teacher和Web Interface泳道之间交叉转移控制流的活动图。如果没有泳道,该活动图就无法说明Teacher 使用了Logon、Choose Student和Change Student Info活动,Web Interface使用Validate User、Retrieve Student Info和 Persist User Info活动,如下图所示。
  • 58. 活动图的符号
  • 59. 活动图的符号2.分叉和联结 分叉用来表示并行活动的分支处理,联结用来把并行活动的汇集到同步处理。 分叉和联结在UML中的表示方法相似,都用粗黑线表示。分叉具有一个转移入口,两个或者多个转移出口。分岔描述了单向处理控制流分成了多个控制流。联结与此相反,联结具有两个或者多个转移入口,只有一个出口。联结描述了不同的处理控制流合并到一起形成一个单向处理,如下图所示。
  • 60. 活动图的符号 如果一个处理在其他处理之前到达了联结,它将会等待,直到所有的处理都准备好之后才会向联结传递控制权。
  • 61. 活动图的符号 左例演示了分叉中的一个处理时间长于另一个的情况。当然,这完全是由每一个处理中的活动数假定的。由于我们不知道每一个活动有多长,因此不能保证哪一个首先完成。为此,我们在让用户访问应用程序之前插入了一个联结,以便确保两个独立的处理彼此连接在一起。
  • 62. 活动图的符号3.对象流 活动可以输入和输出对象,并可以修改对象状态。我们能够在活动图上用对象流表示这些。如下图所示。
  • 63. 活动图的符号
  • 64. 第五章 状态图和活动图 状态图 状态图的定义 状态图的符号 状态图的动作和事件 组合状态 状态图的建模方法 活动图 活动图的定义 活动图的符号 活动图的建模方法
  • 65. 活动图的建模 创建活动图共有5个任务: 1)标识需要活动图的用例。 2)建模每一个用例的主路径。 3)建模每一个用例的从路径。 4)添加游泳道来标识活动的事务分区。 5)改进高层活动并添加更多活动到图中。
  • 66. 活动图的建模1. 标识用例 在建模活动图之前,需要首先确定要建模什么。下面的教师更新分数用例是一组较大用例的一部分,我们就从它开始。如下图所示。这个用例实际上使用了3个用例。我们不仅有Update Grade用例,还有Save Grade和Load Grade用例。
  • 67. 活动图的建模2.建模主路径 在开始创建用例的活动图时,往往先建立一条明显的路径执行工作流,然后从该路径进行扩展,如下图所示。 该路径仅考虑用例的正常活动路径(登录、选择学生、加载他们的分数,修改分数,保存修改结果等活动过程), 没有考虑任何错误和判断的路径。
  • 68. 活动图的建模3.建模从路径 考虑用例其他可能的工作流情况。如处理错误,或许是执行其他活动。
  • 69. 活动图的建模
  • 70. 活动图的建模4.添加泳道 泳道对于提高活动图的可读性非常有益,在本例中也不例外。在活动图建模这一步中,可把活动图分成了两个游泳道,如下图所示。第一个游泳道是 Teacher,第二个是 Website。Teacher是用例的参与者,而 Website是提供后台功能的泛化组件。 这里,我们将再一次反复向活动图添加更多的细节。在本例中,我们要添加状态以便指示现在处于哪一个转折点。在验证了教师的身份之后,把状态设置为Validated或者Not Validated,在加载学生信息之后,把状态设置为Student Loaded。 最后,我们决定让每一个出错消息都在活动图中的自己活动中,因此提供了Logon Error、Data Load Error和Data Save Error处理。
  • 71. 活动图的建模
  • 72. 活动图的建模5. 改进高层活动 活动图建模的最后一步强调了反复建模的观点。在这一步中,添加更多的细节。 在教师记录学生分数用例的活动图中,我们可以看到 Load Student Info活动非常复杂,它实际上包含了许多功能,如下图所示。
  • 73. 活动图的建模
  • 74. 活动图的建模练习: 建模一个活动图 选择Update Inventory用例,对它单独建模一个详细的活动图。
  • 75. 活动图的建模