SlideShare uma empresa Scribd logo
• Desenvolvedor.
• Capixaba residente no
  Rio de Janeiro.
• Pouco mais de 1 ano de PU.
• Time de App Services.
• Flamengo.
• www.flamengorj.com.br
• Fazer software NÃO é fácil.
• Fazer software bem projetado para
  ser mantido é ainda mais complicado.
• Orientação a Objeto mal inplementada é igual
  ao paradigma procedural.
• Não é necessário ser nenhum gênio.
Mas...
• Como profissionais temos
  obrigação de estudar
  constantemente.
• Design pattern
• Princípios de design
S   Single responsibility
O   Open/closed
L   Liskov substitution
I   Interface segregation
D   Dependency inversion
• Robert C. Martin (“Uncle Bob”)
• Início dos anos 2000
• Conjunto de boas práticas



Curiosidade: O termo SOLID não foi inventado
por Uncle Bob.
Princípio da Responsabilidade Única
“Nunca deve haver mais do que uma razão para
           uma classe de mudar”
- “Classe, o que você faz?”
    (a pergunta pode ser feita a método também)
Mudanças vão acontecer
• Menos responsabilidade, menos dificuldade
• Baixo acoplamento
• Facilidade de leitura do código
Princípio do Aberto/Fechado
  “Entidades de software (classes, módulos,
funções, etc) devem ser abertas para extensão,
       mas fechadas para modificação”


                                     Bertrand Meyer
• Evolução sem medo
• Não criar bugs em código que funciona
• Strategy Pattern
• Decorator Pattern
Princípio da Substituição de Liskov
“Deve ser possível substituir uma classe base
        por suas classes derivadas”

                                    Barbara Liskov e
                                    Jeannette Wing
Quadrado herda de retângulo?
Princípio de Segregação de Interface
“Clientes não devem ser forçados a depender de
        interfaces que eles não vão usar”
OBS.: Espero que pelo menos não
                       tenha sido no Internet Explorer 




throw new NotImplementedException();
• Facilitar a implementação de interfaces.
• Ter interfaces mais específicas (SRP, certo? ).
Princípio de Inversão de Dependência
 “Módulos de alto nível não deve depender de
módulos de baixo nível. Ambos devem depender
                 de abstrações.”
 “Abstrações não devem depender de detalhes.
   Detalhes devem depender de abstrações.”
• Sistema desacoplado e flexível.
• Código testável.
• Facilidade de mudança.
• Princípios e padrões são itens de boas
  práticas.
• Avaliar a situação antes de aplicar.
• Prós e contras.
• Wikipedia: http://en.wikipedia.org/wiki/SOLID_(object-oriented_design)
• Blog Vinícius Quaiato: http://viniciusquaiato.com/
• Blog Lambda3: http://blog.lambda3.com.br
• .Net Architects Podcast: http://podcast.dotnetarchitects.net
Princípios SOLID

Mais conteúdo relacionado

Mais procurados

1 requisitos funcionais e não funcionais ok
1  requisitos funcionais e não funcionais ok1  requisitos funcionais e não funcionais ok
1 requisitos funcionais e não funcionais okMarcos Morais de Sousa
 
Plano Diretor de Tecnologia da Informação
Plano Diretor de Tecnologia da InformaçãoPlano Diretor de Tecnologia da Informação
Plano Diretor de Tecnologia da InformaçãoHelio Rebouças
 
Metodologias de Desenvolvimento de Software
Metodologias de Desenvolvimento de SoftwareMetodologias de Desenvolvimento de Software
Metodologias de Desenvolvimento de Software
Álvaro Farias Pinheiro
 
Aula 1 - Introdução a Engenharia de Software
Aula 1 -  Introdução a Engenharia de SoftwareAula 1 -  Introdução a Engenharia de Software
Aula 1 - Introdução a Engenharia de Software
Leinylson Fontinele
 
Aula 1 - Revisão UML
Aula 1 - Revisão UMLAula 1 - Revisão UML
Aula 1 - Revisão UML
Rosanete Grassiani dos Santos
 
Metodologias Ágeis para o Desenvolvimento de Software
Metodologias Ágeis para o Desenvolvimento de SoftwareMetodologias Ágeis para o Desenvolvimento de Software
Metodologias Ágeis para o Desenvolvimento de Software
Adolfo Neto
 
Aula 05 - UML e Padrões de Projeto
Aula 05 - UML e Padrões de ProjetoAula 05 - UML e Padrões de Projeto
Aula 05 - UML e Padrões de Projeto
Vinícius de Paula
 
Aula - Introdução a Engenharia de Software
Aula - Introdução a Engenharia de SoftwareAula - Introdução a Engenharia de Software
Aula - Introdução a Engenharia de Software
Cloves da Rocha
 
Aula 6 - Design e Processo de Design de Interfaces de Usuário
Aula 6 - Design e Processo de Design de Interfaces de UsuárioAula 6 - Design e Processo de Design de Interfaces de Usuário
Aula 6 - Design e Processo de Design de Interfaces de Usuário
André Constantino da Silva
 
Tecnicas Para Planejamento E Execucao De Testes De Software
Tecnicas Para Planejamento E Execucao De Testes De SoftwareTecnicas Para Planejamento E Execucao De Testes De Software
Tecnicas Para Planejamento E Execucao De Testes De Softwaremarthahuback
 
Introducao a Arquitetura de Software
Introducao a Arquitetura de SoftwareIntroducao a Arquitetura de Software
Introducao a Arquitetura de Software
UFPA
 
Clean Code
Clean CodeClean Code
Clean Code
Bruno Lui
 
Arquitetura de Software - Uma visão gerencial
Arquitetura de Software - Uma visão gerencialArquitetura de Software - Uma visão gerencial
Arquitetura de Software - Uma visão gerencial
Alexandre Leão
 
Clean Code na Prática
Clean Code na PráticaClean Code na Prática
Clean Code na Prática
Douglas Siviotti
 
Analise de Requisitos
Analise de RequisitosAnalise de Requisitos
Analise de Requisitoselliando dias
 
Fundamentos de Pruebas de Software - Capítulo 3
Fundamentos de Pruebas de Software - Capítulo 3Fundamentos de Pruebas de Software - Capítulo 3
Fundamentos de Pruebas de Software - Capítulo 3
Professional Testing
 
Introdução básica ao JavaScript
Introdução básica ao JavaScriptIntrodução básica ao JavaScript
Introdução básica ao JavaScript
Carlos Eduardo Kadu
 
Metodologia Ágil
Metodologia ÁgilMetodologia Ágil
Metodologia Ágil
Elaine Cecília Gatto
 
Engenharia de Requisitos
Engenharia de RequisitosEngenharia de Requisitos
Engenharia de Requisitos
Cloves da Rocha
 

Mais procurados (20)

1 requisitos funcionais e não funcionais ok
1  requisitos funcionais e não funcionais ok1  requisitos funcionais e não funcionais ok
1 requisitos funcionais e não funcionais ok
 
Plano Diretor de Tecnologia da Informação
Plano Diretor de Tecnologia da InformaçãoPlano Diretor de Tecnologia da Informação
Plano Diretor de Tecnologia da Informação
 
Metodologias de Desenvolvimento de Software
Metodologias de Desenvolvimento de SoftwareMetodologias de Desenvolvimento de Software
Metodologias de Desenvolvimento de Software
 
Aula 1 - Introdução a Engenharia de Software
Aula 1 -  Introdução a Engenharia de SoftwareAula 1 -  Introdução a Engenharia de Software
Aula 1 - Introdução a Engenharia de Software
 
Aula 1 - Revisão UML
Aula 1 - Revisão UMLAula 1 - Revisão UML
Aula 1 - Revisão UML
 
Metodologias Ágeis para o Desenvolvimento de Software
Metodologias Ágeis para o Desenvolvimento de SoftwareMetodologias Ágeis para o Desenvolvimento de Software
Metodologias Ágeis para o Desenvolvimento de Software
 
Aula 05 - UML e Padrões de Projeto
Aula 05 - UML e Padrões de ProjetoAula 05 - UML e Padrões de Projeto
Aula 05 - UML e Padrões de Projeto
 
Aula - Introdução a Engenharia de Software
Aula - Introdução a Engenharia de SoftwareAula - Introdução a Engenharia de Software
Aula - Introdução a Engenharia de Software
 
Aula 6 - Design e Processo de Design de Interfaces de Usuário
Aula 6 - Design e Processo de Design de Interfaces de UsuárioAula 6 - Design e Processo de Design de Interfaces de Usuário
Aula 6 - Design e Processo de Design de Interfaces de Usuário
 
Tecnicas Para Planejamento E Execucao De Testes De Software
Tecnicas Para Planejamento E Execucao De Testes De SoftwareTecnicas Para Planejamento E Execucao De Testes De Software
Tecnicas Para Planejamento E Execucao De Testes De Software
 
Introducao a Arquitetura de Software
Introducao a Arquitetura de SoftwareIntroducao a Arquitetura de Software
Introducao a Arquitetura de Software
 
Clean Code
Clean CodeClean Code
Clean Code
 
Arquitetura de Software - Uma visão gerencial
Arquitetura de Software - Uma visão gerencialArquitetura de Software - Uma visão gerencial
Arquitetura de Software - Uma visão gerencial
 
Clean Code na Prática
Clean Code na PráticaClean Code na Prática
Clean Code na Prática
 
Modelo V
Modelo VModelo V
Modelo V
 
Analise de Requisitos
Analise de RequisitosAnalise de Requisitos
Analise de Requisitos
 
Fundamentos de Pruebas de Software - Capítulo 3
Fundamentos de Pruebas de Software - Capítulo 3Fundamentos de Pruebas de Software - Capítulo 3
Fundamentos de Pruebas de Software - Capítulo 3
 
Introdução básica ao JavaScript
Introdução básica ao JavaScriptIntrodução básica ao JavaScript
Introdução básica ao JavaScript
 
Metodologia Ágil
Metodologia ÁgilMetodologia Ágil
Metodologia Ágil
 
Engenharia de Requisitos
Engenharia de RequisitosEngenharia de Requisitos
Engenharia de Requisitos
 

Destaque

Apostila solidworks
Apostila solidworksApostila solidworks
Apostila solidworks
mgsilv004
 
Tutorial AngularJS - episódio 9 - $http services
Tutorial AngularJS - episódio 9 - $http servicesTutorial AngularJS - episódio 9 - $http services
Tutorial AngularJS - episódio 9 - $http services
Jose Naves Moura Neto
 
Tutorial AngularJS - episódio 8 - serviços
Tutorial AngularJS - episódio 8 - serviçosTutorial AngularJS - episódio 8 - serviços
Tutorial AngularJS - episódio 8 - serviços
Jose Naves Moura Neto
 
Apresentação solid works
Apresentação solid worksApresentação solid works
Apresentação solid works
Eduardo Alcântara F. da Silva
 
SOLID principles-Present
SOLID principles-PresentSOLID principles-Present
SOLID principles-PresentQuang Nguyen
 
SOLID - ¿Cómo lo aplico a mi código?
SOLID - ¿Cómo lo aplico a mi código?SOLID - ¿Cómo lo aplico a mi código?
SOLID - ¿Cómo lo aplico a mi código?
Juan José Fuchs Cerdeña
 
solidworks
solidworkssolidworks
solidworks
Amit Kamboj
 
Solidworks powerpoint
Solidworks powerpointSolidworks powerpoint
Solidworks powerpoint
Ezoom404
 

Destaque (8)

Apostila solidworks
Apostila solidworksApostila solidworks
Apostila solidworks
 
Tutorial AngularJS - episódio 9 - $http services
Tutorial AngularJS - episódio 9 - $http servicesTutorial AngularJS - episódio 9 - $http services
Tutorial AngularJS - episódio 9 - $http services
 
Tutorial AngularJS - episódio 8 - serviços
Tutorial AngularJS - episódio 8 - serviçosTutorial AngularJS - episódio 8 - serviços
Tutorial AngularJS - episódio 8 - serviços
 
Apresentação solid works
Apresentação solid worksApresentação solid works
Apresentação solid works
 
SOLID principles-Present
SOLID principles-PresentSOLID principles-Present
SOLID principles-Present
 
SOLID - ¿Cómo lo aplico a mi código?
SOLID - ¿Cómo lo aplico a mi código?SOLID - ¿Cómo lo aplico a mi código?
SOLID - ¿Cómo lo aplico a mi código?
 
solidworks
solidworkssolidworks
solidworks
 
Solidworks powerpoint
Solidworks powerpointSolidworks powerpoint
Solidworks powerpoint
 

Semelhante a Princípios SOLID

Princípios SOLID
Princípios SOLIDPrincípios SOLID
Princípios SOLID
Cesar Vilarim
 
Clean architecture
Clean architectureClean architecture
Clean architecture
Charles Viegas
 
Potencializando a qualidade de código
Potencializando a qualidade de códigoPotencializando a qualidade de código
Potencializando a qualidade de código
Maykel dos Santos Braz, ZCE
 
Cocoaheads Brasil SP - 26/04/16 - SOLID
Cocoaheads Brasil SP - 26/04/16 - SOLIDCocoaheads Brasil SP - 26/04/16 - SOLID
Cocoaheads Brasil SP - 26/04/16 - SOLID
Bruno Mazzo
 
Clean Code - Boas práticas para desenvolvimento
Clean Code - Boas práticas para desenvolvimentoClean Code - Boas práticas para desenvolvimento
Clean Code - Boas práticas para desenvolvimento
Paulo Henrique da Silva
 
Bolovo - problema antigo de arquitetura de software - não use por aí
Bolovo - problema antigo de arquitetura de software - não use por aíBolovo - problema antigo de arquitetura de software - não use por aí
Bolovo - problema antigo de arquitetura de software - não use por aí
Priscila Mayumi
 
Programação orientada à objetos & mvc
Programação orientada à objetos & mvcProgramação orientada à objetos & mvc
Programação orientada à objetos & mvc
Jhordam Siqueira
 
Aprensentacao oo-trincheiras
Aprensentacao oo-trincheirasAprensentacao oo-trincheiras
Aprensentacao oo-trincheirasHigor César
 
Design Patterns on Rails
Design Patterns on RailsDesign Patterns on Rails
Design Patterns on Railstchandy
 
Clean Architecture
Clean ArchitectureClean Architecture
Clean Architecture
Rodrigo Branas
 
Mwds01 - Introdução a Arquitetura e Projeto de Soluções Mobile
Mwds01 - Introdução a Arquitetura e Projeto de Soluções MobileMwds01 - Introdução a Arquitetura e Projeto de Soluções Mobile
Mwds01 - Introdução a Arquitetura e Projeto de Soluções Mobile
Wsdevs Desenvolvedores
 
Aspectos do aprendizado do paradigma orientado a objetos por programadores pr...
Aspectos do aprendizado do paradigma orientado a objetos por programadores pr...Aspectos do aprendizado do paradigma orientado a objetos por programadores pr...
Aspectos do aprendizado do paradigma orientado a objetos por programadores pr...
Rodrigo Vieira
 
Programação de Elite - Requisito dado é código implementado
Programação de Elite - Requisito dado é código implementadoProgramação de Elite - Requisito dado é código implementado
Programação de Elite - Requisito dado é código implementado
Samuel David
 
Software robusto e flexível
Software robusto e flexívelSoftware robusto e flexível
Software robusto e flexível
Robson Bittencourt
 
Um melhor frontend com elm
Um melhor frontend com elmUm melhor frontend com elm
Um melhor frontend com elm
Lucas Teles
 
TDD com Código Legado - "Atualizado"
TDD com Código Legado - "Atualizado"TDD com Código Legado - "Atualizado"
TDD com Código Legado - "Atualizado"
Cesar Romero
 
Palestra ror edted
Palestra ror edtedPalestra ror edted
Palestra ror edted
brunoaalves
 
Arquitetura de Microservicos
Arquitetura de MicroservicosArquitetura de Microservicos
Arquitetura de Microservicos
Norberto Enomoto
 
Aula05 frameworks
Aula05 frameworksAula05 frameworks
Aula05 frameworks
ssuser648be2
 

Semelhante a Princípios SOLID (20)

Princípios SOLID
Princípios SOLIDPrincípios SOLID
Princípios SOLID
 
Clean architecture
Clean architectureClean architecture
Clean architecture
 
Potencializando a qualidade de código
Potencializando a qualidade de códigoPotencializando a qualidade de código
Potencializando a qualidade de código
 
Cocoaheads Brasil SP - 26/04/16 - SOLID
Cocoaheads Brasil SP - 26/04/16 - SOLIDCocoaheads Brasil SP - 26/04/16 - SOLID
Cocoaheads Brasil SP - 26/04/16 - SOLID
 
Clean Code - Boas práticas para desenvolvimento
Clean Code - Boas práticas para desenvolvimentoClean Code - Boas práticas para desenvolvimento
Clean Code - Boas práticas para desenvolvimento
 
Bolovo - problema antigo de arquitetura de software - não use por aí
Bolovo - problema antigo de arquitetura de software - não use por aíBolovo - problema antigo de arquitetura de software - não use por aí
Bolovo - problema antigo de arquitetura de software - não use por aí
 
Programação orientada à objetos & mvc
Programação orientada à objetos & mvcProgramação orientada à objetos & mvc
Programação orientada à objetos & mvc
 
Aprensentacao oo-trincheiras
Aprensentacao oo-trincheirasAprensentacao oo-trincheiras
Aprensentacao oo-trincheiras
 
Design Patterns on Rails
Design Patterns on RailsDesign Patterns on Rails
Design Patterns on Rails
 
Clean Architecture
Clean ArchitectureClean Architecture
Clean Architecture
 
Mwds01 - Introdução a Arquitetura e Projeto de Soluções Mobile
Mwds01 - Introdução a Arquitetura e Projeto de Soluções MobileMwds01 - Introdução a Arquitetura e Projeto de Soluções Mobile
Mwds01 - Introdução a Arquitetura e Projeto de Soluções Mobile
 
Codigo limpo.pptx
Codigo limpo.pptxCodigo limpo.pptx
Codigo limpo.pptx
 
Aspectos do aprendizado do paradigma orientado a objetos por programadores pr...
Aspectos do aprendizado do paradigma orientado a objetos por programadores pr...Aspectos do aprendizado do paradigma orientado a objetos por programadores pr...
Aspectos do aprendizado do paradigma orientado a objetos por programadores pr...
 
Programação de Elite - Requisito dado é código implementado
Programação de Elite - Requisito dado é código implementadoProgramação de Elite - Requisito dado é código implementado
Programação de Elite - Requisito dado é código implementado
 
Software robusto e flexível
Software robusto e flexívelSoftware robusto e flexível
Software robusto e flexível
 
Um melhor frontend com elm
Um melhor frontend com elmUm melhor frontend com elm
Um melhor frontend com elm
 
TDD com Código Legado - "Atualizado"
TDD com Código Legado - "Atualizado"TDD com Código Legado - "Atualizado"
TDD com Código Legado - "Atualizado"
 
Palestra ror edted
Palestra ror edtedPalestra ror edted
Palestra ror edted
 
Arquitetura de Microservicos
Arquitetura de MicroservicosArquitetura de Microservicos
Arquitetura de Microservicos
 
Aula05 frameworks
Aula05 frameworksAula05 frameworks
Aula05 frameworks
 

Princípios SOLID

  • 1.
  • 2. • Desenvolvedor. • Capixaba residente no Rio de Janeiro. • Pouco mais de 1 ano de PU. • Time de App Services. • Flamengo. • www.flamengorj.com.br
  • 3. • Fazer software NÃO é fácil. • Fazer software bem projetado para ser mantido é ainda mais complicado.
  • 4. • Orientação a Objeto mal inplementada é igual ao paradigma procedural.
  • 5. • Não é necessário ser nenhum gênio. Mas... • Como profissionais temos obrigação de estudar constantemente.
  • 6. • Design pattern • Princípios de design
  • 7. S Single responsibility O Open/closed L Liskov substitution I Interface segregation D Dependency inversion
  • 8. • Robert C. Martin (“Uncle Bob”) • Início dos anos 2000 • Conjunto de boas práticas Curiosidade: O termo SOLID não foi inventado por Uncle Bob.
  • 9. Princípio da Responsabilidade Única “Nunca deve haver mais do que uma razão para uma classe de mudar”
  • 10. - “Classe, o que você faz?” (a pergunta pode ser feita a método também)
  • 11. Mudanças vão acontecer • Menos responsabilidade, menos dificuldade • Baixo acoplamento • Facilidade de leitura do código
  • 12.
  • 13.
  • 14. Princípio do Aberto/Fechado “Entidades de software (classes, módulos, funções, etc) devem ser abertas para extensão, mas fechadas para modificação” Bertrand Meyer
  • 15. • Evolução sem medo • Não criar bugs em código que funciona
  • 16. • Strategy Pattern • Decorator Pattern
  • 17.
  • 18. Princípio da Substituição de Liskov “Deve ser possível substituir uma classe base por suas classes derivadas” Barbara Liskov e Jeannette Wing
  • 19. Quadrado herda de retângulo?
  • 20.
  • 21. Princípio de Segregação de Interface “Clientes não devem ser forçados a depender de interfaces que eles não vão usar”
  • 22. OBS.: Espero que pelo menos não tenha sido no Internet Explorer  throw new NotImplementedException();
  • 23. • Facilitar a implementação de interfaces. • Ter interfaces mais específicas (SRP, certo? ).
  • 24.
  • 25.
  • 26. Princípio de Inversão de Dependência “Módulos de alto nível não deve depender de módulos de baixo nível. Ambos devem depender de abstrações.” “Abstrações não devem depender de detalhes. Detalhes devem depender de abstrações.”
  • 27. • Sistema desacoplado e flexível. • Código testável. • Facilidade de mudança.
  • 28.
  • 29.
  • 30. • Princípios e padrões são itens de boas práticas. • Avaliar a situação antes de aplicar. • Prós e contras.
  • 31. • Wikipedia: http://en.wikipedia.org/wiki/SOLID_(object-oriented_design) • Blog Vinícius Quaiato: http://viniciusquaiato.com/ • Blog Lambda3: http://blog.lambda3.com.br • .Net Architects Podcast: http://podcast.dotnetarchitects.net

Notas do Editor

  1. Rever