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

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

 

  0.前言

  从5-8周,这三周作业,我可以明显感觉到难度比前三次作业高不少。在这三次作业中,难度几乎持平,每次里面都有一道比较难的题目,像第四次就是7-1 水文数据校验及处理、第五次就是7-2 一元多项式求导比较难,第六次作业相对较简单,前俩题都可以复用第五次作业7-1 图形继承与多态的一些类,第三题则是一道“加分题”求素数。下面就是我对这三次作业的具体总结。

 

  1.作业过程总结

 

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

1) 从本阶段第一次作业开始,就比较综合了,其中也运用到了上课学习的继承,且每题都给了我们指导书。第一题给了主要类结构设计图,运用正则表达式来校验数据,第二题给了我们主函数以及类结构设计来让我们完成代码,有点像上一阶段第三次作业的7-2 日期类设计那样的形式。第三题则要我们实现图形类的继承,这里运用了上阶段作业没使用到的继承。

                           

2) 第二次作业,都给了指导书,第一题“圆形继承与多态”和第二题“一元多项式”都运用到了继承与多态,以及抽象类的使用,也在其中使用到了Java的泛型中的ArrayList类。其中第二题还需要结合正则表达式来判断格式,分割式子。

                        

3) 第三次作业,也给了指导书,难度较前俩次减低了很多,代码量也减少了很大,主要得益于前两题都可以复用第二次作业中的第二题的部分类(这也在间接告诉我们每次在写类的时候,都要认真思考,以便下次需要用的时候可以直接复用),然后在此基础上又添加了部分功能即可实现。

                      

 总结:这一阶段三次作业,可以感觉越来越综合了,每次都给了指导书,明确说明、介绍了这个程序的背景,功能以及需求,同时还给我们提供了参考类图来给我们参考。如果说上阶段作业大部分都是在一个main里完成,体会不到面向对象思想,那么这阶段作业可以让我深深体会什么是面向对象编程和其中的封装,继承,多态三大特性。

 

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

  从上一阶段的作业中,我们其实就初步理解到了面向对象的封装性,封装是面向对象编程的核心思想,将对象的属性和行为封装起来,而将对象的属性和行为封装起来的载体是类,类通常对用户隐藏其实现的细节。这一阶段作业中,我们每次的作业几乎都会运用到继承,多态,比如第一次作业的图形继承,第二次作业的图形继承与多态,第三次作业的图形卡片排序/分组,层层递进。我也逐渐理解了:继承是发生在两个类之间,一个类继承另一个类是说这个类属于另一个类,具有另一个类的所有属性和方法,同时它还可以有另一个类不具备的方法和属性。多态是建立在继承的基础上的,一个父类对象可以产生多个不同的子类对象,根据这些子类对象的不同可以具备不同的方法,也就是说表现出了不同的形态即多态。

 

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

1) 第一次作业中, 第一题7-1 水文数据校验及处理碰到比较难搞的问题就是正则表达式的运用,我的解决方法是通过去网上自己学习相关知识(下面也附上我学习的网址),还有就是第10个测试点,当时是理解错题意了,我以为输入数据俩端可以存在空格意思是输入进来那一条数据的开头和结尾可以有空格,但其实是每一条中的分数据比如开度,时间等左右可以有空格。修改后成功通过测试点。

第三题,第8个测试点,一开始无法通过,后面仔细检查对比发现是因为输出时候“Box's volume: “拼写有误,修改正确后顺利通过测试点。

*Ps.这里也附上我查阅资料:

https://blog.csdn.net/juzixiansheng/article/details/87867118?depth_1-utm_source=distribute.pc_relevant.none-task&utm_source=distribute.pc_relevant.none-task

 

2) 第二次作业中,并没有遇到什么棘手的问题,主要就是第一题的ArrayList对对象排序,经过查询资料(下面附上链接),实现Comparator接口,完成对对象的排序,以及第二题7-2 一元多项式求导中的拆项比较困难,本来是想直接用正则拆,发现要考虑的东西有很多,不能单纯的以加减号来拆,后来经过思考,既然直接正则不方便,那就在结合循环试试,于是我采用循环遍历+正则表达式结合简便的完成了拆项。

*Ps.这里也附上我查阅资料:

https://jingyan.baidu.com/article/c843ea0bc0ec2e77931e4a01.html

 

3)第三次作业中,没什么难度,主要是要会用抽象类、接口、继承等等。由于可以复用第二次作业的第一题7-1 图形继承与多态的部分类,且第一题和第二题相关性很大,稍微修改就可以。总之,很简单就搞定了。还有就是第三题——“加分题“,普通的方法会超时,我是素数表法通过的。

 

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

       最近三次作业中,第一次作业后俩题很简单,2个小时就搞定了,第一题“水文数据校验及处理”由于正则表达式不怎么熟悉,查阅了很久资料才稍微搞懂些,大概用了1天半快2天的的时间才构思+写完。 第二次作业第一题“图形继承与多态”比较简单,主要是其中ArrayList类查阅了比较久的资料,大概用了3个小时多就搞定了。第二题“一元多项式求导”,主要难点就是拆项,在有了第一次作业正则表达式的底子,大概用了不到1天的时间就构思+写完了。第三次作业比较简单,由于可以复用第二次作业的部分代码,大概用了5个小时多就搞定了。总的来说,比例大概为10:6:1。

 

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

       类似第一次作业水文数据检验及处理这样的题,里面有很多检验数据格式的测试点,刚开始没有考虑周全,导致很多测试点没有通过。还有就是虽然平常代码出现语法错误时,eclipse会报错,我们能及时发现并且修改。但是出现逻辑错误时,往往很难发现,只有一步步通过自己debug才能知道是那部分出了问题。反之,如果不这样找,可能小到几十分钟大到几天也找不出来,这是非常致命的。还有就是一定要看清楚题目要求/需求,思考清楚在动手,可以让编程过程的思路更清晰。

 

  2.OO设计心得

 

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

  我的理解:封装是面向对象编程的核心思想,将对象的属性和行为封装起来,而将对象的属性和行为封装起来的载体是类,类通常对用户隐藏其实现的细节。继承是发生在两个类之间,一个类继承另一个类是说这个类属于另一个类,具有另一个类的所有属性和方法,同时它还可以有另一个类不具备的方法和属性。多态是建立在继承的基础上的,一个父类对象可以产生多个不同的子类对象,根据这些子类对象的不同可以具备不同的方法,也就是说表现出了不同的形态即多态。

 

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

       我的理解:1)单一职责:我们在设计的时候,尽量单一。通俗的讲就是我们不要让一个类承担过多的职责,不会改一些需求导致所有东西都要发生改变。2)开放封闭原则:你设计的时候,时刻要考虑,尽量让这个类是足够好,下次需要用到的时候尽可能不动原有代码进行添加、拓展。

 

③OO编程思维的理解

    我的理解是:面向对象编程是把问题要求的不同功能分开来解决,让它们能够各自独立地实现功能,而且在面向对象中,当某一个需求改变时通常不会导致原本其他功能发生改变。然后方法是属于每个对象的,能否实现是由每个对象说了算的。

 

④类设计心得

       首先现在在写pta的时候都会给我们指导书,虽然上面也有类结构,但是我们拿到问题时候应该先自己思考,怎样设计好类结构,在思考充分之后,在对比指导书上的类结构,看那个更合理,更方便。这样有利于我们今天自己设计类结构,不然一味的使用指导书上的,自己不思考了话,不然就像下回第三阶段的时候没给类图就很难想了,同时在设计类的时候,要做到保持数据的私有;遵循单一职责,尽量使类的功能单一化;

 

  3.测试的理解与实践

 

①测试对于编码质量的重要性

       如果没有进行测试,就会有很多错误不知道在哪里,到pta提交时也会报出来很多错误,就比如第一次作业“水文数据检验及处理”,你需要测试到年月日时间、开度等等一系列数据,通过测试可以更好的检查代码是否完整,知道哪里有不足或者没有考虑到的地方,能很大的提升自己的编码质量。

 

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

       可行。举个上课时候的例子,在junit运行时,出现故障则代表测试数据不符合预期。

                                 

                       

 

  4.课程收获

 

  在这几周的学习中的学习中,我能够综合运用Java的基础知识,把一些东西联系在一起。通过这几次作业也加深了我对正则表达式的运用、泛型的运用、还有深深感受到了Java中的封装、继承、多态这三大特性。现在每次写代码也都会用面向对象思想来思考问题而非面向过程,写题前也会认真思考,先想自己的类该怎么设计,在对比下指导书里的类设计结构,看哪个会更好用,更简便。也懂得了做任何题时候无论简单还是困难都要细心,不能马虎,每次写完要多检查以此来提高编码质量。

 

  5.对课程的建议

 

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

  我认为题量可以减少,每题的难度可以适度加大,然后提升每题的关联性,使更多的作业的代码可以复用。

②课程内容讲解方面的建议

  在每次课上留一些时间给同学提问,前一堂课的课后作业问题,以及在做作业时候不懂的地方。还有就是每节课的课后作业希望能留更多的时间,来更好的思考。由于第三阶段作业更难,所以希望讲课的时候,能稍微提点一下上周大作业的内容。

 

posted @ 2020-05-01 14:06  Heartbeat233  阅读(125)  评论(0)    收藏  举报