我应该写两个版本的相同的代码。一个是低耦合和高内聚,另一个仍然是低耦合,但这次是低内聚。我真的不明白这有什么区别?我怎么能有低耦合和低内聚力?他们似乎关系密切,这是不可能做到的。
有人能解释一下吗?也许举个例子?谢谢!
发布于 2015-04-23 09:41:54
简而言之::
软件工程中的凝聚力,就像在现实生活中一样,是指构成一个整体(在我们的例子中,假设是一个类)的元素在多大程度上可以说它们实际上属于一个类。因此,它是衡量软件模块的源代码所表示的每一项功能之间有多强的关联。
从面向对象的角度来看内聚力的一种方法是,类中的方法是否使用任何私有属性。
现在讨论的范围比这更大,但是高衔接(或者说衔接最好的类型--功能性衔接)是当模块的各个部分被分组时,因为它们都对模块的一个定义明确的任务做出了贡献。
简单地说,耦合是指一个组件(再一次,设想一个类,尽管不一定)对另一个组件的内部工作或内部元素有多少了解,即它对另一个组件有多少知识。
松散耦合是一种将系统或网络中的组件互连起来的方法,使这些组件在实际可行的最小程度上相互依赖(…)。
In long:
我写了一篇关于这个的博文。 --它详细讨论了所有这些问题,并举例说明了为什么要遵循这些原则的好处。我觉得这会有帮助..。
发布于 2015-04-21 16:35:34
耦合和内聚是两种不同的度量的软件模块。
耦合是对如何两类交互的描述。如果两个类相互依赖,则它们呈现紧耦合;如果两个类可以相互独立使用,则显示松散耦合。松散耦合是首选的,因为它有助于可重用组件和高度可维护性。
Cohesion是对的描述,它描述了、单个类的组件是如何结合在一起的。一个包含与彼此无关的方法的类显示了低内聚性;一个包含逻辑相似的方法的类显示了高内聚性。高度的凝聚力导致了目标明确的集中类。
耦合与内聚力是共生的关系。如果两个类是紧密耦合的,那么很有可能它们没有明确的职责,因此会表现出低的内聚力。相反,如果一个类具有高度的内聚性,那么它的目的是定义得很好的,而且它更容易与其他类一起使用,从而避免了与它们的耦合。
对于你的特殊任务,从写“好”代码开始--低耦合和高内聚力。要将其转化为低耦合和低内聚力,请保持类之间的独立性,但要将功能混在一起。使用一大堆无关的方法创建一个实用程序类。将以元音开头的所有方法放到另一个类中。做一些阻止任何类都有明确目标的事情。
只要您不让类相互依赖,您就会创建具有低耦合性但也具有低内聚性的代码。
发布于 2015-04-21 08:50:59
耦合和衔接在某种程度上是两个密切的概念,但并不相同。你的设计应该有:
Facade )都实现了这一目标。Visitor,就是有这个目标的。在“继续”中,我给出了三个可能更有意义的类示例:
#include <Document>
#include <Printer>
#include <SpellCheker>
class HighCoupling{
// This class need other class to be usable
Document *doc;
Printer *activePrinter;
CretaeDocument() { /*...*/ }
SaveDocument() { /*...*/ }
PrintDocument() { /*...*/ }
CheckSpell() { /*...*/ }
};
#include <Document>
class LowCouplingHighCohesion {
// This class don't need other classes
// This class is a specialist on some task
CretaeDocument() { /*...*/ }
SaveDocument(Format *) { /*...*/ }
LoadDocument() { /*...*/ }
};
#include <Document>
class LowCouplingLowCohesion {
// This class don't need other classes
// This class do many unrelated things
CretaeDocument() { /*...*/ }
SaveDocument() { /*...*/ }
OpenDocument() { /*...*/ }
Undo() { /*...*/ }
ChangeDocumentBackground() { /*...*/ }
SearchInDocument() { /*...*/ }
};https://stackoverflow.com/questions/29765088
复制相似问题