目录
1.架构设计
各模块名称及功能
迭代过程
2.使用 Junit 心得体会
3.学习 OO-Pre 心得体会
4.对 OO-Pre 的简单建议
总结
1.架构设计
各模块名称及功能
名称 | 类型 | 功能 |
Main | Class | 读取输入;作为枢纽,识别指令并将其传递给各个操作执行类;生成Adventurer |
Commodity | Class | 作为Adventurer、Bottle、Equipment、Food的共同父类,声明属性:value |
Adventurer | Class | 程序中最主要的对象类,含有对于自身所拥有的价值体、金钱、雇佣的Adventurer进行操作的各个函数 |
Bottle | Class | 声明属性:id,name,capacity,isEmpty;提供get方法;下有RegularBottle等三个子类 |
Equipment |
Class
| 声明属性:id,name,star;提供get方法;下有RegularEquipment等三个子类 |
Food | Class | 声明属性:id,name,energy;提供get方法 |
ItemOperator | Class | 负责处理Adventurer与Bottle、Equipment、Food相关的指令 |
CommodityOperator | Class | 负责处理与value密切相关的指令 |
Fight | Class | 负责处理战斗相关的指令、储存战斗日志 |
Trade | Class | 负责处理与买卖物品相关的指令 |
Store | Class | 负责记录Adventurers卖出的物品,并生成Adventurer想要购买卖的物品 |
迭代过程
- 在前两次作业中,我并未编写专门的读取输入的方法,直到第三次作业中看到了助教提供的输入解析代码,这才依葫芦画瓢,仿照着写了一个;同时,在此基础上编写了seInput方法,在Junit测试中帮了我很大忙。
- 另一方面,在前几次作业中,由于所需处理的指令并不多,我将所有的操作方法全部写在Main类中。后来,Main中的代码很自然地超出了500行的CheckStyle限制,这才建立了专门的操作执行类。随着课程的深入,也使用了继承、重写等操作。相比起过去的面向过程编程,这是很不一样的体验。
2.使用 Junit 心得体会
合理编写Junit可以从基础方法开始,逐步检验各级方法的正确性。但要想排查出全部的漏洞往往需要足够庞大的数据支撑,而自行编写覆盖率足够完善的数据无疑是件费时费力的事。所以我绝大部分的bug还是在测评中发现的……
3.学习 OO-Pre 心得体会
- CheckStyle:尽管大一就被告知代码在命名、空格等方面应遵循一定的规则,但在实际编写过程中往往只是做到能看就行。直到遇见 OO-Pre,在测评中加入了对代码风格的考察,这才开始认真对待此事。最终 OO-Pre 的项目代码确实比此前写的“好看”了许多。
- 面向对象:面向对象的编程模式很注重代码的模块化,各个类仿佛独立的个人,每个人只管理自己的物品,只负责处理自己分内的事,并将信息传递给别的类,最终达到分工合作,完成任务的效果。模块化做的好的项目,在新增功能时,几乎不需要对已有的代码做修改,只需增加新的类、方法等。同时,继承、接口等操作也使得代码更加简洁,整体架构更加有序。
4.对 OO-Pre 的简单建议
- 希望中测时,能把分支覆盖情况分散到不同测试点中。有时十个测试点中只有一个测试点涉及到bug所在的分支,而这个测试点还是输入输出不可见的,即使自行编写了多个测试样例,但还是没找到bug所在,很痛苦。
- 另外,强测可能需要加强(),有时基础功能(非极端情况)出错了也能满分通过,结果下一次作业时因为上次作业未发现的bug无法通过,对着当次作业新增的功能反复检查也不会有任何发现。
总结
总的来说,OO-Pre让我收获了很多:用上了IDEA这样现代化的IDE,对于Git的使用有了更多了解,学习了面向对象的编程模式……感谢助教及课程组的付出