SlideShare uma empresa Scribd logo
S.O.L.I.D
O que é S.O.L.I.D?
• Cinco princípios criados por Robert C. Martin
(Uncle Bob)
• São guidelines para construir código legível e
extensível.
S.O.L.I.D.
• S - Single responsibility principe
• O - Open-closed principe
• L - Liskov substitution principe
• I - Interface segregation principe
• D - Dependency inversion principe
Single responsibility principe
• Uma classe deve ter apenas uma única
responsabilidade.
• Responsabilidade = A classe só deve mudar
por apenas um motivo
Open-closed principe
• Uma classe deve ser aberta para extensão e
fechada para modificação
• Devemos evitar ao máximo modificar código.
Devemos criar classes que possam ter seu
comportamento modificado sem necessidade
de se alterar o código.
Liskov substitution principe
• Subclasses devem conseguir ser usadas em
qualquer local das classes pais.
• Subclasses não podem restringir o
funcionamento de suas superclasses
Interface segregation
principe
• Nenhuma classe deve implementar métodos
que ela não precisa.
• Interfaces devem conter o mínimo necessários
Dependency inversion
principe
• Modulos de alto nível não devem depender de
modulos de baixo nível. Ambos devem
depender de abstração
• Abstração não deve depender de
implementação. Implementação deve depender
de abstração.
Caso de Uso
• Cenário:
• Já existia um código com as seguintes especificações:
• Formatava os emails
• Enviava emails
• Era tentado realizar o envio no máximo três vezes
por email
• Cada tentativa era realizado o Log de erro ou
sucesso.
Pseudo código
S.O.L.I.D
• Esse código funciona?
• Esse código tem algum problema?
• É fácil de adicionar novas funcionalidades?
• S.O.L.I.D. é sobre código fácil de dar
manutenção e de se alterar
Nova especificação
• Iria existir agora dois tipos de envio:
• A lógica de envio seria diferente porque seria
usado um novo serviço para um grupo de
clientes
• A lógica de Log seria diferente por questões
técnicas desse novo serviço
• A formatação seria outra para esses clientes
Nova especificação
• O modo antigo ainda vai continuar existindo
• Não se sabe se no futuro haverá outras
mudanças desse tipo.
Single responsibility
• Enviar email
• Gerar log
• Realizar tentativas
• Formatar o email
• Escolher o tipo de método de envio
Open-closed
• O único ponto de extensão é a quantidade de
tentativas
• Problemas
• Classe não é reutilizável
• Mudanças obrigam mudar o código fonte (o
que pode causar erros)
Liskov substitution principe
• Não se aplica. Não temos nenhuma subclasse.
Interface segregation
principle
• A interface da classe fica grande porque existe
muitas operações.
Dependency Inversion
• A classe cria objetos criando dependencias implicitas
• Problemas
• Dificulta a criação de testes unitários
• Impede a interceptação de chamadas
• Fixa módulos de alto nível com módulos de baixo
nível (quem toma decisões de negócio é a mesma
classe que trabalha com framework de envio de
email)
Vantagens
• Com S. criamos pequenos blocos de lógica
independentes
• Com O. permitimos que esses blocos sejam configuráveis
• Com L. garantimos que podemos alternar entre qualquer
um dos blocos sem quebrar o código
• Com I. criamos um padrão de blocos que são fácil de
serem construídos
• Com D. podemos configurar e montar da maneira que nos
for interessante
Criando os "blocos"
Conclusão
• O maior benefício não é no código que já existe,
mas sim na implementação de novas
funcionalidades
• Fazer S.O.L.I.D. é como brincar de LEGO, você
tem um monte de peças e só encaixa para formar
uma peça maior
• O resultado é um código simples, configurável,
com menor dependência de frameworks externos
e fácil de testar
Obrigado
• Dúvidas?

Mais conteúdo relacionado

Semelhante a Cocoaheads Brasil SP - 26/04/16 - SOLID

Clean code em C#
Clean code em C#Clean code em C#
Clean code em C#
Gustavo Araújo
 
boas praticas
boas praticasboas praticas
boas praticas
lcbj
 
Livro Código limpo: Classes
Livro Código limpo:  ClassesLivro Código limpo:  Classes
Livro Código limpo: Classes
Inael Rodrigues
 
Princípios de Programação Orientada a Objetos Solid, dry e kiss
Princípios de Programação Orientada a Objetos Solid, dry  e kiss Princípios de Programação Orientada a Objetos Solid, dry  e kiss
Princípios de Programação Orientada a Objetos Solid, dry e kiss
DanielChristofolli
 
Princípios S.O.L.I.D.
Princípios S.O.L.I.D.Princípios S.O.L.I.D.
Princípios S.O.L.I.D.
Leandro Nishijima
 
Bolovo - problema antigo de arquitetura de software - não use por aí
Bolovo - problema antigo de arquitetura de software - não use por aíBolovo - problema antigo de arquitetura de software - não use por aí
Bolovo - problema antigo de arquitetura de software - não use por aí
Priscila Mayumi
 
Refatoração de Código Legado
Refatoração de Código LegadoRefatoração de Código Legado
Refatoração de Código Legado
Caesar Ralf Franz Hoppen
 
Apresentação WTM
Apresentação WTMApresentação WTM
Apresentação WTM
Anna Cruz
 
Design Patterns on Rails
Design Patterns on RailsDesign Patterns on Rails
Design Patterns on Rails
tchandy
 
Princípios SOLID
Princípios SOLIDPrincípios SOLID
Princípios SOLID
Cesar Vilarim
 
Clean architecture
Clean architectureClean architecture
Clean architecture
Charles Viegas
 
Princípios SOLID
Princípios SOLIDPrincípios SOLID
Princípios SOLID
Joberto Diniz
 
De Fred Krueger a Brad Pitt como melhorar o seu código e fazê-lo ficar lindo
De Fred Krueger a Brad Pitt como melhorar o seu código e fazê-lo ficar lindoDe Fred Krueger a Brad Pitt como melhorar o seu código e fazê-lo ficar lindo
De Fred Krueger a Brad Pitt como melhorar o seu código e fazê-lo ficar lindo
Anna Cruz
 
Solid
SolidSolid
Code Smells
Code SmellsCode Smells
Code Smells
Alan Willms
 
Clean code 101 do caos ao nirvana em poucos passos
Clean code 101  do caos ao nirvana em poucos passosClean code 101  do caos ao nirvana em poucos passos
Clean code 101 do caos ao nirvana em poucos passos
Gabrielly Gomes
 
Codigo limpo.pptx
Codigo limpo.pptxCodigo limpo.pptx
Software robusto e flexível
Software robusto e flexívelSoftware robusto e flexível
Software robusto e flexível
Robson Bittencourt
 
OCP - The Open Close Principle - Princípio aberto/fechado
OCP - The Open Close Principle - Princípio aberto/fechadoOCP - The Open Close Principle - Princípio aberto/fechado
OCP - The Open Close Principle - Princípio aberto/fechado
Engenharia de Software Ágil
 
Clean code part 2
Clean code   part 2Clean code   part 2
Clean code part 2
clauvane1708
 

Semelhante a Cocoaheads Brasil SP - 26/04/16 - SOLID (20)

Clean code em C#
Clean code em C#Clean code em C#
Clean code em C#
 
boas praticas
boas praticasboas praticas
boas praticas
 
Livro Código limpo: Classes
Livro Código limpo:  ClassesLivro Código limpo:  Classes
Livro Código limpo: Classes
 
Princípios de Programação Orientada a Objetos Solid, dry e kiss
Princípios de Programação Orientada a Objetos Solid, dry  e kiss Princípios de Programação Orientada a Objetos Solid, dry  e kiss
Princípios de Programação Orientada a Objetos Solid, dry e kiss
 
Princípios S.O.L.I.D.
Princípios S.O.L.I.D.Princípios S.O.L.I.D.
Princípios S.O.L.I.D.
 
Bolovo - problema antigo de arquitetura de software - não use por aí
Bolovo - problema antigo de arquitetura de software - não use por aíBolovo - problema antigo de arquitetura de software - não use por aí
Bolovo - problema antigo de arquitetura de software - não use por aí
 
Refatoração de Código Legado
Refatoração de Código LegadoRefatoração de Código Legado
Refatoração de Código Legado
 
Apresentação WTM
Apresentação WTMApresentação WTM
Apresentação WTM
 
Design Patterns on Rails
Design Patterns on RailsDesign Patterns on Rails
Design Patterns on Rails
 
Princípios SOLID
Princípios SOLIDPrincípios SOLID
Princípios SOLID
 
Clean architecture
Clean architectureClean architecture
Clean architecture
 
Princípios SOLID
Princípios SOLIDPrincípios SOLID
Princípios SOLID
 
De Fred Krueger a Brad Pitt como melhorar o seu código e fazê-lo ficar lindo
De Fred Krueger a Brad Pitt como melhorar o seu código e fazê-lo ficar lindoDe Fred Krueger a Brad Pitt como melhorar o seu código e fazê-lo ficar lindo
De Fred Krueger a Brad Pitt como melhorar o seu código e fazê-lo ficar lindo
 
Solid
SolidSolid
Solid
 
Code Smells
Code SmellsCode Smells
Code Smells
 
Clean code 101 do caos ao nirvana em poucos passos
Clean code 101  do caos ao nirvana em poucos passosClean code 101  do caos ao nirvana em poucos passos
Clean code 101 do caos ao nirvana em poucos passos
 
Codigo limpo.pptx
Codigo limpo.pptxCodigo limpo.pptx
Codigo limpo.pptx
 
Software robusto e flexível
Software robusto e flexívelSoftware robusto e flexível
Software robusto e flexível
 
OCP - The Open Close Principle - Princípio aberto/fechado
OCP - The Open Close Principle - Princípio aberto/fechadoOCP - The Open Close Principle - Princípio aberto/fechado
OCP - The Open Close Principle - Princípio aberto/fechado
 
Clean code part 2
Clean code   part 2Clean code   part 2
Clean code part 2
 

Último

Certificado Jornada Python Da Hashtag.pdf
Certificado Jornada Python Da Hashtag.pdfCertificado Jornada Python Da Hashtag.pdf
Certificado Jornada Python Da Hashtag.pdf
joaovmp3
 
DESENVOLVIMENTO DE SOFTWARE I_aula1-2.pdf
DESENVOLVIMENTO DE SOFTWARE I_aula1-2.pdfDESENVOLVIMENTO DE SOFTWARE I_aula1-2.pdf
DESENVOLVIMENTO DE SOFTWARE I_aula1-2.pdf
Momento da Informática
 
Logica de Progamacao - Aula (1) (1).pptx
Logica de Progamacao - Aula (1) (1).pptxLogica de Progamacao - Aula (1) (1).pptx
Logica de Progamacao - Aula (1) (1).pptx
Momento da Informática
 
História da Rádio- 1936-1970 século XIX .2.pptx
História da Rádio- 1936-1970 século XIX   .2.pptxHistória da Rádio- 1936-1970 século XIX   .2.pptx
História da Rádio- 1936-1970 século XIX .2.pptx
TomasSousa7
 
TOO - TÉCNICAS DE ORIENTAÇÃO A OBJETOS aula 1.pdf
TOO - TÉCNICAS DE ORIENTAÇÃO A OBJETOS aula 1.pdfTOO - TÉCNICAS DE ORIENTAÇÃO A OBJETOS aula 1.pdf
TOO - TÉCNICAS DE ORIENTAÇÃO A OBJETOS aula 1.pdf
Momento da Informática
 
Manual-de-Credenciamento ANATER 2023.pdf
Manual-de-Credenciamento ANATER 2023.pdfManual-de-Credenciamento ANATER 2023.pdf
Manual-de-Credenciamento ANATER 2023.pdf
WELITONNOGUEIRA3
 

Último (6)

Certificado Jornada Python Da Hashtag.pdf
Certificado Jornada Python Da Hashtag.pdfCertificado Jornada Python Da Hashtag.pdf
Certificado Jornada Python Da Hashtag.pdf
 
DESENVOLVIMENTO DE SOFTWARE I_aula1-2.pdf
DESENVOLVIMENTO DE SOFTWARE I_aula1-2.pdfDESENVOLVIMENTO DE SOFTWARE I_aula1-2.pdf
DESENVOLVIMENTO DE SOFTWARE I_aula1-2.pdf
 
Logica de Progamacao - Aula (1) (1).pptx
Logica de Progamacao - Aula (1) (1).pptxLogica de Progamacao - Aula (1) (1).pptx
Logica de Progamacao - Aula (1) (1).pptx
 
História da Rádio- 1936-1970 século XIX .2.pptx
História da Rádio- 1936-1970 século XIX   .2.pptxHistória da Rádio- 1936-1970 século XIX   .2.pptx
História da Rádio- 1936-1970 século XIX .2.pptx
 
TOO - TÉCNICAS DE ORIENTAÇÃO A OBJETOS aula 1.pdf
TOO - TÉCNICAS DE ORIENTAÇÃO A OBJETOS aula 1.pdfTOO - TÉCNICAS DE ORIENTAÇÃO A OBJETOS aula 1.pdf
TOO - TÉCNICAS DE ORIENTAÇÃO A OBJETOS aula 1.pdf
 
Manual-de-Credenciamento ANATER 2023.pdf
Manual-de-Credenciamento ANATER 2023.pdfManual-de-Credenciamento ANATER 2023.pdf
Manual-de-Credenciamento ANATER 2023.pdf
 

Cocoaheads Brasil SP - 26/04/16 - SOLID

  • 2. O que é S.O.L.I.D? • Cinco princípios criados por Robert C. Martin (Uncle Bob) • São guidelines para construir código legível e extensível.
  • 3. S.O.L.I.D. • S - Single responsibility principe • O - Open-closed principe • L - Liskov substitution principe • I - Interface segregation principe • D - Dependency inversion principe
  • 4. Single responsibility principe • Uma classe deve ter apenas uma única responsabilidade. • Responsabilidade = A classe só deve mudar por apenas um motivo
  • 5. Open-closed principe • Uma classe deve ser aberta para extensão e fechada para modificação • Devemos evitar ao máximo modificar código. Devemos criar classes que possam ter seu comportamento modificado sem necessidade de se alterar o código.
  • 6. Liskov substitution principe • Subclasses devem conseguir ser usadas em qualquer local das classes pais. • Subclasses não podem restringir o funcionamento de suas superclasses
  • 7. Interface segregation principe • Nenhuma classe deve implementar métodos que ela não precisa. • Interfaces devem conter o mínimo necessários
  • 8. Dependency inversion principe • Modulos de alto nível não devem depender de modulos de baixo nível. Ambos devem depender de abstração • Abstração não deve depender de implementação. Implementação deve depender de abstração.
  • 9. Caso de Uso • Cenário: • Já existia um código com as seguintes especificações: • Formatava os emails • Enviava emails • Era tentado realizar o envio no máximo três vezes por email • Cada tentativa era realizado o Log de erro ou sucesso.
  • 11. S.O.L.I.D • Esse código funciona? • Esse código tem algum problema? • É fácil de adicionar novas funcionalidades? • S.O.L.I.D. é sobre código fácil de dar manutenção e de se alterar
  • 12. Nova especificação • Iria existir agora dois tipos de envio: • A lógica de envio seria diferente porque seria usado um novo serviço para um grupo de clientes • A lógica de Log seria diferente por questões técnicas desse novo serviço • A formatação seria outra para esses clientes
  • 13. Nova especificação • O modo antigo ainda vai continuar existindo • Não se sabe se no futuro haverá outras mudanças desse tipo.
  • 14. Single responsibility • Enviar email • Gerar log • Realizar tentativas • Formatar o email • Escolher o tipo de método de envio
  • 15. Open-closed • O único ponto de extensão é a quantidade de tentativas • Problemas • Classe não é reutilizável • Mudanças obrigam mudar o código fonte (o que pode causar erros)
  • 16. Liskov substitution principe • Não se aplica. Não temos nenhuma subclasse.
  • 17. Interface segregation principle • A interface da classe fica grande porque existe muitas operações.
  • 18. Dependency Inversion • A classe cria objetos criando dependencias implicitas • Problemas • Dificulta a criação de testes unitários • Impede a interceptação de chamadas • Fixa módulos de alto nível com módulos de baixo nível (quem toma decisões de negócio é a mesma classe que trabalha com framework de envio de email)
  • 19. Vantagens • Com S. criamos pequenos blocos de lógica independentes • Com O. permitimos que esses blocos sejam configuráveis • Com L. garantimos que podemos alternar entre qualquer um dos blocos sem quebrar o código • Com I. criamos um padrão de blocos que são fácil de serem construídos • Com D. podemos configurar e montar da maneira que nos for interessante
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32. Conclusão • O maior benefício não é no código que já existe, mas sim na implementação de novas funcionalidades • Fazer S.O.L.I.D. é como brincar de LEGO, você tem um monte de peças e só encaixa para formar uma peça maior • O resultado é um código simples, configurável, com menor dependência de frameworks externos e fácil de testar