物件導向 - 繼承、封裝、多型

屬於物件導向的程式語言,皆具有三大特性:繼承、封裝、多型。

繼承 (Inheritance)

以生物老師的角度,不考慮先後天性意外的話,物種為人的就有兩隻腳、物種為狗的就有四條腿、物種為章魚的就有八條...腕?

以公民老師的角度,類似族譜,不談論倫理道德的話,爸爸姓什麼,小孩就會繼承爸爸的姓氏。

以岸本齊史的角度,就是血繼限界,不討論天份能力的話,宇智波一族的孩子就擁有寫輪眼。

以程式語言的角度,子類別可以使用(呼叫)父類別的函式、參數等。

> Java 中只允許單繼承,一個子類別只能擁有一個父類別。

封裝 (Encapsulation)

以現實生活中例子,自動販賣機,假如你想買一瓶無糖綠茶,就投 25 元,燈亮,點無糖綠,無糖綠掉出來。

但你不需要去理解機器怎麼處理收到錢之後燈亮的步驟,選完綠茶後機器又是怎樣的構造讓綠茶掉出來。

以程式語言來舉例,雜湊演算法,以 MD5 為🌰,很多開法者都呼叫過這個 function,但在收到要做雜湊的字串後,是做了什麼樣的數學運算而得到雜湊值,大部分的開發者並不會知道。

因為實作 MD5 的細節跟過程被封裝起來了。

多型 (Polymorphism)

> 同樣的類別,但用不同的實作方式(用繼承區別)

目前覺得最好理解的舉例就是多邊形 (Polygon) 面積計算

ref: http://www.cplusplus.com/doc/tutorial/polymorphism/

class Polygon {
  protected:
    int width, height;
  public:
    void set_values (int a, int b)
      { width = a; height = b; }
};

class Rectangle: public Polygon {
  public:
    int area()
      { return width * height; }
};

class Triangle: public Polygon {
  public:
    int area()
      { return width * height / 2; }
};

同樣都是要獲得面積,但是多邊形有很多種,就像矩形、三角形計算面積的方法本身就不一樣(不同的實作方式)。

泛型 (Generics)

在程式語言中,宣告變數的時候通常也會宣告型別,在寫 function 時,也會設定好 i/o 的型別,

若同一種實作方式,有可能用到不同型別的時候,就會用到泛型,

(如果沒有泛型,就要寫很多相同實作方式的 function)

以泛型的方式設定 function,就可以 input 任意型別讓系統去實作。

Public、Private、Protected

public: 誰都能呼叫

private: 只能在該 class 中呼叫

protected: 和 private 的不同在於有繼承功能

arrow
arrow
    文章標籤
    Object-oriented
    全站熱搜
    創作者介紹
    創作者 Elmo 的頭像
    Elmo

    ElMO

    Elmo 發表在 痞客邦 留言(0) 人氣()