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之什么是高内聚低耦合
---恢复内容开始--- 高内聚低耦合,是软件工程中的概念,是判断设计好坏的标准,主要是面向对象的设计,主要是看类的内聚性是否高,耦合度是否低. 粗劣的说就指的是:单独模块间有着强大的凝聚力,不同的模 ...
随机推荐
- 16.4-uC/OS-III同步 (任务信号量)
信号量和消息队列均是单独的内核对象,是独立于任务存在的. 任务信号量 仅发布给一个特定任务 .任务消息队列 可以发布给多个任务. 任务信号量伴随任务存在,只要创建了任务,其任务信号量就是该任务的一个数 ...
- echart 判断数据是否为空
formatter 判断数据是否为空
- MongoDB "$" 字符 下标位置
我们可以修改列表里面元素的名字 例如: 修改age=34的数据,hobby里面的"足球"改为"网球" }) { "_id" : Object ...
- CoreData 执行executefetchrequest卡死解决办法
在大量使用GCD和block以后发现程序会卡死在executefetchrequest执行. 反复测试无果.添加锁也无效.想来想去没发现问题. 容忍了就当人品问题.2天以后实在忍无可忍. 替换perf ...
- django时区设置 media配置 日期截断函数 上传图片管理设计方案
1.django时区 修改一下app里的设置 TIME_ZONE = 'Asia/Shanghai' USE_I18N = True USE_L10N = True # 不用UTC时间 USE_TZ ...
- (转)Docker容器的重启策略及docker run的--restart选项详解
1. Docker容器的重启策略 Docker容器的重启策略是面向生产环境的一个启动策略,在开发过程中可以忽略该策略. Docker容器的重启都是由Docker守护进程完成的,因此与守护进程息息相关. ...
- 理解Deadlock
问:为啥以下代码会产生死锁 public class Deadlock { static class Friend { private final String name; public Friend ...
- 求职季全攻略:优秀的UX设计师作品集该如何准备?
这是一篇关于如何制作杰出的UX设计师作品集,看了下文,我们在2019年冲冲冲~制作出自己的作品集! 转自墨刀公众号. Paul Rand 曾经说:“设计很简单,因而也复杂.” 也许你已经掌握了所有的U ...
- Eclipse出现:An internal error occurred during: "Retrieving archetypes:". GC overhead limit exceeded的问题解决
网上说修改虚拟内存的方式,其实不太可行,最直接的方式就是删除以前的workspace,重新使用一个新的workspace.
- linux----------linux的scp命令介绍
1.scp是有Security的文件copy,基于ssh登录. 命令基本格式: scp [OPTIONS] file_source file_target OPTIONS: -v 和大多数 linux ...