面向過程與面向物件程式碼例項對比
阿新 • • 發佈:2019-01-02
面向過程式程式碼(使用資料結構的程式碼)便於在不改動既有資料結構的前提下新增新函式。
面向物件程式碼便於在不改動既有函式前提下新增新類。
過程式程式碼難以新增資料結構,因為必須修改所有函式。面向物件程式碼難以新增新函式,因為必須修改所有類。
這兩種定義的本質,他們是截然對立的,這說明了物件與資料結構之間的二分原理。
面向過程式程式碼範例:
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-版權所有 轉載請註明出處