任何人都可以解释什么是内容耦合,以及它是如何在以下代码中发生的:
public class Line
{
private Point start, end;
...
public Point getStart() { return start; }
public Point getEnd() { return end; }
}
public class Arch
{
private Line baseline;
...
void slant(int newY)
{
Point theEnd = baseline.getEnd();
theEnd.setLocation(theEnd.getX(),newY);
}
}
谢谢。
答案 0 :(得分:4)
当您将一个实例存储在另一个实例中时,会发生内容耦合,并且您可以通过非预期或透明的方式从外部实例修改内部实例。
在这里,您有一个存储在Line
实例中的Arch
实例;并且Line
存储两个Point
个。当您在slant()
上调用Arch
时,它会从Point
内部获取Line
之一并更改它。因此,基础Point
的状态发生了变化。
如果此Point
存储在应用程序的其他位置,则在发现Point
移动时可能会感到震惊。
答案 1 :(得分:0)
答案 2 :(得分:0)
通常,内容耦合是一种设计缺陷,其中一个模块依赖于另一个模块的实现细节,而不是完全依赖于它的公共接口。大多数情况下,这意味着一个模块读取/写入应该封装在另一个模块中的数据,绕过它的合同。
这是最紧密(最差)的耦合,因为这样的模块:
在您的示例Arch
中,内容与Line
相关联,因为Arch
修改了Line
(Point
个实例)的内部数据。
现在,如果Line
必须更改存储数据的方式,或者添加其他代码来处理点更新,那么Arch
类也必须更新,因为它绕过Line
的接口{1}}并使用Point
的界面代替。