OMT_06交互图
合集下载
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
• 在Department类的语境中给出一个序列图
sd: Department.setManager(p : Person)
self : Department
p : Person
opt
[p != null && p.getDept() != self] ref Person.setDept(self)
enabled
计时图:门禁系统
door
locked
unlocked
locked
0
5
10
6.14 计时图
sd UserAccepted {d..3*d} WaitAccess :User WaitCard {t..t+3} CardOut {0..13} Code OK
Idle
NoCard :ACSystem unlock HasCard d t=now
1块钱
...
1份报纸 (b)用两个异步信号
6.4 消息-创建与撤销 • 创建消息createMessage:创建一条新生命 线的消息。 撤销消息deleteMessage:终止一条生命线
op1(x:Integer)
:A create foo(par=x)
b:B
foo(-) delete
序列图中的消息
通信图 通信图与序列图是同构的!两者可以互相转换
6.13 通信图 • 一个通信图首先描述一个交互实现所涉及到 的对象和链。
comm redisplay redisplay() :Controller window :Window {parameter}window 1:displayPositions(window) 1.1.3.1:links(self)
void setManager(Person p) { if(p!=null && p.getDept()!=this) p.setDept(this); manager =p; }
manage = p
序列图Department.setManager
6.12 序列图示例 • 交互Person.setDept(d : Department)
«create» EngineControl e1 : EngineControl
主动类和主动对象
6.11 序列图建模技术
• 如何采用序列图对交互进行建模?
–设置交互的语境。 –识别参与交互的对象。 –确定消息及消息的特征。 –增强交互的描述。 –与类图的协调性。 –明确序列图的作用。
6.12 序列图示例
create ob2 : C2 foo(foo_par=x) doit(z) doit(-) foo(-)
[else] bar(x) doit(z) x=bar(-):15 opti doit(-)
6.7 交互的使用
• 在一个交互的定义中使用了另一个交互,这就是一个“交 互使用interaction use”,也称为引用(reference)一个 交互,在图中表示为一个矩形框并用“ref”作为标签。
第6章 交互与交互图
• 在分析阶段,开发人员用交互来详细描述用 例的场景,这有助于项目团队对用例场景达 成共识。 • 在详细设计阶段,交互也能精确描述进程间 的通信协议。 • 当执行测试时,跟踪系统也可描述为交互, 并且能与先前的交互进行比较。
6.1 一个序列图例子
• 序列图强调消息的时间顺序,将交互表示成 二维表。
6.14 计时图
• 计时图timing diagram是序列图的另一种表 现方式,目的是清晰地表示生命线的状态改 变与时间度量。计时图很大程度上借鉴了时 序逻辑的表示方法。
sd doorControl locked scanner waiting open verify lock idle processor verifying unlock
OK
Unle表示参与交互的一个实 体或实体集合。
sd FaxExample
:User send
sender[1]:Fax
receiver[2]:Fax
transmit
acknowledge done
6.4 消息 • 消息message是一种命名元素,在生命线之间表示 一种特定通信。
6.5 发生规范与执行规范
• 在生命线上发生的事件主要是接收到消息 或信号,而后执行一定的动作。 1. 发生规范occurrence specification
• 发生规范是系统执行过程中对某个“事件发生” 所做的说明。 执行规范(控制焦点) 是对一条生命线中 所执行的行为的描述。
h : Image findPattern(s) findPattern(s)
6.2
交互
• 一个交互interaction是一个行为单位,描 述对象之间可观察的信息传递。一个交互所 描述的行为往往与特定语境相关。
sd UserAccepted +PIN:Integer{readonly 0<=PIN<=9999} :ACSystem
:User
Code(PIN)
CardOut
wire 1.1*[i:=1..n]:drawSegment(i) wire:Wire self i-1 1.1.1a:r0:=position() i
1.1.2:create(r0, r1) 1.1.3:display(window) line
contents wire:Wire
1.1.1b:r1:=position() Created during operation
对象1:类A 对象2:类B
doOne
doTwo
doThree
类A具有名为doOne的方法和类型为B的属性, 类B具有doTwo和doThree的方法
Public class A{ Private B myB=new B(); Public void doOne(){ myB.doTwo(); myB.doThree(); } }
break
par seq strict neg
Break
Parallel Weak Sequencing Strict Sequencing Negative
1个
多个 多个 多个 1个
6.6 组合片断
sd example ob1 : C1 opti ob3 : C3 ob4 : C4
alt
[x>0]
left:Bead
right:Bead
通信图中的消息嵌套、并发与循环
6.13 通信图
• 通信图与序列图都能表示交互,但强调不同 的侧面。序列图能清晰地表示时间序列,但 不能表示对象间关系。而通信图可以清楚地 表示对象间关系,但时间序列就只能从序号 中反映出来。序列图常用于表示交互的场景 ,而通信图则表示过程设计的结构。一旦过 程的结构确定之后,序列图又擅长详尽表示 控制的细节。所以,在建模过程中,这两种 图之间扬长避短,相互配合。
sd conversion caller:Phone lift receiver a {<1 sec} b {<10 sec} dial digit c d {<5 sec} d’ dial tone exchange:PBX receiver:Phone
...
route ringing tone phone rings answer phone stop tone stop ringing
card DB
output gate authorize
card valid
6.9 增强生命线
• 在一条生命线上,沿时间顺序,对象的状态 受到一定的约束,可表示为状态不变式。生 命线上可能执行一些重要的动作,这要求增 强生命线的表达力。
account : Account {balance>0} securityDB : Database
6.4 消息-消息的种类 • • • • 从发送者和接收者的角度,消息的种类有4种: complete:消息的发送者和接收者都完整描述。 lost:描述了发送事件,但未描述接收事件。 found:接收事件发生了,但未描述发送事件。 unknown:发送者和接收者都不清楚,这是不应出 现的情形。
a:A lost found b:B
0
1
2
t
计时图可表示多种时间约束
6.15 交互纵览图
• 交互纵览图Interaction overview diagram也是一种交互 图,使用了活动图的元素来描述控制流,而其中的一个结 点则是一个交互或者交互使用,再用序列图来描述结点内 部子活动或动作的细节。
sd: Person.setDept(d : Department) self : Person opt d : Department
[self.isManager() && self.getDept() != d] ref Department.setManage(null)
dept = d
Person类的一个方法
void setDept(Department d){ if (this.isManager() && this.getDept()!=d) this.getDept().setManager(null); dept =d; }
6.13 通信图
• 通信图(communication diagram)也是用来 对交互进行建模,它强调对象的组织结构。
sd FaxExample
:User send
sender[1]:Fax
receiver[2]:Fax
transmit
acknowledge done
6.4 消息-同步与异步
同步调用synchCall:对一个操作的一个同步调用所发 出的消息。 应答reply:对一个操作调用的应答消息。 异步调用asynchCall:对一个操作的一个异步调用所发出的 消息。 异步信号asynchSignal:异步发送信号动作所发出的消息。
comm takeOrder request(order,customer) :OrderTaker 2:cost=reserve(order) tickets :TicketDB
1:checkCredit(customer) credit
3:debit(customer,cost)
:CreditBureau
:Customer
:Account {balance > 0}
withdraw(int amount)
verifying
balance=balance-amount ok
生命线上的状态不变式
生命线上执行的动作
6.10 主动对象
• 主动(active)对象是主动类的实例,一个类 是主动类,当且仅当其实例持有自己的控制 线程,能启动控制活动。
sd a_op_b(int x, inout int w):Verdict
sd UserAccess
:XX :YY s1(x) w a_op_b
:User
:ACSystem
ref
ref
EstablishAccess(“Illegal PIN”) CardOut
alt
:XX.xc = a_util_b(31, w:12):9 put(xc)
2. 执行规范execution specification
«create» compressor: Filter compress()
6.6 组合片断
• 一个组合片断(combined fragment)定义了多个交互片断的 一个“表达式”,由一个操作符(operator)和若干操作域 (operand)组成,其中每个操作域是整个交互的一个结构化 的子片断。 缩写 alt opt Option 操作符 Alternatives 操作域个数 多个 1个
:A synchCall :B :A selfCall :A asynchCall :B
• • • •
reply (a)同步调用与应答 (b)自调用 (c)异步调用
6.4 消息 • 同步还是异步?
张三 :Buyer 李四 :Seller 张三 :Buyer 李四 :Seller
1块钱 其它事 1份报纸 (a)同步请求与返回
[xc > 8]
put(xc) put(fail)
opt
Msg(“Please Enter”)
[xc<=8]
put(pass)
ref
Opendoor
6.8 门
• 门gate表示一个交互或交互片断的内部与外 部之间的消息连接点。
sd Validate
controller card inserted input gate find card