本次实验给定了三个具体应用(值班表管理、操作系统进程调度管理、大学课表管理),学生不是直接针对每个应用分别编程实现,而是通过ADT和泛型等抽象技术,开发一套可复用的ADT及其实现,充分考虑这些应用之间的相似性和差异性,使ADT有更大程度的复用(可复用性)和更容易面向各种变化(可维护性)。
本次实验我遇到的第一个问题是:实验中第一个app设计即值班表app设计时要求可以读入文件,之前没有相似经历所以不知道怎么做,还不能理解怎么使用正规表达式进行划分,解决办法是:通过在网上查找利用正则表达式模式匹配的相关文档,经过深刻阅读后完成此部分攥写。
第二个问题是:在做整个实验前无从下手,对实验整体架构理解不够清晰而导致对于各个接口和ADT的作用,也没办法写出对应的结构,解决办法是:仔细阅读实验指导书,根据自己的理解及思路画出整个程序的接口即抽象类,具体的类的关系图,如实现或者继承,完成实验整体架构。
第三个问题是:在写第二个app ProcessScheduleApp时,对于其中的根据最长执行时间与已执行时间来选择运行的功能有疑问,解决办法是通过与同学探讨,了解了别人的思路是在Process类中增加一个比较函数,在 ProcessScheduleApp中调用这个函数来完成此功能。
通过此次实验我明白了设计ADT的主要难度在于要确定该ADT实现什么接口,它要有哪些子类,以及它的具体作用或者说功能是什么,知道要从0开始设计整个利用接口及ADT的程序要首先在心中有一个清晰的结构,对于接口的抽象,以及抽象类型的子类等等;还有一点是整个实验项目虽然过程函数等很多,但是依旧为每个ADT撰写复杂的specification, invariants, RI, AF,时刻注意ADT是否有rep exposure首先可以让我这个程序编写者检查代码时更加方便,其次可以让其他人读我的程序时对各个函数及各个类的功能以及变量与一目了然。以后也会坚持这么做。
同时通过这三个具体的app实现也明白了复用的好处,复用可以让三个应用的相似功能变得更加简洁,很方便;
最后也锻炼了自己的编程能力,为以后的开发打下了一些基础。