一、实验目标
本次实验覆盖课程第 2、3 章的内容,目标是编写具有可复用性和可维护性
的软件,主要使用以下软件构造技术:
- 子类型、泛型、多态、重写、重载
- 继承、代理、组合
- 语法驱动的编程、正则表达式
- API 设计、API 复用
本次实验给定了三个具体应用(值班表管理、操作系统进程调度管理、大学
课表管理),学生不是直接针对每个应用分别编程实现,而是通过 ADT 和泛型等
抽象技术,开发一套可复用的 ADT 及其实现,充分考虑这些应用之间的相似性
和差异性,使 ADT 有更大程度的复用(可复用性)和更容易面向各种变化(可
维护性)。
二、实验的理解
对于本次实验,三个具体应用难度是依次递增的,但是完成前面的对于后面的应用是可以借鉴的,所以总体来说还是十分值得去完成的。这次试验也是希望我们可以调用前面已经实现的类,借助他们帮我们简化代码,减轻工作量,本次实验我感觉最麻烦的地方就是要建立一个好的基本框架啊,接口,实现类,只要想清楚怎么去把实现类通用到三个具体应用就可以简化一大部分代码,但是具体到每个应用依然还是工作量不小。
我对整个实验的基本框架如图:
三、实现的策略
单独定义一个类,用来存储课程,进程,员工信息
之后把这个类(可以看成很多个节点)存储在集合里面,这样我们就可以很容易使用这些节点。
但是,IntervalSet中,同一个标签对象 L 只被绑定到唯一一个时间段
上,这可以满足诸如排班表管理这样的简单应用,却无法满足诸如操作系统进程
调度和课程表管理这种复杂应用:同一个标签对象 L 可被绑定到多个时间段上,所以我们还得在该类的基础上新增一个类使得可以绑定多个时间段
这样我们可以在多段类里面调用单段时间类。就可以很容易实现操作系统和课程安排模拟。
最终设计方式结构为:
我个人写lab3 步骤
添加:
刚开始先按照实验要求建立一个Interval接口,大致如下:
我个人觉得MultiIntervalSet 没什么必要写,一个IntervalSet接口完全可以。
之后对这个接口进行具体化,比如 员工任务类,以此类推每个app都有对应的类:
然后写每个APP所需要用到的标签,比如 课程app,那么我们就需要创建一个关于 课程的 label 大致如下:
以此类推,写员工和进程类
一个course 类对象(差不多这种意思)代表一种课程,多少个course代表多少个课程,类似于实验二的点实现图,图是有很多个点构成,那么我们的这些app也是类似。接下来每申请一门新课程,我们就新增加一个course类对象,并把它插入到一个label集合或者列表都行,一个label需要多个时间段时候,我们也只要让这多个时间段共享一个label。