软构第十一天:第二次习题课


前言

今天软构课主要讲了一下一个停车场的习题,下面我凭借记忆对这次习题课进行一下回忆与分析。

一、题干

示例:pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。
在这里插入图片描述

二、ADT设计思路

首先我们明确这里的名词,以寻找可以抽象并设计类的对象。首先明确了停车场、停车位、车、一次停车等名词,同时这些名词也有自己的内在属性。
然后我们明确动词,因为我们知道ADT不仅有对象,而且需要一系列的方法。所以我们知道了,需要构造停车场、构造车、停车、驶离、计费、查看状态等方法。
总体来说我们可以得到以下分析结果:
在这里插入图片描述
另外我们需要尽量减小mutable的范围,即一些对象从创建之后就尽量不要再修改了。
最后我们思考谁来管理停车记录。我本人的第一个反应是需要创造一个新类,即一个专门的数据库类来管理停车记录,但是老师说这样实现较为复杂。之后老师给出一些实现实例,摘录如下:
在这里插入图片描述
接下来我们就来大体设计一下ADT,我们需要接口吗?就这个问题来说,大概是不需要的,因为各类之间不存在继承与复用的关系,我们可以直接写具体类。但是考虑到复用性,我们最好还是先设计一个接口,紧接着设计其他的类。总体设计方案如下:

在这里插入图片描述

在这里插入图片描述

三、SPEC设计思路

大概设计了ADT之后,我们需要撰写spec和测试代码。
明确需求:
在这里插入图片描述
注意,上面我们的修改权衡,为了不把car类暴露出去,我们重载了parking方法,使得用户可以直接使用String与int方法就能进行汽车的停放。
之后我们可以了解到大体的几种接口方法:在这里插入图片描述在这里插入图片描述
spec大体设计如下:
在这里插入图片描述
接下来就是对静态方法和instance方法的分别测试。不赘述,详情可以见代码。
另外老师最后又讲述了绘制snapshot diagram的任务与SpotBugs查看代码潜在风险的一些细节。

总结

我们在这个习题中又大致重复了一遍实验二中的过程。我们注意到mutable不需要进行hashcode()与equals()方法的重写,对象之间的比较需要使用equals方法等细节。老师说这个题目是18年的期末考试题,注意及时复习。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值