北航OOP课程总结

北航OOP课程及作业总结

1.作业最终的架构设计, 在迭代中的架构调整及考虑

作业最终的架构设计。

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

由于要求的逐步增加,我逐步增加了backpack,shop,Battlelog,Solvelog,并建立了其中的关系,也对Bottle以及武器,进行了子类划分,等等。(接口未在图中画出)

考虑到覆盖率,将可以覆盖的ALLCase作为核心,main作为储存输入的类。同时考虑风格检测的要求,将各种指令分发下去,(slove1,solve2....slove23)这样,并且对于战斗日志这样处理要求繁琐的任务,划分更细。

由于整个架构中会有“一群冒险者”,“一个商店”,“所有的战斗日志记录”(图中的solvelog存所有的战斗日志和处理方法,应该在单独的Battlelog之上,画错了),他们互不属于,只是互相关联,即,一个冒险者有一堆武器,一堆食物,但他没有一个“单独”属于他的商店,他和商店是互相交互,平权的。。所以三者并列在顶层,仅在Allcase之下
底层的类,如一个战斗日志,一个食物,一个武器,本身只存基本的属性和方法,不存太多的方法,因为吃食物,用武器,是冒险者的事,所以应该在冒险者里写方法,才合适。

架构总体分析与反思

并未进行过太大改动,初始的思路还算合理清晰,总体还是在不断增加而已,每次迭代不需要进行大规模改变(最大的,对写过的代码的改动,类似于是食物什么的要加上价值了(指令358这样),所以输入改变了,并且food类什么的,要存一个价值的属性,其他基本没对写过的代码进行怎么改变,额外增量即可)。所以每次作业花在改bug的时间都很少,强测也比较幸运,没有出错过。

反思:对于方法命名的不够细致。食物的getPrice是返回食物的价值,冒险者的getPrice方法,是算出冒险者拥有的所有价值体的价值,但是冒险者应该有getMoney(即,冒险者要有两个方法,一个获得钱,一个获得所以价值),第一次写的时候未考虑到,使用时候直接根据名字就用了,没考虑到这个名字的方法可能不是想要的,导致写出了一个bug。

2.使用junit的心得体会

嗯,junit有自身的优势,对于单个方法的检测可以独立出来,而不是只能整体运行,对于已经通过数据,将错误具体到几个方法,只是在探究,是哪个方法出错的情况下,是比较好的。

缺陷:过于费时间。由于代码量的增大,我们不可能对每个方法都仔细写一个测试(这样的话,就会导致,写测试时间,远大于写代码时间,远大于自己改bug时间),只能先缩小范围,然后再肉眼观察,选择自己觉得可能出错的地方,进行测试。

3.学习oopre的心得体会(包括但不限于从面向过程编程过渡到面向对象编程的体会)

过渡体会

对于面向对象编程的体验,嗯,对于学了一年C的你航单身学生来说,这还是第一次手握那么多对象了解到如何处理各种对象之间的关系,总之,对于从C到Java的面向对象编程来说,思维上确实有了转变,写代码时候,考虑的是,我应该创建一个什么样的对象,有什么属性,这个对象放在什么之下,对象的处理方法应该在哪个类,,什么时候调用,“互相之间的处理”。

而不是像之前的面向过程编程,即使是数据结构的大作业,思维的划分方式主要在于,第一步,我应该先怎么输入,存在哪,然后进行什么处理,处理完放在哪,再怎么处理,再放在哪,这样。是按照逻辑上的单线结构进行划分的。面向对象编程,更像是多线,甚至网状,从顶层开始,我就划分为冒险者群,商店,和战斗日志群(以及相应处理)三个主线,这三个线再往下发展,这些对象互相之间当然经常进行交涉,,形成一条有主要枝干(冒险者),一堆侧枝(其他线),以及一群小枝干,叶子。这个角度来说,他算是一个有主次,有层次的扇形网状结构。(如果是没有主次 的网状,可能容易把自己绕晕)

课程体会

保证自己清晰的思路,理清主干思路再写,是比较重要的。

我们很难做到,全想好了,再一气呵成,全写完,这对于思维的要求是比较大的,不太可能在写之前就理清所有思绪,所有细节。我们要做的是“理清主干”,我想干什么,比如,我要有shop类,它不属于单个冒险者,所以逻辑上应该放在顶层,(而不是和food并列),应该和冒险者群并列,他们互相交互。它要有储存购买记录,创建新商品,卖商品的功能。至于其他次要功能,以及方法如何实现,应该在写代码中去构建。。这样可以不至于写代码时候有多少停顿。

完全不怎么理思路,作业发下来,直接就是干,当然也不合适)会耽误时间在改bug。

清晰思路,减少bug,写之前尽量回顾下自己之前写的思路,一周前的代码,即使写的再清晰,也要看一下,才能想起自己写的是啥。然后保持清晰的思路去写。写的慢没事,只是打的慢,并没有思维上的长期卡顿,最后产出的 效果是比较好的。所以大部分情况下,作业都没有需要改多久的 bug,得以很快略过改bug环节,节省“巨量”时间,也没有陷入强测出错的巨大,嗯,愤慨。(相比于当天就肝完,第二天改很久的bug的话,是划得来的)

4.对oopre课程的简单建议

对Java基础语法的讲解要增加

跳过基础语法,直接讲面向对象编程,是否像是跳过c语言程序设计,直接学数据结构。即使有c语言的基础,两者的基础语法也是不完全一样的,对于前两节课,不知道,什么是“类”,什么是“方法”,包是什么,直接开始改语法错误,写程序,有些太过于重视学生自己在B站等平台看课自学的能力了。虽然c中学过hash,链表之类的,不过一些学生现在写一个普通数组,可能都会出语法错误的情况下(c和java的声明数组的方法不一样),写各种HashSet,HashMap,用的却非常的自然顺手,是否有些根基不稳。

同学们有C语言的基础,接下来只要花一点时间点明两者的各种语法差别,一些简单的java程序有什么,分别是干什么的 ,一个多类调用的java是什么样的。(第一次接触的程序,第一次写的程序,都是多个类的,可能会给刚学习的学生一种错觉,单个java类不能运行?)而如果不进行这些操作,不简单介绍,对没有基础的学生的时间耽误,是极其巨大的。

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值