鸭子类型在耦合方面有什么问题

问题描述

我阅读了以下关于鸭子类型缺点的描述:

鸭子打字有缺点。如何使用方法的最宽松规范最终会描述方法的整个实现,特别是它向什么对象发送什么消息。如果我们的规范揭示了所有这些,那么几乎没有实现的变体是等效的。例如,如果我们知道 i一个数字(并忽略客户端重新定义数字类中的方法),那么我们可以替换 i+ii*22*i。但是如果我们只是假设 i 可以接收 + 消息并将其自身作为参数,那么我们不能进行这些替换,因为 i 可能没有 * 方法(破坏 { {1}}) 或者它可能不是 2 期望作为 * 参数的那种对象(破坏 i*2)。

(引用:Programming Languages,Part C

我认为这个描述是关于 coupling: 鸭子类型不能约束参数类型,这使得调用者依赖于实现并且耦合度变得非常高(内容耦合)。 另一方面,限制参数类型的语言(如静态类型检查语言)对调用者隐藏了实现,从而保持低耦合度。

这是我如何理解鸭子类型在耦合方面的缺点,但我认为我上面的想法与其他人(例如同事)交谈有点多余和不完整。 有人能解释得更清楚吗?另外,我想知道是否有任何参考书讨论过这个问题,以澄清我的想法。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...