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.

Avatar for Marcelo Cajueiro

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