由班车线路调整想到的:高内聚低耦合

       前不久在和同事讨论公司的班车调整问题。之前公司班车有4趟线,现在改成一趟线,这当然是出于降低成本考虑。同事说线路减少了,但人数一样,估计也省不了多少钱。暂且不去考虑具体省多少钱,不妨用软件设计中的要求来解释一下。四改一,很明显提高了班车这一对象的内聚性,一个班车有机会被更多的员工对象调用,这提高了班车对象 的服务时间,员工对象的上下班方法调用班车对象时不用考虑线路一二三四,降低了判断班车线路的复杂程度,减少了耦合度。现在有车就上,不用担心做错车了。
模块的独立是指:模块完成独立的功能并且与其他模块的接口简单,符合信息隐蔽和信息局部化的原则,模块间关联和依赖程度尽可能小。模块独立性是模块化,信息隐藏和局部化的直接结果。
       模块的独立性是很重要的:第一功能被划分,接口被简化,具有有效模块化的软件更容易被开发。这在多个小组共同开发一个软件是更为重要。第二,由于因设计和编码修改引起的副作用收到的局限错误传播被减小,并且模块复用成为可能。独立的模块更易于维护和测试。
模块的独立可以由两项的指标来衡量:内聚度和耦合度。
内聚(cohesion)是一个模块内部各个元素彼此结合的紧密程度的度量。一个内聚程度高的模块,在理想情况下应当只做一件事,一般模块的内聚性分为7种类型。

高 <-----------------------------------------------内聚性----------------------------------------低
功能内聚 顺序内聚 通信内聚 过程内聚 时间内聚 逻辑内聚 巧合内聚
强(功能单一)<---------------------模块独立性---------------------------弱(功能分散)

巧合内聚:将几个模块中没有明显表现出独立功能的相同程序代码段独立出来建立的模块称为巧合内聚模块。
逻辑内聚:逻辑内聚是指完成一组逻辑相关任务的模块,调用该模块时,由传送给模块的控制型参数来确定该模块应执行那一种功能。
时间内聚:是指一个模块中的所有任务必须在同一时间段内执行。如初始化模块和终止模块。
过程内聚:一个模块完成多个任务,这些任务必须按照指定的过程执行
通信内聚:一个模块内所有处理元素都集中在某个数据结构的一款区域中
顺序内聚:一个模块完成多个功能,这些功能又必须顺序执行
功能内聚:一个模块中各个部分都是为完成一项具体功能而协同工作,紧密联系,不可分割。

班车线路四改一,一下子将逻辑内聚改成了功能内聚。大笑

耦合(coupling)是模块之间的相对独立性(互相连接的紧密程度)的度量。耦合取决于各个模块之间接口的浮渣程度,调用模块的方式以及通过接口的信息类型。
一般模块之间可能的耦合方式分为7中:

低 ---------------------------------------耦合性---------------------------------------------->高
非直接耦合 数据耦合 标记耦合 控制耦合 外部耦合 公共耦合 内容耦合
强<-----------------------------------模块独立性---------------------------------------------弱
内容耦合:如果一个模块直接访问另一个模块的内部数据;或者一个模块不用过正常入口转到另一个模块的内部;或者两个模块有一部分程序代码重叠;或者一个模块有多个入口,则两个模块之间就发生了内容耦合。
公共耦合:弱一组模块都访问同一个公共数据环境,则他们之间的耦合就村委公共耦合。公共的数据环境可以是全局数据结果,共享的通信区,内存的公共覆盖区等。
外部耦合:模块之间通过软件之外的环境联结(如I/O将模块耦合到特定的设备、格式、通信协议上)时,称为外部耦合
控制耦合:如果一个模块传送给另一个模块的参数中包含了控制信息,该控制信息用于控制接收模块中的执行逻辑,则称为控制耦合。
标记耦合:两个模块之间通过参数表传递一个数据结构的一部分(如某一数据结构的子结构),就是标记耦合。
数据耦合:两个模块之间仅通过参数表传递简单数据,则称为数据耦合
非直接耦合:两个模块之间没有直接关系,即他们中的任何一个都不依赖于另一个而能独立工作,这种耦合称为非直接耦合。

       事实上,两个模块之间的耦合不只是一种类型,而是多种类型的混合。这就要求设计人员进行分析、比较、逐步加以改进,以提高模块的独立性。
模块之间的连接越紧密,联系越多,,耦合性就越高,而期模块独立性就越弱。 一个模块内部之间的联系越紧密,则该模块的内聚性就越高。
内聚和耦合都反映模块独立性的良好程度。但耦合是直接的主导因素,内聚则辅导耦合共同对模块独立性进行衡量。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值