7.5 GRASP原则五:高内聚 High Cohesion
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的更多相关文章
- 7.7 GRASP原则七: 纯虚构 Pure Fabrication
GRASP原则七: 纯虚构 Pure Fabrication 如果依据信息专家原则获得的解决方案不合适,既不想违反低耦合.高内聚,也不想违 反其他的原则, 该如何把职责分配给对象? 左右为难… ...
- 面系那个对象开发原则.高内聚.低耦合+Python安装详细教程+print输出带颜色的方法
面系那个对象开发原则.高内聚.低耦合 软件设计中通常用耦合度和内聚度作为衡量模块独立程度的标准.划分摸块的一个准则就是高内聚低耦合. 这是软件工程中的概念,是判断设计好坏的标准,主要是面向OO的设计, ...
- 运用GRASP原则来做uml交互类图-------pos机实例
重要的几个GRASP原则:1.控制器模式 2.创建者模式 (原则)3.信息专家模式(原则) 4. 高内聚 低耦合 这里所说的模式并不是java中针对具体的事件的设计模式 主成功场景的几个操作: ...
- 7.4 GRASP原则四:控制器 Controller
4.GRASP原则四:控制器 Controller What first object beyond the UI layer receives and co-ordinates (control ...
- 7.3 GRASP原则三: 低耦合 Low Coupling
3.GRASP原则三: 低耦合 Low Coupling How to support low dependency, low change impact and increased reuse? ...
- 7.2 GRASP原则二:信息专家 Information Expert
2.GRASP原则二:信息专家 Information Expert What is a general principle of assigning responsibility to obje ...
- 7.8 GRASP原则八: 间接 Indirection
GRASP原则八: 间接 Indirection 若两个对象直接连接,导致耦合太紧,如何解决?3.1 GRASP rule8: Indirection 间接 Name: Indirection ...
- 如何理解低耦合AND高内聚?[转]
1.高内聚 首先我们来看看内聚的含义:软件含义上的内聚其实是从化学中的分子的内聚演变过来的,化学中的分子间的作用力,作用力强则表现为内聚程度高.在软件中内聚程度的高低,标识着软件设计的好坏. 我们在进 ...
- Office之什么是高内聚低耦合
---恢复内容开始--- 高内聚低耦合,是软件工程中的概念,是判断设计好坏的标准,主要是面向对象的设计,主要是看类的内聚性是否高,耦合度是否低. 粗劣的说就指的是:单独模块间有着强大的凝聚力,不同的模 ...
随机推荐
- iOS 微信打开第三方应用(Universal Links 和 URL Schemes)
一.前言 项目中时常有这种需求, 是通过链接跳转到应用内部,现在iOS主流的方案有两个 Schema: 常用在于一个应用跳转到另一个应用内部,属于应用间的跳转.当然ios9以下,网页可以通过schem ...
- python->读写excel
from openpyxl import load_workbook#将一个excel文档中的数据存放内存中,即变量wb保存了该excel的所有信息wb = load_workbook(r" ...
- 为什么分布式数据库中不使用uuid作为主键?
分布式数据库当然也有主键的需求,但是为什么不直接使用uuid作为主键呢?作为曾经被这个问题困惑过的人,试着回答一下 1. UUID生成速率低下 Java的UUID依赖于SecureRandom.nex ...
- Bootstrap modal模态框关闭时,combobox input下拉框仍然保留在页面上
问题描述: 当点击模态框的关闭按钮时,下拉框中的内容没有消失,而是移动到了页面左上角 分析:这个问题的定位在于是用的哪种模态框,bootstrap和easyui都可以实现模态框,但是两个方法实现的模态 ...
- Dubbo分布式服务框架
Dubbo (开源分布式服务框架) 编辑 本词条缺少信息栏,补充相关内容使词条更完整,还能快速升级,赶紧来编辑吧! Dubbo是 [1] 阿里巴巴公司开源的一个高性能优秀的服务框架,使得应用可通过高 ...
- 虚拟机与Docker有何不同
http://www.techug.com/post/comparing-virtual-machines-vs-docker-containers.html 译者按: 各种虚拟机技术开启了云计算时代 ...
- TP无限回复
引入文件和css样式 <script src="__PUBLIC__/bootstrap/js/jquery-1.11.2.min.js"></script> ...
- docker 启动失败
今天本来想抽空弄一下openshift,新装了个centos结果docker起不来. 报错内容: [root@master docker]# systemctl status docker.servi ...
- MySql 中的<=>操作符
今天在学习数据库的索引优化时,关于memory存储引擎的的hash索引时,看到了操作符<=> ,这个操作符还是第一次见到,于是上网查了一下.我想大家应该知道 = != <> ...
- Always clear download 下载 谷歌浏览器插件
由于该博文不支持上传压缩包,因此,如有需要always clear download插件的可点击此链接在百度网盘上下载https://pan.baidu.com/s/13wWchis3iKqXkIA5 ...