270
社区成员
发帖
与我相关
我的任务
分享OOPre课程学习总结
作业最终的架构设计及迭代中的架构调整
本次迭代作业我采用分层架构设计:
基础层:建立Bottle、Equipment、Spell等基础类,使用继承体系实现不同类型的物品,另外使用Factory统一创建对象。
核心层:Adventurer类承载核心业务逻辑,管理冒险者状态、物品、战斗等行为
使用组合模式管理各种物品集合
关系层:EmploymentTree实现树形雇佣关系管理,同时建立援助系统。
解析层:Lexer和Parser实现递归下降解析,处理lr指令,Main类作为总控制器,协调各模块工作。
Main类:入口
Equipment
├── Weapon
│ ├── Sword
│ └── MagicBook
└── Armour
Bottle
├── HpBot
├── DeBot
├── AtkBot
└── ManaBot
Spell
├── AttackSpell (攻击魔法)
└── HealSpell (治疗魔法)
Function
└── Equ、Bot、Spell
在迭代过程中,经历了一些调整 :
初期将所有逻辑集中在少数类中,后期按职责分离为物品、冒险者、关系管理等独立模块。
雇佣关系初期在Adventurer中直接存储上下级引用,后面引入了EmploymentTree专门管理关系,提高查询效率
指令解析开始时只是简单的字符串分割处理,后面引入完整的词法分析器和递归下降解析器,支持复杂嵌套结构
使用JUnit的心得体会:
在开发过程中,JUnit单元测试起到了至关重要的作用,对于复杂算法如雇佣关系检查、战斗伤害计算等,先编写测试用例明确预期行为,再实现功能代码,确保逻辑正确性。写完之后检查边界条件覆盖:通过JUnit系统性地测试各种边界情况,比如:冒险者死亡时的状态清理,援助行动,雇佣关系的各种情况等。
通过JUnit实践,我深刻体会到"代码未动,测试先行"的重要性,良好的测试是代码质量的基石。
学习OOPre的心得体会:
首先是过程式思维:关注"如何做",按步骤组织代码,其次是对象式思维:关注"谁来做",按职责分配对象。
初期倾向于将所有数据公开,随着项目复杂度的增加,逐渐体会到封装的重要性。通过私有和公共,有效控制了数据的修改边界,减少了意外的副作用。
在物品系统设计中,深刻理解了"优先使用组合而非继承"的原则。虽然使用了继承建立物品类型体系,但在核心功能实现上大量使用组合,提高了系统的灵活性。
对OOPre课程的简单建议
建议在课程中引入一些真实世界的面向对象设计案例,让我们了解如何将OOP原则应用于解决生活中的问题。
通过这门课程的学习,我初步掌握了Java编程和面向对象的思想,建立了设计思维,这将成为我后续学习和工作中的宝贵财富。