OO第二单元(5-8周)作业总结
OO第二单元(5-8周)作业总结
- 前言
本次博客主要说明在学习面向对象课程中关于封装、继承、多态的一些问题和感悟。
- 作业过程总结
① 三次作业之间的知识迭代关系
第六次作业我个人感觉针对面向对象的继承这一方面考察的能力比较多,封装和多态就没有那么明显的考察,到了第七次作业就比较综合,这些特性都考察到了。然后第五次作业其实没有那么多的考察这运用三种特性的能力,而是有些承接了上个阶段对类的运动,以及正则表达式的运用。
② 如何通过作业逐步理解面向对象的封装性、继承性与多态性三大技术特性
对封装性的理解:
封装就是把抽象出来的数据和对数据的操作封装在一起,数据被保护在内部,程序的其他部分只用通过被授权的操作(成员方法),才能对数据进行操作。在作业当中有一些属性或变量出现的比较频繁,为了避免出现错误或者误调可以封装起来在特定的方法里使用。
对继承性的理解:
继承可以解决代码复用,让编程更加靠近人类思维。当多个子类存在相同的属性(变量)和方法时,可以从这些类中抽象出父类,在父类中定义这些相同的属性和方法,所有的子类不需要重新定义这些属性和方法,只需要通过继承父类中的属性和方法。在第五次作业的第三题、第六次作业的第一题、第七次作业的一、二题都很明显的用到了继承的特性,刚开始写这一类题的时候对继承的特性还没有很好的运动,后来就感受到了它的好处。
对多态性的理解:
多态是一个引用(类型)在不同情况下的多种状态。也可以理解成:多态是指通过指向父类的引用,来调用在不同子类中实现的方法。我在第七次作业当中才能稍微熟练的运用多态性,前面的作业可能对这种性质的考察不是很多,所以我也没有去研究这种性质,后面才慢慢理解了。简单来说,多态就是在执行同一操作且作用于不同对象时,返回不同的结果。就是把做什么和由谁去做分开,这样使代码更容易维护,且条理清晰。
③ 作业过程中遇到的问题及解决方法
这几次作业当中我遇到最大的问题就是正则表达式不能掌握,导致第五次作业的第一题和第六次作业的第二题都没有拿到分。我去网上查找了正则表达式的相关资料只是帮助了我能够掌握一些简单的正则表达式,但是题目中需要用到的正则表达式对我来说过于复杂,在这一方面我也只能一步一步慢慢研究。还有的问题就是我对多态的运用掌握的不是很好,然后在写题目的时候稍微有一些卡壳,但是请教了同学以及网上各种帖子,对于作业中要求的程度基本可以解决。
④ 每次作业花费的时间比例
第五次作业是我们刚刚接触面向对象三大特性的第一次作业,所以一开始花费的时间就相对后两次来说更多一些,加上正则表达式这个完全陌生的领域,然后第一题又需要运用到很复杂的正则表达式,以及第一次作业题目本身的要求就比较复杂,所以第五次作业中我在第一题上花费的时间是最多并且效率最低的。总的来说,第五次作业这三道题我花费的时间比例大约是4:1:1。
第六次作业中第一题和第五次作业的第三题其实有很大的相似,只是要实现的更多一些,但是有了前面的铺垫就更加节省时间,效率也更高。第二题和第五次作业的第一题其实很相似,算法都比较复杂,并且都需要用到复杂的正则表达式。我在这道题上遇到的问题和第五次作业第一题遇到的问题一样,这道题我花费的时间也比较多而且效率很低。所以这次作业我的花费时间比例大约是3:1。
第七次作业的题目也是图形继承类,有了前面的铺垫写起来就更加得心应手,而且也很流畅基本上没有什么大问题,第七次作业中这两道题的时间比例大约是1:1。
⑤ 对编程过程的逻辑严谨性的认识及教训
编程过程中逻辑的严谨是最容易让人忽视也是最容易出错的地方,就如写作业时,这种错误在编译器中编译运行时可能不会出现,但是在pta平台的检测就会一下原形毕露。而且它十分难寻,如果是很复杂冗长的代码,可能写的时候没有花费太多的时间,但是在后续寻找错误会耗费大量的时间和精力。所以在编写代码过程中要做好注释,也不能一味的依赖编译来查错,而是要做到自身逻辑清晰、严谨,这样才能避免写出各种bug。越到后面用到的方法、属性、类越多,各种类之间的继承关系越复杂,逻辑严谨性的重要就越能体现。
2.OO设计心得
①对面向对象三大技术特性之间关系的理解
一、封装
封装简单的理解就是包装,指隐藏对象的属性和实现细节,仅仅对外公开接口,即对象的内部状态对外界是透明的。封装的原则就是“该隐藏的一定要隐藏,该公开的一定要公开”。对象的方法根据需要决定是否公开,公开的是声明,隐藏的是实现。封装的意义是使方法实现的改变对架构的影响化最小。这样也能使代码更加严谨。
二、继承
继承是一种由已存在的类型创建一个或多个子类型的机制,继承只有单继承,但是可以实现多层继承。
三、多态
指引用变量拥有许多不同形式的能力
多态分为两种:编译时多态和运行时多态。运行多态有三个原则:对象类型不变、只能对对象调用编译时类型中定义的方法、在程序运行时,根据对象的运行时类型,找覆盖后的方法来调用。
这三者之间的关系大概是:多态存在的必要条件是需要继承,封装增加保护性,限制访问权限、让自己的数据外界无法修改,继承又使得突破了访问限制。
②面向对象设计的基本原则理解(单一职责原则及“开-闭”原则)
单一原则:一个类只做好一件事,只有一个引起它的变化。
开放封闭原则:是可扩展而不可修改的。
接口分离原则:一个接口不需要提供太多的行为。
③OO编程思维的理解
OO设计主要是将现实抽象化,类和对象是OO编程中最重要的两个基本元素,在编程时,先找到要处理的对象,再找到各个对象的共同祖先,逐层抽象,最后确定各个类之间的继承关系。
④类设计心得
3.测试的理解与实践
①测试对于编码质量的重要性
因为代码的每次提交都会出现错误,所以测试对于代码的质量是有非常积极的作用的。
②查阅资料,假设使用Junit进行程序的测试是否可行
用户需要实际运行所编写的代码以确保程序的正确性。当软件变得越来越大,再去添加新的功能或做一些新的改动时,就很容易带来新的问题,甚至会使程序无法正常运行。然而要手动的运行代码,测试代码的可行性也是非常枯燥以及非常耗费时间的事情。
为了减少这种手动测试,可以通过创建单元测试来自动完成测试的工作。当修改代码或者添加新功能后,可以执行单元测试来保证代码运行无误。所有测试工作都是由单元测试自动完成的,开发人员所要做的就是停下来喝杯茶,看看程序的执行状态。
使用单元测试的另一个理由是实现测试驱动的开发,这在当前是比较流行的开发方式。测试驱动的开发尝试首先写出单元测试,然后完成实际的代码。通过单元测试来提供类的定义,当实际开始编写代码时,用户仅仅需要做的就是具体类的实现,只要单元测试运行通过,代码的实现也将告一段落了。所以使用Junit进行程序的测试是可行的。
4.课程收获
通过这门课,我了解并逐渐开始形成面向对象的思想,相信继续钻研探索可以对面向对象编程有更好的掌握。
5.对课程的建议
希望课程可以多一些过渡。