OOpre学习课后心得

容易为-24371119 2025-11-05 23:55:34

OOpre学习心得

最终架构

img

  1. 核心接口和类
    功能
    Adventurer管理一切冒险者的属性,包括背包、上下级、援助以及搜索背包、上下级,携带删除物品等
    Adventurers管理游戏中加入的冒险者,通过id搜索冒险者
    Bottle管理药水一级的属性,包括使用药水
    Equipment管理装备一级的属性
    Spell管理魔法以及的属性,包括使用魔法
    Command每一个指令代表的情况的方法的接口
    CommandFactory将不同的指令匹配不同的方法
    BottleFactory将不同的类型的药水匹配不同的子类
    EquipmentFactory将不同的类型的装备匹配不同的子类
    SpellFactory将不同的类型的魔法匹配不同的子类
    Lexer读取嵌套输入,用于词法分析
    Lrparser用于句法分析和批量导入雇佣关系
    MainClass程序的入口
  2. 迭代中的调整和考虑
  • 在迭代中,我将所有冒险者一级(与具体的冒险者有关)的操作方法都放到了冒险者类里,这样在调用时就只用通过冒险者变量来调用,比较清晰,其他物品一级的如使用物品等方法就放到了各自物品的类里。但是由于游戏中添加冒险者需要冒险者的ArrayList,这个属于整个游戏层面,而我又没有创建整个游戏层面的类,所以我就创建了Adventurers来单独管理游戏中被加入的冒险者。
  • 在第二次迭代中,我将冒险者携带的药水和装备用HashMap来实现,但是之后的迭代中,限制了携带药品和装备的数量,在超额情况下要按携带顺序解除携带,我不得不把HashMap调整为ArrayList,不过只要修改好被影响的方法后,对于主要程序的影响并不大。
  • 在第二次迭代的时候我就因为MainClass超行在网上学了工厂模式来解决,因此在后来的迭代重新用到工厂模式时感觉很顺手,迭代作业中用到的这些设计模式有很强大的功能,可以实现复杂的功能的同时,让代码变得很工整。
  • 个人觉得迭代里最难的时上下级雇佣,我一开始打算对一个冒险者,用两个ArrayList创建这个冒险者上级和下级的全名单(包括所有上级的上级和所有下级的下级),不过这样在增加和删除关系时实在太难了,后来放弃了这种想法,用深度优先搜索解决了这个问题。幸好及时改正了想法,不然下次的批量导入雇佣关系就非常非常难实现了。

使用JUnit的心得体会

  • JUnit可以很有效的测出类方法里的错误,但是得自己编一些很刁钻的测试点,尤其是类方法里有需要从键盘输入的scanners时就很痛苦。刚开始我以为要提高覆盖率就要给每个方法都创建一个T est,后来发现只要在其他测试里调用过这个方法,就可以算入这个方法的覆盖率。JUnit通过assert可以判断代码得到的结果和期望是否一样,如果assert断言失败,是会报错的,不过似乎只要不断言就不会出错(最好不要这样偷懒)。每次作业都会有覆盖率检查,每次都要燃尽了才能勉强达到覆盖率要求,尤其是分支覆盖率,需要考虑方法里的每个分支,所以最好在写方法的时候就把分支写的清晰一点。
  • JUnit可以实现自动化测试,如果用心编写测试用例的话,还是非常有用和有利的。

学习OOPre的心得体会

  • 通过OOpre的学习,第一次体会到了面向对象编程的魅力。相比于之前程设和数据结构的面向过程编程,面向对象编程有很多不同之处。第一次接触Java并完成第一次迭代作业时,我就感到思路好顺畅啊,如果是以前,要完成迭代作业这样复杂的功能,可能要想很久才能有一些头绪。但是有了面向对象编程的思维方法之后,我们可以把一个复杂问题里出现的各种对象都创建出一个类,将他们的各种属性都交给他们各自的类来管理,在创建完一个个类之后,我们在主类中只需要处理不同类中的属性变化,封装好一个个类,我们在处理问题时,就只用简单调用各个类中的方法,就可以实现一个相当复杂的功能,我觉得这很有利于不断的更新和团队间的协作,通过调用类中的方法,程序的逻辑也看起来非常的工整,易读。而且在创建一个个类的过程中,会让我们对题目的理解更加深入,更有利于我们思考题目,形成解题思路,每次做OOpre的作业,思路都很顺畅,但是大部分时间要用来debug和写测试(
  • 通过OOpre,我感受到了Java这类高级语言的强大与魅力,Java相比于C语言提供了更多封装好的数据结构,不用再自己一一实现,可以将精力放在实现更复杂的功能。记得有次迭代作业时,由于主类行数过多,出发了checkstyle的警告,所以我在网上学到了用CommandFactory来应对不同指令的输入情况,最后将主类变得只有十几行,非常干净整洁。后面学习到的接口和继承还有设计模式等,也体现出了Java和面向对象的强大。总之通过OOpre的学习,让我初步了解到了面向对象的编程方法,让我体会到了Java和面向对象编程的强大之处。

对OOpre课程的建议

  • 希望OOpre课程以后可以提前中测时间,周三课程比较少,写作业时间比较多但是无法进行中测。
  • 希望测试点可以全部提供测试样例,并且提供标准输出,而不是我们的输出,便于debug。
...全文
87 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

271

社区成员

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

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