一、作业最终架构设计及迭代调整
1. 最终架构设计
采用面向对象核心设计,分为五大模块:
- 实体类:Adventurer(封装冒险者属性与行为,如战斗、使用物品)、Bottle(药水瓶基类,含 HpBottle 等子类)、Equipment(装备基类,含 Sword、Magicbook、Armour 子类)、Spell(法术类),实现数据与行为封装。
- 关系管理类:Employer(管理雇佣关系,判断上下级与盟友)、EmploymentRelation(存储单次雇佣关系),处理层级逻辑。
- 工具类:Factory(工厂模式创建药水瓶 / 装备,解耦创建逻辑)、Lexer(词法分析,处理 lr 指令字符)、Parser(递归下降解析,转换 lr 指令为雇佣关系)。
- 测试类:AdventurerTest、EmployerTest 等 JUnit 测试类,覆盖核心功能验证。
- 入口类:Main(解析输入指令,调用对应模块处理)。
2. 迭代调整与考量
- 初始迭代(1-2 次作业):仅实现基础实体类(Adventurer、Bottle、Equipment)与容器管理,满足物品增删,架构简洁以适配基础需求。
- 中期迭代(3-5 次作业):引入继承(装备 / 药水分支)、背包系统与战斗逻辑;新增 Factory 类统一创建物品,避免重复代码;Adventurer 类新增体力、魔力、金币等属性,添加携带、战斗、购买方法,确保功能扩展时原有代码低改动。
- 后期迭代(6-7 次作业):新增雇佣关系与援助机制,通过 Employer 类管理层级;添加 lr 指令解析,拆分 Lexer(词法)与 Parser(语法),保证复杂指令处理逻辑清晰,符合 “单一职责” 原则。
二、使用 JUnit 的心得体会
JUnit 大幅提升了代码可靠性与开发效率:
- 精准验证逻辑:通过 @Test 注解编写用例,可针对性测试核心功能(如 Adventurer 的战斗伤害计算、物品携带规则),快速定位错误。
- 保障迭代安全:每次代码修改后,重新运行测试用例即可确认改动未影响原有功能,降低迭代风险,尤其适合多次作业的迭代开发。
- 覆盖分支漏洞:借助测试覆盖率分析,能直观发现未覆盖的代码分支(如异常指令处理),减少潜在 Bug。
三、学习 OOPre 的心得体会
从面向过程到面向对象的过渡,是本次课程的核心收获:
- 思维转变:面向过程注重 “步骤执行”,而面向对象通过封装、继承、多态,将数据与行为绑定(如 Adventurer 类同时存储属性与战斗方法),代码模块化更强,更易维护。
- 设计模式实践:工厂模式(Factory 类)解耦物品创建,避免重复 new 操作;观察者模式思想(援助机制中下级对上级的治疗响应),让代码扩展更灵活,深刻体会到 “好设计降低迭代成本”。
- 迭代开发意识:每次作业基于前序代码扩展,需提前考虑可扩展性(如 Bottle 的 effect 属性预留,为后续使用功能铺垫),培养了 “长远设计” 思维。
四、对 OOPre 课程的建议
- 建议增加 1 节设计模式实战课,结合作业场景(如装备创建、指令解析)讲解模式应用场景,帮助理解 “何时用” 而非仅 “如何用”。
- 建议为 lr 指令解析提供更多调试案例(如复杂嵌套结构的 lr 输入与预期输出),帮助快速定位词法、语法解析错误。