一、作业架构设计
1.1 作业最终形态
-
省略版UML类图
-
src文件夹
1.2 迭代中的架构调整
- 说来惭愧,我在历次迭代中并没有进行重构,主观原因当然是因为我比较懒,但也存在客观原因,在于我是在 hw5 的 debug 作业中,才第一次对重构的必要性以及代码的可读性有了一份直观的认识,但这时只剩下两次迭代,综合考量重构的时间成本及其带来的收益,我放弃了重构。我相信也有部分同学也是因此与我做出了同样的选择,因此这一点我也会在建议中提出。
- 历次迭代中的调整如下:
- 在 hw3 中新增 Bag 类。
- 在 hw4 中新增 FightLog 类。
- 在 hw6 中新增 Commodity 接口和 Bottle 、Equipment 方面的继承关系。
- 在 hw7 新增 Shop 类。
二、junit使用心得体会
- 直到 hw7 ,也即最后一次迭代之前,我都一直本着“代码和人能跑一个就行”的准则,向来不惮以最懒的心态去完成作业,对 junit test 都是敷衍了事。但在最后一次作业 hw7 中,我在 op23 买食物的处理时不留神将(price >= money)打成了(price > money),最终还是挂了强测的一个点,给这门课程以一个小小的遗憾作结。这份遗憾给予我对 junit 全新的思考。
- 随着迭代的进行,代码行数越来越多,也越容易出现一些小错误;而若这项迭代的工程由多个人戮力而成,一些代码思路及实现上的前后冲突更是在所难免。此时便是junit的用武之地了。当然,若是迭代的次数不多,我们可以只对代码的关键部分进行junit测试,同时用一些特殊的数据来检验代码的整体功能,从而达成时间成本和测试收益之间的一个微妙平衡。
三、OOPre学习心得体会
- 首先,是对面向对象思想的体会。在一些工程庞大或是要求多次迭代的应用场景下,面向对象结构清爽、易扩展、易封装的特性绝非面向过程的方法可比拟的。
- 再者,是迭代开发这一过程的收获。关键在于编程伊始对迭代中可能出现的架构进行预判和接口的预留,达到“A good beginning is half done”的效果。而如果预判失误,我们也要勇于重走来时路,及时进行代码的重构。
四、简单建议
- 希望课程组能越早呈现类似于 hw5 的结构清晰代码越好,尽早给同学以重构的动力。