OOPre最后的感悟

24373148-萧麟 2025-11-05 12:04:28

目录

  • 代码架构
  • 使用Junit的心得体会
  • OOPre感悟
  • 课程建议

代码架构

最后的代码框架:

img

迭代过程

每次作业更新时提出新的要求,都会发现有许多需求是当前的代码不能够很优雅地写完的,以下整个过程:

  • 第一作业时,我全放在MainClass里写(缺乏oo_check的捶打),由于main本身是static属性的,导致MainClas里的方法全是static,类只有很简单的AdventurerBottle,Equipment
  • 我开始意识到全部的代码放Mainclass里会不符合 oo_check 的要求,而且输入和处理杂在一起,无法写 test 代码,所以我使用了main的代理人Carry(一次重要的重构),所有要执行的操作在这个类里一次性完成,MainClass只需提供运行入口。
  • Bottle分为几种不同的子类,Equipment后来也换了,我发现同一个冒险者要同时管理 BottleEquipment,Spell,太麻烦了,因为我需要为他们创建几种功能相同但是不能重复使用的代码,所以新添了,FactoryItem类(第二次部分重构)来统一实现物品的各种操作。
  • 到这里整体的框架就差不多了,后续在这个基础上实现了 Employer 与_Employee_的接口,以及StoneTablet记录战斗支援,然后praselr实现批量雇佣。

框架总结(可以改进的地方)

  • 这个代码框架要完成作业的话确实够用了,但是达到优雅还差很远,有很多地方耦合度过高,比如Adventurer类与Item类之间有很多操作方法,引入一个背包来统一管理冒险者携带的物品(意识到这里的时候已经快结束了,想着凑合着用吧)。

  • 每一个子操作其实都可以是一个类,这样就降低了耦合度,实现开闭原则,只需要在不同的类里传递参数就好了(这样会很专业)

  • 选择管理容器很重要,前期不认识的时候我统一使用了ArrayList查找需要额外增加方法来支撑,但是后面的HashMap管理起来很方便。


使用Junit的心得体会

Junit 可以实现自我查找bug,也就是看看代码和自己预期的是否一样(通过assert)。

  • 完成整体功能后,去编写 Test 代码,可以提高代码的稳定性(提高自己对于代码的掌控欲),但是达到覆盖要求真是穷尽毕生能力。
  • Test 是针对于每一个类里具体的方法,你只要确保每一个小方法是符合自己预期的,那么最后综合在一起不会有太大问题。(这点真的很强大,大大降低了写完后只能干瞪眼找漏洞的无奈)
  • 其实 Test 不仅可以在交作业前使用,发现自己强测没过时也可以,当自己要看看是不是哪一步执行有问题时,只需要在 Test 里造一个对应的数据点,然后使用assert判断,这样就不用每次都去main里调试了。

OOPre 感悟

没想到能在一节课上学这么多东西(我同时选了JAVA程序设计),但在OOPre上学的东西已经足够碾压了(同样都是1学分)。在这个过程中,有三次让我领悟到了面向对象的魅力。

  • 第一次写类时。以往面向过程只管由输入到输出,中间一切都是手段,但是面向对象,每一个类都是有生命的,它有它自己的属性,它有它自己的运行法则,也就是每一个类都是独立的个体,不是任何人的附庸,所以你只需要设计每一个对象(感觉像是创造另一个世界)。
  • 看到Facctory类与Item类。没想到两个类可以对如此多的零碎的东西统一管理(就是通过同一个方法,可以获得不同的东西),这样写真的太简洁而优雅,马上把需要写很多方法的冒险者解救出来,自己的物品全都是Item,所以都是一样的。
  • 实现接口。接口感觉有点像一个副业,定义的类是一个人的话,其中的接口是其可以充当的职业,雇佣与非雇佣是一种职业,但是充当雇佣的不一定是一个Adventurer,也就是说其实接口是一个职业,但是不是只有一个类可以充当这个职业,而是很多类共有的。
  • 目前开闭原则不是做得很好,if与Instacne of 使用过多,所以不是抽象得很好,(感觉这些缺点要被留在正课里锤炼了)。

课程建议:

  • 每个数据点其实都可以给出来,毕竟没有数据点的debug太无头绪了(尽管debug是培养自己能力的过程,但是找了几个小时才知道自己范了一个不能提高自己能力的错误没有很多的成就感)。

OOPre真是绝世好课,总觉得能力肉眼可见的提升了,而且每次大家都会在群里积极讨论,互相交流,课程氛围这么好的课也少有了,感谢把讲课当成艺术的吴际老师与伟大的助教们。

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

309

社区成员

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

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