前言:
本次主要总结第二阶段的作业,包括面向对象的封装性,继承性,多态性三大技术特性,除此以外本文还包括做作业的心得体会。
作业过程总结:
三次作业对类的理解不断加深,本阶段第一次作业从不要求使用多个类,到给出多个类的框架思路,再到要求对类进行继承,以及继承并使用接口,可以看出作业在引导我们慢慢理解如何正确使用,合理规划设计java中“类”这一概念。
因为作业中经常要求在类中有私有属性,加了private这一前缀修饰,期初并没有理解这个前缀有什么作用,上了课就明白私有属性并不能被其他类调用,并且间接访问private成员变量需要使用getter及setter方法。在查资料以前我也不是特别明白setter方法和构造方法的区别,如果不是做题的话一定无法理解透彻。很多知识就是在做题中遇到无法解决的困难,并为此去查阅资料,询问同学才能学会的。对于封装,如果方法的局部变量和类的成员变量重名的时候,就需要用到“this”,优先使用局部变量。封装可以使我大致写完一道题之后的调试变得更加简单,更容易查找错误。
关于继承,我认为主要核心在于“共性抽取”,子类可以拥有父类的一些内容,简化了代码的实际工程量,也可以通过重写父类的方法使代码符合子类的需求。比如题中要求写一个抽象父类,并在子类中实现不同的面积计算等等。
作业中经常遇到的问题是不知道如何实现题中所给的要求,最开始不懂如何运用getter和setter,不明白private的意义,到后来的不太掌握list,接口排序等等。我会在网上查询很多资料,查到实例代码,学习前辈是如何设计的结构,也会询问同学。
在涉及到正则表达式的题目会花费很长的时间,关于类的继承,接口等问题也需要先用半天时间学会了然后才能继续写完题目。所以在所学新的内容方面占时比例比较长,以及对于新的知识不能很好地运用,写完代码之后往往会出现很多问题,调试和纠正也很费时间。
编程是一件很注重逻辑和细节的事情,比如用接口给图形面积排序的题目,题目要求从大到小排列,我在写comparato方法的时候误写成了从小到大排列,包括按照题目的要求,输出的格式是多个图形在同一行,但我用了System.out.println就错误的将每个图形都占了一行。每个函数的功能实现时应该如何编写主函数来将其很好地运用也需要认真思考,所以以后在编程时需要好好思考每一段程序对于前后的关联性和逻辑性。
关于面向对象三大技术,我简单总结为:
①封装
---->减少了大量的冗余代码
---->封装将复杂的功能封装起来,对外开放一个接口,简单调用即可。
将描述事物的数据和操作封装在一起,形成一个类,被封装的数据和操作只有通过提供的公共方法才能被外界访问(封装隐藏了对象的属性和实施细节),私有属性和方法是无法被访问的,表现了封装的隐藏性,增加数据的安全性。
②继承
---->减少了类的冗余代码
---->让类与类之间产生关系,为多态打下基础
若一个新类继承了原有类的属性和方法,并增加了自己的新属性和新方法,那么这么子类就可以完美地实现它应该具备的功能。在做题时我发现构造器(构造方法)是无法被继承的,但是子类生成对象时默认会先执行父类无参的构造函数(实例化对象,让子类可以使用父类的成员)。
③多态
----->抽象类 abstract override
----->接口 interface
同一个接口,使用不同的实例而执行不同操作。
单一职责原则可以使类的复杂度降低,实现什么职责都有清晰明确的定义;类的可读性提高,复杂度降低(复杂度降低肯定可读性提高);可读性提高,意味着代码就会更容易维护。比如说题目中求体积与面积的方法,可以用两个功能接口实现,这样哪里有问题就可以更改哪里。把程序变更引起的风险降低。
测试能够基本确定编码的功能完成情况,以及反映功能的实现状况。测试还能够知道编码运行的效率,可以初步判断代码算法的质量和简洁性,时间空间利用率。用户可以通过测试反映出的功能实现状况进行修改源代码的功能错误,也可以进一步升级,完善源代码。测试能够直接知道代码功能的实现,及明白代码的逻辑功能实现的错误,发现编译不能发现的错误。测试能让用户反代码的错误,也能让用户改进代码,以及确认代码的功能实现。
课程收货: ①一定要确认每次变量的类型和精度问题 ②很多时候需要调试每一行代码才能知道具体哪里有问题 ③需要根据自己的理解可适当添加或修改检查代码,确认自己的程序是按照自己的逻辑 来运行的。 ④在编译器中有一些快捷功能可以使用 ⑤更加熟悉了面向对象的思想,熟悉java的编程风格。
关于题量和难度我觉得正好,希望老师讲课可以再慢一点,多讲一些实例。
浙公网安备 33010602011771号