[問題] abstraction v.s. polymorphism

作者: erikkk (erikkk)   2018-02-12 15:51:05
物件導向
OOP
Object-Oriented Programming
OOA
Object-Oriented Analysis
從以前就從網路上得知有四大觀念
但沒真正搞懂這兩個東西
abstraction
polymorphism
網路上的說法也不太一致
最近又再重看了一次
我這次的想法是這樣
abstraction 幾乎是所有 OOP 的核心思想
用簡單的東西表達複雜的東西
只需要知道如何操作各種東西
不需要知道那個東西到底是怎麼被做出來的
只是 OOP 著重於用 object 來做到 abstraction
而 functional programming 著重於用 function 來做到
也因次 OOP 衍生出其他三大觀念
encapsulation
inheritance
polymorphism
其中
polymorphism 在網路上也是有很多解釋
我覺得只要是能用一個百變怪來代表多個東西
那就是 polymorphism
1.
如果 A1 A2 A3... 和 B 的關係
是 extends 或 implements
讓 B b = (其中一個 A) a
這時百變怪 b 是(其中一個 A)
b 的函式其實是(其中一個 A)的函式
2.
override
和 1. 有點類似
但只侷限於 extends 的關係
3.
overload
同一個函式名稱可以代表多個功能類似但細微不同的運算
不知道我這樣想對不對?
作者: zephyrhymn   2018-02-13 09:51:00
可以看一下 #1A4lZ_dX
作者: ssccg (23)   2018-02-13 16:26:00
has-a = interface的說法哪來的? has-a是composition吧interface...就是interface,從外顯的功能來定義你用車子和飛機會覺得衝突,是因為你定義的Car = 路上走Airplane = 空中飛,這很明顯是從外顯功能定義是interface繼承關係是以實作為本體的,Car應該是指由底盤車身引擎...以特定方式組成的類別,如果未來可以飛的車,組成方式是以現在的車子加上飛行功能,那就是Car : Flyable不然不用未來,現在飛機就能在路上走了啊如果這個外顯功能不只是描述,還包含實作,現在interface也支援default method了(在OOP叫Mixin)
作者: erikkk (erikkk)   2018-02-14 03:22:00
那說法不是我說的所以你的說法是 功能用interface分 實體用extends class那如果飛機越做越像車子 車子也越做越像飛機你還是會遇到多重繼承的問題你只是硬套上一個實體(架構 組成方式)不會改變的限制我猜想在這種情況下你可能就選一邊站 飛機或車子或是另開一個class
作者: ssccg (23)   2018-02-14 05:29:00
說真的如果兩個東西接近到可以用一個類別來modeling,那refactor成一個也是很正常的,我覺得不能多重繼承是限制,但不是缺陷,不用提這個例子也有無數該重寫的情況了

Links booklink

Contact Us: admin [ a t ] ucptt.com