当前位置: 首页 > 知识库问答 >
问题:

低耦合和高内聚不是相互依赖吗?

文嘉禧
2023-03-14

我应该写两个版本的相同代码。一个具有低耦合和高内聚,另一个仍然具有低耦合,但这次具有低内聚。我真的不明白有什么区别?我怎么可能有低耦合和低内聚?它们似乎如此相关,以至于这是不可能做到的。

有人能解释一下吗?也许用一个例子?谢谢。

共有3个答案

崔宜修
2023-03-14

内聚和耦合是组织项目的属性。

让我们举一个物理例子。现在假设你有一个棒球、网球、板球、槌球、曲棍球和台球。假设你还有棒球棒、网球拍、板球棒、槌球棒、曲棍球棒和台球杆。如果你将这12个对象随机分成6对袋装对象,你可能会有一个低耦合和低内聚的组织。具体来说,假设六个袋子包含:

  1. 棒球、台球球杆
  2. 长曲棍球、网球拍
  3. 台球、板球棒
  4. 网球、棒球棒
  5. 槌球、曲棍球棒
  6. 板球、槌球

这个组织的内聚性很低,因为每个包中的html" target="_blank">对象都是不相关的。这个组织有适度的耦合,因为不同袋子的内容物之间的关系密度是中等的(但像意大利面条一样)——一个可能21个的六个链接(每对运动球棒一个)。如果你想要一个更低耦合的例子,你可以从更多的运动对象开始

明显的组织成袋的物体

  1. 棒球,棒球棒

甚至具有更低的耦合(零耦合),因为所有袋子内容物都与其他袋子的内容物无关。它具有很高的内聚性,因为袋中的内容物相互关联。

樊奇思
2023-03-14

耦合和内聚是软件模块的两种不同度量。

耦合是对两个类如何交互的描述。如果两个类相互依赖,它们表现出紧密耦合;如果两个类可以相互独立使用,它们表现出松散耦合。松散耦合是首选,因为它适合可重用组件和高可运维性。

内聚是对单个类的组件如何属于一起的描述。包含彼此无关的方法的类表现出低内聚性;包含逻辑上相似的方法的类表现出高度的内聚性。高度的内聚性会让课程专注于一个明确的目标。

耦合和内聚之间的关系是共生的。如果两个类紧密耦合,那么它们很可能没有明确的责任,因此会表现出低内聚。相反,如果一个类高度内聚,它的目的是明确的,并且更容易以避免耦合到其他类的方式与其他类一起使用。

对于您的特定任务,从编写“好”代码开始——低耦合和高内聚。要将其变形为具有低耦合和低内聚性的内容,请保持类彼此独立,但要改变功能。用一大堆不相关的方法创建一个实用程序类。把所有以元音开头的方法放到另一个类中。做一些事情,防止任何阶级有明确的目标。

只要保持类之间不相互依赖,您就创建了表现出低耦合但也具有低内聚的代码。

顾梓
2023-03-14

简而言之:

在软件工程中,就像在现实生活中一样,内聚是组成一个整体(在我们的例子中,让我们说一个类)的元素有多少可以说它们实际上属于一起。因此,它是衡量软件模块源代码表达的每一个功能有多强的关联性。

从面向对象的角度看待内聚的一种方法是类中的方法是否使用任何私有属性。

现在的讨论比这更广泛,但高内聚性(或内聚性的最佳类型——功能性内聚性)是指将模块的各个部分分组,因为它们都有助于模块的一个明确定义的任务。

简单地说,耦合就是一个组件(同样,想象一个类,尽管不一定)知道另一个组件的内部工作或内部元素的多少,即它对另一个组件有多少知识。

松耦合是一种将系统或网络中的组件互连的方法,使这些组件相互依赖的程度尽可能低…

总之:

我写了一篇关于这个的博客文章。它详细讨论了这一切,并举例说明。它还解释了为什么你应该遵循这些原则的好处。我想这会有帮助。。。

 类似资料:
  • 我在理解语句。我已经在谷歌上搜索并阅读了很多关于这方面的内容,但仍然觉得很难理解。 据我所知,高内聚意味着我们应该有专门的类来执行特定的功能。希望这是正确的?就像信用卡验证类一样,它专门用于验证信用卡。 还不明白低耦合是什么意思?

  • 在一次技术采访中,我被问及项目的凝聚力和耦合性。我详细解释了它们的定义,尽管我没有像他说的那样正确回答问题的第二部分。 “我们如何在一个项目中同时实现高度内聚和松散耦合的设计,请解释这种方法应该如何在一个整体项目中实现?” 我回答说这两个目标是矛盾的,所以我们需要找出每个项目或模块的最佳选择,但我无法提供全面的答案。 如果有人能帮我,我将不胜感激。

  • 本文向大家介绍什么是耦合和凝聚力?相关面试题,主要包含被问及什么是耦合和凝聚力?时的应答技巧和注意事项,需要的朋友参考一下 组件之间依赖关系强度的度量被认为是耦合。一个好的设计总是被认为具有高内聚力和低耦合性。 面试官经常会问起凝聚力。它也是另一个测量单位。更像是一个模块内部的元素保持结合的程度。 必须记住,设计微服务的一个重要关键是低耦合和高内聚的组合。当低耦合时,服务对其他服务的依赖很少。这样

  • 目前,我将进一步介绍java类,这是该类如何简要定义的: 内聚:以高内聚为目标,在这种情况下,内聚意味着单个模块紧紧关注其任务。 耦合:以低耦合为目标,在这种情况下,耦合意味着两个或多个模块相互交织的程度。 如何确定凝聚力和耦合度的水平? 例如,我的一些方法调用了同一类中的其他方法。这意味着调用其他方法的方法依赖于其他方法,以便“调用”方法完成其代码块。这是否意味着我对同一类的方法具有低内聚和高耦

  • 假设方法和的责任密切相关 第一个例子: 如果 •和在class中定义(因此class具有高度的内聚性) •类别使用和类别使用 然后 •与和类耦合 •更改的签名只需要更改,而不需要更改 第二个例子: 如果 •在类中定义(因此与耦合) •用类定义(因此与耦合) 然后 •更改的签名只需要更改,而不需要更改 a) 据我所知,上一个例子中的类与第一个例子中的类并不耦合!还是我错过了什么? b) 据我所知,第

  • 问题内容: 我已经搜索了很多,但是我发现的主要是python中的递归编程示例。因此,问题来了: 我该如何实现? 问题答案: 一切在Python中都是动态的-甚至是类声明。在初始声明之后,没有什么可以阻止您修改类的内容的: 注意:如果您不太熟悉Python,则该关键字仅允许您说“这里什么都没有”-除非A类的空值与本例中的一样空,否则它并不重要!