OOPre学习总结

OOPre学习总结

总体架构

实现过程

在整个的实现过程中,经历多番调整修改,形成了最终结构。如下图所示。

顶层架构

其中Main是顶层架构,接受输入后,将所有业务交给Methods类去分类执行,在Methods中调用其余类,完成指令的要求。 Commodity是所有价值体的接口,Employer和Employee是作为接口,要求雇佣者和被雇佣者所要实现的方法。

对于Bottle与Equipment,其作为父类,每个下面继承三个子类。

Store作为单例模式,提供整个的商店功能。

反思总结

  1. FightLog可以作为只实例化一次,而后实现所有的功能,也可以将其变为单例模式

  2. 在Adventurer类以及Store类中,对于Food,Bottle,Equipment的部分方法相似度很高,如对于三者的删除(卖给商店),或许可以将此三者统筹于一个抽象类下,将代码合并简化。

  3. 在Methods类中,使用Consumer类,将所有的指令打包放入一个ArrayList中,通过下标即可访问对应的方法,省去switch-case语句,简化业务类,使其不超过60行。

  4. 将解析与处理数据分开,使得业务更加清晰。

Juint

合适的测试可以很好的发现代码中的bug

为什么要说合适的测试呢,因为过于简单的测试数据,没有办法测出问题。而过于复杂的测试数据,则会在找到bug修复bug的时候遇到很多困难。所以,要选择合适的测试方式。

  • 在测试的过程中要尽可能的覆盖所有情况,也要多调整前后顺序,测试,是否会因为先后的逻辑而出现问题。

  • 尝试使用断言来判断是否正确,虽然juint好像对assert的覆盖率会和本地不同

  • 不要总是依赖于测评机中所给的数据,尝试自己捏!!!

  • 测试的过程是也是个反复迭代的过程,在自己捏完数据测完后,先跑一遍,根据没有覆盖到的方法、分支,进行新一轮数据的捏造。循环往复,以达到测试的目的。

OO学习心得

面向对象

相较于面向过程,面向对象更多是从问题出发,看想要实现问题要求,需要什么样的对象,这个对象有什么性质需要这个对象有什么操作,从而去设计这个对象,以及对象的操作。从某种意义上来说,面向对象的过程相当于是c语言中的struct + function的结合。具体来说,令我感到最大的不同的是以下两点

关于值的修改

  • c语言中,只要是在这个变量的定义域内,便可以以任意合法的方法去调用、修改这个值。

  • 在面向对象的语言中,所有的变量值,都是封装在这个对象中的,是装在一个箱子中的,并不是对外开放,可以任意访问修改的。

操作方法/函数的“所属

  • 在c中,一个函数属于整个文件,整个文件都可以去调用它

  • 而在面向对象的语言中,能够调用方法的,只有对象或者是类

迭代过程

在写代码前,一定要对要实现的对象和方法的大体内容与功能有一个整体的了解,并且由此确定合适的架构,如单例、工厂、观察者等模式。

然后再将要实现的功能清楚的划分给不同的类(可以有不同的划分方式,但是逻辑上要合理,应用起来要方便)。比如我在设计的过程中,单独拎出来了一个Methods类,来专门处理输入输出,再调用下面的其他类的方法。

oo建议

问题:对于bug修复的整个流程不太清楚。

或许可以在进行像第一次和第五次那种debug的题目时,可以采取修复bug的形式进行提交,顺便熟悉修复bug的流程。(不过可能对于系统和助教不太友好)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值