耦合:软件工程中对象之间的耦合度就是对象之间的依赖性。
总结:耦合==依赖
耦合有两个衡量标准
1.耦合的数量,即耦合的多少。
2.耦合的质量等级。
耦合可以分为以下几种,它们之间的耦合度由高到低排列如下:
(1) 内容耦合。当一个模块直接修改或操作另一个模块的数据时,或一个模块不通过正常入口而转入另一个模块时,这样的耦合被称为内容耦合。内容耦合是最高程度的耦合,应该避免使用之。
(2) 公共耦合。两个或两个以上的模块共同引用一个全局数据项,这种耦合被称为公共耦合。在具有大量公共耦合的结构中,确定究竟是哪个模块给全局变量赋了一个特定的值是十分困难的。
(3) 外部耦合 。一组模块都访问同一全局简单变量而不是同一全局数据结构,而且不是通过参数表传递该全局变量的信息,则称之为外部耦合。
(4) 控制耦合 。一个模块通过接口向另一个模块传递一个控制信号,接受信号的模块根据信号值而进行适当的动作,这种耦合被称为控制耦合。
(5) 标记耦合 。若一个模块A通过接口向两个模块B和C传递一个公共参数,那么称模块B和C之间存在一个标记耦合。
(6) 数据耦合。模块之间通过参数来传递数据,那么被称为数据耦合。数据耦合是最低的一种耦合形式,系统中一般都存在这种类型的耦合,因为为了完成一些有意义的功能,往往需要将某些模块的输出数据作为另一些模块的输入数据。
(7) 非直接耦合 。两个模块之间没有直接关系,它们之间的联系完全是通过主模块的控制和调用来实现的。
以上都是从数据关系的角度来将耦合的,那么从面向对象关系来讲耦合要如何区分呢?
五种关系:
一般化关系、关联关系、聚合关系、合成关系、依赖关系。
一般化关系(Generalization)
表示类与类之间的继承关系,接口与接口之间的继承关系,或类对接口的实现关系。
关联关系(Association)
是类与类之间的联接,它使一个类知道另一个类的属性和方法。可以单向和双向。
聚合关系(Aggregation)
关联关系的一种,是强关联关系。表示整体和个体之间的关系。
合成关系(Composition)
关联关系的一种。比聚合关系更强。要求整体对象负责部分对象的生命周期。
依赖关系(Dependency)
类与类之间的联接,单向。表示一个类依赖于另一个类的定义。
对5关系进行分类
继承关系:一般化关系
关联调用关系:合成关系>聚合关系>关联关系
定义关系:依赖关系
下面在对以上分类进行分级
一般化关系>关联调用关系>定义关系
最终形成的面向对象的关系。
一般化关系>合成关系>聚合关系>关联关系>定义关系
那么用耦合的角度对评价上面的关系是否可以呢?
可以的。如果耦合度的角度来讲,应该尽可能的用依赖,而少用继承。
这样的设计是降低耦合度的。
但是如果设计用到了继承和组合聚会的时候,说明他们的关系是很紧密的。
就应该有这样的关系。
那么设计可规划的空间就剩链接和耦合了。
对其实我们设计中尽量减少耦合和链接的数量就可以了,这一定是一个趋向好的方向的设计。
关于耦合+内聚+面向对象的五中关系在设计中的应用就说这些了。
都是个人偏向很明显的理解,有共鸣最好,希望别给别人造成错误的引导。
这里我提一句,对什么东西,一定要理解,那怕理解的错了,也比只记得概念强。
概念只能唬弄了考卷,对实实在在的设计没有多少用处。
对一些抽象的概念,一定要理解的很具体。