OOpre 博客总结

24373369石若霖 2025-11-09 16:35:55

1.架构设计

用draw.io画的一个架构图

  • 物品道具类 :使用子类继承,统一特征,以减少代码行数

  • MainClass : 读入每一行指令,传递给Solver

  • Solver : 识别指令,找出指令中的adventurer,根据指令对adventurer操作

  • Lexer : 处理 lr 指令

  • RelationManager : 处理与关系相关的指令除、添加、查找关系

  • Adventurer : 处理所有冒险者的操作

  • Factory : 工厂模式,负责添加item,用于buy, add bottle等操作

  • Bag : 处理冒险者携带item方面的指令

        在最开始时,将识别处理指令方法放在主函数中,导致主函数过长,因此引入solver类专门识别指令。同时随着冒险者所拥有的装备不断增多,且都有相似特征(name, type, effect),遂引出总的ITEM类,管理能携带的物品,大大减少子类代码量。为便于统一地添加物品,使用工厂模式,减少adventurer类代码量(如buy, add bottle),且直观、便于统一管理。一开始adventurer使用ArrayList (因为最先介绍的ArrayList),后升级为HashMap,便于管理,寻找所有冒险者。在后来引入“关系”概念后,为方便管理关系,没有将关系类方法写入Adventurer,而是创建RelationManager类,传入adventurer进去,对其关系进行修改,也用于判断关系。

2.使用JUnit的心得体会

        JUnit与控制台调试最不一样的地方,就是其能模块化调试,隔离出一个环境,对某一类或方法进行测验,快速得到想要的结果,发现bug,同时也能保留构造样例的数据,便于排查漏洞。既可以从每一个小类入手,检验其功能的正确实现,也可以从大类入手,检验其一系列类与方法的正确性。与控制台输入不同,JUnit不用再一遍遍输入样例、运行程序、检查输出(且面对错误输出仍不知bug出现在哪儿),对样例状态assert,不用专门printf就能正确判断状态参数是否正确、方法是否真正成功运行。当然麻烦的点在于一遍遍创造样例,覆盖分支。

3.学习OOPre的心得体会

        面向对象,顾名思义就是面向对象。不同于C语言,java将需要处理的东西封装为一个类、另一个类,这种方法的直观优点当然就是降低耦合度,将类中的数据隔离隐藏,让整个代码模块规范化。当然,在添加了一系列方法后,我们仍然可以改动对象中的参数与状态,但我们的改动都是基于我们封装好的方法,在其他类中使用就会显得清晰直观、便于管理,不用再像c语言一样把所有的状态、方法都堆放在一个页面上。

        有了每一个类,当不同的类有着相似的特征时,我们就可以使用继承,使用继承的优点就是减少了每一类的代码量,对类的分类更加细化,实现代码的复用,同时也可以重写。

        同时课上也介绍了很多设计模式、原则、概念,如工厂模式、单例模式。这些模式or原则or概念的核心命题我感觉还是如何让代码更加直观、简洁、优雅、易读、便于管理。每一次开发迭代我们都要在上一次的代码上添砖加瓦,对于某一方法写得彻底、规范、模块化些不单单是为了这一次开发,更是为了下一次开发,感觉这也体现了面向对象,因为我们不知道下一次的需求是什么,所以需要将每一个方法写得规范、可复用。

4.对OOPre课程的简单建议

  • 在 架构方面 和 java中各种库的使用方面 多多提供一些指导
...全文
28 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

270

社区成员

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

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