社区
2026年北航面向对象设计与构造
作业提交
帖子详情
2025 BUAA-OOPre课程总结
赵旭阳-24371381
2025-11-12 10:05:37
最终架构设计及在迭代中的架构调整
1.最终架构设计
经过历次的迭代开发,最终形成的代码架构如上,具体分析如下:
Main提供了程序的运行入口,而MainTool则将Main需要执行的操作转化为多种方法存储起来,使得代码层次清晰,每一个操作指令均有其对应的方法,便于进行分析和Junit测试。
Adventurer为冒险者类,是整个迭代作业的核心,对Package、Bottle、Equipment、Spell的操作均围绕Adventurer展开,用于存储每一个冒险者的属性特征。
Bottle为抽象类,下设HpBottle、DefBottle、AtkBottle、ManaBottle四个实例化子类,用于存储药水及其属性。
Equipment为抽象类,下设Armour实例化子类和Weapon抽象子类,Weapon包含Sword、Magicbook两个实例化子类,用于存放装备。
Spell为抽象类,包括HealSpell、AttackSpell两个实例化子类,用于存储法术。
Lexer及Parser用于lr指令进行递归下降操作,Lexer为词法解析器,用于取出下一个元素;Parser为语法解析器,是递归下降的核心。
不足之处
未建立诸如接口、工厂之类的架构设计,导致代码的可读性和封装性较差,各部分之间耦合度较高,对于各个类的职能分工不够明确,界限不清晰。
部分方法内部内容太多和冗杂,导致接近于60行,不利于更进一步的迭代进行。
2.迭代历程
第一次迭代(第二次作业)
本次作业核心知识点在于容器创建和ArrayList数组的使用,以及对输入进行解析。
需实现aa、ab、ae、rb、re五条指令,故创建了Main、Adventurer、Bottle、Equipment四个类。
整体架构较为简单。
第二次迭代(第三次作业)
核心在于继承与接口的实现,并设置背包对物品进行管理。
新增ti、ri、use指令,实现物品携带、使用与删除等。
对Bottle进行了细分,建立抽象类并设立了实例化子类,引入了Package对物品进行管理。将Main核心功能至于MainTool,但MainTool内部实现仍较为混乱,方法行数较多。
第三次迭代(第五次作业)
本次引入新容器HashMap与HashSet,并介绍了工厂模式。
新增fight指令和金钱系统。
将MainTool进行了重构,使指令的读取与实现放入不同方法,层次更加清晰。但未使用工厂模式,该部分掌握较弱。
第四次迭代(第六次作业)
介绍了观察者模式,以及接口的具体使用方法。
新增ar、rr指令,需实现冒险者雇佣关系的建立和援助功能。
本次代码架构无明显变化,但援助功能的实现放入了Adventurer,分工不够明确,需进一步了解观察者模式。
第五次迭代(第七次作业)
介绍了递归下降法的思路过程。
新增lr指令,通过Lexer和Parser进行递归下降实现。
新建了两个类,整体架构无明显变化。
Junit心得体会
收获
在经过历次Junit测试以及优化后,我对其作用有了更深的体会。一方面它可以帮助我们进行测试找到bug,对每一个方法进行全面的综合测试能实现高效的纠错;另一方面为了提高覆盖率,我不得不对MainTool进行梳理优化,将不同的方法分离,这也使我的代码结构更加清晰。
不足
在Junit的实现方式上需要进行改进,在OOPre课程中我的Junit测试是通过构造样例运行不同的方法实现的,而较少的使用了assert断言方法,因此对于debug没有实质上的作用,这一点在OO正课中需要改正,同时对于Junit测试的实质理解不到位。
OOPre学习心得
1.
在OOPre课程中感触最深的一点,就是中文用户名带来的bug。在历次作业中出现了诸如IDEA无法绑定gitlab、Junit无法进行覆盖率测试等问题,甚至相比于课程内容带来了更大的困扰,虽然通过使用git指令以及更改Junit存储路径等方法得到了解决,但并未从根本上去除隐患,同时也耗费了大量的时间。印象最深的一次是git推送文件不区分文件名大小写,导致debug两小时才找到问题所在,因此为了避免这种离奇问题的出现,一定要在寒假重装系统,这也告诫我们一定不要取中文用户名,它会在意想不到的时候带来惊喜。
2.
在OOPre中我深刻体会到了面向对象方法的简便性,它将代码进行封装而只留出接口,便于理解和进行分工。但是在代码编写的过程中我并未完全摒弃面向过程的思路,因此在某些方法的实现上仍有改进空间,需要进行完善。同时在迭代过程中进行了多次重构,可见代码架构仍需改进完善。
OOPre课程建议
可以对于代码的架构给出一些指导和建议,便于同学们进行重构。
对于中文用户名问题给出解决方案,帮助部分同学减少无意义问题上的时间消耗。
...全文
51
回复
打赏
收藏
2025 BUAA-OOPre课程总结
最终架构设计及在迭代中的架构调整 1.最终架构设计 经过历次的迭代开发,最终形成的代码架构如上,具体分析如下: Main提供了程序的运行入口,而MainTool则将Main需要执行的操作转化为多种方法存储起来,使得代码层次清晰,每一个操作指令均有其对
复制链接
扫一扫
分享
举报
写回复
配置赞助广告
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
BUAA
-
OOP
re-
2025
课程
总结
BUAA
-
OOP
re-
2025
课程
总结
BUAA
-
OOp
re-
2025
课程
总结
本文
总结
了
OOp
re
课程
的作业架构、JUnit测试体验和学习心得。作业采用分层架构,包括主类、解析类、冒险者管理类和工厂模式实现的物品系统,并通过迭代优化了类继承关系。作者分享了从面向过程到面向对象思维的转变过程,以及简单工厂模式的应用体会。文章还提出了增加设计模式实践环节的
课程
改进建议,认为理论结合实践能更好地掌握面向对象编程思想。(148字)
2025
-
BUAA
-
OOP
re
课程
博客作业
OOp
re学习JAVA语言,更多的是学习面向对象的编程思想一切皆对象Java 中的几乎所有元素都是对象。类是对象的模板,而对象则是类的实例。程序中的各种结构,例如数组、字符串、集合等,全部以对象的形式存在。通过封装继承和多态三大特性,实现模块化、可重用和可扩展的程序设计,带来了很大的灵活性。:让类的内部复杂性外部不可见。:通过建立类之间的抽象层次来协同降低复杂性。:类通过提供多种形态方法来解藕复杂性。
2025
-
BUAA
-
OOP
re-第八次作业-
课程
总结
本文
总结
了架构设计、JUnit测试和
OOP
学习的经验。架构方面,通过CommandHandler、InputProcessor分解功能,使用Use接口统一行为,增加Lexer/Parser处理复杂输入。JUnit测试帮助发现bug、增强重构信心并促进良好编码习惯。
OOP
学习心得包括从面向过程到面向对象的思维转变,以及通过抽象类Item和Use接口实现代码复用。建议
课程
增加简短代码示例和设计模式对比,以帮助初学者更好理解。这些经验展示了如何通过模块化、抽象化和测试驱动开发来提升代码质量。
2026年北航面向对象设计与构造
309
社区成员
1,265
社区内容
发帖
与我相关
我的任务
2026年北航面向对象设计与构造
2026年北航面向对象设计与构造
复制链接
扫一扫
分享
社区描述
2026年北航面向对象设计与构造
java
高校
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章