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

Destaque

Towards a theory of construction as production by projects
Towards a theory of construction as production by projectsTowards a theory of construction as production by projects
Towards a theory of construction as production by projects
Universidade Federal Fluminense
 
Towards a theory of construction as production by projects
Towards a theory of construction as production by projectsTowards a theory of construction as production by projects
Towards a theory of construction as production by projects
Universidade Federal Fluminense
 
Presentación conferencia colegio de ingenieros 2014
Presentación conferencia colegio de ingenieros   2014Presentación conferencia colegio de ingenieros   2014
Presentación conferencia colegio de ingenieros 2014
Armando Vicente Tauro
 
Caracterización de la cadena de exportación de peruano
Caracterización de la cadena de exportación de peruanoCaracterización de la cadena de exportación de peruano
Caracterización de la cadena de exportación de peruano
Armando Vicente Tauro
 
Presentacion uruguay 2013
Presentacion uruguay 2013Presentacion uruguay 2013
Presentacion uruguay 2013
CADEX SCZ
 
ENGLISH FOR ALL
ENGLISH FOR ALLENGLISH FOR ALL
ENGLISH FOR ALL
sacha
 
Economia exportadora 2015 semestre
Economia exportadora 2015 semestre Economia exportadora 2015 semestre
Economia exportadora 2015 semestre
CADEX SCZ
 

Destaque (20)

Os desmandos públicos em vários momentos: a atuação do Tribunal de Contas da ...
Os desmandos públicos em vários momentos: a atuação do Tribunal de Contas da ...Os desmandos públicos em vários momentos: a atuação do Tribunal de Contas da ...
Os desmandos públicos em vários momentos: a atuação do Tribunal de Contas da ...
 
Towards a theory of construction as production by projects
Towards a theory of construction as production by projectsTowards a theory of construction as production by projects
Towards a theory of construction as production by projects
 
Towards a theory of construction as production by projects
Towards a theory of construction as production by projectsTowards a theory of construction as production by projects
Towards a theory of construction as production by projects
 
Cenários críticos na implantação de empreendimentos industriais
Cenários críticos na implantação de empreendimentos industriaisCenários críticos na implantação de empreendimentos industriais
Cenários críticos na implantação de empreendimentos industriais
 
Regiondo Ticket-Shop für Freizeitanbieter
Regiondo Ticket-Shop für FreizeitanbieterRegiondo Ticket-Shop für Freizeitanbieter
Regiondo Ticket-Shop für Freizeitanbieter
 
Presentación conferencia colegio de ingenieros 2014
Presentación conferencia colegio de ingenieros   2014Presentación conferencia colegio de ingenieros   2014
Presentación conferencia colegio de ingenieros 2014
 
Caracterización de la cadena de exportación de peruano
Caracterización de la cadena de exportación de peruanoCaracterización de la cadena de exportación de peruano
Caracterización de la cadena de exportación de peruano
 
Management, Marketing & Informationssysteme - Marketing in Netzeffektmärkten
Management, Marketing & Informationssysteme - Marketing in NetzeffektmärktenManagement, Marketing & Informationssysteme - Marketing in Netzeffektmärkten
Management, Marketing & Informationssysteme - Marketing in Netzeffektmärkten
 
Metodologias de mensuração de riscos
Metodologias de mensuração de riscosMetodologias de mensuração de riscos
Metodologias de mensuração de riscos
 
Impressionen
ImpressionenImpressionen
Impressionen
 
Estruturando uma matriz de decisão para uma obra civil
Estruturando uma matriz de decisão para uma obra civilEstruturando uma matriz de decisão para uma obra civil
Estruturando uma matriz de decisão para uma obra civil
 
Os desmandos públicos em vários momentos: a atuação do tribunal de contas da...
Os desmandos públicos em vários momentos:  a atuação do tribunal de contas da...Os desmandos públicos em vários momentos:  a atuação do tribunal de contas da...
Os desmandos públicos em vários momentos: a atuação do tribunal de contas da...
 
Presentacion uruguay 2013
Presentacion uruguay 2013Presentacion uruguay 2013
Presentacion uruguay 2013
 
Detour Gold corporate presentation
Detour Gold corporate presentationDetour Gold corporate presentation
Detour Gold corporate presentation
 
Obras completas de Rui Barbosa - discursos parlamentares - a falta de justiça...
Obras completas de Rui Barbosa - discursos parlamentares - a falta de justiça...Obras completas de Rui Barbosa - discursos parlamentares - a falta de justiça...
Obras completas de Rui Barbosa - discursos parlamentares - a falta de justiça...
 
Base conceptual propuesta tecnica manual
Base conceptual propuesta tecnica manualBase conceptual propuesta tecnica manual
Base conceptual propuesta tecnica manual
 
ENGLISH FOR ALL
ENGLISH FOR ALLENGLISH FOR ALL
ENGLISH FOR ALL
 
Projeto vasconcelos jardim - lixo - jonas
Projeto   vasconcelos jardim - lixo - jonasProjeto   vasconcelos jardim - lixo - jonas
Projeto vasconcelos jardim - lixo - jonas
 
Cenários críticos na implantação de empreendimentos industriais
Cenários críticos na implantação de empreendimentos industriaisCenários críticos na implantação de empreendimentos industriais
Cenários críticos na implantação de empreendimentos industriais
 
Economia exportadora 2015 semestre
Economia exportadora 2015 semestre Economia exportadora 2015 semestre
Economia exportadora 2015 semestre
 

Semelhante a SRP - Single Responsability Principle

pec-12-patterns-intro.ppt
pec-12-patterns-intro.pptpec-12-patterns-intro.ppt
pec-12-patterns-intro.ppt
ssuser7025cf
 
Apresentação - Single responsability principle
Apresentação - Single responsability principleApresentação - Single responsability principle
Apresentação - Single responsability principle
Thiago Ribeiro
 
Apresentação - Single responsability principle
Apresentação - Single responsability principleApresentação - Single responsability principle
Apresentação - Single responsability principle
Thiago Ribeiro
 
Poo apostila a programacao orientada
Poo   apostila a programacao orientadaPoo   apostila a programacao orientada
Poo apostila a programacao orientada
robinhoct
 
Umlv4 090813182632-phpapp02
Umlv4 090813182632-phpapp02Umlv4 090813182632-phpapp02
Umlv4 090813182632-phpapp02
Jhonefj
 

Semelhante a SRP - Single Responsability Principle (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
 

Mais de Engenharia de Software Ágil

Mais de Engenharia de Software Ágil (20)

Sap – stablility and abstract principle
Sap – stablility and abstract principleSap – stablility and abstract principle
Sap – stablility and abstract principle
 
Sap – stablility and abstract principle
Sap – stablility and abstract principleSap – stablility and abstract principle
Sap – stablility and abstract principle
 
Sap – stablility and abstract principle
Sap – stablility and abstract principleSap – stablility and abstract principle
Sap – stablility and abstract principle
 
Common closure principle
Common closure principleCommon closure principle
Common closure principle
 
Common closure principle
Common closure principle Common closure principle
Common closure principle
 
Acyclic dependencies principle
Acyclic dependencies principleAcyclic dependencies principle
Acyclic dependencies principle
 
Acyclic dependencies principle (adp)
Acyclic dependencies principle  (adp)Acyclic dependencies principle  (adp)
Acyclic dependencies principle (adp)
 
Reuse release equivalence principle
Reuse release equivalence principleReuse release equivalence principle
Reuse release equivalence principle
 
Rep reuse release equivalence principle
Rep reuse release equivalence principleRep reuse release equivalence principle
Rep reuse release equivalence principle
 
Sdp – stable dependencies principles
Sdp – stable dependencies principlesSdp – stable dependencies principles
Sdp – stable dependencies principles
 
principio de reutilização comum
principio de reutilização comumprincipio de reutilização comum
principio de reutilização comum
 
Princípio law of demeter
Princípio law of demeterPrincípio law of demeter
Princípio law of demeter
 
Lod law of demeter
Lod law of demeterLod law of demeter
Lod law of demeter
 
Dip the dependency inversion principle
Dip   the dependency inversion principleDip   the dependency inversion principle
Dip the dependency inversion principle
 
Dip the dependency inversion principle
Dip   the dependency inversion principleDip   the dependency inversion principle
Dip the dependency inversion principle
 
Dip the dependency inversion principle
Dip   the dependency inversion principleDip   the dependency inversion principle
Dip the dependency inversion principle
 
(ISP) - Interface Segregation Principle
(ISP)  - Interface Segregation Principle(ISP)  - Interface Segregation Principle
(ISP) - Interface Segregation Principle
 
LSP – The Liskov Substitution Principle
LSP – The Liskov Substitution PrincipleLSP – The Liskov Substitution Principle
LSP – The Liskov Substitution Principle
 
Princípio Law Of Demeter (LOD)
Princípio Law Of Demeter (LOD)Princípio Law Of Demeter (LOD)
Princípio Law Of Demeter (LOD)
 
TDD - Test Driven Development
TDD - Test Driven DevelopmentTDD - Test Driven Development
TDD - Test Driven Development
 

SRP - Single Responsability Principle

  • 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