2025OOpre总结

唐子聃_24373085 2025-11-17 13:06:44

2025面向对象程序先导课程总结

代码整体架构如图

img

具体架构解析

主类

Main 类作为整个程序的入口,负责对于输入指令的读入与类别判断

工具与管理类

Handle 类针对 Main 类处理得到的不同类别指令实现不同的行为,同时该类也起到管理冒险者角色与冒险者之间关系的作用

Factory 类负责进行物品的创建,在迭代过程中的 工厂模式 引入

实体类

Adventurer 类包装冒险者的各种属性与方法

Item 类, Bottle 类等等物品实体类采用继承+接口的模式,Item 类为所有物品的根类,由多个不同子类继承,同时 Use 接口类用于实现不同物品的使用方法

迭代过程心得

第三次作业

主要是进行了代码量上的提升,第一次引入了类的继承和接口的概念,在此次作业中出现了方法行数过长的问题,原因在于将所有输入的指令全部堆在 Main 类中的同一个方法类进行解析,于是考虑将输入指令解析的部分单独拆出来,引入了新的 Handle 类专门对输入的不同指令调用不同的方法处理

第五次作业

这次作业教程中给出了容器类的概念,但实际上我在第三次作业中就已经引入了相关容器负责物品的管理。而第五次作业教程提出的 工厂模式 对我的观念有较大的影响。在本次作业中,我参考 工厂模式 的思路,对代码再次进行了重构,将父类变为抽象类,将所有物品的创建逻辑统一在 Factory 类里面管理,一改之前直接使用new方法创建对象的方式,后续如若需要拓展各种物品属性与创建方式,只需要进行 Factory 内部的修改,保证了良好的可扩展性,这种“高内聚,低耦合”的设计思想在CO课程中的模块设计也有体现,是一脉相承的

第六次作业

这次作业引入了 观察者模式 ,在指导书中定义是这样的:它定义了一种一对多的依赖关系,当一个对象的状态发生改变时,其所有依赖者都会收到通知并自动更新。作业中通过引入了援助机制来考察对于这种模式的掌握。这意味着我们需要在各个冒险者中建立一种关系,而此前引入的 Handle 类能很好地胜任这个工作,在我的代码中,冒险者之间的上下级关系是通过邻接表实现的

第七次作业

这次作业迭代规模较小,主要是基于第六次作业的冒险者雇佣关系,引入了新的关系建立方式,lr指令批量导入雇佣关系需要通过递归下降的方法实现,本质是考察对于输入字符串的处理,按部就班进行相关功能添加即可

Junit心得体会

OOpre课程组对每次作业的Junit覆盖率都作出了要求,其意是在鼓励我们通过构造Junit测试样例对于自己代码进行全方面的检查,使用Junit进行测试,是Java与我们大一学的C语言很大的一个不同点。一改以前通过构造整体输入输出样例进行测试的方式(其实现在这么做也不是不行,但是的确非常费脑),以方法和类为单位编写测试用例进行测试对比。这种测试方式有一个很大的优点,就是方便定位代码中出现的错误,能够直接检查出是哪个方法或者哪个类出现了问题;同时,使用Junit测试能够更好构造边界条件样例,比如对于可能出现的数据溢出,正常构造样例难以覆盖到,而使用Junit能够构造出更细更强的测试数据;最后,Junit的测试代码在每次迭代的时候能够很大程度的保留,方便代码的长期维护开发。

课程学习心得体会

OOpre课程让我正式接触了继C语言之后的第二门编程语言Java,其编程逻辑与方式与C语言有很大的不同,最大差异就是 面向过程面向对象 的差异。尽管我C语言学习时间也不算太长,不能够说对它的设计思想有很好的掌握,但在大一阶段的学习过程中,我还是能够很明显感觉到C语言的编程思路是以解决问题为导向的,在设计程序的时候,我会更关注“怎么做”,设计什么函数,采用什么算法,程序设计的每一步都是围绕一个步骤来实现的。而在 面向对象 的思路下,我会更关注“是什么”,以对象为核心,搭建起一个良好可扩展的代码架构。

还有一个体会就是对于代码的长期维护,OOpre中将各种行为和个体封装为方法和类的好处就是方便长期维护扩展和管理。其一是每个类有各自的职责,代码逻辑的调整会更具针对性,改动规模小;二是private,public,protected这种设计实在巧妙,在编程时我就能体会到这种设计对于代码安全性与权限管理方面的极为重要的现实意义。

对于课程的建议

分一些课时给java语法的过渡(如果可以的话)

可以在指导书中添加更为详细的Junit的教程

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

270

社区成员

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

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