耦合

简介: 耦合性(英语:Coupling,dependency,或称耦合力或耦合度)是一种软件度量,是指一程序中,模块及模块之间信息或参数依赖的程度。内聚性是一个和耦合性相对的概念,一般而言低耦合性代表高内聚性,反之亦然。
耦合性(英语:Coupling,dependency,或称耦合力或耦合度)是一种 软件度量,是指一程序中, 模块及模块之间信息或参数依赖的程度。
内聚性是一个和耦合性相对的概念,一般而言低耦合性代表高内聚性,反之亦然。耦合性和内聚性都是由提出结构化设计概念的 赖瑞·康斯坦丁(英语: Larry Constantine)所提出 [1]。低耦合性是结构良好 程序的特性,低耦合性程序的可读性及可维护性会比较好。
 
耦合性可以是低耦合性(或称为松散耦合),也可以是高耦合性(或称为紧密耦合)。以下列出一些耦合性的分类,从高到低依序排列:
内容耦合(content coupling,耦合度最高)
也称为病态耦合(pathological coupling)是指一个模块依赖另一个模块的内部作业(例如,访问另一个模块的局域变量),因此修改第二个模块处理的数据(位置、形态、时序)也就影响了第一个模块。
共用耦合(common coupling)
也称为全局耦合(global coupling.)是指二个模块分享同一个全局变量,因此修改这个共享的资源也就要更动所有用到此资源的模块。
外部耦合(external coupling)
发生在二个模块共用一个外加的数据格式、通信协议或是设备界面,基本上和模块和外部工具及设备的沟通有关。
控制耦合(control coupling)
是指一个模块借由传递“要做什么”的信息,控制另一个模块的流程(例如传递相关的旗标)。
特征耦合(stamp coupling)
也称为数据结构耦合,是指几个模块共享一个复杂的数据结构,而每个模块只用其中的一部分,甚至各模块用到的部分不同(例如传递一笔记录给一个函数,而函数只需要其中的一个字段。
数据耦合(data coupling)
是指模块借由传入值共享数据,每一个数据都是最基本的数据,而且只分享这些数据(例如传递一个整数给计算平方根的函数)。
消息耦合(message coupling,是无耦合之外,耦合度最低的耦合)
可以借由以下二个方式达成:状态的去中心化(例如在对象中),组件间利用传入值或 消息传递 (计算机科学)来通信。
无耦合:模块完全不和其他模块交换信息。
 
面向对象程序设计
子类耦合(subclass coupling)
描述子类和父类别之间的关系,子类链接到父类别,但父类别没有链接到子类。
时空耦合(temporal coupling)
二个动作只因为同时间发生,就被包装在一个模块中。
后来的研究提出了许多不同层面的耦合性,并且用来评估实务上各种的模块化法则的实施程度 [2]
 
 
紧密耦合的系统在开发阶段有以下的缺点:
  1. 一个模块的修改会产生涟漪效应,其他模块也需随之修改。
  2. 由于模块之间的相依性,模块的组合会需要更多的精力及时间。
  3. 由于一个模块有许多的相依模块,模块的可复用性(英语:reusability)低。
 
机能设计(英语: Functional_design)是一种可以降低耦合性的方法,此方法以机能性的角度设法限制各模块需负责的事务。在类别A及B之间,若有以下任何一种情形,会提高二者的耦合性:
  • A有一个属性是参考类别B(此属性的形态为类别B)
  • A调用对象B提供的服务
  • A有一个方法会参考类别B(此方式会传回一形态为类别B的物性)
  • A是类别B的子类。
松散耦合是指二个彼此相关的模块,其中的接口是一个简单而稳定的接口,且其接口和任一模块内部的实现方式无关(参考 信息隐藏)。
CORBA组件对象模型等系统,允许一对象在不知道另一对象实现方式的情形下和另一对象交互。这类系统甚至允许一对象和用其他语言撰写的对象进行交互。
 
耦合性和 内聚性二个名词常一起出现,用来表示一个理想模块需要有的特点,也就是低耦合性及高内聚性。耦合性着重于不同模块之间的相依性,而内聚性着重于一模块中不同功能之间的关系性。低内聚性表示一个模块中的各机能之间没什么关系,当模块扩充时常常会出现问题。
 
 
目录
相关文章
|
存储 NoSQL 数据库
关于 LLM 和知识图谱、图数据库,大家都关注哪些问题呢?
此时,距离 ChatGPT 面世已过去半年有余,一起来看看热度散去之后,大家都在关心什么问题。
347 1
关于 LLM 和知识图谱、图数据库,大家都关注哪些问题呢?
|
6月前
|
人工智能 Rust 数据挖掘
最高万元奖金|2025开源之夏x蚂蚁数据智能,12大硬核任务等你解锁
如果你想在暑期里收获:技能实战历练、大咖指导护航、高额现金奖励和荣誉证书... 那么一定不能错过 2025开源之夏!
|
9月前
|
机器学习/深度学习 数据采集 自然语言处理
《深度剖析:特征工程—机器学习的隐秘基石》
特征工程是机器学习中至关重要的环节,它通过数据预处理、特征提取、特征选择和特征变换等技术手段,将原始数据转化为模型易于学习和理解的形式。这一过程不仅提升了模型的预测精度和泛化能力,还降低了模型复杂度,加速了训练过程。特征工程作为连接原始数据与高性能模型的桥梁,虽然幕后工作,却对模型表现起着决定性作用。掌握特征工程,能够更有效地挖掘数据价值,解决复杂问题。
504 3
|
11月前
|
缓存 自然语言处理 API
Ascend推理组件MindIE LLM
MindIE LLM是基于昇腾硬件的大语言模型推理组件,提供高性能的多并发请求调度与优化技术,如Continuous Batching、PageAttention等,支持Python和C++ API,适用于高效能推理需求。其架构包括深度定制优化的模型模块、文本生成器和任务调度管理器,支持多种模型框架和量化方式,旨在提升大规模语言模型的推理效率和性能。
|
资源调度 前端开发 JavaScript
Tailwind CSS那些事儿
Tailwind CSS那些事儿
1156 1
|
Java API
Java 8新特性之Stream API详解
【5月更文挑战第30天】本文将详细介绍Java 8中的一个重要新特性——Stream API。Stream API是Java 8中引入的一种新的数据处理方式,它允许我们以声明式的方式处理数据,使得代码更加简洁、易读。文章将从Stream的基本概念、创建方式、常用操作以及实战案例等方面进行详细讲解,帮助读者深入理解并掌握Stream API的使用。
223 2
|
JavaScript
WebStorm配置代码模板【以vue模板为例,提供vue代码模板】
WebStorm配置代码模板【以vue模板为例,提供vue代码模板】
499 0
|
SQL 关系型数据库 HIVE
hadoop伪分布式安装部署HIVE
应用场景 当我们按照hadoop伪分布式集群搭建博客搭建了hadoop以后,发现这是一个空的hadoop,只有YARN,MapReduce,HDFS,而这些实际上我们一般不会直接使用,而是需要另外部署Hadoop的其他组件,来辅助使用。
1950 0
|
编解码 网络协议 Android开发
6款真正好用的播放器推荐
GOM player 是一款本身装有视频播放所需的解码,及占用系统资源少,并且能以最优秀的画质来观看多种格式影片的播放程序。
1058 0
|
消息中间件 程序员 PHP
PHP+Laravel框架RabbitMQ简单使用(工作队列模式(竞争消费者模式))
工作模式:一个消息生产者,一个交换器,一个消息队列,多个消费者。同样也称为点对点模式 假如我们拥有两个消费者,默认情况下,RabbitMQ 将按顺序将每条消息发送给下一个消费者,平均而言,每个消费者将获得相同数量的消息,这种分发消息的方式称为轮询。 假如有一些非常耗时的任务,某个消费者在缓慢地进行处理,而另一个消费者则空闲,显然是非常消耗资源的。
1415 0