iT邦幫忙

2022 iThome 鐵人賽

DAY 9
0

物件及資料結構

優秀的軟體開發者能理解箇中原因,在不帶有偏頗的情況下,選擇最適合的方法來完成手中的工作。

物件與資料結構兩種模式,各具優點並彼此互補,在這篇中將會提到他們各自的優點與缺點。

物件

public class Square implement Shape {
    private Point topLeft;
    private double side;

    public double area() {
        return side * side;
    }
}

public class Rectangle implement Shape {
    private Point topLeft;
    private double height;
    private double width;

    public double area() {
        return height * width;
    }
}

public class Circle implement Shape {
    private Point center;
    private double radius;

    public final double PI = 3.141592653589793;
    public double area() {
        return PI * radius * radius;
    }
}

在上面的程式碼中我們可以很輕易地發現,物件導向的程式碼,容易添加新類別,而不需修改已有的函式。但相反的,物件導向的程式碼很難添加新的函式,因為這將必須改變所有類別。

那結構化的程式碼 (使用資料結構的程式碼) 呢?

資料結構

public class Square {
    private Point topLeft;
    private double side;
}

public class Rectangle  {
    private Point topLeft;
    private double height;
    private double width;
}

public class Circle  {
    private Point center;
    private double radius;
}

public class Geometry {
    public final double PI = 3.141592653589793;

    public double area(Object shape) throws NoSuchShapeException {
       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 NoSuchShapeException();
    }
}

與物件導向相對,使用資料結構的程式碼容易添加新的函式,而不需要變動舊有的程式碼。與此同時,它難以添加新的資料結構,因為這必須更改所有函式。

物件及資料結構在本質上,對立且互補。使用物件導向感到困難的事物,在結構化裡卻很容易;在結構化中感到困難的,在物件導向中卻輕而易舉。

在任何複雜的系統裡,總是有想要增加新資料型態,而非增加新函式的時候。在這種情況下,物件和物件導向是最適合的。在另一方面,也會有想增加新函式,而非增加新資料型態的時候,在這種情況下,結構化和資料結構式較為合適的。

成熟的程式設計師知道一個概念,要讓每件事物都是一個物件是一個神話。某些時候,你真的只想使用簡單的資料結構,並透過結構式的程式碼來操作這些資料結構。

混合體

......他們擁有函式來做一些重要的事,它們也有公共變數或公共存取器、修改器,......像這般的混合體,會使得程式難以添加新的函式,同時,也難以添加新的資料結構。

將物件導向及結構化程式混合在一起,是兩種世界裡最糟糕的情況,並代表作者不確定這個系統該如何設計。

小結

大概是對於物件導向設計模式的不嫻熟,其實我對於這篇該如何應用、提升自己的程式碼品質是有點茫然的,但還是分享給大家做參考。只好期待之後我更理解 OOP 概念後,重讀這篇章會有全新的收穫哩!


上一篇
編排
下一篇
錯誤處理(一)
系列文
重新開始學程式,【無瑕的程式碼:敏捷軟體開發技巧守則】共讀30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言