第二单元(5-8周)作业总结要求

0.前言

第八次作业总体完成情况不是很好,在正则表达式问题上还存在问题,一元多项式求导问题上的思路不是很清晰,同时还存在一些自己找不出的问题。


1.作业过程总结
①总结三次作业之间的知识迭代关系;

第一次作业是水文数据校验及处理,蒙特卡罗方法求圆周率,图形继承三个问题,水文数据校验及处理主要偏向于正则表达式的运用,一些普通数据计算和输出答案格式。蒙特卡罗方法求圆周率偏向于数据计算,主要是大精度的数据计算。图形继承在图形面积计算的基础上添加了对Shape类的继承。

第二次作业是图形继承与多态和一元多项式求导两个问题,图形继承在第一次作业的基础上增加了图形的数量,同时增加了按图形面积排序的功能。一元多项式求导再次涉及正则表达式的运用。

第三次作业是图形卡片排序游戏,图形卡片分组游戏,求素数三个问题,图形卡片排序问题是对于之前的图片继承问题的扩展,加上Card和CardList将之前的问题包裹起来,而图形卡片分组游戏是在图形卡片排序游戏基础上增加多个类别的CardList将不同类型的图形卡片分类。求素数问题中,主要是对于计算范围的缩减。


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

封装性在在所有作业上都有体现,将属性等隐藏,防止该类的代码和数据被外部类定义的代码随机访问。

继承性在图形继承这类题目上得到进一步理解,例如矩形,圆形,三角形等都有一个共性,同属于图形,并且都有计算面积和输出面积等一系列通用抽像方法,所以构建Shape类作为它们的父类。

多态性,例如图形继承中Shape类的getArea方法,对于不同的矩形圆形等子类,同一个getArea根据子类不同得到的结果也不同,即同一个行为具有多个不同表现形式或形态的能力。


③作业过程中遇到的问题及解决方法

1.水文数据校验及处理中,输入数据自动过滤空格功能被忽略,导致同种数据在添加空格的情况下产生不同输出。

解决:

2.图形继承中,关于球的体积计算。初始计算代码导致结果错误:

(4 / 3) * Math.PI * Math.pow(super.getRadius(),3);

修改计算:4*Math.PI * Math.pow(super.getRadius(),3)/3;

3.图形继承与多态中,对于边长半径的取值应当大于零。

4.图形卡片排序游戏中,排序方法出错。

修改排序方法:

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

第一次作业的时间主要花费在水文数据校验及处理上,对于正则表达式的运用熟练,所以花费了大量时间。

第二次作业主要在一元多项式求导上,处理问题时,不知道从何下手,花费了大量时间最后只处理了其中一部分。

第三次作业在处理完排序问题后,速度得到提升,时间主要花费在对于排序问题的处理上。


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

在编程过程中,通过对大精度数据的处理,熟悉了确保精度的浮点型数据计算,同时还有图形边长取值范围的处理,以及对字符串数据输入以及对其可能存在的空格等的处理。在层层包含的关系下,先做最深层的也是最独立的一部分,最后在确保其正确性的前提下,在对连接部分进行处理。

教训:

在蒙特卡罗方法求圆周率中,由于对小数计算的处理不当导致时间过长并且答案错误。

图形卡片排序游戏中,Card类,Shape类和各个图形类之间的关系处理,以及对CardList的处理有时会混乱。


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

1.封装:根据职责将属性和方法封装到一个抽象的类中

2.继承: 实现代码的重用,相同的代码不需要重复的写

3.多态:(以封装和继承为前提),不同的子类对象调用相同的方法,产生不同的执行结果


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

单一职责原则: 一个类只负责一项职责,例如圆类只有关于圆的一系列属性方法,形状类只有图形的面积和计算面积等。

开闭原则 软件实体应该通过扩展来实现变化,而不是通过修改已有代码来实现变化抽象化是开闭原则的关键在不修改源代码的基础上,对代码进行拓宽,实现需要的功能。


③OO编程思维的理解

面向对象,将事物分类,分成一个个具有相同属性或方法的类,每次使用只需要new一个对象对其进行处理,封装将一类事物的属性和行为抽象成一个类,使其属性私有化,行为公开化,提高了数据的隐秘性的同时,使代码模块化。继承和多态将代码的复用性提高。


④类设计心得

一般情况,数据的判别是一个Vaildata类。图形等可以通过共性继承Shape类。总之,通过共性来设计一个类,从而提高代码的灵活性和复用性。


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

测试对于编码质量十分重要,简单的一个数据并不代表代码已经很完善,可以通过测试发现存在的问题,通过测试一步一步完善代码,消除可能存在的bug。


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

可行,并且已经进行过简单代码的Junit测试。


4.课程收获
通过学习,对于分类的处理更加熟悉,并且学会了对于小数计算的处理。了解了StringBuilder的使用以及方法重写等操作。对compareTo的重写以及sort排序也有所了解。


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

第三阶段的作业,难度跨度不要太大,题量可以适当增加。
②课程内容讲解方面的建议

课程可以讲解深入些,可以对一些难度较大的例子进行讲解。

posted @ 2020-05-02 16:22  Ztan  阅读(171)  评论(0)    收藏  举报