1. 程式人生 > >面向過程與面向物件程式碼例項對比

面向過程與面向物件程式碼例項對比

面向過程式程式碼(使用資料結構的程式碼)便於在不改動既有資料結構的前提下新增新函式。
面向物件程式碼便於在不改動既有函式前提下新增新類。

過程式程式碼難以新增資料結構,因為必須修改所有函式。面向物件程式碼難以新增新函式,因為必須修改所有類。

這兩種定義的本質,他們是截然對立的,這說明了物件與資料結構之間的二分原理。

面向過程式程式碼範例:

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-版權所有 轉載請註明出處