面向过程式代码(使用数据结构的代码)便于在不改动既有数据结构的前提下添加新函数。
面向对象代码便于在不改动既有函数前提下添加新类。
过程式代码难以添加数据结构,因为必须修改所有函数。面向对象代码难以添加新函数,因为必须修改所有类。
这两种定义的本质,他们是截然对立的,这说明了对象与数据结构之间的二分原理。
面向过程式代码范例:
Geometry类操作三个形状类。形状类都是简单的数据结构,没有任何行为,所有行为都在Geometry类中。
class Square{
Point topLeft;
double side;
}
class Rectangle{
Point topLeft;
double height;
double width;
}
class Circle{
Point center;
double radius;
}
public class Geometry {
public final double PI = 3.14159265359;
public double area(Object shape) throws NoSuchShapeExcept{
if(shape instanceof Square){
Square s = (Square)shape;
return s.side * s.side;
}
else if(shape instanceof Rectangle){
Rectangle r = (Rectangle)shape;
return r.height * r.width;
}
else if(shape instanceof Circle){
Circle c = (Circle)shape;
return PI * c.radius * c.radius;
}
throw new NoSuchShapeExcept();
}
}
面向对象代码范例:
area方法是多态的。不需要有Geometry类,所以,如果添加一个新形状,现有的函数一个也不会受到影响,而当添加新函数时所有的形状都得做修改!
class Square implements Shape{
private Point topLeft;
private double side;
public double area(){
return side * side;
}
}
class Rectangle implements Shape{
private Point topLeft;
private double height;
private double width;
public double area(){
return height * width;
}
}
class Circle implements Shape{
private Point center;
private double radius;
public final double PI = 3.14159265359;
public double area(){
return PI * radius * radius;
}
}
摘自:代码整洁之道
更多内容访问omegaxyz.com
网站所有代码采用Apache 2.0授权
网站文章采用知识共享许可协议BY-NC-SA4.0授权
© 2018 • OmegaXYZ-版权所有 转载请注明出处