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之什么是高内聚低耦合
---恢复内容开始--- 高内聚低耦合,是软件工程中的概念,是判断设计好坏的标准,主要是面向对象的设计,主要是看类的内聚性是否高,耦合度是否低. 粗劣的说就指的是:单独模块间有着强大的凝聚力,不同的模 ...
随机推荐
- xpinyin模块
import xpinyin s = xpinyin.Pinyin() #一个实例化,以后了解 print(s.get_pinyin('小小军')) #get_pinyin方法,转出来的拼音,每一个汉 ...
- ES6 模块
概述 在 ES6 前, 实现模块化使用的是 RequireJS 或者 seaJS(分别是基于 AMD 规范的模块化库, 和基于 CMD 规范的模块化库). ES6 引入了模块化,其设计思想是在编译时 ...
- Linux服务器上搭建web项目环境
一.下载并安装jdk 去官网下载linux系统上jdk的安装包jdk-8u181-linux-x64.tar.gz,在Linux的/usr目录下新建文件夹java,可以使用命令:cd /usr ...
- caffe中的卷积
https://www.zhihu.com/question/28385679 如上,将三维的操作转换到二维上面去做,然后调用GEMM库进行矩阵间的运算得到最后结果. 两个矩阵相乘,需要中间的那个维度 ...
- iOS学习之Object-C语言属性和点语法(转载收集)
一.属性 1.属性的声明:在.h文件中使用@property声明属性. @property NSString *name; 2.属性的作用是生成setter以 ...
- 将python代码打包成一个app/exe
前言 打包的代码通常都需要写一个简单的界面,一般用PyQt来写.用PyQt写界面的方法请戳这里:PyQt5的安装及基本配置 PyQt5教程 python提供了几个用来打包的模块,主要有py2ap ...
- sql语句格式化数字(前面补0)
将一个数字例如33,或1使用t-sql语句转换成033或001 以下是详细分析: .,)得到1000 . as varchar) 将1000转换类型 .,) 从右边取3个字符得到033 将1格式化同上 ...
- 131A
#include <stdio.h> #include <string.h> #include <stdbool.h> #define MAXSIZE 105 in ...
- Linux下安装Gensim
依赖软件包:numpy 直接使用pip安装: [root@mycentos ~]#pip install gensim 安装gensim的时候会遇到下面的一系列错误: Cannot uninstall ...
- [openjudge-动态规划]滑雪
题目描述 描述 Michael喜欢滑雪百这并不奇怪, 因为滑雪的确很刺激.可是为了获得速度,滑的区域必须向下倾斜,而且当你滑到坡底,你不得不再次走上坡或者等待升降机来载你.Michael想知道载一个区 ...