高内聚,低耦合

概念

耦合性: 也称块间联系。指的软件系统结构中各模块间相互凉席紧密程度的一种度量。模块之间联系越紧密,其耦合性就越强,模块的独立性则越差。模块间耦合高低取决于模块间接口的复杂性,调用的方式及传递消息。

内聚性: 又称为快内联系。值模块的功能强度的度量,即一个模块内不各个元素彼此结合的紧密程度的度量。若一个模块内各元素(语名之间,程序段之间)联系的越紧密,则它的内举行就越高。

所谓的高内聚是指一个软件模块是由相关性很强的代码组成,只负责意一项任务,也就是常说的单一责任原则。

耦合: 一个软件结构内不同模块之间互连程度的度量。

对于低耦合,粗浅的理解是:一个完整的系统,模块与模块之间。尽可能的独立存在。也就是说每个模块,进可能的独立完成某个特定的子功能。模块与模块之间的接口,尽量的少而简单。如果某两个模块之间的关系比较复杂的话,最好首先考虑进一步的模块划分。这样有利于修改和组合。


软件架构设计的目的就是保持软件内在联系的前提下,分解软件系统,降低软件系统开发的复杂性,而分解软件系统的基本方法无外乎分层和分割。在这方面有各种各样的解法,比如:关注点分离,面向方面,面向对象,面向接口,面向服务,依赖注入等等各种各样的设计原则。

耦合

耦合可以分为以下几种,它们之间的耦合度由高到低排列如下:

(1)内容耦合
一个模块直接访问另一个模块的内容,则成为这两个模块为内容耦合。

若在程序中出现下列情况之一,则说明两个模块之间发生了内容耦合。

  • 一个模块直接访问另一个模块的内部数据
  • 一个模块不通过正常入口而直接转入到另一个模块的内部。
  • 两个模块有一部分代码重叠(该部分代码具有一定的独立功能).
  • 一个模块有多个入口.

内容耦合可能在汇编语言中出现.大部分高级语言都被设计成不允许出现内容耦合.这种耦合的耦合性最强,模块独立性最弱.

(2)公共耦合

一组模块都访问同一个全局数据结构,则称之为公共耦合.公共数据环境可以是全局数据结构,共享的通信区,内存的公共覆盖区等.如果模块只是向公共数据环境输入数据,或是只从公共数据环境取出数据,这属于比较松散的公共耦合:如果模块即向公共数据环境取出数据,这属于较紧密的公共耦合.

公共耦合会引起一下问题:

  • 1,无法控制各个模块对公共数据的存取,严重影响了软件模块的可靠性和适应性.
  • 2 ,是软件的可维护性变差.若一个叫模块修改了公共数据,则会影响相关模块.
  • 3, 降低了软件的可理解性.不容易清楚知道哪些根据被哪些模块共享所共享,拍错困难.
    一般地,仅当模块间的共享数据很多且通过参数传递不方便时,才使用公共耦合

(3) 外部耦合

一组模块都访问同一全局简单变量,而且不通过参数传递该全局变量的信息,则称之为外部耦合.

(4)控制耦合

模块之间传递的不是数据信息,而是控制信息例如标志,开关量等,一个模块控制了另一个模块的功能.

(5)标记耦合:

调用模块的被调用模块之间只传递简单地数据参数.相当于高级语言中的值传递.

(6)数据耦合:

调用模块和被调用模块之间只传递简单地数据项参数.相当于高级语言中的值传递.

(7)非直接耦合

两个模块之间的联系.完全通过主模块的控制和调用来实现的.耦合度最弱,模块独立性最强.

总结
耦合是影响软件复杂程度和设计质量的一个重要因素,为提高模块的独立性,应建立模块间尽可能松散的系统,在设计上我们应采用以下原则:若模块间必须存在耦合,应尽量使用数据耦合,少用控制耦合,慎用或有控制的使用公共耦合,并限制耦合的范围,尽量避免内容耦合.

内聚

内聚有如下的种类,它们之间的内聚度由弱到强排列如下:

  • 1:偶然内聚: 一个模块内的各处理元素之间没有任何联系,只是偶然地被操刀一起.这种模块也称为巧合内聚,内聚程度最低.
  • 2:逻辑内聚: 这种模块把几种相关的功能组合在一起,每次被调用时,由传送给模块参数来确定该模块应完成哪一种功能.
  • 3:时间内聚: 把需哟啊同时执行的动作组合在一起形成的模块称为时间内聚模块.
  • 4:过程内聚: 构建或者操作的组合方式是,允许在调用前面的构建或操作之后,马上调用后面的构建或操作,即使两者之间没有数据进行传递.简单地说就是如果一个模块内的处理元素使相关的.而其必须以特定次序执行则称为过程内聚.
  • 5:通信内聚: 指模块内所有处理元素都在同一个数据结构上操作或所有处理功能都通过公用数据儿发生关联(有时称之为信息内聚).即指模块内各个组成部分都使用相同的数据或产生相同的数据结构.
  • 6:顺序内聚: 一个模块中各个处理元素和同意功能密切相关,而且这些处理必须执行,通常前一个处理元素的输出是后一个处理元素的输入. 顺序内聚的内聚度比较高,但缺点是不如功能内聚易于维护.
  • 7:功能内聚: 模块内所有元素的各个组成部分全都为完成同一个功能而存在,共同完成一个单一的功能,模块已不可再分.即模块仅包括为完成某个功能所必须的所有成分.这些成分紧密联系,缺一不可.
    功能内聚是最前的内聚,其优点是它的功能明确.判断一个模块是否功能内聚,一般从模块名称就能看出.如果模块名称只有一个动词和一个特定的目标(单数名词),一般来说就是功能内聚.功能内聚一般出现在软件结构图的较低层次上.
    功能内聚模块的一个重要特点是:它是一个"暗盒",对于该模块的调用者来说,只需要知道这个模块能作什么,而不需要知道这个模块式如果做的.

总结
**在模块划分时,要遵循"一个模块,一个功能"的原则,尽可能使模块达到功能内聚.

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,542评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,596评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,021评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,682评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,792评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,985评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,107评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,845评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,299评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,612评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,747评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,441评论 4 333
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,072评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,828评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,069评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,545评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,658评论 2 350

推荐阅读更多精彩内容

  • 前言 高内聚低耦合,是软件工程中的概念,是判断设计好坏的标准,主要是面向对象的设计,看类的内聚性是否高,耦合度是否...
    王永迪阅读 3,144评论 1 13
  • 原文地址 前言 高内聚低耦合,是软件工程中的概念,是判断设计好坏的标准,主要是面向对象的设计,看类的内聚性是否高,...
    精神病患者link常阅读 1,130评论 1 0
  • (文章来自于博客园) 起因:模块独立性指每个模块只完成系统要求的独立子功能,并且与其他模块的联系最少且接口简单,两...
    陌上小孩阅读 701评论 1 7
  • 起因:模块独立性指每个模块只完成系统要求的独立子功能,并且与其他模块的联系最少且接口简单,两个定性的度量标准――耦...
    陳云峰阅读 383评论 0 0
  • 文章转载自:http://www.cnblogs.com/robnetcn/archive/2012/04/15/...
    龙城九哥阅读 1,131评论 0 2