設計繼承步驟 & IS-A test

如何設計繼承的步驟分為5個:

step 1: 找出具有共通屬性&行為的物件
step 2: 設計代表共通狀態&行為的class
step 3: 決定subclass是否需要有特殊設計的method(也就是讓某行為具有特定不同的表現方式)
step 4: 透過尋找使用共通行為的subclass來找到更多抽象化的機會
step 5: 最後完成class的繼承階層


IS-A test:

此測試是適用繼承階層的任一地方, 也就是說, 如果繼承階層樹被設計地很好,
--> 則所有的subclass皆應通過任一個上層superclass的IS-A test。

e.g. (繼承順序由上到下)

class Animal:
    makeNoise()
    eat()
    sleep()
    roam()

-->
    class Canine:
        roam()

    -->
        class Wolf:
            makeNoise()
            eat()

寫好繼承階層樹後, 開始做IS-A test:
1. Canine extends Animal    --> 通過
2. Wolf extends Canine    --> 通過
3. Wolf extends Animal    --> 通過
4. Canine IS-A Animal    --> 通過
5. Wolf IS-A Canine    --> 通過
6. Wolf IS-A Animal    --> 通過

可以這麼說:
--> Wolf是一個Canine, 所以Canine能做的事Wolf都能做
--> 而且Wolf也是個Animal, 所以Animal能做的事Wolf也都能做

注意:
當我們說"如果X IS-A Y合理"時, 有以下這些可能性:
    1. 這兩者或許存在於同一個繼承架構下
    2. 這兩者根本是相同的, 或剛好擁有相同的行為

需要記得"X IS-A Y" --> 隱含X可做出任何Y可做的事,除此之外,可能X還能做出更多的行為



留言

這個網誌中的熱門文章

如何在macbook pro上安裝Eclipse、tomcat、mariadb、MySQLWorkbench?

求1000和495的最大公因數

如何在mac版的Eclipse workspace中找到.metadata?