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之什么是高内聚低耦合
---恢复内容开始--- 高内聚低耦合,是软件工程中的概念,是判断设计好坏的标准,主要是面向对象的设计,主要是看类的内聚性是否高,耦合度是否低. 粗劣的说就指的是:单独模块间有着强大的凝聚力,不同的模 ...
随机推荐
- 什么是Rollback Segment(已truncate和delete 命令为例)?
Rollback Segments是在你数据库中的一些存储空间,它用来临时的保存当数据库数据发生改变时的先前值,Rollback Segment主要有两个目的: 1. 如果因为某种原因或者其他用用户想 ...
- 最全的MonkeyRunner自动化测试从入门到精通(5)
夜神模拟器的安装与配置步骤一:我们为什么会选择使用夜神模拟器呢? 众所周知,Android studio的模拟器运行速度也很快,可以媲美真机.虽然其运行速度很快,可以满足我们测试的需求.但仍存在以下问 ...
- iptables 分析(三)
原文:http://blog.chinaunix.net/uid-24207747-id-2622902.html find_target查到目标并加载成功,返回一个xtables_target型对象 ...
- TZOJ 3134: 渊子赛马修改版
描述 赛马是一古老的游戏,早在公元前四世纪的中国,处在诸侯割据的状态,历史上称为“战国时期”.在魏国作官的孙膑,因为受到同僚庞涓的迫害,被齐国使臣救出后,到达齐国国都. 赛马是当时最受齐国贵族欢迎的娱 ...
- Docker入门3------手动编辑自定义镜像
手动编辑自定义镜像 查看本地现有镜像: 基于centos创建一个,会自动下载centos最新原始镜像 docker run -it --name=web centos /bin/bash 然后在容器内 ...
- java框架之Spring(2)-注解配置IOC&AOP配置
注解配置IoC 准备 1.要使用注解方式配置 IoC,除了之前引入的基础 jar 包,还需要引入 spring-aop 支持包,如下: 2.在 applicationContext.xml 中引入 c ...
- python基础之 基本数据类型,str方法和for循环
1.概念 1.十进制转二进制,对2取余,余数倒序排列 2.字符串为空的时候,bool值为false,字符串非空就是True3.字符串转化成int时,必须是只包含数字才能转化.4.字符串转化成int时可 ...
- [vue]mvc模式和mvvm模式及vue学习思路(废弃)
好久不写东西了,感觉收生疏了, 学习使用以思路为主, 记录笔记为辅作用. v-if: http://www.cnblogs.com/iiiiiher/p/9025532.html v-show tem ...
- iot-web增加apis-namespace组件
1 文件夹复制 apis 2 增加 3 增加module
- 010 Editor - Binary Templates
010 Editor是一款非常强大的文本/十六进制编辑器,除了文本/十六进制编辑外,还包括文件解析.计算器.文件比较等功能,但它真正的强大之处还在于文件的解析功能.我们可以使用010Edito ...