OO第二单元作业总结

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

  1. 前言:

本次博客针对的是本人学习Java核心技术,第二阶段的三次作业的总结。该阶段的第一次作业的内容是:

7-1 水文数据校验及处理 (50分)

使用Java中的字符串处理类以及正则表达式对输入字符串数据进行合法性校验及计算。

7-2 蒙特卡罗方法求圆周率 (30分)

使用蒙特卡洛仿真方法求圆周率。(具体要求见作业指导书 2020-OO第05次作业-2指导书V1.0.pdf )

7-3 图形继承 (20分)

编写程序,实现图形类的继承,并定义相应类对象并进行测试。

  1. Shape,无属性,有一个返回0.0的求图形面积的公有方法public double getArea();//求图形面积
  2. Circle,继承自Shape,有一个私有实型的属性radius(半径),重写父类继承来的求面积方法,求圆的面积
  3. Rectangle,继承自Shape,有两个私有实型属性width和length,重写父类继承来的求面积方法,求矩形的面积
  4. Ball,继承自Circle,其属性从父类继承,重写父类求面积方法,求球表面积,此外,定义一求球体积的方法public double getVolume();//求球体积
  5. Box,继承自Rectangle,除从父类继承的属性外,再定义一个属性height,重写父类继承来的求面积方法,求立方体表面积,此外,定义一求立方体体积的方法public double getVolume();//求立方体体积
  6. 注意:
  • 每个类均有构造方法,且构造方法内必须输出如下内容:Constructing 类名
  • 每个类属性均为私有,且必须有getter和setter方法(可用Eclipse自动生成)
  • 输出的数值均保留两位小数

主方法内,主要实现四个功能(1-4): 从键盘输入1,则定义圆类,从键盘输入圆的半径后,主要输出圆的面积; 从键盘输入2,则定义矩形类,从键盘输入矩形的宽和长后,主要输出矩形的面积; 从键盘输入3,则定义球类,从键盘输入球的半径后,主要输出球的表面积和体积; 从键盘输入4,则定义立方体类,从键盘输入立方体的宽、长和高度后,主要输出立方体的表面积和体积;

假如数据输入非法(包括圆、矩形、球及立方体对象的属性不大于0和输入选择值非1-4),系统输出Wrong Format

该阶段的第二次作业内容是:

7-1 图形继承与多态 (40分)

掌握类的继承、多态性及其使用方法。具体需求参见作业指导书。 2020-OO第06次作业-1指导书V1.0.pdf

7-2 一元多项式求导 (60分)

使用类的继承、多态性编写程序对简单多项式的导函数进行求解。详见作业指导书 2020-OO第06次作业-2指导书V1.0.pdf

该阶段的第三次作业内容是:

7-1 图形卡片排序游戏 (40分)

掌握类的继承、多态性使用方法以及接口的应用。详见作业指导书 2020-OO第07次作业-1指导书V1.0.pdf

7-2 图形卡片分组游戏 (60分)

掌握类的继承、多态性使用方法以及接口的应用。 具体需求参考作业指导书。 2020-OO第07次作业-2指导书V1.0.pdf

7-3 求素数 (30分)

求素数练习,考查算法设计与优化。输入一个整数,输出小于等于这个整数的所有素数及数量。 注意:本题目为加分题,总分30分,得分计算方式如下:

  • (所有得到满分的同学程序所用时长的平均值-你的程序运行所用时长)/所有答案所用时长最小值*30分,为负值者不得分。
  1. 作业过程总结:

①该阶段的第一次作业涉及到的知识点有字符串相关类应用、正则表达式、类间关系应用(关联、聚合、依赖、继承),承接了第一阶段的知识点正则表达式,让我们加强了对正则表达式的理解。需掌握如何使用Java中的字符串处理类以及正则表达式对输入字符串数据进行合法性校验及计算使用蒙特卡洛仿真方法求圆周率编写程序,实现图形类的继承,并定义相应类对象并进行测试。而第二次作业则是要掌握类的继承、多态性及其使用方法,使用类的继承、多态性编写程序对简单多项式的导函数进行求解。第三次作业则是涉及到面向对象设计语言的几个基本原则,重点训练类的封装性、继承性、多态性以及抽象类、接口的应用 同时,思考“单一职责”原则以及“开-闭”原则在面向对象设计中的具体应用

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

这三次作业中基本上都运用到了面向对象的封装性、继承性与多态性三大技术特性,这让我们进一步加深了对它们的理解。其中的封装性基本上每道题都有用到,将每个类中的属性设为私有,且每个类中都含有getter、setter方法和构造方法。继承性在三次作业中也是基本上都用上了,但难度却是逐步提升,首先是简单的使用extends来体现继承性,然后开始增加难度,要使用子类继承并重写父类的方法(@Override)。在本阶段的后期学习了多态化的概念(不同的对象,接收到同一个消息的时候,产生不同的操作),还学习了解了compareTo()接口,cloneable()等。

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

在这三次作业过程中,我遇到了很多问题,比如ArrayList数组的应用,一开始看到这个我是一脸懵的,完全不知道怎么用ArrayList这个数组,通过百度查找ArrayList用法资料,只看懂了一点还是不会用,在敲代码的时候,经常出错、卡壳,后来又在自己买的资料书(Java核心技术卷一)里仔细看了ArrayList这个动态数组,看了书里给的相关例子代码,才是懂了点它的一些常见用法。还有就是类的多态性的应用掌握的不够熟练,在敲代码的时候eclipse老是报错,通过百度查找了些相关资料以及eclipse自身的提示错误纠正提示才改过来。还有那些求面积的题目,那些输出格式,老是搞错,没搞明白,费了不少时间。

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

该阶段的第一作业,一周内大概花了3,4天吧,有些地方敲代码的时候老是卡壳,浪费了不少时间。第二作业,六天内大概花了3天。第三次作业,一周内大概花了2天,知识点没掌握透,敲代码敲不下去,导致作业没完成。

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

认识:要严格按照题目给的输入输出格式,不能完全按照自己所想的,所想的想法要在规则之内。

教训:看完题目以及题目要求之后,按照自己想去敲代码,敲了一定的时间后,就敲不下去了,有的地方完全不是按照我自己脑子里想的那样去做。

2.OO的设计心得:

①对面向对象三大技术特性之间关系的理解:

封装可以隐藏实现细节,使得代码模块化;继承可以扩展已存在的代码模块(类);它们的目的都是:代码重用。而多态则是为了实现另一个目的——接口重用!多态的作用,就是为了类在继承和派生的时候,保证使用“家谱”中任一类的实例的某一属性时的正确调用。

②对面向对象设计的基本原则的理解(单一职责原则及“开-闭”原则):单一职责原则指的是可复用性;“开-闭”原则指的是可扩展性。

 

3.测试的理解与实践

测试对于编码质量来说非常重要,如果不进行测试,就无法知晓自己写的程序是否正确,以及出错、警告的地方在哪,这样就不知道该如何去修改程序了。

②查阅资料后,可以使用Junit进行程序的测试;

JUnit是一个Java语言的单元测试框架。它由Kent Beck和Erich Gamma建立,逐渐成为源于Kent Beck的sUnit的xUnit家族中最为成功的一个。 JUnit有它自己的JUnit扩展生态圈。多数Java的开发环境都已经集成了JUnit作为单元测试的工具。也就是说junit就是别人写好的单元测试框架,使用此框架你可以大大缩短你的测试时间和准确度。(百度来的资料)

  1. 课程收获

该阶段的学习,我在OO方面的得到的教训有:该要知识点没掌握透彻,代码就敲不下去,作业就无法及时完成。老师课上讲的知识点,课后没有及时完全地去消化,课后还没有怎么花时间去复习巩固它,导致脑子里的知识很混乱,在写代码的时候,经常忘记怎么去使用它。(比如类的多态性的应用,老师给我们演示了雨刷的程序,但是因为课后没有及时完全去消化它,导致在作业的时候又重新花了大量时间去复习,查阅资料)。老师布置的作业,可能因为学习这么长的时间没有取得什么成就感,也没怎么花精力吧,作业难度也大,产生了些抵抗情绪,再加上基础知识储备又不够,每次都是拖到最后几天才开始写,写着写着思想又不太集中,导致每次作业都没完成。

收获:比如这个阶段,老师布置的作业开始联系了那种公司里的项目,应该算是项目,这个很就提高了我见识,大概明白了程序员要做的事是什么。不再是只学“理论”,开始“实战”了。

对课程的建议

           ②对课程内容讲解方面的建议的话,虽说是师傅领进门,修行靠个人,但还是希望老师能够在上课的时候,能够讲解一下作业。(只代表自己作为后进生的观点)

posted @ 2020-05-02 18:48  俞事。  阅读(548)  评论(0)    收藏  举报