OOPre学期总结
项目架构
类名 | 描述 | 功能介绍 |
---|---|---|
Main | 主类 | 用于解析输入,并将所需信息交由下属各类处理完成功能 |
Bottle | 药水类 | 储存药水相关性质,完成药水基础属性更迭,下属Recover Bottle,Reinforced Bottle,Regular Bottle三个子类分别重写相关方法实现相 |
应功能 | ||
Food | 食物类 | 实现食物相关功能,包含基础属性的获取 |
Equipment | 装备类 | 实现装备相关功能,包含使用,装备升星,下属RegularEquipment,CritEquipment,EpicEquipment三个子类,重写父类方法实现各自特性功能 |
Fight | 日志类 | 实现战斗日志相关功能,包含日志的存储,获取等 |
Backpack | 背包类 | 实现背包相关功能,包括相关物品的携带,删除,判断具体物品是否携带,使用等等 |
Store | 商店类 | 作为单例,实现商店相应功能,包括交易记录,售卖,购买等等功能 |
Adventurer | 冒险者类 | 实现冒险者的一系列操作,并进行一部分输出 |
下附项目uml图:
详细版:
迭代日志
第二周作业
添加了Main
,Adventurer
,Bottle
,Equipment
类,实现了基本的物品增删等功能。
感触:积累了基础的面向对象编程思想,注意到,这时我的主要想法仍是怎样完成一个便捷的函数(方法),主要仍是面向过程编程,对于类的封装和java语言内部优秀的数据结构类型认识不足。
第三周作业
添加了Backpack
类,与Adventurer
类实现交互,通过新增方法来处理新增开发需求,基本完成了基础架构。
感触:在本次迭代任务中,我首次采用了组合数据结构的办法,进行了HashMap与TreeSet的组合使用,大大提升了程序的性能,而不是想办法在方法上大做文章,可以说实现了思想上的初步转变。同时,由于checkstyle的要求,我在主类里也采用了多加方法类来避免超出方法行数要求的办法,这也会为之后的隐患埋下伏笔。
第四周作业
添加Fight
类,进行战斗日志的记录和查询。
**感触:**最痛苦的一周,主要在于两点。一是本周初学了正则表达式,在程序编写模式上带来了一定挑战,其次是由于Junit行覆盖率以及分支覆盖率的要求,导致我原来在主类里解析输入在转交处理的“偷懒办法”彻底无法使用,最终不得不统一解析输入,在交由主类里的处理中枢来传到各类进行功能实现,这也是我唯一一次大的重构,耗费了我大量的时间。
第六周作业
分别添加Bottle
,Equipment
类的三个子类,在子类中重写父类方法支持相应需求。
同时构建Commodity
接口,来进行价格计算的统一规划。
**感触:**在第四周后,其实每周的工作量都不是很大了,这一方面是由于我对于面向对象的开发要求越来越熟悉,另一方面是由于前几次吃过的亏,我在项目的架构上变得尤为谨慎,最终避免了大的重构。
第七周作业(最后一次迭代)
添加了Store
类,采用单例模式,来处理买卖物品需求。同时对于冒险者间的雇佣关系进一步扩展,增加了援助系统。
**感触:**在最后一周,代码的开发也变得更加轻松了,感觉和第三周工程量相仿,但是我对于面向对象开发时得具体模式有了更深的理解,也尝试使用了简单的两个模式。
Junit使用心得
讲道理,对于我而言,花在编写Junit测试上的时间可能会比项目开发时间还多,我认为这和我对于Junit的认识不足有关。
基于我的粗浅认识,我总结一下
- 首先,Junit测试无疑能够帮助检查出代码里的问题,尤其是在满足分支覆盖率的前提下,各种Exception会很容易被找出来。这对于时间充足的开发者无疑大有裨益!!!
- 但是,要编写满足各种复杂分支的测试样例(即测试代码),也无疑会占用大量时间,这直接导致我后几次时间不足时编写的Junit程序完全是为了凑覆盖率搞的,只能说有利有弊吧……
总体心得体会
每一次开发的心得体会可以见前文的迭代日志。
总体而言,我初步接触了面向对象的开发流程,经过自己的上手,也对于何为“面向对象”有了一个大概的认识,可以看到,在一次次迭代中,我的代码结构愈发规整,对于如何构建优秀方法的关注也逐渐转移到如何构建一个好的类上,这无疑是值得肯定的。
最大的遗憾在于,囿于时间不足,我无法腾出手对代码进行再一次大刀阔斧的修改,即彻底解放主类,建立输入解析类和方法统筹类,这无疑会使得整体结构更加漂亮,也希望助教未来能放出所有强测样例,让我在计组课程结束后再对于重构程序进行测试,不胜感激!!!
另插一句:对于面向对象的认识再我CPU的设计与架构中也有不少益处。什么模块应当组合,又如何封装电路来减轻课上后续开发负担,如果没有OOpre的经验,我计组课上会通过的困难许多。
对课程的建议
- 首先是可以完善一下课程指导书上的细节,再特定要求处可以改换字体颜色,进行加粗。同时对于一些边界情况的要求也应该更加清晰准确。
- 课上可以多花一点时间讲下程序的架构问题,这样我们在后续开发中可以少走不少弯路!!!