根据契约进行分析--录像店案例研究01

ops/2024/12/15 0:36:06/

Richard Mitchell 著,zhen_lei 译


本文包括录像店案例研究的一些片段,用来说明根据契约进行分析的原理。本文假定读者已经从其它渠道学习了一些关于根据契约进行分析的方法。

完整的一套模型可以写成一本书。这些选择的片段用来说明开发的某些方面,其中精确的模型(采用OCL)可以提供真正的支持,包括:
􀁺 限制类型模型的冗余部分,以便容易描述其它定义
􀁺 定义状态模型和类型模型间的关系
􀁺 表述操作的预状态

这些模型从整个系统的角度建立,将系统视作黑箱。假定域模型中定义的所有事件都映射到系统操作中。

这个模型没有经过正式的外部评审,因此应看作可能存在缺陷。我们欢迎读者的反馈。

问题描述

录像店出租销售录像带。只有会员可以租借录像,任何人都可以购买。当录像没有出租价值时,录像店将它标记为可以出售。

如果希望成为会员,你要交纳一定的会费,然后得到一张带有条码的会员卡,条码表示你的会员编号。

录像出租期限是1 至3 天。租借天数越多,日租金就越低。如果超过出租期限,需要支付罚金,罚金高于一天的租借费用。在支付罚金之前,会员将被禁止租借。

如果想要的录像带暂时没有,会员可以预订。当录像带可以出租时,预订该录像带的会员就会收到通知,告诉他们可以在三天内租借该录像带。如果超过三天,录像带可以由其它会员租用。

问题域研究

我们可以从问题域中的事物入手对它进行研究,可以分为两部分,“存在的事情(事物)”和“发生的事情(事件)”。

存在的事情(事物)

以下是一些我们从问题域中发现的事物,可以模化为对象类型:
录像带,人,商店,租借合同,收据,日期、预订、通知 … …

发生的事情(事件)
我们可以通过考察场景来研究发生的事情。理想地,每个场景应该是承担一部分或周期性任务的行为,因此我们知道什么时候开始,什么时候结束。例如,我们可以对录像带出租的周期进行建模:
录像带被一个会员租借(或者不允许任何人预订)

另一个会员预订该录像带
第一个会员还录像带(结果包括:录像带归还,给第二个会员发通知)
第二个会员租借录像带

以上场景提出了一个问题,我们出租和预订的是否是同一个事物。实际上,现实世界中一个影片有多个拷贝,影片和拷贝不是同一事物。


http://www.ppmy.cn/ops/141957.html

相关文章

【计算机视觉】医疗图像关键点识别

1. CNN 1.1. 设备参数 1.2. 代码 import torch import torch.nn as nn import torch.optim as optim from torch.utils.data import Dataset, DataLoader from torchvision import transforms from tqdm import tqdm import os import cv2 import numpy as np import time im…

java和go语言的优劣

Java 和 Go 是两种非常流行的编程语言,各自拥有独特的特性和优势。它们在不同的应用场景中表现出色,选择哪种语言取决于具体的项目需求、团队技能以及个人偏好。下面我们将从多个维度对比 Java 和 Go 的优劣,帮助您更好地理解这两种语言的特点…

前端成长之路:HTML(1)

每个网页都会有一个基本的结构标签&#xff08;也称为骨架标签&#xff09;&#xff0c;页面内容也是在这些基本标签上书写。 基本结构标签&#xff08;骨架标签&#xff09; <html></html>标签是HTML标签&#xff0c;是页面中最大的标签&#xff0c;被称为根标签…

渗透测试工具 -- SQLmap安装教程及使用

随着网络安全问题日益严峻&#xff0c;渗透测试成为了保护信息安全的重要手段。而在渗透测试的众多工具中&#xff0c;SQLmap凭借其强大的自动化SQL注入检测和利用能力&#xff0c;成为了网络安全专家必备的利器。那么&#xff0c;你知道如何高效地使用SQLmap进行漏洞扫描吗&am…

又细又长的马尾:tail

英语里边有一个单词 tail&#xff0c;意为“尾巴”&#xff0c;这应当是众所周知的事情了。 不过&#xff0c;tail 这条尾巴&#xff0c;并不简单&#xff0c;因为它还是一个词根&#xff0c;也就是说 tail 其实是自由词素。 事实上&#xff0c;tail 最初来自 马尾 这样一个概…

使用WPF和C#绘制覆盖网格的3D表面

这个例程展示了如何使用 C# 代码和 XAML 绘制覆盖有网格的 3D 表面。 示例使用 WPF 和 C# 将纹理应用于三角形展示了如何将纹理应用于三角形。 此示例只是使用该技术将包含大网格的位图应用于表面。 在类级别&#xff0c;程序使用以下代码来定义将点的 X 和 Z 坐标映射到 0.0…

【第一节】Git的简介和安装

目录 一、git的介绍 二、git 的安装 2.1 Linux 平台安装 2.2 源码安装 2.3 Windows 平台安装 2.4 Mac 平台安装 2.5 Git 配置 2.5.1 配置文件 2.5.2 用户信息配置 2.5.3 文本编辑器配置 2.5.4 差异分析工具配置 2.5.5 查看配置信息 一、git的介绍 Git 是一种开源的…

日常健康:点滴积累,守护生命活力

在现代社会的快节奏生活中&#xff0c;日常健康往往容易被忽视&#xff0c;然而&#xff0c;它却是我们享受美好生活、实现人生价值的基石。 饮食方面&#xff0c;注重营养均衡是关键。每日三餐应合理搭配&#xff0c;保证碳水化合物、蛋白质、脂肪、维生素和矿物质的充足摄入。…