• 第二周期作业总结


    *前言

    本次作业总结主要包括以下方面:作业的过程总结,对OO设计的心得,对测试的理解以及对课程收获的阐述。

    *作业过程总结

    第二周期的第一次作业主要是对类的继承等方面知识进行巩固以及练习使用java中的字符串处理类和使用正则表达式对输入字符串数据进行合法性校验及计算;第二次作业对正则表达式的运用进行练习巩固,并且通过作业让我们掌握类的继承、多态性及它们的使用方法;第三次作业对类的继承、多态性使用方法方面的知识进行巩固,练习接口类或接口方法的应用,还添加了一道求素数练习来考察我们对算法的设计与优化。

    三次的作业完成时间大概为3:3:2。第一次的作业中利用正则表达式对水文数据的校验难度较大,尤其是对输入数据的正确性的校验,由于之前未考虑到运用java中的判定机制,导致花了很长时间和精力去尝试正确表达输入数据的正确格式,并且最终未能完成;第二次的作业求导一元多项式难度大,不仅考察对正则表达式方面的知识的理解,对类的多态性的理解及使用也是很大的练习点,对多项式及其求导后的表达方式也有严格的要求;第三次作业的整体难度相较于前两次有较大幅度下降,不过第三题的求素数练习有一定的思考性,题目要求我们用尽量少的运行时间完成程序,用普通的方法可以得到结果,但是运行时间过长,基本接近规定的最大运行时间,为了解决这个问题,必须对算法的运行时间进行优化,使用更简单的方法完成该程序。在作业中主要遇到以下问题:

    1、水文数据的校验:对输入的数据的格式及正确性的判断。不知道该如何对输入数据进行判断校验,因为数据很复杂,还可能出现很多特殊情况,如果仅仅用正则表达式会非常难以表达,最终通过同学的讲解,将对数据的校验分为分别对数据格式进行校验和对数据正确性进行校验,以下为对数据正确性进行校验。

     2、对Comparable接口的应用:类中实现Comparable接口中的CompareTo()方法,对其进行构造。对具体如何构造CompareTo()方法不清楚。

     在使用该方法时直接用Collections.sort()即可按照要求排序。

    3、求素数的优化算法:要求运行时间短的算法。从解数学题的方面来切入解决这个问题,使用了Eratosthenes算法;用一个数组存储n个数的状态,初始化都为1,然后从2开始,如果2的状态为1,就开始遍历比n小的所有的2的倍数,将其全部置为0。把2的倍数遍历完后,继续往下找下一个状态为1的数,即3,遍历比n小的所有的3的倍数(按3*3,3*4,3*5这样遍历,不需要从3*2开始).....最后遍历数组,剩下的状态为1的数全为质数,将其个数记录。

     通过这个周期的作业我对类的继承和多态性有了更深入的了解。封装是编程的核心思想,通过类将对象的属性和行为封装起来,这样可以保证类内部数据结构的完整性,提高程序的可维护性;在设计类时需要更多地考虑到类的多态性,尽量使同样或者相似类型的对象能够用一个抽象类来概括表示,其父类中的方法也可以定义接口,给出一个方法的标准,而不给出实现的具体过程;继承则可以提高类的复用性,二者都可以缩短编写代码的时间的同时减小代码出错的概率。同时我对编程过程的严谨性也有了更高的认识,尤其是本周期作业中的正则表达式检验数据,我因为与标准输出差一个空格而花费了大量时间寻找并做出修改;因此,在往后的编程过程中我会更加注重细节。

    *OO设计心得

    对面向对象三大技术特性之间关系的理解:继承是指从已有的类中衍生出新类,一般为单继承,运用接口可实现多继承,若子类想要更改继承的方法则需要重写;而运行时多态则是通过继承及方法重写来实现。单一职责指的是每个类型的对象用一个抽象类概括,每个类有单一的功能,只有一种原因能够引起它变化。单一职责使得程序的稳定性大大提高。开闭原则则是面向对象设计中可复用设计的基石;它使得对模块行为的拓展是可行的,当运用需求改变时,便对模块进行扩展,使它具有新的要求的行为,即改变模块的功能。

    我们在设计程序时需要先做好构思,可以依靠花UML图来确定程序大概的类结构、各个类中所包含的属性和方法以及各个类之间的关联关系。而在设计具体类时需要充分考虑到类的复用性和封装;不同的方法各自封装,程序执行时便可以随意使用需要的方法;在创建类时也要依照单一职责的原则,使得我们以后写新程序需要沿用代码时能够复用更多的代码。

    *测试的理解和实战

     程序运行的结果需要考虑的情况往往有多种,而我们考虑的情况往往不是很全,所以需要设置测试点来检验代码的正确性。通过测试可以提高程序员的编码的质量,测试得越全面,发现的漏洞可能就越多,通过不断的改进,可以提高我们的编程水平,在编码质量上也会有巨大的提升。对程序也可以使用Junit设置测试类进行测试。

    *课程收获

     通过本周期的学习,我对类的继承和多态性有了深刻的认识,在后续的学习和编码过程中,要依照类的单一原则和开闭原则;使用正则表达式检测数据的题目让我明白,在编程时要头脑灵活,学会用不同的方法获得想要的结果,当一种方法很复杂时想其他的方法,来达到编程的目的或者提高编程的效率。

    *对课程的建议

    希望老师在讲解课程时能够多结合实例,多给我们讲讲设计的思路,课堂作业和之前一样每次上完新内容后发布一个相对应的练习题即可;同时希望下个周期的作业在题目难度上不要有太大的提升,题量来说目前的题量比较平衡,建议保持目前的题量。

  • 相关阅读:
    Java实现 蓝桥杯 生命游戏
    Java实现 蓝桥杯 生命游戏
    Java实现UVA10131越大越聪明(蓝桥杯每周一题)
    Linux 静态库&动态库调用
    linux下c++开发环境安装(eclipse+cdt)
    怎样在Windows和Linux下写相同的代码
    教会你如何编写makefile文件
    Linux编译多个不同目录下的文件以及静态库、动态库的使用
    Fedora 17 下安装codeblocks
    Fedora 下安装codeblocks
  • 原文地址:https://www.cnblogs.com/cnzhh/p/12806126.html
Copyright © 2020-2023  润新知