BUAA OOPre总结
本文最后更新于 2025年3月19日 上午
BUAA 2024 OOPre总结
架构设计
最终架构
最终作业架构的设计如下(Bouml
软件制作):

- 主函数为
Main()
,调用Solver
类 Solver
类接收输入,内含一个ArrayList<Adventurer>
,通过输入调用对应函数对ArrayList<Adventurer>
进行处理Adventurer
类继承Employer
,Employee
接口Adventurer
类拥有Bottle
,Equipment
,Fragments
的组合,表示该冒险者拥有的药水瓶,装备,碎片AdventurerGame
依赖于Guard
接口,Guard
接口由Stn
,Flm
,Stn
,Frz
,Wnd
五种类(怪物)实现TreasureFactory
依赖于Treasure
接口,Treasure
接口由StnTreasure
,FlmTreasure
,StnTreasure
,FrzTreasure
,WndTreasure
五种类(宝物)实现
迭代调整
- 第三次作业实现了继承,将
Bottle
类实现为父类,HpBottle
,AtkBottle
,DefBottle
类作为子类继承其方法 - 第五次作业新增
Fragment
类,并撰写了一个Solver
类来处理输入,由于评测机的JUnit
测试似乎不支持文件重定向,将Solver
类调用的函数修改为以字符串为参数 - 第六次作业新增工厂模式生成
Treasure
类,观察者模式实现Employee
与Employer
接口
JUnit使用心得体会
在进行JUnit
测试的过程中我们要实现两个目标:
- 代码覆盖度高,这需要我们撰写出可以覆盖足够多情况的测试样例
- 排查代码隐患和错误,考虑足量多的极端情况,比如第六次作业中可能出现被雇佣人攻击雇佣人的情况,这时处理
normalFight
的顺序非常关键
JUnit
可以降低对复杂指令的检查难度,例如chainFight
中计算被攻击者的队列,我通过不同的输入样例确保了递归在次数为5会停止
在对JUnit
的探索中,我认识到assert
语句的重要性,它可以减少花在排查输出结果的时间
JUnit
还可以搭配自动化生成测试数据的程序,虽然不能和正确程序对拍,但是对于理解题目要求与测试覆盖率都有很大的帮助
OOPre心得体会
我从OOPre课程中学到了层次化设计,初步理解了面向对象思想,并掌握了Git
,Junit
等工具的使用
以我的理解,面向对象即把问题中所有的事物都"抽象"成"对象",通过封装,继承,多态的概念设计程序,这样的思路极大地提高了代码的可扩展性与可维护性,这些都是我在C语言中的学习中没有机会掌握的
另外,通过这门课,我的debug
能力得到了很大的提升,通过使用JUnit
和BreakPoint
排查了很多错误
对代码的重构也是一件很重要的事,checkstyle
在敲代码过程中会对重复代码和冗余的代码提出修改,如果重复出现在同一个类中,我们可以重复代码提出来作为一个单独的函数;冗余代码可以根据IDEA提示修改,例如删除一个ArrayList
中元素的操作,if (...) remove(...)
的代码段可以用一句removeIf()
替代.这样,代码才能保持足够的清晰可读性和可维护性
对OOPre课程建议
请加入互测功能
BUAA OOPre总结
https://meteor041.git.io/2024/11/01/BUAA 2024OOPre总结/