OOpre课程学习总结

刘阳霖-24371319 2025-11-06 21:44:16

完结撒花,庆祝OOpre结课,感谢课程组的倾心付出!!

 

最终架构设计

Adventurer类

封装了人物的体力值、攻击力、防御力、魔力、金币、装备攻击力、装备防御力、背包等结构,且定义了各种增加装备,增加药水瓶,学习法术,删除装备,携带装备,购买,战斗,雇佣关系等方法。

Item类及其子类

药水类:定义了Bottle及子类AtkBottle、DefBottle、HpBottle、ManaBottle,封装了提升攻击力、防御力、体力值、魔力等的功能。

装备类:定义了Equipment及子类用于提升装备攻击力的Weapon(包含子类Sword和MagicBook),以及Armour类(提升装备防御力)。

法术类:定义了Spell类及子类HealSpell和AttackSpell,封装了魔力消耗以及提升体力值和攻击敌人的效果。

Lexer类和Parser类

Lexer类:负责词法分析,处理lr指令的输入字符串,识别并生成token。

Parser类:语法分析,递归下降的方式来解析lr指令,递归调用生成雇佣关系结构。

Mainlogic、Main以及Input类

Main类:用于程序的开始,把输入的信息转向Input类处理,并且调用了Mainlogic,用于后序信息的处理。

Input类:创建二维数组,通过一行一行地读取来分析指令。

Mainlogic类:指令处理中心,将读入的信息分条处理,处理(aa、ab、ae、ls、ri、ti、use、bi、fight、ar、rr、lr)并分向各个函数之中。

Factory类

采用工厂的方式,根据类型(药水、法术、装备)创建对应的子类,对其实例化。

在迭代中的架构调整及考虑

  • 最开始的代码十分基础,而后往多态、封装、继承的方向发展,在一次次的指导书的变化中逐渐向高阶代码发展,从单一的Bottle继承出各类Bottle,从Equipment中继承出两种Weapon和Armour,从Spell中分出攻击和治疗两类法术。

  • 前五次作业的测试代码覆盖率一直很好过,但是第五第六次开始代码覆盖率一直过不了,于是请教了我万能的室友,在室友帮助下,我将原本负责输入和分类的Main类分为了三个大类,即Main、Mainlogic和Input,Main函数只用于程序的开始,而后便将输入和分发改到了Input和Mainlogic,代码覆盖率便很快达到了要求。

使用 JUnit 的心得体会

  • JUnit 是个十分好用的测试工具,测试时应该多测试边界点,以及空指针等等的边界情况,可以很快发现代码里的bug,关注一些溢出情况,也能更好地满足覆盖率

  • 在一个测试样例中加入多个类的集成测试,才能更好满足覆盖率,也更好地模拟实际情况,debug也比较容易

     

学习OOpre的心得体会

  1. 作为零基础 Java 小白,OOpre对我的帮助还是很大的,初步了解并上手了 Java 代码的初步结构,为正课的上手打下了坚实的基础。

  2. 从面向过程编程逐渐转向面向对象编程,围绕着函数为中心,了解了继承、封装、多态等基本属性。培养了大局意识、架构意识,还是收获颇多。了解到了面向对象编程的优越性,为大型项目的服务作用不得而知。

  3. 同学之间的帮助真的十分重要。室友之间一定要相互交流,互帮互助,一起进步。在debug过程中,室友的帮助对我作用十分巨大。既包括一起分析输出的差异,找到出错误的输入代码的行数,一起检查代码架构、分析代码越界情况等等。当你发现别人的问题时,也会更加注意这类边界,既帮助了别人,自身也获得了很大的成长。

对课程的简单建议

  • 可以多一些对 Java 基础知识的讲解,感觉对于小白来说跳跃性有点大,但是总体讲解的很好,跟着课程组一次一次迭代下来对个人代码的能力提升颇多,并且助教团队也十分负责。

  • 有没有可能就是把样例的标准输出给出来,因为如果是缺行的话debug有点难。

最后还是由衷地感谢课程组、各位助教的倾心奉献,感谢大家的帮助,庆祝OOpre结课!
...全文
32 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

270

社区成员

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

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