Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Oop 凝聚力与单一责任_Oop_Solid Principles_Single Responsibility Principle_Software Quality_Cohesion - Fatal编程技术网

Oop 凝聚力与单一责任

Oop 凝聚力与单一责任,oop,solid-principles,single-responsibility-principle,software-quality,cohesion,Oop,Solid Principles,Single Responsibility Principle,Software Quality,Cohesion,我已经开始学习凝聚力等概念和单一责任原则等原则。我对他们之间的区别感到很困惑 网络上有很多信息,但我发现很难过滤出正确的比较 凝聚力和单一责任之间的关系是什么? 一个类是否可能只有一个职责但内聚性低?维基百科和 一个责任仍然是一个抽象的概念。如果职责是构建报告,那么这是一项任务,但仍然是一项包含多个步骤和数据部分的任务。因此,在类中存在一些发生低内聚的空间。如果简单的话,只需进行一次计算,就可以获得更多的原子性和高内聚性 如果您认为SRP只有一个改变类的原因,我认为这也有帮助 内聚性可以看作是一

我已经开始学习凝聚力等概念和单一责任原则等原则。我对他们之间的区别感到很困惑

网络上有很多信息,但我发现很难过滤出正确的比较

凝聚力和单一责任之间的关系是什么?
一个类是否可能只有一个职责但内聚性低?

维基百科和

一个责任仍然是一个抽象的概念。如果职责是构建报告,那么这是一项任务,但仍然是一项包含多个步骤和数据部分的任务。因此,在类中存在一些发生低内聚的空间。如果简单的话,只需进行一次计算,就可以获得更多的原子性和高内聚性


如果您认为SRP只有一个改变类的原因,我认为这也有帮助

内聚性可以看作是一种软件质量度量,而SRP更像是一种主观的软件质量原则。正如前面所描述的,当属于一起并相互依赖的事物保持在一起时,就会产生内聚代码


例如,如果一个类的实例变量或属性都由它的方法和它的方法单独使用,但这些方法也不使用任何外部数据或来自其他对象的方法,则该类被称为具有高度内聚性。但是,如果该类恰好是从文件读写的,那么该类可以被视为不遵守单一责任原则,因为读写可以被视为两个非常不同的任务。无论如何,您也可以看到该类的主要任务以及对文件系统的IO操作,因此SRP在某种程度上可以根据应用的上下文进行解释。

借鉴@RicardoCosteira的答案,您可能会说内聚是一种语法特性,而SRP是语义特性。内聚性可以通过代码质量分析工具来衡量;但SRP只能由人来评估。