问题描述
我阅读了以下关于鸭子类型缺点的描述:
鸭子打字有缺点。如何使用方法的最宽松规范最终会描述方法的整个实现,特别是它向什么对象发送什么消息。如果我们的规范揭示了所有这些,那么几乎没有实现的变体是等效的。例如,如果我们知道 i
是一个数字(并忽略客户端重新定义数字类中的方法),那么我们可以替换 i+i
用 i*2
或 2*i
。但是如果我们只是假设 i
可以接收 +
消息并将其自身作为参数,那么我们不能进行这些替换,因为 i
可能没有 *
方法(破坏 { {1}}) 或者它可能不是 2 期望作为 * 参数的那种对象(破坏 i*2
)。
(引用:Programming Languages,Part C)
我认为这个描述是关于 coupling: 鸭子类型不能约束参数类型,这使得调用者依赖于实现并且耦合度变得非常高(内容耦合)。 另一方面,限制参数类型的语言(如静态类型检查语言)对调用者隐藏了实现,从而保持低耦合度。
这是我如何理解鸭子类型在耦合方面的缺点,但我认为我上面的想法与其他人(例如同事)交谈有点多余和不完整。 有人能解释得更清楚吗?另外,我想知道是否有任何参考书讨论过这个问题,以澄清我的想法。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)