301
社区成员
发帖
与我相关
我的任务
分享本学期oop实现了一个冒险管理器系统,支持冒险者创建、物品管理、战斗机制、雇佣关系维护等核心功能。架构设计严格遵循面向对象(OOP)原则,采用 “模块划分 + 职责单一” 的设计思路,整体分为 5 大核心模块,模块间通过接口协作。

(1)控制层:AdventureManager 作为 “中枢”(类似于co的CU),负责接收操作指令、校验参数、调用各模块完成业务,如战斗、物品使用,并处理结果输出。
(2)实体层:Adventurer 封装冒险者的属性,如血量、攻击力等,和行为,如学习法术、使用物品;HireRelationManager 维护雇佣层级关系,支持上下级查询、盟友判断。
(3)物品层:通过接口和抽象类定义物品行为规范,具体子类实现差异化功能,如 HpBottle 回血、AttackSpell 攻击。
(4) 工具层:Factory 统一管理对象创建,降低耦合;Lexer+Parser 处理复杂雇佣关系输入,即嵌套雇佣指令。
(5)入口层:Main 负责解析控制台输入,将指令传递给 AdventureManager 执行。
(1)面向过程编程的核心是 “步骤”,比如实现 “战斗” 功能时,会按 “计算攻击力→计算伤害→扣除血量” 的步骤写函数;而面向对象的核心是 “对象”,将战斗拆分为 Adventurer(计算攻击力)、AdventureManager(协调流程),每个对象职责单一,代码更易维护。
(2)封装、继承、多态的实际价值:封装让属性安全,如冒险者血量通过 setHitpoint 控制,避免直接赋值为负数;
(3)继承减少重复代码,如 Bottle 子类无需重复实现 getId、getEffect 方法;
(4)多态让代码灵活,如 HealSpell 和 AttackSpell 都实现 use 方法,AdventureManager 无需区分具体类型即可调用
本次作业中应用的工厂模式、单一职责原则,让我理解了 “设计模式不是炫技,而是解决特定问题的最佳实践”。例如 Factory 类看似增加了一层,但大幅降低了核心模块的耦合度,这是面向过程编程难以实现的。
初期因缺乏架构设计,直接上手写代码,导致后期出现 “牵一发而动全身” 的问题,如修改雇佣关系逻辑需改动多个方法。后期通过模块拆分和职责划分,代码的扩展性和可读性显著提升,深刻体会到 “先设计后编码” 的必要性。
1.建议增加 真实项目迭代案例”讲解,结合实际场景,让同学理解 “为何需要调整架构”,而非仅学习静态的设计原则。
2.建议在课程中加入 “单元测试实践指导”,提供更多针对 OOP 代码的测试案例,如如何测试抽象类、接口、依赖注入的模块,帮助同学掌握实用的测试技巧。