2025 OOpre课程总结

李梓源-24373135 2025-11-14 09:08:06

一、最终架构设计及迭代过程

架构图如下:

img

1.最终架构设计:

Main函数:程序的入口,读取输入的指令并进行解析,将解析结果传入Solver类做进一步处理。
Solver类:起到选择的功能,根据main函数传入的不同指令选择不同的处理方法,实现模块化的思想。
Adventurer类:是程序的核心,实现了多种功能,不仅存储冒险者的属性,还建立冒险者与bottle,spell,equipment等的联系,并实现对它们的操作。
Item类:是Bottle,Equipment两类的父类,存储两者的id,效果信息。
Bottle类:存储药水瓶属性特征,下分”HpBottle”,”AtkBottle”,”DefBottle”,”ManaBottle”四个子类。
Equipment类:存储装备的id,CE值等。
Spell类:存储法术的属性特征,下分”HealSpell”,”AtkSpell”两个子类
Lexer类等:实现对lr指令递归下降的处理。

2.迭代过程

第一次迭代
1.构建了程序的整体框架,实现了冒险者类,药水瓶类和装备类。
2.实现了aa, ab, ae, rb, re五条指令。

这次作业没有过于复杂的操作,主要是熟悉java的一些基本用法。
第二次迭代
1.学习了继承,建立了Item父类,实现了Bottle和Equipment子类对Item类的复用。
2.增添了ls, ri, ti, use四条指令。

这次作业对第一次作业进行了较大的调整,其中包括建立Item类和Bottle类,Equipment类的继承关系,对它们进行统一管理,以及实现冒险者死亡,可用物品的使用等。
第三次迭代
1.学习了两个新的容器HashMap和HashSet和工厂模式。
2.增添了bi和fight两条指令。

这次作业对上一次作业增添很多功能,包括对背包进行更多的限制,新增战斗功能以及建立金钱系统。上一次作业中,我是用take属性判断物品是否携带的,但是这次由于携带物品数量的限制不得不进行重构,建立了背包类。由于main函数较长,我将其中大部分代码转移到了Solver类中,程序的逻辑变得更清晰。
Bug:对移除背包中物品的条件判断错误,导致wa了一个点。
第四次迭代
1.学习了观察者模式,建立了雇佣关系,通过递归遍历实现对冒险者上级和下级的遍历。
2.增添了ar, rr两条指令。

这次作业和之前相比没有新增更多的类,主要操作在Adventurer类中完成, 核心是实现雇佣关系。由于新增的关系操作与之前的代码耦合度较低,实现比较顺利,但是use和fight函数差点超过六十行,可能是封装过程做的不够完善。
第五次迭代
这次作业相对独立,和此前没有较多关联,并且代码量比较小,主要是通过词 法分析和语法分析实现了lr指令,导出雇佣关系图。

二、使用JUnit的心得体会

以前没有接触过JUnit,感觉用JUnit测试和以前还是有很大的不同。在使用JUnit前,我一般都是手动构造数据,但是这样只能对程序整体测试,不能精确得到具体产生错误的位置,因此还要加断点或是在程序中加入print函数,较为麻烦。而JUnit改变了这一情况,它可以对程序的每个功能单元进行单独的测试,对于Java这种模块化的编程语言,用JUnit检测显然很适用。
第二点,相比于手动构造的临时数据,JUnit每次测试的样例可以保留,可以方便地复用,并且test文件独立于运行程序之外,结构清晰。
测试方法上,具体构造JUnit测试样例时,可以多取一些边界值,每次加入一部分测试点,这样更容易发现错误。

三、学习OOPre的心得体会

学习了OOpre课程,初步掌握了Java这一编程语言。在最初的学习中,我对Java并不是很适应,第三次迭代作业用了两天时间,而我了解到身边有些人只写了几个小时。仔细分析原因,我认为产生差距并不是因为程序的架构问题,而是在于以下两点。首先题目中有一个向上取整的符号被我当成了向下取整,导致debug花了很长时间,这告诉我正确理解题目的重要性。其次,那次作业中,在写代码之前我并没有建立程序的整体逻辑框架,如果我能用更多时间在心中规划,再落实到代码,应该会更快地解决问题。经过调整,我此后作业所用的时间明显减少。经历了七次作业,我认为面向对象和封装的思想对编程很重要。
首先,我认为最重要的就是面向对象的编程方法,这也是与此前用C语言编程的最大不同。通过面向对象,程序被拆分成一个个相对独立的模块,而不再需要在程序中一次考虑所有情况。在Java中,只需要建立不同的类,并处理好它们之间的关系,就能实现整体的复杂功能。封装也很有意义。通过封装,我们可以不关心模块的底层实现逻辑,专注于上层设计与调用。比如use函数,只需传入相关参数,就能实现使用物品的全流程。封装也可以提高代码的复用率。

四、对OOpre课程的建议

希望可以增加一些Java的基础学习资料,以帮助没有Java基础的同学适应初期课程。
感觉可以适当调整一下不同迭代作业的工程量,使代码量更均匀。

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

271

社区成员

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

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