Re: [問題] 請推薦有稍微真實範例的物件導向書

作者: suhorng ( )   2015-03-06 18:34:11
※ 引述《purpose (purpose)》之銘言:
: ※ 引述《mself (mself)》之銘言:
: : 開發平台(Platform): (Ex: VC++, GCC, Linux, ...)
: : Linux/Windows
: : 問題(Question):
: : 印象中,一些書說明物件導向的範例較不真實
: : 極端一點,好像有看到舉例
: : 鴨子呱呱叫、鴿子咕咕叫,
: : 鴨子和鴿子都是禽類,禽類會叫
: : 禽類(鴨子).叫()是呱呱而不是咕咕
: : ...
: 容小弟無知,岔一下題,因為說到動物的例子,突然很想貼一段話上來...
說到動物, 不禁想到以前看過一個很有趣的自嘲, 看一次笑一次
讓大家看看有沒有共鳴XD
https://twitter.com/tomaspetricek/status/402827811297050624
Tomas Petricek
@tomaspetricek
How #OOP models the real world?
Dog, Mammal, Animal,
NonNullAnimal, UpdatableNonEmptyMammal, NonNullMammalFactory...
也有其他回覆 (應該是在 google+ 看到的, 忘了連結...)
Jingqi Xie2014年1月2日
回覆
Canis_lupus
Canis
Canidae
Carnivora
Mammalia
Vertebrata
Animalia
Above is the correct inheritance chain.
不過個人覺得 OOP 真的不好學, 需要很多實務經驗. 只是有時候還是會
想到一些無關緊要的小問題, 例如 java 的 .equals (好像)是一律傳
Object 進去, 一些 dynamic language 的 '==' 也會正確的被 override,
那不知道 C++ 有沒有 idiomatic 的寫法?
舉例來說, 假使有
class A { public: bool operator==(const A&) const; };
class B : public A { public: bool operator==(const B&) const; };
那當我有兩個 B 的 instance 用 A* 指的時候, 被呼叫到的 operator==
實在很難說是不是 "正確" (心裡想要)的....
作者: littleshan (我要加入劍道社!)   2015-03-06 20:04:00
那個 == 就是萬惡的 multimethod 啊 XDidiomatic 的寫法就是 double dispatch但實際上這是語言的限制,有些語言就支援multimethod
作者: carylorrk (carylorrk)   2015-03-06 20:21:00
我也覺得與其說是 OOP 的問題,不如說是語言的問題XD只要扯到雙方形態的問題,首先就想到 double dispatch糟糕 感覺好像馬後炮,跟着一樓重複了一遍XD
作者: suhorng ( )   2015-03-06 21:43:00
XDDDDDD類似的東西 subtype 到底該怎麼做...感謝提供關鍵字! 來學 Common Lisp
作者: drm343 (一卡)   2015-03-06 23:24:00
樓上不是會嗎?
作者: purpose (秀才遇到肥宅兵)   2015-03-06 23:42:00
== 的狀況,還是有可能 B 跟 A*互動的,所以我覺得還是他老人家原本拿來嘴泡的例子,比較適合出來拿出來罵繼承就是動物類別決定,兩個動物交配產生動物,可是繼承之後就會亂多出一個根本不該存在的,長頸鹿跟動物交配的函數
作者: Killercat (殺人貓™)   2015-03-07 14:10:00
這篇其實還滿心有戚戚焉的 XD 有時候拿到東西還得用debugger確定是不是跑到我預想的class function早一點的debugger還沒辦法對應template 碰到就很慘

Links booklink

Contact Us: admin [ a t ] ucptt.com