PTA作业总结2

                                                                     PTAjava博客总结2 

 

0.前言

之前的java基础作业为我们打开Java的大门,让我们对Java有了一定的了解,而本次作业属于进阶过程,内容相对较多且难度不小,使我感觉知识储备远远不足,必须加强练习。

(1)     第一次作业中的图形继承衔接了之前的java基础作业比较简单,而后是求圆周率主要是考察面向对象的知识,最难的就是水文数据校验,这里涉及到正则表达式的使用。正则表达式的内容非常多,只能边学边积累。

(2)     第二次作业是有关与继承与多态,还有对一元多项式的求导问题。继承与多态是Java中非常重要的内容,我觉得这个是为了避免多余的代码以及增强程序的可扩张性和可维护性。另外一元多项式中又涉及到对正则表达式的使用,这个真的让我思考了好久,翻了不少网页才解决。

(3)     第三次作业主要考察的是类的继承、多态性使用方法以及接口的应用。这个需要我们去比较两种题型的不同之处,还要考虑类的结构如何完善才能使代码具有更好的可复用性。

1.作业总结

①  知识迭代:第一次作业起过渡作用,主要还是前面的基础知识加上正则表达式,由于对正则表达式接触不多,所以走了好的弯路,比如这里可使用表达式判断数据(平年2月29号)是否正确,但是我还是使用之前的if else来判断,在第二次作业中就相对要好一些,我已经可以使用正则表达式分割一元多项式并判断其正确性。另外就是学习了继承与多态,初步掌握了如何使用他们解决一些问题。最后一次作业就是加深对继承与多态的理解,还有接口的使用。

②  三大技术特性:

封装性:封装是面向对象编程的核心思想,将对象的属性和行为封装起来,而将对象的属性和行为封装起来的载体是类,类通常对用户隐藏其实现的细节,这就是封装的思想。继承性:简单来说就是使子类的对象拥有父类的全部属性和行为,同时可以增添自己的所特有的属性和行为。多态性:简单来说就是一个程序中同名的多个不同方法共存的情况,通常使用方法的重载和重写(也叫覆盖)来实现类的多态性。关于这三个技术特征,我自己也不是很懂,所以百度了一下他们的概念。自己的理解就是封装需要用类来装载类里面的对象,我们只需要调用这些类就行了,需要修改时就直接在类里面添加就行,平常不需要直接打开类查看。继承,就是子类包含父类的所有属性和方法,并且子类还可以扩张其他东西。多态:程序中有多种相同的方法,子类可以重写父类的方法,以实现相关的功能。

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

第一次作业:水文数据校验及检测是一次性输入多条数据,那在判断数据的正确性时我得考虑如何将这些数据分开,还有一些数据中可以包含空格,这个如何去掉其中的空格。

解决方法:

在输入的时候每输入一组数据就增加一个“|”,然后用split(“\\|”)分开他们。

我采取trim()去掉其中空格。

第二次作业:输入的多项式如何分割成每一个一元多项式,然后如何校验每一项的正确性。

解决方法:

我使用正则表达式解决这两个问题:首先输入的可能是一个不规范的表达式,我尽可能的考虑错误的情况,在输入的时候用正则表达式描述他,校验的时候用正确的表达式去校验。

第三次作业:输出时有一点小问题,我重新写了一个show()的方法输出结果。

④   每次花费的时间比:

第一次作业花费24h,第二次作业花费:24h,第三次作业:6h。

比例是:4:4:1。(前几次作业主要是正则表达式卡了很久。)

⑤   对编程过程严谨性的认识及教训:这次没有出现输出格式上的问题,但是没有考虑到输入格式的各种情况,例如输入的数字中含有空格(1 1, 11 ,1 1 1),这几种情况在校验的时候会出现报错,或者少个“*”等等,这些都需要自己去总结经验。还有就是程序运行的时候要大量的存储空间以及运行时间,这些应该是自己的算法不够先进,还需多多学习,积累算法。

2.设计心得

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

封装性保证了类内部的数据结构的完整性,使用类的用户不能直接修改其中的代码,但是留有有限的接口与外界联系,我可以使用继承关系扩展封装的功能,通过子类来修改封装的类,多态就是解决一些需要在父类的基础上扩展各种不同的功能的问题,这样子类包含必要的功能,还可以有自己的个性。我觉得封装保证了代码的安全,而通过继承可以在不修改封装的情况下修改方法,多态就是在继承的基础上扩展更多需要不同功能的子类。

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

单一职责原则:一个类只实现一种功能,例如:在刚开始运算类时,我总喜欢在一个类中定义“+,-,*,/”四种运算,这虽然让类的功能最大化,但是在要求任意修改其中一种运算就需要频繁打开这个类进行修改,所以我们可以定义四个类,让每个类负责一种运算,这样在对类进行修改时,只需找到其中对应的类进行修改即可。

  “开-闭”原则:各个模块对于扩展是开放的,对于修改是封闭的,这样可以随时对这个模块添加新功能,可以提高代码的可复用性。

③   编程思维的理解:

在编程的时候,我应该首先思考这道题要实现什么功能,应该如何分类,每个类中应该实现什么样的功能,各个类之间有什么联系,是否可以使用继承关系构造子类,以便后续统一调用,还有对子类应该进行什么样的扩展,可以将他们共有的功能抽象出来写入父类。

④   类设计心得:

每个类应该实现一个独立的功能,以方便后续的修改,类之间的继承关系可以添加一些抽象的方法,然后在子类中实现。要扩展子类的功能是可以通过接口来实现。

3.测试的理解与实践

①   测试对于编码质量的重要性:判断代码的功能是否完善必须通过测试决定,除了能够对测试样例输出正确的结果之外,还应该看运行时间,以及运行内存,只有这两样都达标才算是合格。样例需要包括一些随机样例,特殊样例。比如输入中含有一些空格,特殊字符,或者缺少一些字符。代码要能够对这些做出正确反映,或者可以给出修改后的正确答案。

②   查阅资料,假设使用Junit进行程序的测试是否可行:这是可行的,我可以通过修改测试类来进行随机样例,特殊样例的测试,junit中还有特殊测试:批量参数测试,打包测试,这个完全可以满足现阶段的测试。

4.课程收获

我觉得教训颇多,正则表达式,输入的特殊样例,代码运行效率等这些都让我抓耳挠腮,思考如何通过正则表达式判断输入的正确性,随便来个空格就非常麻烦,各种特殊情况都必须考虑,代码还要求运行时间短,占用内存少这些都必须去百度上学习更高级的算法。当然这也让我意识到必须学习,学习,在学习,只有这样知识面才能更广。

5.对课程的建议

①  第三阶段作业难度、题量的建议:我觉得题量还是必须适当,一定量的代码可以训练自己,难度的话还是循序渐进就好,太多的难题写不出来就等于浪费时间。

②  课程内容讲解方面的建议:强烈建议讲解一些比较高效的算法,自己的算法太过麻烦,无论是时间还是内存都很大。

猜你喜欢

转载自www.cnblogs.com/oushuai0911/p/12788672.html