OOpre 课程总结
1.作业最终的架构设计
架构如下图:
2.使用JUnit的心得体会
说实话,我到现在还不太会用JUnit,所以我的心得体会都是在学习了别的同学的写法之后学到的。
- 一定要把方法之间解耦!!我的问题就是方法之间连接的特别紧密,导致单元测试测试构造起来困难,测试出来也难以debug。
- 题意理解有误的话,单元测试也难以检测出结果。所以要好好读题。
- 单元测试也要留至少一天时间来写,构造数据所花的时间并不短。
3.学习oopre的心得体会
第一次进行迭代式的开发,在前面代码的基础上加新的设计,需要一个良好的架构。而这个架构我目前的程序不太拥有,所以后面几次迭代都挺痛苦。但是也学到了一些很有用的知识:
-
输入解析。这是我在倒数第二次迭代之前因为代码行数之类的问题才终于改过来的重大结构性问题!通过正则表达式
"^\\d+"
匹配每一个输入指令开头的op,对op==14
进行特判,输入多行。最后用 -
String[] strings = line.trim().split(" +"); inputInfo.add(new ArrayList<>(Arrays.asList(strings)));
对每行进行分割,像一开始给的示例代码一样分割字符串。成为一个大的数组,每个数组里都有一个字符串数组。
这提示我要多利用课程组给的代码设计,以及多和同学交流。并且要努力地再完美化一点代码,这对自己的提升很重要。(即不要得过且过)
-
体会到了解耦和提取方法共性的重要性!当功能和功能之间耦合度低,方法和方法之间共同部分大的时候,就要对代码结构进行调整了。很遗憾我总是担心沉没成本,迟迟不做改变,导致对最后写代码时的任务量造成了很大的影响。
-
学到了debug的好方法。(这个应该是所有收获里最大的收获了)
-
System.out.println()
好方法。在出错的地方打印出关键值,再找到关键值的来源,打印关键值的来源……直到找到上一步正确的关键值,却生成了错误的下一步关键值,那么这个生成过程就是有问题的。 -
得到错误数据点后,如何在输入某个数据的时候设置断点(而非每个数据都会在那里断开)?
if (in == 12345) { int a = 1;//随便写的一句话,就在这个地方设置断点 }
- 利用网上的在线文本对比工具。它的优点是,可以清晰地显示行数,以及帮助与同学对拍时的快速定位。可以结合文本对比工具和txt的查找工具,查找指定id的adv/bottle/……在错误数据之前的历次操作。
- 倒推理方法。(同system.println.out所说)在出错的地方打印出关键值,再找到关键值的来源,打印关键值的来源……直到找到上一步正确的关键值,却生成了错误的下一步关键值,那么这个生成过程就是有问题的。
-
4.有待提高之处
(这点是我自己加的,写给自己看看)
1.整体架构搭建有问题。解决方案:看参考代码进行学习,记笔记。
2.JUnit不太会写。解决方案:其实还是代码耦合度太高的问题,先从根本的代码结构性问题开始解决,再参考好的代码进行学习。
3.部分语法其实不太会,比如正则表达式,需要课下再好好学。
4.调试的部分按钮,其实不知道是什么意思以及怎么用。
5.对课程组的建议
1.编写guidebook时,希望能有一条主逻辑(即推荐阅读顺序),在主逻辑之中有各种跳转链接。(记得第一周配置环境时,guidebook里的文件太多,并且没有推荐阅读顺序;互相援引,在配置好A之前要先跳转到B,但是B的配置又和C有关……;导致我和我身边的同学看不懂、很痛苦。明年oopre的时候如果能加入一条推荐阅读顺序,对学弟学妹入门IDEA及oo应该会帮助很大!
2.**希望可以在课程中间每两周/三周提供一次参考代码/参考架构,并给我们留出修改代码架构的时间。**在学习的过程中我经常感到我自己的代码架构不好,但是想改又无从改起的无力感;找同学要又不知道谁的代码架构是比较好的(要了太多代码,阅读起来时间成本太大了)。同时,一周一个ddl的时间十分紧迫,我常常为了节约时间,没有去修改代码架构。身边的同学也都有这个感受。如果能有比较好的代码示例或者架构提示,并且留出时间给同学们自我反思与修改,那么对于同学们的思维提升会有很大帮助:)