2020软件构造实验三

3实验过程
请仔细对照实验手册,针对每一项任务,在下面各节中记录你的实验过程、阐述你的设计思路和问题求解思路,可辅之以示意图或关键源代码加以说明(但千万不要把你的源代码全部粘贴过来!)。
3.1待开发的三个应用场景
列出你所选定的三个应用。
分析三个应用场景的异同,理解需求:它们在哪些方面有共性、哪些方面有差异。
航班管理、高铁车次管理、大学课表管理

共性:
1、计划项:一个待执行的活动\任务,需要分配特定资源。一个计划项的执行过程可分为若干个状态:未分配资源、已分配资源但未启动、已启动、已完成、已取消、挂起
2、资源:每个计划项所占用的资源都是单一类型的。
3、物理位置:计划项执行的物理地点
4、时间:具有确定的开始时间和结束时间;需要分段执行,因此其时间属性也需要分段标注;
5、信息板:每个具体地点都提供一个信息板,展示在该地点的过去发生和未来即将执行的计划项清单及各自的状态
6、计划清单:由一组计划项构成的整体。

差异:
1、位置的数量
2、位置是否可以改变
3、资源特征
4、计划项是否可阻塞
5、时间描述
6、时间是否可预先设定
3.2面向可复用性和可维护性的设计:PlanningEntry
该节是本实验的核心部分。
3.2.1PlanningEntry的共性操作
//开始
public void start();
//取消
public void cancel();
//完成
public void complete();
//获得计划名字
public String getPlanName();
//分配资源完成
public void provide();
//当前状态包括 未分配资源(WAITING) 已分配资源(ALLOCATED)已启动(RUNNING)已完成(ENDED)已取消(CANCELLED) 挂起中(BLOCKED)
public String getStatus();

设计一个类 CommonPlanningEntry来实现 PlanningEntry。

3.2.2局部共性特征的设计方案
设计一个类 CommonPlanningEntry来实现 PlanningEntry。

3.2.3面向各应用的PlanningEntry子类型设计(个性化特征的设计方案)
方案 5:CRP,通过接口组合实现局部共性特征的复用
每个维度分别定义自己的接口, 针对每个维度的不同特征取值,分别实现针对该维度接口的不同实现类,实现其 特殊操作逻辑。 进而,通过接口组合,将各种局部共性行为复合在一起,形成满足每个应用 要求的特殊接口(包含了该应用内的全部特殊功能),从而该应用子类可直接实 现该组合接口

FlightEntry:代表一个具有时间表、有起飞和降落机场、由一架飞机
执飞的航班;

TrainEntry:代表一个具有时间表、经过一组站点、由一组车厢构成的
高铁车次;

CourseEntry:代表一次课,具有明确的日期/时间、地点、教师。

3.3面向复用的设计:R
航班应用中的资源是“飞机”,属性包括飞机编号、机型号(A350、B787、 C919 等)、座位数、机龄(例如 2.5 年)。

高铁应用中的资源是“车厢”,属性包括车厢唯一编号、类型(商务、一 等、二等、软卧、硬卧、硬座、行李车、餐车)、定员数(例如 100 人)、 出厂年份。

课表应用中的资源为“教师”,属性包括身份证号、姓名、性别、职称。

3.4面向复用的设计:Location

3.5面向复用的设计:Timeslot

3.6面向复用的设计:EntryState及State设计模式

抽象上下文角色(Context):维护当前状态并将与状态相关的操作委托给当前状态对象处理
抽象状态角色(State):定义一个状态接口,共性的方法放入接口中
3.7面向应用的设计:Board
每个特定位置都有一个信息板,用于实时公布该位置上过去发生过的和后续 即将发生的计划项,以便于广大用户及时了解计划项的状态变化。

1)某机场里的航班状态显示屏:分为抵达屏和出发屏,前者展示过去 1 小 时内和未来 1 小时内抵达该机场的航班信息及其状态,后者展示过去 1 小时内和未来 1 小时内从该机场出发的航班信息及其状态。注意:第一 列里的所有时间都是计划降落时间(对抵达航班来说)、计划起飞时间(对出发航班来说)。
2)高铁站里的车次状态显示屏:与(1)类似,唯一的区别是要额外考虑经停 高铁车次。
3)教室外悬挂的教室占用情况表:列出当日在本教室内上的所有课程及其 状态。与(1)相同,第一列的时间都是计划时间。

3.8Board的可视化:外部API的复用
3.9PlanningEntryCollection的设计
该ADT是PlanningEntry的集合类。
3.10可复用API设计及Façade设计模式
3.10.1检测一组计划项之间是否存在位置独占冲突
3.10.2检测一组计划项之间是否存在资源独占冲突
3.10.3提取面向特定资源的前序计划项
3.11设计模式应用
请分小节介绍每种设计模式在你的ADT和应用设计中的具体应用。
3.11.1Factory Method
3.11.2Iterator
3.11.3Strategy
3.12应用设计与开发
利用上述设计和实现的ADT,实现手册里要求的各项功能。
只需保留你选定的三个应用即可。
3.12.1航班应用
3.12.2高铁应用
3.12.3进程应用
3.12.4课表应用
3.12.5学习活动应用
3.13基于语法的数据读入
修改“航班”应用以扩展该功能。
3.14应对面临的新变化
只考虑你选定的三个应用的变化即可。
3.14.1变化1
评估之前的设计是否可应对变化、代价如何
如何修改设计以应对变化
3.14.2变化2
评估之前的设计是否可应对变化、代价如何
如何修改设计以应对变化
3.14.3变化3
评估之前的设计是否可应对变化、代价如何
如何修改设计以应对变化
3.15Git仓库结构
请在完成全部实验要求之后,利用Git log指令或Git图形化客户端或GitHub上项目仓库的Insight页面,给出你的仓库到目前为止的Object Graph,尤其是区分清楚314change分支和master分支所指向的位置。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值