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

                  

0.前言

这次博客依然是对三次作业的总结,明显的,无论是从花费时间还是得分角度来看,都要远远难于前三次作业。

1.作业过程总结

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

这三次作业难度大于以前,除了题目本身的复杂度增加外,还有从面向过程到面向对象思维的改变。第四次作业涉及到正则表达式,主要是考查对正则表达式的简单认知和应用;以及初步继承,第二题与第三题,是有无继承的对比。然后第五次作业是在第四次作业基础上的递进,考查的是掌握类的继承、多态性及其使用方法。与上次作业不同就在于对多态性的考查,从一个类的继承,到多个类的继承,还有第二题既要用到正则表达式,也有关继承。第六次作业是掌握类的继承、多态性使用方法以及接口的应用,依然是在前一次作业的基础上增加新的功能,是对继承的进一步学习,还有ArrayList的用法,comparable接口的使用。总的来看这三次作业主要是对继承的一个学习的过程,同时还有正则表达式,还有ArrayList的用法,comparable接口的使用等学习。

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

封装性:使用者对类内部定义的属性(对象的成员变量)的直接操作会导致数据的错误,混乱或安全性问题。例:

class Circle extends Shape{

     public double radius         应该将radius属性保护起来

     public Circle() {              防止乱用。

                                  保护方式:信息隐藏

     }                               private double radius;

     public Circle(double radius) {

         this.radius=radius;

     }

     public double getRadius() {

           return radius;

     }

     public void setRadius(double radius) {

           this.radius = radius;

     }

     public double getArea() {

           return Math.PI*radius*radius;

     }

     public boolean validate(){

         if(radius<=0)

              return false;

         else

              return true;

     }

     public  String toString() {

         return "Circle:";

     }

}

然后提供公共的方法getXxx()和setXxx()实现对该属性的操作:

public void setRadius(double radius) {

           this.radius = radius;

     }

     public double getArea() {

           return Math.PI*radius*radius;

     }

继承性:多个类中存在相同的属性和行为,将这些内容抽取到单独一个类中(父类),那么多个类无须再多写,只要继承父类即可。例:

 

 

 

 

 

 

 

继承的出现让Circle类,Rectangle类,Ball类,Box类产生了关系,不仅有利于功能的扩展,而且提供了多态的前提。其中子类不能直接访问父类中私有的变量和方法。

多态性:对象的多态性:父类的引用指向子类的对象可以直接应用在抽象类和接口上。例:

 

Shape circle==new Circle(radius);Shape类型的变量circle,指向Circle类型的对象circle=new Circle();

③作业过程中遇到的问题及解决方法:ArrayList的用法不太会,然后就百度,然后有些测试点过不去,就会和同学讨论,

 

还有对象的多态一开始不了解不会用(也没想到用),然后就问同学,经过同学的解答才了解一点。

 

这道题最难,至今还不是完全懂。

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

第四次作业:四天,数据处理那道题耗时间。第五次作业:两天

第六次作业:两天。所以是2:1:1。

⑤对编程过程的严谨性的认识及教训:我是在eclipse上写好代码直接复制到pta里,然后经常出现错误,有几次忘记把类前的public去掉,导致一直过不去,还有各种格式错误等等。然后题目给的例子eclipse都能过,但在pta总有几个测试点过不了,然后就要根据测试点提示调试找错。

  1. OO设计心得

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

继承是多态的前提,没有继承就没有多态。封装既用于父类,又用于子类,限制了子类调用父类中私有的变量,提高了安全性。

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

单一职责原则:就是一个类只负责一个方法,

例:农夫过河的问题

 

Object类中只有一个pass()方法,符合单一职责原则。实际上在写作业时会影响这个原则,但并没有太大影响。它的优点有降低类的复杂度,提高类的可读性,提高系统的可维护性等。

“开-闭原则”:抽象化是开闭原则的关键

例:

 

当需要扩展时,通过抽象化的方式对系统进行重构,使之增加新的图表类时无须修改源代码,满足开闭原则。

③  OO编程思维的理解:

面向对象将事物都看成对象,将具有相同特征的实物看作类。通过对类与对象的继承,封装,多态的实现,完成模拟现实从而解决问题。

④  类设计心得:一般都要用到继承,找到各个类的共同特征抽出,设计另一个类即父类,然后个各类继承父类,也可重写父类中的方法。

  1. 测试的理解与实践

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

能够快速发现代码的不完整性,然后根据测试点切入发现修改完善代码。

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

每编写完一个函数之后,都应该对这个函数的方方面面进行测试,这样的测试我们称之为单元测试。JUnit通过运行一组测试来自动测试实现是否正确。

4.课程收获

题目难度大的自己写得十分难受,虽然最后还是要问别人,但是自己还是学到了点,就是如果完全自己写可能完成不了,总是少不了咨询讨论。了解了面向对象的三大特征封装性,继承性,多态性。学习了正则表达式的使用,comparable接口使用,ArrayList的使用,方法的重写等。

5.对课程的建议

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

建议难度可以加大一点,然后题量三到四题,然后由简入难,前面一两道题简单一点,循序渐进。

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

老师可以多讲些难的题目,提供一些好的代码,课堂多讲些或者提供学习网址。

 

posted @ 2020-05-02 21:31  嘀嗒嘀嗒哗啦哗啦  阅读(116)  评论(0)    收藏  举报