Ender_hz 的 OOPre 心得体会

王安雨-24371521 2025-11-12 17:32:01

架构设计

img

迭代过程

hw3 中,结构上加入了 Item 作为所有物品的父类和 Usable 作为可使用物品的接口,实现上将原有的 ArrayList 迭代为 Map,提高了查找的效率;

hw5 中,结构上添加了更多子类(参考架构设计图左边部分),进行了少量重构,删去了 Usable 接口,(受 hw4 启发)将命令处理部分迁移至新的 Solver 类,便于管理和测试,同时将使用物品和战斗的静态逻辑置于 Interaction 类,实现上更新了携带物品的逻辑,使用 LinkedHashMap 容器实现效率较高的尾部插入,头部删除,任意访问和删除的操作;

hw6 中,结构上进行了大量重构,文件结构不再扁平化,而是引入了包结构,将物品相关类引入了 items 包,并在其中建立了 bottles equipment spells 子包。

JUnit

笔者使用 JUnit 的方法是:在 MainClass 类中预留一个从传入的输入输出流参数进行输入输出,在 JUnit 中设计样例输入输出并与程序的输出比较进行断言。

在设计输入输出样例时,不仅能够重新回顾对不同指令的处理流程,同时比较自己在程序中的实现,还能思考对各种极端情况的处理方式。

心得体会

由于之前有自己养成的习惯,所以开发流程可能跟其他同学不太一样:由于之前有使用 git 的经验,所以基本上全程都是使用 VSCode 里的 git 插件(除了一开始 git clone 的时候);由于之前习惯于使用 VSCode 所以没有下载 IDEA;等等。幸而在这些方面并没有遇到太大的问题。

不知道是因为有面向过程基础(信息竞赛)的关系,我对面向对象的接受速度还是比较快的。在此之前也曾对此听说过面向对象但是没有实际上手撰写过,现在也有了较为直接的认识(比如说 Minecraft 之前版本 .jar 文件里的一堆 .class 文件)。

两者虽然都各有用途,但是思路却不尽相同。以笔者朴素的认识,面向对象更像是各司其职,就像近期的 multiagent 一样,而面向过程就是一个流水线。两者在变量 / 对象等的处理上也有不同,但在我看来或许面向对象是更加符合刚接触这些概念的同学的直觉的(参考 swap)。

以及关于 Checkstyle,其(参考工程代码)对格式的要求可以理解,但是由于个人的代码习惯偶尔还是会写出连续的大写字母(比如 OOPre),但是也会开始在别的工程代码(比如 Verilog)使用不同的命名方式,如 UPPER_SNAKE_CASE snake_case PascalCase lowerCamelCase 等。

简单建议

更早引入效率更高的容器(如 Map);指导书的表述更清晰严谨(比如后面几次 power 的数据范围都没有了,对 corner case 的特判等)。

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

270

社区成员

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

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