对高内聚,低耦合的理解

简介: 内聚:一个模块内各个元素彼此结合的紧密程度 耦合:一个软件结构内不同模块之间互连程度的度量     (一)这是判断设计好坏的标准,主要是面向OO的设计,主要是看类的内聚性是否高,偶合度是否低。

内聚:一个模块内各个元素彼此结合的紧密程度

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

 

  (一)这是判断设计好坏的标准,主要是面向OO的设计,主要是看类的内聚性是否高,偶合度是否低。
   

    高内聚:类与类之间的关系而定。高,意思是他们之间的关系要简单,明了,不要有很强的关系,不然,运行起来就会出问题。一个类的运行影响到其他的类。

    低耦合:类内部的方法而言。把程序的功能尽量分散,别在一个类里只写一个或很好的方法,因为那样会给你的调试等带来很多问题。出了错你都不知道在什么地方。

    (二)系统的各个模块尽可能具有较大的独立性,换句话说,希望这样设计软件结构,使得每个模块完成一个相对独立的特定子功能,并且和其他模块之间的关系很简单,以便能方便地把不同场合下写成的程序模块组合成软件系统。衡量模块独立性的定性标准是内聚(一个模块内各个元素彼此结合的紧密程度)和耦合(一个软件结构内不同模块之间互连程度的度量)。高内聚、低耦合的模块是设计时追求的目标。

(三)“模块独立性指每个模块只完成系统要求的独立子功能,并且与其他模块的联系最少且接口简单,两个定性的度量标准――耦合性和内聚性。
    

耦合性也称块间联系。指软件系统结构中各模块间相互联系紧密程度的一种度量。模块之间联系越紧密,其耦合性就越强,模块的独立性则越差。模块间耦合高低取决于模块间接口的复杂性、调用的方式及传递的信息。
    
无直接耦合;数据耦合;标记耦合;控制耦合;公共耦合;
    
内容耦合(低――高); 1无直接耦合;2数据耦合指两个模块之间有调用关系,传递的是简单的数据值,相当于高级语言的值传递;3标记耦合指两个模块之间传递的是数据结构,如高级语言中的数组名、记录名、文件名等这些名字即标记,其实传递的是这个数据结构的地址; 4控制耦合指一个模块调用另一个模块时,传递的是控制变量(如开关、标志等),被调模块通过该控制变量的值有选择地执行块内某一功能。; 5公共耦合指通过一个公共数据环境相互作用的那些模块间的耦合。公共耦合的复杂程序随耦合模块的个数增加而增加。6内容耦合:这是最高程度的耦合,也是最差的耦合。

当一个模块直接使用另一个模块的内部数据,或通过非正常入口而转入另一个模块内部。内聚性又称块内联系。指模块的功能强度的度量,即一个模块内部各个元素彼此结合的紧密程度的度量。若一个模块内各元素(语名之间、程序段之间)联系的越紧密,则它的内聚性就越高。
    
偶然内聚;逻辑内聚;时间内聚;通信内聚;顺序内聚;
    
功能内聚(低――高)1偶然内聚指一个模块内的各处理元素之间没有任何联系。 2逻辑内聚指模块内执行几个逻辑上相似的功能,通过参数确定该模块完成哪一个功能。3时间内聚:把需要同时执行的动作组合在一起形成的模块为时间内聚模块。4通信内聚指模块内所有处理元素都在同一个数据结构上操作(有时称之为信息内聚),或者指各处理使用相同的输入数据或者产生相同的输出数据。5顺序内聚指一个模块中各个处理元素都密切相关于同一功能且必须顺序执行,前一功能元素输出就是下一功能元素的输入。6功能内聚:这是最强的内聚,指模块内所有元素共同完成一个功能,缺一不可。与其他模块的耦合是最弱的。耦合性与内聚性是模块独立性的两个定性标准,将软件系统划分模块时,尽量做到高内聚低耦合,提高模块的独立性,为设计高质量的软件结构奠定基础。

有个例子很容易明白:一个程序有50个函数,这个程序执行得非常好;然而一旦你修改其中一个函数,其他49个函数都需要做修改,这就是高耦合的后果。
一旦你理解了它,你编写概要设计的时候设计类或者模块自然会考虑到“高内聚,低耦合”。


目录
相关文章
|
Linux
Linux下安装中文输入法总结
Linux下安装中文输入法总结
4893 0
关于QtCreator使用fcitx无法输入中文的解决方法(从根本解决问题)
关于QtCreator使用fcitx无法输入中文的解决方法(从根本解决问题)
|
数据挖掘 Go 数据库
Go语言map这么查询 才是高手风范
Go语言map这么查询 才是高手风范
474 0
|
存储 编译器 内存技术
【计算机组成原理】中央处理器
【计算机组成原理】中央处理器
621 1
【计算机组成原理】中央处理器
|
jenkins Java 持续交付
新的centos7.9安装jenkins—(一)
新的centos7.9安装jenkins—(一)
390 0
|
机器学习/深度学习 数据采集 算法
【Python 机器学习专栏】机器学习在医疗诊断中的前沿应用
【4月更文挑战第30天】本文探讨了机器学习在医疗诊断中的应用,强调其在处理复杂疾病和大量数据时的重要性。神经网络、决策树和支持向量机等方法用于医学影像诊断、疾病预测和基因数据分析。Python作为常用工具,简化了模型构建和数据分析。然而,数据质量、模型解释性和伦理法律问题构成挑战,需通过数据验证、可解释性研究及建立规范来应对。未来,机器学习将更深入地影响医疗诊断,带来智能和精准的诊断工具,同时也需跨学科合作推动其健康发展。
692 0
|
并行计算 Java Spring
|
Kubernetes 容器 API
在 kubectl 中使用 Service Account Token
在运行基于 Kubernetes 的 CI/CD 过程中,经常有需求在容器中对 Kubernetes 的资源进行操作,其中隐藏的安全问题,目前推荐的最佳实践也就是使用 Service Account 了。
1789 0