一. 结构设计
1. 最终架构设计
具体说明
(1)commodity 实现价值体总接口,实现价值计算或数量统计等方法
(2)Main主函数模块调用指令处理模块实现功能
(3)Bottle 类中实现药水的各种共同属性操作,并作为RecoverBottle,RegularBottle,ReinforcedBottle三种不同具体药水的父类。
(4)Adventurer类中实现对冒险者的各种操作,类中具有代表拥有物体的HashMap,实现背包功能和雇佣功能的HashSet,以及实现金钱计算的money属性
(5)Euipment类中实现装备的各种共同属性操作,并作为EpicEquipment,RegularEquipment,CritEquipment三种不同具体装备的父类。
(6)CommandDeal类中实现对指令的具体处理,分为BattleControl战斗指令处理,CommonControl普通指令处理,PriceControl商店及价值指令处理。
(7)Shop类中实现冒险者的买卖操作,以及买卖过程中各种量的计算过程
2. 迭代与重构过程
迭代
第一次迭代:为冒险者增加背包相关的HashSet,实现携带功能
第二次迭代:增加处理战斗日志的功能模块
第三次迭代:增加commodity接口实现价值计算功能
第四次迭代:增加商店实现冒险者买卖功能
重构
第一次重构:刚开始处理背包相关功能时单独新建了一个类,且将其与冒险者的联系转为外部的哈希表,
第二次重构:随着操作指令的变多,输入部分处理已经逐渐超过代码风格要求的行数,因此对不同类型的指令新建处理方法,以使模块清晰且各个方法行数减少,这样的重构也为后续增添其他指令。
二. JUnit体会
JUnit的使用使程序能够全面且细致地检测各个方法的正确性,虽然到迭代多次以后写JUnit就较为繁琐(),但是在较大的java工程中JUnit确实能够帮助确定问题所在,而不至于在遇见bug时完全无从下手。
写JUnit时要注意构造数据的全面性,除了要有尽可能高的行覆盖率以外,还应该尽可能覆盖到每个分支情况,即保证分支覆盖率,确保程序检测无死角,无漏洞,虽然这可能会让测试写起来更繁琐。
三. 学习心得
思维提升:这学期面向对象先导课的学习,使我初步了解了面向对象封装,继承,多态的特点,让我从原来简单的面向过程编程思维脱离出来,转而能用自己规划的程序的架构来思考并实现。面向对象“分而治之”的编程思维也使我模块化与层次化的思想得到了增强。
能力提高: 历经将近七次的迭代开发,从原本C语言最多几百行的程序,到现在几千行的较大工程,使我的编程能力得到了提高,代码风格得到了规范,并且初步掌握了调试较大工程的能力。
工具使用:接触了git,IDEA等工具的使用,在后续碰到之后能有简单使用的能力,知识面得到了拓展。
四. 课程建议
应当多普及git相关知识,比如交作业时可以有多种情况,要求以适当的git方式提交,让学生能更加熟练地掌握版本管理相关技巧。