OOpre反思总结


作业最终架构

如图

OOpre作业类图

迭代中的架构调整及考虑

  • operate指令执行调整:可以说是我花时间最久,改动最大的一次架构调整了。最初我使用if-else处理指令输入(因为switch-case要消耗更多行,所有没用),但是每次迭代指令种类都在增加,无法满足“方法不超过60行“的限制,最后是看了老师分享的博客以及自己学习了一下表驱动法,并用此方法优化了自己的代码。
    // 表驱动法
    Map<Integer, Function<ArrayList<String>, Void>> actionsMap = new HashMap<>();
    // 初试配置对应动作
    actionsMap.put(1, operate.getOp1());
    actionsMap.put(2, operate.getOp2());
    actionsMap.put(3, operate.getOp3());
    actionsMap.put(4, operate.getOp4());
    actionsMap.put(5, operate.getOp5());
    actionsMap.put(6, operate.getOp6());
    actionsMap.put(7, operate.getOp7());
    actionsMap.put(8, operate.getOp8());
    actionsMap.put(9, operate.getOp9());
    actionsMap.put(10, operate.getOp10());
    actionsMap.put(11, operate.getOp11());
    actionsMap.put(12, operate.getOp12());
    actionsMap.put(13, operate.getOp13());
    actionsMap.put(14, operate.getOp14());
    actionsMap.put(15, operate.getOp15());
    actionsMap.put(16, operate.getOp16());
    actionsMap.put(17, operate.getOp17());
    actionsMap.put(18, operate.getOp18());
    actionsMap.put(19, operate.getOp19());
    actionsMap.put(20, operate.getOp20());
    actionsMap.put(21, operate.getOp21());
    actionsMap.put(22, operate.getOp22());
    actionsMap.put(23, operate.getOp23());
    // 省略 null 判断
  • 指令输入处理和执行分离:这个是参考了PPT里给出的架构,用两个类MyScanner和Manager分别进行输入处理和执行(也是从这里开始真正领悟到了第一节课反复提到的”万物皆可为对象“的含义)。
  • 特别复杂的指令,如14号指令,将其根据步骤分成若干个函数,分步处理,结构更清晰。

使用Junit的心得体会

Junit能够很好地进行单元测试,检查每个方法写的有没有问题。遇到bug时,通过编写单元测试,可以更方便地定位错误位置。

讲真,最开始总感觉我的Junit没啥用,完全是为了覆盖率而编写测试代码。但是随着迭代,Junit真的帮我de出了很多错误,例如一些访问到空指针的错误,逐渐体会到它的妙用。不过我感觉我对Junit的使用还不太成熟,没有发挥它最大的作用,还有许多要反思的地方。以下是我使用Junit后的总结与反思:

  • 尽量不要使用Junit的输出人工判断对错,交给断言去判断。这是一个我没太注意的点,以后需要注意!
  • 编写单元测试注意代码覆盖率,尽量都测试到。
  • 考虑一些极端情况,如数据范围边界处。

学习oopre的心得体会

  • ”万物皆可为对象“!前面也提到过,老师第一节课反复提到的话我在经历了几次迭代作业后才真正体会到,尤其是调整自己代码架构的时候,经常会感叹”原来这也可以写一个类啊“。最开始几次的迭代,几乎每次都把代码大改了一遍,因为每次上完课都会觉得“自己之前写的什么玩意儿”>_<(泪目),虽然耗时特别长,但是在修改过程中还是挺有收获的,对“对象”的理解也更深入了,看着自己的代码结构逐渐清晰非常开心!
  • 代码模块化。跟第一条有相似之处,最开始我把很多东西都放在Main类里面,但是随着迭代,main方法越来越冗长,看着很不优雅(还有方法不超过60行的限制),所以不得不做出大改动。通过将处理过程分步骤,代码架构更清晰,debug的时候也方便定位错误。
  • 变量的保护,即关于权限修饰符private,public,protected使用区别的体会。Java是面向对象编程,涉及到顾客使用时的问题,为了不让其他人随意修改一些变量值,必须限制一些变量、方法的访问权限,这在面向过程编程里是没有的。

对OOpre课程的一点点小建议

1.每次的作业指导书对我学习这门课帮助挺大的,但是第一次作业指导书真的有点难看懂>_<,结构很混乱,甚至不知道从何看起,感觉可以改进一下。


Author: CuberSugar
Reprint policy: All articles in this blog are used except for special statements CC BY 4.0 reprint polocy. If reproduced, please indicate source CuberSugar !
  TOC