OOPre课程学习总结

归去来兮女士的树枝 2025-11-17 23:04:58

OOPre课程学习总结

一、架构设计的演进

经过七次作业的迭代,我的项目形成了基于接口和抽象类的多层架构。核心是Usable接口统一管理所有可使用物品,下面分为Bottle、Equipment和Spell三个抽象类分支。Bottle包含各种药水瓶,Equipment下又分为Weapon和Armour,Spell包含治疗和攻击法术。这种设计让Adventurer可以用统一方式处理不同类型物品,同时引入Factory工厂类负责对象创建,避免业务代码中充斥switch-case。

在迭代过程中做了几次重要调整:1. 最初每种药水都完整实现导致大量重复,提取Bottle抽象类后,将通用的使用逻辑固定在父类,子类只需实现applyEffect()定义具体效果。2. Equipment的设计也经历了调整,发现Sword和Magicbook行为相似后增加了Weapon中间层,使武器和防具的区分更清晰。3. Spell采用了模板方法,在抽象类中固定使用流程,只留applySpellEffect()给子类实现,保证了所有法术使用的一致性。4. 第七次作业引入雇佣系统后,用employeremployees维护双向关系,判断上级关系时用递归配合HashSet避免环路,搜索所有下级时也用类似方式收集。

整个设计过程让我体会到抽象层次把握的难度,经验是发现重复时考虑提取抽象类,需要统一处理时考虑定义接口。职责划分也很重要,Parser只管解析和建立关系,Lexer只做词法分析,保持单一职责让代码易于理解和维护。

二、JUnit测试实践

要求method≥90%、line≥60%、branch≥60%,实际操作中遇到不少问题。最困扰的是本地与评测环境的差异,多次出现本地IDEA显示达标但提交后不通过。发现几个原因:1. 私有方法可能被单独统计。2. 边界条件需要专门构造测试。3. 异常分支在正常流程中难以触及。解决方法是系统化测试,每个公有方法至少两个用例,用等价类划分确保每个分支都覆盖到。

实践中还遇到一些具体问题:1. 过度使用assertTrue反而降低覆盖率,改用assertEquals验证具体值后情况好转。2. 最初测试用例间有依赖导致单独运行通过但整体运行失败,后来确保每个测试都独立初始化对象。3. 雇佣关系需要构造多层级结构,写了helper方法快速建立测试树来充分测试递归逻辑。写测试的过程中发现了代码中的bug,也促使我把复杂方法拆分成更小的单元,提高了代码质量。

三、面向对象思维的转变

3.1 思考方式的改变

最大的收获是思维方式的转变。以前写C是"这个功能需要哪些步骤",现在是"系统中有哪些实体,各自负责什么"。实现use指令时,不再是顺序执行一系列步骤,而是Input协调、Adventurer找物品、各物品类型通过多态实现各自逻辑。这种设计使得添加新物品类型只需创建新子类,不用修改现有代码。

3.2 抽象能力的提升

面向对象的核心是抽象。设计类时思考的是"这类事物的本质"而非"具体对象的属性",Bottle抽象出的是所有药水的共性,具体效果留给子类。递归下降的实践加深了对"局部视角"的理解,Parser中每个方法只关注当前层级,通过相互递归调用自然构建出完整逻辑,这种分而治之的思想贯穿整个面向对象设计。

3.3 封装的意义

实现雇佣关系时理解了封装的重要性。通过方法管理属性而非直接暴露,可以保证对象状态的一致性,比如hire()fire()保证双向关系同步,takeDamage()控制血量下限并更新死亡状态。

四、课程建议

建议一:补充Java语法特性的系统讲解

课程主要通过作业学习Java,但缺少对语言特性的系统训练。抽象类、接口、继承、多态等概念都是遇到问题可能是在对于概念理解不透上,可以布置一些简单的小project让我们先适应新来的概念,再写大型的项目。

建议二:设计递进式的架构训练

现在的作业缺少架构设计引导,很多人前期设计不好导致后期重构困难。建议增加小规模的架构练习作业,比如专门训练如何用继承消除重复、如何用接口实现多态、如何用工厂模式创建对象。这些基础训练可以帮助我们在正式作业中少走弯路,而不是做完几次作业后才恍然大悟应该怎么设计。


OOPre让我真正理解了面向对象不只是编程技术,更是一种思维方式。从最初的模糊认识到现在能够设计出清晰的系统架构,虽然过程充满挑战,但收获巨大。感谢助教们的耐心答疑,期待正课中继续深入学习!

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

270

社区成员

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

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