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

SOLID

 SOLID

Princípios para um melhor design de código

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