OOpre_总结

一、作业最终的架构设计

1、架构设计

Main : 指令处理Demon的入口。

Demon:1.读取指令,正则处理传入字符串数组,并分类指令,以及部分指令的实现。

2.其中包含advHMap(HashMap类)是用于储存所有的冒险者,logs(ArrayList类)是用于储存所有的战斗日志。

Adventure: 冒险者类,里面包含了部分指令的实现。

Log:战斗日志类,其中利用type(int)来区别三种不同的战斗日志,对于战斗日志内容的解析逻辑在Demon类进行

Shop:单例模式

Commodity:Adventure、Bottle、Equipment、Food类的接口,主要实现对价值的统一计算。

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

在hw6作业之前,我所有的指令读取、处理以及分类都在Main中进行,导致我的Main类高达300行。在阅读hw6给的改错代码后,我模仿它的架构,单独建立出一个Demon类进行指令的处理以及分类。

但是,目前我的Demon类行数也过多,我觉得我的层次化实现不够具体,有些可以另某个类单独执行的方法可以放在那一类执行,无需挤在Demon中,而造成各类长短严重不均的局面。

二、使用Junit的心得体会

在没有覆盖率要求之前,我走捷径(assert true),但也为我第一次要求覆盖率的作业付出沉重代价,记得那是ddl那天的下午,我速成构造test的方法,才赶在ddl前交上了。从那里开始我慢慢步入单元测试的正轨,学会如何构造特殊样例、尽可能覆盖所有的情况、对极端情况的检测。

但是在后期的各种覆盖率要求下,我的一些Demon类方法中包含Scanner,不知如何检测,所以branch、方法(这些类包含很多if-else语句)一直提不上去,也导致我大幅度调整代码,尽可能让包含Scanner的放在同一方法里,以多检测一些方法。

三、学习体会

在OOpre课之前,一位学长跟我讲过OO的一些类、方法等的实现,包括OOpre第一节课,吴老师向我们描述类与对象,当时我听的一头雾水,包括对于一些描述性质的符号(比如private,public,static等)更是觉得很复杂。

在第一次自己编写程序(也就是hw2)后,我对“对象”的理解才逐渐深入并领悟到面向对象和面向过程的C语言的极大区别。面向对象的“封装”以及可隐藏类中的部分属性、方法对之前只学过C语言的我来说,是一个全新的体验。封装可以减少耦合,高效利用代码行数,提高代码可读性,符合程序设计追求“高内聚,低耦合”的理念,并且可以实现类内部结构的自由修改,对属性、变量进行更精准的控制。以上虽然对我们现在已经是习以为常的事情,但是在我OOpre之前却是无法想象的。

同样的感觉发生在我学习接口与继承(hw5?应该是吧?),继承提炼多个类的重复部分形成父类,接口提炼了多个类共性的方法等,加大提高我代码的复用率以及灵活性。

我还想起最初还没有实现层次化的那几次迭代,我被CheckStyle一个方法不超过60行而折磨,当时把所有指令的实现都挤在一个方法里,后续学习以及迭代以及line的限制的意义也许就是在于教会我拆分,实现层次化,而且在学习过程中,我也深刻体会到这样更有利于代码的维护以及debug,也更有利于代码的可读性。

四、简单建议

希望能够注重检测Junit的编写方法的掌握,而非一味强求覆盖率👉🏻👈🏻

最后,要感谢OOpre课程组的老师和很耐心很负责的助教学长学姐们!!!

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值