设计松散耦合模块 -面向对象系统






2.08/5 (8投票s)
本文解释了耦合性,对耦合性进行了分类,并提供了一种简化每种耦合性类型的方法。
引言
本文解释了类之间的耦合。 它还解释了高耦合的后果。 然后,本文对耦合进行分类,并解释每种耦合类型以及消除耦合的方法。
耦合
耦合是类之间依赖关系的因素。 耦合的因素在高低之间变化。 具有高耦合的系统不稳定,需要更多的工作才能修改。 在具有高耦合因子的系统中,对一个类的修改会强制其他类进行一系列更改,从而增加了修改所需的工作量。 大量的工作需要更高的成本。 高耦合还会降低类的可重用性,因为必须包含依赖类。 具有高耦合的类难以单独理解。 具有低耦合的系统是稳定的,当在一个类中进行更改时,不需要更改其他类的实现。
耦合分为以下几类。
内容耦合
当一个类依赖于另一个类的内部工作时,即一个类正在使用另一个类的变量时,两个类之间存在内容耦合。 当修改持有内容的类以包含内容的另一种格式时,应该修改使用内容的另一个类。 内容耦合的耦合因子很高。 这种形式的耦合是不希望的,因为任何类都可以修改另一个类的内部数据。 **为了减少使用,请对类中的内容使用 *private* 访问控制,并提供诸如 getVal 和 setVal 之类的访问方法。**
公共耦合
当系统中的类共享全局数据时,存在公共耦合。 更改共享资源的格式需要在使用全局数据的所有类中进行修改。 **为了减少公共耦合,请创建一个类来包含全局数据,并在该类中添加公共方法以获取或修改全局数据。 应该在该类中使用临界区。**
外部耦合
外部耦合是类对第三方类(如 MFC、QT 等)的依赖,或共享外部强加的数据格式、通信协议或设备接口。 **可以通过使用外观模式来减少外部耦合。**
控制耦合
控制耦合是指一个类通过传递要执行的操作的信息(例如,通过传递标志或命令,从而控制执行顺序)来控制另一个类的逻辑。 **为了减少使用,请使用多态操作或使用将命令映射到方法的查找表。**
印记耦合
印记耦合是一种耦合形式,其中两个类修改或访问同一对象中的数据。 **为了减少,请添加访问或修改对象中所有数据的方法。**
数据耦合
数据耦合是一种耦合形式,其中一个类将简单数据作为参数传递给另一个类。 耦合是由于对数据的解释,即作为参数传递给另一个类的成员函数的数据的含义。 如果作为参数传递的数据的含义发生更改,则另一个类必须修改以适应更改。 **为了减少,开发人员不应传递不必要的参数,而应传递少量参数,每个参数包含更多抽象信息。**
消息耦合
消息耦合是可能的最低耦合。 **类不相互依赖,而是使用公共接口来交换无参数消息(或事件)。**
例程调用耦合
例程调用耦合是一种耦合形式,其中一个例程调用另一个例程。 **为了减少,必须减少特定类调用的例程总数。 如果存在两个或多个例程的序列来计算某些内容,并且该序列在多个地方使用,则为了减少例程调用耦合,必须编写一个封装该序列的单个例程。**
包含耦合
包含耦合是一种耦合形式,其中一个组件包含另一个组件的源代码。 如果包含的组件更改了包含者所依赖的内容,或者添加了与包含者中的某些内容发生冲突的内容,则包含者必须更改。 **为了减少,请勿包含不需要的组件。**
历史
- 版本 1:没有示例的初始文章