2024级面向对象先导作业反思总结

周慧文-24373509 2025-11-17 01:26:28

面向对象先导作业

目录

  • 作业迭代过程及最终架构
  • 使用JUnit
  • 学习OOpre的心得体会
  • OOpre的建议

作业迭代过程及最终架构

最初架构

第二次作业结构较为基础,完成aaabaerbre五个指令即可。利用ArrayList来管理所有冒险者,并添加Adventurer、Bottle和Equipment三个类来完成基本的增删操作。

第三次作业

在第三次作业里就开始引入子类和接口了,同时在题目里引入“携带”“可用物品”“法术”等概念。
对于背包问题,利用ArrayList来管理携带物品并完成增删操作;“可用物品”则增设Usable接口来管理SpellBottleEquipment;同时添加HpBottleAtkBottleDefBoottleManaBottle四个子类继承Bottle
同时由于引入冒险者死亡概念,增设Adventurer类里的一个函数checkDead()即可。需要注意的是:冒险者的hitPoint值不能为负;每个指令(aa除外)执行前都需要先检查有关冒险者是否死亡;对于use指令较为特殊,因为需要检查两个冒险者,如果都死亡的话需要判断一下他们的顺序。

第五次作业

第五次作业主要引入以下概念:
1.背包的数量限制。针对这一问题,改用LinkedHashSet来专门管理药水瓶,因为便于管理进入背包的顺序,同时对于装甲、武器两类装备的携带,在Adventurer里添加String型属性,用来管理携带的装甲和武器的名称,并专门设置方法来找到携带的装备的className。
2.装备细化。添加ArmourSwordMagicBook作为Equipment的子类。
3.战斗系统。这个就比较复杂了,用ArrayList来管理被攻击的冒险者,并记录def的最大值,传入isfight函数,判断是否战斗成功,若成功则将被攻击者的hitPoint减去相应的值。
4.金钱系统。用factory。

第六次作业

第六次作业主要引入了雇佣关系,针对雇佣关系,在Adventurer里面新增几个属性:

private final ArrayList<Adventurer> directFollowers; //直系下属
private boolean hasBoss;
private boolean hasFollower;

再通过构造方法来实时获得直系下属和所有下属以及所有盟友即可。

第七次作业

第七次作业主要是lr这个指令,用到了递归下降解析,主要方法如下:
看到 ID → 调用 parseAdventurer
看到 ( → 调用 buildRelations
看到 , → 继续解析序列
看到 ) → 结束当前层级

最终架构

以上合起来就是最终架构,在此不再赘述。

使用JUnit

JUnit似乎是代码风格的另一种测试,需要保证覆盖率高的话就不得不需要打包一下了。

学习OOpre的心得体会

面向对象编程教会我一种新的思想:面向对象。在类里添加属性并构造方法,从而在main里new新对象,这是与C语言编程的一个很大的区别。
此外,这门课也教会我们怎样去开发项目,看到自己的代码一步步迭代到现在的一千多行(尤其是看到它强测全绿的时候)也是很有成就感的,hh~
总之是很有收获哒

OOpre的建议

建议只有一个,能不能把截止时间跟计组上机错开啊QAQ,不要周一晚截止哇,周一还有机组上机,孩子因为做oopre作业结果上机迟到了QAQ

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

270

社区成员

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

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