第二周期Java作业总结

1、前言:

  这一阶段的作业比上一阶段就要难一些,基本上都是在不同类里进行,侧重考查正则表达式,继承,接口,多态这些知识点,下面就是我对这三次作业的具体总结。

 2、作业总结:

①作业情况(包括对类设计心得):

  第四次作业的第一题水文数据校验在我看来是这几次作业中最难处理的一题,要考虑的因素太多,类图也密密麻麻,花了一天时间没有做对,而第二,三题就简单一些,分别是求圆周率和图形继承,而在这次第二题作业途中我没有完全按照给出的类图写好代码,而是用了更简便的方法,我觉得提高代码的效率是可以不用过于繁杂的类图的,有的时候类图可以算是给你一个做题的框架,实际写代码的适合如果适当的进行一些修改可能会有奇效。

  第五次的作业内容比较少,第一题是图形继承与多态,需要参考上一次作业的图形继承,同时可以用到 Arrays 类或者 Collections 类,做一些储存和排序的功能,将上一次的代码做一些修改就能通过,第二题是多项式求导,用到了类似水文校验里的校验方法,这一点也考察了正则表达式,对输入信息的格式要求很严格 。

  第六次作业第一题同样承接了上一次的图形继承,需要掌握类的继承、多态性使用方法以及接口的应用,circle,triangle,rectangle等,第二题图形卡片分组游戏同样在第一题的基础上做一些改动就可以通过,第三题加分题一个简单的求素数题目,很容易运行超时。

②作业过程中遇到的问题,解决方法以及教训:

  1)  蒙特卡罗方法求圆周率不知道如何随机计算,后来在循环里随机产生点返回double类型

  2)图形卡片分组的“只有三角形”和“只有三组卡片”测试点过不去,试了几组数据后发现有些数据加起来没小数点默认为一位小数

  

  这一次作业的这一题还很多地方需要注意,于是我把shapename和area不同类型存在了不同list里,不然会输出其他东西,还有就是Comparable、Comparator接口要注意是从大到小还是从小到大的顺序。这次作业把代码完成用的时间并不多,第一次常常没有通过所有测试点,主要是在做改善代码,修改bug,用多组数据测试追求通过所有测试点,这类时间的比例大概占3/4。

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

  (1)、养成在写的代码后面有适当的注释,这样能很快的找到自己要写的部分,修改起来也很方便;

  (2)、合理利用debug,和注释作用类似,找错的时候,会容易,方便很多,虽然现在用的不熟。

3、OO设计心得:

这三次作业中逐步理解了面向对象的封装性、继承性与多态性三大技术特性,

①对面向对象三大技术特性之间关系的理解和OO编程思维的理解

  1)封装性:我理解的封装的本质就是通过定义类,并且给类的属性和方法加上访问权限,用于控制在程序中属性的读和修改的访问级别,就比如在水文校验中一些变量private只能在自己类里访问,需要提供getter和setter方法来访问,保证安全性,而有一些public修饰之后,能被所有类访问

  2)继承性:这一阶段的作业每下一次作业都会有题目以上一次的题目为基础进行一定的改造,而图形继承,图形继承与多态,图形卡片分组,图形卡片排序等题目都需要用到继承方法,以shape为父类,circle等子类对一些方法进行重写。继承就是保持已有类的特性而构造新类的过程。父类有写好了的方法getArea,但图形的形状不同,面积计算方法不同,所以需要重写方法,如果子类中重写(覆盖)了父类中的一个方法,那么在调用这个方法的时候,将会调用子类中的这个方法,方法重写是多态实现的重要手段,可以说继承就是为了多态而准备的,继承就是多态实现的前提。继承后,子类能够利用父类中定义的变量和方法,就像它们属于子类本身一样。单继承:在类层次中,子类只继承一个父类的数据结构和方法,一个类只有一个父类多继承:在类层次中,子类继承了多个父类的数据结构和方法,一个类允许有多个继承。

  3)多态性:我认为多态就是同一事物的多种不同形态简单的说就是,做同样的事,但根据实际对象来决定具体的实现。例如,学生去上课,有的学生上高数,有的学生上计算机课,有的上英语课;叫每个学生都看书,有的学生看历史书,有的看文学,有的看技术类书籍等等。多态的实现原理是动态绑定,一个变量必须声明为某种类型,变量的类型称为它的声明类型。如果是一个引用类型变量,那么它可以是一个null值或者是对该声明类型实例的引用,这里的实例可以是该声明类型也可以是它的子类型。但变量的实际类型是引用变量引用的对象的类。所以调用哪一个方法实际上是由实际类型所决定。这就是动态绑定。

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

  单一职责原则及“开-闭”原则:在面向对象编程领域中,单一功能原则规定每个类都应该有一个单一的功能,并且该功能应该由这个类完全封装起来。所有这个类的服务都应该严密的和该功能平行,而开闭原则是当应用的需求改变时,我们可以对模块进行扩展,使其具有满足那些改变的新行为。

4、测试的理解与实践
①测试对于编码质量的重要性

  这一次我发现测试代码是非常重要的,就比如图形卡片分组那题,如果我没有用一些特殊的数值测试,我可能就不会发现部分两位小数加起来的值显示成一位小数,如23.33+23.37=46.7而非46.70,这种问题一开始困扰我很久,也正是我在测试后发现了这个问题,这一题我从得36分变成了得54分。所以说代码的测试是很重要的

5、课程收获以及对下一阶段作业和课程的建议:

  这一阶段我感觉比上一阶段的难度要大一些,虽然有些方面较难,难以一次性解决如水文校验,但是总体还算是简单。所以我也希望下一阶段的作业相比于这一次能够过过度的比较合适,少一些特别繁琐,类图特别复杂模糊的题目,比这一次简单一些,题量的话跟第二次差不多就行了,毕竟这一次一些50,60分的题目要做很久,而且还不能保证通过大部分测试点。课程建议的话还是多讲一些例子和作业中的难一点,知识点多的题目。

猜你喜欢

转载自www.cnblogs.com/ymc666/p/12814648.html