SlideShare uma empresa Scribd logo
SRP - Single Responsability Principle
O Princípio da Responsabilidade Única


                                             “Uma classe deve possuir apenas uma razão para mudar...”


       Este é o pensamento-chave para o princípio citado pela primeira vez por Tom DeMarco em
1979, no livro Structured Analysis and Systems Specification. O SRP combate o desenvolvimento
de Classes “faz tudo” e também é conhecido como o Princípio da Coesão.

Entendendo melhor o Princípio

        Ao desenvolvermos uma classe, geralmente temos o hábito de agrupar responsabilidades, e o
resultado é algo parecido com isso:




        Perceba, neste exemplo clássico, que a Classe Retângulo possui dois métodos aparentemente
pertinentes. Afinal de contas, um deles calcula a área e o outro desenha o retângulo. Onde está o
problema então?

       O método Area() utiliza um modelo matemático para realizar o cálculo da área, enquanto o
método Desenhar() utiliza uma interface gráfica para fazer seu trabalho. Logo, qualquer modificação feita
no modelo matemático poderá causar uma modificação na geração do desenho, e vice-versa.

Aplicando o Princípio

        Com a utilização do Princípio da Responsabilidade Única obteremos a seguinte arquitetura:




        Agora cada classe possui uma razão única de existir. Caso haja mudança, esta irá
afetar somente a classe correspondente, e não ambas as classes.
O SRP é a base de praticamente todos os outros princípios. Como demonstrado no
exemplo acima, é muito simples de ser compreendido. Ainda assim é preciso ter um cuidado
especial para não acoplar as responsabilidades sem se dar conta disso.

É isto mesmo?

       Vários desenvolvedores cometem o erro de interpretar este princípio achando que
ele se refere a implementar as classes com apenas um método. Por isso, vamos rever a
explicação com algumas dicas:

Primeiro identifique as responsabilidades da sua Classe:

“Ei Classe, o que você faz?”

Se a resposta for algo do tipo:

“Eu faço isto, isso e aquilo....”

sua classe claramente possui mais de uma responsabilidade. Lembrando que o que deve ser
considerado não é a quantidade de métodos da classe, e sim a coesão entre estes métodos.

Vamos a mais um exemplo

      Imagine uma classe Pedido. Ela deve possuir todos os métodos relacionados com
um pedido (adicionarItem, valorTotal, removerItem, cancelar...), até aqui existe coesão entre
seus métodos. Agora, se para obter o valorTotal for preciso calcular algum tipo de política de
desconto, esse política NÃO deve estar na classe Pedido, pois não possui coesão.


Para lembrar

    1. Se uma classe possuir mais de uma responsabilidade, deve-se considerar sua
       decomposição em duas ou mais classes;

     2. Baseado no princípio da coesão funcional, uma classe deve ter uma única
        responsabilidade;

    3. Cada responsabilidade é um eixo de mudança e as fontes de mudança devem ser
       isoladas.


Finalizando

       Programar usando este princípio torna as mudanças de requisitos mais fáceis de serem
implementadas e controladas. Em se tratando de métodos ágeis, onde a mudança é cotidiana,
é de fundamental importância que a equipe ágil tenha a habilidade de utilizar corretamente os
princípios básicos de programação Orientada a Objetos.


Referências

www.macoratti.net/08/06/net_srp1.htm
http://viniciusquaiato.com/blog/responsabilidade-unica-uma-historia-bem-contada/
www.devmedia.com.br/post-18700-Arquitetura-O-Principio-da-responsabilidade-unica.html

Mais conteúdo relacionado

PDF
PTGA18
DOCX
Reseña 2 de histiroa
PPT
Rádio na Escola
PPT
Internet power point
PPTX
Rca gvo apresentação15.12.2011 seja bem vindo soffwarre b2 b
PPTX
Prêmio Nacional de Inovação 2012
PPTX
Administracion 3
PPTX
Nacionalismo e economia
PTGA18
Reseña 2 de histiroa
Rádio na Escola
Internet power point
Rca gvo apresentação15.12.2011 seja bem vindo soffwarre b2 b
Prêmio Nacional de Inovação 2012
Administracion 3
Nacionalismo e economia

Destaque (20)

PPT
Mário cravo neto
PPS
20110323
PPTX
Desigualdades en reales
PPTX
Los del sur
PPTX
Herramientas Web
PPT
El juego
PPTX
Multiplicacion y division
DOCX
PPT
Belcorp as 3 marcas
PPT
Homenagem dia das mães
PDF
Apresentação SASEPRA
DOCX
Estudio Ambiental
PPT
Carnaval em Rio de Janeiro
PPTX
Restaurar una relación desgastada, luego de perdonar
PDF
Análise e Conclusões da Investigação Sociológica
PPSX
Passeio fim ano (p1)
PPT
PDF
WebPesados | Seu Pesado Mais Leve
Mário cravo neto
20110323
Desigualdades en reales
Los del sur
Herramientas Web
El juego
Multiplicacion y division
Belcorp as 3 marcas
Homenagem dia das mães
Apresentação SASEPRA
Estudio Ambiental
Carnaval em Rio de Janeiro
Restaurar una relación desgastada, luego de perdonar
Análise e Conclusões da Investigação Sociológica
Passeio fim ano (p1)
WebPesados | Seu Pesado Mais Leve
Anúncio

Semelhante a Artigo - Single responsabilityprinciple-final (20)

PDF
Questionário sobre modelagem revisão da tentativa
PPT
pec-12-patterns-intro.ppt
PDF
Livro Código limpo: Classes
PDF
Exercitando modelagem em UML
PDF
Apresentação - Single responsability principle
PDF
Apresentação - Single responsability principle
PDF
Poo apostila a programacao orientada
PDF
PráTica De Ensino De Algoritmo Volume 1 e 2
PDF
Information Expert.pdf
PPTX
Projeto e Implementação de Software Utilizando Padrões
PDF
B1d49d56 a06d-4172-84c6-bf9977c65848
PPTX
C# 8 e ML.NET
PPT
Grasp Patterns.ppt
PDF
Sld 4
PDF
Questionário sobre padrões de projeto revisão da tentativa
PDF
OCP - The Open Close Principle - Princípio aberto/fechado
PDF
Umlv4 090813182632-phpapp02
PPTX
Aa1 - Analise de projeto orientado a objetos (Alunos).pptx
PPT
Dojo solid
PDF
Modelo de desenvolvimento de software em 3 camadas para Wordpress
Questionário sobre modelagem revisão da tentativa
pec-12-patterns-intro.ppt
Livro Código limpo: Classes
Exercitando modelagem em UML
Apresentação - Single responsability principle
Apresentação - Single responsability principle
Poo apostila a programacao orientada
PráTica De Ensino De Algoritmo Volume 1 e 2
Information Expert.pdf
Projeto e Implementação de Software Utilizando Padrões
B1d49d56 a06d-4172-84c6-bf9977c65848
C# 8 e ML.NET
Grasp Patterns.ppt
Sld 4
Questionário sobre padrões de projeto revisão da tentativa
OCP - The Open Close Principle - Princípio aberto/fechado
Umlv4 090813182632-phpapp02
Aa1 - Analise de projeto orientado a objetos (Alunos).pptx
Dojo solid
Modelo de desenvolvimento de software em 3 camadas para Wordpress
Anúncio

Artigo - Single responsabilityprinciple-final

  • 1. SRP - Single Responsability Principle O Princípio da Responsabilidade Única “Uma classe deve possuir apenas uma razão para mudar...” Este é o pensamento-chave para o princípio citado pela primeira vez por Tom DeMarco em 1979, no livro Structured Analysis and Systems Specification. O SRP combate o desenvolvimento de Classes “faz tudo” e também é conhecido como o Princípio da Coesão. Entendendo melhor o Princípio Ao desenvolvermos uma classe, geralmente temos o hábito de agrupar responsabilidades, e o resultado é algo parecido com isso: Perceba, neste exemplo clássico, que a Classe Retângulo possui dois métodos aparentemente pertinentes. Afinal de contas, um deles calcula a área e o outro desenha o retângulo. Onde está o problema então? O método Area() utiliza um modelo matemático para realizar o cálculo da área, enquanto o método Desenhar() utiliza uma interface gráfica para fazer seu trabalho. Logo, qualquer modificação feita no modelo matemático poderá causar uma modificação na geração do desenho, e vice-versa. Aplicando o Princípio Com a utilização do Princípio da Responsabilidade Única obteremos a seguinte arquitetura: Agora cada classe possui uma razão única de existir. Caso haja mudança, esta irá afetar somente a classe correspondente, e não ambas as classes.
  • 2. O SRP é a base de praticamente todos os outros princípios. Como demonstrado no exemplo acima, é muito simples de ser compreendido. Ainda assim é preciso ter um cuidado especial para não acoplar as responsabilidades sem se dar conta disso. É isto mesmo? Vários desenvolvedores cometem o erro de interpretar este princípio achando que ele se refere a implementar as classes com apenas um método. Por isso, vamos rever a explicação com algumas dicas: Primeiro identifique as responsabilidades da sua Classe: “Ei Classe, o que você faz?” Se a resposta for algo do tipo: “Eu faço isto, isso e aquilo....” sua classe claramente possui mais de uma responsabilidade. Lembrando que o que deve ser considerado não é a quantidade de métodos da classe, e sim a coesão entre estes métodos. Vamos a mais um exemplo Imagine uma classe Pedido. Ela deve possuir todos os métodos relacionados com um pedido (adicionarItem, valorTotal, removerItem, cancelar...), até aqui existe coesão entre seus métodos. Agora, se para obter o valorTotal for preciso calcular algum tipo de política de desconto, esse política NÃO deve estar na classe Pedido, pois não possui coesão. Para lembrar 1. Se uma classe possuir mais de uma responsabilidade, deve-se considerar sua decomposição em duas ou mais classes; 2. Baseado no princípio da coesão funcional, uma classe deve ter uma única responsabilidade; 3. Cada responsabilidade é um eixo de mudança e as fontes de mudança devem ser isoladas. Finalizando Programar usando este princípio torna as mudanças de requisitos mais fáceis de serem
  • 3. implementadas e controladas. Em se tratando de métodos ágeis, onde a mudança é cotidiana, é de fundamental importância que a equipe ágil tenha a habilidade de utilizar corretamente os princípios básicos de programação Orientada a Objetos. Referências www.macoratti.net/08/06/net_srp1.htm http://viniciusquaiato.com/blog/responsabilidade-unica-uma-historia-bem-contada/ www.devmedia.com.br/post-18700-Arquitetura-O-Principio-da-responsabilidade-unica.html