先简单结论一下,
1. 基於原PO的命名方法,我很直觉的就认为原PO的son/father类别,
分别是指"子类别"与"父类别",而不是"儿子"类别和"爸爸"类别。
儿子是要继承什麽鬼? 又不是爸爸挂了。
2. "子类别"继承"父类别"是天经地义的废话。事实上,也已经的确这麽实作了。
看不懂到底是在打谁的脸。
3. 即便原意是别的意思,基於只有看到strA, strB两个属性,
我认为只有超能力才能判断这两个类别该不该继承。(用你的话 有没有is)
4. 讲错的观念就是错的,即使後来改成"类别不该继承自衍生类别"也不会比较好
抽象类别也可能是衍生类别。讲错人人都会,没什麽。硬拗比较令人不耐烦。
5. 附赠以下说明,多了没有了,花掉太多时间。
作者: adrianc (123) 看板: C_Sharp
标题: Re: [问题] 变数宣告在if结构里
时间: Tue May 20 11:18:52 2014
※ 引述《StupidGaGa (笨嘎嘎)》之铭言:
: 标题: Re: [问题] 变数宣告在if结构里
: 时间: Mon May 19 14:14:22 2014
:
: 类别本来不应该继承类别,
: 类别是要继承於抽像类别或介面。
:
: 就算不管DesignPattern,
: 我还是那句话,
: 类别不该继承於类别,
: 类别应该继承於抽像类别或介面。
:
: → ssccg:先不管son father这些名称,为什麽类别不应该继承类别? 05/19 17:22
------------------------------------------
昨天是午餐,今天是早餐...
首先我也很好奇"类别不该继承类别"这句话是哪位大师说的,
可否指点一下?
为什麽ssccg大会说先不管这些名称,因为原PO的命名本来就没什麽好讨论了。
如果你对son/father这麽有意见,换成sun/futher你会不会高兴一点?
所以我才说你直接批我变数 xxx strA 还比较快...
sun/fucker有没有所谓的"is"关系? 我又没通灵我怎麽知道
另外你说我"认为在最小幅度内更动原PO程式码"也是错的。
我认为的是"既然你已经用了继承,就不要用完还在写重覆程式码"。
已经用了的继承正不正确? 没有资讯,我无法判断。
既然你说"继承这种基础概念反而是最需要厘清的",
那我真的想厘清一下,"类别不该继承类别"是打哪来的说法...
甚至还有原则2"类别不能继承类别,有两个情况下才能打破"...
然後举一个跟主题没有直接关系的多阶层继承的例子。(多阶层继承不好)
我想Ga大是由依赖倒转原则
--1. 高阶模组不该依赖低阶,两者都应依赖於抽象
--2. 抽象不应依赖细节。细节应依赖抽象。
加上 Program to an interface, not an implementation (GoF)
联想而来。原则内容先不赘述了。
其实我推文也有说,继承自抽象是个好的习惯,
会避免违反设计原则和相关衍生问题。
甚至如果可以选择的话,介面可能比抽象类别更好一点。
我们要继承的对象,有几种可能
1. 介面
2. 抽象类别
3. 类别
先简单说明一下差别:
介面只定义了行为,也就是这个物件能提供我什麽服务,不管你是什麽,怎麽做。
抽象类别也定义了行为,且可能包含这种物件共同的部份实作。但是使用者仍然
无法直接实体化(new)这个类别。
类别则有自己的完整实作,可实体化。
如果今天你的论点是,对抽象开发,而不是实作。
OK,那今天的问题也不是
设计成继承自抽象类别或类别,而是继承自介面或/类别与抽象类别。
因为继承自抽象类别一样相依到共通实作的部份。
相依到实作会有什麽问题先暂不讨论。
设计成继承自抽象类别与类别,使用上的最大差异其实只在於
抽象类别强制你不能实体化,所以你必须在某个地方为他指定完整实作(具体类别)
这个限制用类别可不可以做到? 其实也可以...
真要说坏处的话,应该是继承自类别可能覆写掉某个已知的实作以致非预期的使用。
某种程度上,我觉得抽象类别像是一种设计演进过程中的过渡产品。
他建立了一定程度的抽象,同时为了共同的部份也保留了实作。
造成了使用者端很可能不得不依赖到部份的实作。
为了达成同性质的类别使用相同的实作避免重覆程式这件事,其实也有别的解法。
相关讨论查查以组合取代继承应该有不少说明。
关於介面和抽象类别的不同,我觉得由性质说明容易进入误区。
换个角度解释一下。
抽象类别的本质是一种类别的范本,继承自此范本的类别都有着部份相似的性质。
使用者端引用这个范本,并预期这个范本产生的实体有规范中的性质
例如我叫来一个People,无论你是Male或Female,反正你都会Drive,怎麽Drive不管。
介面这个东西则是试图完全隔开物件,达成更高阶的抽象化。
我不只不在乎你怎麽做,甚至不在乎你是什麽。
例如我只知道我要一个ICanDrive,你给我只会开车的猴子或香蕉我都不介意。
这样就回归到本质-参考一个类别时,是因为你预期这个类别会提供你某种服务。
最後,讨论这个也不是自爽用的,至少在我的工作中不是。
银子很实在,所以我平常都只潜水不回文多赚银子无误。
别动不动想打人脸,除非他是你孙子。
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 220.134.109.209
※ 文章网址: http://webptt.com/cn.aspx?n=bbs/C_Sharp/M.1400555935.A.301.html
1F:→ StupidGaGa:你如果认为,你的范例son:father OK就OK吧! 05/20 11:30
2F:→ StupidGaGa:你有你的想法,我有我的经验。我就此打住不说了。 05/20 11:31
3F:→ StupidGaGa:而且,感觉你是在意气用事而已.... 05/20 11:36
4F:→ adrianc:我不是在嘴炮 所以我一不乱扣你帽子 二对我说的每句话负责 05/20 13:25
5F:→ adrianc:如果你觉得你(或是我)在嘴炮 那的确不用浪费这个时间 05/20 13:25
※ 编辑: adrianc (220.134.109.209), 05/20/2014 13:51:37
6F:推 GoalBased:感觉是教义派和情境派的认知出入 05/20 14:04
7F:推 KanoLoa:推 05/23 00:19
8F:推 Abbee:推,我几天前一句话就让版上热闹起来,真令人感动 06/07 09:11