类中有数据无操作方法,这是典型结构化编程中的数据结构定义,在面向对象的世界里,类的定义一般会吧数据和操作数据的方法放在一起,这样有着更好的内聚性和可理解性;
我们来看两种典型的情况:
示例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()函数会怎么样,所有的形状将不受影响。两种定义的本质:他们是截然对立的。这说明了对象和数据结构的二分原理:
过程式代码便于在不改动原有数据结构的前提下添加新的函数。面向对象代码便于在不改动既有函数的前提下添加新类。
在一个辅助的系统中,都会有需要添加新的数据类型而不是新函数的时候,这个时候对象和面向对象比较适合。另一方面,也有会想要填写新函数而不是数据类型的时候。这种情况下,过程式代码和数据结构比较适合。
网友评论