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. mybatis+oracle实现简单的模糊查询

    第一种 concat select * from cat_table where cat_name like concat(#{catName},'%') --单个百分号 select * from ...

  2. zabbix报错排错大全

    zabbix报错 https://www.cnblogs.com/losbyday/category/876878.html作者总结的很全棒 1.在启动zabbix-agent 时系统日志输出 PID ...

  3. SQL Server 2008中的CDC(Change Data Capture)功能使用及释疑

    SQL Server 2008中的CDC(Change Data Capture)功能使用及释疑 关键词:CDC   原文:http://www.cnblogs.com/chenxizhang/arc ...

  4. java框架之Struts2(2)-访问Servlet API及请求数据封装

    准备 为后面测试示例编写代码及配置如下: package com.zze.bean; import java.util.Date; public class User { private String ...

  5. bootstrap-wysiwyg这个坑

    但是用wysiwyg也是费了我不少的精力,特别是在图片上传上,下面做一些总结. 1.引入文件 wysiwyg号称只有5kb,但是实际上是将其他的依赖文件在cdn上用外链链接进来了,有以下几个文件: c ...

  6. vue安装,router-link的一些属性,用法,tag active-class,to,replace,exex等等

    第一步:$ npm install -g vue-cli 第二部:$ vue init webpack my-projectName 下面内容转载自:https://www.cnblogs.com/c ...

  7. 自定义Markdown例子

    主题1 正文字体 粗体 正文行内代码 斜体 int a = 2 /*代码块*/ /*杨韬的学习备忘录*/ private void CheckCloseFigure() { if (needClose ...

  8. Android开发中使用Intent跳转到系统应用中的拨号界面、联系人界面、短信界面

    现在开发中的功能需要直接跳转到拨号.联系人.短信界面等等,查找了很多资料,自己整理了一下. 首先,我们先看拨号界面,代码如下: Intent intent =new Intent(); intent. ...

  9. jquery easyui datagrid 将值作为img显示图片时报404 undefined

    原因:datagrid 在请求到数据先进行头部数据和样式的渲染,之后数据 obj = {}  value = undefined  index = 0 进行一次渲染, 在没有formater情况将数据 ...

  10. 一个关于cookie的坑

    #问题:今天上午踩了一个坑,首先,这个小案例的运行结果是应该是在前端页面出现一个当前时间的,当然如果是首次登陆的话应该是显示"第一次登陆",第二次则会显示上次的登录时间,但是却没有 ...