OOpre课程总结博客作业

付耀-24371170 2025-11-17 15:30:04

1.架构设计及迭代

img

  • 最终架构

我的项目最终形成了一个以Adventurer为核心,通过继承、接口和组合构建起来的清晰架构。

核心实体层:Adventurer类是所有业务逻辑的核心载体。
物品/技能体系:通过Item和Spell两个抽象基类,派生出具体的Bottle, Equipment, HealSpell等子类,利用继承来共享属性和行为。Usable接口则通过多态,屏蔽了物品和技能在使用上的差异。
创建与解析:ItemFactory工厂类负责所有物品和技能的创建,实现了创建逻辑的解耦。Parser和Lexer则专门负责lr指令的复杂解析,将特定功能模块化。
主控层:MainClass作为程序的入口和调度中心,负责解析指令、调用相应对象的方法。

  • 迭代部分
    最初,我几乎将所有逻辑都堆砌在MainClass和Adventurer中,Adventurer类内部充斥着大量的if-else来判断物品类型,代码显得臃肿且难以维护。

在引入继承和多态时。我将Bottle和Equipment抽象为Item父类,这极大地简化了物品管理。引入Usable接口后。Adventurer的useItem方法不再需要关心使用者究竟是药水还是法术,只需调用其use方法即可。这让我深刻体会到“面向接口编程”的优雅之处——它让代码的耦合度大大降低,扩展性显著增强。

最后的lr指令,引入Parser和Lexer,而不是在MainClass中用字符串分割硬啃。这体现了单一职责原则:MainClass负责流程控制,Parser负责语法解析。这使得代码结构更加清晰,即便未来要支持更复杂的指令,也只需扩展Parser即可。

2.JUnit使用心得

起初,我认为为每个方法编写测试用例是件繁琐的事。但随着项目复杂度的提升,JUnit的作用与强大之处逐渐显现。

最大的感受是重构的信心。当我想优化fight方法的逻辑,或调整其他方法的实现时,只需大胆修改,然后运行一遍单元测试。只要所有测试用例通过,我就能确信我的修改没有破坏原有的功能。即便出现问题,也能够方便的定位bug。

此外,编写测试的过程也强迫我思考代码的边界条件。为了覆盖各种情况,我必须考虑null输入、空列表、极限值等情况,这使得我的主代码更加健壮。JUnit不仅是测试工具,也能提高我的代码质量。

#3. 学习心得
从C语言的面向过程思维到Java的面向对象,最大的转变是学习到了封装 继承 多态的三大原则。

封装让我认识到数据和操作它的方法应该是一个整体。Adventurer的hp不应该被外部随意修改,而应通过takeDamage或setHp等方法来控制,这保证了对象状态的有效性。
继承则教会我如何抽象和复用。HpBottle和AtkBottle都是Bottle,它们共享了Bottle的通用逻辑,这正是DRY(Don't Repeat Yourself)原则的体现。
多态是整个OO思想的精髓。通过Usable接口,我实现了统一的调用方式,让代码更加灵活和通用。这是一种“依赖于抽象而非具体”的高层次思维。

#4.建议
希望能够更早引入设计模式的思想,增强讨论区的活跃度。

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

270

社区成员

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

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