HIT2020春季学期软件构造Lab3

1 实验目标概述

本次实验覆盖课程第 3、4、5 章的内容,目标是编写具有可复用性和可维护性的软件,主要使用以下软件构造技术:
子类型、泛型、多态、重写、重载
继承、代理、组合
常见的 OO 设计模式
语法驱动的编程、正则表达式
基于状态的编程
API 设计、API 复用
本次实验给定了五个具体应用(高铁车次管理、航班管理、操作系统进程管理、大学课表管理、学习活动日程管理),学生不是直接针对五个应用分别编程实现,而是通过 ADT 和泛型等抽象技术,开发一套可复用的 ADT 及其实现,充分考虑这些应用之间的相似性和差异性,使 ADT 有更大程度的复用(可复用性)和更容易面向各种变化(可维护性)。

2 实验环境配置

实验环境设置请参见 Lab-0 实验指南。
除此之外,本次实验需要你在 Eclipse IDE 中安装配置 EclEmma(一个用于
统计 JUnit 测试用例的代码覆盖度的 plugin)。请访问 http://www.eclemma.org,了解 EclEmma 并学习其安装、配置和使用。
本次实验在 GitHub Classroom 中的 URL 地址为:
https://classroom.github.com/a/z9utaaos

3 实验过程

3.1 待开发的三个应用场景

列出你所选定的三个应用:
1、航班管理
2、高铁车次管理
3、学习日程管理

分析三个应用场景的异同,理解需求:
共同点:
三个应用场景的地点与时间都需要提前确定;
三个应用场景在未开始前均可以取消;
三个应用场景在进行中均不可取消;
不同点:
高铁在中间站停车的时候可以取消;
航班与高铁一旦确定就无法更改起始地与目的地,并且确定后高铁还无法更改中间站,但是学习日程确定之后还能够更改地址;
三个应用场景需要不同类型的资源;

3.2 面向可复用性和可维护性的设计:PlanningEntry

3.2.1 PlanningEntry的共性操作

由下图表得:

方法:
1.public boolean planningRunning():只有在ALLOCATED和BLOCKED状态下,计划项才能启动计划项,并且将计划项的状态state指向Running这个对象;
2. public boolean planningCancelled():只有在WAITING、ALLOCATED和BLOCKED状态下才能取消计划项,并且将计划项的状态state指向Cancelled这个对象;
3. public boolean planningEnded():只有在RUNNING状态下才能取消计划项,并且将计划项的状态state指向Cancelled这个对象;
4. 两个getter:

2.高铁车次:

3.学习活动:

3.3 面向复用的设计:R

2.列车Trains和车厢Train:

车厢Train:

3.4 面向复用的设计:Location

2. MutipleLoaction:有多个地点的计划项使用该类存储地点;

3.5 面向复用的设计:Timeslot

2.TimeSlot:由两个Time实例组成,构成一个时间段;

3.SingleTime:用于只有一个时间段的计划项的时间存储;

1.StateEntry:作为所有状态的父类;

通过5个boolean变量来表示不同的状态,isBlocked只有在BLOCKED下才为true,其他状态均为false,可以视为isBlocked仅用于BLOCKED状态中,在其他状态中忽略isBlocked;

3.Allocated:

isRunning = false;
isAllocated = true;
isEnded = false;
isCancelled = false;

5.Ended:

isRunning = true;
isAllocated = true;
isEnded = false;
isCancelled = false;

7.Blocked:

isBlocked = true;
isRunning = false;
isAllocated = true;
isEnded = false;
isCancelled = false;

声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2020年4月15日
下一篇 2020年4月15日

相关推荐