2009-11-09 20 views
7

我不确定我是否同意这个观点,所以我希望能找到这本书背后的书或期刊文章,以便我可以检查我是否明白他们在说什么,以及他们的意思。对象应该只做一件事的想法在哪里?

我想我理解这个想法 - 我只是想知道源代码,所以我可以检查这个想法来自哪里。

为什么我问:

术语“做一件事”是含糊不清,可能意味着很多事情,包括“只有每一个类的方法”(可笑)...我认为这可能意味着单一责任(即多种方法)。它也不是特别有用,因为您必须判断何时单个责任变得足够复杂,需要用某种委托来重构几个责任...

回答

19

来自Bob Martin的SOLID原则。准确地说,是

Single Responsibility Principle

虽然,在对单一职责原则这一章的第一页,他说:

这一原则在汤姆·德马科和迈利尔·佩奇·琼斯的工作描述。他们 称它为内聚力。

对于他提到工作的参考文献:

  • 结构化分析和系统规范,汤姆·德马科,Yourdon的出版社计算系列,1979
  • 的实用指南,以结构化系统设计 ,2d。编,Meilir页面 - 琼斯 ,Yourdon的出版社计算系列,(在评论来自美国洛特)1988年

其他来源包括:

+5

Martin的名单是从以前发表的文章收集而来。 – 2009-11-09 20:57:43

+0

另请参阅http://en.wikipedia.org/wiki/GRASP_(Object_Oriented_Design)。 – 2009-11-09 20:58:55

+0

并参阅http://c2.com/cgi/wiki?AllocationOfResponsibility – 2009-11-09 20:59:29

1

单一责任原则 - 检查here有关该主题的一些信息。

1

什么是来源,我不认为这是OO中的常见想法。 一个对象可能会做很多事情。

+0

我认为它来自哪里并不重要。我不想要中文Whisper版本 - 我想知道被重复研究的原始意图,所以我可以像人们在真正的学科中一样做出明智的判断;-) – daf 2009-11-09 21:14:17

6

在软件中发明模块化思想的人是David Parnas博士。经典论文是On the Criteria To Be Used in Decomposing Systems into Modules

虽然他一般都没有谈论OO(因为它还没有出现),但OO的想法从Parnas博士的工作中自然延伸出来。这项工作的一部分是分析如何将软件分解为模块,并且这些模块应该是单一用途的。

+0

好的答案 - 但不是我问的具体问题。 ;-) – daf 2009-11-10 00:11:50

+1

那么,我相信Parnas自己说OO只是他模块概念的一个现代版本。所以那个导致另一个:) – 2009-11-10 14:38:05

0

单一责任原则(SRP)在Java世界中相当普遍。这里提到的参考文献很好。

该原理可以适用于类和方法,因为它对两者都是一个好主意。

知道SRP并在可能的情况下应用它的结果通常是更简单的代码,但代价是更多的类/方法。这对于重用,测试和下一个程序员来说是非常有价值的。

相关问题