2025 BUAA-OOPre课程总结

赵旭阳-24371381 2025-11-12 10:05:37

最终架构设计及在迭代中的架构调整

在这里插入图片描述

1.最终架构设计

经过历次的迭代开发,最终形成的代码架构如上,具体分析如下:
  • Main提供了程序的运行入口,而MainTool则将Main需要执行的操作转化为多种方法存储起来,使得代码层次清晰,每一个操作指令均有其对应的方法,便于进行分析和Junit测试。
  • Adventurer为冒险者类,是整个迭代作业的核心,对Package、Bottle、Equipment、Spell的操作均围绕Adventurer展开,用于存储每一个冒险者的属性特征。
  • Bottle为抽象类,下设HpBottle、DefBottle、AtkBottle、ManaBottle四个实例化子类,用于存储药水及其属性。
  • Equipment为抽象类,下设Armour实例化子类和Weapon抽象子类,Weapon包含Sword、Magicbook两个实例化子类,用于存放装备。
  • Spell为抽象类,包括HealSpell、AttackSpell两个实例化子类,用于存储法术。
  • Lexer及Parser用于lr指令进行递归下降操作,Lexer为词法解析器,用于取出下一个元素;Parser为语法解析器,是递归下降的核心。
    不足之处
  • 未建立诸如接口、工厂之类的架构设计,导致代码的可读性和封装性较差,各部分之间耦合度较高,对于各个类的职能分工不够明确,界限不清晰。
  • 部分方法内部内容太多和冗杂,导致接近于60行,不利于更进一步的迭代进行。

2.迭代历程

第一次迭代(第二次作业)
  • 本次作业核心知识点在于容器创建和ArrayList数组的使用,以及对输入进行解析。
  • 需实现aa、ab、ae、rb、re五条指令,故创建了Main、Adventurer、Bottle、Equipment四个类。
  • 整体架构较为简单。
    第二次迭代(第三次作业)
  • 核心在于继承与接口的实现,并设置背包对物品进行管理。
  • 新增ti、ri、use指令,实现物品携带、使用与删除等。
  • 对Bottle进行了细分,建立抽象类并设立了实例化子类,引入了Package对物品进行管理。将Main核心功能至于MainTool,但MainTool内部实现仍较为混乱,方法行数较多。
    第三次迭代(第五次作业)
  • 本次引入新容器HashMap与HashSet,并介绍了工厂模式。
  • 新增fight指令和金钱系统。
  • 将MainTool进行了重构,使指令的读取与实现放入不同方法,层次更加清晰。但未使用工厂模式,该部分掌握较弱。
    第四次迭代(第六次作业)
  • 介绍了观察者模式,以及接口的具体使用方法。
  • 新增ar、rr指令,需实现冒险者雇佣关系的建立和援助功能。
  • 本次代码架构无明显变化,但援助功能的实现放入了Adventurer,分工不够明确,需进一步了解观察者模式。
    第五次迭代(第七次作业)
  • 介绍了递归下降法的思路过程。
  • 新增lr指令,通过Lexer和Parser进行递归下降实现。
  • 新建了两个类,整体架构无明显变化。

    Junit心得体会

    收获

    在经过历次Junit测试以及优化后,我对其作用有了更深的体会。一方面它可以帮助我们进行测试找到bug,对每一个方法进行全面的综合测试能实现高效的纠错;另一方面为了提高覆盖率,我不得不对MainTool进行梳理优化,将不同的方法分离,这也使我的代码结构更加清晰。

    不足

    在Junit的实现方式上需要进行改进,在OOPre课程中我的Junit测试是通过构造样例运行不同的方法实现的,而较少的使用了assert断言方法,因此对于debug没有实质上的作用,这一点在OO正课中需要改正,同时对于Junit测试的实质理解不到位。

    OOPre学习心得

    1.

    在OOPre课程中感触最深的一点,就是中文用户名带来的bug。在历次作业中出现了诸如IDEA无法绑定gitlab、Junit无法进行覆盖率测试等问题,甚至相比于课程内容带来了更大的困扰,虽然通过使用git指令以及更改Junit存储路径等方法得到了解决,但并未从根本上去除隐患,同时也耗费了大量的时间。印象最深的一次是git推送文件不区分文件名大小写,导致debug两小时才找到问题所在,因此为了避免这种离奇问题的出现,一定要在寒假重装系统,这也告诫我们一定不要取中文用户名,它会在意想不到的时候带来惊喜。

    2.

    在OOPre中我深刻体会到了面向对象方法的简便性,它将代码进行封装而只留出接口,便于理解和进行分工。但是在代码编写的过程中我并未完全摒弃面向过程的思路,因此在某些方法的实现上仍有改进空间,需要进行完善。同时在迭代过程中进行了多次重构,可见代码架构仍需改进完善。

    OOPre课程建议

  1. 可以对于代码的架构给出一些指导和建议,便于同学们进行重构。
  2. 对于中文用户名问题给出解决方案,帮助部分同学减少无意义问题上的时间消耗。
...全文
51 回复 打赏 收藏 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

309

社区成员

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

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