Upgrade to Pro — share decks privately, control downloads, hide ads and more …

SOLID

 SOLID

Princípios para um melhor design de código

Avatar for Gabriel Sobrinho

Gabriel Sobrinho

July 28, 2012
Tweet

More Decks by Gabriel Sobrinho

Other Decks in Programming

Transcript

  1. WHO ARE WE? • @Sobrinho • Co-founder at Code5 •

    Co-founder at Nohup • Co-founder at Hite • Software Architect • @MarceloCajueiro • Co-founder at Code5 • Project Leader at Nohup • Software Engineer 2
  2. HISTÓRIA • Introduzida pelo Uncle Bob (Robert Martin) em 2000

    • Inspirado no subaproveitamento da POO • Com foco principal no acoplamento 7
  3. SOLID • SRP - Single Responsibility Principle • OCP -

    Open/Closed Principle • LSP - Liskov Substitution Principle • ISP - Interface Segregation Principle • DIP - Dependency Inversion Principle 8
  4. SINGLE RESPONSIBILITY PRINCIPLE • Uma entidade (classe, método, módulo) deve

    ter uma única responsabilidade • Responsabilidade pode ser definida como “razão para mudar” 9
  5. OPEN-CLOSED PRINCIPLE (INICIALMENTE) • Uma classe deve estar aberta para

    extensão mas fechada para modificação • Alterar a classe apenas para arrumar bugs • Novas funcionalidades são adicionadas em heranças 12
  6. OPEN-CLOSED PRINCIPLE (ATUALMENTE) • Uma classe deve manter a sua

    interface (API pública) • A implementação pode ser alterada livremente 13
  7. LISKOV SUBSTITUTION PRINCIPLE • Deve ser possível substituir uma classe

    por suas classes derivadas em qualquer ponto do código • As propriedades do programa não devem ser alteradas para isso acontecer 15
  8. Pode-se usar qualquer uma das heranças e não irá quebrar

    a classe que depende da interface (API pública) LSP 16
  9. INTERFACE SEGREGATION PRINCIPLE • Classes não devem ser obrigadas a

    depender de interfaces que elas não utilizam • Deve-se usar interfaces concisas, com apenas o que é realmente é usado • O SRP resolve este problema 17
  10. DEPENDENCY INVERSION PRINCIPLE • Módulos de alto nível não devem

    depender de módulos de baixo nível, ambos devem depender de abstrações (interface) • Abstrações não devem depender de detalhes, detalhes devem depender de abstrações 20
  11. SOLID • SRP - Single Responsibility Principle • OCP -

    Open/Closed Principle • LSP - Liskov Substitution Principle • ISP - Interface Segregation Principle • DIP - Dependency Inversion Principle 25
  12. REFERÊNCIAS • Edmilson Filho: http://www.slideshare.net/EdmilsonFilho2/princpios-solid-12117410 • Lucas Hungaro: http://www.slideshare.net/lucashungaro/solid-atravs-de-bdd-um-guia-prtico-para-rubistas •

    Uncle Bob: http://butunclebob.com/ArticleS.UncleBob.PrinciplesOfOod • Vinicius Quaiato: http://viniciusquaiato.com/blog/palestra-orientacao-a-objetos-e-principios-solid-slides-e-demos/ • Wikipedia: http://en.wikipedia.org/wiki/SOLID_(object-oriented_design) 27