好文档就是一把金锄头!
欢迎来到金锄头文库![会员中心]
电子文档交易市场
安卓APP | ios版本
电子文档交易市场
安卓APP | ios版本

第4章顺序图和协作图.ppt

82页
  • 卖家[上传人]:公****
  • 文档编号:590451398
  • 上传时间:2024-09-14
  • 文档格式:PPT
  • 文档大小:480KB
  • / 82 举报 版权申诉 马上下载
  • 文本预览
  • 下载提示
  • 常见问题
    • 第第4章章 顺序图和协作图顺序图和协作图 (交互图)(交互图)2009年9月1日2021/5/231 主要内容主要内容 顺序图顺序图 协作图(通信图)协作图(通信图) 实例分析-课程注册系统实例分析-课程注册系统2021/5/232 UML 1.x中各种图的关系中各种图的关系Use caseSequenceClass(Simple)ActivityCollaborationClass(Complex)ObjectStateRequirementRequirement阶段Analysis阶段Design阶段2021/5/233 4.1 交互图概述交互图概述(interaction diagram)•在对软件密集型(software-intensive)系统建模时,如何对它的动态动态((模型模型)方面)方面建模?怎样才能可视化一个运行的系统?•交互图交互图(interaction diagram)是一种详细表示对象之间以及对象与系统外部的参与者(actor)之间动态联系的图形文档•UML 1.x版本中,交互图交互图有两种形式,即①顺序顺序图图(sequence diagram) 和②协作图协作图(collaboration diagram) 。

      2021/5/234 交互图说明:•交互图交互图是用来描述对象之间的动态协作关系以及协作过程中的行为次序,它常常用来描述一个用例的行为,显示该用例中所涉及的对象和这些对象之间的消息传递情况•一般一个use case需要一个或多个顺序图或协作图,除非特别简单的use case.•顺序图顺序图和协作图协作图从不同的角度表达了系统中的交互和系统的行为,它们之间可以相互转化•顺序图顺序图着重描述对象按照时间顺序的消息交换,协作图协作图着重描述系统成分如何协同工作2021/5/235 交互图的用途交互图的用途•帮助分析员对照检查每个use case 中描述的用户需求,是否已经落实到一些能够完成这些功能的类中去实现提醒分析员去补充遗漏的类或服务•和类图类图相互补充–类图对对象之间的消息(交互情况)表达不够详细;–交互图表示少数几个对象之间的交互2021/5/236 4.2 顺序顺序(Sequence)图图•定义:A sequence diagram is a diagram that shows object interactions arranged in time sequence. In particular, it shows the objects participating in an interaction and the sequence of messages exchanged.2021/5/237 说明:•顺序图顺序图是一个二维图形。

      在顺序图中水平方向为对象维,沿水平方向排列参与交互的对象;竖向方向为时间维,沿垂直向下方向按时间递增顺序列出各对象所发出和接收的消息•水平轴上的对象间的相互顺序并不重要•顺序图顺序图不表示对象间的关联(associations)关系2021/5/238 Sequence图中的组成元素图中的组成元素•顺序图中的一些主要元素:– Object (包括actor实例)– Lifeline (生命线)– Focus of control(控制焦点)和activation(激活期)– Message2021/5/239 Object•sequence图和collaboration图描述的是对象对象之间的消息发送关系,而不是类之间的关系•在顺序图中并不包括系统中的所有类的对象也有可能某些对象属于同一个类•交互图中的对象的常见命名方式:只显示类名显示对象名和类名只显示对象名2021/5/2310 lifeline (生命线生命线)•lifeline:A dashed line in a sequence diagram that shows the existence of an object over a period of time.•生命线生命线表示对象存在的时间,在顺序图中生命线表示为从对象图标向下延伸的一条虚线。

      •图例:2021/5/2311 Focus of control(控制焦点控制焦点)•focus of control:A symbol on a sequence diagram that shows the period of time during which an object is performing an action, either directly or through a subordinate procedure.•图例:focus of control2021/5/2312 focus of control的嵌套的嵌套•嵌套的FOC可以更精确地说明消息的开始和结束位置•图例:2021/5/2313 说明:•activation(激活期)表示对象执行一个动作的期间,也即对象激活的时间段•An activation represents the period during which an object performs an operation either directly or through a subordinate operation.•FOC和activation是同一个概念。

      2021/5/2314 4.3 消息消息(message)•消息的类型:在UML 1.4以上版本的规范说明中消息分调用消息,异步消息,返回消息调用消息,异步消息,返回消息三种–其它消息类型:如阻止(balking)消息,超时(time-out)消息等为UML核心的扩充2021/5/2315 •调用消息调用消息(Procedure call)调用消息的发送者把控制传递给消息的接收者,然后停止活动,等待消息接收者放弃或返回控制•调用消息也可以用来表示同步的意义说明:1.调用消息的接收者必须是一个被动对象(passive object),即它是一个需要通过消息驱动才能执行动作的对象2.一般调用消息必有一个配对的返回消息例:调用消息的表示符号2021/5/2316 UML 1.4/1.5中的异步消息UML 1.3中的异步消息2021/5/2317 •返回消息返回消息(return)从过程调用返回例:返回消息的表示符号•如果是从过程调用返回,则返回消息是隐含包括的,所以返回消息可省略•对于非过程调用,如果有返回消息,必须明确表示出来2021/5/2318 •Rose中的消息类型:分简单消息,同步消息,阻止消息,超时消息,调用消息,异步消息和返回消息。

      •可在消息的specification窗口中指定消息的类型2021/5/2319 •阻止阻止(balking)消息消息消息发送者发出消息给接收者,如果接收者无法立即接收消息,则发送者放弃这个消息例:阻止消息的表示符号2021/5/2320 •超时超时(time-out)消息消息消息发送者发出消息给接收者并等待指定时间,如果接收者无法在指定时间内接收消息,则发送者放弃这个消息例:超时消息的表示符号2021/5/2321 例:一些消息的例子2: display (x, y)简单消息条件消息4 [x < 0] : invert (x, color)3.1*: update ( )循环消息1.3.1: p:= find(specs) 嵌套消息,消息带返回值A3,B4/ C2: copy(a,b)线程间同步2021/5/2322 消息的语法格式消息的语法格式:(UML 1.4以后) [predecessor] [guard-condition] [sequence-expression] [return-value :=] message-name ( [argument-list] )•predecessor: The predecessor is a comma-separated list of sequence numbers followed by a slash (‘/’): sequence-number ‘,’ . . . ‘/’语义:必须先发生的消息的列表。

      •sequence-expression: is a dot-separated list of sequence-terms followed by a colon (‘:’): sequence-term ‘.’ . . . ‘:’ , 每个sequence-term的语法格式为: [ integer | name ] [ recurrence ]其中integer表示消息序号,name表示并发的控制线程,例: 如果两个消息为3.1a,3.1b,则表示这两个消息在激活期3.1内是并发的2021/5/2323 recurrence表示消息是条件发送或循环发送,其格式如下: ‘*’ [‘[’ iteration-clause ‘]’] 循环发送 ‘[’ condition-clause ‘]’ 条件发送例:*[i := 1..n] [x > y]说明:1. 如果循环发送的消息是并发的,可用符号*||表示 2. UML中并没有规定循环子句,条件子句的格式•return-value:将赋值为消息的返回值的名字列表,如果消息没有返回值,则return-value部分被省略。

      •message-name:消息名•argument-list:消息的参数列表2021/5/2324 Some concepts used in a sequence diagramobject条件创建对象返回消息循环2021/5/2325 4.4 建立建立sequence图的步骤图的步骤1. 确定交互过程的上下文(context);2. 识别参与交互过程的对象;3. 为每个对象设置生命线,即确定哪些对象存在于整个交互过程中,哪些对象在交互过程中被创建和撤销;4. 从引发这个交互过程的初始消息开始,在生命线之间从顶到下依次画出随后的各个消息;5. 如果需要表示消息的嵌套,或/和表示消息发生时的时间点,则采用FOC;6. 如果需要说明时间约束,则在消息旁边加上约束说明;7. 如果需要,可以为每个消息附上前置条件和后置条件2021/5/2326 顺序图建模风格顺序图建模风格•建模风格1:把注意力集中于关键的交互–创建模型时要把注意力集中于系统的关键方面,而不要包括无关的细节–例如:如果顺序图是用于描述业务逻辑的,就没必要包括对象和数据库之间的详细交互,像save()和delete()这样的消息可能就足够了。

      或者简单地假定持久性(persistence)会适当地被处理,而不用考虑持久性方面的细节问题2021/5/2327 •建模风格2:对于参数,优先考虑使用参数名而不是参数类型–例如,消息addDeposit(amount, target)比addDeposit(Currency, Account)传递了更多的信息–在消息中只使用类型信息不能传递足够的信息–参数的类型信息用UML类图捕获更好–建模风格只是建议,不是规定如果只是需要表示“有某些东西要传递”这个事实,而不需要提供更多的细节,则可以指明参数的类型作为占位符2021/5/2328 •建模风格3:不要对明显的返回值建模–例:创建安全登录对象的行为会导致生成一个顾客对象,这个是不明显的;而向订单对象发送请求其总数的消息,其返回值是显然的 •建模风格4:可以把返回值建模为方法调用的一部分2021/5/2329 顺序图常见问题分析顺序图常见问题分析•顺序图中消息的循环发送顺序图中消息的循环发送–在消息名字前加循环条件例: 1.1 *[ for all order lines]: message1() 2.1 *[i:=1..n]: message2()2021/5/2330 2021/5/2331 •顺序图中时间约束的表示顺序图中时间约束的表示–用constraint(约束)来表示。

      例:2021/5/2332 •顺序图中递归的表示顺序图中递归的表示–利用嵌套的FOC表示例1. 单个对象自身的递归2021/5/2333 例2. 多个对象间相互递归调用的表示2021/5/2334 主要内容主要内容 顺序图顺序图 协作图(通信图)协作图(通信图) 实例分析-课程注册系统实例分析-课程注册系统2021/5/2335 4.5 协作协作(Collaboration)图图•协作图协作图包含一组对象和链(link),用于描述系统的行为是如何由系统的成分协作实现的 •A collaboration diagram is a diagram that shows interactions organized around roles—that is, slots for instances and their links within a collaboration.2021/5/2336 Collaboration图中的组成元素图中的组成元素•协作图中的一些主要元素:–Object(包括actor实例,多对象,主动对象)–Message–Link(链)2021/5/2337 协作图中的多对象协作图中的多对象(multiobject)•A multiobject is used within a collaboration to show operations that address the entire set of objects as a unit rather than a single object in it.•多对象图例: 2021/5/2338 主动对象主动对象•主动对象主动对象是一组属性和一组方法的封装体,其中至少有一个方法不需要接收消息就能主动执行(称作主动方法)。

      •An object that owns a thread of control and can initiate control activity2021/5/2339 说明:•除含有主动服务外,主动对象的其它方面与被动对象没有什么不同•目前并无商品化的OOPL能支持主动对象的概念,需要程序员在现有的语言条件下设法把它实现成一个主动成分2021/5/2340 主动对象的表示(1) UML中的表示:加粗的边框(2) Rose中的表示2021/5/2341 协作图中的链协作图中的链(link)•协作图中用链链(link)来连接对象,而消息显示在链的旁边–链是association(关联关联)的instance(实例实例)•一个链上可以有多个消息•链的两端不能有多重性多重性(multiplicity)标记2021/5/2342 协作图中重复和条件分支的表示协作图中重复和条件分支的表示•和顺序图中的表示方法类似–用*[i:=1..n]或*表示要重复发送的消息–用类似[x > 0]的条件语句表示消息的分支–UML并没有规定[]中的表达式的格式,因此可以采用伪代码的格式或某种程序设计语言的语法格式。

      2021/5/2343 4.6 建立建立collaboration图的步骤图的步骤1. 确定交互过程的上下文(context);2. 识别参与交互过程的对象;3. 如果需要,为每个对象设置初始特性;4. 确定对象之间的链(link),以及沿着链的消息;5. 从引发这个交互过程的初始消息开始,将随后的每个消息附到相应的链上;6. 如果需要表示消息的嵌套,则用Dewey十进制表示法;7. 如果需要说明时间约束,则在消息旁边加上约束说明;8. 如果需要,可以为每个消息附上前置条件和后置条件2021/5/2344 Collaboration图的例子图的例子:由顺序图转换来的协作图2021/5/2345 协作图建模风格协作图建模风格类似于顺序图:•把注意力集中于关键的交互•对于参数,优先考虑使用参数名而不是参数类型•不要对明显的返回值建模•可以把返回值建模为方法调用的一部分2021/5/2346 其他的建模风格:•建模风格5:为每个消息画出箭头–便于可视化地确定流向一个给定对象的消息数量,以此判断该对象所涉及的潜在耦合情况,这通常是在对设计进行重构时要考虑的一个重要因素–例子:2021/5/2347 •建模风格6:注明导航性(Navigability)时要慎重。

      –可以在协作图中对导航性建模,但这不是很常见,因为这太容易和消息流混淆–用UML类图来描绘导航性更好–例子:Slide 492021/5/2348 4.7 顺序图和协作图的比较顺序图和协作图的比较•顺序图强调消息的时间顺序,协作图强调参加交互的对象的组织,两者可以相互转换•顺序图不同于协作图的两个特征:–顺序图有对象生命线–顺序图有控制焦点•协作图不同于顺序图的两个特征:–协作图有路径–协作图必须有消息顺序号2021/5/2349 •和协作图相比,顺序图:–Take more space–Easier to follow algorithms–Easier to depict lifetimes–Easier to show multithreading in one object–More difficult to visualizing multiple concurrent flows of control –Do not show association links•顺序图可以表示某些协作图无法表示的信息;同样,协作图也可以表示某些顺序图无法表示的信息2021/5/2350 4.8 工具支持工具支持1. 模型以动画的方式执行;2. 正向工程和逆向工程;3. Rose中的顺序图和协作图–不支持UML1.5中的全部符号;–顺序图和协作图相互转换时不转换text box元素。

      2021/5/2351 •如何根据用例图、交互图、类图、活动图、状态图等来生成测试用例?•例:Aynur Abdurazik and Jeff Offutt, Using UML Collaboration Diagram for Static Checking and Test Generation.–<>国际会议论文,论文电子版在ftp://166.111.102.2/教学资料/UML文献/, ss, ss–这篇论文给出了一个根据UML的协作图(设计阶段的结果)对系统进行静态分析和动态执行路径检查的方法思考题思考题2021/5/2352 主要想法:•由于协作图包含了对象间所传递的消息及消息的顺序,因此协作图提供了设计层的数据流和控制流信息因此,利用协作图可以 (1) 在代码生成前利用数据流和控制流信息产生测试数据; (2) 对协作图本身进行静态检查; (3) 对代码进行静态检查;2021/5/2353 主要工作:•首先完成了一些定义:根据链上的消息、参数、返回值等的不同情况定义了12种协作图中可能用到的connection,即–collaboration pair–variable definition link–variable usage link–object definition link –object creation link –object usage link–object destruction link–variable def-use link pair –object def-use link pair–object creation-usage link pair–object usage-destruction link pair–message sequence path•这些connection是根据类图和协作图中的信息分类的,但测试时只根据协作图中的信息。

      2021/5/2354 •论文确定了协作图中可以用于静态测试的四个item,它们是: –ClassifierRoles–Collaborating Pairs–Message or stimulus–Local Variable Definition-Usage Link Pairs: 即利用前面定义的variable def-use link pair, object creation-usage link pair, object usage-destruction link pair, object creation-destruction link pair检查数据流的异常情况•通过检查这些items,可以发现设计中不一致的地方•论文说明了可以从这四个方面对设计进行检查,但没说明如何进行检查2021/5/2355 动态测试方法:•可以利用协作图中的消息及其消息序号形成message sequence path•A message sequence path is a path that includes all messages in a collaboration in the order specified by the collaboration diagram.•一个message sequence path将包含所有的variable def-use link pair, object def-use link pair, object creation-usage link pair, object usage-destruction link pair。

      2021/5/2356 •一个协作图及其message sequence path的例子:2021/5/2357 该协作图的一个message sequence path processorOrder(o) :Comapny getpNr() o:Order getAmount() o:Order search(pNr, a) :Store delivery(o,s) :Delivery deliver(d) :Store add(d) :Delivery2021/5/2358 •测试准则: For each collaboration diagram in the specification, there must be at least one test case t such that when the software is executed using t, the software that implements the message sequence path of the collaboration diagram must be executed.•测试准则的作用:(1)生成测试用例;(2)作为运行测试用例的依据。

      2021/5/2359 •为了测试系统,将在系统中植入代码•论文中提出了一个植入代码的算法即根据message sequence path在每个类中植入代码结论:•该方法是基于设计阶段的结果进行测试;•该方法所使用的技术可用工具支持,具有较强的实用性进一步的工作:2021/5/2360 主要内容主要内容 顺序图顺序图 协作图(通信图)协作图(通信图) 实例分析-课程注册系统实例分析-课程注册系统2021/5/2361 coursereg(analysis).mdl文件的Logical View下2021/5/2362 •顺序图Register for Courses - Basic Flow说明:•协作图可由顺序图生成.•转换成协作图时,说明不能自动转换.2021/5/2363 •协作图Register for Courses - Basic Flow说明:•协作图可由顺序图生成.•转换成协作图时,说明不能自动转换.2021/5/2364 顺序图Register for Courses - Basic Flow (Create Schedule)2021/5/2365 协作图Register for Courses - Basic Flow (Create Schedule)2021/5/2366 说明:•RegisterForCoursesForm是一个边界类,用于接收用户的输入。

      •在分析阶段,方法可以粗略说明,在设计阶段可进一步细化,如第2步2021/5/2367 顺序图Register for Courses - Basic Flow (Submit Schedule)2021/5/2368 协作图Register for Courses - Basic Flow (Submit Schedule)2021/5/2369 说明:•在顺序图中遇到判断分支情况,但只描述了其中的一个分支2021/5/2370 顺序图 Register for Courses - Save Schedule说明:边界类,控制类,实体类的区别2021/5/2371 协作图 Register for Courses - Save Schedule说明:边界类,控制类,实体类的区别2021/5/2372 •Login用例实现和Close Registration用例实现•顺序图 Login - Basic Flow说明:1. 采用Any User参与者.2. 对象之间的消息还没进一步细化.2021/5/2373 •Login用例实现和Close Registration用例实现•协作图 Login - Basic Flow说明:1. 采用Any User参与者.2. 对象之间的消息还没进一步细化.2021/5/2374 4.9 4.9 常见问题分析常见问题分析1. Sequence图中的对象如何确定?与Class图是否是同时生成并交互修改?答:顺序图中对象的确定需要参考类图,类图中类的确定也要参考顺序图,二者是相互补充、相互协调的关系。

      在分析阶段,顺序图中的消息名可能只是一个说明,在设计阶段,顺序图中的消息名将被细化,最后顺序图中的消息会对应到类图中的方法 2021/5/2375 2. 交互图中的多态性问题:如果对象具有多态性,发送对象不可能事先知道目标对象属于哪个类,因此在交互图中如何确定目标对象所属的类?答:多态性属于运行时问题,这个类是目标对象有可能所属的所有类的超类(一般类,父类)2021/5/2376 •例1:如果目标对象是icon,消息是draw(),icon可能属于类Graph,Circle,Rectangle,其中Graph类是Circle类和Rectangle类的一般类(父类),那么目标对象的类名应该是Graph2021/5/2377 •例2:参考下面的库存管理系统的类图(部分)和顺序图(部分): 类图:2021/5/2378 上面的顺序图中缺了两个类名,用XXX和YYY代替,则XXX和YYY分别可以是什么类?(A) XXX = DeliverySchedule, YYY = Supplier (B) XXX = Supplier, YYY = DeliverySchedule (C) XXX = PreferredSupplier, YYY = DeliverySchedule (D) XXX = DeliverySchedule, YYY = PreferredSupplier 顺序图:答: (B, C)2021/5/2379 3. 交互图中如何表示广播消息?答:可以用版型<>或约束{broadcast}来表示广播对象。

      发送对象把系统中的每一个对象都看作一个潜在的目标对象如图所示:2021/5/2380 总结总结•基本概念:交互图,顺序图,协作图,Lifeline (生命线),Focus of control(控制焦点),activation(激活期),消息的类型和语法格式, active object(主动对象), multiobject(多对象),Link(链) •交互图的应用2021/5/2381 部分资料从网络收集整理而来,供大家参考,感谢您的关注! 。

      点击阅读更多内容
      关于金锄头网 - 版权申诉 - 免责声明 - 诚邀英才 - 联系我们
      手机版 | 川公网安备 51140202000112号 | 经营许可证(蜀ICP备13022795号)
      ©2008-2016 by Sichuan Goldhoe Inc. All Rights Reserved.