2023-oopre结课总结

郭永康-22371214 学生 2023-11-08 14:48:21

设计架构

最终设计架构如下图所示:

img

img

从第二次作业开始,我们一共进行了五次迭代开发作业:

在第一次迭代式作业中,首次学习了对容器的使用和一些面向对象的基本实现,此时对读入的各个操作的处理全部存放在Main类内,导致看起来十分臃肿,这也导致了在下一次作业中的CheckStyle部分Main类方法行数过多。于是做出改变,Main类内只进行对输入的基本处理,对于不同的操作,则只将读入的字符串传入Operation类内进行分类,使用不同的方法解决。同样全部的Adventurer和战斗日志的容器也存放在Operation类内。

随着作业要求的操作不断增加,新增的方法和类不断增多,此时尚未考虑过代码的整体逻辑,只是遇到什么操作就增加什么操作,在原有代码上进行或多或少地更改,并没有涉及到整体架构的改变。

在引入继承和接口等概念之后,后续的操作涉及到比较多的架构调整,如模块的合并,父类子类、接口的实现等。引入价值体概念后实现了Commodity的接口,对不同类型的价值体进行统一管理;引入商店购买机制后,又将Food、Bottle、Equipment共同继承Product类,便于商店的管理(但最后发现似乎没必要)。在原有代码的基础上进行了共性提取,实现继承和接口并进行相应的重写,此时具有一定的结构性,但方法之间的引用仍比较混乱。

在学习了设计模式的相关知识后,意识到一种规范的书写形式,并尝试了使用,但在进行此部分的接口和继承时遇到问题,总体上并不熟悉,实现的效果也不是很突出。

最终的总体架构为:

  • Main进行命令行读入并将读取的字符型容器传入Operation中,进行不同的操作;
  • 定义Adventurer、Bottle、Food、Equipment、Bag、Store等基本类,对Bottle和Equipment,又拥有不同类别的子类;
  • Adventurer内存放拥有的不同Product和Commodity的容器,Bag内同样拥有不同Product的容器,对放入背包的物品进行管理
  • 四种价值体共同使用Commodity的接口,统一管理;
  • Operation中实现对全部冒险者和战斗日志的的管理;
  • Store全部使用静态类型的Store承担工厂职责,进行不同类型物品的生产;

junit使用心得

1.junit适用于对逻辑上比较大的错误进行检查,但当遇到比较微小的错误时,较小的测试规模可能效果并不会很好,此时使用junit的性价比并不高。
2.课程组要求的对于junit和覆盖率的要求,在撰写时比较耗费时间,但在对各个方法调用实现的过程中可以对底层架构进行简单的回顾,实际上后期的junit的编写对于debug所起的作用并不明显,个人数据的构造通常不具备debug的规模要求,并且很难做到面面俱到。
3.尽管junit编写的过程十分繁琐,比较考验心态,但是学会自行构造数据是十分必要的,尤其是在进入工作之后,并不会有课程组提供的评测机进行检查,如果自己编写的程序有问题,可能导致合作程序运行的崩溃,影响整个项目的进度。在此后的学习中仍要逐渐掌握这一技能。

oopre学习心得

经过九周的oopre的学习,已经初步掌握了面向对象的一些基本思想。在大一的C语言学习过程中习惯于面向过程编程,而面向对象编程这一思想为我打开了编程的一扇新的大门。

在之前的学习中,习惯于一个main走到底,最多也只会定义几个函数,在main函数内进行调用。这种线性的编程模式适合于关联逻辑较为简单,过程递进连接比较紧密的问题。其造成的结果便是当问题过于复杂时,就需要大量的代码和逻辑前后考量,尽管可以使用函数对功能进行封装,但无法实现真正意义上的逻辑分离,在解决这类问题时便比较困难。

面向对象为这种问题提供了一种新的解决方式,让我们脱离编程的单一视角,从多视角对一个问题解耦。模块化地将不同的部分分离,成为独立的个体,仅仅提供对外的调用接口,处理问题的过程对外不可见。这就在一定程度上降低了问题的逻辑复杂度,在编程的时候无需过度考虑问题执行的具体逻辑,需要做的是选择某一视角完善内部功能,将“不同视角”相互串联,形成有效逻辑,这也符合我们日常生活解决问题的思路。

在了解到设计模式的相关理念后,意识到面向对象编程中系统化、模块化、规范化的重要理念,掌握这一理念将对工程化编程带来巨大便利。这也是我第一次接触到有关编程“模板”的相关知识。

在历次迭代的过程中,每次作业开始前都会进行比较充分的思考,包括对方法的选择、整体的布局设计进行初步预设,这也帮助我在编写的过程中并不会出现过多的bug(出现的基本是打错单词这样的错误)。但是有时也会长时间停留在思考的层面,不敢动手去写,总觉得没有找到合适的方法,导致很多时间的浪费。这也对我在今后的编程中提出了新的要求,要做好时间的权衡,在今后的学习中不断改进。

此外在学习的过程中首次接触到了git的相关知识,也认识到了这是一个十分重要的工具,但在使用时并不熟练并且了解的并不深入,此后还需要进行更多的学习。

在debug方面,以后一定要避免ctrl c+v的出现,这不仅是代码风格不良的表现,更容易导致bug的出现!!!
coding的时候一定要全神贯注,稍不留神的手误(逻辑的漏洞、拼写的错误),就可能换来长达数个小时的检查(血的教训)!!!

对课程的建议

建议增加学分或平衡强度,因为每周投入的时间真的很多

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

301

社区成员

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

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