总结与反思:OOPre给我带来了什么

郭灿超-24371169 2025-11-12 01:39:15

总结与反思:OOPre给我带来了什么


说在前面的话

经过了不到一学期的历练,这段oopre的长跑就要走向尾声了,我们那从零开始写的代码如今已经实现了颇为可观的功能,虽然我们没能真正实现幻想中那番剑与魔法的奇妙世界,但是跟随指导书一点点成长起来的“游戏”确实给我带来了许多收获和提升。趁着这第八次作业提交的机会,我也发表一下自己的理解体会。

“冒险者协会”的最终架构设计

从第二周就开始构造的“冒险者管理系统”是本次oopre贯穿始终的核心,我们像一个有规划的建造者,一周周有条不紊的完善这一系统,作为初学者,我自然没法写出多么惊艳简练的代码,虽然很冗长繁复,但还是把架构图放出来丢人现眼让大佬们过目

img

最初我们的任务只是处理冒险者(Adventurer)、其装备(Equipment)和药水(Bottle)的增删;接着我们引入了法术(Spell)并且加入了use指令,并通过新学的“接口”来将Item抽象出通用框架以适配更多对象;下一次任务中我们引入背包并细化了物品携带限制,引入战斗系统(fight),学习使用“工厂模式”来进行指令操作;紧接着我们的系统拥有了雇佣关系,在复杂的关系链处理下冒险者的攻击和增益不再盲目;最后通过学习“递归下降法”解决了一次载入多层雇佣关系的操作——随着每一次完成任务,虽然我有时只能获得部分分数,但是看着这出自我之手的逐渐完善的管理系统,我真切地感受到自己的代码水平和理解能力的提升,也很享受输入输出行间一个个冒险者的来来往往。
关于架构调整部分,首先想提一下Checkstyle,它像一个虚拟的老师,细心地为我指出每一处值得修缮的地方,指引我写出的代码虽然未必赏心悦目,却能让我自己一目了然;
其次是代码超行的问题,我曾多次遇到这种问题,解决方法便是将function中的代码拆分,变成多个function,也让我体会到这种改变确切能提高代码的可操作性。
最后,无论是“接口”还是“观察者模式”这些种种方法都让我眼前一亮并尝试投入使用,遗憾的是对于“工厂模式”(Factory)我并没有理解到位,最终也没能投入使用到代码之中。

使用JUnit的心得体会

课堂为了让我们更好地去做debug,推荐我们使用JUnit来测试自己的代码,在导入JUnit的代码中我们可以提供一些初始值(冒险者、物品之类)来执行各项指令,并通过assert和throw等指令来检测输出逻辑和输出结果。尽管这个过程略显冗长和麻烦,但是带来的测试效果是显著的。
另外,在我看来,JUnit在涉及到主函数的代码以及private性质的代码测试上很乏力——前者提醒我们尽量使主函数精简,后者我暂时还没想到解决方案(doge),如果随意将一些方法设置成public必然会导致不必要的麻烦。
或许JUnit还有很多强力的功能我没有发现,在今后的学习中我会尝试去优化使用的。

学习OOPre的心得体会

我曾经是一个单语言主义者,认为一种语言的精通足以解决各种编程难题,但是当我第一次接触“面向对象”并了解其内涵之后我屈服了——Java确实比C要适合这个功能。
Java和C比起来有很多明显的差异:首先我要提Java的函数功能,或者叫方法更合适,每个对象类都有自己独有的方法,或者私密或者可以被外部调用,这使得对象的管理和对象之间的交互变得轻松,这是C语言难以实现的;其次是Java代码的编写难度和测试难度都要低于C,特别是代码自动补齐功能,虽然vs中有对C的补充,但是对于Java的自动补齐功能用起来确实更为舒适(也可能是对于已经学过一门语言的我比较友善);最后是UI的问题,Java的UI比C语言要复杂的多,功能也更为强大,一学期下来其实我并没有学会多少,尤其是git bash的使用还仅限于登录。。。如果今后还要继续增进OO的技能,那我觉得还是有必要恶补一下的。
Java是一门很优秀的语言(发自内心)。

对课程的一些简单建议

实话实说,OOPre课堂上老师讲得非常优秀了,助教也很热心(叠甲)。虽然知道是我自己的问题,但是可不可以每次到截止日前一天通知一下,少交一次作业我真的好后悔呀!
没有其他东西了。感谢老师和助教一学期的陪伴!
...全文
28 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

270

社区成员

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

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