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. python练习题-day11

    1.编写装饰器,为多个函数加上认证的功能(用户的账号密码来源于文件), 要求:登录成功一次,后续的函数都无需再输入用户名和密码 flag=False def wrapper(fun): def inn ...

  2. Web 开发技术文档大全

    https://developer.mozilla.org/zh-CN/docs/Web 基础 HTML CSS HTTP 脚本 JavaScript Web API 事件 Web Component ...

  3. nginx配置虚拟主机vhost的方法详解

    Nginx vhost配置,可实现基于ip.端口号.servername的虚拟主机,同时可避免直接修改主配置文件.在nginx下配置虚拟主机vhost非常方便.这篇文章主要介绍了nginx配置虚拟主机 ...

  4. Centos配置tomcat服务并且开机自启动

    把要配置成服务的tomcat文件夹中的catalina.sh脚本文件拷一份到/etc/init.d目录,并且改文件名称为tomcat6 cp /usr/web/tomcat/tomcat-/bin/c ...

  5. linux之tree命令

    linux下tree命令的用法解释 2018年03月22日 ⁄ RakSmart教程 ⁄ 共 583字 ⁄ 字号 小 中 大 ⁄ linux下tree命令的用法解释已关闭评论 tree命令,主要功能是 ...

  6. Kindle:自动追更之云上之旅

    2017年5月27: 原来的程序是批处理+Python脚本+Calibre2的方式,通过设定定时任务的方式,每天自动发动到自己的邮箱中.缺点是要一直开着电脑,又不敢放到服务器上~~ 鉴于最近公司查不关 ...

  7. ansible常用命令大全

    ansible 默认提供了很多模块来供我们使用.在 Linux 中,我们可以通过 ansible-doc -l 命令查看到当前 ansible 都支持哪些模块,通过 ansible-doc  -s   ...

  8. 关于java职业路径

    java,jvm原理,spring原理,mysql锁,事务,多线程,大并发,分布式架构,微服务,以及相关的项目管理

  9. 如何利用cURL和python对服务端和web端进行接口测试

    工具描述 cURL是利用URL语法在命令行方式下工作的文件传输工具,是开源爱好者编写维护的免费工具,支持包括Windows.Linux.Mac等数十个操作系统,最新版本为7.27.0,但是我推荐大家使 ...

  10. 浅析vue实例的生命周期(生命周期钩子)

    “每个 Vue 实例在被创建时都要经过一系列的初始化过程——例如,需要设置数据监听.编译模板.将实例挂载到 DOM 并在数据变化时更新 DOM 等” ,在不同的生命周期内会经历不同的钩子函数(生命周期 ...