2025面向对象程序先导总结与反思

单科锦-24373487 2025-11-08 17:13:34

在完成OOPre课程的几次迭代作业后,我深刻体会到了面向对象编程的魅力。从最初的简单管理单个冒险者,到后来复杂的雇佣系统、战斗系统和递归下降批量导入指令,每一次迭代都让我对面向对象设计有了更深的理解。 以下是我对这几次作业的总结与反思:

一、架构设计

1. 最终架构设计

在最后一次作业中,我的程序主要包含以下类:

· Main类:程序的入口,负责读取输入并调用相应的处理函数。
· Adventurer类:核心类,表示冒险者,包含冒险者的属性(生命值、攻击力等)和行为(使用物品、战斗等)。
· Item类及其子类:物品的基类,衍生出Bottle(药水瓶)和Equipment(装备)等。
· Bottle的子类:包括HpBottle、AtkBottle等,每种药水有不同的使用效果。
· Equipment的子类:包括Armour、Weapon,其中Weapon又分为Sword和Magicbook。
· Spell类及其子类:法术的基类,分为HealSpell和AttackSpell。
· Factory类:工厂模式,用于创建各种物品和法术。
· Lexer和Parser类:用于解析lr指令的递归下降解析器。
· Usable接口:被药水瓶和法术类实现,表示可使用的物品。

2. 迭代中的架构调整及考虑

在最初的版本中,我试图将所有功能都放在Main类中,但这样太混乱了。于是随着迭代的进行,我不断实现更多的类,并将功能拆分到不同的类中。

· 第二次作业:实现了冒险者类、药水瓶类和装备类。利用容器,管理所有冒险者,并管理每一个冒险者所拥有的药水瓶和装备。
· 第三次作业:引入了继承体系和冒险者死亡的事件,将药水瓶和装备具体化,并引入了背包概念。同时,引入了法术,并通过接口Usable来统一可使用的物品。
· 第五次作业:细化了装备类型,将装备分为武器和防具,武器又分为剑和魔法书。同时,引入了战斗系统,并调整了属性计算方式。还引入了金钱系统和购买指令,增加了击败奖励。
· 第六次作业:引入了雇佣系统,增加了雇佣关系约束和援助事件。
· 第七次作业:增加了递归下降解析器来解析批量雇佣关系。

在迭代过程中,我深刻体会到开闭原则的重要性。通过面向对象的继承和多态,我们可以在不修改原有代码的情况下扩展功能。例如,新增一种药水瓶只需要新建一个药水瓶的子类,而不需要单独添加一个新的类别。

二、使用JUnit的心得体会

在开发过程中,我使用JUnit进行了单元测试。以下是我的心得体会:

· 单元测试的重要性:在面向对象编程中,一个类的行为可能很复杂,单元测试可以帮助我们验证每个方法是否正确。
· 测试驱动开发(TDD):在实现新功能时,我尝试先编写测试用例,再实现功能。这让我在实现过程中更加明确目标,并且最终代码的可靠性更高。
· 测试的独立性:每个测试方法应该是独立的,不依赖于其他测试方法。
· 异常测试:我学会了使用assertThrows来测试方法是否抛出了预期的异常。
· 覆盖率:通过查看测试覆盖率,我能够发现未被测试的代码,并补充测试用例。

三、学习OOPre的心得体会

1. 从面向过程到面向对象

在开始学习OOPre之前,我习惯于用面向过程的方式思考问题,即关注步骤和顺序。而面向对象编程要求我关注对象和对象之间的交互。从面向过程到面向对象,思考角度的转变也让我有了许多收获。以下是我总结的一些面向对象编程的好方法:

· 封装:最初,我经常将类的属性设置为public,后来我意识到这破坏了封装性(主要是因为会扣代码风格分)。因此,我通过将属性设置为private并提供getter和setter,来控制对属性的访问。
· 继承和多态:在实现不同类型的药水瓶和装备时,我通过继承和多态来避免大量的if-else判断。这使得代码更加清晰和易于扩展。
· 接口:通过接口,我定义了可使用的物品(Usable),使得冒险者可以使用统一的use方法来处理药水瓶和法术。

2. 设计模式的应用

在作业中,我使用了一些好的设计模式:

· 工厂模式:通过Factory类来创建物品和法术,将创建逻辑与业务逻辑分离。
· 递归下降解析器:在解析lr指令时,我使用了递归下降解析器,这让我对编译原理中的语法分析有了初步了解。

四、对OOPre课程的简单建议

· 增加前期对java语法的教学。
· 提供完整的测试点输入与输出信息(这对我们纠错有很大的帮助)。

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

271

社区成员

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

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