2025面向对象程序先导总结

李亚骏-24373117 2025-11-05 16:36:16

架构设计

最终设计

Item类作为物品抽象父类,EquipmentBottle继承之,具体各自实现UseInterface来实现具体功能。Adventurer作为核心类管理冒险者的属性,状态,实现Employment接口管理雇佣关系与行为。AdventurerManger管理其相关关系。Fight类管理物品使用与战斗,DeadChecker作为工具管理死亡的判断与处理。

img


其中,Lexer,Parser,Expr,Term`类用于处理第七次作业利用递归下降,实现批量导入指令的功能。

迭代过程

初始设计

最初设计时,我仅设计了冒险家,装备与法术的类,使用AdventurerManger类管理所有指令。

工厂模式

img


抽象工厂模式

在后续迭代中,我利用工厂模式创建装备,药水瓶等物品,而不是在AdventurerManger类中完成物品的创建和添加。

背包管理

我添加了Item抽象类,使得装备,药水瓶继承物品类,便于管理冒险者的背包,管理拥有和携带,同时创建了可使用的物品的Use接口。

工具类

在第五次作业,由于输入的处理增加,后来我使用单独的类来处理输入,简化了主类的代码。随着迭代,我再实现了战斗相关事件的处理类Fight,以及增加辅助的工具类。
在后来的迭代中,我为冒险家增加了雇佣关系相关接口,完成了树型数据结构来存储和维护上下级,盟友的关系,运用观察者模式,基本实现了课程要求的全部功能。

优化

作为最终设计,其实我的作业仍然有优化的空间,例如将共同的方法抽象提取出来,更多利用java的多态特性,将重复的辅助代码抽取成工具类,删除不必要的方法,简化代码等等。


使用JUnit的心得体会

JUnit作为一个Java语言的单元测试框架,可以对java各类作单独的测试,可以十分方便的对java语言实现自动单元测试。在使用中,我感受到他的几大优势:

  1. 能够自动化执行测试样例,利用assertXX语句,对运行结果下断言,通过与自己预期结果的对比快速发现代码实现与要求的差异,实现即写即测。
  2. 隔离性测试,对每个类的各个方法可根据需求作单独的测试,不会影响其他方法的测试,也有利于定位Bug的位置。
  3. 使用友好,集成在idea中,并且能一键测试,展示覆盖率,便于直观了解测试情况。
    在利用JUnit的过程中,一些在之前可能需要繁琐测试的简单Bug很容易的被我在写代码的阶段就解决了比如数值的计算,功能遗落,输出不符合要求。当然,较为隐蔽的Bug需要的测试也更加复杂,我的Junit代码写得挺多,花的时间也不少,不过能直接通过中测和强测的次数也多了。

学习OOPre的心得体会

学习面向对象编程使我掌握一种新的编程范式,更使我尝试掌握了抽象设计思维。与面向过程不同,面向对象要求我转变为自底向上的设计者思维。特别是抽象思维的体现,在开始编写具体的功能前,我需要先思考对象间共性与个性。尽管最初不习惯,但是当我较多的掌握了这种思想,例如抽象类,多态的使用,我觉得在代码的编写阶段需要思考的反而少了,能够专注与单独的逻辑的实现,而又能将各种对象的行为表达出来,十分优雅。通过该课程的学习我的工程化和结构化的思想也得到很大的提升,期望对OO正课有所帮助吧。


对OOPre课程的简单建议

  1. 在功能要求时加上一些例子,使得要求更利于理解
...全文
35 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

228

社区成员

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

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