OO第二单元(5-8周)作业总结
前言
时光转瞬即逝,很快我们完成了本学期对于JAVA的第二阶段学习,本次博客将展开对近期学习java的心得与作业情况进行分享与总结。
1.作业过程总结:
进入JAVA学习的第二阶段,给我的直观感觉就是难度增大。第二阶段的首次PTA作业第一题便狠狠的给我一记下马威,水文数据校验及处理。密密麻麻的输入格式与输出格式让我眼花缭乱,之后我希望通过实验报告或者解题能够获取本题的突破点,但复杂的类图还是让我陷入了沉思。
之后通过老师在课上的讲述,我们得知了该题的主要思路与方法:正则表达式。通过查阅资料得知正则表达式(通常称为模式)是用于指定特定目的所需的一组字符串的表达式。指定有限字符串集的简单方法是列出其元素或成员。但是,通常有更简洁的方法来指定所需的字符串集。例如,包含三个字符串“Handel”,“Händel”和“Haendel”的集合可以由模式 指定H(ä|ae?)ndel; 我们说这种模式匹配三个字符串中的每一个。在大多数形式主义中,如果存在至少一个与特定集匹配的正则表达式,则存在无限数量的其他正则表达式也与其匹配 - 规范不是唯一的。通过对于正则表达式的描述我们可以知其复杂度,尽管进行了系统的正则表达式的学习,但还是没能参透,最后该题也是以0分告终。
剩余作业则是对于面向对象的封装性、继承性与多态性进行巩固与熟练,难度较低,接下来我将凭借完成作业的心得与对课堂知识的理解对其论述与总结。
面向对象的封装性、继承性与多态性三大技术特性:
图形的继承与多态在Java学习的第二阶段站主导位置,首先第一次作业的第三题展示了继承与重写的基本技术特性。首先我将其概括为:
1、 继承就是子类继承父类的特征和行为,或者是继承父类得方法,使的子类具有父类得的特性和行为。继承的关键字是:extends。需要注意的是Java不支持多继承,但支持多重继承。
2、 重写(override)是子类对父类的允许访问的方法实行的过程进行重新编写,返回值和形参都不能改变。就是对原本的父类进行重新编写,但是外部接口不能被重写。若父类方法也可为子类使用则无需重写。
通过查阅资料得知重写原则:
以第一次作业7-3.图形继承为例:
父类为shape类,建立子类Circle类以及Rectangle类。由于题目要求需要的得这图形的面积,但圆与三角形的面积求法并不相干,且变量的数量以及种类也有所不同所以无法共同享用父类所定义的getArea()的方法,所以需要在各自的子类分别重写getArea()的方法。随后再依次以Circle类以及Rectangle类为父类,建立子类Ball类和Box类。由于圆类与球类可使用共同的变量:半径(radios);所以即可在球类中重写求球类体积的方法。Box类与Rectangle类并无联系,所以Box作为子类则需要重新定义变量(长、高、宽)以及重写getVolume()和getArea()的方法。
在构建类的过程中使用到了this以及super方法,这里我简单概括一下即可:在一个类的方法或构造方法内部,可以使用“this.成员变量名”这样的格式来引用成员变量名,在一个类的构造方法内部,也可以使用this关键字引用其它的构造方法,这样可以降低代码的重复,也可以使所有的构造方法保持统一,这样方便以后的代码修改和维护,也方便代码的阅读。super关键字作用:主要存在于子类方法中,用于指向子类对象中父类对象、访问父类的属性、访问父类的函数。super使用的注意事项:this和super很像,this指向的是当前对象的调用,super指向的是当前调用对象的父类。类加载完毕,创建对象,父类的构造方法会被调用(默认自动无参),然后执行子类相应构造创建了一个子类对象,该子类对象还包含了一个父类对象。该父类对象在子类对象内部。this super只能在有对象的前提下使用,不能在静态上下文使用。
同时,在构建类的过程中运用到了setter和getter的方法,如果我们把类变量声明为私有的,则一定程度上实现了对数据封装 ( java 封装,说白了就是将一大坨公共通用的实现逻辑玩意,装到一个盒子里(class),出入口都在这个盒子上。你要用就将这个盒子拿来用,连接出入口,就能用了,不用就可以直接扔,对代码没什么影响。优点:增强代码的复用性以及起到简化代码的作用)。防止其他程序修改你的变量。通过getter和setter方法能更好的保护你的数据。起初getter与setter方法我都是自己打的,后来通过查阅资料得知该方法可在eclipse上自动生成,也是方便了许多。
3、多态
通过查阅资料以及课堂知识得知:多态指允许不同类的对象对同一消息做出响应。即同一消息可以根据发送对象的不同而采用多种不同的行为方式。(发送消息就是函数调用)。多态存在的三个条件:要有继承;要有重写;父类引用指向子类对象。多态对已存在代码具有可替换性。例如,多态对圆Circle类工作,对其他任何圆形几何体,如圆环,也同样工作。同时多态对代码具有可扩充性。增加新的子类不影响已存在类的多态性、继承性,以及其他特性的运行和操作。实际上新加子类更容易获得多态功能。例如,在实现了圆锥、半圆锥以及半球体的多态基础上,很容易增添球体类的多态性。该点在近期作业尤为体现。
以上就是我对面向对象三大技术特性之间关系的理解与总结。
二、单一职责原则以及开闭原则的理解
单一职责能够使得类的复杂性降低,实现任何职责都有清晰明确的定义,可读性提高,可维护性提高;变更引起的风险降低,变更是必不可少的,如果接口的单一职责做得好,一个接口修改只对相应的实现类有影响,对其他的接口无影响,这对系统的扩展性、维护性都有非常大帮助。
开闭原则的核心思想:软件应该面对扩展是开放的,而面对修改是关闭的。其优点为通过扩展已有的软件系统,可以提供新的行为,以满足软件的新需求,提高软件的灵活性 ,并对已有的软件功能,不能进行修改,以保证软件的稳定性。
第二阶段的学习较难,但通过对面向对象的封装性、继承性与多态性的逐步了解与认知,许多问题也是迎刃而解。但同时通过这三次作业也让我深刻的认识到编程的严谨性是多么的至关重要。往往因为一个字符的漏写就会导致整串代码不能够得以运行,尽管第二次作业与第三次作业相较第一次作业更为简单,但还是因为知识点的漏缺以及粗心大意导致作业完成的效率极为低下,这也是日后的学习中所需要注意的细节!
其次测试的重要性也在几次作业中体现的淋漓尽致,就依现在我们的作业中的比较简便的代码都含有较多的测试点,并且这些测试点是否通过直接反应代码的质量好坏。华为董事长任正非说过这样一段话:我们要从最基础的编码质量做起,视高质量代码为尊严和个人声誉。真的很认同这个观点,保证自己代码的质量本是是基本的事,但很多时候我们却保证不了。所以他才把代码质量提到那么高的高度,而代码质量离不开测试。代码质量保证了,功能才能稳定,稳定可靠的功能就是最好的宣传。保证代码质量就是程序员练内功,内功扎实,才能在上面构建更多的可能性。所以作为程序员,测试的重要性也就不言而喻了。
马上要进行JAVA的第三阶段的学习,希望自己能够在第三阶段的学习中改掉昔日的坏习惯,吸取前两阶段的教训。第三阶段的学习任务将会更加繁重与琐碎,我将会付出更多的努力,尽可能的完成JAVA第三阶段的学习。
浙公网安备 33010602011771号