OOPre博客作业--课程总结

吴彧恒-24376286 2025-11-11 15:12:29

OOPre博客作业

总览
整个项目围绕“冒险者-物品-战斗-雇佣关系-解析”五个维度迭代完善。本次博客作业涉及以下内容:最终的架构设计, 在迭代中的架构调整及考虑;使用JUnit的心得体会;学习OOPre的心得体会;对OOPre课程的简单建议。


最终架构设计

img

架构的细节设计集中在AdventurerAdventurerManagerFactory这三个类中,同时实现了Useable这个接口,便于对可用事物的使用。
1.Adventurer

  • 管理基础属性:hitPointatkdefmanamoney,以及携带的 BottleEquipmentSpell
  • 行为:添加/移除物品;携带与背包切换;使用可用物品;最终战斗属性计算;查找、统计。
  • 状态检测:死亡检测、携带数量限制(如药水最大携带数,装备互斥槽位:武器/护甲)。

2.AdventurerManager

  • 命令处理:增删关系(ar/rr)、解析关系(lr)、购买/移除/携带物品(bi/ri/ti)、学习与使用(ls/use)、战斗(fight)。
  • 战斗系统:区分武器类型(Magicbook 法术消耗 manaSword 物理伤害),根据 atk-def、法术 power、武器 ce 等综合计算。
  • 关系处理:盟友判断,影响是否允许协助或使用行为,对战时可指定单人或一组目标。

3.Factory

  • 统一创建入口:createBottlecreateSpellcreateEquipmentcreateItem,提高了项目的可扩展性。

迭代中的架构调整与考虑

架构调整主要集中在hw2、hw3、hw4中。

hw2:Adventurer 管理 BottleEquipmentAdventurerManager 处理冒险者与物品;Mainswitch 执行(aaabaerbre)。
以面向过程为主,Main很复杂。

hw3: Useable 接口登场,Spell 实现法术的统一使用;HpBottle 等引入使用行为。此时Main中处理命令解析十分冗长,于是利用AdventurerManager实现对命令解析的处理。

hw4:EquipmentWeapon 抽象,具体装备(SwordMagicbookArmour)分层。Factory 统一实例化入口,Adventurer 使用 Factory.createBottle/createEquipment 简化对象创建。

但目前架构仍存在一些问题,比较严重的就是将命令解析和关系处理全堆在了AdventurerManager中,AdventurerManager类实现了大量方法,正好500行(OOcheckstyleFileLength限制也是500行)。AdventurerManager类是明显可以优化的,将命令解析独立成一个类,AdventurerManager中只处理战斗系统和关系,这样虽增加了类之间的耦合,但极大缓解了AdventurerManager的负担。

使用 JUnit 的心得体会

JUnit测试以单元覆盖为主,极大增加了代码量,但是JUnit能很大程度上节省debug的时间成本。它能够具体检测各个方法是否存在bug,将具体问题集中在具体模块,测试的写法能直接反映并检验面向对象的设计是否良好。

OOPre心得体会

OOPre上,我不再像学C一样死磕一个函数的复杂逻辑,而是将复杂逻辑化为多个简单逻辑,每个部分各司其职,在高层的管理中,我不再关注各个部分内部的具体实现,仅在调用他们各自的功能相配合。

C进阶中对面向对象编程有初步的引入(C++的类、继承和多态),当时学的朦朦胧胧。OOPre这门课,我不仅学会了Java的基础语法,还理解了它以面向对象为核心设计,学会了用类、对象、接口来构建系统。在这门课上加深了我对类、继承和多态的理解,也让我对面向对象编程有一定的认识,让我学会设计不同的类,在类中实现各自的功能,通过 “继承” 复用父类功能,“多态” 实现灵活扩展,再通过一个管理类对各个类进行访问与管理,进而对要求的具体实现。

对OOPre课程的简单建议

希望推出git的详细教程,初学时很痛苦。

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

270

社区成员

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

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