




已阅读5页,还剩70页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
2019/7/28,1,第2讲 交互与交互图,2019/7/28,2,内容,软件动态行为 交互与交互图 顺序图 顺序图的组织 协同图 建模指南,2019/7/28,3,1. 软件动态行为/1,用交互描述软件的动态行为,2019/7/28,4,1. 软件动态行为/2,描述系统的边界:首先得出用例图,每一个用例都对应系统一系列动作,序列最初是用文本(形式的或非形式的)的方式描述,这样的描述精确性较差,不标准 在UML里,直观的、标准的和面向对象的方式是: 交互和交互图 活动图(Activity diagram) 状态机图(State machine diagram) 描述软件系统的动态行为(行为视图),2. 交互与交互图,2019/7/28,6,2.1 交互与交互图,软件系统中的任务是通过对象之间的合作来完成的 对象之间的合作是通过对象之间的消息的传递实现的。对象之间的合作在UML里被称为交互,交互是为达某一目的而在一组对象之间进行消息交换的行为 交互可以对软件系统为实现某一任务而必须实施的动态行为进行建模。 交互的所包含的UML建模元素包括: 对象 消息 它们必须通过某种载体表现出来,在UML中,此载体就是交互图,2019/7/28,7,2.2 交互图/1,交互图描述了一个交互, 其中包括了一系列的对象及其关系以及通过这些关系在对象之间传递的消息。 交互图可分为两类: 顺序图 协同图 它们在语义上是等价的,这意味顺序图和协同图内部包含的信息是相同的,因此两图可以互相推导。如果通过工具,它们可以互相自动转换,交互图可以为软件系统的下列构成的对象的动态行为进行建模: 类 接口 部件 节点,2019/7/28,8,2.2 交互图/2,交互图中的这些对象(实例)可以处于一个或多个场景中,以实现相应的用例所规定的任务 通过用交互图进行建模,可以对这些对象涉及的各对象的动态特性进行: 视化 说明 建造 建档,2019/7/28,9,2.2 交互图/3,在考察一个系统的对象的交互时,通常从顺序图开始,然后将顺序图转换为协同图,以分析系统在结构方面应该具备的特点 用软件实现前图指定的动态行为,首先考虑系统外部和系统打交道的对象,已经在图中标识: 活动者:“用户”和“显示窗口” 将这两个外部对象描绘在交互图上 之后,十分自然地,也是“面向对象”地考虑在系统中应该如何设置担负不同职责的软件“角色”,它们共同完成这一任务,这如同当人们需要互相协同来完成某一工作时,需要进行分工一样。这样的“角色”,在UML中,被称为对象,2019/7/28,10,2019/7/28,11,2.2 交互图/4,具有相同的结构和行为的所有对象,被抽象为类,这是UML中典型的“类/实例”两分法 在UML中,对象和类使用相同的图符(矩形)来标识,为了区分对象和类,在对象的名字下面用下划线以示区别。 活动者是类的变体(stereotype),在交互图里,当变体以对象出现时,将保持此变体的图符 。,2019/7/28,12,2.2 交互图/5,在前面的用例中,用户和系统的交互,可以分为三个连续执行的动作 1、用户在位图区域内按下鼠标左键; 2、保持左键按下拖动鼠标; 3、释放鼠标左键。 这三个动作构成了活动者和系统的联系,每一动作都相当于向系统发出了一个命令,系统必须在内部执行相应的操作,以正确响应这命令 这命令,在UML里被称为消息(message),2019/7/28,13,2.2 交互图/6,消息在对象间传递,用于启动目标对象内部的某些操作 在考虑系统内部对象的设置时,出于系统“外壳”与系统内核的区分,专设一个对象用于接收用户传来的鼠标消息,这就是“接收鼠标消息”这一对象的用途 该对象收到操作系统传来鼠标消息后,把它传给为“浏览位图”这个工具专设的对象“处理鼠标消息”,它把由操作系统传来的无特定语义的鼠标消息,解释为“浏览位图”赋予它们的语义,并发送消息给bmpviewer的系统内核里的对象(系统数据),进行具体的执行,2019/7/28,14,3. 顺序图,2019/7/28,16,3.1 顺序图的概念,顺序图的定义: 顺序图是交互图的一种,它强调的是消息发送的时间的先后顺序 顺序图的构成 参加交互的各对象在顺序图的顶端沿水平方向排列,对象之间传递的消息用箭头表示,水平放置,沿垂直方向排列 在垂直方向上越靠近顺序图顶端的消息越先发送,从而给出了消息被执行的先后顺序的明确而直观的表示,2019/7/28,17,3.2 对象生存线,每个对象的底部中心都绘有一个垂直虚线,当一个对象向另一个对象发送消息时,消息始于发送对象底部的虚线,终止于接受对象底部的虚线, 这条虚线被称为对象生存线(object lifeline) 对象生存线代表一个对象在一个时间段内的存在 如果在顺序图上某一对象收到了创建消息或销毁消息,则此对象的生存期始于它收到创建消息的时刻,终止于收到销毁消息的时刻,2019/7/28,18,3.3 控制焦点,在UML里,由消息引发的动作的执行过程被描述为控制焦点 控制焦点代表一个对象直接地或通过一个子过程间接地执行一个动作的那段时间 绘制:它由位于对象生存线上的一个窄长方形代表,控制焦点长方形的顶端代表动作的开始时刻,底端代表动作的结束时刻。 控制焦点可以理解为是C语言中一对花括弧(“”)内的内容,2019/7/28,19,3.4 控制焦点的嵌套,动作的执行过程可以引起其它消息的发送,从而对应子动作的执行,就产生了控制焦点的嵌套 控制焦点的嵌套的表示: 另一个控制焦点向右叠放在父控制焦点上,子控制焦点中消息发送的顺序号可以用过程顺序号表示 对象生存线和控制焦点,是顺序图所特有的,它不在协同图里出现,2019/7/28,20,2019/7/28,21,3.5 对象/1,在UML里,对象指的是某一种抽象的坚实存在,它是封装了状态和行为的具有明确边界和身份的实体 具有相同的结构和行为的对象, 在UML里被称为类,因此,对象应该和某一类相对应 UML里,对象使用与其对应的类一样的图符,为了使对象的图符和类的图符相区别,图符中对象的名字下面加有下划线 对象的名字 在对象的名字后面标上此对象的实现类的名字,对象名和类名之间用冒号分开 对象名可以缺失,只写此对象对应的实现类的名字, 表示它是此类的一个对象 标记类而不标记对象名的对象称为匿名对象(anonymous object);标记名字的对象称为记名对象(named object)。,2019/7/28,22,3.5 对象/2,2019/7/28,23,3.5 对象/3,对象类角色的矩形框图一般位于顺序图的顶部,它们的排列顺序一般不重要,但是为了图面的清晰,应把交互频繁的对象尽可能的靠拢,把初始化整个交互的对象放置在最左边 如果一个对象改变了它的属性值、状态或角色,则需在生命线上该对象的改变点处放置该对象的一个图标副本,并标出有关的变更,2019/7/28,24,3.6 消息/1,对象间的互相合作与交流表现为一个对象以某种方式启动另一个对象的活动,这种交流在UML里被定义为消息 消息是对对象间的一种信息的通讯的描述,此信息期望在通讯完成之后,某一活动会随之发生 消息相当于向目标对象发送了一条命令,此命令启动了目标对象的一个动作,动作一般通过函数调用(call)启动,但也可以通过其它方式,2019/7/28,25,3.6 消息/2,消息所能采取的形式: 调用(call):启动一个对象里的操作。操作是对象的类所能提供的服务的实现。调用消息一般是顺序执行的 返回(return):操作向调用者返回一个值 发送(send):向一个对象发送一个信号。发送消息是异步消息,意味着发送消息的对象在发送了消息给目标对象后,不论目标对象是否接受此消息,它都继续进行下一消息的发送 创建(create):此消息的发送导致目标对象被创建 销毁(destroy):此消息的发送导致目标对象被销毁,2019/7/28,26,对象,1,对象,2 : class,CallMe(String),调用,创建,销毁,返回,发送,2019/7/28,27,3.6 消息/3,消息的表示 在UML里,消息用箭头表示,此箭头从发送消息的对象指向接收消息的对象 在消息的各种形式中,创建和销毁消息,用消息的变体来表示 返回消息,用带虚线的箭头表示 发送消息,发送消息又称为异步消息, 用半箭头表示 调用消息,调用消息又称为简单(simple)消息,用整箭头表示。,2019/7/28,28,消息可以有名字,它列在消息的箭头的直线上 如果对象的实现类已经确定,则此名字可以标记为实现类的某一操作的定义,例如,C/C+语言里的函数定义等,2019/7/28,29,3.6 消息/4,消息的发送是有顺序的,此顺序由它在顺序图垂直方向上的位置决定,垂直方向靠近顺序图的顶端的消息先执行,靠近顺序图底部的消息后执行,因此每一消息都有一顺序号 消息的顺序号,此顺序号可前缀于消息的名字前面,它们之间用冒号分隔,顺序号分为两种: 单调顺序号(flat sequence):单调顺序号严格按照消息的发送顺序排列,如:1,2,3,等等 过程顺序号(procedual sequence):过程顺序号是嵌入式的,当一个消息启动了另一个消息序列时, 此消息序列内的各消息就可以重新开始编号。 如:消息2发送后,启动了其后的一系列消息,则这些消息就可以编号为2.1, 2.2, 2.3, ,等等。,2019/7/28,30,单调顺序,过程顺序,2019/7/28,31,3.6 消息/5,消息内容标签格式: 序号 守护条件*循环 返回表:=操作名(参数表) Guard Condition括在方括号中,含有一个布尔条件表达式。只有当其守护条件被满足时才能发送该消息。该条件可以省略,表示无条件发送 “*”后跟一个括在方括号中的数字,表示该消息发送的重复次数,如果没有数字,表示次数未定,2019/7/28,32,2019/7/28,33,3.7 抽象层次,对系统的行为建模,顺序图可以采用两个抽象层次: 说明层(Specification level) 实例层(Instance Level),2019/7/28,34,说明层,实例层,2019/7/28,35,3.8 对象的创建与销毁,如果对象在交互中创建,则该对象的生命线从收到标有构造型的创建消息之时开始 一个对象可以在交互中销毁,如果一个对象是在交互中销毁的,则该对象的生命线就从收到一个标有构造型destroy的摧毁消息之时终止。对象销毁的标志是在其生命线的端部标上一个“”,2019/7/28,36,2019/7/28,37,3.9 同步消息与异步消息/1,同步消息: 发送者把控制传递给消息的接收者,然后暂停活动,等待消息接收者放弃或返回控制 同步消息的接收者必须是一个被动对象,它是一个需要通过消息的驱动才能执行动作的对象 同步消息用一条带全箭头的箭线表示。一般一个同步消息必有一个配对的返回消息,在顺序图中返回消息可以省略,2019/7/28,38,2019/7/28,39,3.9 同步消息与异步消息/2,异步消息: 发送者通过消息把信号传递给消息的接收者,然后继续自己的活动,不等待接受者返回信息或控制。异步消息的接收者执行所请求的操作,操作完成后可以发回信息给异布消息的发送者 两者并发工作 接受者是一个主动对象,2019/7/28,40,3.10 分支,从一个对象的同一个时间点发出多个消息的情况,每一个消息都有保安条件。依据这些保安条件是否互斥,分支结构可以分为条件分支或并发分支 水平箭头表示消息瞬时发生 消息箭头斜向下,表示需要一定的传输时间,称为非瞬时消息,可以在消息上赋上传输时间,也可以在消息的发出点和接收点分别标出消息发出的时间和消息接收的时间,2019/7/28,41,3.11 循环,一组消息被多次发出 在顺序图中循环可以用一组消息包含在一个大矩形框中表示,这些消息将循环重复发送,循环的继续或退出由一个出口条件控制,2019/7/28,42,2019/7/28,43,3.12 自调用与回调,自调用:对象调用自己 当一个对象发送一个异步消息调用另一个对象时,注册一个它关心的特定事件类型或请求完成某项操作,然后继续自己的其它从动作,此时发送对象和接收对象并行工作。当指定的事件类型发生或所要求的操作已完成时,消息接收对象立即发送一个异步消息给原调用者。它与返回不同,2019/7/28,44,3.12 动作,动作(Action):当一个对象收到了消息后,此对象把消息当做执行某种动作的命令 动作是一系列的可执行的元计算(atomic computation)的执行,这些元计算的执行可导致系统状态的变化或某一值的返回 函数的执行就是动作的典型的例子 动作有明确的开始时刻和终止时刻 在动作的执行过程中,会导致其它一系列的消息的顺序发送 一个典型的例子是: 函数调用其它函数,4. 顺序图的组织,2019/7/28,46,4.1 总体,一个Use Case可以有多个顺序图,通过一个或多个顺序图可以显示驱动用例的对象交互 一般对主事件流有一个顺序图,对独立的子流分别设置一个顺序图。一般的组织方法是对主事件流设置一个顺序图,而对用例中的每一个独立的子流设置一个顺序图,2019/7/28,47,4.2 顺序图中的对象,在顺序图中可以采用以下方式使用对象: 既可表示类又可表示对象,因此,生命线可以表示类或者对象的行为,但是一般而言,生命线表示该类的所有对象 对象的类可以不描述。一般,你可以针对对象来建立顺序图,然后再针对它们的类进行描述 对象也可不命名,但是如果你想区分相同类的不同对象,那么必须命名 同一类可以有不同的生命线代表一个类的不同的对象,但是,你必须给以这些对象不同的名字 代表类的生命线能够与代表类对象的生命线可以并存,2019/7/28,48,4.2 顺序图中的活动者,活动者 一般,活动者的实例由顺序图中第一条(最左)的生命线来表示,以作为交互的调用者 如果在相同的图中有几个活动者的实例,尽量将它们放在最左边,或者最右边,2019/7/28,49,4.3 顺序图中的消息,消息 消息可以暂时不指派,意味着它的名字可以是一个临时的名字来描述消息的总体含义,而不是对接收对象的操作的名字,我们可以在以后将消息命名为对消息目标对象的操作,2019/7/28,50,4.4 顺序图中的脚本,脚本(Scripts) 脚本可以是顺序图中的事件流的文本描述 脚本放在生命线的左侧,也可以把脚本依附在消息上,2019/7/28,51,4.5 顺序图中的分布式控制流/1,事件流或者部分事件流的集中控制意味着少数对象控制了与其它对象间的消息发送流 这些控制对象确定了用例中其它对象被激活的次序 其它对象之间的交互很少或者不存在,2019/7/28,52,4.5 顺序图中的分布式控制流/2,在回收机系统中,用例Print Daily Report跟踪回收的对象的数目和类型,并记录在收据上。报告产生控制对象决定了累计结果产生和记录的顺序,板条箱,Centralized Control 有何优缺点?,2019/7/28,53,4.5 顺序图中的分布式控制流/3,这是集中控制行为的例子。控制结构是集中式的,因为事件流中不同子事件阶段是彼此独立的 该方法的主要优点是每一个对象不必跟踪下一个对象的状态 为了改变子事件阶段的次序,只需要对控制对象进行修改 我们也可以容易地添加另外一个子事件阶段,例如如果添加了新的回收物品类型。另外一个优点是你可以在其它用例中重用子事件阶段,因为行为的次序并没有放入到对象内部,2019/7/28,54,4.5 顺序图中的分布式控制流/4,分布式控制的情形是各个参与的对象之间直接与其它对象进行通信,而不是通过一个或多个控制对象。,2019/7/28,55,4.5 顺序图中的分布式控制流/5,在用例Send Letter中,某人通过邮局发送一封信到其它国家。该信件首先发送给收信人的国家,在该国家中,信件发送到特定的城市,在该城市中,将信件发送给收信人的家里,2019/7/28,56,4.5 顺序图中的分布式控制流/6,用例的行为是一个分布式的事件流。各个子事件阶段混合在一起。信件的发送者说“把信件发给某人”,他不需要知道信件是如何发送给另外一个国家或者城市的细节(如果某人把信件寄给同一国家,并不是所有的操作都会发生),2019/7/28,57,4.5 顺序图中的分布式控制流/7,采用的控制的类型取决于具体的应用。通常,在开发中我们需要将各个任务指派给各个对象 集中式控制的事件流的顺序图的形状是 “叉型”的,而控制结果如果是分布式的,那么顺序图是阶梯型,2019/7/28,58,2019/7/28,59,4.5 顺序图中的分布式控制流/8,在下面的情形中,采用分布式结构比较合适: 子事件阶段紧密耦合: 构成part-of或者consists-of层次, 例如Country - State - City; 构成一个信息层次, 例如CEO - Division Manager - Section Manager; 代表一个固定的时序进度 (子事件阶段总是以相同的顺序执行), 例如Advertisement - Order - Invoice -Delivery - Payment 构成一个概念继承层次, 例如Animal - Mammal - Cat.,2019/7/28,60,4.5 顺序图中的分布式控制流/9,下面的情形采用集中结构: 如果子事件阶段的执行次序可能发生改变 如果希望插入新的子事件阶段 如果希望将部分功能作为单独的部分进行重用,5. 协同图,2019/7/28,62,5.1 协同图的概念,协同图是交互图的另一种表现形式 它在语义上和交互图是等价的,2019/7/28,63,5.2 协同图的构成,协同图强调的是参加一个交互的各对象的组织。 协同图的构成: 对象 对象由带有下划线的对象名字和它的类名表示,中间用冒号分开(objectname : classname) 在协同图中可以有下列方式使用对象: 对象的类没有指定,一般我们在协同图中首先指定一个对象,然后是它们的类. 对象可以不被命名,如果你想区分相同类的不同对象,你必须命名 如果类总是参与协同,类本身可以作为协同图的成员 活动者 一般,协同图中的活动者实例是交互的调用者。如果在图中有几个活动者实例,把它们放在图的周边 连接及在此连接上传递的消息,2019/7/28,64,5.3 协同图中的连接/1,连接(link)的定义:在UML里,连接(link)被定义为对象之间的语义联系。 连接是类之间的关联关系实例 在顺序图中,两个对象之间有消息传递意味这它们之间在语义上存在着联系,所以它们的对象之间存在着连接关系 反之,只要对象之间存在着连接关系,就可以在它们之间发送消息 连接的表示 在协同图上,连接用对象之间相连的直线来表示 连接可以有名字,它标在表示连接的直线上 如果有消息借助此连接关系传递,把消息的图符沿直线方向绘制,消息的箭头指向接受消息的对象 由于仅从图符的绘制上无法在协同图上读出消息发送的顺序,所以通常在消息上保留对应的顺序图的消息顺序号,2019/7/28,65,5.3 协同图中的连接/2,连接的通路(path) 连接表明两个对象之间有语义连接,也意味着两对象之间是可以互相访问的,但具体是通过什么方式使两个对象成为互相可见? 两对象之间的连接可以有多种形式。例如: 通过类的成员变量使对象可见 使两对象位于程序的全局使它们互相可见。 使两对象位于局部作用域使它们互相可见。 UML为连接关系指定了四种特定的变体来描述对象连接的方式,这四种变体统一称为通路(path) 通路用于分别指定位于连接两端的对象的可见方式,2019/7/28,66,5.3 协同图中的连接/3,这四种变体是( 通路的四种形式): 1Field: 对象能被另一个对象看见,是由于此对象是另一个对象的一部分。例如,如果一个对象是另一个对象的成员变量,那么另一个对象肯定可以访问此对象。Filed路径有时又被称为自引用(self)路径 2. Parameter(参数):对象能被另一个对象看见, 是因为此对象是另一对象的某一操作的参数 3Local(局部):此对象能被另一对象看见,是因为此对象存在于另一对象的局部作用域中。例如:某一对象是另一对象的某个函数的局部变量,就可以用此路径描述 4Global(全局):此对象能被另一对象看见,是因为此对象存在于全局作用域中 与消息顺序号不同,通路和连接只能在协同图里描绘,2019/7/28,67,2019/7/28,68,5.4 协同图的特点,由于协同图的格式,它们更适合于分析活动 协同图更适合于少数对象之间的简单交互。当对象和消息的数目增加后,图形就变得更难读了。 除此之外,该图也很难表示另外的描述信息,例如时序信息,决策点,或者其它非结构化的信息,这些比较容易作为标注加到顺序图中,6. 建模
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 仓库收发工作管理制度
- ma标志标识管理制度
- 企业用电计量管理制度
- 研究生专业实践个人总结5000字
- 企业资产管理管理制度
- 考驾驶人培训场管理制度
- 项目部人员值班管理制度
- 井下特殊物料管理制度
- 企业工会资金管理制度
- 产品日期发货管理制度
- 分公司特种设备使用安全风险日管控、周排查、月调度管理制度特种设备安全风险管控清单记录表等
- 甲状腺癌手术治疗护理查房
- 2024-2030年中国矿用锚杆行业发展现状需求分析报告
- 护士角色转换与适应
- 《数据资产会计》 课件 第三章 数据资产的确认和计量
- 2024年-2025年农作物植保员职业技能考试题及答案
- 拍卖合同模板三篇
- 2023北京西城区初二期末(下)物理试卷及答案
- 2023-2024学年山东省烟台市高一下学期期中生物试题(解析版)
- 浅谈机械设计制造及其自动化在飞机发动机中的应用
- 2024年西北工业大学附中丘成桐少年班初试数学试题真题(含答案详解)
评论
0/150
提交评论