OO第三阶段作业总结
前言
本次博客主要分为五个部分,其中第一部分为对整个作业过程的总结,第二部分为关于OO设计的心得,第三部分为关于测试的理解与实践,第四部分为从课程中得到的收获,第五部分为对课程的建议。
一.作业过程总结
1.纵观整个作业过程,不难发现第一次作业到第三次作业是逐步从面向过程过渡到面向对象的过程,从作业中未出现类图到出现类图的过程,其实就是从面向过程渐渐转换为面向对象的过程,这点在第三次作业的日期类设计中尤为明显,这三次作业当然不乏会有很多C语言的的知识点,如for语句if语句字符串等等,这是C语言和java语言共有的知识点,也可以说是面向过程和面向对象编程时都需要用到的语法,但是到第三次作业时,出现了构造函数,将类中属性私有化,setter和getter等面向对象设计中才可能会出现的语法知识,这在面向过程设计中是不会出现的,自此,作业就开始由面向过程到面向对象开始过渡,我们的编程思想当然也需要发生改变。从第五次作业到第七次作业是逐步理解面向对象的一些特性,一些重要的原则以及一些其他重要的知识点的过程,特性例如封装性,继承性与多态性三大技术特性,在完成这些作业的过程中,我逐渐明白了对代码进行封装的必要性,为了保证数据的安全性,我们必须对代码进行封装,这可能也是写代码的一个素养吧,在第六次作业的第一题中首次出现了继承与多态的概念,通过对一个类(大多为抽象类)的继承,就可以重写且使用父类的方法,这种特性毫无疑问是为多态量身定制的,没有继承就不会有多态,两者关系紧密相连,在第七次作业中继承与多态的应用又得到了体现。两大重要原则有单一职责原则和”开-闭“原则,这两大原则在类设计中也是十分重要的,当然了,这些题目中还出现了集合的概念以及用法,用了ArrayList类,以及List接口,例如在第六次作业第二题中也出现了集合中的ArrayList,LinkedList类等,进一步加深了对面向对象类设计,继承与多态应用的理解。在第七次作业第一题中是对第六次作业第一题的升级,包括一些排序算法,如使用到了Comparable接口以及泛型的应用,对抽象类的继承以及继承和多态的用法,等等这些,其实都是加深我们对面向对象设计的一个理解,随着学的知识点越多,我们对面向对象思想的理解也会更加深入。从第九次作业到第十一次作业是加深我们对面向对象设计的理解,不难看出,尽管每次作业只有一题,但是他的难度是较大的,题目的设计也极为巧妙,灵活,在第九次作业中是对雨刷程序功能扩展的设计,这道题如果需要实现题给的功能,需要用到类的继承,封装,多态,以及抽象类接口等语法,也需要考虑到单一职责原则的应用以及“开-闭”原则的应用,是一道极具综合性的题目,但也非常的贴近生活中的实际应用,比较符合实际场景,让我们更好的理解面向对象设计的好处在哪里,是如何贴近生活中实际场景的应用的进一步加深了我们对面向对象设计的理解,在第十次作业和第十一次作业中都需要用正则表达式对输入数据进行检验,由此见得对字符串处理的重要性,也都需要用到Map或者其他接口,在第十一次作业中还出现了对栈的操作,这些其实都要尤为重要的知识,让我们在做题的过程中慢慢掌握它们,这三次作业中都会用到接口,即为抽象类,这在面向对象的设计中是非常重要的。
2.在完成作业的过程中会遇到许多的问题,如一些java上语法的错误(如成员变量,局部变量的作用域有时会忽略),在逻辑上的错误(有些角度有时未考虑到),也有在编译器上可以通过样例而到pta平台上却又不行,有些测试点不会通过,此时我会再重新去阅读一遍题目,检查是否有我漏掉的一些前提或者是条件,仔细想一想有没有别的情况会出现,有没有一些特殊的例子,因为有的题目就是需要你考虑的比较全面,各个点都能想到。如果我在一些java语法有问题的话,比如一些语法不会使用,这个语法我是不是使用错误了,我会到网上去寻找有关这些语法的用法,去找关于这些Java语法的用法还有例子,自己再在编译器上敲一遍代码,便领会了如何使用。如果有一些章节的知识点没弄清楚,我可能会去一些学习的视频网站找相关的视频去看,再结合老师讲的内容,加以一些java书籍的辅助,能更好的理解这块章节的内容。
3.在平时写作业时花费的时间算挺多的,每一阶段的作业所花费的时间其实是递增的,尤其是到了后期,一道题目可能会出现十几个知识点的时候,如果你想得满分的话,那就得通过每一个测试点,这其实是很耗费时间的一个过程,因为自己可能总会漏掉一些情况,或者找不到自己的问题所在,这是就可能要去查询资料来解决这些问题了。
二.OO设计心得
1.在第一阶段的学习过程中我逐渐理解了面向过程与面向对象的区别,我的编程思想也在渐渐的发生改变,在这说一些我的见解,面向过程的开发方式主要的特点是:注重步骤,注重的是实现这个功能的步骤。而且比较注重的是实现功能的因果关系,由A到B,再由B到C,其中没有对象的概念,只是实现这个功能的步骤以及因果关系。面向过程的缺点主要是耦合度较高,导致扩展力较差,每一步之间都有所谓的因果关系,假设其中任何一个因果关系出现问题,此时整个程序的运行都会出现问题。而它的优点在于对于一些小型项目(功能),采用面向过程的方式进行开发,效率较高,不需要前期对象的提取,模型的建立等等。面向对象的开发方式的特点是:采用面向对象的方式进行开发,更加符合人类的思维方式,人类就是以“对象”的方式去认识世界的,所以面向对象更容易然后我们接受。采取面向对象的方式进行开发,耦合度低,扩展力较强,与面向过程开发相反。在第二阶段的学习过程中我逐渐理解了面向对象的一些特性,一些重要的原则,例如封装性,继承性与多态性三大技术特性,还有单一职责原则和”开-闭“原则这两大重要的原则,在此说一些我对它们的理解,首先是对于面向对象的三大技术特性的理解,封装,继承,多态,这三者是环环相扣的,有了封装,便有了一种整体的概念,对象与对象之间便产生了继承的关系,而在有了继承关系以后,才会出现子类重写父类方法的”覆盖“或”重写“的说法,多态也应运而生,向上转型或者向下转型,instanceof,动态绑定,静态绑定等等说法......其次就是对两大重要原则的理解,我对单一职责原则的理解就是该原则降低了程序的耦合度,也就是提高了程序的扩展力,将不同的职责封装到不同的类中,这样如果一个职责发生改变时也不会影响到其他职责的运作,从而实现了”高内聚“,”低耦合“。对”开-闭“原则的理解就是需要面对抽象编程,不建议面向具体编程,对扩展开放而对修改关闭,所以抽象化是开闭原则的关键,当需要修改系统的行为时,无须对抽象类中进行任何改动,只需要增加新的具体类来实现新的所需要的功能即可,达到了一个开闭原则的要求。关于类的设计我觉得最好要符合这两个原则。在第三阶段的学习过程中我逐渐理解了抽象类包括接口在类的设计中的重要性,也是在面向对象设计过程中的重要性,还有对字符串的正确校验,即为正则表达式的重要性,这些在以后的学习中都是尤为重要的,我需要不断地扩展这方面的知识。
2.如果采用面向对象的方式贯穿整个系统的话,可分为三个过程,第一是OOA:面向对象分析,第二是OOD:面向对象设计,第三是OOP:面向对象编程,整个软件开发的过程:分析(A)到设 计(D)到编程(P),面向对象包括三大特征,封装,继承,多态。任何一个面向对象的编程语言都包括这三个特征,例如python。然后是关于类和对象的概念,面向对象当中最主要的“一词”是:对象。对象是实际存在的个体(真实存在的个体)。而类实际上再现实世界当中是不存在的,是一个抽象的概念。是一个模板,是我们人类大脑进行“思考,总结,抽象”的一个结果。类的本质是现实世界当中某些事物具有共同特征,将这些共同特征提取出来形成的概念就是一个“类”,“类”就是一个模板。类 = 属性 + 方法,属性来源于状态,而方法来源于动作。
三.测试的理解与实践
测试对于我而言就是使自己写出来的代码更加的完美,功能更加完善,可以查缺补漏,找到很多不足之处,且通过测试可能会找到很多错误和发现许多bug,如果是将来再软件中出现的话,后果是不堪设想的,开发人员要为这个可能看似不太起眼的bug付出惨重的代价,花费大量的人力物力还有时间再去修改,维护成本会相当高,而给客户的印象还有体验也不好,所以测试对于软件对于编码质量来说还是尤为重要的。
四.课程收获
转眼间这个课程就要结束了,多少是有些不舍的,一路走来遇到了许多的困难,但也收获了许多的知识,接下来谈一谈我的收获吧,在第一阶段的学习过程中,我知道了另一种语言,也知道了另一种编程思想,那就是java语言和面向对象的编程思想,这种思想与面向过程是迥然不同的,面向对象是先需要去创建类,再去创建多个对象,最后将对象再组合在一起的结果,而面向过程更类似于环环相扣的感觉,因果关系明显,缺一不可,耦合度极高。在面向对象中出现了很多在面向过程中没有的知识点如封装,方法的构造,方法是可以重载的,但必须符合一些条件,不同的数据储存在不同的位置,如局部变量是储存在栈当中,静态变量是储存在方法区当中,而对象则是储存在堆当中,有些类可以公开而有些类又不是公开的,类中的数据成员也有不是公开的,此时又出现setter和getter方法可以从外部去访问他们。在第二阶段的学习过程中,我在java语言的语法的学习上又深入了一层,开始学到了一些重要的知识点以及一些重要的原则,比如三大特性,封装,继承还有多态,以及它们的用法,还有抽象类以及接口等等,这些都是尤为重要的知识,可以为以后更深一步的Java学习打下良好的基础,除了这些知识外我还学到了几个面向对象设计的基本原则如单一职责原则以及开闭原则等,这对我有关于类设计方面的理解有了很大帮助。还有测试对于代码质量的重要性,在这一阶段的作业中我遇到了运行代码超过限制内存以及超时的情况,让我明白代码仅仅完成了需要的功能是远远不够的,还需要去优化它,这是我以后编程过程中都需要面对的问题。在第三阶段的学习过程中,我认识到了正则表达式对于字符串检验的重要性,以及接口在类的设计中在面向对象设计过程中的重要性,这些都是极具深度,需要我去不断学习的,道阻且长啊。整个课程学习下来,感觉收获了许多,当然不局限于那些知识点和语法,还有的是一种编程思想,一种面向对象编程的思想,在这个过程中,我也收获了一个尤为重要的能力,那就是自学能力,一些老师没讲到的知识点可以去网上查找资料,或者去翻看API,尝试着去自己解决问题,而不是全都抛给老师,希望在接下来的课程中再接再厉吧!
五.对课程的建议
其实对于课程的建议我还是那几句话,课程老师给我们布置的作业也好,实验也罢,又或是课设,要在于精。它不在于难,但它要有一定的深度,它不在于多,但它要有一定的广度,这样在我们去完成这些任务的时候需要考虑的会更多,留给我们考虑的时间也会更多,何乐而不为呢?
                    
                
                
            
        
浙公网安备 33010602011771号