本学期的 OO 课程终于来到了尾声。在此简单地回顾一下本学期的 OO 课程,谈一谈我个人都学到了什么东西。

第一单元

表达式的解析。第一次作业上来的时候很头疼,因为既不懂递归下降又不懂 Java,体验奇差无比。但是第一次作业最后还是靠着学长和同学的帮助下熬了过去。

在理解了递归下降后,第二次作业起情况就有了明显的好转。

在第一单元的学习过程中获得了算法能力上的提升。同时第一单元也是我刀的很爽的一次。

第二单元

第二单元的难度很大。虽然本意是多线程程序设计,但是我却造了个状态机出来…一言难尽啊一言难尽。

第二单元寄的也比较惨。因为两个小 bug 而痛寄,想想真是太不值得了。

第二单元写的评测机很不错,又学到了一些 C++ 小知识呢(笑。这单元我自己学习了不少 Java 的特性,也算是有所收获。

第三单元

第三单元的时候前两次作业体验尚可,第三次作业的最短环属实是有一点考验算法能力了。不过和同学讨论过之后也都顺利的通过了。体感上其实比一二单元都要好一些?

此外这单元搓数据搓的很爽,虽然到现在还有一点点没有搞懂 OKTest 的意义何在…这单元想锻炼我们的测试能力,我觉得我的测试能力应该算是及格了吧…

当初第三单元正好赶上五一放假,所以整体上时间还算比较充裕。这单元狠狠训练了一下阅读 JML 的能力和图算法的能力。Java 是世界上最好的语言。

第四单元

第四单元突出的是一个麻烦、任务量大。可能很大的原因还是指导书表述得不够清晰吧…第十三次作业还挺顺利的,第十四次作业最大的问题就是指导书表述不清。不过我开工的时候指导书都已经修过了,所以我个人的体感其实也还行。第十四次作业基本上一晚上加一上午就写完了。第十三次作业到第十四次作业的迭代也很顺滑。第十五次作业很简单,改动几行就可以了。

第四单元强调的是架构设计。我对我自己的架构设计基本还是挺满意的。到第十五次作业的时候突然有一种 “啊,OO 课要结束了啊” 的感觉。一学期的努力终究是迎来了尽头。

学习感悟

以下一些没有什么逻辑的想到哪写到哪的学习感悟(逃

感觉确实学习到了很多面向对象的知识。

在面向对象课程中我体悟最大的,是面向对象的封装性。常言道“要以最大的恶意揣度用户”,我们作为开发者,在代码的编写中一定要注意面向对象的封装性,只暴露必要的接口,具体的实现细节都应该是对用户透明的。不过在课程内容中好像并没有十分的强调这一点?我个人感觉可以在这方面多多训练。训练封装性其实也是对架构设计能力的训练。我发现很多同学在编写代码时都有一个很不好的习惯,就是将所有方法都设置为 public,我认为这是违背了面向对象的封装性的。

此外学习到了一些设计模式,如工厂模式、生产者消费者模式等等。我认为在三四单元中其实也可以去介绍更多的设计模式。设计模式的学习带来的是思维的提升,比单纯码代码搓大模拟,可能更加贴合面向对象的初衷。(吐槽一下,大模拟什么的也太奇怪了,感觉就像在大一写程序设计一样,大模拟用 Java 写也是写,用 C 写也是写,感觉没有体现出面向对象的优势,只是在强调架构的设计倒不如通过学习设计模式锻炼架构)

第三单元的 JML 感觉其实是一个比较好的尝试,优缺点都有。我认为本单元比较考验助教的能力,JML 的编写实在是太不容易了。但是如果编写的好,一个优秀的架构 + 优秀的 JML,绝对是能够让同学们受益匪浅的。一个不太成熟的想法是在第三单元中设计出相对复杂的架构,通过 JML 向同学们传达代码的信息,从而让同学们在编写代码的过程中体会到架构的好处。本学期的第三单元感觉在架构上还是稍微有一些欠缺的?(好吧写到这里突然有一点当第三单元助教的心思了,可惜写到这里的时候已经截止报名了)

第四单元…今年的改革可以说是一次大胆的尝试,不过可能助教们稍微低估了大模拟的难度。

哦,除了封装性,我本学期还学到的很好的一个思想是“不要过早优化”。过早的优化是万恶之源。我很赞同的一句话是“让很快的代码正确,比让正确的代码更快困难得多”。写代码,第一要务是正确性,追求性能和速度要在正确性之后。第一次作业的时候就有一点因为想过早优化导致写的很痛苦。

这学期也训练了一下代码风格。虽然我自认为自己的代码风格已经不错了,不过在课程组的训练下还是又获得了一些长进。

此外,学习到的一个思想是“少写注释”。这句话的意思是应当让自己的代码变得像注释一样通俗易懂(通过合理的命名和组织结构等)。

在本学期的课程中训练了编写具有一定规模代码的能力。一周憋一千行什么的以前是不敢想,现在感觉也就轻轻松吧。

其实感觉这学期的面向对象是基于 Java 学习的,但是却对 Java 没有什么专门的学习。我觉得 Java 作为典型的面向对象语言,其实可以多学习一些 Java 的特性。虽然这可能与面向对象的关系不太大,但是我认为学习语言的特性也是学习编程过程中很重要的一环。根据我的观察,同学们编写代码中遇到的很多困难、写的很多代码有问题都是因为不了解 Java 的特性导致的。

然后我觉得第四单元的输出实在是太多太繁杂了…麻烦到我感觉没有什么意义。如果以后能改进一下就好了。(直接 push 身边当助教的同学(雾

很可惜由于个人学业安排没有冲 OO 助教。现在想想又有点后悔了呜呜…

从一开始的不知道该怎么测试,到后来能够和同学一起写评测机,自己能够思考如何搓数据、写数据生成,感觉自己的测试能力有了很大的长进。

再看看自己架构设计的能力,感觉从一开始是无所适从,到现在能设计出让自己满意的架构,我认为我的收获是蛮大的。要将设计模式融入自己的架构设计,通过学习、理解前人的思想,让自己的代码更加优美好看。