BUAA OO 第四单元总结

BUAA OO 第四单元总结

〇.综述

第四单元的主题是UML图解析器。个人认为第四单元最大的难点在于对UML图的树形结构把握清晰,同时按照面向对象的思想构造自己的类与数据结构。

一.架构设计

本单元的架构设计方面,迫于checkstyle的限制,采用模块化设计思想,对于三大任务:预检查、数据结构构建与指令查询做了解耦。

构建了两个关键类:

  • UserImplements:实现UserApi接口,用于层次化读入输入内容并完成预解析,提供指令查询方法
  • Check:用于预检查。为满足要求同时采用层次化读入

此外,对于每个类数据结构的构建、指令的计算查询均依照面向对象的思想在各自的层次中实现。如对于class建立MyClass类,建立抽象层次如下:

二.面向对象思想的演进

一学期的OO课程悄然落幕,在这其中我个人最大的收获在于能够从“对象”的角度看待现实世界中的问题,并将它们自然条理地映射到解空间中。

第一单元是我个人“最痛苦”的一个单元。由于当时对面向对象的理解还很粗浅,仅仅局限在对象是“属性与方法的统一体”,因此在设计类时并没有发挥出“面向对象”的优势,三次作业经历了三次重构。但在最后一次重构时,我隐约感觉到面向对象与面向过程在形式上的一大不同点——面向对象具有一定的“自治性”,即每个对象的属性与方法是属于它“自己“的,每当想要改变这个对象不应当开设两个端口、将属性输出到外部计算再将结果返回,而应当从外部调用对象的方法、在对象内部的方法中实现对对象的改变。感知到这一点后,我对于《Java编程思想》中将对象比作小型状态机的比喻有了一定的理解。每个对象有自己的状态,状态的迁移与改变是对象自己先天设定好的,只是状态迁移的触发条件需要从外部输入,就像是一条条指令般控制着对象的”运行“。

有了上面”自治性“的理解,后续单元的作业任务变得轻松不少。第二单元的电梯本身具有一系列状态,它的状态的控制依靠外部的调度器去实现;第三单元的社交网络、第四单元的UML解析器皆是如此。

这种”自治性“,一方面反映出面向对象封装的特点:每个对象都可以自我管理,只将关键数据结果通过get()方法暴露给外部;另一方面反映出面向对象中抽象的威力,特别是第四单元,如此庞大的树形结构、如此繁杂的查询指令,正是由于有了面向对象的思想才让我们可以在编码是只需关注当前的层次而暂时屏蔽掉其它层次,将复杂的结构一点点消解。

三.测试

”有事没事,多做测试“,从中弱测到强测到互测,可以说测试一直伴随着OO课程的学习。在这其中,我对于测试的理解也逐步加深。

首先是测试的数据要求方面,需要大量的随机数据、全面的边界数据与庞大的压力测试数据,测试数据越完备、测试的效果自然更好。

然而做到上述三点并不容易。对于随机数据还好,可以通过py写一些简单的数据生成实现;对于压力测试数据,可以有意地加大输入的数据量;而对于所谓边界数据,其实对应着问题中的每一种情况,用以检查自己的程序是否在每一种情况下都能”跑的通、跑的对“。

经过第三单元JML的学习之后,我发现JML不仅可以作为一种规格设计工具用于设计与实现的交流,还可以作为构造数据的出发点。不难发现,JML规格中的require语句,正好对应着数据的范围要求。因此,为了更加全面地测试到程序的每一个分支,可以根据JML的require语句构造对应的数据进行测试。而测试结果的正确性,则由JML的后置语句ensure作为判据。由此体会到:JML规格不仅在设计层面提供了正确性的保证,更在测试层面保证了数据构造的全面性。只要对JML各分支的数据类别全部做一遍测试,便能够很好地完成边界数据的构造与测试。

最后是关于测试方法方面,我体会到”回归测试“的重要性。特别是OO课程每单元的作业都是迭代开发式的,程序的改动不仅要满足新要求、还需仍旧保持满足旧要求。此时回归测试的测试方法就显得格外重要。

四.课程收获

在OO课程中,我收获颇丰,一方面是在面向对象思想上的收获,另一方面是在学习方法上的收获。

在面向对象的思想方面,我再一次体会到计算机领域”抽象“思想的重要性。面向对象将一切抽象为对象,让每个对象的保持与管理自己实现,一方面可以很轻易的把现实问题的各个部分相互抽离、化繁为简,另一方面可以很轻松地专注于每一部分的具体实现,让看似庞大无比、毫无切入点的问题迎刃而解。更多对于面向对象的体会在第二部分已有详细阐述,不再赘述。

在学习方法方面,我深刻体会到”他山之石,可以攻玉“这句话的真实性。每一篇技术博客对于我来说都给予了很大的启发,让我从一个Java语言零基础的小白一点点”啃懂“面向对象的诸多知识思想。在这里也一并感谢讨论区里暖心分享的诸位dalao

此外,在学习中面向对象的过程中,也能够在生活中面向对象,也是本学期极大的收获叭~

五.改进建议

  • 优化上机体验,json文件提交一言难尽

  • 增加匿名提问功能

  • 每单元指导书适当增加插图,便于理解

写到最后也收到了自己成为2023年度OO助教的通知,期待在自己和助教团队的共同努力下OO课程会变得更好~

posted @ 2022-06-29 15:57  Lingo30  阅读(70)  评论(0编辑  收藏  举报