SlideShare uma empresa Scribd logo
1 de 3
Baixar para ler offline
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

Destaque (20)

Mário cravo neto
Mário cravo netoMário cravo neto
Mário cravo neto
 
Rss
RssRss
Rss
 
20110323
2011032320110323
20110323
 
Desigualdades en reales
Desigualdades en realesDesigualdades en reales
Desigualdades en reales
 
Los del sur
Los del surLos del sur
Los del sur
 
Herramientas Web
Herramientas WebHerramientas Web
Herramientas Web
 
El juego
El juegoEl juego
El juego
 
Multiplicacion y division
Multiplicacion y divisionMultiplicacion y division
Multiplicacion y division
 
SLIDESHARE
SLIDESHARESLIDESHARE
SLIDESHARE
 
Belcorp as 3 marcas
Belcorp as 3 marcasBelcorp as 3 marcas
Belcorp as 3 marcas
 
Homenagem dia das mães
Homenagem dia das mãesHomenagem dia das mães
Homenagem dia das mães
 
Apresentação SASEPRA
Apresentação SASEPRAApresentação SASEPRA
Apresentação SASEPRA
 
Estudio Ambiental
Estudio AmbientalEstudio Ambiental
Estudio Ambiental
 
Carnaval em Rio de Janeiro
Carnaval em Rio de JaneiroCarnaval em Rio de Janeiro
Carnaval em Rio de Janeiro
 
Guia 4
Guia 4Guia 4
Guia 4
 
Restaurar una relación desgastada, luego de perdonar
Restaurar una relación desgastada, luego de perdonarRestaurar una relación desgastada, luego de perdonar
Restaurar una relación desgastada, luego de perdonar
 
Análise e Conclusões da Investigação Sociológica
Análise e Conclusões da Investigação SociológicaAnálise e Conclusões da Investigação Sociológica
Análise e Conclusões da Investigação Sociológica
 
Passeio fim ano (p1)
Passeio fim ano (p1)Passeio fim ano (p1)
Passeio fim ano (p1)
 
Conae
ConaeConae
Conae
 
WebPesados | Seu Pesado Mais Leve
WebPesados | Seu Pesado Mais LeveWebPesados | Seu Pesado Mais Leve
WebPesados | Seu Pesado Mais Leve
 

Semelhante a Artigo - Single responsabilityprinciple-final

Questionário sobre modelagem revisão da tentativa
Questionário sobre modelagem  revisão da tentativaQuestionário sobre modelagem  revisão da tentativa
Questionário sobre modelagem revisão da tentativaAluisioSantos4
 
pec-12-patterns-intro.ppt
pec-12-patterns-intro.pptpec-12-patterns-intro.ppt
pec-12-patterns-intro.pptssuser7025cf
 
Livro Código limpo: Classes
Livro Código limpo:  ClassesLivro Código limpo:  Classes
Livro Código limpo: ClassesInael Rodrigues
 
Exercitando modelagem em UML
Exercitando modelagem em UMLExercitando modelagem em UML
Exercitando modelagem em UMLinfo_cimol
 
Apresentação - Single responsability principle
Apresentação - Single responsability principleApresentação - Single responsability principle
Apresentação - Single responsability principleThiago Ribeiro
 
Apresentação - Single responsability principle
Apresentação - Single responsability principleApresentação - Single responsability principle
Apresentação - Single responsability principleThiago Ribeiro
 
Poo apostila a programacao orientada
Poo   apostila a programacao orientadaPoo   apostila a programacao orientada
Poo apostila a programacao orientadarobinhoct
 
PráTica De Ensino De Algoritmo Volume 1 e 2
PráTica De Ensino De Algoritmo Volume 1 e 2PráTica De Ensino De Algoritmo Volume 1 e 2
PráTica De Ensino De Algoritmo Volume 1 e 2Albérico Henrique
 
Information Expert.pdf
Information Expert.pdfInformation Expert.pdf
Information Expert.pdfssuserefabf71
 
Projeto e Implementação de Software Utilizando Padrões
Projeto e Implementação de Software Utilizando PadrõesProjeto e Implementação de Software Utilizando Padrões
Projeto e Implementação de Software Utilizando PadrõesAntonio Passos
 
B1d49d56 a06d-4172-84c6-bf9977c65848
B1d49d56 a06d-4172-84c6-bf9977c65848B1d49d56 a06d-4172-84c6-bf9977c65848
B1d49d56 a06d-4172-84c6-bf9977c65848ASTRIDEDECARVALHOMAG
 
Questionário sobre padrões de projeto revisão da tentativa
Questionário sobre padrões de projeto  revisão da tentativaQuestionário sobre padrões de projeto  revisão da tentativa
Questionário sobre padrões de projeto revisão da tentativaAluisioSantos4
 
OCP - The Open Close Principle - Princípio aberto/fechado
OCP - The Open Close Principle - Princípio aberto/fechadoOCP - The Open Close Principle - Princípio aberto/fechado
OCP - The Open Close Principle - Princípio aberto/fechadoEngenharia de Software Ágil
 
Umlv4 090813182632-phpapp02
Umlv4 090813182632-phpapp02Umlv4 090813182632-phpapp02
Umlv4 090813182632-phpapp02Jhonefj
 

Semelhante a Artigo - Single responsabilityprinciple-final (20)

Questionário sobre modelagem revisão da tentativa
Questionário sobre modelagem  revisão da tentativaQuestionário sobre modelagem  revisão da tentativa
Questionário sobre modelagem revisão da tentativa
 
pec-12-patterns-intro.ppt
pec-12-patterns-intro.pptpec-12-patterns-intro.ppt
pec-12-patterns-intro.ppt
 
Livro Código limpo: Classes
Livro Código limpo:  ClassesLivro Código limpo:  Classes
Livro Código limpo: Classes
 
Exercitando modelagem em UML
Exercitando modelagem em UMLExercitando modelagem em UML
Exercitando modelagem em UML
 
Apresentação - Single responsability principle
Apresentação - Single responsability principleApresentação - Single responsability principle
Apresentação - Single responsability principle
 
Apresentação - Single responsability principle
Apresentação - Single responsability principleApresentação - Single responsability principle
Apresentação - Single responsability principle
 
Poo apostila a programacao orientada
Poo   apostila a programacao orientadaPoo   apostila a programacao orientada
Poo apostila a programacao orientada
 
PráTica De Ensino De Algoritmo Volume 1 e 2
PráTica De Ensino De Algoritmo Volume 1 e 2PráTica De Ensino De Algoritmo Volume 1 e 2
PráTica De Ensino De Algoritmo Volume 1 e 2
 
Information Expert.pdf
Information Expert.pdfInformation Expert.pdf
Information Expert.pdf
 
Projeto e Implementação de Software Utilizando Padrões
Projeto e Implementação de Software Utilizando PadrõesProjeto e Implementação de Software Utilizando Padrões
Projeto e Implementação de Software Utilizando Padrões
 
B1d49d56 a06d-4172-84c6-bf9977c65848
B1d49d56 a06d-4172-84c6-bf9977c65848B1d49d56 a06d-4172-84c6-bf9977c65848
B1d49d56 a06d-4172-84c6-bf9977c65848
 
C# 8 e ML.NET
C# 8 e ML.NETC# 8 e ML.NET
C# 8 e ML.NET
 
Grasp Patterns.ppt
Grasp Patterns.pptGrasp Patterns.ppt
Grasp Patterns.ppt
 
Sld 4
Sld 4Sld 4
Sld 4
 
Questionário sobre padrões de projeto revisão da tentativa
Questionário sobre padrões de projeto  revisão da tentativaQuestionário sobre padrões de projeto  revisão da tentativa
Questionário sobre padrões de projeto revisão da tentativa
 
OCP - The Open Close Principle - Princípio aberto/fechado
OCP - The Open Close Principle - Princípio aberto/fechadoOCP - The Open Close Principle - Princípio aberto/fechado
OCP - The Open Close Principle - Princípio aberto/fechado
 
Umlv4 090813182632-phpapp02
Umlv4 090813182632-phpapp02Umlv4 090813182632-phpapp02
Umlv4 090813182632-phpapp02
 
Dojo solid
Dojo solidDojo solid
Dojo solid
 
Modelo de desenvolvimento de software em 3 camadas para Wordpress
Modelo de desenvolvimento de software em 3 camadas para WordpressModelo de desenvolvimento de software em 3 camadas para Wordpress
Modelo de desenvolvimento de software em 3 camadas para Wordpress
 
poster
posterposter
poster
 

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