我在理解该声明时遇到困难low in coupling and high in cohesion
。我已经在Google上搜索并阅读了很多相关内容,但仍然很难理解。
据我了解High cohesion
,这意味着我们应该具有专门用于执行特定功能的类。希望这是正确的?类似于信用卡验证类,该类专门用于仅验证信用卡。
仍然不了解低耦合是什么意思?
我在理解该声明时遇到困难low in coupling and high in cohesion
。我已经在Google上搜索并阅读了很多相关内容,但仍然很难理解。
据我了解High cohesion
,这意味着我们应该具有专门用于执行特定功能的类。希望这是正确的?类似于信用卡验证类,该类专门用于仅验证信用卡。
仍然不了解低耦合是什么意思?
Answers:
我相信的是:
内聚性是指模块/类的元素相互之间的结合程度,建议相关的代码应彼此靠近,因此我们应争取较高的内聚力,并将所有相关的代码尽可能地绑定在一起。它与元素做内的模块/类。
耦合是指不同模块/类之间相互依赖的程度,建议所有模块都应尽可能独立,这就是低耦合的原因。它与不同模块/类之间的元素有关。
可视化整个图片将有所帮助:
屏幕截图来自Coursera。
就像在现实生活中一样,软件工程的凝聚力是可以说组成一个整体(在我们的情况下,我们说一个类)的元素实际上属于同一元素的程度。因此,它衡量了由软件模块的源代码表达的每个功能之间的关联程度。
从OO角度看内聚的一种方法是,如果类中的方法使用任何私有属性。
现在讨论的范围比这个要大,但是高内聚力(或内聚力的最佳类型-功能内聚力)是将模块的各个部分归为一组,因为它们都对模块的一个明确定义的任务有所贡献。
简单来说,耦合就是一个组件(尽管不是必须的,再想一想一个类)对另一组件的内部运作或内部元素了解多少,即它对另一组件具有多少知识。
松散耦合是一种将系统或网络中的组件互连的方法,以使这些组件在实际可行的范围内以最小的程度相互依赖……
在软件设计中,高凝聚力意味着类应该很好地完成一件事和一件事。高凝聚力与单一责任原则密切相关。
低耦合表明类应该具有最小的依赖关系。另外,必须存在的依赖项应该是弱的依赖项-优先考虑对接口的依赖性,而不是对具体类的依赖性,或者优先于继承而不是继承。
高内聚和低耦合为我们提供了更好设计的代码,更易于维护。
简短明了的答案
长话短说,低耦合度据我所知,这意味着可以更换组件而不会影响系统的正常运行。基本上将您的系统调制为可正常运行的组件,这些组件可以单独更新而不会破坏系统
你有智能手机吗?有一个大应用程序还是有很多小应用程序?一个应用会回复另一个吗?您可以在安装,更新和/或卸载另一个应用程序时使用一个应用程序吗?每个应用程序都是独立的,具有很高的凝聚力。每个应用程序都独立于其他应用程序是低耦合的。DevOps支持此体系结构,因为它意味着您可以进行离散的连续部署而不会破坏整个系统。
凝聚力 -一切之间的紧密联系。
耦合 -一切如何相互连接。
让我们举个例子-我们要设计一种自动驾驶汽车。
(1)我们需要电动机正常运行。
(2)我们需要汽车自行驾驶。
(1)中的所有类和功能都可以使电动机启动并使电动机一起运转,但不会帮助汽车转向。因此,我们将这些类放在引擎控制器后面。
(2)中的所有类和功能都可以使汽车转向,加速和制动。它们不会帮助汽车启动或将汽油输送到活塞。因此,我们将这些类放在其自己的Driving Controller之后。
这些控制器用于与所有可用的类和功能进行通信。然后,控制器仅相互通信。这意味着我无法从油门踏板类中调用活塞类中的函数来使汽车行驶更快。
踏板课程必须要求驾驶控制器与发动机控制器对话,然后告诉发动机控制器更快地行驶。这使我们的程序员能够发现问题,并使我们能够组合大型程序而不必担心。这是因为代码都在控制器后面工作。
这是一些抽象的图形理论角度的答案:
让我们通过仅查看有状态对象之间的(定向)依赖图来简化问题。
通过考虑依赖图的两个限制情况,可以说明一个非常简单的答案 :
第一种极限情况:聚类图。
聚类图是高内聚和低耦合(给定的聚类大小)依赖性图的最完美实现。
群集之间的依赖性最大(完全连接),群集间的依赖性最小(零)。
这是其中一种极限情况下答案的抽象图示。
第二个极限情况是一个完全连通的图,其中一切都取决于一切。
在我的拙劣理解中,现实介于两者之间,离集群图越近越好。
从另一个角度来看:当查看有向依存关系图时,理想情况下它应该是非循环的,否则循环将形成最小的群集/组件。
层次结构的上/下一级对应于松耦合,紧密内聚的“一个实例”,但是可以将这种松耦合/紧密内聚的原理视为在非循环有向图的不同深度处重复的现象(或其生成树之一)。
将系统分解为层次结构有助于克服指数级的复杂性(例如,每个集群有10个元素)。然后在6层,已经是100万个对象:
10个集群构成1个超集群,10个集群构成1个超集群,依此类推...如果没有紧密的凝聚力,松散耦合的概念,那么这种分层体系结构将是不可能的。
因此,这可能是故事的真正重要性,而不仅仅是两层中的高内聚性低耦合。在考虑更高级别的抽象及其交互时,真正的重要性变得很明显。
我认为您有太多的定义,但是如果您仍然有疑问,或者如果您是编程的新手并想深入了解它,那么我建议您观看此视频, https://youtu.be/HpJTGW9AwX0 它只是获得更多有关多态性信息的参考。希望您对此有所了解。
低耦合:-将使其保持非常简单。如果更改模块,它将如何影响其他模块。
示例:-如果您的服务API公开为JAR,则对方法签名的任何更改都将中断调用API(高/紧耦合)。
如果您的模块和其他模块通过异步消息进行通信。只要您收到消息,您的方法更改签名就在您的模块本地(低耦合)。
偏离航路时,如果消息格式发生更改,则呼叫客户端将需要进行一些更改。