OOPre课程学习总结

侯弘毅-24371360 2025-11-12 14:39:01

OOPre课程学习总结

一、架构设计与迭代过程

1.1 最终架构

img

整个冒险者管理系统可以分为5个模块:

1. 输入处理

MainClass, Lexer, RelationParser

  • MainClass:程序主入口
  • Lexer:词法分析
  • RelationParser:解析语法

2. 核心管理

AdvManage

  • 作为系统中枢,统一管理所有冒险者对象的生命周期
  • 协调各模块间的交互
  • 处理战斗系统、关系网络维护

3. 冒险者模块

Adventurer, Package

  • Adventurer:冒险者实体类,用来封装个人属性、物品管理、状态维护
  • Package:背包管理,负责装备的药水瓶、武器和防具的携带与使用

4. 物品系统模块

物品基类与具体实现

  • 基础抽象类:Item, Bottle, Equipment, Spell
  • 药水瓶系列:HpBottle, AtkBottle, DefBottle, ManaBottle
  • 装备系列:Weapon, Armour, Sword, Magicbook
  • 法术系列:AttackSpell, HellSpell

5. 工厂与接口模块

Factory, Usage, Observable, Observer

  • Factory:采用工厂模式,统一管理各类物品的创建过程
  • Usage:采用行为接口,标准化所有物品的使用方式
  • 观察者模式:通过接口实现状态监控和自动援助机制

1.2 迭代历程

第二次作业:

  • 建立了冒险者类的基本结构
  • 实现了药水瓶和装备的简单管理
  • 使用ArrayList容器管理冒险者

第三次作业:

  • 引入Usage接口统一物品使用行为
  • 药水瓶细化为四种具体类型

第五次作业:

  • 采用工厂模式统一物品创建逻辑
  • 添加金钱系统和购买功能
  • 装备系统细化为武器和防具

第六次作业:

  • 实现雇佣关系的层级网络
  • 通过观察者模式实现自动援助机制
  • 添加关系约束和状态检测

第七次作业:

  • 优化战斗系统的群体攻击逻辑
  • 完善状态管理和异常处理

二、JUnit使用心得体会

在C语言里,我习惯使用printf进行调试,然而这种方法明显效率不高,且局限性较大。

而使用JUnit可以很好的改进测试调试过程,在后续作业中,我通过边界测试发现了生命值归零时的状态处理问题,后面又通过分析覆盖率发现了雇佣关系解除时的异常分支未被覆盖的问题。

JUnit的使用可以充分考虑各种边界情况,大大减少调试时间。

除此之外,在编写JUnit文档时,可以便于我对题目中情境更深刻的理解,从而避免了读题造成的失误。

三、学习OOPre的心得体会

最大的挑战来自于与C代码思维方式的差别。在C语言中,思考方式是先做什么,后做什么。而在面向对象编程中,需要首先考虑这个系统中有哪些对象,以及它们各自有什么作用。

比如作业中,面向过程思维会让我设计一个战斗函数,依次处理各种战斗逻辑;而面向对象思维需要将职责分配给Adventurer、AdvManage、Equipment等不同的类,每个类只用实现各自的功能。

同时我也体会到了封装的理念。比如Package类,将背包容量管理、物品存取等细节封装起来,对外只提供简洁的接口。这样涉及可以让逻辑更加清晰,也方便后面的功能扩展。

在实现物品使用系统时,最初为每种物品都编写了独立的使用方法。引入Usage接口,之后无论什么类型的物品,都可以通过统一的use方法调用。这种设计在添加新物品类型时只需实现Usage接口,无需修改其他代码。

四、对OOPre课程的建议

增加整体架构设计分享:希望在课程初期就能提供一些优秀的整体架构设计案例,方便我们有一个初步的整体性认识。


完结撒花。通过这七次作业,我对Java语言编程和面向对象思想有了初步认识,但是工程化思维和系统设计能力还是相当缺乏。期待下学期的OO正课。

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

309

社区成员

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

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