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

0.前言
  本次的作业相对于上一次的作业来说是有一定的难度的,需要花费大量的时间去完成。这次的作业有许多不懂的地方,但是也会收获许多新的知识。
1.作业过程总结
①总结三次作业之间的知识迭代关系

  第一次作业的第一题是求水文数据校验及处理,主要的应用是正则表达式的使用;第二题是蒙特卡罗方法求圆周率,就有些承上启下的作用力了;第三题图形继承则要求我们实现图形类的继承,并定义相应类对象并进行测试,这很关键,写好了这些题,以后的题目就比较简单了。第二次作业的第一题是图形继承与多态,要求我们掌握类的继承、多态性及其使用方法,这比上一次的作业就有着更深一步的见解,有了多态这一感念,而第二题的一元多项式求导也与第一题有着异曲同工之妙;第三次作业的第一题是图形卡片排序游戏,要求我们掌握类的继承、多态性使用方法以及接口的应用,这又比上一次的作业多了一项接口,让我们明白了ComparableTo这一接口的使用,第二题图形卡片分组游戏与第一题差不了太多,只是增加了一些cardlist的使用,第三题是一道附加题求素数,考查算法设计与优化,但是我设计的算法总是运行超时,没有得到很好的优化。

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

  封装是面向对象编程的核心思想,将对象的属性和行为封装起来,而将对象的属性和行为封装起来的载体是类,类通常对用户隐藏其实现的细节,这就是封装的思想,在Java中通常通过建立一个实体类,用来封装对象的属性和行为,通过setXxx()和getXxx()方法封装起来,其实这次作业的每一个代码中都用到了封装这一技术特性;继承性简单来说就是使子类的对象拥有父类的全部属性和行为,同时可以增添自己的所特有的属性和行为。这样可以节省写共同具有的属性和方法代码的时间,有利于代码的复用,这次作业中我经常用到extends,这样便能更好的、高效的利用好代码;多态性,简单来说就是一个程序中同名的多个不同方法共存的情况,通常使用方法的重载和重写(也叫覆盖)来实现类的多态性,这在最后一次的作业中可以更为深刻的体现出来,class Card  implements Comparable<Card>就是一个很好的例子。

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

  第一次作业的第一题是求水文数据校验及处理,主要的应用是正则表达式的使用,但是我却不太明白正则表达式的使用,通过不断的学习,我现在有体会到一点了;第三题图形继承我开始不能得到很好的输出,当我把园,矩形这些分开来后就可以得到较好的输出。第二次作业的第一题是图形继承与多态,在判断输入数据是否合法是,我使用了四个不同的变量来返回,这样我就能在输出的时候更好的判断;第三次作业的第一题是图形卡片排序游戏,通过请教同学我知道了private ArrayList<Card> cardlist = new ArrayList<Card>();的使用方法,让我们明白了ComparableTo这一接口的使用,第二题图形卡片分组游戏与第一题差不了太多,只是增加了一些cardlist的使用就很好的解决了问题,第三题是一道附加题求素数,考查算法设计与优化,但是我设计的算法总是运行超时,没有得到很好的优化。

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

  第一次作业因为有比较难的一题,所以花费的时间比较多,大概是作业的限制时间内;第二次作业则是第一题大概花费了一天的时间,第二题时间无限长;第三次作业时间花费的就比较有意思了,第一题大概花费了两天时间,第二题半天。

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

  编程的量越来越多,代码越来越复杂,在命名一些名称的时候,尽量不要用太多与复杂的名字,应该简单易懂,在编程的过程中,经常会犯一些在语法上的小错误,在看似正确的情况下却得不出想要的答案,就是这样的一些小错误却要花费大量的时间来查找,这样的时间往往比编写程序的时间都要长,这无疑是浪费时间的,加入我们在编写程序的时候想得更为完整,思考的更为精密,或许就不会出现这样的问题,随着我们知识的掌握,这种问题会越来越少。
2.OO设计心得
①对面向对象三大技术特性之间关系的理解

  封装是面向对象编程的核心思想,将对象的属性和行为封装起来,而将对象的属性和行为封装起来的载体是类,类通常对用户隐藏其实现的细节;继承性简单来说就是使子类的对象拥有父类的全部属性和行为,同时可以增添自己的所特有的属性和行为;多态性,简单来说就是一个程序中同名的多个不同方法共存的情况,通常使用方法的重载和重写(也叫覆盖)来实现类的多态性,多态其实是在继承的基础上的。
②面向对象设计的基本原则理解(单一职责原则及“开-闭”原则)

  单一原则:按字面理解,单一职责原则就是自己只负责自己的事,不需要理会别人的事。如果了解面对对象编程,那么应该会很容易了解这个单一职责原则。

  “开-闭”原则:是面向对象世界里最基础的设计原则,它指导我们如何建立一个稳定,灵活,可扩展的系统。开闭原则定义如下:一个软件实体(如类,模块和函数)应该对扩展开放,对修改关闭。

 

③OO编程思维的理解

  面向对象将事物都看成对象,将具有相同特征的实物看作类。通过对类与对象的继承,封装,多态的实现,完成模拟现实从而决绝问题。
④类设计心得

  需要把有相同性质的东西方进同一个类里面;类与类之间的关系要分清楚;不要在类中使用过多的基本类型。
3.测试的理解与实践
①测试对于编码质量的重要性

  一个好的编码必须要经过不断的测试才能够使用,假如一个编码经不起多次的测试,纯在诸多的bug,这必然是一个不合格的代码,这种编码是不能用在系统上的,这会引起诸多的问题。
②查阅资料,假设使用Junit进行程序的测试是否可行

  可行,在平时的开发当中,一个项目往往包含了大量的方法,可能有成千上万个。如何去保证这些方法产生的结果是我们想要的呢?当然了,最容易想到的一个方式,就是我们通过System.out来输出我们的结果,看看是不是满足我们的需求,但是项目中这些成千上万个方法,我们总不能在每一个方法中都去输出一遍嘛。这也太枯燥了。这时候用我们的单元测试框架junit就可以很好地解决这个问题。
4.课程收获

  大概明白了对面向对象三大技术特性之间的关系,具有了更为进一步的面向对象的思想,培养了我不懂就问,虚心请教的好品质,并且拥有了一些独立思考的想法。

5.对课程的建议

①第三阶段作业难度、题量的建议

  有些题目难度较大,有些适中,感觉还好,题量也还好,两三题的样子。
②课程内容讲解方面的

  老师讲解的内容还是较少,大部分的内容都是我们自己学习,老师应该多讲一些经典例题。

posted @ 2020-05-01 15:47  SOBER-wang  阅读(293)  评论(0)    收藏  举报