JAVA第二阶段总结19201422项云春

前言:

  本次博客主要针对第二阶段的三次作业分析,从三次作业的继承、封装、多态的过渡来看,很明显第二阶段作业的题量和难度都有了增强,对面向对象的编程思想有了进一步的了解。

作业过程总结:

  ⑴第一次作业:

 

  本次作业第一题是和正则表达式相关的题目,使用Java 中的字符串处理类以及正则表达式对输入字符串数据进行合法性校验及计算。由于水文数据复杂,判断条件多变,正则表达式的使用尤为关键。在这一题我花了两天来思考,很遗憾没有写出这道题目,但是学到了基本的使用方法。正则表达式是一个字符串,用来描述匹配一个字符串集合的模式。正则表达式是一个强大的工具,可以使用正则表达式来匹配、替换、和分割字符串。这道题需要使用正则表达式来检验日期,是我遇到的第一个难点,于是我在百度上找到了方法。

 

  第二题是利用特定方法求圆周率。具体思路就是思考一个正方形和其内接圆的关系,在坐标中,通过点落在区域的概率来推算圆周率。本次作业花费三个小时来解。下面是题目各类之间的关系。

 

我开始遇到的问题就是如何把我的坐标类当成其他形状类的一个属性,经过尝试我将坐标类加private修饰,作为其他类的私有属性,就可以在其他图形中用坐标表示了。

  第三题是图形继承的练习,通过各种类来计算不同形状的面积。这题难度不打,构建Shape父类,然后Circle、Rectangle等类继承自Shape类。这一题花了一个小时解答完毕。

第二次作业:

 

  本次作业第一题是继承和多态联系在一起来解题,同样是计算图形的面积,与前一次求面积不同的是,还需要对数据进行排序,用到Arraylist集合。题目的结构比较简单。

 

同样是Shape类作为父类,Circle类、Rectangle类、Triangle类继承自Shape类,在主方法中计算面积并进行求和排序。我遇到的问题开始不会用Arraylist数组,想用普通的数组,可我不知道面积数组的大小。因为数据是输入的,普通数组并不方便。于是使用Arraylist数组,直接将面积存进数组,然后用sort方法进行排序。还有一个问题是在Main方法中用循环将面积存入数组,可是需要new这个类才能调用里面的方法。我的方法是直接在循环中new,每次循环都重新实例化对象,然后将方法中的面积存进数组。

  第二题是使用类的继承、多态性编写程序,对一元多项式求导。题目中表达式正确性的检验同样用到了正则表达式。下面是程序的类结构:

 

首先PowerFunctionTerm中方法的多态性,包括方法的重载接下来方法的覆写。

第三次作业:

 

  本次作业主要是类的继承、多态性使用、以及接口的应用和程序的优化。第一题是一个图形卡片排序的小游戏,不仅需要将输入数字对应卡片的面积计算出来还需要排序,卡片和面积一一对应是我认为这一题的难点。以下是这类的结构:

 

遇到的第一个问题是计算输入数字对应卡片的面积对应卡片,我更改了Main方法的内容,在循环中用Arraylist存面积,将输入的数字保存在一个数组中,输出的时候循环输出if语句中数字数组对应的卡片字符串和面积数组。还有个问题就是,再排序后面积对应的数组不好找到对应的卡片一同输出,因为卡片并没有排序。我尝试使用键值对Map方法,但是并没有成功。

  第二题是第一题的进阶版,在输出方式上有所不同。对输入的图形按照图形类型进行分组并输出。我在这一题遇到的困难同样是还不太理解如何把图形类和面积一一对应。

  第三题是一道加分题,计算素数。起初我认为很简单,但是在我测试数据的时候,数据越大花费的时间越多,甚至几十秒。这远远达不到程序的要求,因为我的找素数是一个一个找的,太慢了。最后看书知道还有种方法就是找到这个数立马排除这个数的所有倍数,缩小寻找的范围,这样的方法速度特别快。

总结三次作业之间的知识迭代:

  从第一次作业的图形继承开始,后面的题型大多都是延续了面积计算。不同的是,从第一次作业的继承、正则表达式,到第二次作业多态性使用、Arraylist集合都在逐渐地向面向对象的深层次走去,第三次作业就是熟练运用前两次作业的知识体系来解题,做到继承、多态性、正则表达式等综合的应用。

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

  对编程严谨的最深切体会就是题目虽然结果能做到一样,但没有按照题目要求输出一样是没分的。在做题的时候一知半解从而写出大概体系是最难受的,漏洞百出同时错误也不易察觉。给我的认识就是在解题时一个一个点搞懂,再去把每个点按照题目的要求建立一个严谨的体系,方便自己查找错误同时也方便测试。

OO设计心得:

面向对象三大技术特性的理解:

  封装就是将客观事物封装成为抽象的类,每个类都有自己的属性与方法,并且类可以让自己的数据与方法只让可信的类或对象操作,对不可信的进行信息隐藏,即内部操作对外部不可见很明显便于使用也提高了重用性。继承适合当你不知道将要解决的对象是什么时,只需要归纳与一个大致的类作为父类,当需要具体的类时,只需要继承父类就可以简单了很多。多态性一个类实例的相同方法在不同地情形下有不同的表现形式与多态机制,使得具有不同内部结构的对象可共享相同的外部接口在方法的重载和覆写上可以灵活使用,提高了程序的可用性。

⑵面向对象设计的基本原则理解:

  首先是单一职责原则,单一职责原则是实现高内聚、低耦合的指导方针。也就是一个对象应该只包含单一的原则,封装在对应的类中。不应该在一个类中增加太多的职责,分开来存放在不同的类中才是正确的。其次是开闭原则,这个原则是提高程序复用性的基础。当我们设计一个模块时,应该尽可能做到可以在不需要修改的情况下进行扩展。为了满足这个原则,我们需要做到抽象化设计。

⑶ OO编程思维以及类的设计心得:

  面向对象编程应该将一个任务分成许多个模块,每个模块放入对应的对象变成一个类,通过每个类的协同作用,将这个任务有序的完成,并且最终还可以对这个任务扩展,实现更多的功能。在类的设计中,最重要的原则我觉得就是单一原则,我吃过太多次亏,在一个类中放下各种各样的东西,巴不得一下就达到结果。结果证明,这往往使得程序变得更加困难,联系起来也不是那么紧密。以后的类设计我要贯通这个原则。

测试的理解与实践:

⑴测试对于代码质量的重要性:

  测试对于编写程序来说是必不可少的一个环节,在写好一个程序时,我们并不能直观地看到它是否完美。必须要一遍遍地测试,来确定是否达到了我们的设计目的,是否还可以继续优化做得更好。同时也可以发现错误和不足之处,在测试中解决这个错误。这样才能保证代码的质量。

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

  根据查阅资料的结果来看,使用Junit进行程序的测试是完全可行的,并且很有帮助。在手动测试时,我们需要重新写另外一个程序,在该程序中调用我需要测试的方法,并且仔细观察运行结果,比较麻烦。而使用Junit来测试,我们只需要引入单元测试包,再创建测试框架,最后编辑方法进行单元测试就可以了。里面每一个方法都有,想测试那个就测试哪个,不需要再另外写一个程序,确实对程序的测试有很大帮助。

课程收获:

  这四周来面向对象编程是一步步的走向深处,学到的知识不断积累,从聚合、继承、多态性、封装这些大方向,到正则表达式、Arraylist集合、键值对等等。实现一个程序的方法越来越多,但是对我的要求也越来越高,不仅仅是用会这些方法,还需要对程序优化做得更好。比较遗憾的是,我还没有完全掌握这个完整的知识体系,现在还处在建立阶段,慢慢的在积累。和C语言相比,JAVA的内容更加丰富,思想也更加严谨。我的面向对象的思想也在渐渐地丰富起来,解题的思考也比以往更加的严密,这是我最大的收获。

第课程的建议:

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

  我觉得作业难度应该适当降低点,题量倒不是很大,但有的时候一题卡壳往往这整个作业会陷入瓶颈,作业的关联性太强了。我希望老师可以适当增加题量降低作业难度,知识点在不同题目中得到锻炼,这样做出来一道就会信心满满。

⑵课程内容讲解方面的建议:

  记得之前在腾讯课堂都可以看老师的回放,但是最近的几次回放老师好像都没有留下,有时候想重复看几遍也没机会,下次老师讲课的时候最好打开那个回放权限就可以让不懂得多看几遍。讲课内容老师还是讲的很仔细,这个我没有什么好讲的。

猜你喜欢

转载自www.cnblogs.com/xiang17707016326/p/12819371.html
今日推荐