一.最终构架设计
类名 | 描述 | 功能 |
---|---|---|
Main | 主类 | 调用Solve类 |
Solve | 解决类 | 处理输入数据,并做出处理,输出结果 |
Adventurer | 冒险者类 | 冒险者类,对冒险者的物品和属性进行操作,记录每个冒险者的一切 |
Food | 食物类 | 对冒险者的食物进行创建和调用并加入到冒险者的类中 |
Equipment | 装备类 | 对冒险者的装备进行创建和调用并加入到冒险者的类中,该类包含3个子类RegularEquipment,CritEquipment,EpicEquipment,子类包含更多的属性 |
Bottle | 药水瓶类 | 对冒险者的药水瓶进行创建和调用并加入到冒险者的类中,该类包含3个子类RegularBottle,RecoverBottle,ReinforcedBottle,子类包含更多的属性 |
Dairy | 战斗日志类 | 对冒险者进入战斗模式并且成功战斗的一切操作进行记录,包含所有的冒险者的战斗日志 |
Store | 商店类 | 对冒险者拥有的物品进行买卖,并记录买入物品的性质和价格,再通过记录的数据创建卖出的物品 |
Attack/Attacaked | 攻击、被攻击类 | 属于每个冒险者类,对冒险者的攻击和被攻击进行记录 |
首先对于数据的处理,在每一种处理方式读入后,再进行数据的读入,而不是整体的读入放入栈中,优点是数据处理更加简单,节省空间,不足在于写junit时很麻烦,不知道该怎么办。
同时在整体的架构中,对于冒险者,食物,装备和药水瓶的单个的处理都尽可能放在本类当中,但对于多个类同时进行处理时,写的比较复杂,此时代码的可读性就比较差了。
二.迭代日志
第一次迭代
迭代比较简单,只是对冒险者包含的Food,Equipment和Bottle进行添加和删除的操作,对整体的结构没有进行改变。
第二次迭代
添加了“携带”这一概念,我的想法是在冒险者类中新建三个Hash来存储,操作也比较简单,但后续的删除就比较麻烦,要考虑是否完全删除了该物品,虽然我还是用最初的方法没有改,但现在我觉得在建一个类专门放置“携带”的物品可能会让代码更加简洁,可读性也会更强。
第三次迭代
新增战斗模式,我采用新建Dairy的类来存储战斗的信息,也是比较简单,难点在于简化代码,我在这一部分写的是最难受的,代码可读性比较差主要就是这一部分的原因,还新建Method类来存储我的方法类,看的我好难受,但也没办法。
第四次迭代
分别添加了Bottle,Equipment的子类,以及冒险者的雇佣关系,还要计算价值体,比较好的方法就是递归了,也可以在每步操作都计算价值体,这样可以不递归直接得出价值体,但是很麻烦建议不要这样做,并且在下一次迭代中,这样好想就不可行了。
第五次迭代
添加Store类,对物品的买卖进行处理。还是很好理解的。
三.junit的心得体会
- 使用junit进行单元测试可以检查最底层类的正确性。起到一定的效果,但对于复杂的类方法来说,要考虑的方面太对了,还要覆盖到每个分支,很难做到对该类的全覆盖,如果不进行全覆盖,写junit的意义就不大了,我觉得可以对简单的类方法进行junit的编写,复杂的就算了。
- junit只能检查你写的代码的错误,感觉意义不大,大多数编译器都会检查出来,最难解决的是逻辑错误,编写junit是无法解决的
四.oopre的心得体会
- 学习这门先导课让我对代码直接面向对象有了了解,通过类直接对操作对象进行处理,然后直接调用。
- 还有对面向对象的封装,继承和多态的理解更加深刻了,知道了在什么情况下使用他们,还有对接口的理解(虽然我觉得没什么用)。
- 最后还是觉得这课开的很有意义
五.简单建议
在课上让我们注意整体的框架,却什么框架结构都不讲,希望以后做完迭代时,可以发布一点比较好的框架结构,不至于到了最后想重构框架是时发现代码量过多,想改也来不及改了。真的希望多讲点框架结构的知识,而不是光说让我们注意。