软件构造lab3实验报告

目录

1 实验目标概述 1
2 实验环境配置 1
3 实验过程 1
3.1 待开发的三个应用场景 1
3.2 面向可复用性和可维护性的设计:PlanningEntry 1
3.2.1 PlanningEntry的共性操作 1
3.2.2 局部共性特征的设计方案 2
3.2.3 面向各应用的PlanningEntry子类型设计(个性化特征的设计方案) 2
3.3 面向复用的设计:R 2
3.4 面向复用的设计:Location 2
3.5 面向复用的设计:Timeslot 2
3.6 面向复用的设计:EntryState及State设计模式 2
3.7 面向应用的设计:Board 2
3.8 Board的可视化:外部API的复用 2
3.9 PlanningEntryCollection的设计 2
3.10 可复用API设计及Façade设计模式 2
3.10.1 检测一组计划项之间是否存在位置独占冲突 2
3.10.2 检测一组计划项之间是否存在资源独占冲突 2
3.10.3 提取面向特定资源的前序计划项 2
3.11 设计模式应用 2
3.11.1 Factory Method 3
3.11.2 Iterator 3
3.11.3 Strategy 3
3.12 应用设计与开发 3
3.12.1 航班应用 3
3.12.2 高铁应用 3
3.12.3 进程应用 3
3.12.4 课表应用 3
3.12.5 学习活动应用 3
3.13 基于语法的数据读入 3
3.14 应对面临的新变化 3
3.14.1 变化1 3
3.14.2 变化2 4
3.14.3 变化3 4
3.15 Git仓库结构 4
4 实验进度记录 4
5 实验过程中遇到的困难与解决途径 4
6 实验过程中收获的经验、教训、感想 5
6.1 实验过程中收获的经验和教训 5
6.2 针对以下方面的感受 5

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

2实验环境配置

3实验过程
请仔细对照实验手册,针对每一项任务,在下面各节中记录你的实验过程、阐述你的设计思路和问题求解思路,可辅之以示意图或关键源代码加以说明(但千万不要把你的源代码全部粘贴过来!)。
3.1待开发的三个应用场景
我选择的三个应用场景:
航班管理
高铁车次管理
学习日程管理

这三个场景的异同点:
位置的数量:分别为1个、2个和多个
仅有学习日程的位置可更改
航班为单个资源,高铁为有序多个资源,学习日程为无序多个资源
仅有高铁车次可阻塞
时间均在创建时设定
3.2面向可复用性和可维护性的设计:PlanningEntry
该节是本实验的核心部分。
3.2.1PlanningEntry的共性操作
1.状态的转换,以目标状态进行分类,能够将状态转换为RUNNING、BLOCKED、CANCELLED、ENDED四种之一(其中转换为ALLOCATED是个性化设计),分别用4个方法来实现。

2.各变量的get函数
3.2.2局部共性特征的设计方案
CommonPlanningEntry类实现了PlanningEntry接口中共性方法,包括了状态转换和Getter方法。
例如重写start方法
软件构造lab3实验报告

另外设计了其他方法
软件构造lab3实验报告
3.2.3面向各应用的PlanningEntry子类型设计(个性化特征的设计方案)
我采用的是实验指导手册的方案三:为不同特征取值分别定义接口并在子类中实现其特殊操作。

根据所需Location数量的不同设置了三个不同的接口,分别代表单位置,双位置和多位置。

根据所需Timeslot数量的不同设置了两个不同的接口,分别代表单时间对和多时间对
软件构造lab3实验报告
软件构造lab3实验报告
软件构造lab3实验报告
在三个子类中分别对父类方法进行了个性化的重写,以及一些局部功能的实现
3.3面向复用的设计:R
资源有多种,因为Resource被设计为一个接口,有3个实现类:Plane、Carriage和LearningMaterial。
软件构造lab3实验报告
3.4面向复用的设计:Location
一个“位置”对象的属性包括:经度、纬度、名称、是否可共享使用。
Flight设置了startlocation和endlocation
软件构造lab3实验报告
Train设置了Location的list
软件构造lab3实验报告
Activity设置了一个公开的Location,方便进行修改
软件构造lab3实验报告
3.5面向复用的设计:Timeslot
Timeslot 类是一个带有起始时间和结束时间的ADT,应包含日期和时间
Flight和Activity设置了一个单独的Timeslot
软件构造lab3实验报告
Train设置了Timeslot的list
软件构造lab3实验报告
3.6面向复用的设计:EntryState及State设计模式
在父类中定义字符串state表示状态,并设计start,finish,cancel,allocate函数来更改state。
Train类中添加一个block函数来把状态转化为阻塞。
软件构造lab3实验报告
3.7面向应用的设计:Board
以FlightBoard为例,建立from和to两个list分别用来存储抵达航班和起飞航班
软件构造lab3实验报告
构造函数FlightBoard
软件构造lab3实验报告
3.8Board的可视化:外部API的复用
采用在命令行上显示的操作,使用Collection.sort方法对航班按时间先后排序
软件构造lab3实验报告
3.9PlanningEntryCollection的设计
该ADT是PlanningEntry的集合类。
以FlightSchedule为例
1.fields
软件构造lab3实验报告
currentflight表示当前操作的航班,findcurrentflight方便找到currentflight
2.添加(删除)资源或位置
软件构造lab3实验报告
软件构造lab3实验报告
软件构造lab3实验报告
软件构造lab3实验报告
3.添加计划项
软件构造lab3实验报告
4.选择当前计划项
软件构造lab3实验报告
5.给当前计划项分配资源
软件构造lab3实验报告
6.计划项的启动,取消,结束
7.打印board
软件构造lab3实验报告

测试结果:

3.10可复用API设计及Façade设计模式

3.10.1检测一组计划项之间是否存在位置独占冲突
软件构造lab3实验报告

3.10.2检测一组计划项之间是否存在资源独占冲突
软件构造lab3实验报告
3.10.3提取面向特定资源的前序计划项
软件构造lab3实验报告
3.11设计模式应用
请分小节介绍每种设计模式在你的ADT和应用设计中的具体应用。
3.11.1Factory Method
软件构造lab3实验报告
3.11.2Iterator
软件构造lab3实验报告
3.11.3Strategy
3.12应用设计与开发
利用上述设计和实现的ADT,实现手册里要求的各项功能。
只需保留你选定的三个应用即可。
3.12.1航班应用
1.添加飞机
软件构造lab3实验报告

2.添加机场
软件构造lab3实验报告

3.添加新航班
软件构造lab3实验报告

4.给航班分配飞机

软件构造lab3实验报告
5.启动,取消,结束航班

软件构造lab3实验报告软件构造lab3实验报告
6.查看航班当前状态
软件构造lab3实验报告

7.显示机场航班信息
软件构造lab3实验报告
3.12.2高铁应用
1.添加车厢
软件构造lab3实验报告
2.添加车站
软件构造lab3实验报告

3.添加新高铁车次
软件构造lab3实验报告

4.给高铁分配车厢
软件构造lab3实验报告

5.启动,取消,阻塞,结束高铁车次
软件构造lab3实验报告软件构造lab3实验报告软件构造lab3实验报告

6.显示车站高铁车次信息
软件构造lab3实验报告
3.12.3进程应用
3.12.4课表应用
3.12.5学习活动应用
1.添加学习资料
软件构造lab3实验报告

2.添加新教室
软件构造lab3实验报告

3.添加新学习活动
软件构造lab3实验报告
4.给学习活动分配学习资料
软件构造lab3实验报告

5.更改学习活动地点
软件构造lab3实验报告

6.启动,取消,结束学习活动
软件构造lab3实验报告软件构造lab3实验报告

7.显示教室的学习活动信息
3.13基于语法的数据读入
使用Pattern和Matcher来构造正则表达式并按规则读取文件
软件构造lab3实验报告
3.14应对面临的新变化
只考虑你选定的三个应用的变化即可。
3.14.1变化1
可以应对,代价适中
新建一个Location变量表示经停机场
软件构造lab3实验报告
软件构造lab3实验报告
软件构造lab3实验报告
3.14.2变化2
可以应对,代价很小
修改一下cancel函数
软件构造lab3实验报告
3.14.3变化3
可以应对,代价很小
添加block函数
软件构造lab3实验报告
重写start和cancel函数
软件构造lab3实验报告