OO第二阶段作业总结
前言
本次博客主要分为五个部分,其中第一部分为对前三次作业过程的总结,第二部分为关于OO设计的心得,第三部分为关于测试的理解与实践,第四部分为从课程中得到的收获,第五部分为对课程的建议。
一.作业过程总结
1.在第五次作业的第一题当中首次出现了通过使用正则表达式来校验输入数据是否合法,这在第六次作业的第二题中也出现了,是让我们进一步掌握正则表达式的应用,在第五次作业的第二题中要求用蒙特卡罗方法求圆周率,有一个关于蒙塔卡罗法的背景,而在第一题中是有一个南水北调分水调度的背景,这两题均由生活中的问题引出,说明题目有向有关实际应用的方面出,与人们的生活息息相关。同时,第二题中强调了类与类之间的关联,如何相互调用,这在后面的作业中也会出现。在第六次作业的第一题中出现了继承与多态的概念及用法,同时出现了集合的概念以及用法,用了ArrayList类,以及List接口,在第二题中也出现了集合中的ArrayList,LinkedList类等,且进一步加深了对面向对象类设计,继承与多态应用的理解。在第七次作业第一题中是对第六次作业第一题的升级,包括一些排序算法,如使用到了Comparable接口以及泛型的应用,对抽象类的继承以及继承和多态的用法,而在第七次作业第二题中是对第一题的改进与完善,让我们需要考虑到单一职责原则的应用以及“开-闭”原则的应用,强调这两大原则的重要性,加深了我们的理解。
2.在完成这些作业的过程中,我逐渐明白了对代码进行封装的必要性,为了保证数据的安全性,我们必须对代码进行封装,这可能也是写代码的一个素养吧,在第六次作业的第一题中首次出现了继承与多态的概念,通过对一个类(大多为抽象类)的继承,就可以重写且使用父类的方法,这种特性毫无疑问是为多态量身定制的,没有继承就不会有多态,两者关系紧密相连,在第七次作业中继承与多态的应用又得到了体现。
3.在完成作业的过程中会遇到许多的问题,如一些java上语法的错误(如成员变量,局部变量的作用域有时会忽略),在逻辑上的错误(有些角度有时未考虑到),也有在编译器上可以通过样例而到pta平台上却又不行,有些测试点不会通过,此时我会再重新去阅读一遍题目,检查是否有我漏掉的一些前提或者是条件,仔细想一想有没有别的情况会出现,有没有一些特殊的例子,因为有的题目就是需要你考虑的比较全面,各个点都能想到。如果我在一些java语法有问题的话,比如一些语法不会使用,这个语法我是不是使用错误了,我会到网上去寻找有关这些语法的用法,去找关于这些Java语法的用法还有例子,自己再在编译器上敲一遍代码,便领会了如何使用。如果有一些章节的知识点没弄清楚,我可能会去一些学习的视频网站找相关的视频去看,再结合老师讲的内容,加以一些java书籍的辅助,能更好的理解这块章节的内容。
4.在平时写作业时花费的时间也更多,这三次作业所占时间比例是差不多的,在pta的测试点中会出现代码运行时间的限制以及占用内存的限制,这使得我必须对所写的代码进行优化和改良,这是一种编程过程的严谨性,怎样才能使自己的代码看起来更美观,运行起来更快,所占用的内存更少,这是我在今后写代码的过程中都需要考虑的问题,也是一个困难的问题,多看多学才能是自己的代码有所提升。
二.OO设计心得
1.面向对象有三大特征,分别为封装,继承,多态,这三者是环环相扣的,有了封装,便有了一种整体的概念,对象与对象之间便产生了继承的关系,而在有了继承关系以后,才会出现子类重写父类方法的”覆盖“或”重写“的说法,多态也应运而生,向上转型或者向下转型,instanceof,动态绑定,静态绑定等等说法......
2.我对单一职责原则的理解就是该原则降低了程序的耦合度,也就是提高了程序的扩展力,将不同的职责封装到不同的类中,这样如果一个职责发生改变时也不会影响到其他职责的运作,从而实现了”高内聚“,”低耦合“。对”开-闭“原则的理解就是需要面对抽象编程,不建议面向具体编程,对扩展开放而对修改关闭,所以抽象化是开闭原则的关键,当需要修改系统的行为时,无须对抽象类中进行任何改动,只需要增加新的具体类来实现新的所需要的功能即可,达到了一个开闭原则的要求。关于类的设计我觉得最好要符合这两个原则。
3.如果采用面向对象的方式贯穿整个系统的话,可分为三个过程,第一是OOA:面向对象分析,第二是OOD:面向对象设计,第三是OOP:面向对象编程,整个软件开发的过程:分析(A)到设 计(D)到编程(P),面向对象包括三大特征,封装,继承,多态。任何一个面向对象的编程语言都包括这三个特征,例如python。然后是关于类和对象的概念,面向对象当中最主要的“一词”是:对象。对象是实际存在的个体(真实存在的个体)。而类实际上再现实世界当中是不存在的,是一个抽象的概念。是一个模板,是我们人类大脑进行“思考,总结,抽象”的一个结果。类的本质是现实世界当中某些事物具有共同特征,将这些共同特征提取出来形成的概念就是一个“类”,“类”就是一个模板。类 = 属性 + 方法,属性来源于状态,而方法来源于动作。
三.测试的理解与实践
测试对于我而言就是使自己写出来的代码更加的完美,功能更加完善,可以查缺补漏,找到很多不足之处,且通过测试可能会找到很多错误和发现许多bug,如果是将来再软件中出现的话,后果是不堪设想的,开发人员要为这个可能看似不太起眼的bug付出惨重的代价,花费大量的人力物力还有时间再去修改,维护成本会相当高,而给客户的印象还有体验也不好,所以测试对于软件对于编码质量来说还是尤为重要的。因此使用Junit来进行代码的测试还是有必要的,但不一定是现在就使用,需要一个循序渐进的过程。
四.课程收获
经过这四周的学习,我在java语言的语法的学习上又深入了一层,开始学到了一些重要的知识点以及一些重要的原则,比如三大特性,封装,继承还有多态,以及它们的用法,还有抽象类以及接口等等,这些都是尤为重要的知识,可以为以后更深一步的Java学习打下良好的基础,除了这些知识外我还学到了几个面向对象设计的基本原则如单一职责原则以及开闭原则等,这对我有关于类设计方面的理解有了很大帮助。还有测试对于代码质量的重要性,在这四周作业中我遇到了运行代码超过限制内存以及超时的情况,让我明白代码仅仅完成了需要的功能是远远不够的,还需要去优化它,这是我以后编程过程中都需要面对的问题。
五.对课程的建议
对于第三阶段的作业我是觉得题目不在于多,要在于精,通过一个题目可以让我们运用多个课堂上学到的内容,且角度很广,不局限,可以从多个方面去切入,考虑,有关课程内容讲解方面我希望老师别讲得太快,多帮助我们总结,扩展知识点。
                    
                
                
            
        
浙公网安备 33010602011771号