面向對象還是面向過程

類中有數據無操作方法,這是典型結構化編程中的數據結構定義,在面向對象的世界里,類的定義一般會吧數據和操作數據的方法放在一起,這樣有著更好的內聚性和可理解性;

我們來看兩種典型的情況:

示例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()函數會怎么樣,所有的形狀將不受影響。兩種定義的本質:他們是截然對立的。這說明了對象和數據結構的二分原理:
  過程式代碼便于在不改動原有數據結構的前提下添加新的函數。面向對象代碼便于在不改動既有函數的前提下添加新類。
  在一個輔助的系統中,都會有需要添加新的數據類型而不是新函數的時候,這個時候對象和面向對象比較適合。另一方面,也有會想要填寫新函數而不是數據類型的時候。這種情況下,過程式代碼和數據結構比較適合。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容