面向对象还是面向过程

2017-01-21  本文已影响0人  吴展

类中有数据无操作方法,这是典型结构化编程中的数据结构定义,在面向对象的世界里,类的定义一般会吧数据和操作数据的方法放在一起,这样有着更好的内聚性和可理解性;

我们来看两种典型的情况:

示例1
public class Square {

    pubic Point topLeft;
    public double side;

}

public class Circle {
    public Point center;
    public double radius;
}

public class Geometry {
    public final double PI =  3.14
    
    public double area(Object shape) throws NoSuchShapeException
    {
      if (shape instanceof Square) {
           ...
      }else if( shape instance of Circle){
           ...
      }
    }

}
示例2
public class Square {

    pubic Point topLeft;
    public double side;
    
    public area() {
         ...
    } 
}

public class Circle {
    public Point center;
    public double radius;

    public area() {
         ...
    } 
}


面向对象的程序员肯定会对第一种做法嗤之以鼻。想想看,如果再添加一个新的形状会怎么样。是的你会对Geometry类进行修改,而且随着增加的新形状越多,这个类就会越来越庞大,它也不符合开放封闭原则

想想看,如果给Geometry类添加一个primeter()函数会怎么样,所有的形状将不受影响。两种定义的本质:他们是截然对立的。这说明了对象和数据结构的二分原理:
  过程式代码便于在不改动原有数据结构的前提下添加新的函数。面向对象代码便于在不改动既有函数的前提下添加新类。
  在一个辅助的系统中,都会有需要添加新的数据类型而不是新函数的时候,这个时候对象和面向对象比较适合。另一方面,也有会想要填写新函数而不是数据类型的时候。这种情况下,过程式代码和数据结构比较适合。

上一篇下一篇

猜你喜欢

热点阅读