第二阶段java作业总结

一、作业过程总结

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

       经过这个阶段,感觉自己的java编写能力是有提高的,也进一步深入理解了面向对象设计的封装、继承与多态以及原则中的“单一职责原则”,更多的考虑类结构如何完善才能使得系统具有较好的可复用性。

1. 第四次作业的水文数据校验及处理、蒙特卡罗方法求圆周率 、图形继承,这些训练了我们对于java正则和继承关系的运用。水文数据的处理其实花费的时间挺多的,在网页学习正则表达式,与同学也交流了很多,表格的格式用正则来实现。如下图所示:

2.第五次作业图形继承与多态、一元多项式求导,编程时需要考虑面向对象中的封装性、继承性以及多态性和java的正则,一元多项式求导中的很多情况也是通过正则去判断,例如:

但很明显正则文化博大精深,还是有很多我要去学习的,于是又开始了正则的探索过程。

3.第六次作业图形卡片排序游戏、图形卡片分组游戏还有个加分题求素数 ,这次作业的结构比较简单一些,需要我们掌握类的继承、多态性使用方法以及接口的应用,根据我们前面写的shape类可以复用,节省了很多时间。

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

       我们用private把数据被保护在内部,程序的其它部分只有通过被授权的操作getter和setter,才能对数据进行操作,这是封装性;我们做的图形题用到了继承,继承可以解决代码复用,Circle类、Triangle类、Rectangle类、Trapezoid类存在相同的属性(变量)和方法,从这些类中抽象出父类shape,在父类中定义这些相同的属性和方法,所有的子类不需要重新定义这些属性和方法,只需要通过继承父类中的属性和方法;多态呢,通过指向父类的引用,在不同子类中重写的方法。

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

       在这次作业中,我在格式的正则上花了挺多时间的,刚开始看到水文数据校验及处理,我看到那个表格分割还是无从下手的,后来也是尝试了想了二维、一维进行各小部分的拆分,想思路否决思路的过程一直在循环,还有一元多项式求导考虑到多项式中的带了整数项,分割后系数怎么区分正负,然后进行运算,其实运算部分倒没什么,就是数据分割真的是懵了挺久的,也是跟同学请教讨论了思路。

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

       这次划分时间的比例是2:3:1,也是根据题目难度不同和我的掌握情况而改变的。

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

        图形卡片分组游戏 中的输出分组后的图形类型及面积,我最先想到的是通过数组来获取各图形的面积再来冒泡排序一下,当做完输出之后发现当没有这个图形时,数组会自动输出0.00,然后恍然大悟觉得题目是让我存储到list里面,其实仔细看指导书也能意识到题目真正目的,有点迟钝,不过还是挺顺利的完成了题目要求。

2.OO设计心得

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

       结合网上介绍和自己做作业的理解如下:

封装:在一个对象内部,数据可以是私有的,不能被外界访问。通过这种方式,对象对内部数据提供了不同级别的保护,以防止程序中无关的部分意外的改变或错误的使用了对象的私有部分。像我们用private把数据被保护在内部,程序的其它部分只有通过被授权的操作getter和setter,才能对数据进行操作。

继承:实现继承是指直接使用基类的属性和方法而无需额外编码的能力,接口继承是指仅使用属性和方法的名称、但是子类必须提供实现的能力。子类继承父类的方法,减少代码的重复性,自己也可以在内部构造自己的方法。

多态:多态就是指一个类实例的相同方法在不同情形有不同表现形式,但通过一个公共的类,那些操作可以通过相同的方式予以调用。通过指向父类的引用,在不同子类中重写的方法。

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

       单一职责原则:一个类的功能要单一,不能包罗万象,不然效率却高不起来。

       “开-闭”原则:一个模块在扩展性方面应该是开放的而在更改性方面应该是封闭的。如果现在要加入其他功能,那么应当在不用修改原来功能代码的前提下,就能够增加其他功能的代码。

③OO编程思维的理解

        经过这几次作业不能说完全理解了OO思想,只能说比初印象更深了一些,我理解的面向对象就是把某事物的特点和功能都抽象出来封装成一个类,由这个类来创建具体的对象,具体要要用的时候呢,可以根据这个类来创建具体的对象。

④类设计心得

        使用接口来设计代码,每个层次不是直接不是直接实例化在上层中,而是通过定义接口,仅向上层暴露其接口功能,上层对于下层仅仅是接口依赖,而不依赖具体类,这样做的好处是显而易见的,首先对系统灵活性大有好处。当下层需要改变时,只要接口及接口功能不变,则上层不用做任何修改,甚至可以在不改动上层代码时将下层整个替换掉。

3.测试的理解与实践

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

        测试阶段的根本目的是尽可能多地发现程序中的错误, 最终提高代码的质量。就像老话说的,是骡子是马拿出来遛遛。但是提高代码的质量不能依赖于测试, 代码的高质量是分析和设计出来的,而不是靠测试修补出来的。

②使用Junit进行程序的测试是否可行

        自从老师教了我们Junit单元测试,除了那次作业,还真没有用过Junit进行单元测试,但是写单元测试的过程本身也是一个对自己代码不断review的过程,在这个过程中,可以发现一些逻辑设计上的问题,代码编写方面的问题,比如一些边界条件处理、空对象的保护和类构造时参数的依赖问题,如果是工程量大的代码我觉得Junit测试是很实用的。

4.课程收获

        经过这几次作业,我感觉自己的java编程能力有了明显的提高,逐步从面向过程走向面向对象,对正则分割、面向对象设计的封装、继承与多态以及原则中的“单一职责原则”也进一步深入理解了,大部分时候可以自己思考架构思路、独立完成代码设计,但是还有小部分较难题目需要和同学讨论学习。

5.对课程的建议

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

         我觉得第三阶段可以在第二阶段的基础上难度稍加递增,题量无需太多,考虑到我们现在多了几门实验课,但侧重点可以不一样。

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

         希望老师在pta作业结束后,简单讲解一下题目的解答,因为虽然可能会有很多满分,但是大家思路有好有坏,可以考虑一下自己的代码是不是有更简单的方案。

原文地址:https://www.cnblogs.com/1023ls/p/12799271.html