[HITSC]哈工大2020春软件构造Lab3+Lab4实验总结

今天完成了Lab4的验收,由于Lab4是在Lab3的基础上的,所以我打算把这两个实验放在一起看一看这两个实验。

Lab3的目的是写一个航班的管理程序,以及尽可能多的可以为其他应用复用代码(我选择的其他两个应用为高铁车次管理应用和计划项管理应用)。这个实验给我最大的体会是:为了复用,就要尽可能地把所有的功能分割,把不相关的独立地作为一个ADT,然后通过委派机制,让对应的ADT去实现,而关联度小的功能就通过传参的方式把需要的数据传递给功能实现ADT的对应方法,本身的ADT只保留最核心的必不可少的功能。总之就是一个原则:能让别人做的事绝对不要自己动手!!!

delegation,delegation,delegation,重要的事情说三遍。

基于上面的原则,我的源代码目录树长成了下面的样子。

代码目录树

在这个目录结构成形之前,我的目录其实要比这个简单很多,至于它为什么会变成现在这么庞大的一个结构,就不得不说上面的原则的来历了。哎,这个说起来都是泪。在我写Lab3的3.14之前,我感觉上其实还好,虽然有部分没什么直接联系的功能直接放在了一个ADT中,比如TwoLocation这个类,我没有将它直接独立,因为这个东西只是保存了航班的起降机场,而这个类其实完全可以加入到FlightEmtry这个类的rep中,令两个Location直接作为航班计划项的一个私有rep来保存机场也不会有什么大问题,而且还方便使用,所以。。。我把它直接放了进去。而当看到3.14的时候,我后悔了,因为要求的增加经停功能导致我需要改我的FlightEntry的实现,增加rep,所以,我果断重构了这部分的之前的实现,将位置时间等信息作为了一个单独的接口,把他们分离了出来,在rep中只保留接口,

/**
  * 创建一个航班计划项
  * 
  * @param name     航班的名称,非空
  * @param twoLocations 航班的起止地点,非空
  * @param timeslot   航班的起止时间,非空
  */
public FlightEntry(String name, TwoLocationEntry twoLocations, PresetSingleTimeslotEntry timeslot) {
   
    super(name);
    this.twoLocations = twoLocations;
    this.timeslot = timeslot;
}

这样我改起来就非常方便了,直接在构造函数传入TwoLocation接口的不同实现就行了。

还有一个问题是我在写Lab4的时候发现的,我在三个应用的app中是把GUI和功能实现放在一起写的,没有分开(其实我在写Lab3的时候刚开始是分开的,后来觉得在功能实现里只是返回了一个表示操作成功失败的flag,所以我合并了。。。/大哭)。

/**
  * 删除不可用飞机资源
  */
public void removePlane() {
   
    String id = JOptionPane.showInputDialog("飞机的编号:");
​    String type = JOptionPane.showInputDialog("飞机的型号:");
​    String seats = JOptionPane.showInputDialog("飞机的座位数:");
​    String age = JOptionPane.showInputDialog("飞机的机龄:");
​    Plane plane = new Plane(id, type, Integer.parseInt(seats), Double.parseDouble(age));if (planes.contains(plane)) {
   
​      planes.remove(plane);
​      JOptionPane.showMessageDialog(null, "删除成功!");} else
​      JOptionPane.showMessageDialog(null, "此飞机不存在!");
  }

然后发现为了健壮性要抛异常再回到原来的执行轨迹上并且还要写日志,然后我就想捶死之前手贱合并了代码的我。于是。。。我又开始了分离功能和GUI的大业。修改之后变成了这样

/**
 * 删除不可用飞机资源
 */
public void removePlane() {
   
	String id = JOptionPane.showInputDialog("飞机的编号:")
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值