2012年3月3日 星期六

[Programming] 物件導向(4) - 抽象

我們常常會對一種模糊不清的東西,以「抽象」來形容它。而在OOP裡,也有抽象的類別可以定義。正如「模糊不清」的形象,抽象類別本身並不能被實體化,而是需要被能夠實體化的類別繼承了以後,才能真正使用。抽象的概念不是指「模糊不清」的東西(模糊不清的東西是要怎麼寫成程式?),而是一種有範圍性的大方向,或是一種大種類的東西。

以下是範例,就和很多教科書一樣,只寫怎麼使用,感受不出它的威力。
public abstract class abstractPerson {
    protected String Name;
    protected boolean Sex;
    protected String Email;
    protected String Offer;
}

public class Engineer extends abstractPerson {
    private LinkedList Skills;
    public Engineer(){
        Name = "";
        Sex = true;
        Email = "";
        Offer = "";
        Skills = new LinkedList();
    }
}

上面那個例子,我設計"人"的抽象類別,然後讓"工程師"來繼承它,若我還有"行政作業員"或"財會小姐"之類的類別,也同樣可以透過這樣的方式繼承"人"。
其它例子....像是"財產"可以做成抽象類別,而"土地財產"、"建物財產"、"運輸設備"這些類別就可以繼承"財產";
或是"棋子"可以做成抽象類別,"國王"、"皇后"、"主教"....各別做成繼承"棋子"的實體類別。

還有另一種思考的方向是.....抽象類別可以視為繼承它的實體類別的大種類,用白話文來說,可以講成"是一種 (is a kind of)"。像前面財產的例子,就可以翻譯成土地財產是一種財產運輸設備也是一種財產…等。用這種方式來思考,是比較容易將抽象類別應用在系統設計上。

沒有留言: