软件构造实验三总结

软件构造实验三总结

这次就一个目标实现一个ADT。
本次实验给定了五个具体应用(高铁车次管理、航班管理、操作系统进程管
理、大学课表管理、学习活动日程管理),学生不是直接针对五个应用分别编程
实现,而是通过 ADT 和泛型等抽象技术,开发一套可复用的 ADT 及其实现,充
分考虑这些应用之间的相似性和差异性,使 ADT 有更大程度的复用(可复用性)
和更容易面向各种变化(可维护性)。
也就是说,锻炼我们编写可复用性高,可维护性强的软件的能力。

这五种应用,都有着以下属性:
计划项:表示一个待执行的活动/任务,它需要配置特定类型/数量的 资源,并在特定的物理位置加以执行。
资源:计划项的执行过程中所需要占用的物理设施、数字设施或者人,例如一架飞机、一个动车组、一个投影机、计算机 I/O设备或内存、飞行员、乘务员、教师等。在本实验中,每个计划项所占用的资源都是单一类型的。
物理位置:计划项执行的物理地点,例如高铁站、机场、教室、CPU 核等。计划项可以是在一个位置上启动并执行完(例如在正心11 教室上“软件构造”课),也可以从一个位置启动,抵达另一个位置才执行完(例如 CA1611 航班从北京起飞抵达哈尔滨结束),也可以经过一系列位置(例如高铁 G381 次从北京出发要经过 10 余个高铁站才抵达终点哈尔滨西),甚至可以在执行过程中切换位置(例如某进程最初在某个核上执行,挂起恢复后切换到另一个核上)。
时间属性:分为三种情况:
⚫ 具有确定的开始时间和结束时间(例如某次“软件构造课”是 2020 年 3 月 1 日 8:00-10:00)。
⚫ 需要分段执行,因此其时间属性也需要分段标注(例如G381 中间经停 10 余个车站,除了有出发和抵达时间,也需要有经停某车站的停车时间与发车时间)。
⚫ 事先无法确定具体的执行时间(例如 CPU 执行某个进程,其执行起始和结束时间不能提前计划,而是由 OS动态调度,只有在执行结束后才能得知其时间属性)。
信息板:每个具体地点都提供一个信息板,展示在该地点的过去发生和未来即将执行的计划项清单及各自的状态。例如:“哈尔滨西站”的大屏幕显示牌、“正心 11”教室外张贴的本教室课表等。
计划清单:由一组计划项构成的整体。例如,1803101 班 2020 年春季的课表、哈尔滨机场 2020 年春夏季航班时刻表等。

而这些就是复用的主体,这五种应用的这几种属性都或多或少有相同点,只要根据这些相同点来编写功能,并结合咱们学到的各种设计模式,就可以尽可能地提高可复用性,还能降低代码的重复书写。

我选择的是航班、高铁和大学课表。
这里我就用的装饰器模式来将这些属性一一加入到各应用中。
对于每一个属性都按照数量来进行不同的书写,例如资源分为单一资源和多资源,就建立两个类,一个代表单一资源,就是老师,飞机这种;一个是多资源,各车厢等。
而这些属性都继承一个总的装饰器类,装饰器类还继承一个commonplanningentry类,他还继承一个planningentry接口。
所有具体应用类都是commonplanningentry类的子类。
他们的具体实现都是委托各装饰类来给他们装饰各种属性,但也并不在自己类中实现,都有各自的实现类来实现各自的实际应用。
这里又用到了工厂方法来调用具体方法。

3.7中还用到了状态模式,用一个自动机来表示状态转移,从而记录计划项状态。

3.10中façade模式来封装每一个应用。
3.11中还用到了迭代器模式来给各Planningertry按时间排序。
3.13中练习了正则语言
3.14中git创建新分支然后还对各应用进行了小的改动

总的来说,这次试验就是锻炼我们编写可复用API,读于各不同应用,分析他们各自属性,然后都他们进行分类,把相同的不同的区分好,然后选择合适的设计模式,讲各属性都编写好,然后封装到一起。对于各种设计模式,理解好了原理并且要理解其目的,就能很好地运用。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值