面向对象度量的指标

3
有没有一种度量方法可以帮助确定系统或应用程序的面向对象程度?我在.NET Reflector Add-ins代码库项目中看到了一些非常不错的度量方法,但还没有像这样的。如果不存在这样的度量标准,那么它是否可能或有用?面向对象编程有三个假定原则:封装、继承和多态;一个能够根据这些原则对程序进行排名的工具可能能够显示出C#(或类似语言)代码库中整个面向对象理念被抛弃的区域,并且也许能够显示与该区域相关联的错误数量与项目其余部分相比。

4
这取决于您是否认为继承的使用自动意味着好处 - 根据我的经验,大多数开发人员使用不当。 - anon
我正在寻找一种客观的衡量标准,以确定这些原则是否被应用,从而我可以开始得出关于它们有效性的结论。我想象社区维基问题的范围将涉及开发人员如何不正确地使用语言或范例特征的轶事证据,但我现在正试图避免这种情况。 - Jono
2
有关类耦合和继承深度的度量标准,它们分别是封装和复杂性的粗略度量。它们并不是衡量一个模式是否“面向对象”的具体标准,而是衡量了为了理解给定类需要一次性理解多少代码。 - Dan Bryant
2个回答

1
一个好的面向对象设计的有意义的解释是,设计中的对象在逻辑上和一致地映射到被建模的领域对象。要理解这个解释需要对你试图解决的问题有深入的了解,包括整体背景。自动化指标还不够复杂,无法以这种方式理解上下文。

针对评论,我想进一步扩展一下:

我希望表达的主要观点是,面向对象编程不仅仅是“封装、继承和多态”。这些只是工具,可以使问题建模为以明确定义的方式相互作用的对象。如果你想要一个好的度量标准,你需要了解你真正想要衡量的东西。听起来你正在试图用指标来支持你的感觉,验证代码质量。如果是这样,那么真正的关注点是什么?你是否担心代码容易因意外副作用而变得脆弱并容易破坏?对象模型是否过于分散且难以理解?个别对象是否太大而难以维护?如果你能更好地定义你希望识别的缺陷类型,它将有助于你找到适当的指标。如果有用的话,这里有一个有用的指标集


有一个自动化工具输出一个数字(42?),并且它能够与我主观确定的没有以面向对象方式编写的系统部分很好地相关联,这会感觉很好。我想其他显示过程式编程证据的指标(长、复杂的方法)将作为反例。感谢你们两个的回答。 - Jono
是的,我确实有一个特定的代码库在脑海中。这个代码库经过多年来众多开发人员的不断添加,除了它本身以外,没有正式的文档,并展示出许多妨碍理解的特点。因此,即使是微小的更改也需要很长时间才能实现(甚至更长的时间才能正确实现),即使这样,也可能会产生意想不到的副作用。正如你所说,还存在其他有用于识别这个代码中问题的指标。我希望能够指出这个不存在的指标,并说“嘿!我们没有遵循基本的OO设计原则,_这就是我们陷入困境的原因。” - Jono
为了分析引入副作用的难易程度,我认为检查每个方法的类耦合将是有帮助的。我还会寻找任何全局状态,因为这是违反面向对象设计原则的一个领域,很可能在进行更改时引入副作用。你可能会发现引用全局状态的方法更容易出现错误。 - Dan Bryant
我猜实际问题的答案是“不行”,谢谢您的评论和建议。 - Jono

0

看看由NDepend工具支持的82个代码度量定义,适用于.NET开发人员。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接