Presentation is loading. Please wait.

Presentation is loading. Please wait.

Chapter 11 操作契约.

Similar presentations


Presentation on theme: "Chapter 11 操作契约."— Presentation transcript:

1 Chapter 11 操作契约

2 我们在哪儿

3

4 目标 确定系统操作 为系统操作创建契约

5 为什么需要操作契约 用例和SSD是用来描述系统行为的主要方式,在大多数情况下足以满足需求。 有时需要对系统行为进行更为详细和精确的描述
操作契约用于描述领域模型里对象的详细变化,作为系统操作的结果。

6 什么是系统操作 在SSD中定义了系统事件,而一个系统事件可以通过一个系统操作来实现。
将所有用例的系统操作的完整集合封装到一个类中,这个类定义了系统对外界的公共接口。

7 系统操作处理输入的系统事件

8 系统操作契约示例 操作: enterItem(itemID: ItemID, quantity: integer) 交叉引用:处理销售用例
前置条件:有一个正在进行的销售 后置条件: 创建了SaleLineItem的实例sli(创建实例) sli与当前的Sale关联(形成关联) sli.quantity赋值为quantity(修改属性) 基于itemID的匹配,将sli关联到ProductionDescription(形成关联)

9 操作契约 系统操作可以进一步通过操作契约来说明。 操作契约包括前置条件和后置条件。 前置条件表述了操作前系统应该处于的状态 后置条件
表述了操作后,领域模型内对象状态的变化。领域模型状态的变化包括创建实例,形成或消除关联以及改变属性。 后置条件不是在操作过程中执行的活动,它们是对领域模型对象的观察结果。

10

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很少被使用


Download ppt "Chapter 11 操作契约."

Similar presentations


Ads by Google