• 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
Princípios SOLID

Princípios SOLID

  • 2.
    • Desenvolvedor. • Capixabaresidente no Rio de Janeiro. • Pouco mais de 1 ano de PU. • Time de App Services. • Flamengo. • www.flamengorj.com.br
  • 3.
    • Fazer softwareNÃO é fácil. • Fazer software bem projetado para ser mantido é ainda mais complicado.
  • 4.
    • Orientação aObjeto 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, oque 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
  • 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 semmedo • Não criar bugs em código que funciona
  • 16.
    • Strategy Pattern •Decorator Pattern
  • 18.
    Princípio da Substituiçãode Liskov “Deve ser possível substituir uma classe base por suas classes derivadas” Barbara Liskov e Jeannette Wing
  • 19.
    Quadrado herda deretângulo?
  • 21.
    Princípio de Segregaçãode Interface “Clientes não devem ser forçados a depender de interfaces que eles não vão usar”
  • 22.
    OBS.: Espero quepelo menos não tenha sido no Internet Explorer  throw new NotImplementedException();
  • 23.
    • Facilitar aimplementação de interfaces. • Ter interfaces mais específicas (SRP, certo? ).
  • 26.
    Princípio de Inversãode 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 desacopladoe flexível. • Código testável. • Facilidade de mudança.
  • 30.
    • Princípios epadrõ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

Notas do Editor