2020年春季学期
计算机学院《软件构造》课程
Lab3实验报告
- 实验目标概述
本次实验覆盖课程第 3、4、5 章的内容,目标是编写具有可复用性和可维护性的软件,主要使用以下软件构造技术:
1.子类型、泛型、多态、重写、重载
2.继承、代理、组合
3.常见的 OO 设计模式
4.语法驱动的编程、正则表达式
5.基于状态的编程
6.API 设计、API 复用
本次实验给定了五个具体应用(高铁车次管理、航班管理、操作系统进程管理、大学课表管理、学习活动日程管理),学生不是直接针对五个应用分别编程实现,而是通过 ADT 和泛型等抽象技术,开发一套可复用的 ADT 及其实现,充分考虑这些应用之间的相似性和差异性,使 ADT 有更大程度的复用(可复用性)和更容易面向各种变化(可维护性)。
2 实验环境配置
沿用Lab1搭建的环境
在这里给出你的GitHub Lab3仓库的URL地址(Lab3-学号)。
https://github.com/ComputerScienceHIT/Lab3-1180300612.git
3 实验过程
3.1 待开发的三个应用场景
-
航班管理
-
高铁车次管理
-
大学课表管理
1.位置有一个,两个,多个
2.位置仅有课程可改变
3.航班和课程为单个资源,高铁为多个有序资源
4.仅有高铁可阻塞
5.时间均在创建时确定
3.2 面向可复用性和可维护性的设计:PlanningEntry
3.2.1 PlanningEntry的共性操作
一些针对计划项的操作
3.2.2 局部共性特征的设计方案
计划项名称
Getter方法
3.2.3 面向各应用的PlanningEntry子类型设计(个性化特征的设计方案)
方案二
将特殊操作放入底层子类
3.3 面向复用的设计:R
直接以三个类的形式实现
3.4 面向复用的设计:Location
属性
构造函数
Setter
Getter
3.5 面向复用的设计:Timeslot
属性
构造器
Setter
Getter
3.6 面向复用的设计:EntryState及State设计模式
属性
Getter
3.7 面向应用的设计:Board
创建一个Board类
定义两个动态数组
然后在各子类中应用遍历器
3.8 Board的可视化:外部API的复用
使用AWT 实现GUI界面
创建一个GuiBoard类
在各个应用Board类的最后调用GuiBoard类中的方法
传入需要输出的信息的字符串数组
以按钮形式添加到信息板
如果GUI界面中文显示为方格
在VM arguments:中输入-Dfile.encoding=gbk再运行
3.12 应用设计与开发
3.12.1 航班应用
实现功能
3.12.2 高铁应用
实现功能
3.12.3 课表应用
实现功能
3.15 Git仓库结构
请在完成全部实验要求之后,利用Git log指令或Git图形化客户端或GitHub上项目仓库的Insight页面,给出你的仓库到目前为止的Object Graph,尤其是区分清楚314change分支和master分支所指向的位置。