0:前言:

又过了三个星期,已经开始渐渐的适应了Java编程,这次讲的是第二阶段的学习,就本三次作业来讲,前两次比第三次要难(可能老师是想让我们调整一下),通过了这三次的学习,从刚开始的懵懵懂懂,对NML图的惧怕,到现在的习以为常,能根据图写java程序。

一:作业过程总结

1.前两次作业主要是正则表达式的应用,第四次作业第一题最有难度,水文数的校验,最主要的是我们对这个相关知识不熟,导致第一眼看这个题就有惧怕心理;然后第五次作业第二题一项多项式求导也是用到了正则表达式。正则表达式这个点是有一点难度的,花的时间比较长,举个例子:水文校验时间这里用到的正则表达式((([1-9]{1}|[1-9][0-9]{1}|[1-9][0-9]{2}|[1-9][0-9]{3})/((([13578]|1[02])/([1-9]|[12][0-9]|3[01]))|(([469]|11)/([1-9]|[12][0-9]|30))|(2/([1-9]|[1][0-9]|2[0-8]))))|((([1-9]{0,1}[0-9]{0,1})(0[48]|[2468][048]|[13579][26])|((0[48]|[2468][048]|[3579][26])00))/2/29)) ([02468]|1[02468]|2[02]):00从它的长度就足以看出来这道题的难度。然后我总结一下三次作业的迭代关系,第四次作业的图形继承简单的就是子类继承父类,到第五次作业图形继承和多态在原来的基础上加了抽象类,最后到第六次作业的图形卡片分组游戏用到了多态。还有两次作业的正则表达式也可以看作是迭代的一方面吧。

2.对封装性的理解就是当创建一个类的对象以后,可以通过“对象.属性”的方式,对对象的属性进行赋值,那个农夫过河就可以深深的理解封装的好处。还有就是赋值操作要受属性的数据类型和存储范围的制约;还有就是四种访问权限private,缺省,protected,public,这些规则老师上课已经详细讲过了。对继承性的理解就是首先是定义:在一个类基础上定义一个新类叫继承,原有的类叫父类,新生成的类叫子类;并且一个父类可以有多个子类,而一个子类只能有一个父类。继承的特点就是子类拥有父类的属性和方法;子类可以有自己新的属性和方法;子类可以重写(覆盖)父类的方法;可以声明父类,创建子类;就比如第四次作业中的Shape父类,Shape子类有圆形类,矩形类,三角形类,梯形类,子类有很多个但是父类就只能有一个,父类中他有自己的getshapename()方法,子类中有override重写父类中的获得面积的方法,这里就简单的将继承讲到这里。对于多态的理解:在第五,六次作业中有做体现,就是根据面积的大小对图形进行排序,还有就是tostring方法也有体现,还有子类向父类的转型比如Shape circle=new Circle(Main.input.nextDouble());还有就是父类对象向子类对象的转型,但有个前提就是向下转型之前先要向上转型。总的来说就是封装是为了保护属性的一种操作,继承是为了扩展类的功能,多态是不同类的对象对同一消息作出不同的响应。

3.在作业中遇到了各种各样的问题,例如:在第四次作业第三题没有考虑到图形的边为零时是非法的,第二题的随机数产生这里出了点问题,第一题格式错误就是多打了空格废了很久;第五次作业第一题也是出现了格式错误,第二题判断不周全;第六次作业大体上是没什么问题,这里就是第二题因为不仔细在面积求和的这个地方多加了一次面积,这里也是找了很久,第三题的求一个范围内的素数,用传统的方法出现了运行超时和内存超限,所以要减少时间复杂度,首先我缩小找的范围,从零到n,缩小到零到根号n,虽然是运行出来了,但是时间非常的长,。解决方法:1.同学有没有出现一样的错误,2.问老师,3.上网查找相关的资料,4.使用debug一步一步的找;最实用的还是debug。

4.花费时间的比例:第四次作业二三题花了一天的时间,第一题水文校验花了四天的时间;第五次作业第一题花了一个小时,第二题的求导花了很长时间;第六次作业不是很难,就花了两天时间;

5.对编程过程中的严谨性的认识和教训:主要是要仔细,漏掉东西和多加东西是要不得的。

二:OO设计心得:

1.对面向对象三大技术特性之间关系的理解:封装是为了保护属性的一种操作,继承是为了扩展类的功能,多态是不同类的对象对同一消息作出不同的响应。

2.面向对象设计的基本原则理解:一个对象应该只包含单一的职责,并且该职责被完整的封装在一个类中。类的职责要单一,这样才有复用性就比如三次作业的图形继承(复用性极高)。开闭原则是面向对象的目标,为了实现开闭原则,我们需要对系统进行抽象化设计,抽象化是实现开闭原则的关键。就比如:在作业中有term多项式抽象类,shape抽象父类等。

3.OO编程思维的理解:拿到一个问题,不着急的想实现结果,首先先设计类图,好的类图就成功了一半,然后在各个类中设计方法,要有单一职责原则和开闭原则,其次在设计主方法各种的调用。

4.类设计心得:首先有个错误就是我犯的,提醒一下就是类不能包含类。然后就是根据单一职责和开闭原则设计类图,这里不多说。

三:测试的理解与实践:

1.测试对于代码质量的重要性:客户如果拿到未经测试的代码,用着用着出了很多问题,那估计客户以后不会再找你做产品了;我们在做作业的时候如果没有测试,就那样草草地将作业交上去,那达不到训练提升的效果。

2.假设使用Junit进行程序的测试是否可行:1、每一个测试方法上使用@Test进行修饰;2、每一个测试方法不能携带参数;3、测试代码和源代码在两个不同的项目路径下;4、每一个测试方法必须使用public void进行修饰; 5、测试类的包应该和被测试类保持一致;6、测试单元中的每个方法必须可以独立测试。

四:课程收获:面向过程的思想现在想都不会想,可以熟练的根据类图写出类的代码,变得更加仔细。

五:对课程的建议:第三阶段作业的难度理应比第二阶段的作业要难,但我个人是希望不要太难了,必竟花的时间真的很长。

课程内容讲解方面的建议:暂时无建议。