OO第二单元作业总结

0.前言

        这次java的作业比第一次的难度增加了许多,考查的知识大幅度增加。第一次作业考察了字符串相关类的应用,正则表达式判断输入数据合法性,以及类间关系的应用,以及父类与子类的继承。第二次作业是训练类的继承与多态,同时初步考察抽象类的使用。第三次是训练类的封装性、继承性、多态性,同时还有抽象类与接口的使用。其中的一些知识和概念需要自己去百度,再用自己的方法理解,同时在写代码前,需要花一定时间去研究程序的结构和类间的关系的实现以及各个类及其方法的作用。

1.作业过程总

  1. 三次作业的知识迭代
         
    第一次的作业是加深我们对类间关系的理解与实现,同时学习正则表达式以及字符串类的使用这些常用的知识,初步涉及到继承与多态;第二次作业上升到类的继承和多态上,同时也要用上第一次作业中的正则表达式判断数据合法性以及字符串类;第三次作业是通过普通类与类之间的继承上升到接口和抽象类的继承上,展现了不同的继承方式。
  2. 如何通过作业逐步理解面对对象的封装性、继承性、多态性三大技术特性
            第一次作业是考察了类间关系的运用,各种类的设计考察了封装性,通过类图将各种相关功能的代码分类存在各个类中,通过实例化对象去使用,可以使得代码更加有序,并且第三题图形继承初步接触到了类与类之间的继承,这种继承性是通过子类直接使用父类的方法去实现继承,同时可以通过父类的指针指向子类的对象,将不同的子类通过父类组成数组——体现了多态性,以及可以通过重写对子类从父类继承到的方法进行修改;第二次作业完全上升到类的继承与多态上,需要通过继承与多态去实现代码的复用,并且第二题初步涉及到抽象类的使用,抽象类的继承是通过父类定义的抽象方法让子类去实现;第三次作业训练的是接口和抽象类的使用,接口和抽象类相比接口的抽象程度更高,抽象类可以拥有抽象方法也可以有普通方法同时还可以有构造方法,而接口内的方法都是抽象方法,全都需要接口的实现类去实现。
            通过三次作业,我个人理解是封装性就是将所有功能相关的属性和方法放到一个类中,需要使用时实例化对象调用其中的方法,能够使得代码更加规范,更加贴近自然事物,同时通过类中各种属性与方法的修饰词控制访问权限,确保了信息的安全;继承性可以通过普通的类之间的继承,抽象类的继承以及接口的继承实现,可以通过父类已有的方法和属性减少子类的复写,从而提高代码的复用性;多态性是在继承的前提上实现,能够通过父类的指针来调用子类的不同实现方法,能够将不同的类通过父类统一起来,甚至可以组成数组,使得程序设计更加整齐规范。
  3. 作业中遇到的问题及解决方法
         
       首先是类图和指导书的阅读和理解,有的时候类图中的一些类和方法的作用比较难理解,以及如何去实现类间关系,这个时候就需要去抽象现实事物,同时耐心的进行分析和理解。对于这种情况,我发现在进行程序设计之前花一定时间去理解类图和阅读指导书,对相关知识进行提前了解,能够大幅度提升编写代码的速度,毕竟磨刀不误砍柴工。
         
      再者是正则表达式,第一次作业的时候因为是第一次用还不太熟练,特别是日期时间那一块,冗长的正则表达式以及各种情况的判断确实让人心烦,出了问题很难发现,于是我先用一个正则表达式判断日期与时间的格式,再把日期不同的情况放进不同的正则表达式中判断,能够摆脱冗长的正则表达式,以防出现一些小错误。

        最后是对错误测试点的修正,有的时候可能对指导书的内容有一些理解的偏差,例如第一题的水文数据,在空格方面有一个问题理解错误,导致测试点一直过不去,自己在eclips上怎样测试修改都发现不了问题。我一度以为测试点有问题,直到有人通过,我才认为自己有问题。于是我转变了方法,直接在pta上修改代码,不断的进行测试,最终锁定了问题代码段,同时结合指导书发现了问题。

  4. 每次作业花费的时间比例
           三次作业的时间比是3:2:2,前面的两次作业有一个点卡住了,所以时间比较久,第三次作业主要是加分题的优化。

  5. 对编程过程严谨性的认识和教训
            编程过程的严谨性决定了代码的容错率,需要全面的考虑所有可能出现的情况,同时要理解程序的设计要求,才能做出符合要求的程序。例如在第一次作业的水文数据一题和一元多项式求导中对空格在何处存在合法的理解出现了偏差,导致有个别测试点卡住过不去。所以在编程之前,认真仔细的了解需求非常重要,不然可能会因为理解的偏差导致程序不够严谨。

2.OO设计心得

  1. 对面向对象三大技术特性之间关系的理解
           封装性是单个类的特性,需要考虑类内属性和方法的访问权限;继承性是通过类的继承或者接口去实现,是类与类,或者类与接口之间的关系,只有封装性良好的类,才能更好的实现继承,通过继承去打破访问的限制;多态性是一个类或者一个接口与多个类的继承关系,可以通过父类的指针调用子类的方法,将子类通过父类统一起来。
           总而言之,封装性、继承性、多态性是一个从基础到深入的过程。
  2. 面向对象设计的基本原则理解(单一职责原则及“开-闭”原则)
           单一职责是要保证类或者接口的功能具有专一性,从而实现代码的可扩展性与可维护性,降低了变更引起的风险。其中最重要以及最复杂的就是职责的划分,没有固定的标准,需要从实际出发,需要使类只有一个变化的原因,确保没有其他原因会使得类发生改变,从而引起程序出现错误。

           “开-闭”原则定义较为模糊——对扩展开发,对修改封闭。其他五个原则可以说都是“开-闭”原则的具体形态,这个原则的意思就是当程序需要进行改变时,应该能够在程序原本代码上进行添加扩展,而不是进行修改。具体的实现需要合理的抽象,对容易发生改变的部分用抽象类或者接口继承。同时抽象的合理性需要对程序的扩展具有一定的预见性。

  3. OO编程思维的理解
          OO编程的关键是要对物体进行抽象,将程序封装为多个模块,降低彼此之间的耦合性。通过封装、继承、多态三大特性,令每个模块保持相对独立,可以确保程序的可维护性与可扩展性。

  4. 类设计心得
           在进行类的设计之前需要先考虑类应该实现的功能,以及类间关系,即把每个类的属性与方法以及对象建立完善,完成大体的程序框架,再去实现方法,进行测试,发现问题后再进行修改完善。
           这几次的作业都是有类图提供,如果是我自己设计,首先也是要设计类图,完成程序的大体框架,要考虑类的设计原则,把程序抽象为功能单一,相对独立的个体,通过合适的类间关系进行组合,之后需要考虑类应该具有的属性和方法去实现类的功能,最后去实现方法,测试、修改、完善。

3.测试的理解与实践

  1. 测试对代码质量的重要性
           程序的设计过程中,多多少少会有一些问题,刚开始设计的时候可能并不知道或者没发现的一些小问题,可以通过测试发现和完善。各种不同并且偏门的测试用例可以发现你程序中隐藏的问题,降低程序出错的风险,让一些代码可以在多种环境下进行重复使用,提高代码的质量。

  2. Junit进行程序的测试是否可行
           可行。Junit需要编写测试代码,需要花费一定时间,可以较快地追踪到问题的原因,在重构的过程中可以写一点测一点,减少了回归错误浪费的时间,同时有利于日后进行代码扩展或者修改后的测试,提高了维护的效率。

4.课程收获

       通过四周的学习,我充分了解了java三大技术特性封装、继承、多态的重要性,同时也对单一职责原则与“开-闭”原则有一定的理解,在程序当中能够初步体现面向对象三大特性,遵循类的设计原则。同时我学会了字符串相关类的运用,通过正则表达式的各种运用去检验输入数据的合法性以及提取相应数据。

5.对课程的建议

  1. 第三阶段难度、题量的建议
          难度的话可以提升,但是希望题量可以减少,因为我觉得第二阶段的题目更复杂主要体现在类的设计上,题量减少的话,可以集中于一个程序的设计上,思维不会有那么大的跳跃性。我觉得一个星期两道题应该比较合适。
  2. 课程内容讲解方面的建议
          希望老师讲课能够多结合一些实际题目来讲,多讲一下如何进行类的设计更加合理,因为之后的作业据说没有类图,需要自己设计。


                   

posted @ 2020-05-02 10:44  无冕之王tang  阅读(34)  评论(0)    收藏  举报