[Java]软件构造LAB3实验总结

LAB3作为四个软构实验中最难的一个,涉及到了程序的复用性与可维护性,通过ADT及泛型等抽象技术,开发一套可复用ADT并实现五个具体应用中的其中三种(除必选的航班外选择了高铁与课程表),主要使用了如下软件构造技术

在设计ADT 时,需要对其进行泛型化,考虑所用资源的不同类型,从而使其抽象能力更强、适应现实中不同情况需求的能力更强。
需要注意的是:实验要求为每个设计和实现的 ADT 撰写 mutability/immutability 说明、AF、RI、safety from rep exposure。给出各 ADT 中每个方法的 spec。为每个 ADT 编写测试用例,并写明 testing strategy。
 

1. 面向可复用性和可维护性的设计:PlanningEntry<R>

1.1找到共性操作

所有的子类型应用都具有启动、取消、完成、获取当前状态功能

1.2个性化子类型设计

采用decorator设计模式,这种模式创建了一个装饰类,用来包装原有的类,并在保持类方法签名完整性的前提下,提供了额外的功能。就增加功能来说,装饰器模式相比生成子类更为灵活,但是缺点是文件量与类的数量将会大幅增加。

在该LAB中,通过在planningentry中只实现最基本的功能,其他功能通过装饰的形式动态拓展具体类的功能,如高铁计划项使用

这四种进行拓展


2.面向复用的设计

2.1

R(资源)、timeslot(时间)、location(地点)较为简单,只需要有getter方法

2.2 对于EntryState(状态)来说较为复杂 使用state设计模式,使用getinstance获取当前状态,changestate改变状态

3.设计模式应用

1.Facade设计模式:通过一个统一的高层接口封装api,用来访问子系统中的接口

2.静态Factory模式:通过使用静态工厂,在调用类的对象时不需要再使用new来创建新对象,而是直接以该方式获取实例

3.策略模式:创建表示各种策略的对象和一个行为随着策略对象改变而改变的 context 对象。策略对象改变 context 对象的执行算法。这样在使用时可以根据实际情况进行替换

4.开发应用

调用写好的ADT来进行APP开发,主体方法与成员变量都可以从ADT中获取,在编写每级选择菜单时要注意是否能够处理错误输入,是否能够返回上一级菜单等细节内容

三个应用本质类似,修改少数细节即可完成复用

对于航班则要新增功能“根据正则表达式读入数据”

在读取了文件并转为字符串后,通过对应的正则表达式进行判断,看是否满足各项要求

在对三个应用进行新改动时,如果程序复用性足够好,理论上代价应该都比较小,仅需修改少量代码就可以完成改动

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值