2023 BUAA OOPre 结课总结

一、作业最终的架构设计以及在迭代中的架构的调整

  • 本次作业我最终采取了如下的架构设计:
    最终设计架构

    • Main 类对输入指令进行解析,根据指令的类型 type 进行分支选择,同时在宏观层面上管理 Commodity、Adventurer、Shop、FightLog 等类与接口,用于冒险者的创建及相关操作、商店管理、对战日志管理等
    • Commodity 接口用于统一管理冒险者及其所拥有携带的物品、雇佣的冒险者等,便于价值等相关计算。
    • Adventurer 类用于实现冒险者对象,将所有关于冒险者的操作都封装成为 Adventurer 类中的方法,管理其所拥有的 Bootle、Equipment、Food、Bag、FIghtLog 对象
    • Bag 类作为冒险者的背包单独封装,实现冒险者与携带、使用物品相关功能的方法
    • Bottle、Equipment、Food 类将对物品层面上的操作进行封装,同时根据计算方式等微小区别将 Bottle 与 Equipment 各构造了三个子类,以便于相关计算计算
    • FightLog 和 MDate 类用于构造战斗日志和日期的对象及其相关运算
  • 在一次次迭代中,上述架构最初只有 Main、Adventurer、Bottle、Equipment、Food 类。在需求增加后,增加了相应的 Bag、FIghtLog 等类,同时由于 checkstyle 中对于方法行数的限制,将 Main 类中所有对于某一特定冒险者的操作全部封装进了 Adventurer 类中,使得 Main 类中只进行 冒险者与战斗模式的相关管理,提高了代码的封装性。在增加了雇佣关系以及价值计算后,又引入了 Commodity 接口对所有价值体进行管理,简化了价值的相关计算。同时根据 Bottle 与 Equipment 种类的增加又构造了许多子类,以实现对所有 Bottle 和 Equipment 的统一管理和分别计算。


二、使用JUnit的心得体会

  • JUnit 最大的优势在于能够绕过繁琐的程序步骤,直接针对每个方法本身进行数据的输入与测试、对于对象或方法中的某些变量进行检测,同时可以在代码的增添、修改过程中自动、可重复地进行检测,相较于一般的调试功能节省了大量的调试时间,提高了效率同时也能更快地定位问题。
  • JUnit 使用覆盖率运行这一特点让其功能更加完备。在覆盖率的指导下,我们可以获取测试数据覆盖到的方法与代码段,对于没覆盖到的方法与代码段也能有的放矢地针对进行测试数据的增删与修改,使得方法与代码段的功能测试更加全面,减少了测试数据不够强、一些特殊情况没有考虑到所导致的错误,显著提高了代码的质量与可维护性。

三、学习OOPre的心得体会

  • 在学习面向对象语言之前,虽然对于面向对象思想有所了解,但对于封装、继承、多态等思想没有很深刻的认识,但是由于缺少实际经验,对相关思想的具体表现了解不深,导致在前期作业完成时,仍有着不少面向过程编程思想的残留,导致了最终架构中 Main 类、main 函数中结构庞杂等问题。
  • 在随后的学习中,我渐渐学会了将 Main 类中的操作封装放入其他实体类中、使用接口管理不同对象种类、构建子类与继承关系等,把原来通过复制粘贴实现的代码段提炼封装成方法,有效减少了方法行数,提高了方法的复用率,才有了一点封装、继承、多态的影子。我的代码也因此更加工程化,更易维护与扩展,一些因遗漏而产生的低级错误也因此大幅减少,在后续的迭代过程中不再需要对已有的方法与结构进行较大改动,只需新增相关的成员变量与方法等,真真切切体会到了面向对象思想在项目编写、扩展、调试的巨大作用。

四、对oopre课程的简单建议

  • 建议把输入输出处理与封装的部分的教学提前,以免迭代几次之后难以修改
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值