博客主页:屠一乐的博客
发文时间:2023.3.21
一定存在只有你才能做成的事
博主水平有限,如有错误,欢迎指正
欢迎各位收藏评论✉
通信图的概念:通信图(协作图)是表现对象交互关系的图,它展现了多个对象在协同工作达成共同目标的过程中互相通信的情况,通过对象和对象之间的链、发送的消息来显示参与交互的对象。
首先通信图一样是一种交互图,它描述的是对象和对象之间的关系,即一个类操作的实现。简而言之就是,对象和对象之间的调用关系,体现的是一种组织关系。
通信图中的元素主要有对象、消息和链三种。对象和链分别作为通信图中的类元角色和关联角色出现,链上可以有消息在对象间传递
从结构方面来看,通信图包含了一个对象的集合并且定义了它们之间的行为方面的关系,表达了一些系统的静态内容。
从行为方面来看,通信图包含了在各个对象之间进行传递交换的一系列的消息集合,以完成协作的目的。
通信图是一种描述协作在某一语境下的空间组织结构的图形化方式,在使用其进行建模时,主要具有以下三个作用。
1)通过描绘对象之间消息的传递情况来反映具体使用语境的逻辑表达。
2)显示对象及其交互关系的空间组织结构。
3)表达一个操作的实现。
通信图的组成元素: 对象、链、消息
对象
通信图中的对象与顺序图中对象的概念相同,都是表示类的实例。
通信图只关注相互有交互作用的对象和对象关系,而忽略其他对象。
由于通信图中不表示对象的创建与销毁,因此,对象在通信图中的位置没有限制。
与顺序图中对象的表示法不同的是,通信图中的无法显示对象的生命线。
链
通信图中的链与对象图中的链在语义以及表示法上都相同,都是两个(或多个)对象之间的独立连接,是关联的实例。链同时也是通信图中关联角色的实例,其生命受限于协作的生命。
链连接的两个对象之间允许在交互执行过程中进行消息传递和交互。UML也允许对象自身与自身之间建立一条链。链可以通过对自己命名来进行区分和说明,也可以仅仅做连接而不进行命名。
消息
通信图的消息需要附加在对象之间的链上,链用于传输或实现消息的传递。
通信图中的消息通过在链的上方或下方添加一个短箭头来表示,通常需要使用阿拉伯数字作为序号来表示通信图中发送消息的顺序。
通信图与顺序图的异同点:
通信图与顺序图的共同点主要有如下3点:
1)主要元素相同。两种图中的主要元素都是对象与消息,且都支持所有的消息类型。
2)表达语义相同。两种图都是对系统中的交互建模,描述了系统中某个用例或操作的执行过程,二者的语义是等价的。
3)对象责任相同。两种图中的对象都担任了发送者与接收者的角色并承担了发送与接收消息的责任。通过对象之间消息的传递来实现系统的功能。
两种图之间的不同点也有如下3点:
1)通信图偏重于将对象的交互映射到连接它们的链上,这有助于验证类图中对应的类之间关联关系的正确性或建立新的关联关系的必要性。然而顺序图偏重描述交互中消息传递的逻辑顺序。因此通信图更适用于展示系统中的对象结构,而顺序图则擅长表现交互中消息的顺序。
2)顺序图可以显式地表现出对象创建与撤销的过程,而在通信图中,只能通过消息的描述隐式地表现这一点。
3)顺序图还可以表示对象的激活情况,而对于通信图来说,由于缺少表示时间的信息,除了对消息进行解释,无法清晰地表示对象的激活情况。
通信图与顺序图对比
时序图
通信图
通信图建模技术
按组织对控制流建模
识别交互的语境,即交互所处的环境。
识别出图中应该存在的对象。
识别可能有消息传递的对象并设置链。
设置对象间的消息。
如果需要更多约束,如时间或空间的约束,可以使用其他的约束来修饰这些消息。
案例(1)添加新书
案例(2)学位初评
教务人员通过学号在学位初评系统查询学生的初评情况。学位初评系统分别在成绩管理系统、奖罚管理系统、毕业设计管理系统查询成绩、奖罚、毕业设计情况。并根据情况生成学位初评结果,通过信息打印模块打印初评情况。
案例(3)登录系统
案例(4)添加用户信息
顺序图的概念: 顺序图是按时间顺序显示对象交互的图。它显示了参与交互的对象和所交换信息的先后顺序,用来表示用例中的行为,并将这些行为建模成信息交换。
顺序图是一种交互图,强调消息的时间顺序,亦称时序图
顺序图主要包括四个元素:对象、生命线、激活和消息。
在UML中,顺序图将交互关系表示为一张二维图。
其中纵向是代表时间维度,时间向下延伸,按时间依次列出各个对象所发出和接收的消息。水平方向是代表对象的维度,排列着参与交互的各个独立的对象。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-LuAa2iKU-1679397331696)(https://gitee.com/qiangzi-icu/picture/raw/master/1130413-20190208205028411-980536992.png)]
顺序图的三种主要作用:
1)细化用例的表达。本章前面我们已经提到,使用顺序图的一大用途,就是讲用例所描述的需求与功能转化为更加正式、层次更加分明的细化表达。
2)有效地描述类职责的分配方式。我们可以根据顺序图中各对象之间的交互关系和发送的消息来进一步明确对象所属类的职责。
3)丰富系统的使用语境的逻辑表达。系统的使用语境即为系统可能的使用方式和使用环境。
顺序图的组成元素:对象、生命线、激活、消息。
对象
顺序图中的对象与对象图中的概念一样,都是类的实例。顺序图中的对象可以是系统的参与者或者任何有效的系统对象。
对象的创建由头符号来表示,即在对象创建点的生命线顶部使用显示对象名和类名的矩形框来标记。
在位置上,一个被放置于顺序图顶端的对象,意味着在这个交互的开始之前,我们已经拥有这样一个对象了。如果一个对象出现在其它位置上(不在顶端),则说明这个对象是在交互执行到某些步骤的时候被创建出来的。被创建出来的对象可以在接下来的时间里被其它对象的消息所激活,也可以以同样的方式被销毁。
生命线
生命线代表了一次交互中的一个参与对象在一段时间内存在。具体地说,在生命线所代表的时间内,对象一直是可以被访问的——可以随时发送消息给它。
在顺序图中,生命线位于每个对象的底部中心位置,显示为一条垂直的虚线,与时间轴平行,带有一个显示对象的头符号。
对于在交互过程中被创建的对象,其生命线从接收到新建对象的消息时开始。对于在交互过程中被销毁的对象,其生命线在接收到销毁对象的消息时或在自身最后的返回消息之后结束,同时用一个“X”标记表明生命线的结束。
激活
激活,又称为控制焦点,表示一个对象执行一个动作所经历的时间段,既可以是直接执行,也可以是安排下级过程执行。同时,激活也可以表示对应对象在这段时间内不是空闲的,它正在完成某个任务,或正被占用。
激活在UML中用一个细长的矩形表示,显示在生命线上,如图8-5所示。矩形的顶部表示对象所执行动作的开始,底部表示动作的结束。
消息
除了以上这些消息类型以外,Rose还扩充了两种消息类型,分别是阻止消息与超时消息。
阻止消息:当消息的发送者传递消息给接收者,如果接收者无法立即接收,则发送者放弃该消息。
超时消息:若发送消息后接收者无法在指定时间内接收,则发送者放弃该消息。
顺序图中的结构化控制
在UML 2中,顺序图提供了“片段” 机制,可以通过顺序图来表达更加复杂的动作序列。
可选片段:关键字为opt,表示一种单条件分支。
条件片段:关键字为alt,表示一种多条件分支。
并行片段:关键字为par,表示片段内有多个并行子片段的片段。
循环片段:关键字为loop,表示一个循环。
交互片段:关键字为ref,表示对一段交互的引用。
顺序图建模技术
按时间顺序对控制流建模:
设置交互的语境。交互语境即交互所在的环境,包括交互属于那个系统、子系统,包含哪些类和对象,对应于哪个用例或协作的脚本等。
设置交互的场景,即识别对象在交互中扮演的角色,根据对象的重要性排列对象的顺序。
为对象设置生命线。
按时间顺序排列消息。
设置激活期。
附加时间和空间约束。
设置前置与后置条件。
补充
顺序图的变体——时间图
时间图是UML 2中新增加的图,相当于另一种显示顺序图的方法。
时间图与顺序图的主要不同之处有:
1)时间轴与对象轴交换了位置。在时间图中,纵向表示不同对象,横向表示时间的延伸。
2)不同对象的生命线在独立的矩形框中显示,矩形框纵向堆砌成整个图。
3)对象可以有不同的状态。每个对象的状态在其生命线的最左侧纵向排列,生命线通过上下起伏来表示对象当前所处的状态。
4)可以显示一个时间标尺。时间标尺上有时间刻度,用来表示时间间隔。
5)不同对象生命线上的时间是同步的。
建立顺序图的步骤:
1.确定需要建模的工作流
2.从左到右布置对象
3.添加消息和条件以便创建工作流
例子:系统用户注册模块
案例(1)就餐
需求描述如下:
客人到餐厅就餐,服务员提供菜单,客人点菜后把菜单交给服务员。服务员向客人确定菜单后,将菜单提交给大堂经理。大堂经理把菜单提交给大厨,大厨完成菜品后传递给大堂经理,大堂经理安排服务员传菜。有的客人可能需要酒水,有的客人不需要酒水。客人结束用餐后,服务员提供账单,客人结账。
确认对象
确定出现顺序
确定消息
案例(2)ATM机取款
需求描述如下:
用户通过ATM机,插入银行卡。系统提示输入密码,用户输入密码。系统检查密码是否正确,密码正确用户选择取款。系统提示输入取款金额。用户输入金额,系统判断其合法性。在获取用户输入金额后,系统开始事物处理,减少账户金额,输出相应现金。
案例(3)成绩查询
需求描述如下:
老师通过学号在系统查询成绩,有存在、不存在两种情况。存在显示成绩,不存在显示查无此人。
基本概念: 状态机图,UML 1.x规范中称状态图,是一个展示状态机的图。
状态机图基本上就是一个状态机中元素的投影,这也就意味着状态机图包括状态机的所有特征。状态机图显示了一个对象如何根据当前状态对不同事件做出反应的动态行为。
状态机图主要由状态和转换两种元素组成。
状态机
状态机是一种行为,它说明对象在其生命周期中响应事件所经历的状态变化序列以及对那些时间的响应。
一般情况下,一个状态机依附于一个类,用来描述这个类的实例的状态及其转换,和对接收到的事件所做出的响应。此外,状态机也可以依附于用例、操作、协作等元素上,描述它们的执行过程。
状态机从对象的初始状态开始,响应事件并执行某些动作,从而引起状态的转换;在新状态下又继续响应事件并执行动作,如此循环进行到对象的终结状态。
状态机主要由状态、转换、事件、动作和活动5部分组成。
1)状态表示对象的生命周期中的一种条件或情况。
2)转换表示两种状态间的一种关系。
3)事件表示在某一时间与空间下所发生的有意义的事情。
4)动作表示一个可执行的原子操作,是UML能够表达的最小计算单元
5)活动表示状态机中的非原子执行,一般由一系列动作组成。
状态机图作用:状态机图用于对系统的动态方面进行建模,适合描述一个对象在其生命周期中的各种状态及状态的转换。
状态机图的作用主要体现在以下几点:
1)状态机图描述了状态转换时所需的触发事件和监护条件等因素,有利于开发人员捕捉程序中需要的事件。
2)状态机图清楚地描述了状态之间的转换及其顺序,这样就可以方便地看出事件的执行顺序,状态机图的使用节省了大量的描述文字。
3)清晰的事件顺序有利于开发人员在开发程序时避免出现事件错序的情况。
4)状态机图通过判定可以更好地描述工作流在不同的条件下而出现的分支。
状态机图的组成: 简单状态、转换、伪状态。
简单状态
状态是状态机图的重要组成部分,它描述了一个对象稳定在的某一个持续过程或所处状况,与动态行为的执行所产生的结果。
当对象满足某一状态的条件时,该状态被称为激活的。
在UML中,状态分为简单状态与复合状态。
a.简单状态就是没有嵌套的状态。
b.初态和终态是两个特殊的状态,分别表示状态机的入口状态和出口状态。对于一个不含嵌套结构的状态机,只能有一个初态,可以有一个或多个终态甚至没有终态。
状态一般由状态名称、子状态、入口动作和出口动作、内部执行活动、内部转换和可推迟事件组成。对于简单状态而言,不会有子状态。
状态名称:可以把一个状态与其他状态分别开来,即状态名称必须在当前层次内保持唯一。没有名称的状态被称为匿名状态。
入口动作与出口动作:由其它状态转移到当前状态或从当前状态转移到其它状态时要附带完成的动作。表示为“entry /动作表达式”和“exit /动作表达式”。
内部执行活动:当对象进入一个状态时,在执行完入口动作后就开始执行该活动。使用“do/活动表达式”来表示。
内部转换:指的是不导致状态改变的转换。内部转换只有源状态而没有目标状态。表示为“事件名称(事件参数)/活动表达式”。
可推迟事件:不会触发状态的转换,且当对象处于该状态时事件可能会被推迟,但不会丢失。格式为“事件名称/defer”。
转换
转换是两种状态间的一种关系。它指明当特定事件发生或特定条件满足时,处于某状态(源状态)的对象将执行某一动作或活动并进入另一状态(目标状态)。
转换表示为从源状态指向目标状态的实线箭头,并附有转换的标签。转换的标签格式如下:
⌊转换名称:⌋opt 事件名称opt ⌊(参数列表)⌋opt ⌊[监护条件]⌋opt ⌊/效果列表⌋opt
转换——转换名
转换名称是转换的标识符。在实际使用中,为了防止转换名称与转换的触发器或监护条件混淆,一般不必为转换命名。
对于一个转换,除了源状态、目标状态外,还要有事件、监护条件和效果列表等内容。这三个部分的内容对转换不是必需的,在使用时要根据转换所表达的具体语义来添加相应内容。
转换——事件
事件是在某一时间与空间下所发生的有意义的事情,是系统执行中发生的值得建模的事物。
事件一般被状态或转换所发送和接收。在转换中被接收的事件也被称为该转换的触发器或触发事件。
事件包含一个参数列表(可能为空),用于从事件的产生者向其接收者传递信息。
对应于触发器转换,没有明确的触发器的转换成为结束转换或无触发器转换,是在状态的内部活动执行完毕后隐式触发的。
能够在触发器中接收的事件有以下四种:
1)调用事件:调用事件表示对象接收到一个调用操作的请求。其期待的结果是事件的接收者触发一个转换并执行相应的操作。
2)改变事件:改变事件的发生依赖于事件中某个表达式所表达的布尔条件。改变事件没有参数,要一直等到条件被满足才能发生。
3)信号事件:信号由一个对象准确地送给另一个或一组对象。发送给一组对象的信号可能触发每个对象的不同转换。
4)时间事件:时间事件的发生依赖于事件中的一个时间表达式。比如,可以让对象进入某状态后经过一段给定的时间或到达某个绝对时间后发生该事件。
转换——监护条件
监护条件是一个转换被激发之前必须满足的一个条件。
监护条件是一个布尔表达式,可以根据触发器事件的参数、属性和状态机所描述的对象的链接等写成。当转换接收到触发事件后,只有监护条件为真,转换才能被激活。
对监护条件的检验是触发器计算过程的一部分,对于每个事件监护条件只检查一次。如果事件被处理时监护条件为假,那么除非再次接收到一个触发事件,将不会再重新计算监护条件的值。
转换——效果列表
效果列表是一个过程表达式,在转换被激活时执行,表示转换附加的效果。
效果列表包括多个动作,可以根据操作、属性、拥有对象的连接、触发器事件的参数等写成。动作可以是一个赋值语句、算术运算、发送事件、调用对象的属性或操作、创建或销毁对象等。
效果的表达语法与其实现的具体内容有关。
例子(1):简单的状态机图—吃饭状态
做需求时,需要了解以下六种元素:起始、终止、现态、次态(目标状态)、动作、条件,我们就可以完成一个状态机图了
①现态:是指当前所处的状态。
②条件:又称为“事件”,当一个条件被满足,将会触发一个动作,或者执行一次状态的迁移。
③动作:条件满足后执行的动作。动作执行完毕后,可以迁移到新的状态,也可以仍旧保持原状态。动作不是必需的,当条件满足后,也可以不执行任何动作,直接迁移到新状态。
④次态:条件满足后要迁往的新状态。“次态”是相对于“现态”而言的,“次态”一旦被激活,就转变成新的“现态”了。
画状态机图的注意事项:
1、避免把某个“程序动作”当作是一种“状态”来处理。那么如何区分“动作”和“状态”?“动作”是不稳定的,即使没有条件的触发,“动作”一旦执行完毕就结束了;而“状态”是相对稳定的,如果没有外部条件的触发,一个状态会一直持续下去。
2、状态划分时漏掉一些状态,导致跳转逻辑不完整。所以在设计状态机时,我们需要反复的查看设计的状态图或者状态表,最终达到一种牢不可破的设计方案。
例子(2)需求岗工作状态
伪状态
概念:伪状态指的是在状态机中具有状态的形式,却具有特殊行为的顶点。
当一个伪状态处于活动时,系统不会处理事件,而是瞬间自动转换到另一个状态,并且这种转换是没有事件进行显式触发的。
最常见的伪状态包括初态、选择、分叉与结合、历史状态等。
a.初态:初态实际上不是一个真正的状态,它更像是状态机的入口。初态的具体语义概念是模糊的且是瞬时的,不能存在触发器进行触发,否则对象将可能会长时间停留在一个语义不明的初态中。
b.选择是状态机中的一个伪状态节点,用于表达状态机中的分支结构。
一个选择节点将一个转换分割为两个片段,即将触发事件与监护条件分离。
选择节点不同分支上的监护条件应该覆盖所有情况,否则状态机将不知道如何运行。
例子(3)订单状态机图
复合状态
概念:复合状态是指包含有一个或多个嵌套状态机的状态。
a.顺序复合状态:当顺序复合状态被激活时,只有一个子状态会被激活。
b.并发复合状态:复合状态中包括两个或多个并发执行的子状态机。
在复合状态中,我们可以先将一部分细小的状态组合成一个状态机,把这个新的状态机作为总状态机图中的一个复合状态来呈现。
顺序复合状态
顺序复合状态又被称为非正交状态,是仅含一个状态机的复合状态。
当顺序复合状态被激活时,只有一个子状态会被激活。它只增加了一层子结构,没有增加额外的并发性。
并发复合状态
并发复合状态,也称正交复合状态,是包括两个或多个并发执行的子状态机的复合状态。
并发复合状态将复合状态分成若干个正交区域,每个区域都有一个相对独立的子状态机。如果该并发复合状态是激活的,那么该状态中每个区域都将有一个状态是激活的。
历史状态
历史状态是应用于复合状态的一种伪状态,它代表上次离开该复合状态时的最后一个子状态。
当一个来自于复合状态外的转换为复合状态内的历史状态时,将使历史状态所记录的子状态被激活。
深历史状态保存的更深的嵌套层次中的子状态。
状态机图的建模技术
为对象的生命周期建模
确定状态机的语境。
设置状态机的初态和终态。
决定该对象的状态机中可能需要响应的事件。
从初态到终态,列出这个对象可能处于的所有顶层状态。用转移将这些状态连接起来,明确转移的触发器和监护条件,接着向转移中添加效果动作。
识别状态是否需要有入口动作和出口动作。
如果需要,使用子状态来对顶层状态进行嵌套。
检查状态机中提供的事件是否与所期望的相匹配;检查所有事件是否都已经被状态机所处理。
检查状态机中的动作是否能由类或对象的关系、操作等支持。
跟踪状态机,确保状态机是良构的,即不存在无法到达的状态,也不会发生停机。
例子(4)音乐播放
例子(5)取消航班
例子(6)系统进程状态机图
案例
新生入学后,学校在三个月内按照国家招生规定对其进行复查。复查合格者予以注册,取得学籍。复查不合格者,学校区别情况予以处理,直至取消入学资格。
学生有如下情况之一者,应予休学:
(一)因伤病经学校指定医院诊断,须停课治疗、休养一学期1/3时间;
(二)一学期请假缺课超过该学期总学时的1/3;
(三)传染性肝炎、肺结核等传染性疾病;
(四)因某种特殊原因,学校认为必须休学。
学生休学至少一学期,一般以一年为限。学生复学后,休学之前已记入成绩档案的考核成绩继续有效,并作为学籍处理依据.
学生复学按下列规定办理:
(一)学生因伤病休学申请复学时,须持有二级甲等以上医院诊断书,证明身体健康,并经学校指定医院复查合格,方可复学;
(二)学生休学期满后应于学期的注册期内持有关证明,经教务处核准后编入原专业相应班级选课学习;
学生有下列情况之一者,应予退学:
(一)学生在读期间,3次出现在一学期中取得的课程学分不足10学分(不含重修和补考学分;毕业学期除外;第一次提出警告,第二次提出退学警告,由教务处公布名单,院系负责通知学生家长);
(二)休学、保留学籍期满,在规定期限内不办理复学手续;
(三)休学累计满二年,经复查不合格;
(四)因伤病需要休学,经学校动员后仍不办理休学手续;
(五)经学校指定医院确诊患有疾病,或意外伤残无法继续在校学习;
(六)未请假离校连续2周末参加学校规定的教学活动;
(七) 超过学校规定期限未注册而又无正当事由;
(八)本人要求退学。
学生在规定的学习年限(4年制3~6年,5年制4~7年)内修完本专业培养计划规定的全部教学环节,取得注册专业规定的毕业学分,准予毕业,发给毕业证书。
基本概念:是UML中一种重要的用于表达系统动态特性的图
活动图的作用是描述一系列具体动态过程的执行逻辑,展现活动和活动之间转移的控制流,并且它采用一种着重逻辑过程的方式来叙述。
在对软件密集系统建模的时候,有时需要详细地模拟系统在运作时的业务流程。面对这种需要,我们可以分析对象间发生的活动和触发条件,选用活动图对这些动态方面进行建模。
活动图的主要组成元素包括动作、活动、动作流、分支与合并、分叉与汇合、泳道和对象流等。
活动图组成元素:动作和活动节点、开始和终止、控制流、判断节点、合并节点、泳道。
动作和活动节点
动作代表一个原子操作,操作可能是任何合法的行为。
动作可以是并且不限于:创建或删除对象、发送消息、调用接口,甚至数学运算以及返回表达式的求值结果。
活动节点是一系列动作,主要用于实现动作序列的简化和动作图的嵌套。活动节点在图例上的表达方式和动作相同。、
开始和终止
活动图中的开始和终止是两个标记符号,分别标记了业务流程的起始位置和结束位置。
活动图中必须有且仅有一个开始标记,一般至少有一个结束标记。(存在一些特殊的无穷过程不存在终止标记。)
控制流
控制流是活动图中用于标示控制路径的一种符号。它负责当一个动作或活动节点执行完毕后,将执行主体从当前已完毕的节点转移到过程的下一个动作或动作节点。
控制流从活动图的开始标记开始运行,经过顺序、分支等结构引导着各个动作的连续执行。
判断节点
判断节点是活动图中进行逻辑判断、并创造分支的一种方法。
判断节点具有一个进入控制流和至少两个导出控制流。
判断节点具有多个导出流,对于每条导出流而言,应当在表示该控制流的箭头上附加控制条件。
合并节点
合并节点将多个控制流进行合并,并统一导出到同一个离开控制流。
合并节点仅有逻辑意义而没有时间和数据上的意义:几个动作都指向同一个合并节点也并不意味着这些动作要在进入之后互相等待或进行同步数据之类的操作。
泳道
泳道是将活动中的具体活动按照负责进行该活动的对象进行分区,一条泳道中的所有活动由同一个对象来执行。
除了以上的对线性流程进行分区以外,使用泳道表示法可以更清晰地表示并发。
工时审批流程
员工填写工时,项目工时报项目经理审批后再报部门经理审批、非项目工时直接报部门经理审批。
活动图的高级概念:分叉节点、结合节点、对象流、扩展区域
分叉节点与结合节点
分叉节点是从线性流程进入并发过程的过渡节点,它拥有一个进入控制流和多个离开控制流。分叉节点的所有离开流程是并发关系,即分叉节点使执行过程进入多个动作并发的状态。
结合节点是将多个并发控制流收束回同一流程的节点标记,功能上与合并节点类似。结合节点的各个进入控制流间具有并发关系,它们在系统中同时运行。
例子:学生选课的活动图
学生选上课后需要上课、复习、考试、查询成绩,查询成绩后可以申请复核、查询复核结果、成绩如果及格庆祝、未通过补考或重修。
对象流
对象流是UML为填补活动图与面向对象思想之间的疏离而出现的。如果需要在活动图中表现对象流,则首先需要绘制出泳道,且对象应该作为泳道的负责对象出现。
扩展区域
扩展区域是表示过程中的某个活动片段的模型。扩展区域可以将一个需要体现在活动图中的循环过程进行提取(不需要体现在活动图中的,可以直接使用活动节点来略写)。
活动图建模技术
对业务流程建模
选择一个将要描述的重要过程,过程中尽量涉及数量少但是关键的对象或参与者,将无关或关联很小的对象排除在外,为每一个对象或参与者绘制泳道。
在总体业务流程中提取关键的动作或活动节点,并且将他们与对象或参与者相对应;若发现有些动作无法对应,则考虑动作是否在这个流程中起关键作用,或者是否遗漏了某些对象或参与者。
规定初始状态;确定过程可能的结束位置,为活动图添加开始和结束节点。
从业务流程的开始节点开始,把过程中发生的动作按事件顺序排列,依次把这些动作添加到活动图中。
把局部的过于复杂的动作序列加以总结,绘制成一个活动节点;如果需要,把这个动作序列使用另外的活动图进行建模。
找出连接这些动作和活动节点的控制流,并且准确找到过程中的分支、分叉、合并与结合节点。
如果业务流程中有一些关键对象的值或状态需要加以描述,使用对象流添加这些对象在某些动作或活动节点前后的状态描述。
对用例交互建模
选择概念用例——即从系统对客户提供的各种服务中确定出一个关键业务,这个关键业务可能是在多个相同或不同的情况下反复出现,或者是系统需要提供的一个关键服务或进行的关键操作。
对于当前选择的用例,通过事件流进行顺序叙述,并找出所有的参与者主动动作,把这些动作整理成动作或活动节点。
把参与者和系统划分为两个泳道,如果有除了主参与者以外的其它参与者,也为它们分别划分泳道。
把活动节点纵向按照事件发生顺序、横向按照参与者角色和系统角色对应填入活动图中。
绘制活动图
“活动图” 比较直观易懂;与传统的流程图十分的相近,只要能够读懂活动图,就不难画出活动图
绘制时首先决定是否采用泳道:主要根据活动图中是否要体现出活动的不同实施者
然后尽量使用分支、分岔和汇合等基本的建模元素来描述活动控制流程
如果需要,加入对象流以及对象的状态变化,利用一些高级的建模元素(如辅助活动图、汇合描述、发送信号与接收信号、引脚、扩展区)来表示更多的信息
活动图的建模关键是表示出控制流,其它的建模元素都是围绕这一宗旨所进行的补充
例子(1)上班活动图
早上起来,心里斗争是否去上班。如果决定睡懒觉,就打电话请假,继续睡觉。如果决定上班,洗漱后出门上班。上班时要决定吃不吃早餐,吃就买早餐在途中食用,不吃就回公司再做打算。
例子(2)汽车租赁
例子(3)客户下单
用户下单后,生成送货清单时让客户选择支付方式。若支付成功后,将收款清单和送货地址交到供货商,供货商修改订单状态,如果送货完成则订单完成否则返回供货商。若支付超时、或支付失败,则结束。
基本概念:组件图即是用来描述组件与组件之间关系的一种UML图。组件图在宏观层面上显示了构成系统某一个特定方面的实现结构。
组件图中主要包含三种元素,即组件、接口和关系。
组件图通过这些元素描述了系统的各个组件及之间的依赖关系,还有组件的接口及调用关系。此外,组件图还可以使用包来进行组织,使用注解与约束来进行解释和限定。
组件图在面向对象设计过程中起着非常重要的作用:它明确了系统设计,降低了沟通成本,而且按照面向对象方法进行设计的系统和子系统通常保证了低耦合度,提高了可重用性。
组件图的组成元素:组件、接口、组件图中的关系、组件的内部结构。
组件
组件,是系统设计的一个模块化部分,它隐藏了内部的实现,对外提供了一组接口。
组件是一个封装完好的物理实现单元,它具有自己的身份标示和定义明确的接口。并且由于它对接口的实现过程与外部元素独立,所以组件具有可替换性。
组件在系统中一般存在三种类型,分别为部署组件、工作产品组件和执行组件。
a.配置组件是构成系统所必要的组件,是运行系统时需要配置的组件。
b.工作产品组件主要是开发过程的产物,是形成配置组件和可执行文件之前必要的工作产品,是部署组件的来源。工作产品组件并不直接参与到可执行系统中,而是用来产生系统的中间产品。
c.执行组件代表可运行的系统最终运行产生的运行结果,并不十分常见。
一个ATM机的组件:
系统设计的一个模块化部分
显示界面
读卡机
业务操作----查询、取款、转账、挂失
学校教务系统的组件:
系统设计的一个模块化部分
登录界面、业务动作、层业务实现层
学生管理、教师管理、成绩维护、选课
接口
对于一个组件而言,它有两类接口,提供接口与需求接口。
a.提供接口:又被称为导出接口或供给接口,是组件为其他组件提供服务的操作的集合。
b.需求接口:又被称为引入接口,是组件向其他组件请求相应服务时要遵循的接口。
端口
端口(port)是一个被封装的组件的对外窗口。在封装的组件中,所有出入组件的交互都要通过端口。组件对外可见的行为恰好是它端口的综合。此外,端口是有标识的。别的组件可以通过一个特定端口与另一个组件通信。在实现时,组件的内部组件通过特定的外部端口来与外界交互,因此,组件的每个部件都独立与其他部件的需求。端口允许把组件的接口划分为离散的并且可以独立使用的几部分。端口提供的封装性和独立性更大程度上保证了组件的封装性和可替换性。
组件的内部结构
在UML 2规范中,组件允许通过嵌套结构来表现组件的内部结构。
子组件之间通过接口建立关系。图中组件边缘的小矩形被称为端口,端口可以理解为组件的入口与出口,组件通过端口与外部元素相互协作。端口上可以添加提供接口或需求接口来使组件得以扩展。
组件图中的关系
1.依赖关系
a.组件与需求接口之间建立依赖关系
b.组件与组件之间建立依赖关系:说明在运行过程中A在某些行为上依靠组件B的支持
2.实现关系
组件与提供接口之间建立实现关系
组件图的建模技术
对源代码结构建模
识别出感兴趣的源代码文件集合,并建模为组件。
如果系统规模较大,使用包对组件进行分组。
可以使用约束或注解来表示源代码的作者、版本号等信息。
使用接口和依赖关系来表示这些源代码文件之间的关系。
检查组件图的合理性,并识别源代码文件的优先级以便进行开发工作。
对可执行程序结构建模
识别出相关的运行组件集合。
考虑集合中每个组件的类型。
如果系统规模较大,可以使用包对组件进行分组。这里包的使用可以对应于相应文件的文件存储结构。
分析组件之间的关系,使用接口和依赖关系建模这些关系。
考量建模结果是否实现了组件的各个特性,对建模的结果进行细化。
案例(分析一个已经存在的系统)
画出下列描述的网上商城组件图:购物车、订单、库存、支付管理组件,使用组件图进行完善。
识别组件:购物车、订单、库存、支付管理
识别组件之间的关系通过一个现实的例子。
在购买一件商品时,我们首先是浏览商品,了解商品详情。在商品详细页面上,我们可以看到一个“加入购物车”
组件图
基本概念:是一种展示运行时进行处理的节点和在节点上存在的制品的配置的图。
部署图它阐述了在实际应用中软件和它的运行环境的关系,并且描述了软件部署在硬件上的具体方式。
部署图中的主要元素包括节点与节点之间的关联关系。此外,部署图中也可以使用注解和约束。
部署图的组成元素:节点、部署图中的关系。
节点
节点是运行时的物理对象,代表一个计算资源。
在UML中,节点被分为两类:
a.处理器:是一些具有计算能力的节点,并且一般可以运行软件。
b.设备:是一些不具有计算能力的节点,它们可能作为一些输入输出设备或者本身是处理器的外部连接设备。
部署图中的关系
部署图的节点之间使用关联关系来表示节点之间的通信路径,称为连接。
一般对关联关系不进行命名,而是使用构造型来区分不同类型的通信路径或通信的实现方式,例如<>、<
部署图建模技术
对系统使用部署图进行建模,一般会用于以下三种方式之一:嵌入式系统、B/S系统和全分布式系统。
对系统物理结构建模:
识别系统中的设备,并建模为节点。
使用构造型对不同种类的节点进行限制说明。如果可能,可以利用扩展机制创建适当的图标来表示。至少要区分出处理器与设备。
对图中的节点,分析哪些节点之间需要进行通信,在这些节点之间建立关系并用适当的构造型来描述。
如果需要,添加注解和约束来对模型进一步描述。
部署图的建模步骤:
1.找到需要的部署的各个节点,如网络硬件设备、服务器设备等
2.确定各个节点之间的链接及通信方式
3.从性能、可扩展性、可维护性、可以执行角度确定各类节点的数目及部署方式
4.绘制部署图
例子