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

SOLID - Princípios para um melhor design de código

SOLID - Princípios para um melhor design de código

Palestra sobre SOLID realizada por mim e pelo Gabriel Sobrinho inicialmente apresentada no encontro do GURU-MG do dia 28 de julho de 2012 e aperfeiçoada para o 4º RS on Rails do dia 15 de setembro de 2012.

Marcelo Cajueiro

September 15, 2012
Tweet

More Decks by Marcelo Cajueiro

Other Decks in Programming

Transcript

  1. QUE SOMOS NÓS? • @Sobrinho • Co-founder at Code5 •

    Co-founder at Nohup • Software Architect • gabrielsobrinho.com • @MarceloCajueiro • Co-founder at Code5 • Project Leader at Nohup • Software Engineer • marcelocajueiro.me 2
  2. S.O.L.I.D. • Single Responsibility Principle (SRP) • Open/Closed Principle (OCP)

    • Liskov Substitution Principle (LSP) • Interface Segregation Principle (ISP) • Dependency Inversion Principle (DIP) 8
  3. SOLID • Inspirado no subaproveitamento da OO • Com foco

    principal no acoplamento/dependências • Aplicado inicialmente apenas em linguagens estáticas 9
  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” 10
  5. OPEN-CLOSED PRINCIPLE (NEM SEMPRE É A MELHOR OPÇÃO) • 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 13
  6. OPEN-CLOSED PRINCIPLE (CONVENÇÃO DIFERENTE) • Uma classe deve manter a

    sua interface (API pública) • A implementação pode ser alterada livremente 14
  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 16
  8. Pode-se usar qualquer uma das heranças e não irá quebrar

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

    depender de interfaces (API pública) que elas não utilizam • Deve-se usar interfaces (API pública) concisas, com apenas o que é realmente é usado • O SRP resolve este problema 18
  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/ API pública) • Abstrações não devem depender de detalhes, detalhes devem depender de abstrações 21
  11. S.O.L.I.D. • Single Responsibility Principle (SRP) • Open/Closed Principle (OCP)

    • Liskov Substitution Principle (LSP) • Interface Segregation Principle (ISP) • Dependency Inversion Principle (DIP) 26
  12. REFERÊNCIAS • Edmilson Filho: http://www.slideshare.net/EdmilsonFilho2/princpios-solid-12117410 • *Gregory Brown*: http://blog.rubybestpractices.com/posts/gregory/055-issue-23-solid-design.html •

    *Jim Weirich*: http://confreaks.com/videos/185-rubyconf2009-solid-ruby • Lucas Hungaro: http://www.slideshare.net/lucashungaro/solid-atravs-de-bdd-um-guia-prtico-para-rubistas • *Sandi Metz*: http://confreaks.com/videos/240-goruco2009-solid-object-oriented-design • 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