标题: 关于藕合和内聚的问题 [打印本页]
作者:
陈珺 时间: 2005-2-17 15:50
偶然内聚
逻辑内聚
时间内聚
过程内聚
通讯内聚
顺序内聚
功能内聚
内容藕合
公共藕合
控制藕合
标记藕合
数据藕合
非直接藕合
看了书上的定义很是抽象,能不能给个具体的例子呢?谢谢
作者:
Maxwell 时间: 2005-2-17 21:18
先随便说几句,有空再补充
0. 耦合和内聚什么意思应该知道了吧,就不说了,反正要追求高内聚低耦合(而不是高内聚无耦合,耦合和内聚是一定存在的,有高低之分而已)
耦合内聚也跟功能的划分有关,如果一味追求高内聚可能造成功能过度细分,甚至一个加法运算都封装为一个模块。需要根据具体的问题以及经验来划分功能。没有必要每写一个模块都要去分析这个模块符合哪种程度的定义。而且有些时候低内聚高耦合也是必须的,比如初始化函数,无论怎么写总会在某个地方造成至少时间内聚。
1. 偶然内聚
此内聚只有偶然性缺乏必然性,比如将打开文件和计算两个数的和两个功能放在一个模块里,没有任何道理,只是作者想这么写就这么写了。
2. 逻辑内聚
模块内各功能在逻辑上存在一定关系,比如读文件读键盘读串口的功能放在一起。
3. 时间内聚
只是因为模块内各功能在时间上需要一起执行而放在一起,比如在初始化时读数据初始化打印机初始化数组各功能。
4. 过程内聚
基本同3,个人理解是3中各功能顺序无关而本层次内聚各功能需按一定顺序执行。
5. 通讯内聚
功能间需要通讯而聚合在一起,通常是两个功能需要操作同一个数据,比如读写缓冲区的两个功能放在一起。
6. 顺序内聚
基本同4,并且前一个的输出是后一个的输入。比如一个多遍压缩算法。
7. 功能内聚
模块中所有成分都是完成一个特定功能所必须的。
作者:
金圭子 时间: 2005-2-18 10:30
耦合和内聚是什么……………………………… -_\\
(纯粹灌水,无需回答,我自己想知道会去搜索引擎的)
作者:
秋风落叶 时间: 2005-2-18 11:01
呵呵。一般称为“经验内聚”(也是纯净水)
作者:
Maxwell 时间: 2005-2-18 13:19
原帖由秋风落叶于2005-02-18, 11:01:32发表
呵呵。一般称为“经验内聚”(也是纯净水)
经验内聚是什么? 真没听说过。
作者:
湘水楚云 时间: 2005-2-18 13:24
路过学习下~
顺便问问,这是哪门课的DD?~~
作者:
Maxwell 时间: 2005-2-18 13:33
版上难得来个MM啊,欢迎欢迎,常来看看啊。
这个是软件工程的东西吧,呵呵,记不清了。
作者:
秋风落叶 时间: 2005-2-18 17:18
原帖由Maxwell于2005-02-18, 13:19:32发表
经验内聚是什么? 真没听说过。
呵呵,是一句玩笑。
具体的设计,现在虽然理论很多,实践上多数是逆的,即把内聚归于上面的一类到几类。
从面向对象的角度来说,同一个对象,在时空上产生不同程序员的不同类,含有经验成分,玩笑的说法是经验内聚,我认为应该是“需求内聚”(这个词自编的,有点幼稚)。
Maxwell基础知识很扎实,我这方面也忘的差不多了,要去补课了。
作者:
Maxwell 时间: 2005-2-18 18:05
在设计时不能预先定义某一模块要做到某一级的耦合内聚,耦合内聚更像是作为评价和改进模块时的一种度量吧。
作者:
秋风落叶 时间: 2005-2-18 18:23
原帖由Maxwell于2005-02-18, 18:05:28发表
在设计时不能预先定义某一模块要做到某一级的耦合内聚,耦合内聚更像是作为评价和改进模块时的一种度量吧。
正解。
但实践上很少有人真的这么度量(也许有,我没遇到过,可能是孤陋寡闻吧),只是把结果归类,与其说有指导意义,不如说有理论价值。这也是所谓“经验”说法的缘由。
作者:
陈珺 时间: 2005-2-18 22:10
觉得这些定义比较抽象,需要一个具体的程序实例来理解.
作者:
Maxwell 时间: 2005-2-18 22:24
举例作用不大吧,如果你理解了,我描述的那些例子就够了,如果不理解,看到例子也无法应用到其他的模块中。
或者把我举的例子写成程序就可以了。
欢迎光临 轩辕春秋文化论坛 (http://xycq.org.cn/forum/) |
Powered by Discuz! 5.0.0 |