Richard Mitchell 著,zhen_lei 译
本文包括录像店案例研究的一些片段,用来说明根据契约进行分析的原理。本文假定读者已经从其它渠道学习了一些关于根据契约进行分析的方法。
完整的一套模型可以写成一本书。这些选择的片段用来说明开发的某些方面,其中精确的模型(采用OCL)可以提供真正的支持,包括:
限制类型模型的冗余部分,以便容易描述其它定义
定义状态模型和类型模型间的关系
表述操作的预状态
这些模型从整个系统的角度建立,将系统视作黑箱。假定域模型中定义的所有事件都映射到系统操作中。
这个模型没有经过正式的外部评审,因此应看作可能存在缺陷。我们欢迎读者的反馈。
问题描述
录像店出租销售录像带。只有会员可以租借录像,任何人都可以购买。当录像没有出租价值时,录像店将它标记为可以出售。
如果希望成为会员,你要交纳一定的会费,然后得到一张带有条码的会员卡,条码表示你的会员编号。
录像出租期限是1 至3 天。租借天数越多,日租金就越低。如果超过出租期限,需要支付罚金,罚金高于一天的租借费用。在支付罚金之前,会员将被禁止租借。
如果想要的录像带暂时没有,会员可以预订。当录像带可以出租时,预订该录像带的会员就会收到通知,告诉他们可以在三天内租借该录像带。如果超过三天,录像带可以由其它会员租用。
问题域研究
我们可以从问题域中的事物入手对它进行研究,可以分为两部分,“存在的事情(事物)”和“发生的事情(事件)”。
存在的事情(事物)
以下是一些我们从问题域中发现的事物,可以模化为对象类型:
录像带,人,商店,租借合同,收据,日期、预订、通知 … …
发生的事情(事件)
我们可以通过考察场景来研究发生的事情。理想地,每个场景应该是承担一部分或周期性任务的行为,因此我们知道什么时候开始,什么时候结束。例如,我们可以对录像带出租的周期进行建模:
录像带被一个会员租借(或者不允许任何人预订)
另一个会员预订该录像带
第一个会员还录像带(结果包括:录像带归还,给第二个会员发通知)
第二个会员租借录像带
以上场景提出了一个问题,我们出租和预订的是否是同一个事物。实际上,现实世界中一个影片有多个拷贝,影片和拷贝不是同一事物。