面相对象程序设计学习第二阶段总结

前言

这是学习OO第二阶段后的总结,主要是针对三次pta作业的总结和对这一段时间学习OO的体会。这阶段的三次作业难度并不是逐渐增加的,难度的话,我感觉第一次作业难度最大,后两次难度都差不多,更简单一点。通过这一阶段的学习,我对OO的知识更丰富了,理解也更深了。

正文

1.作业过程总结

①总结三次作业之间的知识迭代关系;

第一次的作业有正则表达式的知识,还有抽象类的继承实现的知识,还有locadatetime的用法,如下头文件:

 

第二次的作业在第一次的知识下(没有locadatetime),还有用到了list、linklist、biginteger的相关用法,如下头文件:

 

第三次的作业就有arraylist、collections的用法了,如下头文件:

 

这三次的作业的知识是叠加和递进的,由浅入深,由简单到复杂。

②如何通过作业逐步理解面向对象的封装性、继承性与多态性三大技术特性;

我不知道面向对象的封装性、继承性与多态性的定义是什么,下面是我百度到的定义:

  • 封装

封装是面向对象编程的核心思想,将对象的属性和行为封装起来,而将对象的属性和行为封装起来的载体是类,类通常对用户隐藏其实现的细节,这就是封装的思想,在Java中通常通过建立一个实体类,用来封装对象的属性和行为,通过setXxx()getXxx()方法封装起来,

简而言之,封装性就是利用抽象数据类型将数据和基于数据的操作封装在一起,保护数据并隐蔽具体的细节,只保留有限的接口与外界联系。

  • 继承

简单来说就是使子类的对象拥有父类的全部属性和行为,同时可以增添自己的所特有的属性和行为。这样可以节省写共同具有的属性和方法代码的时间,有利于代码的复用,这就是继承的基本思想。

  • 多态

简单来说就是一个程序中同名的多个不同方法共存的情况,通常使用方法的重载和重写(也叫覆盖)来实现类的多态性,多态性允许以统一的风格编写程序,以处理种类繁多的已存在的类以及相关类,多态的实现并不依赖具体类,而是依赖抽象类和接口,在多态的机制中,父类通常会被定义为抽象类,在抽象类中给出一个方法的标准,而不给出实现的具体过程,通过继承父类来实现,而比抽象类更方便的是将抽象类定义为接口。

 

我感觉在多个类的使用的时候封装是很有用的,因为自己根本不需要知道某个类的内部是如何实现的,我们只需要代入参数使用它就可以了,这很方便,我在写代码时候就有这样的感觉,只要把一题的步骤分开来,把各个类实现就可以了,让比较复杂的题目很简单的解决了;

继承性的话,通过具体的类对抽象类的继承实现就可以复用某些重复的代码,这样很方便,比如在第三次作业12题中,我在图形Shape类中有getShapeName()setShapeName()方法,其他继承Shape类的子类都有这两个方法,而不用再写这些方法了,这样就比较方便,如下:

多态性的话,我最熟悉的就是构造函数的重载,有参和无参的使用,比如随便一个:

 

可以在抽象类中定义抽象方法,让继承的子类可以各自的实现,也可以把父类中已有的方法按照具体的子类进行重写。

③作业过程中遇到的问题及解决方法

第一次的作业第一题就有正则表达式知识的应用了,但是老师还只是给我们讲了一点,叫我们自己去网上查找学习,也没有做过正则表达式的题目所以就自己百度学习了。在正则表达式的那个()”的用法不是很懂就自己找题目,然后自己练习一下就懂了,还有很多关于正则表达式的使用都是差不多这样学会的。

还有那个Card类使用抽象Shape类,还要实现Comparable<Card>接口上,我不是很懂,就自己在百度上查看相关的例题,才知道在Card类中要实现compareTo(Card o)的方法,要三个if返回-101三个值。

 

④每次作业花费的时间比例

因为我并不是特别在意做题的时间所以,时间比较久,大概是211(天)

 

⑤对编程过程的严谨性的认识及教训

第一次的作业第一题我做的时候特别的烦,主要烦的是那个CheckData类中的ValidateData方法,因为我在这个方法写的特别的复杂、特别的多,之后我听老师上课讲解后才知道我把CheckData类中的getData()方法的返回的类型String[]看成了String,然后我就在ValidateData方法里面给实现了,因为我根本不知道这个CheckData类是检验一行数据还是检验多行数据,所以在ValidateData的实现上反复更改了好多次,写的很乱。我听完课知道了看题一定要仔细!以后虽然可能题目不会给类图了,但是还是应该特别仔细地看题。以后在规划方法时候一定要分好,不然本来应该两个的方法,一个方法来实现会特别的复杂,容易出错,思绪也会打乱。

2.OO设计心得

①对面向对象三大技术特性之间关系的理解

我的理解是在面对一个问题时应该要把问题分解成多个小问题来解决,然后通过一个一个类配合起来一起实现,这就是封装性,然后把某些有相同特征的类用抽象类或接口来让具体的子类来继承实现,这样可以复用一些代码,这里就有继承性,还有对其中方法的重写就是多态性的实现了,这样可以让思路更清晰,不容易出错。

 

②面向对象设计的基本原则理解(单一职责原则及“开-闭”原则)

同过这三次的作业,特别是第二次的题目2,让我对单一职责原则的理解更加的深了,

ConstantTerm类(常数项类),PowerFunctionTerm类(幂函数类),Expression类(表达式类),Polynomial类(多项式类),这些类各自实现自己的职责就行了,然后合作起来就能有更大的能力,解决一个大问题了。“开-闭”原则的实现是用抽象类来代替具体类,这样就不会在实现新功能的时候更改原有代码,还有也可以通过继承和实现接口来扩展新功能,不会总是copy原代码然后修改某些代码。

 

OO编程思维的理解

在解决这些问题的时候,都是把对象分离出来然后一个个实现,然后一起组合起来解决问题,这样既思路清晰,实现起来也简单,正确性较高,复用性也好。

 

④类设计心得

这三次的作业老师都给了参考的类,所以我都是按照所给的类来做题的。我也感觉老师给的类很好,实现起来简单,也很好理解,我也明白一个好的类设计对解题的帮助是很有用。

 

3.测试的理解与实践

①测试对于编码质量的重要性

测试的作用可以保证自己所写的程序是否可以解决某个问题的正确性,肯定是重要的,每次感觉自己写的代码是对的,但是在pta提交的时候就总会有一些测试点过不去。

 

②查阅资料,假设使用Junit进行程序的测试是否可行

我认为在写程序的时候和写完后测试都可以,在写程序的时候可以给每一个单元进行测试,保证每个单元的正确性,这样不会在写了很多代码的时候如果有问题就要在许多不确定正确与否的代码中找错误了,可以减轻负担;写完后测试可以检测某个易出错的单元进行测试,更好查出错误。但是还是应该进行整体的测试,才能保证正确性。

4.课程收获

总结这四周来在OO方面的教训及收获

我在这四周的学习中,我掌握了更多关于OO方面的知识,也练习了很多比较基础的题目,让我对面向过程和面向对象的区别有了进一步的理解,明白了面向对象的优点和用面向对象思维来解决问题的好处了。

 

5.对课程的建议

①第三阶段作业难度、题量的建议

作业难度的话,我认为在homework4的题1与比后面作业之间的话比较合适,题量的话保持原样吧

②课程内容讲解方面的建议

老师上课的方式和内容方面都还好,继续保存就可以了。

猜你喜欢

转载自www.cnblogs.com/boke-boke-boke/p/12813237.html