资源描述
,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,计算机科学与通信工程学院 betts-li,*,面,向,对,象,技,术,面向对象技术,第,3,讲 类与对象关系建模,内容提要,概念数据建模概述,类图与对象图,类的确定,类间关系确定,建模方法与实例,概念数据建模概述,在完成用例建模之后,便可以进行其他系统分析活动,而概念数据建模是最重要的分析活动之一。,概念数据建模是对组织数据的描绘,它以一种独立于实现的方式说明了数据的结构和数据之间的相互关系,为后续的分析设计提供了基础。,概念数据建模概述,概念数据建模的过程,概念数据建模概述,概念数据建模在系统分析中的作用,概念数据建模概述,如何进行概念数据建模?,必须包括以数据为中心的问题和调查,而不是以过程、逻辑或用户界面为中心,从对业务性质的透彻理解导出数据模型,也可以通过审查系统内部处理的特定业务文档,计算机显示、报表和业务表单来收集。,开发准确而完整的数据模型要考虑的问题,类:业务的主题,/,客体是什么?什么类型的人、地点、事物和材料被用于这个业务或者和这个业务交互?每个对象可能存在多少实例?,概念数据建模概述,如何进行概念数据建模?,开发准确而完整的数据模型要考虑的问题(续),属性:需要维护关于对象的什么数据?什么特征描述各个对象?对象在什么基础上被引用、选择、限定、整理和分类?对象的一个特性能有多少个值?对给定的一个对象,特性是必须的还是可选的?,标识符:什么独有特性区分相同类型的各个对象?这个区别特性是随着时间变化还是持久的?即使在我们知道一个对象存在的时候,该对象的这个特性可以缺少吗?对象可以通过一个数字序列标识吗?,关联、聚合和组合:对象之间存在什么关系?一个关系是部分整体的那种吗?如果是,一个对象可以在没有另一个时存在吗?一个关系中涉及了多个对象吗?关系是同类对象之间的吗?参与一个关系的对象的基数是什么?,概念数据建模概述,如何进行概念数据建模?,开发准确而完整的数据模型要考虑的问题(续),泛化:一个对象是,“,一种,”,或另一个对象的,“,一种,”,吗?对象形成一个比较一般到比较特殊的层次吗?,概念数据建模概述,Mark,咖啡机控制软件设计,加热器,开关,保温盘,开关,保温盘传感器,加热传感器,冲煮按钮,减压阀门,概念数据建模概述,Mark,咖啡机控制软件设计,基本接口,namespace CoffeeMaker,public enum WarmerPlateStatus /,保温盘,WARMER_EMPTY,POT_EMPTY,POT_NOT_EMPTY,public enum BoilerStatus /,加热器,EMPTY,NOT_EMPTY,public enum BrewButtonStatus /,冲煮按钮,PUSHED,NOT_PUSHED,public enum WarmerState /,保温,ON,OFF,public enum IndicatorState /,指示灯,ON,OFF,public enum ReliefValveState/,减压阀,OPEN,CLOSED,概念数据建模概述,Mark,咖啡机控制软件设计,基本接口,namespace CoffeeMaker,public interface CoffeeMakerAPI,WarmerPlateStatus GetWarmerPlateStatus();,BoilerStatus GetBoilerStatus();,BrewButtonStatus GetBrewButtonStatus();,void SetBoilerState(BoilerState s);,void SetWarmerState(WarmerState s);,void SetIndicatorState(IndicatorState s);,void SetReliefValvelState(ReliefValvelState s);,概念数据建模概述,Mark,咖啡机控制软件设计,类设计,概念数据建模概述,Mark,咖啡机控制软件设计,存在问题,如何实现这些类,只是一个函数调用的转换器,水蒸气类,public class Light,public void On(),CoffeeMaker.api.SetIndicatorState(IndicatorState.ON);,public void Off(),CoffeeMaker.api.SetIndicatorState(IndicatorState.OFF);,概念数据建模概述,Mark,咖啡机控制软件设计,存在问题,虚构的抽象,public interface Heater,void TurnOn();,void TurnOff();,public interface Sensor,int Sensor();,概念数据建模概述,Mark,咖啡机控制软件设计,如何改进,:,根据功能抽象,概念数据建模概述,Mark,咖啡机控制软件设计,如何改进,:,追加用户界面,类图的概念,对象是指与应用问题有一定关联的某个事物,或者说是对某个事物的抽象描述。,类是对一类具有相同特性的对象的描述,,或者说是类属事物或系统的表示形式。类可以具有状态(通过使用自己的特性数据来描述),并且可以提供功能(通过使用其操作或方法来表示),类图的概念,类图描述类、接口、协作及它们之间关系的图。,类图显示系统中各个类的静态结构。,类图的概念,类图中的图示元素:,类(,Class,),接口(,Interface,),协作(,Collaboration,),依赖关系(,Dependency,),泛化关系(,Generalization,),关联关系(,Association,),实现关系(,Realization,),类,面向对象系统组织结构的核心。,对一组具有相同属性、操作、关系和语义的对象的抽象。,包括名称部分、属性部分和操作部分。,类,Dialer,类,Public class Dialer,private string digits;,private int nDigits;,public void Digit(int n);,protected bool RecordDigit(int n);,类,类的名称,应该来自系统的问题域。,应该是一个名词,且不应该有前缀或后缀。,分为简单名称和路径名称。,类,属性,描述了类在软件系统中代表的事物(即对象)所具备的特性。,类可以有任意数目的属性,也可以没有属性。,在,UML,中,类属性的语法为:,可见性,属性名,:,类型,=,初始值,属性字符串,类,属性,可见性,公有(,Public,),“,”,私有(,Private,),“,”,受保护(,Protected,),“,”,类,属性,属性名,每个属性都必须有一个名字以区别于类中的其他属性。,属性名由描述所属类的特性的名词或名词短语组成。,单字属性名小写,如果属性名包含了多个单词,这些单词要合并,且除了第一个单词外其余单词的首字母要大写。,类,属性,类型,简单类型:,整型,布尔型,实型,枚举类型,系统中的其他类,类,属性,初始值,目的:,保护系统的完整性,防止漏掉取值或被非法的值破坏系统的完整性。,为用户提供易用性。,类,属性,属性字符串,指定关于属性的其他信息,往往是约束条件。,任何希望添加在属性定义字符串值但又没有合适地方可以加入的规则,都可以放在属性字符串里。,实例,Name:string readonly,类,操作,对类的对象所能做的事务的抽象。,一个类可以有任意数量的操作或者根本没有操作。,返回类型、名称和参数一起被称为操作签名。,在,UML,中,类操作的语法为:,可见性,操作名,(,参数表,):,返回类型,属性字符串,类,操作,可见性,公有(,Public,),“,”,私有(,Private,),“,”,受保护(,Protected,),“,”,包内公有(,Package,),“,”,类,操作,操作名,用来描述所属类的行为的动词或动词短语。,单字操作名小写,如果操作名包含了多个单词,这些单词要合并,并且除了第一个单词外其余单词的首字母要大写。,类,操作,参数表,一些按顺序排列的属性定义了操作的输入。,是可选的,即操作不一定必须有参数才行。,定义方式:,“,方向 名称:类型默认值,”,。,若存在多个参数,将各个参数用逗号隔开。,参数可以具有默认值。,类,操作,返回类型,是可选的,即操作不一定必须有返回类型。,绝大部分编程语言只支持一个返回值。,具体的编程语言一般要加一个关键字,void,来表示无返回值。,类,操作,属性字符串,在操作的定义中加入一些除了预定义元素之外的信息。,往往也是定义约束,类,职责,类或其他元素的契约或义务。,以自由形式的文本形式存在,即非形式化的方法来描述。,职责内容,类,约束,指定了类所要满足的一个或多个规则。,形式化的方法。,类,注释,注释可以包含图形也可以包含文本。,类,范例,接口与抽象类,接口,在没有给出对象的实现和状态的情况下对对象行为的描述。,包含操作但不包含属性,。,一个类可以实现一个或多个接口,。,接口与抽象类,接口类:,接口与抽象类,抽象类,是一种不能够被直接实例化的类,也就是说不能够创建一个属于抽象类的对象,接口与抽象类,抽象类,实例,类之间的关系,依赖关系,泛化关系,关联关系,实现关系,类之间的关系,依赖关系,表示两个或多个模型元素之间语义上的关系。,客户以某种形式依赖于提供者。,关联、实现和泛化都是依赖关系。,类之间的关系,依赖关系,如果两个类的对象之间存在着下面的情形,且两个类之间不存在结构方面的联系(例如:供应类以成员变量的形式作为客户类的一部分),就可以建模成为具有依赖关系,这些情形是:,(,1,)客户类访问定义在供应类内部的值,(,常量或 变量,),。,(,2,)客户类的操作启动了定义在供应类内的操作。,(,3,)客户类的返回类或参数是供应类的实例。,序列图中的两个对象,如果存在着消息的发送。且它们之间又没有结构方面的连接,就可以在类图上用依赖关系对它们建模。,类之间的关系,泛化关系,存在于一般元素和特殊元素间的分类关系。,可以用于类、用例以及其他模型元素。,描述了一种,“,is a kind of,”,的关系。,类之间的关系,泛化关系,范例,public class Employee,public class SalariedEmployee:,Employee,类之间的关系,泛化关系,泛化主要用途:,多态:后代的实例可以用于任何祖先被声明使用的地方,从而使多态操作成为可能,即操作的实现方法由实际对象的类来确定,继承:共享祖先描述,并允许对元素进行增量描述,单继承,多重继承,类之间的关系,泛化关系,泛化主要用途:,类之间的关系,泛化关系,泛化主要用途:,类之间的关系,泛化关系,泛化主要用途:,基类,Shape,origin,move(),resize(),display(),Rectangle,corner:Point,Circle,radius:Float,Polygon,points:List,display(),Square,泛化关系,叶子类,类之间的关系,关联关系,一种结构关系。,指明事物的对象之间的联系。,最普通的关联是二元关联。,类之间的关系,关联关系,范例,public class phone,private Button itsButtons15,类之间的关系,关联关系,关联关系并不是仅仅一个抽象的概念,它在实现为程序设计语言源代码时,会有对应的映射。,通常,当把两个有关联关系的类映射为特定的程序设计语言代码时,每一个类都会被定义为一个可以引用对方的类的对象的成员变量,这个成员变量视对关联关系的修饰的不同,可能会采取不同的形式,如:它可以指向对方的类的指针,也可能是对方类的对象。,类之间的关系,关联关系,类之间的关系,关联关系,名称(,Name,),角色(,Role,),多重性(,Multiplicity,),聚合关系(,Aggregation,),组合关系(,Composition,),导航性(,Navigation,),类之间的关系,关联关系,名称(,Name,),使用一个动词或动词短语来命名关联。,清晰而简洁地说明对象间关系。,关联的名称并不是必需的。,可以前缀或后缀一个指引阅读方向的方向指示符,以消除歧义。,类之间的关系,关联关系,角色(,Role,),关联关系中一个类对另一个类所表现出来的职责。,角色的名称应该是名词或名词短语,以解释对象是如何参与关系的。,类之间的关系,关联关系,多重性(,Multiplicity,),指有多少对象可以参与该关联。,可以表达一个取值范围、特定值、无限定的范围或一组离散值。,格式:,“,minimum.maximum,”,(均为,Int,型)。,赋给一个端点的多重性表示该端点可以有多少个对象与另一个端点的一个对象关联。,类之间的关系,关联关系,聚合关系(,Aggregation,),一种特殊类型的关联。,表示整体与部分关系的关联。,描述了,“,has a,”,的关系。,类之间的关系,关联关系,组合关系(,Composition,),聚合关系中的一种特殊情况,是更强形式的聚合,又称强聚合。,成员对象的生命周期取决于聚合的生命周期。,聚合不仅控制着成员对象的行为,而且控制着成员对象的创建和解构。,类之间的关系,关联关系,导航性(,Navigation,),描述一个对象通过链进行导航访问另一个对象。,使用导航性可以降低类间的耦合度。,包括:单向关联和双向关联。,类之间的关系,关联关系,类之间的关系,关联关系,inventory,part,product,0.*,1,1,0.*,flywheel,cog,afterburner,sticker,manufacture,repair,assembler,repairman,FCC,inventoryclerk,2.*,1,1.3,1,maintained by,built by,mBox,Disp error,时序图,范例,1,添加消息和条件(流程3),Web interface,teacher,Database wrapper,Stu info,Stu grades,Req stu info,Get stu data,Load stu,Return stu info,failure,mBox,Disp error,Load grades,No grades found for stu,时序图,范例,2,时序图,范例,3,系统管理员添加书籍的时序图,时序图,范例,3,图书管理员处理借书的时序图(不包括预留书籍的情况),时序图,范例,3,系统管理员删除书目的时序图,时序图,范例,3,借阅者预留书籍的时序图,时序图,范例,4,分析,Select Course,用例中的对象、角色之间交互的消息。主要有以下交互:,(1),学生通过界面发送选课命令。,(2),界面向控制对象请求课程信息。,(3),控制对象向数据库发送查询数据消息。,(4),控制对象暂存数据库的查询结果。,(5),界面对象从控制对象中取得所有的课程信息。,(6),在界面上显示所有的课程信息。,时序图,范例,4,分析,Select Course,用例中的对象、角色之间交互的消息。主要有以下交互:,(7),界面对象发送命令要求控制对象删除课程信息。,(8),学生选择课程。,(9),界面对象要求学生输入学号。,(10),界面对象向控制对象发送信息,查询该生是否可以选择选定的课程。,(11),控制对象从数据库中查询关联信息。,(12),控制对象判断是否可以选课。,(13),如果可以选课,则向数据库中添加关联信息。,(14),向界面对象返回信息。,时序图,范例,4,协作图,概念,协作图描述的是和对象结构相关的信息。,协作图的用途是表示一个类操作的实现,。,协作图对交互中有意义的对象和对象之间的链建模。,在,UML,中,协作图用几何排列来表示交互作用中的对象和链,附在链的箭头代表消息,消息的发生顺序用消息箭头处的编号来说明。,协作图,概念,协作图,协作图包含了,3,个元素:,对象(,Object,),链(,Link,),消息(,Message,),协作图,对象(,Object,),协作图与时序图中的对象的概念是一样,只不过在协作图中,无法表示对象的创建和撤销,所以对于对象在图中的位置没有限制。,协作图,链(,Link,),协作图中链的符号和对象图中链所用的符号是一样的,即一条连接两个类角色的实线。,为了说明一个对象如何与另一个对象连接,可以在链的末路上附上一个路径构造型。,协作图,消息(,Message,),协作图中的消息类型与时序图中的相同,只不过为了说明交互过程中消息的时间顺序,需要给消息添加顺序号。,顺序号是消息的一个数字前缀,是一个整数,由,1,开始递增,每个消息都必须由唯一的顺序号。可以通过点表示法代表控制的嵌套关系。,嵌套可以具有任意深度。与时序图相比,协作图可以显示更为复杂的分支。,协作图,关联角色,:,是一种协作角色,用来说明协作图中两个分类器角色之间的关系。它由两个类角色元素之间的路径表示,并且可以包括带下划线的相应关联的名称。在协作图上下文中,关联角色通常指链接。,协作图,时序图与协作图的互换,时序图与协作图都表示对象之间的交互作用,只是它们的侧重点有所不同:,时序图描述了交互过程中的时间顺序,但没有明确地表达对象之间的关系。,协作图描述了对象之间的关系,但时间顺序必须从顺序号获得。,两种图的语义是等价的,可以从一种形式的图转换成另一种形式的图,而不丢失任何信息。,例如,rose,中就提供了直接由时序图生成协作图的功能。,协作图,协作图建模技术,设置交互的语境。,通过识别对象在交互中扮演的角色,设置交互的场景。,对每个对象设置初始特性。,描述对象之间可能有信息沿着它传递的链。,从引起交互的消息开始,适当地设置其顺序号,然后将随后的每个消息附到适当的链上。,如果需要说明时间或空间约束,可以用时间标记修饰这个消息,并附上合适的时间和空间约束。,如果需要更形式化地说明这个控制流,可以为每个消息附上前置和后置条件。,协作图,绘制协作图的步骤,创建协作图,协作图工具栏按钮简介,添加对象,添加消息,添加数据流,协作图,范例,1,系统管理员添加书籍的协作图,协作图,范例,1,图书管理员处理借书的协作图,协作图,范例,1,图书管理员处理还书的协作图,协作图,范例,1,系统管理员删除书籍的协作图,协作图,范例,1,借阅者预留书籍的协作图,协作图,范例,2,Select Course用例对象之间的交互包括:,学生通过界面发送选课命令;,界面向控制对象请求课程信息;,控制对象向数据库发送查询数据消息;,控制对象暂存数据库的查询结果;,界面对象从控制对象中取得所有的课程信息;,在界面上显示所有的课程信息;,界面对象发送命令要求控制对象删除课程信息;,协作图,范例,2,Select Course用例对象之间的交互包括:,学生选择课程;,界面对象要求学生输入学号;,界面对象向控制对象发送信息,查询该生是否可以选择选定的课程;,控制对象从数据库中查询关联信息;,控制对象判断是否可以选课;,如果可以选课,则向数据库中添加关联信息;,向界面对象返回信息。,协作图,范例,2,交互图,面向对象分析步骤,用例建模,概念建模,交互建模,分析类建模,交互图,顺序图绘制注意事项,参与者只能与边界对象通信,边界对象只能与控制器和参与者通信,实体对象只能与控制器通信,控制器可以与边界对象和实体对象通信,但不能与参与者通信,控制器还可以与其他控制器通信。,类图作业,单人骰子游戏,游戏者通过系统可以进行骰子游戏,即先后掷两个骰子,如果点数之和大于,7,则游戏者胜。,游戏者可以查询从游戏开始到当前自己胜的次数,输的次数。,画出用例图、概念类图、时序图、类图、以及用代码实现。,类图作业,单人骰子游戏,类图作业,单人骰子游戏,类图作业,单人骰子游戏,状态图,状态机概念,状态机是展示状态与状态转换的图。,状态机包含了一个类的对象在其生命期间所有状态的序列以及对象对接受到的事件所产生的反应。,利用状态机可以精确地描述对象的行为。,状态图,状态图概念,一个状态图表示一个状态机。,状态图表现从一个状态到另一个状态的控制流。,状态图由表示状态的节点和表示状态之间转换的带箭头的直线组成。,状态图,状态图组成:,状态(,State,),转换(,Transition,),初始状态(,Start State,),终结状态(,End State,),判定(,Decision,),状态图,范例,状态图,状态,状态图中的状态一般是给定类对象中的一组属性值,这组属性值是对象所有属性的子集。,在对系统建模时,我们可以只关心那些明显影响对象行为的属性以及由他们表达的对象状态,而不用理睬那些于对象行为无关的状态。,状态图,状态,状态种类:,简单状态(,Simple State,),组成状态(,Composite State,),状态组成:,状态名(,Name,),活动(,Activity,),入口动作(,Entry Action,),出口动作(,Exit Action,状态图,状态,状态由一个带圆角的矩形表示。,状态图标可以分为三部分:,名称,内部转换,嵌套状态,状态图,状态,状态名,状态名表示状态的名字,通常用字符串表示。,一个状态的名称在状态图所在的上下文中应该是唯一的。不过,状态允许匿名。,状态的名字通常放在状态图标的顶部,状态图,状态,内部转换,内部转换只有一个源状态而没有目标状态,因此转换激发的结果并不改变状态本身。,如果一个内部转换带有动作,动作也要被执行,但是由于没有状态改变发生,因此不需要执行入口和出口动作。,内部转换和自转换不同,虽然两者都不改变状态本身,但是自转换会激发入口动作和出口动作的执行,而内部转换却不会。,状态图,状态,入口动作与出口动作,入口动作和出口动作表示进入或退出这个状态所要执行的动作。,入口动作用,“,entry/,要执行的动作,”,表达,而出口动作用,“,exit/,要执行的动作,”,表达,状态图,状态,简单状态,简单状态是指不包含其他状态的状态。,简单状态没有子结构,但它可以具有内部转换、入口动作和出口动作等。,状态图,状态,组成状态,组成状态是可以包含一些嵌套的子状态的状态。,组成状态可以使用,“,与,”,关系分解为并发子状态,或者通过,“,或,”,关系分解为互相排斥的顺序子状态。,组成状态的一个入转换代表对其嵌套子状态区域内的初始状态的入转换;对嵌套子状态区域内的终结状态的转换代表包含它的终止状态的相应活动的完成。,状态图,初始状态,初始状态代表状态图的起始位置,只能作为转换的源,而不能作为转换的目标。,初始状态在一个状态图中只允许有一个,它用一个实心的圆表示。,状态图,终止状态,终止状态是模型元素的最后状态,是一个状态图的终止点。,终止状态只能作为转换的目标,而不能作为转换的源。,终止状态在一个状态图中可以有多个,它用一个套有一个实心圆的空心圆表示。,状态图,事件,事件表示在某一特定的时间或空间出现的能够引发状态改变的一种运动变化。,事件是一个激励的出现,它定义一个触发子以触发对象改变其状态,任何影响对象的事物都可以是事件。,状态图,事件,事件种类:,入口事件,入口事件表示一个入口的动作序列,它在进入状态时执行。,入口事件的动作是原子的,并且先于人和内部活动或转换。,状态图,事件,事件种类:,出口事件,出口事件表示一个出口的动作序列,它在退出状态时执行。,出口事件也是原子的,它跟在所有的内部活动之后,但是先于所有的出口转换。,状态图,事件,事件种类:,动作事件,动作事件也称为,“,do,事件,”,,它表示对一个嵌套状态机的调用。,与动作事件相关的活动必定引用嵌套状态机,而非引用包含它的对象的操作。,状态图,转换,转换表示当一个特定事件发生或者某些条件得到满足时,一个源状态下的对象在完成一定的动作后将发生状态转变,转向另一个称之为目标状态的状态。,转换进入的状态为活动状态,转换离开的状态变为非活动状态。,状态图,转换,转换用带箭头的直线表示,一端连接源状态即转出的状态,箭头一端连接目标状态即转入的状态。,转换可以标注与此转换相关的选项如事件、动作和监护条件。,状态图,触发事件,触发事件是能够引起状态转换的事件。,触发事件可以是信号、调用、时间段等。,状态图,监护条件,监护条件是触发转换必须满足的条件,它是一个布尔表达式。,监护条件只能在触发事件发生时被赋值一次,如果在转换发生后监护条件才由假变为真,那么转换也不会被触发。,从一个状态引出的多个转换可以有同样的触发器事件,但是每个转换必须具有不同的监护条件。,状态图,动作,动作是一组可执行语句或者计算处理过程。,动作可以包括发送消息给另一个对象、操作调用、设置返回值、创建和销毁对象等。,动作是原子的,不可中断的,动作或动作序列的执行不会被同时发生的其他动作影响或终止。,整个系统可以在同一时间执行多个动作。,状态图,判定,判定在状态图中的位置:工作流在此处按监护条件的取值而发生分支。,判定用空心小菱形表示。,状态图,判定,因为监护条件为布尔表达式,所以通常条件下的判定只有一个入转换和两个出转换。,根据监护条件的真假可以触发不同的分支转换。,状态图,状态图建模技术,建模步骤:,找出适合用模型描述其行为的类。,确定对象可能存在的状态。,确定引起状态转换的事件。,确定转换进行时对象执行的相应动作。,对建模的结果进行相应的精化和细化。,状态图,课程对象的状态变化过程实例,状态图,图书状态实例,(,带嵌套,),已借出,过期则发通知,购置书,弃置书,借出书,还书,普通书,新书,在新书架展示,放进普通书架,过两周后,登记书,状态图,书的状态图,状态图,借阅凭证的状态图,状态图,范例,寻找主要状态:对于航班机票预订系统而言,显然包括的状态主要有,-,在刚确定飞机计划时,显然是没有任何预订的,并且在有人预订机票之前都将处于这种,“,无预订,”,状态,-,对订座而言显然有,“,部分预订,”,和,“,预订完,”,两种状态,-,而当航班快要起飞时,显然要,“,预订关闭,”,总结一下,主要有四种状态:,无预订、部分预订、预订完以及预订关闭,状态图,范例,确定状态间转换,状态图,范例,细化状态内的活动与转换,状态图,范例,使用复合状态,状态图,状态图的实现,状态图,状态图的实现,状态图,状态图的实现,源态,目标态,事件,监护,过程,wait,lock,Candle removed,Door closed,Reveal lock,lock,open,Key turned,Candle in,Open safe,lock,final,Key turned,Candle out,Release killer rabbit,open,wait,Safe closed,状态图,在画状态图时要考虑的主要因素,对象有哪些有意义的状态,如何决定对象可能状态,对象的状态图和其他模型之间如何进行映射,系统设计中,并不需要给每个对象画出状态图,只要把注意力集中在整个系统或主要对象上。,活动图,概述,活动是某件事情正在进行的状态。,活动在状态机中表现为一个由一系列动作组成的非原子的执行过程。,活动图是一种描述系统行为的图,它用于展现参与行为的类所进行的各种活动的顺序关系。,活动图与状态图都是状态机的表现形式。,活动图,建模活动图原因,进一步规划用例,表示用例的前后条件,发现新用例,活动图,活动图的图形表示,在UML中,活动表示成圆角矩形。,如果一个活动引发下一个活动,两个活动的图标之间用带箭头的直线连接。,活动图也有起点和终点,表示法和状态图中相同。,活动图中还包括分支与合并、分叉与汇合等模型元素。分支与合并的图标和状态图中的判定的图标相同,而分叉与汇合则用一条加粗的线段表示。,活动图,活动图的图形表示,活动图,活动图的图形表示,活动图,活动图与流程图的区别,流程图着重描述处理过程,它的主要控制结构是顺序、分支和循环,各个处理之间有严格的顺序和时间关系;,而活动图描述的则是对象活动的顺序关系所遵循的规则,它着重表现的是系统的行为,而非系统的处理过程。,活动图能够表示并发活动的情形,而流程图做不到。,活动图是面向对象的,而流程图是面向过程的。,活动图,组成,UML,的图形元素:,动作状态(,Action State,),活动状态(,Activity State,),动作流(,Action Flow,),分支(,Branch,)与合并(,Merge,),分叉(,Fork,)与汇合(,Join,),泳道(,Swimlane,),对象流(,Object Flow,),活动图,动作状态,动作状态是指执行,原子的、不可中断的动作,,并在此动作完成后通过完成转换转向另一个状态的状态。,动作状态使用平滑的圆角矩形表示,动作状态所表示的动作写在圆角矩形内部。,活动图,动作状态的特点:,动作状态是原子的,它是,构造活动图的最小单位,,已经无法分解为更小的部分。,动作状态是不可中断的状态,它一旦开始运行就不能中断,一直运行到结束。,动作状态是瞬时的行为,它所占用的处理事件极短,有时甚至可以忽略。,动作状态可以有入转换,入转换既可以是动作流,也可以是对象流。动作状态至少有一条出转换,这条转换以内部动作的完成为起点,与外部事件无关。,动作状态和状态图中的状态不同,它不能有入口动作和出口动作,更不能有内部转移,。,在一张活动图中,动作状态允许多处出现。,活动图,活动状态,活动状态用于表达状态机中的一个,非原子的运行,。,活动状态的表示图标也是平滑的圆角矩形,并可以在图标中给出入口动作和出口动作等信息。,活动图,活动状态的特点:,活动状态可以分解成其他子活动或动作状态,,由于它是一组不可中断的动作或操作的组合,所以可以被中断。,活动状态的内部活动可以用另一个活动图来表示。,和动作状态不同,活动状态可以有入口动作和出口动作,也可以有内部转移。,动作状态是活动状态的一个特例,如果某个活动状态只包括一个动作,那么它就是一个动作状态。,活动图,动作流,所有,动作状态之间的转换流,称之为动作流。,与状态图的转换相同,活动图的转换也用带箭头的直线表示,箭头的方向指向转入的方向。,活动图,范例,Record Grades,teacher,Select student,Ready to record grades,Grades recorded,Save greades,Enter grades,活动图,分支与合并,分支一般用于表示对象类所具有的条件行为。,条件行为用分支和合并表达。,在活动图中分支与合并用,空心小菱形,表示。,一个分支有一个入转换和两个带条件的出转换,,出转换的条件应当是互斥的,,这样可以保证只有一条出转换能够被触发。,一个合并有两个带条件的入转换和一个出转换,合并表示从对应的分支开始的条件行为的结束。,活动图,分支与合并,活动图,分叉与汇合,分叉用于将动作流分为两个或者多个,并发运行,的分支,而汇合则用于同步这些并发分支,以达到共同完成一项事务的目的。,分叉可以用来描述,并发线程,,每个分叉可以有一个输入转换和两个或多个输出转换,每个转换都可以是独立的控制流。,汇合代表两个或多个并发控制流同步发生,当所有的控制流都达到汇合点后,控制才能继续往下进行。每个汇合可以有两个或多个输入转换和一个输出转换。,分叉和汇合都使用加粗的水平线段表示。,活动图,分叉与汇合,活动图,泳道,泳道将活动图中的活动化分为若干组,并把每一组指定给负责这组活动的业务组织即对象。,泳道区分了负责活动的对象,明确地表示了哪些活动是由哪些对象进行的。,每个活动只能明确地属于一个泳道。,泳道用垂直实线绘出,垂直线分隔的区域就是泳道。在泳道上方可以给出泳道的名字或对象(对象类)的名字,该对象(对象类)负责泳道内的全部活动。,泳道没有顺序,不同泳道中的活动既可以顺序进行也可以并发进行,动作流和对象流允许穿越分隔线。,活动图,泳道,活动图,泳道,Web interface,teacher,logon,Choose student,Change student info,Validate user,Retrieve student info,Persist user info,Grades recorded,活动图,泳道,活动图,活动的分解,一个活动可以分为若干个动作或子活动,这些动作和子活动本身可以组成一个活动图。,一个包含子活动的活动和嵌套了子状态的组合状态类似,概念上也相对统一。,一个不含内嵌活动或动作的活动称之为简单活动;一个嵌套了若干活动或动作的活动称之为组合活动,组合活动有自己的名字和相应的子活动图。,活动图,活动的分解,活动图,活动图建模技术,识别要对其工作流描述的类或对象。,确定工作流的初始状态和终止状态,明确工作流的边界。,对动作状态或活动状态建模。,对动作流建模。,对对象流建模。,对建立的模型进行精化和细化。,活动图,范例,1,teacher,administrator,student,Record grades,Save grades,Report cards,logon,Update grades,View grades,Generate,Report cards,load grades,include,include,include,include,活动图,范例,1,建模主路径,logon,Choose student,Load grades,Modify grades,Save grades,活动图,范例,1,建模从路径,logon,validate,Choose student,Load classes,Load grades,Disp student info,Modify stu info,Save stu info,Disp error,Change saved,Error occurred,Valide(UID,PWD),valid,invalid,error loading,error loading,error saving,活动图,范例,1,logon,validate,validated,Not validated,Disp loading error,Load stu info,Load class details,Load grades,Stu loaded,Save stu info,Disp stu info,Modify stu info,Disp saving error,Disp logon error,Choose stu,Data load error,Data save error,Changes saved,Logon error,添加泳道,活动图,范例,1,改进高层活动,(,对,Load stu info,活动的细化,),Retrieve stu person info,Retrieve stu classes,Load stu history,failure,Stu loaded,Stu loaded successfully,Stu not loaded due to errors,活动图,借阅者的活动图,活动图,图书管理员的活动图,活动图,系统管理员维护借阅者帐户的活动图,活动图,系统管理员进行书目信息维护的活动图,活动图,系统管理员维护书籍信息的活动图,
展开阅读全文