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


0.前言
   本次博客主要是针对第二阶段(5-8)周PTA作业的总结,以及第二阶段学习了面向对象程序设计课程的心得体会。总结心得如下:

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

  作业的难度和复杂度是以此递减的

  第四次作业共有三道题:1. 水文数据校验及处理 2. 蒙特卡罗方法求圆周率 3. 图形继承

  第四次作业题目难度也是逐级递减,最难的当然是水文校验,这个题目的难度主要在于第一次使用正则表达式判断格式是否合法,以及如何将一整条数据转换成一个个数据再去判断数据的合法性,数据量很大所以出来起来很繁琐,第二题主要运用Random()方法随机生成数,模拟随机数在圆内个数以计算PI的大小,并控制在一定范围内。第三题图形继承主要是运用继承方法去求不同图形的面积和表面积。

  第五次作业共有两道题:1. 图形继承与多态 2. 一元多项式求导

  第五次作业在第四次作业的基础上难度下降了一些,第一题图形继承与多态是在第四次作业第三题的基础上增加了对于多态的应用,以及对于ArrayList数组排序的运用,第二题一元多项式求导,这题和第四次作业的第一题差不多,不过这题只是单条复杂数据处理,应用多态来判断多项式的项数和指数。

  第六次作业共有三道题:1. 图形卡片排序游戏2. 图形卡片分组游戏3.求素数(加分题)

  第六题应该是三次作业中最简单的了因为图形继承在第五次作业中已经做过了,现在只需加一个Card让他们关联起来即可,第二题则是在第一题的基础上进行的改善,第三题求素数不难,但是如果要考虑运行时间的话就变得比较复杂了,只有选择高效的方法才能运算出来,且时间较短。

 

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

  第一次作业主要是让我们了解面向对象的封装性,就是用类把他封装起来,将成员变量和成员方法放到一个类中,这就是封装性。而第二次作业和第三次作业则是强调继承性和多态性,子类继承父类的方法,子类重写父类的方法,一个接口实现多个方法等等。

 

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

  1.问题:第四次作业第一题,不知道如何将一整行数据转换成一个一个去处理

  解决方法:通过百度了解到了split方法通过split(“ ”);实现了从一整行数据到单个数据的转换。

  2.问题:第四次作业第一题,spilt后如果进行强制类型转换有的时候会出现断行的情况

  解决方法:通过输出spilt方法后的数据,发现有的时候得到的数据有时会带有符号,所以不能进行强制类型转换,得把带有符号的数据再次分隔开才能进行强制类型转换。

  3.问题:第四次作业第一题,无法判断输入是否有空格问题

  解决方法:通过百度了解了trim()方法,将split后分开的每个数在trim一下,可以去掉前后的空格,再去判断trim()后的数据

  4.问题:第四次作业第一题,不知道如果判断这一行数据是否是tab分开的5部分。

  解决方法:将一阵行数据用spilit分隔后达到数据data,再去判断data数组的长度是否为5

  5.问题:第四次作业第一题,使用正则表达式去判断数据合法性有时会出现问题。

  解决方法:另外新建一个类,在这个类中去尝试修改判断数据合法性,这样就不用调用整个的方法。

  6.问题:第四次作业第二题,由于random()是生成的0~1之间的数但是圆的范围不再0~1中,得想办法将随机数放到圆内

  解决方法:将代码改为一下,这样生成的点就是圆的右下角。

coord1.abscissa=Math.random()*rectangle.length+coord.abscissa;
coord2.ordinate=coord.ordinate-Math.random()*rectangle.length;

  7.问题:第四次作业第三题,输出保留两位小数时会舍去末尾的0

  解决方法:将类方法里面的保留小数放到主方法里面,而不是在类方法里面进行强制类型转换。

System.out.println(String.format("%.2f", rectangle.getArea()));

  8.问题:第五次作业第一题,在输出错误后依然会输出后面的正确结果,而不是直接退出。

  解决方法:在判断错误时添加语句,从而直接退出

System.exit(0);

  9.问题:第五次作业第二题,直接使用split方法无法将多项式分成一个一个单项式。

  解决方法:增加下面语句,并用split("/")将他们分成单项式

data=data.replace("+","/+");
data=data.replace("-","/-");
data=data.replace("^/","^");
data = data.replace(" ", "");//除去字符间的空格

  10.问题:第五次作业第二题,在如果首项求导后为正数为输出+号

  解决方法:在求导的方法中加一个成员变量a用于控制是否为常数项。

  11.问题:第五次作业第二题,BigInteger属性不知道如何使用

  解决方法:通过百度了解了BigInteger属性,BigInteger的范围比int的大很多,下面代码表示常数1

(BigInteger.ONE)

  12.问题:第六次作业第三题,普通的求素数方法在求10000000时,会出现运行超时。

  解决方法:通过百度了解到了埃拉托色尼的素数筛法,创建一个n+1的数组,素数的都不是素数,这个方法的运行效率虽然不算很高,但也有500ms,可以通过PTA。

 

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

  第一次:第二次:第三次=15:10 :6/(小时)

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

  JAVA的严谨性是非常高的,我们在编程过程中需要非常严谨的态度,否则出现问题的话,改代码的时间会比写代码的时间还要多很多很多,比如水温校验时,强制类型转换的时候需要考虑到带符号时不能强制类型转换,我就是因为忘记了这一点导致 哪一行一直会挂断,也浪费了我很多很多的时间,再比如,有的时候前后代码是一样的这样复制粘贴就好,但有时候其中的参数是不一样的,如果盲目粘贴就会导致程序出现错误。


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

  封装性:在我看来封装性是面向对象编程的核心,它使用类将对象的方法和属性都封装起来,其他类则通过get()和set()方法来调用这个类。

  继承性:继承是类与类之间很重要的关系,子类的对象拥有父类除private外全部的属性和行为,同时也可以增加一些自己特有的属性和方法,继承的实现,可以大大减少代码的重复率和提高系统的性能。

  多态性:我认为多态就是一种方法的多种实现,一般就是通过重载和重写来实现多态性,多态的实现主要是依赖于抽象类和接口,在继承中父类通常会被定义为抽象类。

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

  我认为单一职责原则是一个类中应该只包含单一某一个属性的职责, 不能将太多的职责放在一个类中,开闭原则则是允许在不改变它的代码的前提下可以变更它的行为。


③OO编程思维的理解

  我的理解OO编程思维就是面向对象将问题模拟成对象,将具有相同特征的对象放到一个类中,并设计类中的属性,而对面向对象三大技术则是为了使其实现更便捷,增加体统的性能和复用性而创建的。

④类设计心得

  首先将问题模拟成对象,将具有相同特征的对象放到一个类,在去设计类中需要的方法和属性,有的属性是私有的不能被调用,有的则是可以被调用,类中的每个方法都是有他自己的作用的,然后就是继承可以减少类中代码重复的数量,也增加了代码的简洁性,多态则可以增加类的复用性。


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

  我认为测试对编程很重要,一个好的测试样例可以找出编码中的很多BUG和错误,还有一些特殊情况的的样例,可以考察程序员是否考虑到了这一点,可以让代码应对更多的情况。


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

  通过百度发现Junit是可以运行的。

4.课程收获

  通过这一阶段对OO方面的学习,发现OO课程的难度还是挺大的,主要还是不能很好的理解面向对象吧, 思维上面向程序还是更多一点,有时候虽然看的懂PTA上老师给的类图但是不知道如何操作,也体现出了我知识和思维上还是存在不足的地方,后续还是需要加强这方面的练习,然后就是编程还是不够严谨吧,前两次作业都没有那个"答案正确"的出现,也是蛮可惜的,PTA老是有一个测试点过不去,然后收获就是基本上了解了OO编程的三大特征封装性、继承性、多态性,也是发现OO这门课程挺有意思的,希望能跟进一步了解OO编程的思维。

 

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

  希望难度循序渐进吧,别跟第三次作业第一题那样,虽然后面发现第一题也没有特别难,但是还是难度一步步往上增加比较好,不能一口吃成一个胖子,多布置一些基础点的题目,我觉得只有基础打好了,才能学好这门课程,然后还是希望时间能宽裕一下,增加一些PTA上的测试样例,有的时候如果PTA某个测试点过不去还不知道怎么改,上课的时候课都听不进去,都想着去代码的问题了。
②课程内容讲解方面的建议

  我觉得老师的讲解模式是很不错的,用实例和代码讲解题目,我们上课很容易就被带进去了,会吸收的很好,建议的话老师可以提前先发一下这节课内容,让我们下去先预习一下,我觉得只有预习了才能知道自己的问题所在,上课是听课就跟集中了。

 

posted @ 2020-05-01 18:22  待风起丶等云归  阅读(110)  评论(0)    收藏  举报