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

前 言:

    本次博客主要针对第二阶段作业进行总结。本阶段的作业一共同样也是有三次的,其中包含的题目只有八道,我觉得每次作业的难度在逐渐降低,因此本阶段的难度比之上一阶段要轻松一些,尤其是本阶段还有加分题。每次作业的关联性可能不明显,但是每次作业的知识点还是有很多相通的。同时在本阶段了解了新的原则——“开---闭原则”,看起来挺简单,添加开放,修改关闭,但是要做到这点对于自己而言还是有不小难度的,还是需要多学习。

一、作业过程总结

    (1)、总结三次作业的知识迭代关系:

        1、第一次作业中最难的是水文校验,其中运用到了正则表达式,强调了“单一职责原则”,引用了新的类结构关系----依赖关系,并且介绍了新的字符串存储StringBuilder以及时间日期处理类LocalDateTime,其次便是使用蒙特卡洛仿真方法求圆周率,这题不算很复杂,只需要运用之前的知识就能解决。最后的便是求图形继承类问题,解决不同图形的面积和体积,引出了新的知识,继承关系,但是这次继承不算复杂。

        2、第二次作业中最难的是一元多项式求导,这道题对正则表达式更加深入了,不仅需要利用正则表达对多项式进行检验,还要使用正则表达式中的捕获组来对每一项进行捕获处理,除此之外,还使用了上一次作业的继承关系,ArrayList,ListLinked,StringBuilder等数据存储类,对字符串数据直接处理的BigInteger类,再一次重申了“单一职责原则”的使用和规范,最后的就是图形继承类了,是对上一次作业的图形继承类的深入,本题的父类是抽象类,具有抽象方法,同时需要了解怎样对对象进行排序。

        3、第三次作业最难的图形卡片的分组,深入了解继承性,多态性的使用以及接口的应用。本次作业还需要了解Comparable中的ComparableTo()方法的使用,利用其来对数据进行排序。其次是图形卡片的排序,是图形卡片的分组的一个基础功能,这两道题其实和之前两次作业图形继承类有些关联的。最后的则是加分题,统计素数的个数,主要是算法问题,需要更新以前的算法,使用更快的算法。

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

        1、三大技术特性对于继承性更多了解,因为老师讲得更多的次数。继承关系有父类和子类。不可以继承多个,但可以多个继承,即子类不可以有多个父类,但是父类可以拥有多个子类。子类继承父类的同时也继承了父类的所有的属性和方法,但是需要注意的是不能直接调用父类的私有属性和方法,需要间接调用。父类不可以调用子类的方法和属性。了解了super()的含义,同时了解了父类一般作为中转站,为抽象类。继承了抽象类的父类需要执行父类的所有抽象类方法。

        2、其次则是封装性,顾名思义,就是将类封装起来,即类的所有属性私有化,外部只能通过get和set的方法来对类进行操作,其实多次作业的类提示都是属性私有化,get和set方法的创建,一般而言,只有按照规范写类的代码,都能实现封装性。

        3、最后是多态性,对于多态的理解比较模糊,只知道多态的实现类似于一个父类拥有不同子类,而不同子类又拥有着不同的属性和方法。类似,同一个方法名,但是其实现的功能,返回值不同,即重载。

    (3)、作业过程中遇到的问题及解决方法:

        1、第一次作业的水文校我是着实头疼,看不懂类提示,也看不懂类消息的传递,更看不懂StringBuilder和LocalDateTime的运用,我甚至不知道这两个储存类是怎么利用来储存多行数据的,同时还要从中调用数据,我只明白这样的意义是为了检验各个数据之间的输入格式的。我苦思冥想了一天,但是还是没有任何头绪,所以第二天我果断放弃了完全按照类提示来写了,我利用动态数组ArratList来储存数据以及用数组来存储调用的每个数据,我知道我这个办法没有可能对数据之间的要求进行校验,但是其他功能应该基本可以实现,所以我又花了一天多的时间来构建基本框架和修改类的方法,虽然最后的时间不多了,但是我的思想基本形成,所以我一个一个功能去实现,经过不断的修改和测试,在截止前不久我的代码终于可以完成除了数据之间空格的测试点之外的要求了。

        2、第二次作业的求导要好一些,但是还是很麻烦,较之于上一次,本次作业最大的优势的已经初步了解了正则表达式的一些校验功能,并且利用网站对正则表达式进行校验,这个网站提供的帮助很大,还有就是我搜到了北航的第一次作业就是求导,看了一些他们的作业总结的博客后,得到了一些提示和灵感。这次作业的输入依旧让我停滞了一整天,不知道如何储存输入的内容,最后看来博客之后选择利用String来储存输入信息,放弃使用split方法采取捕获组的方法来将多项式的每一项提取出来,完成这些之后时间同样不多,但是还是基本完成任务。

        3、第三次和之前两次容易很多,如果之前的图形类写得比较规范的话,完全可以在此基础在进行更改,我就是这样,这次作业比较坑的地方就是第二题的输入了,需要在类里面进行输入,好在主函数给出了,并给出了不要踩坑的善意提示,所以入坑的基本上是不可能的了。至于Comparable的ComparableTo方法的排序原理不是很清楚,但是由于之前老师讲过,所以照葫芦画瓢还是会的,所以也不是很难。

    (4)、每次作业花费时间的比例:

        1、第一次作业水文校验很难,所以花的时间很多,统计基本上花了四到五天。

        2、第二次作业求导比较难,所以花的时间也不少,统计基本花了三到四天。

        3、第三次作业比较简单,所以花的时间比较少,统计基本花了两到三天。

    (5)、对编程过程的严谨性的认识和教训:

        对于编程的操作的严谨性还是不够,还需要尽力完善,如果把问题都考虑清楚了,会为之后的解决问题提供很大的便利,也会节省很多的时间,就比如求导多项式,因为对每一项的捕获和校验没有考虑周全,所以导致之后花了大量时间来找问题和修改代码。

二、OO设计心得

    (1)、对面向对象三大技术特性之间关系的理解:

        继承同一父类的不同子类可以拥有不同的属性以及不同的方法,这就是继承性和多态性的结合,而封装是为了保护类的私有属性,可以增加代码的可维护性,从而使多态性得以更好的体现和应用。

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

        1、单一职责原则:即每一个类只执行一种功能,而一个类里一个方法也只执行一个功能。比如第一次作业的水文检测,分为处理信息类,水文信息类,信息检验类。顾名思义,处理信息类就是对输入的信息进行处理、计算并反馈给用户,而水文信息类是专门用来存储各类水文信息的,信息校验就是校验输入的信息是否符合要求。而每一个类里的每一个方法也是执行一个功能,即将功能碎块化和整体化。

        2、“开-闭”原则:即对于添加新功能是开放的,是允许的,但是对于修改其他信息是关闭的,是不允许的。对于“开-闭”原则的实现,就是在开始设计的时候就要考虑周到,这样才能更好的体现“开-闭”原则。

    (3)、OO思维编程的理解:

        OO思维就是对象与对象的联系,而不是过程。比如要去D点,OO思维不是说先迈哪只脚的问题,而是通过A点,再到B点和C点,最终抵达D点,完成目标,OO是一个不同的对象连接起来共同实现最终要实现的目标。OO就是将功能细化分块,然后将这些执行不同功能的类结合起来,最终就达成最终的功能。

三、测试的理解和实践

    (1)、测试对于编码质量的重要性:

        测试就是一种校验,对于代码的校验。通过不同数值和情况的测试,来检验代码是否存在漏洞,是否存在未考虑的情况,是否存在可能使程序崩溃的状况,不断的测试,是促使代码的质量不断的提升,因为通过测试才能发现潜在的问题,才能找到对应的错误,才能验证自己的修改是否正确。所以说,测试是很讨厌的,因为它会发现自己代码的许多问题,也正因为如此,测试也是必不可少的。

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

        查阅资料,可以很容易发现,利用Junit是可以对程序进行测试的,Junit自带了很多测试类的工具,只需要按照要求编写需要测试的代码,然后编写测试值既可以对所编写的程序进行测试,可以缩短测试的时间和精力,是测试的好帮手。

四、课程收获

    总结这是四周来在OO方面的教训和收获:
        1、相比前四周,这次的思维已经从面向过程逐步转化成了面向对象了,但是OO编程的总体思想还是不够完善,不能很好的利用OO思维来思考问题。这些作业给出了类提示的前提下自己都还要很久才能开始真正动笔开始编写代码,若没有UML图,我想应该要花费更多时间来设计类结构,而且还不能设计得好。

        2、虽然比之前考虑问题考虑测试点可能存在的情况要比上次完善很多,但是依旧存在不周全的,提交PTA总是要提交十多次甚至几十次来发现自己的问题,不能很快的发现问题的原因,也不能很快的进行修改正确。

        3、这几次作业难的我基本上都是放在最后几天完成的,而最后提交总是在截止前不久,所以要注意时间的安排,尽可能的在截止前完善自己的代码。

五、对课程的建议

    (1)、第三阶段作业难度、题量的建议:

        1、我建议难度可以波浪式,第一次作业可以难,第二次作业可以更难,第三次作业可以稍微简单些了。学霸是有,但是还有我这类的学渣,所以可以综合难度。

        2、题量我觉得三道题差不多了,一道难题,剩下两道用来“保命”,挺不错的一个搭配。因为这样最后自己的分数不会太难看了。

    (2)、课程内容讲解方面的建议:

        1、可以尽可能的讲解一些知识点,因为看的话博客的介绍密密麻麻,看也看不太懂,而且看着看着就想睡觉。

        2、可以讲一下比较难的PTA的题,就像上次水文校验,虽然没听太懂,但是还是解决一些我遇到的困惑,并且拓宽了思维,就像写一道数学题,看来正确答案之后的明朗。

猜你喜欢

转载自www.cnblogs.com/wzh-mingmeng/p/12815495.html
今日推荐