Java第二周期作业总结

0.前言

第四次作业包括水文数据校验及处理、蒙特卡罗方法求圆周率、图形的继承;第五次的作业包括图形的继承和多态一元多项式求导;第六次作业包括图形卡片排序游戏、图形卡片分组游戏、求素数。这三次作业涉及的知识点有正则表达式对数据合法性的校验、继承、多态等。

1.作业过程总结

第二阶段是按照老师设计的UML类图来进一步理解什么是面向对象,以便于我们更加熟练得去运用。第4次作业是最难的,叫做水文数据校验,并且运用到了刚学的但还不熟悉的知识——正则表达式。一开始写这个题目,没有任何思路,甚至连某个类某个函数是干什么的都不知道。这次的作业比较依赖于同学,很多思路和方法都是询问同学了之后才了解。因为写过了第4次作业最难的题目,第5次作业相比于第四次,显得简单了一些,主要是考察类继承和多态,虽然子类很多,但先拆解开一个个写,最后再拼接起来,整个题目显得也是非常容易的,这次作业中让我感到棘手的仍然是正则表达式。第6次作业在第5次的图形的继承和多态的基础上,加了一个梯形类,并且要用到Comparable接口,由于老师在课上已经讲过这些知识。所以也不是很难。但是通过第6次作业,发现封装性非常重要,如果第5次写的好,那么第6次只需要加一个继承与shape的子类即可,不用将整个程序进行更改,十分方便。而继承性中,子类也是父类的对象这一个特点使得很多函数不需要重新定义参数,让整个程序简单了很多。在第4次作业中遇到的问题主要是正则表达式以及不知道类之间的关系,询问同学才得以解决。第5次作业问题主要是不知道怎么将图形面积进行排序,对Arrylist不太熟悉,最后是将面积存入list里面,采用list.sort解决的。而第6次问题主要是一开始不太理解ArrayList<Card> cardList,不懂数组里的数据都是Card类是什么意思,自己思考之后慢慢理解了,接着就是在计算面积的时候我的代码由于和第五次的不同,因此不知道如何在cardlist里调用getArea()方法。最后是知道子类是父类的对象,因此可用cardList.get(i).shape.getArea()来得到面积的大小。

花费的时间比例:7:4:3

第4次和第5次用来写代码的时间比较多,第六次由于我输出的list是小写,而题目要求是大写,而我却没发现,以为是代码有错误,因此花费了很多时间。在经历了这样的错误以后,我每次都会先检查输出的形式,也得到了教训,不能花费大量的时间到这种低级错误中,让我懂得了java编程的严谨,哪怕就是细微的错误也是错了,使我养成了在编程过程中细心的习惯。还有我认识到编程时的逻辑一定要严谨,像我之前漏了一种情况的那道题目,在发现错误后,我花了很长时间来寻找它。所以在分析问题时一定要考虑周全、逻辑严密。

2.OO设计心得

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

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

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

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

面向对象设计的基本原则理解(单一职责原则及-原则):

单一职责原则:每个类都应该有自己的单一的功能,并且该功能应该由这个类封装起来,同时这个类应该只有一个引起它变化的原因那就是他自己本身代码的修改,他的修改不会对其他的类造成影响。

-原则:每个类应当对扩展进行开放,对修改进行关闭。其他的修改对他并没有什么影响,但是其他的类是可以使用他的功能和属性。

OO编程思维的理解:面向对象对于问题的解决和实现在于考虑需要什么样的实体不在于问题实现步骤的具体化,于是抽象出需要的类,而类有其自己的属性和方法,具体的一个实体则称为对象,通过类和对象的继承、多态、封装来解决问题。继承主要可以提高代码的复用性,比如子类可以继承父类的方法,还可以扩展其他的方法。

类设计心得:类的原则包括单一职责原则及-原则。同时类是面向对象最关键的一种属性,如果没有类的定义,就不会有面向对象的存在。类不仅可以升高实用性,也可以对代码进行简化。 

3.测试的理解和实践

测试对于编码质量的重要性:测试可以验证编程的代码的正确性和实用性,如果没有测试,那么写的代码可能实用性很差,可能在某个范围内,代码是可读的,但是在特殊情况就无法正常使用,这样如果有测试我们就会让优化代码,让代码的质量提升,实用性和利用率提高,成为优质代码。

查阅资料,假设使用Junit进行程序的测试是否可行:可行,JUnit是一个Java语言的单元测试框架,它有它自己的JUnit扩展生态圈。多数Java的开发环境都已经集成了JUnit作为单元测试的工具。同时JUnit就是别人写好的单元测试框架,使用此框架可以大大缩短代码的测试时间和准确度。

4.课程收获

通过这四周的学习,让我学习到了如何去设计一个类,也学会了类的继承,多态以及什么是抽象类,什么是接口。对类之间相互调用也变得更熟悉,同时也认识到了类的单一职责和封装多么重要。进一步理解了面向对象,以及面向对象相较于面向过程的优势。还有对UML图理解更深了,看得懂UML图之间的关系和运用。虽然编程能力有所提高,但有时还需要向同学寻求帮助,希望自己能继续努力。

5.对课程的建议

我建议作业布置的题目更加的典型实用,题不在多而在精。测试点的错误能更明确的指出,这样就可以避免修改多次仍未能通过测试的情况出现。还希望老师能够在每次讲新内容之前先把上一次作业最简洁明了的代码给出供同学们参考,以便于同学们与自己所写的代码进行对照,产生新的思路。

posted @ 2020-05-01 14:13  爱学java的Bovin  阅读(143)  评论(0)    收藏  举报