《(33)--8 UML通信图(协作图)面向对象与UML.pdf》由会员分享,可在线阅读,更多相关《(33)--8 UML通信图(协作图)面向对象与UML.pdf(38页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、 面向对象与面向对象与UML Object-Oriented and UML UML图图 -UML通信图(协作图)通信图(协作图)Communication Diagram (Collaboration Diagram)协作图(通信图)协作图(通信图)1 概述概述 2 模型元素:对象、链和消息模型元素:对象、链和消息 3 顺序图与协作图的比较顺序图与协作图的比较 4 协作图建模技术协作图建模技术 1 概述概述 对象图是展现对象之间的静态关系,而协作图是对象图的扩展,协对象图是展现对象之间的静态关系,而协作图是对象图的扩展,协作图除了展现对象之间的关联,还显示对象之间的消息传递作图除了展现对象之
2、间的关联,还显示对象之间的消息传递(对象之对象之间的交互间的交互)。1 概述概述 协作图和顺序图协作图和顺序图一样,都是用来展示对象之间的交互关系的,都属于一样,都是用来展示对象之间的交互关系的,都属于交互图交互图。协作协作图和顺序图很相似,在语义上是等价的,用两种图表达的同一种信息,图和顺序图很相似,在语义上是等价的,用两种图表达的同一种信息,有些建模工具可以将此两种图进行等价转换。有些建模工具可以将此两种图进行等价转换。顺序图强调的是交互中顺序图强调的是交互中消息传递的时间顺序消息传递的时间顺序。协作图强调的是交互对象的协作图强调的是交互对象的整体组织整体组织(对象之间的链接及其消息传(对
3、象之间的链接及其消息传递)。递)。另一个角度来看,顺序图是按照另一个角度来看,顺序图是按照时间顺序布图时间顺序布图,而协作图按照,而协作图按照空间组空间组织布图织布图。协作图协作图 协作图对交互中有意义的对象和对象之间的链建模。协作图对交互中有意义的对象和对象之间的链建模。协作图包括建模元素有对象(参与者、多对象、主动对象等)、消息、协作图包括建模元素有对象(参与者、多对象、主动对象等)、消息、链。链。在在UML中,协作图用几何排列来表示交互作用中的对象和链,附在链中,协作图用几何排列来表示交互作用中的对象和链,附在链的箭头代表消息,消息的发生顺序用消息箭头处的编号来说明。的箭头代表消息,消息
4、的发生顺序用消息箭头处的编号来说明。汽车租赁系统中客户取车的协作图汽车租赁系统中客户取车的协作图 2 对象、链和消息对象、链和消息 协作图包含了协作图包含了3个元素:个元素:(1)对象()对象(Object)(2)链()链(Link)(3)消息()消息(Message)(1)对象对象 协作图与顺序图中的对象的概念相同,但在协作图中,对于对象在图协作图与顺序图中的对象的概念相同,但在协作图中,对于对象在图中的位置没有限制,因此无法根据对象的位置来表示对象的创建和撤中的位置没有限制,因此无法根据对象的位置来表示对象的创建和撤销。销。创建对象?撤销对象?创建对象?撤销对象?一个消息将会发送到新创建的
5、对象实例。一个消息将会发送到新创建的对象实例。通过通过把把create,destroy放到消息标签中来表示创建对象。放到消息标签中来表示创建对象。计算机与控制工程学院计算机与控制工程学院 郭艳燕郭艳燕 对象(实例)的创建对象(实例)的创建-3种方法种方法 如果使用其它消息名,可以对消息使用构造型加以明确。如果使用其它消息名,可以对消息使用构造型加以明确。Create消息,具有可选的初始化参数消息,具有可选的初始化参数。通常可以解释为对构造函数的调用。(通常可以解释为对构造函数的调用。(new)多对象(多重对象)多对象(多重对象)协作图中,多对象用多个方框的协作图中,多对象用多个方框的重叠表示;
6、重叠表示;注意:多对象关注的是对象所属注意:多对象关注的是对象所属的类。的类。顺序图中的多对象和单一顺序图中的多对象和单一对象表示没有区别对象表示没有区别 多对象多对象指一系列指一系列同类同类实例实例-多个对象的集合多个对象的集合 如果消息同时发给多个同类的对象,则可用如果消息同时发给多个同类的对象,则可用多重对象多重对象表示。表示。遍历一个集合中所有成员的一个常用算法是给每个对象发送一个消息。遍历一个集合中所有成员的一个常用算法是给每个对象发送一个消息。通常使用某种迭代器对象,例如通常使用某种迭代器对象,例如java.util.Iterator或者或者C+标准类库标准类库iterator来实
7、现。来实现。多对象关注所多对象关注所属类名,而不属类名,而不是对象名是对象名 :Sale:SalesLineItem1.s=size():int:Sale:SalesLineItemsl:SalesLineItem1.create()2.addElements(sl)单对象单对象 多对象多对象 :Sale:SalesLineItemsl:SalesLineItem2.print()1.sl=get(key)发送给多对象的消息发送给多对象的消息 发送给多对象中一个发送给多对象中一个对象的消息对象的消息 多重对象举例多重对象举例 老师让多个学生同时交作业。老师让多个学生同时交作业。(一个对象向多个
8、对象发送消息一个对象向多个对象发送消息)在多对象前面可以加上用方括号括起来的条件,在前面加一个星号在多对象前面可以加上用方括号括起来的条件,在前面加一个星号*,用来说明消息发送给多个对象。用来说明消息发送给多个对象。:Professor:Student1.*all handln(assignment)按给定顺序发送消息。按给定顺序发送消息。银行出纳员按照顾客排队的次序为每名顾客服务。银行出纳员按照顾客排队的次序为每名顾客服务。(一个对象按指(一个对象按指定的次序向多对象发送消息)定的次序向多对象发送消息):BankClerk:Customer1.*line position=1.n doBan
9、kingBusiness()对比(消息迭代)对比(消息迭代)一个一个teacher对象对象向每一个向每一个student对象发送一个对象发送一个Message消息消息 一个一个teacher对象向一对象向一个个student对象发送对象发送n次次Message消息消息 :Teacher:Student1.*ndoHomework():Teacher:Student1.*ndoHomework()主动对象(活动对象)主动对象(活动对象)主动对象主动对象(active object):是一个拥有进程或线程的对象,能初始化):是一个拥有进程或线程的对象,能初始化控制活动,控制交互中的控制流。控制活动
10、,控制交互中的控制流。不需要接收消息就可自动启动交互的对象。(拥有控制线程的对象)不需要接收消息就可自动启动交互的对象。(拥有控制线程的对象)主动对象是一组属性和方法的封装体,其中至少有一个方法不需要接收主动对象是一组属性和方法的封装体,其中至少有一个方法不需要接收消息就能主动执行。消息就能主动执行。主动对象在主动对象在UML和建模工具中的表示方法不同。和建模工具中的表示方法不同。要想使用主动对象,先要将此对象所属的类设置成主动类。要想使用主动对象,先要将此对象所属的类设置成主动类。Java public class Clock implements Runnable public void
11、run()while(true)/loop forever on own thread /主动类主动类 (2)链链 协作图中链的符号和对象图中链所用的符号是一样的。表示对象之间协作图中链的符号和对象图中链所用的符号是一样的。表示对象之间的语义连接的语义连接。必须先有对象之间的链,才能建立两个对象之间的交互。必须先有对象之间的链,才能建立两个对象之间的交互。(3)消息)消息 协作图中的消息类型与顺序图中的相同,都表示对象之间的通信,但协协作图中的消息类型与顺序图中的相同,都表示对象之间的通信,但协作图中的消息必须给出消息编号。作图中的消息必须给出消息编号。消息编号消息编号 无层次编号(例如无层次
12、编号(例如1,2),它简单直观;),它简单直观;嵌套的编号(例如嵌套的编号(例如1.1,2.3.1),它更易于表示消息的包含关系。),它更易于表示消息的包含关系。前缀前缀监护条件监护条件序列表达式序列表达式返回值返回值:=消息名消息名 1.1a,1.1b,1.1c/x=0 1.2*i=1.n x=calc(n)前缀前缀 条件条件 序列表达式序列表达式 返回值和消息名返回值和消息名 前缀用来同步线程,是在发送当前消息之前指定编号的消息被处理。前缀用来同步线程,是在发送当前消息之前指定编号的消息被处理。并发消息并发消息 两个相同对象之间存在多个消息,并且这些消息可以是同时调用,两个相同对象之间存在
13、多个消息,并且这些消息可以是同时调用,即即并发消息并发消息。为了表示并发消息,可以用数字加字母的表示法。为了表示并发消息,可以用数字加字母的表示法。消息号消息号+字母字母+消息名消息名 例如:例如:1.1a f1()和和 1.1b f2()消息号相同表示发送的时间相同,字母不同表示是两个不同的消消息号相同表示发送的时间相同,字母不同表示是两个不同的消息,但同一时间发送。息,但同一时间发送。并发消息举例并发消息举例 一个程序项目包含资源文件和源文件,当打开该项目时,开发工具将一个程序项目包含资源文件和源文件,当打开该项目时,开发工具将同时打开所属的资源文件和源文件。同时打开所属的资源文件和源文件
14、。异步和同步调用异步和同步调用-消息箭头类型不同消息箭头类型不同 协作图协作图 顺序图顺序图 计算机与控制工程学院计算机与控制工程学院 郭艳燕郭艳燕 条件消息:带有监护条件的消息,当条件为真时,才发送相关的消息。条件消息:带有监护条件的消息,当条件为真时,才发送相关的消息。条件消息条件消息 带有互斥条件路径:带有互斥条件路径:顺序编号顺序编号+字母字母+互斥条件互斥条件 迭代或循环标记迭代或循环标记 迭代标记用迭代标记用*号表示,迭代表达式用来说明循环规则。号表示,迭代表达式用来说明循环规则。对于迭代表达式,对于迭代表达式,UML没有强制规定什么语法,因此可以使用任何可读没有强制规定什么语法,
15、因此可以使用任何可读的、有意义的表达式来表示。的、有意义的表达式来表示。常用的迭代常用的迭代表达式表表达式表 迭代表达式迭代表达式 语义语义 i=1.n 迭代迭代n次次 while(表达式表达式)表达式为表达式为true时进行迭代时进行迭代 until(表达式表达式)迭代到表达式为迭代到表达式为true时停止迭代时停止迭代 for each(对象集合对象集合)在对象集合上迭代在对象集合上迭代 集合的迭代集合的迭代 返回结果返回结果 消息可能是要求某个对象进行计算并返回结果的值。消息可能是要求某个对象进行计算并返回结果的值。UML提供了返回值的表示法。返回值的名字在最左,后面跟赋值号提供了返回值
16、的表示法。返回值的名字在最左,后面跟赋值号“:=”,接着是操作名和操作的参数。,接着是操作名和操作的参数。例如:一个顾客对象请求一个计算器对象计算某项商品的总价,包括例如:一个顾客对象请求一个计算器对象计算某项商品的总价,包括该项商品的价格和税款。该项商品的价格和税款。totalPrice:=compute(itemPrice,salesTax):Customer:CalculatorsalesTax),1.totalPrice:=compute(itemPrice 车主使用车钥匙控制汽车车主使用车钥匙控制汽车 案例案例 类图、对象图、顺序图、协作图、状态机图类图、对象图、顺序图、协作图、状态
17、机图 体现车主、汽车与车钥匙之间关系的类图体现车主、汽车与车钥匙之间关系的类图 汽车与车钥匙以及车主之间的汽车与车钥匙以及车主之间的对象图对象图 车主用车钥匙遥控锁车的车主用车钥匙遥控锁车的顺序图顺序图 消息符号不同表示消息的类型不同消息符号不同表示消息的类型不同 车主用车钥匙遥控锁车的车主用车钥匙遥控锁车的协作图协作图 车主用车钥匙遥控锁车的车主用车钥匙遥控锁车的协作图协作图与与 车的车的状态图状态图之间的关系之间的关系 车对象的状态车对象的状态 车对象的车对象的状态状态 3.顺序图与协作图的比较顺序图与协作图的比较(1)顺序图和协作图都属于交互图,都用于描述系统中对象之间的动)顺序图和协作
18、图都属于交互图,都用于描述系统中对象之间的动态交互关系。态交互关系。两者可以互相转换。两种图的语义是等价的,可以采用两者可以互相转换。两种图的语义是等价的,可以采用Rational Rose工具,把一种形式的图转换成另一种形式的图。工具,把一种形式的图转换成另一种形式的图。但两者强调的重点不同。顺序图强调的是消息的时间顺序,而协作图但两者强调的重点不同。顺序图强调的是消息的时间顺序,而协作图强调的是参与交互的对象的组织(对象之间的关系)。强调的是参与交互的对象的组织(对象之间的关系)。顺序图与协作图的比较顺序图与协作图的比较(2)在两个图所使用的建模元素上,两者也各有特点。在两个图所使用的建模
19、元素上,两者也各有特点。顺序图中有对象生命线和控制焦点,顺序图可以表示出对象的激活状顺序图中有对象生命线和控制焦点,顺序图可以表示出对象的激活状态和去激活状态,也可以表示出对象的创建和销毁的相对时间。态和去激活状态,也可以表示出对象的创建和销毁的相对时间。协作图表示对象和对象之间的链,可以展示多对象和主动对象。协作图表示对象和对象之间的链,可以展示多对象和主动对象。协作图中的消息必须要有消息的顺序号,但顺序图中可以有也可以没有协作图中的消息必须要有消息的顺序号,但顺序图中可以有也可以没有消息号。消息号。(3)和协作图相比,顺序图的描述能力更强一些,尤其是)和协作图相比,顺序图的描述能力更强一些
20、,尤其是UML2.x版本。版本。4 协作图建模技术协作图建模技术 设置交互的语境。设置交互的语境。识别交互中的对象和它所归属的类。识别交互中的对象和它所归属的类。描述对象之间可能有信息沿着它传递的链。描述对象之间可能有信息沿着它传递的链。从引起交互的消息开始,适当地设置其顺序号,然后将随后的每个从引起交互的消息开始,适当地设置其顺序号,然后将随后的每个消息附到适当的链上。消息附到适当的链上。对对象类型、消息类型等进行细化,附加相应的约束等。对对象类型、消息类型等进行细化,附加相应的约束等。作业:注册课程协作图作业:注册课程协作图 coutse类实例类实例c中还用到了构造型中还用到了构造型loc
21、al,这是因为这个对象是由,这是因为这个对象是由CourseList 的的find方法创建的,是一个局部的对象。方法创建的,是一个局部的对象。注册课程协作图监护条件语义注册课程协作图监护条件语义 监护表达式与消息监护表达式与消息 语义解释语义解释 s&c 1.3:register(s)当s和c都不是空对象时,才执行register方法(!s)&c 1:studentNotFound 如果s是空对象,则说明没有找到指定的学生,返回studentNotFound消息 s&(!c)1:courseNotFound 如果c是空对象,则说明没有找到指定的课程,返回courseNotFound消息(!s)&(!c)1:allNotFound 如果s和c都是空对象,表示都没有找到,返回allNotFound消息 s&c 1:ok 如果s和c都不是空对象,则返回ok,表示注册成功 本章小结本章小结