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