CASEJMU集美大学工商管理学院信息管理与信息系统系第6章电子商务系统分析与设计动态模型—交互图交互的概念•一次交互就是指在特定语境中,为了实现某一个目标,而在一组对象之间进行交换的一组消息所表示的行为。•一个消息就是一个对象激活另一个对象中的操作调用。“方法调用过程在UML中怎样表示?”交互图•交互图(InteractionDiagram)是由一组对象和它们之间的关系构成,其中包括在对象间的传递的信息,它包括顺序图和协作图。•顺序图着重描述对象按照时间顺序的消息交换。顺序图描述了类相互协作的完成预期行为的动态过程。•协作图着重描述系统成分如何协同工作。例子:通过一个简单交易系统来说明UML交互图要达到某个特定的目标,必然要执行一系列的方法调用。UML序列图的典型用途就是显示出方法调用过程。在UML序列图中,调用一个操作就叫做发送一个消息(Message)。交易事务中计算累计金额的时序图时序图有两个维度:垂直维度以发生的时间顺序显示消息/调用的序列;水平维度显示消息被发送到的对象实例对象生命线激活期消息活动条可以嵌套,表示在前一方法的执行过程中,又有同一对象的另一个方法被调用.交易事务中计算累计金额的相关的代码片断/*属于Sale类:从lineItem的单项金额计算交易总金额,@return交易总额*/publicdoublecalcTotal(){total=0.0;Iteratori=lineItems.iterator();while(i.hasNext())total+=((LineItem)i.next()).calcTotal();returntotal;}/*属于LineItem类:计算当前项目的交易金额,@return交易金额*/publicdoublecalcTotal(){total=product.calcTotal(this);returntotal;}/*属于Product类:计算指定数量的产品价值多少;@return金额*/publicdoublecalcTotal(LineItemli){returnamount*li.getQuantity();}下图显示了Sale类complete()方法的序列图,complete()方法调用了Sale类的两个方法:calcTotal()和calcPayments()。环形的回调符号表示一个对象正在调用它自身的方法。•协作图:强调发送和接收消息的对象的组织结构的交互作用图.有路径,协作图有顺序号。在协作图中,交互动作的次序由消息的编号决定。交易事务中计算累计金额的协作图在实践中,许多必需的交互序列可以隐含在类图之中,特别是类图用类原型和Stereotype(构造型)来表示特定的行为和交互模式之时。UML交互图把原本隐含的交互过程明确地表达出来,同时也明确地说明了原本在类图中不明确的交互过程。UML交互图是对倾向于描述静态特征的类图的补充,使得对象的动态交互过程明确化。本例结束!对交互图有一定的认识了吧?!时序图的主要元素•对象与角色:最顶上一排矩形框。在交互图中,参与交互的对象既可以是具体的事物,又可以是原型化的事物。作为具体的事物,一个对象代表现实世界中的某个东西。例如,aProduct作为类Product的一个实例,可以代表一个特定的产品;而如果作为一个原型化的事件,则aProduct可以代表类Product的任何一个实例。•生命线与控制焦点:每个对象都有自己的生命线,对象生命线是一条垂直的虚线,用来表示一个对象在一段时间内存在。•消息:用来描述对象之间所进行的通信的,该信息带有对将要发生的活动的期望。当传送一个消息时,它所引起的动用是一个通过对计算过程的抽象而得到的可执行语句。时序图的主要元素同步消息同步消息的发送者把控制传递给消息的接收者,然后暂停活动,等待消息接收者放弃或退回控制。同步消息的接收者执行所请求的操作,如果需要的话,可以把控制传递给另一个对象角色,请求做某个操作,并且当该操作完成后把控制返回给原来的同步消息的发送者。同步消息的接收者也可以直接返回或发送信息给原来的消息的发送者。同步消息的接收者必须是一个被动对象(PassiveObject),即它是一个需要通过消息的驱动才能执行动作的对象。异步消息异步消息的发送者通过消息把信号传递给消息的接收者,然后继续自己的活动,不等待接收者返回信息或控制。异步消息的接收者执行所请求的操作,操作完成后可以发回信息给异步消息的发送者。异步消息的发送者和接收者是并发工作的。在交互图中大量的是异步消息。一个异步消息可以做以下3件事情之一。创建一个新线程。此时的异步消息连接到一个激活期的顶部。创建一个新对象。与一个已经在运行的线程通信。异步消息的接收者必须是一个主动对象(Activeobject),即它是一个不需要消息驱动就能执行其动作的对象。对象的创建与销毁一个对象可以在交互中创建。如果一个对象是在交互中创建的,则该对象的生命线就从接收到一个标有构造型<<Create>>的创建消息之时开始。一个对象可以在交互中销毁。如果一个对象是在交互中销毁的,则该对象的生命线就从接收到一个标有构造型<<destroy>>的销毁消息之时终止。对象销毁的标志是在其生命线的端都标上一个“╳”。对数据库的JDBC接口的访问图7-4对数据库的JDBC接口的访问说明“:客户机”要等待消息“<<Create>>”完成执行,创建了“:事务”对象后,才继续发出同步消息“setAction(a,d,o)”,请求“:事务”对象进行设置数据操作。“:事务”转为休眠状态,最后被“销毁”时序图示例1协作图协作图主要元素•链:协作图中链的符号即一条连接两个类角色的实线。•消息编号:消息的编号有两种,一种是无层次编号,它简单直观;另一种是嵌套的编号,它更易于表示消息的包含关系。•迭代标记:用*号表示,表示循环,通常还有迭代表达式,用来说明循环规则。:Registrar:RegistrationManager:CourseList:StudentList1:register(name,course)1.1:findStudent(name)1.2:findCourse(course)1.1.1:s=find(name)1.2.1:c=find(course)c:Course1.3:register(s)local[s&c][(!s)&c]1:studentNotFound[s&(!c)]1:courseNotFound[(!s)&(!c)]1:allNotFound[s&c]1:OKself协作图主要元素•监护条件:通常是用来表示分支的,也就是表示“如果条件为true,才发送消息”。•在通信图中使用监护条件一定要有所限制,通常应只列出主要的监护条件,否则会影响其阅读。如果需要,尽可能还是通过顺序图来表示。时序图建模技术①设置交互的语境。②通过识别对象在交互中扮演的角色,设置交互的场景。③为每个对象设置生命线。④从引发某个消息的信息开始,在生命线之间画出从顶到底依次展开的消息,显示每个消息的特性(如参数)。⑤如果需要可视化消息的嵌套或实际计算发生时的时间点,可以用激活修饰每个对象的生命期。⑥如果需要说明时间或空间的约束,可以用时间标记修饰每个消息,并附上合适的时间和空间约束。⑦如果需要更形式化的说明某控制流,可以为每个消息附上前置和后置条件。集美大学工商管理学院信息管理与信息系统课堂习题图书馆管理系统的时序图系统管理员添加书籍的时序图图书管理员处理借书的时序图(不包括预留书籍的情况)系统管理员删除书目的时序图借阅者预留书籍的时序图用例图借阅者图书管理员uses还书预定取消预定借书usesusesusesusesuses所有的用例必须始于角色,而且有些用例也结束于角色。角色是位于你所工作的系统外部的人或其他系统。图书管理员增加书目系统管理增加标题usesextendsextends增加借阅者extends删除书目extends删除标题extends删除借阅者extends+findontitle()+findonid()+findonreservation()-create()-destroy()-id:intitem+find()+create()+destroy()-name:String-numberofversiontitle+create()+destroy()-lendingtime:Datebooktitle+create()+destroy()-lendingtime:Datemagezinetitle+create()+destroy()-dateloan+find()+create()+destroy()-name:String-adress:stringborrowerinfromation+find()+create()+destroy()-datereservation系统管理员添加书籍的时序图:Item:Administrator:MaintenanceWindow:Title1:additem()4:create(Integer,Title)Checkifcorrespondingtitleexist2:find(String)3:returntrue图书管理员处理借书的时序图(不包括预留书籍的情况)系统管理员删除书目的时序图借阅者预留书籍的时序图theBorrower:BorrowerWebApplicationtheTitle:Title1:Login2:find(String)3:Returntrue4:reserve()课堂作业主角1对象1消息1对象2消息2对象3消息3消息4思考:请将其转成协作图?答案主角1对象1消息1对象2消息3消息2对象3消息4你答对了吗?小结交互图可以有两种方式为系统动态建模按时间顺序为控制流建模按组织结构为控制流建模谢谢!