設計繼承步驟 & 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還能做出更多的行為
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還能做出更多的行為
留言
張貼留言