• 面向对象程序设计第二周期作业总结


    0.     前言

    本次周期的作业较上一周期难度有所提升,得分情况分别为96,100,100。其中第四次作业的第一题-《水文检测》没有拿到满分,多条数据正确答案错误,总体来说完成情况良好,通过此次作业,体会领悟到了面向对象程序设计三大技术特性以及基本的单一职责原则的重要性,学习掌握了正则表达式的语法,并掌握了如何在JAVA中使用正则表达式。学习了JAVA中的抽象类与接口类,体会到了抽象和接口在使用中的灵活性,明白了多态的重要意义。

    1.     作业过程总结

    a)    

     

     

      三次作业中主要考察了图形类的设计,包括的内容有继承,多态,抽象类,接口类,正则表达式的语法和使用。其中,水文检测主要考察了正则表达式检测数据的正确 性,一元多项式的求导中也涉及到了正则表达式的使用,求素数一题考查算法,用常规的方法时间复杂度过高,使用埃式筛选法或欧拉筛选法可以大大减低时间复杂度。

    b)        面向对象程序设计的三大技术特性:封装,继承,多态。在作业过程中逐步加深了对这三个特性的理解,每一个类的设计都要求属性私有,同时设置私有属性的getter,setter,每一次题目中都能体会到封装性;图像继承的一系列题目中,父类子类由大到小,体会到了设计的继承性;在抽象类接口类中,子类重写父类的方法,更加灵活,体会到了多态性的实际运用。

    c)         此次作业周期中,遇到的主要问题是正则表达式的使用和接口的使用,解决过程中,我查阅了许多资料,在CSDN等各大平台查询资料,寻求解决办法,最终逐一攻破,成功解决。

    d)        第四次作业的耗时较长,第五次第六次的作业难度不大,没有过多的花费时间,但因为审题不细致,导致浪费了一部分时间去分析题目。

    e)         本次周期的代码量较大,出现了许多因为不够严谨而导致的问题,如水文检测一题检测输入数据的方法在设计过程中,

    public boolean validateMeasureDateTime(String measureDateTime) {
            // TODO Auto-generated method stub
            Pattern p = Pattern.compile("\s*([\d]{1,4})\s*/\s*([1-9]|1[0-2])\s*/\s*([1-9]|[12][0-9]|3[01])\ ([02468]|1[02468]|2[024]):00\s*");
            Matcher m = p.matcher(measureDateTime);
            boolean res = m.matches();
    //        System.out.println(measureDateTime);
            String noHave = measureDateTime.trim();
            String[] date0 = noHave.split("/");
            String dateX = date0[2].trim();
            String[] date = dateX.split("\s");
    //        System.out.println(date0[0]);
            String y = date0[0].trim();
            String mon = date0[1].trim();
            String d = date[0].trim();
    //        System.out.println(d);
            int year = Integer.parseInt(y);
            int month = Integer.parseInt(mon);
            int day = Integer.parseInt(d);
    //        System.out.println(date0[0]);
    //        System.out.println(date[0]);
    //        System.out.println(date[1]);
    //        System.out.println(date[2]);
    //        System.out.println(day);
    //        System.out.println(res);
            boolean date_res = checkInputValidity(year, month, day);
    //        System.out.println(date_res);
            if(res == true && date_res == true)
                return true;
            else
                return false;
        }

    我忽略了许多问题,比如日期是否匹配,时间是否匹配,只注重了格式却发现数据的正确性被忽视,等到发现这个问题的时候,花了很大的精力才得以完善。

    2.     OO设计心得

    a)         封装继承多态我认为是逐步递进的一个过程,多态的前提就是封装继承,有了这样的前提,我们可以进行方法的重载和重写 ,使得代码更加灵活简洁,可读性更强。

    b)        单一原则是在程序设计中必不可少的,单一原则要求,每一个类的功能具体单一,如图形类就存放图形信息,信息处理类就处理各种数据,每个类的功能职责单一带来的好处是显而易见的,每个类由每个类独特的职责,不必去纠结某个功能究竟应该在哪个步骤中实现,代码的可读性,可维护性都大大提升。

     开闭原则的意思是,一个程序在面向拓展时时开放的,面向修改时时封闭的,在代码中贯彻开闭原则是极其有利的,保证了代码的稳定和安全,对于日后的维护也大有裨益。

    c)         对于面向对象编程的理解,在逐步的学习中逐渐明了:

                   i.            一切事物都是对象,面向对象编程要求我们在看待事物时,将一切都视为对象,比如一个人是人类的对象,一个鸟事鸟类的对象,甚至一串数据是一个信息类的对象;

                   ii.            程序其实是对象间的互相交流,一个程序运行,实际上是各个对象在互相发送指令,彼此之间交流发送请求;

                   iii.            对象都有自己的类型,类型可以是基本类型,也可以是自定义的类型,同样,对象的方法也有类型以及返回值,在开发中,这样的设计是符合人思维逻辑的。

    d)        对于类的设计,我认为最重要的就是单一原则,每个类的功能和职责都明确具体具象,程序才会条理清晰,对于代码的维护和拓展才能起到有利的帮助

    3.     测试的理解与实践

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

      测试必然是程序员必不可少的一项工作,一个代码的开发,必定要经过无数的测试,通过无数的修改才能成型,所以测试时程序员的一个必备的能力,当然测试方向有自己独立的学科,但其他方向的程序员都必须掌握一些基本的测试技能,在开发中才能游刃有余。

    b)        单元测试时对类中的每个方法提供一个或多个测试的一种实践,目的是为了有规律地测试一个类的各个部分是否具备正确的行为。目前我们学习了Junit单元测试工具,但是使用Junit进行程序的测试并不可行,作为一个单元测试工具,     Junit可以测试每一个类是否正确,但是对于一段完整的程序,需要的不只是一个个正确的类,还包括了类于类之间的关系,Junit是不能测试到这一部分的,所以进行程序的测试还有其他可行的方法,Junit略有不足。

    4.     课程收获

           面向对象对每个程序员来说都是一个渐悟的过程,一次次地敲击键盘,一次次都思考于实践之后,对于面向对象的编程思维才能逐步掌握,对于这门学科才能愈加热爱,这四周的作业周期让一个IT入门的我受益匪浅,不只是在技术方面,更多的是在心里方面,当把自己投入到代码中去,才能领悟到代码的魅力,才能发自内心的爱上这个可以改变世界的技术,这都是我从这一门课程中感受到的。

    5.     对课程的建议

    a)     下一阶段的作业难度可以提高一点,类的设计可以交给学生来做,题量适中不宜过多,对各个层次的学生都有考虑。

    b)    课程讲解我认为应该提前告知下一节课的内容,给一个预习的时间,带着问题去学习,效率会更好。

    6.     下一个阶段的学习计划和打算

    a)     继续深入学习JUNIT测试的知识;

    b)    加强有关接口的内容;

    c)     文件IO流的使用多加练习。

    Pete

    2020-05-02

     

  • 相关阅读:
    无法加载模块 TP3.2
    always_populate_raw_post_data
    关于(void**)及其相关的理解
    面向对象设计原则
    数据对齐总结
    C++ POD类型
    do..while(false)的用法总结
    c++为什么定义了析构函数的类的operator new[]传入的参数会多4字节?
    C++ new new[]详解
    【转】C内存操作函数
  • 原文地址:https://www.cnblogs.com/Pete-blog/p/12817370.html
Copyright © 2020-2023  润新知