2024级OOpre课程总结

杜政远-24373220 2025-11-17 10:17:25

 

 

面向对象编程(OOP)是一种程序设计思想,它将程序中的数据和操作数据的函数封装在一起,通过对象和类来组织代码。在这学期的OOPre课程中,我不仅学到了OOP的基本理论,还通过具体的作业实践加深了对面向对象的理解。本篇博客将总结我在递归下降法实现、JUnit测试和从面向过程编程到面向对象编程的转变过程中获得的体会,并提出我对本课程的几点建议。

架构设计

 

2. 游戏实体和物品:

 

3. 战斗和关系管理:

 

4. 工具类:

 

5. 其他类:

 

整体架构概述:

 

在迭代中的架构调整及考虑

1. 初始架构的问题

最初的架构将所有的功能都放在了一个大的Adevnturer类中,导致代码耦合度过高,逻辑不清晰。随着功能的增加,这种设计逐渐暴露出问题,难以进行扩展和维护。

2. 架构调整

为了解决这个问题,我将程序分为多个模块,每个模块负责特定的功能。例如,Adventurer类专门负责冒险者的属性和行为,Item类用于管理物品,Relation类用于处理冒险者间的雇佣关系。通过这样的划分,每个类只处理自己的职责,程序结构更加清晰,易于扩展。

3. 递归下降解析器的优化

在实现递归下降法时,我最初将所有的逻辑都放在一个方法中,导致代码冗长且不易理解。后来,我将解析过程拆分为多个方法,每个方法负责解析特定的部分(例如,parseAdventurer()解析冒险者,parseRelation()解析关系)。这样的优化不仅使代码更简洁,还增加了可读性。

使用JUnit的心得体会

JUnit测试是确保程序正确性和稳定性的关键工具。在课程中,我通过编写JUnit测试用例来验证各个功能模块的正确性,这极大地提高了debug的效率与正确性。

1. 测试覆盖率

在编写测试用例时,我特别关注了方法、行和分支的覆盖率。通过设计多个测试用例,确保了代码中的每个分支和路径都被充分测试,达到了较高的覆盖率。

2. 调试与验证

JUnit测试帮助我在开发过程中及时发现了代码中的潜在问题。例如,在测试lr指令的解析时,我发现了对于嵌套括号的解析存在遗漏,经过修复后,测试用例通过了所有的验证。

3. 提高代码质量

通过JUnit测试,我不仅能够验证功能的正确性,还能帮助我发现潜在的边界问题。在编写测试用例时,我学会了如何设计合理的测试用例,并提高了代码的健壮性。

学习OOPre的心得体会

1. 面向过程到面向对象的转变

在课程开始之前,我大部分时间是用面向过程编程的思维来编写代码。面向对象编程给我带来了很大的挑战,但也带来了更高效的编程方式。特别是在设计复杂系统时,OOP让代码更加模块化和可扩展,全新的代码编写的思维方式也为我提供了一种全新的思考的方式。

2. OOP三大特性

面向对象编程的三大特性——封装、继承和多态,在本次作业中得到了充分应用:

3. OOP的挑战

尽管OOP提高了代码的可扩展性和可维护性,但在实际编码中,我也遇到了一些挑战,特别是在设计类的关系和确定继承结构时。为了避免过多的类之间的耦合,我需要在继承和组合之间找到平衡。

结语

通过本课程,我不仅加深了对不同风格代码的理解,还在实际编码中体会到了面向对象编程的强大。OOP不仅使我的代码更加清晰和可维护,还让我在面对复杂的程序设计时更加得心应手。在今后的学习中,我将继续巩固OOP的知识,并应用到更多实际项目中。

  • 1. 核心组件:

  • Main.java:程序的入口点,包含主方法,负责程序的初始化和启动。

  • Lexer.java:负责词法分析,将输入的文本转换为可以被解析器处理的符号(token)。这是实现递归下降解析器的一部分。

  • LRParser.java:递归下降解析器,负责解析由Lexer生成的token,并构建关系树或图结构,处理复杂的指令。

  • Adventurer.java:表示一个冒险者,包含如生命值、攻击力、防御力等属性以及相关的方法。

  • Item.javaBottle.javaAtkBottle.javaHpBottle.javaManaBottle.javaDefBottle.java:这些类表示不同种类的物品,主要是瓶子类,可能与生命、魔法或攻击等效果相关。

  • Weapon.javaSword.javaArmour.java:表示不同类型的装备,如武器和盔甲。

  • Battle.java:处理战斗逻辑,可能包括伤害计算、回合制逻辑等。

  • RelationManager.java:管理冒险者之间的关系(如雇佣关系或联盟关系),这是游戏系统中的重要组成部分,负责跟踪冒险者之间的互动。

  • AidCenter.java:负责管理治疗或帮助系统,提供给冒险者某些辅助功能。

  • Factory.java:这是一个设计模式实现(如工厂模式),用于创建像物品、装备或冒险者等对象。

  • MathUtil.java:包含一些数学工具类,用于战斗中的伤害计算或其他数值处理。

  • UseResult.java:包含使用物品或法术后的结果,如成功与否等信息。

  • RelationManager.java:管理冒险者之间的关系。

  • 模块化设计:系统通过将不同的功能分配到不同的类中(如冒险者、物品、法术、装备、战斗逻辑等),遵循面向对象的原则,每个类负责一个单一的职责。

  • 递归下降解析:使用LexerLRParser来解析lr指令,支持动态解析命令,比如用来加载冒险者之间的雇佣关系指令。递归下降解析器用于解析复杂的命令。

  • 游戏逻辑与关系管理RelationManager.java和战斗相关的类重点在于管理冒险者之间的复杂关系,尤其是雇佣关系。

    • Spell.javaMagicbook.java:管理冒险者可以学习和使用的法术,包括法术的效果、魔法消耗等。

    • 封装:通过AdventurerItemRelation等类的封装,使得每个类都专注于自己的功能,避免了功能之间的耦合。

    • 继承:通过继承,我可以在不同类型的物品(例如HpBottleAtkBottle等)中共享通用的功能,同时为不同类型的物品扩展特定的功能。

    • 多态:在处理不同类型的物品时,我使用了多态的特性,让代码更加简洁且具有扩展性。例如,通过多态处理不同类型的物品时,不需要修改现有代码,只需要添加新的物品类即可。

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

270

社区成员

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

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