OOPre 课程总结

24371308-张晨初 2025-11-06 14:14:44

OOP 课程项目总结

 

一、项目总体介绍

本项目是一个以 冒险者管理与战斗系统 为核心的 OOP 实践项目。
通过解析多条指令(如 aaabaelsusefightarlr 等),实现对冒险者、物品、法术及雇佣关系的管理。

项目使用 Java 8 实现,结构逐步演化为模块化、可扩展的面向对象系统。

整个开发共分为五个阶段:

  1. 基础物品系统
  2. 继承与接口结构化
  3. 装备细化与战斗机制
  4. 雇佣关系与援助系统
  5. Final:递归下降批量导入关系

二、架构设计与迭代过程

第一阶段:基础物品系统

目标

搭建最小可运行系统,实现基础的指令解析与物品管理。

功能

  • 通过指令:
    • aa {adv_id}:添加冒险者
    • ab {adv_id} {bot_id} {type} {effect}:增加药水瓶
    • ae {adv_id} {equ_id} {type} {CE}:增加装备
  • 每个冒险者拥有生命值、攻击、防御、魔力和金币属性。
  • 支持添加与删除物品(ri)。

问题

  • 不同类型物品的字段高度重复;
  • 冒险者类中需维护多个独立集合;
  • 缺乏继承与多态,代码结构较分散。

这一阶段实现了基础功能,但仍偏向于面向过程编程。


第二阶段:继承与接口结构化

目标

引入继承与接口,统一系统的逻辑结构。

改进内容

  • 抽象出“物品”的通用特征;
  • 建立统一接口,使药水瓶与法术具有一致的使用方式;
  • 指令 use {adv_id} {usable_id} {target_id} 不再区分类别,自动调用统一的使用逻辑。

效果

  • 冒险者可以以相同方式使用不同类型的可用物品;
  • 系统结构清晰,逻辑集中;
  • 为后续的战斗和扩展提供接口基础。

这是项目从“能运行”迈向“能扩展”的关键阶段。


第三阶段:装备细化与战斗机制

目标

使装备类型与战斗系统形成闭环,实现属性计算与交互行为。

新增功能

  • 细分装备类型:攻击类(如 Sword)、防御类(如 Armour)、魔法类(如 Magicbook)。
  • 支持指令:
    • ti {adv_id} {item_id}:尝试携带装备;
    • fight {adv_id} {k} {adv_id_1} {adv_id_2}...:与多个目标战斗;
  • 战斗中根据攻击、防御及装备效果计算伤害;
  • 战斗失败或死亡的冒险者标记失效,无法继续操作。

效果

  • 属性数值真正影响战斗结果;
  • 冒险者之间产生互动;
  • 系统从静态管理走向动态模拟。

这一阶段实现了“冒险者世界”的行为基础。


第四阶段:雇佣关系与援助系统

目标

让冒险者之间形关系,实现雇佣与援助逻辑。

新增功能

  • 新指令:
    • ar {adv_id1} {adv_id2}:建立雇佣关系;
    • rr {adv_id1} {adv_id2}:解除雇佣;
  • 同时引入雇佣限制:
    • 若被雇佣者死亡或尝试重复雇佣,指令无效;
    • 战斗与使用行为受关系约束,例如不可攻击上级或雇主。

效果

  • 冒险者间的关系由“孤立”变为“层次化”;
  • 行为逻辑与关系绑定,形成有规则的交互体系;
  • 系统复杂度显著提升但依然可维护。

这一阶段体现了“对象之间的组织结构”。


第五阶段(Final):递归下降批量导入关系

目标

支持 lr 指令,实现复杂雇佣关系的一次性批量导入。

内容

  • 输入形式如:

    lr (A(B)(C(D)))

    表示冒险者 A 雇佣 B 与 C,且 C 雇佣 D。

  • 系统通过递归下降算法解析括号结构;

  • 自动构建多层雇佣树,并更新所有对应的雇佣映射。

效果

  • 能快速导入大型关系图;
  • 解析逻辑与系统主流程解耦;
  • 完成从“单一操作”到“结构化导入”的最终扩展。

本阶段实现了系统的模块化与高级解析能力,至此整体功能闭环。


三、使用 JUnit 的心得体会

  1. 测试驱动开发的实践
    在每个阶段引入新模块前,先设计相应的 JUnit 测试,确保核心逻辑可验证。
    例如:测试 use 指令的生效、fight 的伤害计算、lr 的关系导入正确性。

  2. 测试即文档
    通过测试名称与断言,清晰说明每个功能点的预期行为。

  3. 边界与异常测试
    包括死亡冒险者、金币不足、非法关系等,帮助系统在极端情况下依然稳定。

测试让每次重构更有底气,也让代码更可靠。


四、学习 OOP 的心得体会

  1. 从“命令式思维”到“对象化建模”
    初期用函数控制流程,后期转向对象协作,让结构更自然。

  2. 继承与接口的真正意义
    它们不仅仅是语法特性,而是让系统能以“多态方式”适应变化。

  3. 模块化的威力
    当模块独立出来后,系统变得更清晰、更容易维护。

  4. 每次迭代都是抽象的进化
    从管理单个实体到维护整体生态,每一阶段都提升了系统的抽象层次。


五、对 OOP 课程的建议

  1. 课程初期
    初期希望能给予一些Java的入门资料。

  2. 关于作业方面

    希望前期作业能以Debug、填充TODO项等简单项,直接开始开发有些困难。

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

270

社区成员

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

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