OO Pre 课程总结

王琳皓-22373399 学生 2023-11-05 20:05:24

OO Pre 课程总结

一、架构设计

架构设计图:

img

在我的代码中,关键的类包括:

  1. Main: 接受输入,识别对应的指令,并调用Adventurer类和FightMode类的方法进行处理指令信息。
  2. Store: 与Adventurer类进行交互,并实例化新的 Bottle, Equipment, Food传给冒险者。
  3. Adventurer: 管理自己的价值体 Bottle, Equipment, Food, Adventurer, 以及战斗模式的方法。

迭代中的架构调整:

  • 随着指令数的增加,一个非常明显的问题就是在Main类中对指令的处理case语句分支急剧增加,导致很快便超出了codestyle的规定,于是我根据指令间的内在联系分成几个子方法,如把关于价值体处理的指令放在一个方法中。
  • 加入战斗模式:我增加了FightMode类来处理战斗日志中的正则表达式,为减少类之间的耦合度,把战斗日志的输入留在MainFightMode类只用来进行处理和调用Adventurer的方法。
  • 加入价值体接口BottleEquipmentFoodAdventurer这四种价值体的数据内涵和业务功能差别较大,核心是围绕其price建立统一的对象管理手段,通过建立接口实现了行为抽象层次
  • 加入单例模式的商店:商店有且仅有一个,采用单例模式保证不同冒险者访问的是同一个商店。

二、使用Junit的心得体会

通过使用Junit,从一开始的不适应,随着代码量的增加,我渐渐感受到了单元测试的重要性。Junit有效的帮我检查出一些低级错误,通过为每个方法编写测试,极大降低了bug的出现率。

一些经验(jiaoxun:

  1. 重视分支覆盖率:在这几次作业中,大部分bug都出现在我没有测试到的分支上,因此务必做好全面测试
  2. 可以用测试好的方法测试新方法:有时单独测一个方法可能不充分,bug往往出现在与其他方法的关联中,因此可以用之前作业测试好的方法来测试。
  3. 使用assert而非System.out来检验正确性System.out需要手动检查单元测试结果,随着代码量增加极易出现疏忽,因此可以用assert自动检查是否有错。

三、学习oopre的心得体会

学习Java是我从面向过程编程过渡到面向对象编程的开始,在之前的C语言中,我把所有的变量和函数堆到一个文件中,导致十分臃肿。

在oopre的学习中,我对面向对象的基本特征有了初步的认识:通过封装,可以让内部复杂性外部不可见,继承可以通过抽象层次来协同降低复杂性,多态可以通过多种形态来解耦复杂性。

我不仅学到Java的语法知识,还学到代码风格、测试的规范习惯,设计模式以及代码的合理架构。通过把一个复杂的问题分成几个类各司其职,培养锻炼了自己的代码思维逻辑。

目前还存在一些不足:各个类之间的分工不够明确,代码分配不均匀。有时为了更快的解决问题把几个类的工作放到一个类中解决,导致架构设计不够合理。希望在OO正课中能加深我对面向对象的理解! 😊

四、建议

  • 可以多增加一些关于设计模式、代码架构设计方面的教程/栗子,并在作业中提供练习。

最后,感谢oo课程组的辛苦付出,希望oopre越来越好!ヾ(≧▽≦)o

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

301

社区成员

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

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