理解继承

dhr*_*ird 2 inheritance design-patterns

我现在已经绞尽脑汁继承了一段时间,但我仍然没能完全绕过它.

例如,前几天我正在考虑将无懈可击的人类与可怜的人类联系起来.我们先来定义两个:

  • 绝对正确的人:一个永远不会犯错误的人.它的do_task()方法永远不会抛出异常
  • 可怜的人类:偶尔会犯错的人.它的do_task()方法可能偶尔抛出ErrorProcessingRequest异常

现在的问题是: 是一个绝对可靠的人一个容易犯错的人或者是容易犯错的人一个犯错的人?

我收到的非常好的答案是一个问题的形式(我喜欢这些,因为它给了我规则来回答我可能有的未来问题).

"你能否通过一个绝对正确的人类,预计会有一个易受伤害的人类,或者你能否通过一个容易犯错的人类?

很明显,你可以通过一个绝对正确的人类,在那里可以预见一个易犯错误的人,但不是相反.我猜这回答了我的问题.

然而,它仍然感觉很有趣,说"一个绝对正确的人是一个易犯错的人".当他们说出来时,还有其他人感到不安吗?说出继承树就好像用简单的英语读出命题演算中的陈述一样(if/then蕴涵连词并不意味着与英语口语相同).还有其他人有同感吗?

wom*_*omp 8

"看起来很明显,你可以通过一个绝对正确的人类,在那里人们会有一个错误的人,但不是相反"

这只是某种情况下的正确假设.通过这种方式分解:

  1. 如果你的系统逻辑需要通过一个犯错误的人,那么这是不正确的.

  2. 如果系统的逻辑不关心人类会做什么,那么这正确的.

换句话说,它完全取决于系统的要求来确定问题的答案"IS an infallible human A fallible human OR IS a fallible human AN infallible human?".

逻辑对象被拟人化的事实可能比任何东西都更令人困惑,因为看起来你的混淆源于一个哲学的立场而不是一个逻辑的立场.用"对象X"和"对象Y"取代"绝对可靠的人"和"易犯错的人",它可以为你清除思路.

  • +1.优点.解释对象关系的这类隐喻通常会失败; 它们通常很少或根本没有增加清晰度,并导致无问题成为问题. (4认同)
  • 谢尔·西尔弗斯坦有一首名为"The Zebra Question"的诗,有人问斑马是否有黑色,有白色条纹或白色有黑色条纹.斑马不直接回答......但是它可能会提出一些关于提问者的类似问题("你是善良的坏习惯,还是坏习惯?")因为斑马不会闭嘴家伙说:"我永远不会问斑马/关于条纹/再次." :) (2认同)

Dae*_*yth 5

在这种情况下,我会说一个父类是答案:FallibleHuman继承自Human,InFallibleHuman也是如此.