第二次作业周期总结

0.前言
主要说明本次博客针对的作业情况

第二周期作业分别为水文数据校验及处理 ,蒙特卡罗方法求圆周率 ,图形继承 ,图形继承与多态 ,一元多项式求导 ,图形卡片排序游戏, 图形卡片分组游戏,求素数。题中巩固了类的设计,开始接触到正则表达式对数据合法性的校验、继承、多态等。

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

在过去的四周有三次pta作业,完成作业的时间逐渐减少,我也开始慢慢熟悉面向对象的程序设计。同时我在学习的过程中也学会了用测试类来检验程序,以及如何使用debug来调试自己的程序,效率更高并且能够跟清晰的找到自己程序的逻辑漏洞。而从每一道题看来,我们是按照老师设计的UML类图来进一步理解什么是面向对象。从水文数据开始,慢慢实现自己java技术的蜕变。60到80再到90,虽然自己没有达到满分,甚至在“一元多项式求导”一元多项式求导60分只得了24分,但在一次次作业中,发现了类继承和多态的难度,封装性的重要。如在第五次与第六次作业中,第五次完成的好,那么第六次只需要加一个继承与shape的子类即可,这样的题目渐渐深入,将我们的框架思维也一步步在训练,走向成熟。而这三次题目的完成都在对UML类图熟悉的前提之下。

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


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

在第二阶段的作业中,经常会碰到没有思路的题目,如水文数据而在我看来,这道题迟迟没有进展,是由于学习的正则表达式知识没有得到充分的应用。在题目中甚至连某个类某个函数是干什么的都不知道。对于老师设计的UML类图也没有彻底的理解。所以只能更多询问同学们的帮助,问题主要是不知道怎么将图形面积进行排序,对Arrylist不熟悉,在询问老师与网络的积极查询之后,才懂得是将面积存入list里面,采用list.sort解决的。

第六次问题主要是一开始不太理解ArrayList<Card> cardList,不懂数组里的数据都是Card类,接着由于第五次是将面积的数据存入,是double类,因此不知道如何在cardlist里调用getArea()方法。最后是知道子类是父类的对象,因此可用cardList.get(i).shape.getArea();来得到面积的大小。难度相较于前几次也确实有所下降。自己的知识与语言能力得到了提高与展现。

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

前两次所用时间较多,第六次明显题目难度下降,消耗时间较少。而花费时间完成作业的前提便是能懂得老师的UML类图,在我看来,每个人都有自己善于运用的方法与技巧,父类中又包含了怎样属性与方法,如何抽象与继承,不同的技巧带来的是不同的设计方案。总体来说,前两次作业时间大致相同,第六次时间使用较少。

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

由于自己刚开始学习编程语言时的不严谨,在这三次作业中总由于小错误而失分,这让我懂得了java编程的严谨,哪怕就是细微的错误也是错了,这样更有利于我养成了在编程过程中细心的习惯。由于前后名的不同,大小写的改变,字母不小心而导致的输出错误,中英文的混用,父类继承的使用错误。这些无不在告诫我编程中严谨性的重要。
2.OO设计心得
①对面向对象三大技术特性之间关系的理解

封装:在我看来封装像是一个放火墙,是你只能看到外部的内容,抽象性函数接口的实现细节拼接起来,却又对内部的数据提供了严谨的保护,防止了对该部分内容的错误使用。只有通过相关的授权,才能对该部分进行操作。

继承:在我看来继承与生物中的遗传相挂钩,与父有所同,而又有所不同。在父类的基础上进行扩充或改造,得到新的方法,从而在继承后发挥子类的作用。当一个类能够获取另一个类中所有非私有的成员属性和行为时,就称这两个类之间具有继承关系。而值得一提的是其中Object类为所有类的父类。子类继承父类的方法,减少代码的重复性,也可以在内部构造自己的方法。

多态:多态就是指一个类实例的相同方法在不同情形有不同表现形式,但通过一个公共的类,那些操作可以通过相同的方式予以调用。通过指向父类的引用,在不同子类中重写的方法。引用变量所指向的具体类型和通过该引用变量发出的方法调用在编程时并不确定,而是在程序运行期间才确定。

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

单一职责原则:每个类都由只属于自己的一项功能,并且该功能必须由这个类封装起来,同时这个类只能根据他自己本身代码的修改而修改。再次同时,对此类的修改不会对其他的类造成影响,封装的作用也有所体现。

“开-闭”原则:每个类应当对扩展进行开放,开放时进行扩展,比如继承,接口,抽象类等操作,对修改进行关闭,而关闭时原本封装好的代码不允许更改。其他的修改对他并没有什么影响,但是其他的类是可以使用他的功能和属性。

③OO编程思维的理解

面向对象的特点便是封装,多态,继承。面向对象对于问题的解决和实现在于考虑的是实体,而相反的面向过程,是考虑问题实现步骤的具体化,于是面向对象独特的抽象出需要的类,而类有其自己的属性和方法,具体的一个实体则称为对象,通过类和对象的继承、多态、封装来解决问题。继承主要可以提高代码的复用性,比如子类可以继承父类的方法,还可以扩展其他的方法,也可看出面向对象更符合人的思考习惯。

④类设计心得

类的原则包括单一职责原则及“开-闭”原则。类是面向对象一种属性,没有类的定义,就更加不会有面向对象的存在。类的实用性与简化性将将其更加关键。 

 3.测试的理解与实践

测试简而言便是便是发现编程代码的错误,从而减少后期维护中的人力损耗。而测试可以验证编程的代码的正确性和实用性,没有测试,那么写的代码可能会实用性很差,如果有测试就会让代码更加优质,让代码的质量提升,实用性和利用率提高。多数Java的开发环境都已经集成了JUnit作为单元测试的工具,在我看来,JUnit就是别人写好的单元测试框架,使用此框架可以缩短代码的测试时间和准确度。

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

面向对象的思维得到进一步的加深,对面向对象的三大特点封装,多态,继承得到更加深刻的认识。对单一职责原则及“开-闭”原则在题目的使用中也了解了更多。如何去设计一个类,何为多态以及抽象类。看得懂UML图之间的关系和运用。虽然编程能力有所提高,但是在完成题目时,很多时候都需要询问老师和同学,这便暴露出自己的不足。


5.对课程的建议

有时题目过多导致时间的使用完全不合理,从而有事倍功半的结果。也希望老师能讲解一些具体的作业问题。

猜你喜欢

转载自www.cnblogs.com/wzjie/p/12815614.html
今日推荐