2023面向对象先导课程总结

倪宇轩 22371305 学生 2023-11-10 01:51:42

架构设计

整体划分图

img

简要说明

  • Adventurer 模块中含有对单个adventurer进行操作的所有功能与属性,如冒险者的药水瓶Bottles、装备Equipment、食物Food、以及冒险者的背包Package和战斗日志FightLog。当冒险者执行携带Carry指令的时候,将物品复制一份进入背包。同时BottlesEquipment模块通过扩展是实现了模块的细化。
  • Shop模块作为一个单独的商店模块,拥有自己的记录数组和处理方式。
  • Operation模块是Main中直接调用的模块,根据从输入端口读入的指令的第一位数字分析指令的类型,并且实现对应的操作。同时,Operation中设置了AdventurerList,直接管理所有的冒险者。
  • Main中只负责读入输入窗口内的内容,并且将输入的内容放入数组中,给Operation指令。

在迭代过程中的架构调整

整体来说,在整个设计流程中,对模块化的操作进行的比较好,整体的模块并没有因为类的行数超出或是函数行数超过限制而发生非常大的变动。

  • 第一、二次开发作业中,实现从无到有的实现,增加了Bottles,Equipment,Adventure等模块,并且实现了简单的功能。
  • 第三次迭代开发中,引入了正则表达式的解析,作者是将其放在Operation之中,但现在回过头来看,应该将输入解析单独作为一个类进行封装可能会更加合理些。
  • 第四次的迭代中,引入了继承的概念,通过继承的概念,让一个类能继续细分为多个子类,但同时多个子类又能维持父类的功能。同时,引入了接口的概念,让不同类之间的共同特性更加突出,更符合模块化的思路构建。
  • 第五次迭代中,引入了工厂的概念,工厂能进一步地细分模块,同时建立起模块之间的联系,更加结构紧凑。

使用Junit的心得体会

  • Junit其实本质上就是一个对于每一个函数自己写的一个小测试,虽然说是有一定的麻烦,但是从工程建设的角度上看,Junit还是对整个工程的架构有很大帮助。最重要的一点其实就是检测每一个小函数与自己设计的想法是否符合。
  • 一方面来说,通过构造一些测试样例,的确能够通过Assert断言来判断出是否函数出现bug,不需要面对整个庞大的工程一个个看;纵使是Assert断言的actual写错了也无伤大雅;但是另一方面,Junit的测试样例毕竟是自己捏造的,数量与范围、精度等都比较有限,并且想要覆盖面增大的话,其测试代码的工程量是比较大的,因此Junit感觉只能测试一些显著的bug(?)。
  • 然后还有一点,就是测评机的对Junit的测试是通过调用函数算覆盖率,所以导致通过测评可能可以伪装。但是话又说回来,这样对自己也没啥好处,为啥要这样干呢?

学习oop的心得体会

  • oop最大的特点就是面向对象编程,而我们之前运用的方法基本上都是面向过程编程。这两者最大的区别是,面向过程编程着重考虑的是怎么从头到尾地实现这个过程的指令;而面向对象编程更侧重于对每一个类或者说是对象的封装,让每一个对象具有自己的属性与方法,在整体架构上更加具有模块化的思想。
  • 这两个方法适用于不同的需求。面向过程编程更适合于比较小型的程序,而面向对象编程适用于大型程序的开发,便于不同的设计者们交流。
  • 同时,这也是第一次实现了一个如此庞大的程序,总共加起来长度超过1500行(不包含测试代码),也让我感觉到了一步一步从零开始构建自己的程序的成就感。

对oop课程的建议

  • 因为大部分人之前并没有接触过Java语言,直接上来介绍可能速度有点太快了。比如第一次作业真的只能看着那个报错随便点点,根本不明白结构化的事情。所以我觉得可以拿出一节课详细地讲一下Java的语法。
  • 第二就是感觉课上有的时候讲的内容作业之中并不会用到,可以适当地提高两者的契合度。
  • 作业的复杂度可以更改一下,不要一上来就大动干戈emmm,刚刚了解Java需要一定的适应期,建议作业代码量循序渐进。
...全文
23 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

242

社区成员

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

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