1五、活动图(ActivityDiagram)活动图是系统的一种行为视图,它描述参与行为的对象类的活动的顺序,包括依赖于条件的行为和并发行为。活动图演示了系统中的功能流。如:在业务模型中显示业务工作流;在收集需求时显示一个用例中的事件流等。活动图定义了工作流从哪里开始,到哪里结束,工作流中发生了哪些活动,这些活动按什么顺序发生,活动是由哪些对象来完成的。活动图是状态图的一种扩展形式。如果在一个状态图中的大多数状态是表示操作的活动,而转移是自动转移,就演化为活动图。但两者有区别,活动图描述的是响应内部处理的对象类行为,状态图描述的是对象类响应事件的外部行为。活动图与交互图相比也各有侧重点。活动图着重表现的是活动的控制流;而交互图着重表现的是对象到对象的控制流。2接受订货填写订单通宵发货常规发货寄送货票接收付款关闭订货[快速订货][否则]顾客订货处理的活动图3主要内容1.活动图的组成2.活动分解3.并发与同步4.活动图的应用45.1活动图的组成[1]活动图的基本图形元素有:动作状态(或活动状态)、转移、泳道、对象流、信号。此外,初始状态、终结状态、判定、同步等也是常用的图形元素和符号。(1)动作状态:表达不可中断的动作或操作的执行。动作的持续时间不重要。表示方式:圆边矩形图框,框内可以设置动作名称或动作表达式。动作状态可以有入转移,动作状态至少有一条出转移,出转移不是基于外部事件,而是隐含表示内部动作的完成。matrix.invert(tolerance:real)选择课程55.1活动图的组成[2]活动状态:表达一个非原子的运行。一个活动可以拥有一组不可中断的动作或操作。活动本身可以被中断,而且通常需要持续一个时间段才能完成。用动作图标来表示活动状态。活动状态可以进一步分解,或者用另外一个活动图来表示。与状态图一样,活动状态可以有入口动作和出口动作,也可以有内部转移。注:动作状态的图标可以代表一个不可中断的动作状态,也可以代表一个可以被中断的活动,后者可用另外的活动图详细表达。制定计划制订计划entry/SetGoal()65.1活动图的组成[3](2)转移:在活动图中转移用实箭线表示,箭线从一个动作出发指向另一个动作状态。转移可以是无条件的,也可以是有条件的。计算所得计算所得税发放津贴[else][总所得1600]计算所得计算所得税发放津贴[else][总所得1600]75.1活动图的组成[4](3)泳道(Swimlance):泳道代表对象对活动的责任。泳道把活动图中的活动划分为若干组,并把这些组指定给对象,这些对象必须履行该组所包含的活动。泳道是把活动与对象相联系的方法之一,它明确表示哪些活动由哪些对象进行的。在活动图上泳道用垂直实线画出,垂直线分隔的区域就是泳道。在泳道的上方给出泳道的名字或对象名字,该对象负责泳道内的全部活动。泳道没有顺序,不同泳道中的活动可以是顺序进行的,也可以是并发进行的,允许转移和对象流穿过泳道分隔线。8填写订单发货接受订货寄送货票关闭订货接收付款财务结算顾客服务处理订货泳道示例9考虑咨询公司会见一个新客户时的业务过程。活动可能这样发生:(1)公司业务员打电话给客户,确定一个约定。(2)如果约定的地点在公司内,那么公司中的技术人员就要为会面准备一间会议室。(3)如果约定地点在公司外,那么咨询顾问就要用便携电脑准备一份陈述报告。(4)咨询顾问与客户在约定的时间和地点见面。(5)业务员随后给他们准备好会议用纸。(6)如果会议产生了一个问题陈述,咨询顾问就要根据问题陈述建立一个提案并把该提案发给客户。在一般情况下,绘制活动图时应先集中注意力在业务工作上或系统的服务内容上,绘制动作状态和转移等,弄清楚系统的总体行为含义,而后在绘制泳道,把开展活动的责任分配到对象。10CallclientandsetupappointmentPrepareaconferenceroomPreparealaptop[appointmentonsite][appointmentoffsite]MeetwiththeclientSendfollow-upletterCreateproposal[statementofproblem]Sendproposaltoclient[nostatementofproblem]参见“创建文档”活动图业务过程“会见新客户”的活动图11CallclientandsetupappointmentSendfollow-upletterPrepareaconferenceroom[appointmentonsite]CreateproposalSendproposaltoclientMeetwiththeclientPreparealaptop[appointmentoffsite]参见“创建文档“活动图[statementofproblem][nostatementofproblem]CorporateTechnicianConsultantSalePerson125.1活动图的组成[5]当活动图过于复杂时,绘制泳道可能出现困难,这时可以不用泳道表现活动与对象的联系。替代的方法之一是在活动上贴上对象名标签,或者改用交互图指定负责活动的对象。(4)对象流(ObjectFlow):对象流是动作状态(或活动状态)与对象之间的依赖联系,表示动作使用对象或动作对对象的影响。在活动图中对象流用虚箭线表示。虚箭线从动作状态出发指向对象:表示该动作创建或更新了对象流所指的对象,该对象是动作的输出。虚箭线从对象出发指向动作状态:表示该动作使用对象流所指的对象,该对象是动作的输入。13按名找资源按名找技能指定技能给资源:资源-技能:技能:资源R:资源S:技能:资源-技能把技能指定给资源的活动图[资源中已指定技能][资源中未指定技能]145.1活动图的组成[6](5)信号事件(SignalEvent):在活动图中,可以使用信号发送构造型图标和信号接收构造型图标表示信号事件。发送信号图标是凸角五边形,接收信号图标是凹角五边形。当信号被接收时,会引起一个活动的发生。PressChannelNumberWatchChange(channel)ShowNewChannelTelevisionChange(channel)155.2活动分解一个活动可以分解为若干个子活动或动作,这些子活动或动作本身组成一个活动图。如果一个活动内嵌套了若干个活动或动作,则称该活动为组合活动,其中的被嵌套的活动称为子活动。使用活动分解的好处是,在高一层的活动图中只需要给出组合活动,不必涉及子活动图的内容,组合活动的内部行为可以在低一层的活动图中表示,这样便于抓住主要问题,使得图形更为简洁明了。16接受订货填写订单发货????????通宵发货常规发货寄送货票接收付款关闭订货[紧急订货][否则]组合活动示例17使用Office软件包建立一个文档的过程。一个活动序列可能如下:(1)打开Word处理软件包。(2)创建一个文档。(3)命名该文档并为该文档指定一个存放目录。(4)键入文档的内容。(5)如果文档中需要图形,则打开图形软件包,创建图形,将图形粘贴到文档中。(6)如果文档中需要电子表格,则打开电子表格软件包,建立电子表格,将电子表格粘贴到文档中。(7)保存该文件。(8)打印一份该文档的硬拷贝。(9)退出Office软件包。18[tablesnoneeded]OpenWordProcessingPackageCreateFileSaveFileTypetheDocumentOpenandUseGraphingPackageOpenandUseSpreadsheetSavetheFilePrintHardCopyExitOfficeSuite[graphicsneeded][graphicsnoneeded][tablesneeded]一个文档创建过程的活动图print(file)print(file):PrinterPrint[未完成][已完成]195.3并发与同步在活动图中用“分劈”(Fork)和“接合”(Join)来表达并发和同步行为。“分劈”和“接合”均用同步杆(Synchronizationbar)表示。对于“接合”的同步的规则:只有当所有的入转移全部完成其活动后才发生出转移。可有一种例外情况,就是条件线程(ConditionalThread),条件线程是从一个“分劈”发出的线程上加上条件,在执行时,如果该线程的条件取值为“假”,则就“接合”而论认为该线程已经完成。享用晚餐烹调菜肴煮饭安排餐桌打开啤酒[想喝酒]20砌筑基础主体结构水电准备安装门窗铺设室内管道室内装修安装水电设备竣工验收活动的同步状态示例215.4活动图的应用[1]活动图是一种用于系统的行为建模的工具,它能支持并发行为的描述特点,尤其适合与多线程的程序建模。缺点:动作与对象之间的连接关系不够清晰。可以主要通过在活动上标上对象名,或者用泳道划分对象的责任,或者通过对象流表示,但这些动作与对象关系的表达都不如在交互图中表现得直接和清晰。活动图实质上是一种流程图,但两者有区别。一般软件工程中常用的程序流程图所表示的内容,大多也能用活动图来表示,但传统的程序流程图描述的是处理过程,它的主要控制结构是顺序、分支和循环,各个处理之间有严格的顺序和时间关系;而活动图描述的是对象类(或模型元素)的活动的顺序关系所遵循的规则,它着重表现的是系统的行为。更为重要的是活动图能够表示并发活动的情景,流程图不能表示并发过程。另外,活动图是面向对象的,流程图是面向过程的。225.4活动图的应用[2]下列情况可以使用活动图:(1)分析UseCase:在分析UseCase时需要理解系统将会发生哪些动作,行为之间依赖关系是什么,此时可以用活动图来验证UseCase。(2)理解工作流程:活动图对理解业务处理过程十分有用。可以画出业务工作流的活动图与领域专家进行交流,明确业务处理操作是如何进行的,将会有怎样的变化。(3)描述复杂过程的算法:在这种情况下使用活动图不过是UML版的程序流程图,常规的顺序、分支过程在活动图中都能表现。利用分支条件也可以实现循环控制结构:用一个动作状态设置循环变量,另一个条件动作状态增加循环变量,再用一个判定测试循环结束条件。(4)处理多线程应用:利用活动图支持并发活动的特点,描述多线程应用的行为。下列情况不应使用活动图:表现对象之间的协同关系、理解对象在其生命期的行为等。这些任务可以分别用交互图、状态图来完成。23:CalculatorFib1:=1Counter:=1Fib:=Fib1print(Fib,n)Fib2:=1Counter:=2Fib:=Fib2Fib:=Fib1+Fib2Counter:=counter+1Fib1:=Fib2Fib2:=FibcomputeFib(n)[n=1][n1][n=2][n2][Counter=n][Countern]打印格式:第“n”个数时Fib用来说明对象中方法活动图的混合图245.4活动图的应用[3]在软件系统的分析和设计中,对业务领域的工作流的分析是至关重要的。可以使用活动图对工作流建模。采用以下步骤:(1)确定工作流的初始状态和终结状态,明确工作流的边界。(2)从工作流的初始状态开始,找出随时间而发生的活动和动作,把它们表示成活动状态或动作状态。(3)对于复杂的动作或多次重复出现的一组动作,可以把它们组成一个活动状态,并且用另外一个活动图来展开表示。(4)给出连接活动和动作的转移。首先处理顺序动作流,然后处理条件分支,最后处理分劈和接合(并发与同步)。(5)在活动图中给出与工作流有关的重要对象,并用虚箭线把它们与活动状态或动作状态相连接。(6)找出负责实现工作流的业务对象。这些对象可以是现实业务领域中的实体,也可以是抽象的概念和事物。为每个重要的概念建立一条泳道,把相关活动划分到泳道中。25定义候选体系结构精华体系结构分析行为设计组件设计实时组件设计数据库软件开发的工作流模型示例[