第二阶段的作业总结

0.前言

  这三次作业前两次涉及到字符串Stringbuilder的使用,以及正则表达式的使用,涉及到类的继承简单运用,类继承的进一步使用。第三次作业则是对类的封装性、继承性、多态性、以及抽象类和接口的综合运用。
1.作业过程总结

  第一次作业中蒙特卡洛求圆周率,以及图形的继承,通过一段时间的研究以及运行调试也是较好地完成了。蒙特卡洛求圆周率是将统计模拟试验通过代码来实现,涉及到类与类之间的关联与依赖,数学思想在编程中的运用,以及随机数的产生,限定范围产生随机数。通过对正方形内产生的点,以及正方形内接圆内的点进行统计,估算Π的值。加深了对类与类关系的理解。图形的继承则是对图形类Shape的继承,从而实现输出圆,矩形,球,立方体的面积、体积、表面积。通过对重写父类的构造方法,以及在继承的类中新增方法来实现,较为简单。但是水文数据的校验及处理这题不光涉及到通过使用Stringbuilder输入一大串数据,还要通过正则表达式对输入的每一个数据进行检验,包含日期的检验,时间的检验,以及数据的检验。类与类之间的关系仅仅涉及到关联,但是难点在于正则表达式的使用,以及数据的处理上。从无从下手到日期的正则表达式检验,之后便束手无策了,写上一天不知道写了个啥,在几天的纠缠中还是没明白个所以然,无奈只得放弃。

  第二次作业仅仅两题,一题是第一次作业图形类继承的迭代,涉及到类的继承,和多态,以及ArrayList的运用以及泛型,对图形对象的排序。定义个抽象类Shape,继承类通过对抽象方法的重写,完成相应处理。通过add方法将图形对象存在list中,通过list.set方法实现对象的交换从而排序完成。进一步理解了继承性和多态性。另一题难度较大,又涉及到正则表达式的运用。输入多项式表达式,使用正则表达式对其进行,空字符、运算符、非法自变量、指数系数不为0的检验后,通过正则表达式匹配表达式中的常数项,指数,将其分割进行数学运算,从而获得求导后的表达式。仅仅这些还不够,不光正则表达式是难点,还有类与类之间的关系调用,以及数据的处理都是难点。写了几天之后还是无望而终。

  第三次作业则是一二次作业图形类继承的迭代,涉及到类的继承和多态,以及Comparable接口的使用。第二次是通过冒泡排序法来实现排序,而这次则是对Comparable接口的使用,重写CompareTo方法实现对对象的排序。第二题则是第一题的一个迭代,先进行对卡片类的分组,再进行排序求总面积的操作。难度不是很大,很快就完成了作业。

  这三次作业总的来说,反是涉及到正则表达式的作业所花费的时间要很多,通过这三次作业,加深了对ArrayList的泛化的理解与使用,对面向对象的封装性、继承性与多态性有了更深的了解。

2.OO设计心得

  封装,是想把一段逻辑抽象出来做到相对独立,隐藏对象的属性和实现细节,仅仅对外公开接口。对象的属性尽可能的私有,然后通过get,set方法进行访问。

  继承,希望通过类型的从属关系来实现代码的复用。父类中的私有属性子类不能继承,但可通过super关键字的使用以及父类中的get,set方法进行访问。

  多态,是指一系列表达同一概念的类,可展现不同的行为。可引用变量拥有许多不同形式的能力。

  单一职责原则(Single responsibility principle)规定每个类都应该有一个单一的功能,并且该功能应该由这个类完全封装起来。所有它的服务都应该严密的和该功能平行。单一职责原则就是指一个类应该有且只有一个改变的原因,而不能有多个,从而达到高内聚。

  开-闭原则是可复用性基石,通过开-闭原则达到对程序可复用的实现。对于扩展是开放的,对于修改是关闭的。通过对类的继承以及类的多态,可以实现对抽象类的继承,通过对抽象类方法的重新(override)可实现新的扩展。而新的扩展就是开-闭原则的体现
  OO编程是一种设计思想,一种构架风格。是对面向对象三大技术特性,封装继承多态的综合使用。通过对各个模块框架的搭建,各个模块之间互相调用,各个模块内部的独立,以及各个模块的组合来实现对实体的构建。

  类设计应该做到高内聚,低耦合,遵循各大原则。好的设计不是一蹴而就的,而是通过不断积累,完善出来的。
3.测试的理解与实践

  测试是保证编码质量的重要途径,对于程序员来说如何检验编码质量是一个值得考究的问题。测试则为编码质量的检验提供了途径,时间,内存上的限制,代码长度等等方面都可以通过测试来进行研究。好的测试样例,保证了好的编码质量,所编写的程序也更稳定。

  对于使用Junit进行程序的测试我觉得是可行的,但在某种程度上来说可能会存在一些局限性和片面性,但是大体上还是可行性比较高,因为出现过对不上测试样例但过了测试点的情况。但是作为测试还是很有必要的。
4.课程收获
    对于作业我觉得做完并拿到满分并不意味着结束,在这之后做的应该是想着如何去优化简化自己所写的代码,思考题中给的类图是否还可以进行优化?如果题中没给类图该如何进行类的设计?作业不仅仅是完成了就可以这么简单,值得考虑的事情还有很多。对于题目的研究不影响解题的时间,只有更好的理解好题意才能在编程的时候更加得心应手。对代码的完善过程我觉得应该是由浅及深的,只有一个个环节都做好了,才能完善好程序。首先要做的是搭建起整个框架,然后一个个地方逐步去完善,将各个地方串起来,从而题目就完成了,心急吃不了热豆腐,对于题目的理解尤为重要,不能舍本逐末,盲目解题。
5.对课程的建议
    对于第三阶段的题目我觉得可以分梯度的出题,难题中等题都可以有,加分题可以针对某个关键点来设置加分项。或者可以给一些难度较低的题目,但是题目分数不易过高,对于中等偏下的同学也能更自信,作为逐步积累的过程,我觉得这样下去肯定是往好的方面积累的。这样好的同学可以更好,作为中等同学的我也不至于挂科。题量方面我觉得还是不宜题量过多,但是时间上的投入是必不可少的,我觉得对于慕课也可以增加一些作业,类似选择填空这些,可作为对学习效果的检验,但是所占成绩的比例不宜过大。我觉得老师可根据中等的同学从习题集开始到完成所有题目时间来设定题量,毕竟不是只学java一门课程。对于课程讲解方面我觉得还是可以按照现在的模式来进行讲解,回到学校后的模式如何改变没有太大的意见,我相信老师所选择的一定适合我们的。

posted @ 2020-05-02 15:24  少了发  阅读(119)  评论(0)    收藏  举报