北航2023秋oopre总结与反思

张翼飞-22230622 学生 2023-11-04 15:47:22

这是本学期oopre的最后一次作业,回望本学期的课程,从第一节课什么也听不懂的新手小白到经历了前七次作业的洗礼后已经写出了几百行的关于冒险者的游戏的代码,我感受到了自己对于Java这门语言的了解越来越多,所以在此对这门课程做出一些总结与反思。

目录

 

一、架构设计

1、Adventure类

2、Bottle类(父)

3、Equipment类(父)

4、Food类

5、Bag类

6、FightLog类

7、Commodity接口

8、Shop类(单例)

9、Factory类(工厂模式)

二、架构调整及考虑

1、第二次作业

2、第三次作业

3、第四次作业

4、第六次作业

5、第七次作业

三、Junit心得体会

四、oopre心得体会

五、oopre课程建议


一、架构设计

1、Adventure类

这个类专门用来处理冒险者的行为,定义了冒险者的属性。因为作业主要围绕冒险者来展开,所以我的冒险者类写的比较长,比如对于药水、装备、食物的处理都是在冒险者类里实现,买东西与卖东西也在这个类里。

2、Bottle类(父)

这个类专门用来处理药水这个物品的行为,如在其他类获得药水的属性的get系列的方法,特别的,本人在刚开始的几次作业当中并没有给药水isempty的属性,但最后一次迭代作业不得不用(对于药水容积的理解不到位),所以最好还是早点加上。

这个类作为父类,其有以下子类:

  1. RegularBottle
  2. RecoverBottle
  3. ReinforcedBottle

这些子类继承了父类的属性,也会有自己独有的属性(ratio),主要方法是计算冒险者喝完药水后增加的体力。

3、Equipment类(父)

这个类专门用来处理装备这个物品的行为,如在其他类获得装备的属性的get系列的方法。

这个类作为父类,其有以下子类:

  1. RegularEquipment
  2. CritEquipment
  3. EpicEquipment

这些子类继承了父类的属性,也会有自己独有的属性(ratio、critical)。

4、Food类

这个类专门用来处理食物这个物品的行为,如在其他类获得食物的属性的get系列的方法。

5、Bag类

这个类专门用来处理冒险者携带的物品的行为,其属性为三个容器,分别为药水、装备、食物容器,其主要方法为在其它类获得这些容器的get系列方法。

6、FightLog类

这个类专门用来处理冒险者的日志的行为,其属性为日志的日期、事件、名字。主要也为get系列的方法。

7、Commodity接口

此接口用来定义价值体的getPrice方法,由冒险者、药水、装备、食物这四个类来实现这个接口。

8、Shop类(单例)

这个类用来处理商店这一个单例对象的行为,主要方法为计算目前商品的平均价钱以及一些属性的平均值。

9、Factory类(工厂模式)

这个类主要是用来创造一些对象,本人最后一次迭代作业没想太多,就用了简单工厂来实现。

二、架构调整及考虑

1、第二次作业

此次作业中加入了Adventure、Bottle、Equipment类

2、第三次作业

此次作业新加入了Bag类

3、第四次作业

此次作业新加入了FightLog类,在刚开始写这次作业时没好好读题,因为前几次作业的容器全是用HashMap实现,所以这次作业也没想那么多,也都用HashMap实现,写了一半才发现,作业要求日志要有时间顺序,进入战斗模式要有顺序,所以又改回了Arraylist。

4、第六次作业

此次作业新增了Commodity接口,关于装备的三个子类和关于药水的三个子类。在这次作业刚开始时,本人并没有对RegularBottle和RegularEquipent专门设置子类,但到后面还是想分清楚三种不同类别,就加上了。

5、第七次作业

此次作业新增了Shop类和Factory类。

三、Junit心得体会

其实刚开始对于junit比较抵触,认为没什么作用,老师还要求高覆盖率,所以刚开始junit比较简单,写的比较敷衍。但到第四次作业时,代码一直有几个点过不去,当时想着先写会junit,写完自己测试还真发现了好多bug,那时我就觉得junit还是有用的,只要写的将全部分支都覆盖到,就真的有发现bug的作用。自那次作业后,我就一直认真写junit测试,代码的正确率也越来越高了。

四、oopre心得体会

通过这次oopre的学习,我是真的认识到了面向对象与面向过程的不同。现在还记得在写数据结构大作业时,一堆函数,一堆for循环,我现在打开那个代码都有些地方看不懂,感觉特别的乱,思路不清晰。但是再看oopre的代码,就感觉是将一件事情分成了很多模块,每个模块各司其职,思路很清晰,每个类要做的事情很分明,所以看的很舒服。所以总的来说,面向对象的优点就是降低了一件事情的复杂度,提高了代码的可读性,写起来不会乱。虽然刚开始过渡的不是很顺利,但只要知道这两者的区别,知道每个类要做什么,就能在一次又一次的迭代中更加熟练,相信这次的先导课会对接下来的oo正课有着莫大的帮助。

五、oopre课程建议

1、我认为老师可以在上课的时候讲的再基础一些,大家刚开始对于Java真的是一点都不懂,第一次上完课后真是什么也没听懂,只好上网学了一些Java的基础知识,这才能看懂ppt上的代码,更别说自己写了,所以希望老师可以多讲一下Java的基础知识,教我们怎么写代码。

2、关于git知识希望老师可以在上课时演示一下,不然在课下自己弄太麻烦了,需要上网了解的太多,而且光看网上的文字有点难懂。

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

302

社区成员

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

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