2025 oopre 课程总结

蒋泽滨-24373527 2025-11-05 00:18:58

1、最终作业的架构

1.1、架构总览

核心游戏接口和类

类/接口功能
Adventurer代表游戏中的冒险者,包含属性如ID、名称、体力、攻击力、防御力等
ItemManger基类,代表所有物品,包括药水瓶Bottle和装备Equipment,包含属性有ID、是否被携带
Bottle药水瓶基类,具体子类包括HpBottle(生命药水瓶类)、AtkBottle(攻击药水瓶类)、DefBottle(防御药水瓶类)、ManaBottle(魔法药水瓶类)
Equipment装备类,有CE属性
Armour护甲类
Weapon武器类,具体子类包括Magicbook(魔法书类),Sword(刀剑类)
Spell法术类,具体子类包括HealSpell(治疗法术类),AttackSpell(攻击法术类)
lexer

读取嵌套输入,用于词法解析的类

InputManage输入管理类,用于解析用户输入并调用相应的命令处理类
Factory工厂类,用于创建不同类型的物品(工厂模式)
MainClass

游戏入口类,读取用户输入并启动主循环

EmployeeManger接口,具体实现的类有Adventurer类,用于处理雇佣关系

Obersvable

接口,具体实现的类有Adventurer类,用于通知下级自身的状态(观察者模式)

Package背包类,用来管理携带的物品
RelationChecker具体实现的类有Adventurer类,用来判断冒险者间的关系
UseMethod接口,具体实现的类有四个药水瓶类以及两个法术类,用来使用药水或法术

1.2、架构迭代过程

  1. 第二次作业:第一次接触面向对象,整理出了三个类以及各自属性。
  2. 第三次作业:抽象出了UseMethod接口,增添了几个子类。重构了程序入口,增加了InputManger专门处理指令,降低MainTest类的行数,整理出程序主循环。
  3. 第五次作业:增添了ItemManger统一管理物品,实现了背包功能,并内聚在冒险者类里面,同时对不少类进行了重构,对方法进行了封装,同时初步尝试了工厂模式。
  4. 第六次作业:观察者模式的一次实践,架构没有什么变化。
  5. 第七次作业:新增文法词法输入解析,架构没变化

 2代码测试与JUnit的使用

JUnit显而易见是为了更方便的测试一个类自己有没有问题,并且最好覆盖更多的分支,但是随着代码迭代次数增多,分支数量也是不断暴涨,由于偷懒故仅覆盖了部分分支,全当是完成任务了(悲),虽然很清楚JUnit的精髓确实是断言assert判断真假,但是最后JUnit成为了我用来过评测率的一个负担了,连debug都是靠文件输出的对拍来找的。最后一节课上老师说大厂们特别看重“自动化”这个东西,也就是你必须得实现自动化的评测,那么对于人工对比结果来说明显是不符合要求的,那么你就需要assert语句来判断是否正确,并且覆盖面要广,而不单单仅是满足课程覆盖率的要求。(注:本人最后一次作业juit中branch覆盖率仅有60.5%,刚好卡着课程60%的要求过的)

其实真的是没有时间去写JUnit吗,并非,只是看到那么多情况和类偷懒了,只选取主要的分支进行了测试,这也导致其中一次强测未考虑全面仅得了80分。

最后,还有一个问题,可能是因为最开始未做好规划,导致不少地方出现了对同一个分支,同一个方法进行重复测试的情况,导致测试代码写了很多行,但是覆盖率就是上不去,虽然后面意识到了这个问题,但也不想重构进行修改。

综上,JUnit确实一个很好用的东西,但是也是要用心花时间的,并且应该有规划的去测试,才能提高效率。

3、OOPre的心得体会

在OOPre上我第一次接触了面向对象的编程方式,由于大一只学过C语言(绝对的面向过程的语言),没有一点java编程的经验,导致刚开始学还是比较吃力的,但是学到后面就发现其实面向对象的编程很简单,核心就在与封装这一点,并且这种编码方式的可读性很好,就算是几千行的代码感觉也读得进去(C语言几百行的我都看不过来)。同时在课上我还学会了各种设计模式,多态和继承等优化代码的小技巧,感觉还是学有所获的。

4、一些对于OOPre课程的建议

本人拙见。谨供课程组参考一下:

1.把每次报错时测评机的输出调整为标准输出,不明白为什么要提供我们自己的输出,这个我们不是可以自己导入输出从而得到的吗

2.从java基础开始讲起,照顾一下没有java编程经验的人

 

 

...全文
41 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

270

社区成员

发帖
与我相关
我的任务
社区描述
2026年北航面向对象设计与构造
java 高校
社区管理员
  • 孙琦航
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧