对近期JAVA学习的一些总结2

A.首先是对近期做作业过程的总结
①总结三次作业之间的知识迭代关系:

第四次作业涉及到了使用Java中的字符串处理类以及正则表达式对输入字符串数据进行合法性校验及计算、使用蒙特卡洛仿真方法求圆周率以及图形继承;第五次作业涉及到了图形继承与多态还有使用类的继承、多态性编写程序对简单多项式的导函数进行求解;第六次作业练习了类的继承、多态性使用方法以及接口的应用还有对输出的规范化以及排序,还练习了求质数的个数的算法优化;经过这3次大作业,我逐渐熟悉了对java类的设计与实现,在这过程中例如第四次大作业,刚开始接触正则表达式,由于自己的理解与学习还不够深刻,导致这次作业完成的并不是特别好,所以我应该利用最近的时间查缺补漏,提升自己的能力。


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

通过老师在课堂上的教学以及讲解还有结合自己在中国mooc和课堂的学习我对面向对象的封装性、继承性与多态性三大技术特性的理解如下:

  1. 继承性:程序中有父类和子类,子类继承了父类的某些特点而子类自己也可以有独有的特征。
  2. 封装性:顾名思义,封装性我理解为就是将程序的某些东西隐藏和包装起来,而外界没有办法直接访问,只能通过某些特定的方式才能访问,我曾经看过一篇文章写过一个例子能够加深理解,我们可以把茶的味道设为该茶最重要的特性之一,但是我们无法直接的感受到它的味道,而是需要通过“泡”这个动作将茶的味道释放在水里,这样我们才能尝得到茶的味道,如果转化成编程思想那就是味道是私有的,我们不能直接把茶吞进肚子里,而只能通过成员函数“泡”才能访问到味道。
  3. 多态性:对于多态的理解我还不够深刻,但是通过上网查阅文章我也有了基本的概念,其中有一篇我觉得说的比较好,“多态就是指程序中定义的引用变量所指向的具体类型和通过该引用变量发出的方法调用在编程时并不确定,而是在程序运行期间才确定,即一个引用变量倒底会指向哪个类的实例对象,该引用变量发出的方法调用到底是哪个类中实现的方法,必须在由程序运行期间才能决定。因为在程序运行时才确定具体的类,这样,不用修改源程序代码,就可以让引用变量绑定到各种不同的类实现上,从而导致该引用调用的具体方法随之改变,即不修改程序代码就可以改变程序运行时所绑定的具体代码,让程序可以选择多个运行状态,这就是多态性”。通过他的讲述我的理解是我们可以通过一个父类就能够引用不同的子类,这就是多态,但是我们只有在运行的时候才会知道引用变量所指向的具体实例对象。 ③作业过程中遇到的问题及解决方法

第四次作业共有三道题:

其中第一题难度较大,特别费时间,由于对正则表达式的不熟悉我在网上也查阅了许多资料以及花了很多时间去学习,但最后本题的完成情况也并不理想;

第二题是使用蒙特卡洛仿真方法求圆周率,刚开始我对这种方法求圆周率并不是很熟悉于是自己在网上学习了一下原理以及了解到了一些例子方便理解,最后结合题目所给思路:“在平面直角坐标系内随机选取一个坐标点,假定该坐标点为矩形左上角的位置,同时输入该矩形的长和宽,由于本例中要求矩形为正方形,所以必须要求输入的该矩形场合宽务必相等,以上均为系统的输入。据此,可以求出该正方形内接圆的圆心坐标点及半径。然后就可以通过随机数方法获取落于正方形之内的坐标点,同时统计落在圆内的点的个数,由此就可以估算出 π 的值”,中间在simulation类上花的时间比较多,最后还是比较成功的实现了功能;

第三题是图形类的继承,主要实现四个功能: 从键盘输入1,则定义圆类,从键盘输入圆的半径后,主要输出圆的面积; 从键盘输入2,则定义矩形类,从键盘输入矩形的宽和长后,主要输出矩形的面积; 从键盘输入3,则定义球类,从键盘输入球的半径后,主要输出球的表面积和体积; 从键盘输入4,则定义立方体类,从键盘输入立方体的宽、长和高度后,主要输出立方体的表面积和体积;假如数据输入非法,系统输出Wrong Format,这道提完成得还算比较成功,因为大体上可以复用我之前写过的类。

本次作业基本上就靠后面两道题拿分,第一道水文题还需要时间消化一下。

第五次作业共有两题:

第一题练习的是类的继承、多态性及其使用方法,这道题总的来说思路比较清晰,能够快速在脑子里有一个概念,因为没有用Arraylist所以最后在排序的实现上花了一些时间思考;第二题是使用类的继承、多态性编写程序对简单多项式的导函数进行求解,这道题总的来说难度还是有的,主要是在思考如何将输入进行一个正确的分割,分成一个个小项再来进行处理,最后整合的过程我也思考了好一会,最后功能也基本实现了。

第六次作业共有三题:

第一二题主体差不多,主要在输出上大有不同,因为第一题在思考逻辑上没有考虑全,导致在多张卡片测试时会输出错误的答案,第二题主要在输出上比较费时费脑,不过总的功能还是达到了要求,最后一题是算法优化题,这道题还比较有意思,刚开始在做的时候思考的比较简单,直接两个for就搞定了,但是我在测试时小的数字基本没问题,但事实一旦到了1000000以上eclipse就会变得非常卡,甚至结果都输出不了,最后经过学习,使用了对合数和素数的分组大大减少了判断时间,基本上10000000能控制在400-580ms左右.

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

5:3:4

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

我觉得编程应该站在一个比较高的位置来看问题,有几次我一拿到题就开始码代码,没有什么过多的考虑,只想着达到功能,但是最后往往有些小的细节没有考虑到导致某些测试点不能通过,所以还是不能那道题目就急于完成,还是应该有一个宏观的思考,对类的安排与设计要严谨不能说只要达到功能就行,还要考虑是否符合java设计的基本原理以及复用性等等。

B.OO设计心得
①对面向对象三大技术特性之间关系的理解

a.继承性:程序中有父类和子类,子类继承了父类的某些特点而子类自己也可以有独有的特征。

b.封装性:封装性我理解为就是将程序的某些东西隐藏和包装起来,而外界没有办法直接访问,只能通过某些特定的方式才能访问。

c.多态性:我的理解是我们可以通过一个父类就能够引用不同的子类,这就是多态,但是我们只有在运行的时候才会知道引用变量所指向的具体实例对象。


②面向对象设计的基本原则理解:

基本要素有封装、继承、多态;设计原则有一个类只做好一件事,可复用性等。

③OO编程思维的理解:

经过近期的学习了解到了面向对象的基本特征有抽象、封装、继承、多态,还有程序的可拓展性、可修改性和可替换性等。

④类设计心得

我觉得现阶段还是依赖于题目或者资料上所给的思路来实现功能和类的设计,不过如果自己思考也会有一些思路与想法,这些思路在以后可以尝试的实践一下。


C.测试的理解与实践
①测试对于编码质量的重要性:

测试的重要性不仅仅体现在程序结果是否正确,而更是当输入极端数据时程序能否给出良好的反馈或者提示,而使得整个程序更加的完整和实用,例如在这几次JAVA作业中都要花一定的时间去考虑wrong format 的情况。

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

经过了解学习,使用Junit进行程序的测试是可行的。


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

收获:对面向对象的设计有了一定的认识与实践,对于面向对象的基本要素,封装、继承、多态有了一定的认识与理解

教训:有时候做题过于着急,导致某些细节没有考虑周到使得某个测试点会过不去,以后应该先对整体有个思考再下手

E.对课程的建议
①第三阶段作业难度、题量的建议

建议以基础和中等题为主,高难度的题可以以加分题的方式呈现

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

希望老师能在每次作业前大致讲一下思路,完成作业后拿一些题来进行讲解

猜你喜欢

转载自www.cnblogs.com/Lucas-QTFY/p/12817552.html