BUAA OO 第四单元总结
本着层次化设计的思想,我从第一次作业开始,就用自己创建的类把部分重要的UML
类包裹了起来。这样当我们在MyImplement
类中实现新功能的时候,可以在包裹类型中实现一些方法,达到层次化设计的目的。所以在三次作业的迭代中,我的MyImplement
类的长度都没有超过500行。在第一次作业设计时就充分考虑可扩展性和程序结构可以大大方便后续的第二、三次作业。
UML
本身具有自己的树形结构,所以我实现的程序的结构和UML
本身的结构也十分的类似。同时基于我在作业中实现的包裹对象,我可以在对应的对象中写对应的方法,大大提高了程序的可读性和层次结构。
架构设计思维及对OO方法理解
这学期的面向对象学习让我对程序架构有了更深刻的理解。对于一个问题,你可能有多种方法去实现它,但是如果想要高质量的解决这个问题,我们必须要仔细分析这个问题的特性。而对应不同的特性,会有着对应的“最优”的解决方法。但是局部最优可以达到全局最优吗,对于性能的过度追求是否会导致程序的意义不明或者使得程序极难实现?正如上述所言,在实际编程中进行设计的时候会遇到很多需要权衡的地方,学会如何进行权衡也是我在这学期有所体会的内容。
而对于OO
方法,我觉得其中最重要的就是对象思维。写代码时我们应该从对象的角度去分析问题,我们眼中不应该是什么什么算法,而是对象的属性和行为。以对象为单位对代码进行封装是十分重要的,在最后实现代码时,我们不是从方法开始实现代码,而是先以类为单位创建对象,然后填入这个对象的属性和方法,最后在实现每个具体方法。这就是我在OO
中学到的对象思维。
对测试的理解
在我看来测试对于一次OO
作业来说是非常重要的,可以说,没有测试的OO
作业不是一次完整的OO
作业。对于程序的测试不仅可以帮助我们检验程序的正确性,也可以更进一步的帮助我们理解题目和程序。
测试最困难的地方不是如何判断一个程序输出结果的正确性,而是如何获取强度高的数据。随机构造的数据强度一般都不高,而自己构造数据如果想要覆盖到所有情况也十分麻烦。目前我能想到的最好的方法是先按照指令组成特殊的指令块后再进行随机生成。可惜这个想法还没有在课下实验过,希望在以后的课程中我能有实践这个想法的机会。
课程收获
本次课程我系统性的学习了面对对象思维,同时学到了不少的设计结构与其蕴含的思想。
通过对面对对象思维的学习,我对一个程序在整体上有了更好的理解,面对问题首先会从整体结构和设计思想上去理解这个问题,然后会从属性和行为的角度分解对象,最后再开始写代码。
我认为这就是一种思想上的,境界上的提升。
对课程的建议
1、理论知识存在感低。
感觉理论教学较慢,内容较少,而完成课后作业时大部分灵感和收获都来源于实践或者是助教发布的练习。虽然面对对象理论课主要是为了让我们体会到面对对象思想,但是还是希望能有一些系统化的理论学习,而不是完全贴合作业。
2、部分作业的后期迭代没有太大意义。
对于JML
单元和UML
单元,后几次作业只是增加了部分细节,在架构上完全不需要改动,在设计思想上也没有体现。感觉这两个单元并不需要三次作业,可以适当增加一些别的内容。感觉这两个单元两次作业完全足够了。
3、研讨课分享时内容重复度较高
在每个组进行分享时,分享的内容往往与之前的小组大同小异。希望以后可以缩短每个组进行总结的时间,让每个小组只需要总结各自独特的地方,而不是讨论的所有内容。