SlideShare a Scribd company logo
1 of 32
• 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
Desenvolvedor Capixaba fala sobre SOLID e boas práticas de design

More Related Content

What's hot

TDD - Test Driven Development
TDD - Test Driven DevelopmentTDD - Test Driven Development
TDD - Test Driven DevelopmentElias Nogueira
 
Aula 1 requisitos
Aula 1   requisitosAula 1   requisitos
Aula 1 requisitoslicardino
 
Object Oriented Design SOLID Principles
Object Oriented Design SOLID PrinciplesObject Oriented Design SOLID Principles
Object Oriented Design SOLID Principlesrainynovember12
 
Introdução à Programação Web com Angular
Introdução à Programação Web com AngularIntrodução à Programação Web com Angular
Introdução à Programação Web com AngularElmano Cavalcanti
 
Diagrama de implantação
Diagrama de implantaçãoDiagrama de implantação
Diagrama de implantaçãoelliando dias
 
Metodologias de Desenvolvimento de Software
Metodologias de Desenvolvimento de SoftwareMetodologias de Desenvolvimento de Software
Metodologias de Desenvolvimento de SoftwareÁlvaro Farias Pinheiro
 
Introdução a Testes de Software - Unidade I
Introdução a Testes de Software - Unidade IIntrodução a Testes de Software - Unidade I
Introdução a Testes de Software - Unidade IJoão Lourenço
 
Gerência de Configuração
Gerência de ConfiguraçãoGerência de Configuração
Gerência de ConfiguraçãoWagner Zaparoli
 
Fundamentos de Padrões de Projeto de Software
Fundamentos de Padrões de Projeto de SoftwareFundamentos de Padrões de Projeto de Software
Fundamentos de Padrões de Projeto de SoftwareÁlvaro Farias Pinheiro
 
Aula1 e aula2 - Analise e Projeto de Sistemas
Aula1 e aula2 - Analise e Projeto de SistemasAula1 e aula2 - Analise e Projeto de Sistemas
Aula1 e aula2 - Analise e Projeto de SistemasGustavo Gonzalez
 

What's hot (20)

JAVA - Orientação a Objetos
JAVA - Orientação a ObjetosJAVA - Orientação a Objetos
JAVA - Orientação a Objetos
 
Aula 1 - Revisão UML
Aula 1 - Revisão UMLAula 1 - Revisão UML
Aula 1 - Revisão UML
 
TDD - Test Driven Development
TDD - Test Driven DevelopmentTDD - Test Driven Development
TDD - Test Driven Development
 
Aula 1 requisitos
Aula 1   requisitosAula 1   requisitos
Aula 1 requisitos
 
Object Oriented Design SOLID Principles
Object Oriented Design SOLID PrinciplesObject Oriented Design SOLID Principles
Object Oriented Design SOLID Principles
 
Fundamentos da Engenharia de Software
Fundamentos da Engenharia de SoftwareFundamentos da Engenharia de Software
Fundamentos da Engenharia de Software
 
Introdução à Programação Web com Angular
Introdução à Programação Web com AngularIntrodução à Programação Web com Angular
Introdução à Programação Web com Angular
 
Diagrama de implantação
Diagrama de implantaçãoDiagrama de implantação
Diagrama de implantação
 
Metodologias de Desenvolvimento de Software
Metodologias de Desenvolvimento de SoftwareMetodologias de Desenvolvimento de Software
Metodologias de Desenvolvimento de Software
 
Clean Code
Clean CodeClean Code
Clean Code
 
Domain Driven Design
Domain Driven DesignDomain Driven Design
Domain Driven Design
 
Introdução a Testes de Software - Unidade I
Introdução a Testes de Software - Unidade IIntrodução a Testes de Software - Unidade I
Introdução a Testes de Software - Unidade I
 
Aula javascript
Aula  javascriptAula  javascript
Aula javascript
 
JSP: Introdução Parte 1
JSP: Introdução Parte 1JSP: Introdução Parte 1
JSP: Introdução Parte 1
 
Domain Driven Design
Domain Driven DesignDomain Driven Design
Domain Driven Design
 
Gerência de Configuração
Gerência de ConfiguraçãoGerência de Configuração
Gerência de Configuração
 
Fundamentos de Padrões de Projeto de Software
Fundamentos de Padrões de Projeto de SoftwareFundamentos de Padrões de Projeto de Software
Fundamentos de Padrões de Projeto de Software
 
Modelagem de dados
Modelagem de dadosModelagem de dados
Modelagem de dados
 
Aula1 e aula2 - Analise e Projeto de Sistemas
Aula1 e aula2 - Analise e Projeto de SistemasAula1 e aula2 - Analise e Projeto de Sistemas
Aula1 e aula2 - Analise e Projeto de Sistemas
 
Clean Architecture
Clean ArchitectureClean Architecture
Clean Architecture
 

Viewers also liked

Apostila solidworks
Apostila solidworksApostila solidworks
Apostila solidworksmgsilv004
 
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 servicesJose 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çosJose Naves Moura Neto
 
SOLID principles-Present
SOLID principles-PresentSOLID principles-Present
SOLID principles-PresentQuang Nguyen
 
Solidworks powerpoint
Solidworks powerpointSolidworks powerpoint
Solidworks powerpointEzoom404
 

Viewers also liked (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
 

Similar to Desenvolvedor Capixaba fala sobre SOLID e boas práticas de design

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 - SOLIDBruno 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 desenvolvimentoPaulo 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 & mvcJhordam 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
 
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 MobileWsdevs 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 implementadoSamuel David
 
Um melhor frontend com elm
Um melhor frontend com elmUm melhor frontend com elm
Um melhor frontend com elmLucas 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 edtedbrunoaalves
 
Arquitetura de Microservicos
Arquitetura de MicroservicosArquitetura de Microservicos
Arquitetura de MicroservicosNorberto Enomoto
 

Similar to Desenvolvedor Capixaba fala sobre SOLID e boas práticas de design (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
 

Desenvolvedor Capixaba fala sobre SOLID e boas práticas de design

  • 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

Editor's Notes

  1. Rever