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之什么是高内聚低耦合
---恢复内容开始--- 高内聚低耦合,是软件工程中的概念,是判断设计好坏的标准,主要是面向对象的设计,主要是看类的内聚性是否高,耦合度是否低. 粗劣的说就指的是:单独模块间有着强大的凝聚力,不同的模 ...
随机推荐
- mybatis+oracle实现简单的模糊查询
第一种 concat select * from cat_table where cat_name like concat(#{catName},'%') --单个百分号 select * from ...
- zabbix报错排错大全
zabbix报错 https://www.cnblogs.com/losbyday/category/876878.html作者总结的很全棒 1.在启动zabbix-agent 时系统日志输出 PID ...
- SQL Server 2008中的CDC(Change Data Capture)功能使用及释疑
SQL Server 2008中的CDC(Change Data Capture)功能使用及释疑 关键词:CDC 原文:http://www.cnblogs.com/chenxizhang/arc ...
- java框架之Struts2(2)-访问Servlet API及请求数据封装
准备 为后面测试示例编写代码及配置如下: package com.zze.bean; import java.util.Date; public class User { private String ...
- bootstrap-wysiwyg这个坑
但是用wysiwyg也是费了我不少的精力,特别是在图片上传上,下面做一些总结. 1.引入文件 wysiwyg号称只有5kb,但是实际上是将其他的依赖文件在cdn上用外链链接进来了,有以下几个文件: c ...
- vue安装,router-link的一些属性,用法,tag active-class,to,replace,exex等等
第一步:$ npm install -g vue-cli 第二部:$ vue init webpack my-projectName 下面内容转载自:https://www.cnblogs.com/c ...
- 自定义Markdown例子
主题1 正文字体 粗体 正文行内代码 斜体 int a = 2 /*代码块*/ /*杨韬的学习备忘录*/ private void CheckCloseFigure() { if (needClose ...
- Android开发中使用Intent跳转到系统应用中的拨号界面、联系人界面、短信界面
现在开发中的功能需要直接跳转到拨号.联系人.短信界面等等,查找了很多资料,自己整理了一下. 首先,我们先看拨号界面,代码如下: Intent intent =new Intent(); intent. ...
- jquery easyui datagrid 将值作为img显示图片时报404 undefined
原因:datagrid 在请求到数据先进行头部数据和样式的渲染,之后数据 obj = {} value = undefined index = 0 进行一次渲染, 在没有formater情况将数据 ...
- 一个关于cookie的坑
#问题:今天上午踩了一个坑,首先,这个小案例的运行结果是应该是在前端页面出现一个当前时间的,当然如果是首次登陆的话应该是显示"第一次登陆",第二次则会显示上次的登录时间,但是却没有 ...