浅析“高内聚,低耦合”
面向对象的基本原则:多聚合,少继承;高内聚,低耦合
多聚合
聚合,是指多个元素在一起使用,组成新的元素;
在Java中有“组合类”一说:一个类是由其他的类组合而成的,因此新组成的类就拥有了其组合类的属性和方法。
少继承
继承,是指一个类继承自另一个类,新的类就可以使用(或重写或增加)被继承类的方法;
Java的继承关键字 extends ,Java遵循单一继承原则,一个类只能继承一个类,但是可以实现多个接口;
关于什么时候使用组合,什么时候使用继承
如果存在一种is-a的关系,比如说钢琴(piano)是一种乐器(instrument),乐器类向钢琴类暴露了所有的方法和属性,并且钢琴类可以重写乐器类的方法。这种情况更适合使用继承
如果存在一种has-a的关系,比如说钢琴(piano)由踏板(Pedal)和琴键(Keyboard)组成,此时钢琴和踏板(琴键)不再是父子关系。这种情况更适合使用组合
高内聚
内聚:一个模块内各个元素彼此结合的紧密程度;
在一个模块内,让每个元素之间都尽可能的紧密相连。如果某个元素与该模块的关系比较疏松的话,可能该模块的结构还不够完善,或者是该元素是多余的。
低耦合
耦合:一个软件结构内不同模块之间互连程度的度量;
一个完整的系统,模块与模块之间,尽可能的使其独立存在。也就是说,让每个模块,尽可能的独立完成某个特定的子功能。如果某两个模块间的关系比较复杂的话,最好首先考虑进一步的模块划分。
关于内聚和耦合
内聚和耦合,包含了横向和纵向的关系。
功能内聚和数据耦合,是我们需要达成的目标。
横向的内聚和耦合,通常体现在系统的各个模块、类之间的关系,而纵向的耦合,体现在系统的各个层次之间的关系。
浅析“高内聚,低耦合”相关推荐
- 线程间定制化调用通信—— 1 高内聚低耦合的前提下,线程操作资源类 2 判断/干活/通知 3 多线程交互中,必须要防止多线程的虚假唤醒,也即(判断只用while,不能用if)
生产者与消费者模式 一个生产者与一个消费者 题目:现在有两个线程,可以操作初始值为0的一个变量,实现一个线程对该变量加1,另一个线程对该变量减1,这两个线程的操作加一.减一交替,进行10轮,变量的初始 ...
- 浅谈面向对象开发原则:高内聚,低耦合
软件设计中通常用耦合度和内聚度作为衡量模块独立程度的标准.划分摸块的一个准则就是高内聚低耦合. 这是软件工程中的概念,是判断设计好坏的标准,主要是面向OO的设计,主要是看类的内聚性是否高,偶合度是否低 ...
- 高内聚低耦合通俗理解_带你从入门到精通——「高内聚低耦合」
如果这是第二次看到我的文章,欢迎订阅z哥的公号(跨界架构师)哦~ 本文长度为2871字,建议阅读8分钟. 坚持原创,每一篇都是用心之作- 下面的这个场景你可能会觉得很熟悉(Z哥我又要出演了): Z哥: ...
- 编码至高法则-高内聚低耦合
此法则适合所有语言,咱们以JavaScript和Java两个角度分析一下这个东东. 一.javascript 有这样的一个页面,js.css代码都写在html页面中. 例如:gnj.html v1版本 ...
- 软件设计之——“高内聚低耦合”
耦合度 一.什么是耦合度 软件设计中通常用耦合度和内聚度作为衡量模块独立程度的标准.划分摸块的一个准则就是高内聚低耦合. 耦合度(Coupling)是对模块间关联程度的度量.耦合的强弱取决与模块间接口 ...
- 为什么要高内聚低耦合?
首先我觉的有必要声明高内聚低耦合是基于面向对象思想的概念,所以撇开面向对象这个基本思想来理解高内聚低耦合可能比较不容易.但是网络上的文章和博客大多只是单纯的以高内聚低耦合来谈高内聚低耦合.本篇博客试图 ...
- 最简单理解高内聚低耦合
低耦合: 耦合就是元素与元素之间的连接,感知和依赖量度.这里说的元素即是功能,对象,系统,子系统.模块. 例如:现在有方法A和方法B 我们在A元素去调用B元素,当B元素有问题或者不存在的时候,A元素就 ...
- 高内聚低耦合是什么含义,怎么实现?
一.含义 高内聚低耦合,是软件工程中的概念,是判断软件设计好坏的标准,主要用于程序的面向对象的设计,主要看类的内聚性是否高,耦合度是否低. 目的:使程序模块的可重用性.移植性大大增强. 通常程序结构中 ...
- Java编程思想之高内聚低耦合
文章目录 1 前言 2 低耦合 2.1 耦合性定义 2.2 耦合性分类 2.3 使用低耦合 3 高内聚 3.1 高内聚定义 3.2 内聚性分类 4 示例 5 高内聚,低耦合的系统有什么好处呢 6 降低 ...
- java 高内聚低耦合_高内聚低耦合法则实例解析
定义:一个对象应该对其他对象保持最少的了解. 问题由来:类与类之间的关系越来越密切,耦合度越来越大,当一个类发生改变时,对另外一个类的影响也越大. 解决方案:尽量降低类与类之间的耦合. 自从我们接触到 ...
最新文章
- html标签的显示模式(块级标签,行内标签,行内块标签)(转)
- thinkphp分页格式的完全自定义,直接输入数字go到输入数字页
- Java JDBC连接SQL Server2005错误:通过端口 1433 连接到主机 localhost 的 TCP/IP 连接失败...
- 五分钟了解一致性hash算法!
- 分区数据导出功能(服务端实现)
- php---自动生成flash图表(包括你想要的其他类型的图表)
- JS中关于异步的那点事~
- 从阿里一面谈面试需要准备什么
- 如何以正确的顺序重新安装驱动程序
- Django Hello,Word!(Windows10)
- 虚拟机VMware安装苹果系统macOS,超级详细教程,附文件下载,真教程!!
- HDFS文件系统的基础理论,HDFS工作者和管理者的分配,HDFS文件存储容量的理解
- 干货集中营(分享)-每日分享妹子图和技术干货
- 2-4 调整名字大小写
- 文件名称: 项目利用循环求和 、分数的累加、乘法表
- mdx格式mysql_Saiku_学习_02_Schema Workbench 开发mdx和模式文件
- (三)并发编程:特殊的一个单线程:主线程(Main线程)
- 如何优雅地在Word中粘贴代码
- 关于MNN中图像预处理
- 流放之路+连接服务器+未响应,流放之路链接服务器中就未响应