我在理解声明时遇到了问题low in coupling and high in cohesion.我用Google搜索并阅读了很多相关信息,但仍然难以理解.
根据我的理解High cohesion,我们应该拥有专门用于执行特定功能的类.希望这是正确的吗?就像信用卡验证类一样,专门用于验证信用卡.
还是不明白低耦合意味着什么?
vis*_*aim 210
我相信这是:
内聚是指模块/类的元素在一起的程度,建议相关代码应该彼此接近,因此我们应该争取高内聚并尽可能地将所有相关代码绑定在一起.它与元素做内的模块/类.
耦合是指不同模块/类彼此依赖的程度,建议所有模块尽可能独立,这就是低耦合的原因.它与不同模块/类之间的元素有关.
想象整个图片将有所帮助:
截图来自Coursera.
The*_*yan 38
软件工程中的凝聚力,就像在现实生活中一样,整体构成的元素(在我们的例子中,我们说是一个类)可以说它们实际上属于一个整体.因此,它是衡量软件模块的源代码所表示的每个功能的强烈关系的度量.
根据OO观察内聚的一种方法是,如果类中的方法使用任何私有属性.
现在讨论比这更大但是高凝聚力(或凝聚力的最佳类型 - 功能凝聚力)是模块的一部分被分组,因为它们都有助于模块的单个明确定义的任务.
耦合用通俗的话说,是多少一个组件(再次,想象一类,虽然不一定)知道的内部运作或另外一个内部元素,也就是说,它多少知识有其他成分的.
松耦合是一种互连系统或网络中的组件的方法,以便这些组件在实际可能的最小程度上相互依赖...
我写了一篇关于此的博客文章.它通过示例等详细讨论了所有这些内容.它还解释了为什么要遵循这些原则的好处.
小智 10
当我阅读有关微服务的内容时。我遇到了以下事情:
内聚性是对组件各部分之间的关系数量的度量。高内聚意味着交付组件功能所需的所有部分都包含在组件中
耦合是对系统中一个组件与其他组件之间的关系数量的度量。低耦合意味着组件与其他组件没有太多关系
小智 9
低耦合是在两个或多个模块的上下文中.如果一个模块的变化导致其他模块发生很多变化,那么就会说它们是高度耦合的.这是基于接口的编程有用的地方.模块内的任何更改都不会影响其他模块,因为它们之间的接口(交互的平均值)没有改变.
高凝聚力 - 把类似的东西放在一起.因此,一个班级应该有相关工作的方法或行为.举一个夸张的坏例子:List接口的实现不应该有与String相关的操作.String类应该有方法,字段与String相关,同样,List的实现应该有相应的东西.
希望有所帮助.
以旧电脑主板为例。
这意味着特定端口仅适用于特定设备,而不适用于其他设备。
这是强/高耦合
由于鼠标仅用于操作光标和相关功能,键盘用于键入按键等,即它们仅执行其预期的任务,因此这是高内聚
如果鼠标有几个按钮 'a' 'b' 'c' 需要输入,那么它所做的就超出了它应该做的,因为键盘已经在执行它们,这是低内聚
值得庆幸的是,过时的专用端口已被我们称为USB 的标准(接口)所取代。这是松散/低耦合的
看看这些物理属性,很明显这就是它应该的样子,但是在编写软件时,很容易忘记什么功能要放在哪里等等,因此提醒一下,在所有内容中生活中,始终坚持:
“高内聚和松耦合”
打个比方,如果你的猫吠叫,那么它的凝聚力很差,而如果你的狗需要一只猫在他身边吠叫,那么它的耦合度很高。
“狗会叫,猫会咕噜咕噜叫,如果它们呕吐,你的 Pull 请求将被拒绝”
小智 5
凝聚力——一切事物之间的联系有多紧密。
耦合- 一切如何相互连接。
让我们举个例子——我们想设计一辆自动驾驶汽车。
(1) 我们需要电机正常运行。
(2) 我们需要汽车自己开车。
(1) 启动电机并使其运行中的所有类和函数都可以很好地协同工作,但不能帮助汽车转向。所以我们将这些类放在引擎控制器之后。
(2) 中的所有类和函数都可以很好地使汽车转向、加速和制动。它们不帮助汽车启动或向活塞输送汽油。所以我们把这些类放在它自己的驾驶控制器后面。
这些控制器用于与所有可用的类和函数进行通信。控制器然后仅彼此通信。这意味着我不能从油门类调用活塞类中的函数来使汽车跑得更快。
踏板类必须要求驾驶控制器与引擎控制器交谈,然后引擎控制器告诉活塞类走得更快。这使我们程序员能够发现问题,并允许我们组合大型程序而无需担心。这是因为代码都在控制器后面工作。