Download presentation
Presentation is loading. Please wait.
1
Chapter 11 操作契约
2
我们在哪儿
4
目标 确定系统操作 为系统操作创建契约
5
为什么需要操作契约 用例和SSD是用来描述系统行为的主要方式,在大多数情况下足以满足需求。 有时需要对系统行为进行更为详细和精确的描述
操作契约用于描述领域模型里对象的详细变化,作为系统操作的结果。
6
什么是系统操作 在SSD中定义了系统事件,而一个系统事件可以通过一个系统操作来实现。
将所有用例的系统操作的完整集合封装到一个类中,这个类定义了系统对外界的公共接口。
7
系统操作处理输入的系统事件
8
系统操作契约示例 操作: enterItem(itemID: ItemID, quantity: integer) 交叉引用:处理销售用例
前置条件:有一个正在进行的销售 后置条件: 创建了SaleLineItem的实例sli(创建实例) sli与当前的Sale关联(形成关联) sli.quantity赋值为quantity(修改属性) 基于itemID的匹配,将sli关联到ProductionDescription(形成关联)
9
操作契约 系统操作可以进一步通过操作契约来说明。 操作契约包括前置条件和后置条件。 前置条件表述了操作前系统应该处于的状态 后置条件
表述了操作后,领域模型内对象状态的变化。领域模型状态的变化包括创建实例,形成或消除关联以及改变属性。 后置条件不是在操作过程中执行的活动,它们是对领域模型对象的观察结果。
11
示例:enterItem 操作: enterItem (itemID: ItemID, quantity: integer)
交叉引用:处理销售(用例) 前置条件:存在一个正在进行销售 后置条件: 创建了SalesLineItem的实例sli(创建实例) Sli与当前Sale关联(形成关联) Sli.quantity的值应该为quantity(修改属性) 基于itemID的匹配,将sli关联到ProductDescription(形成关联)
12
契约的组成 操作:操作的名称和参数 交叉引用:会发生此操作的用例 前置条件: 执行操作前,对系统或领域模型对象状态的重要假设。
后置条件: 最重要的部分,表示完成操作后,领域模型对象的状态。
13
编写操作契约的步骤 从SSD中确定系统操作 如果系统操作比较复杂,其结果可能不明显,或者在用例中不清楚,则可为其构造契约
使用以下几种类别来描述后置条件 创建和删除实例 修改属性 形成和清除关联
14
一些准则 以过去时态表达后置条件,以强调它们是操作引起的可观察的结果。
(较好)创建了SalesLineItem (较差)创建SalesLineItem 轻量级地书写后置条件。如果开发者在没有契约操作的情况下,能够准确地理解所要完成地工作,则没有必要编写契约。 书写后置条件时,在必要的情况下更新领域模型。
15
操作契约示例
16
示例:makeNewSale 操作:makeNewSale() 交叉引用:处理销售用例 前置条件:无 后置条件:
创建了Sale的实例s(创建实例) s被关联到Register(形成关联) s的属性被初始化(修改属性)
17
示例:makePayment 操作:makePayment(amount:Money) 交叉引用:处理销售用例
前置条件:当前有一个正在进行的销售 后置条件: 创建了Payment的实例p(创建实例) p.ammountTendered被赋值为amout(修改属性) p被关联到当前的Sale 当前的Sale被关联到Store(形成关联),将其加入到完成的销售日志中。
18
示例:endSale 操作:endSale() 交叉引用:处理销售用例 前置条件:当前有一个正在进行的销售
后置条件:sale.isComplete被置为true 注意:涉及到领域模型的修改。
19
UML:操作契约和OCL OCL是UML中定义的形式化的表示操作契约的语言。 OCL很少被使用
Similar presentations