GRASP原则五:高内聚 High Cohesion
   How to keep objects focused, understandable and manageable, and as a side effect support Low Coupling?

    如何使对象功能专注、可理解、可管理,同时又支持 低耦合?
5.1 GRASP rule 5:High Cohesion

   Name:High Cohesion 高内聚

   Problem:

     How to keep objects focused, understandable and manageable, and as a side effect support Low Coupling?

   Solution:

     Assign responsibility so cohesion remains high 分配职责时保证高内聚

   Dosage(用法):

     Used as an evaluation tool 用作评价工具

     更多的是一种理念,没有具体的可操作原则
5.2 Cohesion Defined

   衡量概念之间相关度的两个指标

     Cohesion,内聚:模块内元素之间联系紧密的程度,比如,一个类内部的操作之间

     Coupling,耦合:两个模块之间联系的强度

   内聚的“最佳实践”

     一个对象完成的功能不要太多 small number of responsibilities

     这些功能都是同一类别的 highly related responsibilities

     例如,教授:主要任务就是教学;研究员:主要任务是科研

   评判练习,哪个更内聚

     一个类有2000行源代码100个方法

     另一个类有200行源代码10个方法

     谁能保证任务重的对象在完成功能时不会引用到类外部的资源(增加了耦合度)

   比喻: “不是一家人,不进一家门”

     “人” compared to “职责、操作”

     “门” compared to “模块、类”
5.4 Discuss: Cohesion

   类低内聚的具有症状 A class with low cohesion

     做了许多相互无关的工作 does many unrelated things

     做了太多工作 does too much work

   类低内聚的的原因 Low cohesion classes often represent

     大粒度的抽象 a very large grain of abstraction

     做了太多本应该委托给其他类去做的工作 have taken on responsibilities that should have been delegated to other objects

   类低内聚的问题

     难以理解 Hard to understand

     难以重用 Hard to reuse

     难以维护 Hard to maintain

     没有稳定的时刻,总是在修改 (通常都会高耦合)
小结

   高内聚的类

     有较少数量的操作,操作的性质基本一致,不会做太多的事情

     如果同类别的工作太多,则会定义新的类分担任务,相互间合作

   高内聚的类有许多有点

     易于维护

     易于理解

     易于重用

   高内聚也是一种评估性原则,用于评估所有的设计决策是否合适

    It is an evaluative principle that a designer applies while evaluating all design decisions

7.5 GRASP原则五:高内聚 High Cohesion的更多相关文章

  1. 7.7 GRASP原则七: 纯虚构 Pure Fabrication

    GRASP原则七: 纯虚构 Pure Fabrication  如果依据信息专家原则获得的解决方案不合适,既不想违反低耦合.高内聚,也不想违 反其他的原则, 该如何把职责分配给对象?  左右为难… ...

  2. 面系那个对象开发原则.高内聚.低耦合+Python安装详细教程+print输出带颜色的方法

    面系那个对象开发原则.高内聚.低耦合 软件设计中通常用耦合度和内聚度作为衡量模块独立程度的标准.划分摸块的一个准则就是高内聚低耦合. 这是软件工程中的概念,是判断设计好坏的标准,主要是面向OO的设计, ...

  3. 运用GRASP原则来做uml交互类图-------pos机实例

    重要的几个GRASP原则:1.控制器模式   2.创建者模式 (原则)3.信息专家模式(原则) 4. 高内聚 低耦合   这里所说的模式并不是java中针对具体的事件的设计模式 主成功场景的几个操作: ...

  4. 7.4 GRASP原则四:控制器 Controller

    4.GRASP原则四:控制器 Controller  What first object beyond the UI layer receives and co-ordinates (control ...

  5. 7.3 GRASP原则三: 低耦合 Low Coupling

    3.GRASP原则三: 低耦合 Low Coupling  How to support low dependency, low change impact and increased reuse? ...

  6. 7.2 GRASP原则二:信息专家 Information Expert

    2.GRASP原则二:信息专家 Information Expert  What is a general principle of assigning responsibility to obje ...

  7. 7.8 GRASP原则八: 间接 Indirection

    GRASP原则八: 间接 Indirection  若两个对象直接连接,导致耦合太紧,如何解决?3.1 GRASP rule8: Indirection 间接  Name: Indirection ...

  8. 如何理解低耦合AND高内聚?[转]

    1.高内聚 首先我们来看看内聚的含义:软件含义上的内聚其实是从化学中的分子的内聚演变过来的,化学中的分子间的作用力,作用力强则表现为内聚程度高.在软件中内聚程度的高低,标识着软件设计的好坏. 我们在进 ...

  9. Office之什么是高内聚低耦合

    ---恢复内容开始--- 高内聚低耦合,是软件工程中的概念,是判断设计好坏的标准,主要是面向对象的设计,主要是看类的内聚性是否高,耦合度是否低. 粗劣的说就指的是:单独模块间有着强大的凝聚力,不同的模 ...

随机推荐

  1. iOS 微信打开第三方应用(Universal Links 和 URL Schemes)

    一.前言 项目中时常有这种需求, 是通过链接跳转到应用内部,现在iOS主流的方案有两个 Schema: 常用在于一个应用跳转到另一个应用内部,属于应用间的跳转.当然ios9以下,网页可以通过schem ...

  2. python->读写excel

    from openpyxl import load_workbook#将一个excel文档中的数据存放内存中,即变量wb保存了该excel的所有信息wb = load_workbook(r" ...

  3. 为什么分布式数据库中不使用uuid作为主键?

    分布式数据库当然也有主键的需求,但是为什么不直接使用uuid作为主键呢?作为曾经被这个问题困惑过的人,试着回答一下 1. UUID生成速率低下 Java的UUID依赖于SecureRandom.nex ...

  4. Bootstrap modal模态框关闭时,combobox input下拉框仍然保留在页面上

    问题描述: 当点击模态框的关闭按钮时,下拉框中的内容没有消失,而是移动到了页面左上角 分析:这个问题的定位在于是用的哪种模态框,bootstrap和easyui都可以实现模态框,但是两个方法实现的模态 ...

  5. Dubbo分布式服务框架

    Dubbo (开源分布式服务框架) 编辑 本词条缺少信息栏,补充相关内容使词条更完整,还能快速升级,赶紧来编辑吧! Dubbo是 [1]  阿里巴巴公司开源的一个高性能优秀的服务框架,使得应用可通过高 ...

  6. 虚拟机与Docker有何不同

    http://www.techug.com/post/comparing-virtual-machines-vs-docker-containers.html 译者按: 各种虚拟机技术开启了云计算时代 ...

  7. TP无限回复

    引入文件和css样式 <script src="__PUBLIC__/bootstrap/js/jquery-1.11.2.min.js"></script> ...

  8. docker 启动失败

    今天本来想抽空弄一下openshift,新装了个centos结果docker起不来. 报错内容: [root@master docker]# systemctl status docker.servi ...

  9. MySql 中的<=>操作符

    今天在学习数据库的索引优化时,关于memory存储引擎的的hash索引时,看到了操作符<=> ,这个操作符还是第一次见到,于是上网查了一下.我想大家应该知道 =  !=   <> ...

  10. Always clear download 下载 谷歌浏览器插件

    由于该博文不支持上传压缩包,因此,如有需要always clear download插件的可点击此链接在百度网盘上下载https://pan.baidu.com/s/13wWchis3iKqXkIA5 ...