SlideShare uma empresa Scribd logo
Princípios S.O.L.I.D.
Leandro Nishijima
Por que sistemas orientados a objetos são
tão difíceis de se trabalhar?
Dificuldades
- Propagação de problemas?
- Dificuldade de criar testes?
- Refactorings sofríveis?
- Instabilidades de classes?
- Dificuldades de modularização do projeto?
- Retrabalho?
- ∞
Princípios S.O.L.I.D.
Origem
Criados por Michael Feathers nos
anos 2000. Através de observações
de arquiteturas de projetos OO
Popularizados por
Robert C. Martin
S.O.L.I.D. ?
S.O.L.I.D. ?
Single Responsability Principle
“Uma classe deve ter uma, e apenas uma razão para mudar.”
- SRP == Coesão
- Classes devem ter apenas uma
responsabilidades;
- Implementado de maneira
correta, cada objeto terá
apenas uma razão para mudar.
- Builders são um bom exemplo
de classes que utilizam SRP.
Exemplo clichê “Head First: Object-Oriented Analysis &
Design.”
- SRP == Coesão
- Classes devem ter apenas uma
responsabilidades;
- Implementado de maneira
correta, cada objeto terá
apenas uma razão para mudar;
- Builders são um bom exemplo
de classes que utilizam SRP.
Exemplo clichê “Head First: Object-Oriented Analysis &
Design.”
Open and Closed Principle
“Uma classe deve ser aberta para a extensão, mas fechada para a
modificação.”
- Refere-se a permissão de
mudanças;
- Porém sem necessariamente
modificando um código
existente;
- Crie classes de forma que
você crie ramos de
modificações.
- O Design Pattern Strategy é
um excelente exemplo da
aplicação correta do princípio.
Liskov Substitution Principle
“Classes derivadas devem ser substituíveis pela sua classe base.”
Liskov?
“O princípio foi inspirado através de um artigo escrito por Barbara
Liskov sobre Hoare Logic”
- Uso adequado da herança
entre as classes;
- Nunca deve-se quebrar o
contrato de uma classe pai!
- Nunca apertar pré condições;
- Nunca afrouxar pós
condições.
Exemplo de quebra de contrato da classe pai.
Resumindo LSP
em uma frase.
Interface Segregation Principle
“Interfaces devem ser simples e com poucos comportamentos.”
- Referencia diretamente ao
acoplamento entre as classes
- Interfaces ao ser
implementadas não devem
forçar comportamentos que
outras classes não precisem!
Template Method
Resumindo ISP em
uma imagem.
Dependency Inversion Principle
“Dependa de abstrações e não de implementações.”
- Uma classe sempre deve
depender de classes que sejam
mais estáveis que ela mesma.
- Classes devem depender de
abstrações.
- Desenvolver seguindo o DIP é:
“Pensar primeiro na abstrações de suas
classes, e depois, na implementação.”
Quais as vantagens
da adoção dos
princípios a curto
prazo?
Métricas finais do projeto de TCC ( github)
E a longo prazo?
E a longo prazo?
E a longo prazo?
Classes flexíveis e genéricas o
suficiente para desenvolver OO
utilizando composição.
Se aprofunde
Uncle Bob: SOLID Principles of Object Oriented And Agile Design
https://youtu.be/TMuno5RZNeE
Steve Freeman & Nat Pryce: Building on SOLID fundations
https://youtu.be/6Bia81dI-JE
Leia os livros:
Obrigado!

Mais conteúdo relacionado

Mais procurados

Solid principles
Solid principlesSolid principles
Solid principles
Monica Rodrigues
 
Banco de Dados I - Aula 06 - Banco de Dados Relacional (Modelo Lógico)
Banco de Dados I - Aula 06 - Banco de Dados Relacional (Modelo Lógico)Banco de Dados I - Aula 06 - Banco de Dados Relacional (Modelo Lógico)
Banco de Dados I - Aula 06 - Banco de Dados Relacional (Modelo Lógico)
Leinylson Fontinele
 
Aula 1 - Introdução a Segurança da Informação
Aula 1 - Introdução a Segurança da InformaçãoAula 1 - Introdução a Segurança da Informação
Aula 1 - Introdução a Segurança da Informação
Carlos Henrique Martins da Silva
 
Ciclo desenvolvimento de sistemas
Ciclo desenvolvimento de sistemasCiclo desenvolvimento de sistemas
Ciclo desenvolvimento de sistemas
Instituto Federal de Educação Ciencia e Tecnologia
 
Programação orientada a objetos
Programação orientada a objetosProgramação orientada a objetos
Programação orientada a objetos
Cleyton Ferrari
 
Modelos de processos de software
Modelos de processos de softwareModelos de processos de software
Modelos de processos de software
Nécio de Lima Veras
 
Boas práticas técnica para um código limpo (Clean Code)
Boas práticas técnica para um código limpo (Clean Code)Boas práticas técnica para um código limpo (Clean Code)
Boas práticas técnica para um código limpo (Clean Code)
Rodrigo Kono
 
Engenharia de requisitos
Engenharia de requisitosEngenharia de requisitos
Engenharia de requisitos
Mailson Queiroz
 
5- Modelo entidade Relacionamento - Cardinalidade - Profª Cristiane Fidelix
5- Modelo entidade Relacionamento - Cardinalidade - Profª Cristiane Fidelix5- Modelo entidade Relacionamento - Cardinalidade - Profª Cristiane Fidelix
5- Modelo entidade Relacionamento - Cardinalidade - Profª Cristiane Fidelix
Cris Fidelix
 
SOLID Design Principles
SOLID Design PrinciplesSOLID Design Principles
SOLID Design Principles
Andreas Enbohm
 
Solid design principles
Solid design principlesSolid design principles
Solid design principles
Mahmoud Asadi
 
React JS - Parte 1
React JS - Parte 1React JS - Parte 1
React JS - Parte 1
Bruno Catão
 
Geecon09: SOLID Design Principles
Geecon09: SOLID Design PrinciplesGeecon09: SOLID Design Principles
Geecon09: SOLID Design Principles
Bruno Bossola
 
Engenharia de software
Engenharia de softwareEngenharia de software
Engenharia de software
Claudete Florencio
 
X-Zone - Garantia da Qualidade de Software
X-Zone - Garantia da Qualidade de SoftwareX-Zone - Garantia da Qualidade de Software
X-Zone - Garantia da Qualidade de Software
AlexandreBartie
 
Clean architecture
Clean architectureClean architecture
Clean architecture
.NET Crowd
 
SOLID Design Principles
SOLID Design PrinciplesSOLID Design Principles
SOLID Design Principles
Samuel Breed
 
Arquitetura de Software Visão Geral
Arquitetura de Software Visão GeralArquitetura de Software Visão Geral
Arquitetura de Software Visão Geral
sergiocrespo
 
Desenvolvimento orientado a testes - TDD
Desenvolvimento orientado a testes - TDDDesenvolvimento orientado a testes - TDD
Desenvolvimento orientado a testes - TDD
washingtonlslima
 
Single Responsibility Principle @ Clean Code Alliance Meetup
Single Responsibility Principle @ Clean Code Alliance MeetupSingle Responsibility Principle @ Clean Code Alliance Meetup
Single Responsibility Principle @ Clean Code Alliance Meetup
Eyal Golan
 

Mais procurados (20)

Solid principles
Solid principlesSolid principles
Solid principles
 
Banco de Dados I - Aula 06 - Banco de Dados Relacional (Modelo Lógico)
Banco de Dados I - Aula 06 - Banco de Dados Relacional (Modelo Lógico)Banco de Dados I - Aula 06 - Banco de Dados Relacional (Modelo Lógico)
Banco de Dados I - Aula 06 - Banco de Dados Relacional (Modelo Lógico)
 
Aula 1 - Introdução a Segurança da Informação
Aula 1 - Introdução a Segurança da InformaçãoAula 1 - Introdução a Segurança da Informação
Aula 1 - Introdução a Segurança da Informação
 
Ciclo desenvolvimento de sistemas
Ciclo desenvolvimento de sistemasCiclo desenvolvimento de sistemas
Ciclo desenvolvimento de sistemas
 
Programação orientada a objetos
Programação orientada a objetosProgramação orientada a objetos
Programação orientada a objetos
 
Modelos de processos de software
Modelos de processos de softwareModelos de processos de software
Modelos de processos de software
 
Boas práticas técnica para um código limpo (Clean Code)
Boas práticas técnica para um código limpo (Clean Code)Boas práticas técnica para um código limpo (Clean Code)
Boas práticas técnica para um código limpo (Clean Code)
 
Engenharia de requisitos
Engenharia de requisitosEngenharia de requisitos
Engenharia de requisitos
 
5- Modelo entidade Relacionamento - Cardinalidade - Profª Cristiane Fidelix
5- Modelo entidade Relacionamento - Cardinalidade - Profª Cristiane Fidelix5- Modelo entidade Relacionamento - Cardinalidade - Profª Cristiane Fidelix
5- Modelo entidade Relacionamento - Cardinalidade - Profª Cristiane Fidelix
 
SOLID Design Principles
SOLID Design PrinciplesSOLID Design Principles
SOLID Design Principles
 
Solid design principles
Solid design principlesSolid design principles
Solid design principles
 
React JS - Parte 1
React JS - Parte 1React JS - Parte 1
React JS - Parte 1
 
Geecon09: SOLID Design Principles
Geecon09: SOLID Design PrinciplesGeecon09: SOLID Design Principles
Geecon09: SOLID Design Principles
 
Engenharia de software
Engenharia de softwareEngenharia de software
Engenharia de software
 
X-Zone - Garantia da Qualidade de Software
X-Zone - Garantia da Qualidade de SoftwareX-Zone - Garantia da Qualidade de Software
X-Zone - Garantia da Qualidade de Software
 
Clean architecture
Clean architectureClean architecture
Clean architecture
 
SOLID Design Principles
SOLID Design PrinciplesSOLID Design Principles
SOLID Design Principles
 
Arquitetura de Software Visão Geral
Arquitetura de Software Visão GeralArquitetura de Software Visão Geral
Arquitetura de Software Visão Geral
 
Desenvolvimento orientado a testes - TDD
Desenvolvimento orientado a testes - TDDDesenvolvimento orientado a testes - TDD
Desenvolvimento orientado a testes - TDD
 
Single Responsibility Principle @ Clean Code Alliance Meetup
Single Responsibility Principle @ Clean Code Alliance MeetupSingle Responsibility Principle @ Clean Code Alliance Meetup
Single Responsibility Principle @ Clean Code Alliance Meetup
 

Semelhante a Princípios S.O.L.I.D.

Princípios SOLID
Princípios SOLIDPrincípios SOLID
Princípios SOLID
Cesar Vilarim
 
boas praticas
boas praticasboas praticas
boas praticas
lcbj
 
Orientação a Objetos - Princípios SOLID
Orientação a Objetos - Princípios SOLIDOrientação a Objetos - Princípios SOLID
Orientação a Objetos - Princípios SOLID
Vinicius Quaiato
 
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
 
Java - Boas práticas
Java - Boas práticasJava - Boas práticas
Java - Boas práticas
Felippe Rodrigo Puhle
 
Mwds01 - Introdução a Arquitetura e Projeto de Soluções Mobile
Mwds01 - Introdução a Arquitetura e Projeto de Soluções MobileMwds01 - Introdução a Arquitetura e Projeto de Soluções Mobile
Mwds01 - Introdução a Arquitetura e Projeto de Soluções Mobile
Wsdevs Desenvolvedores
 
Cocoaheads Brasil SP - 26/04/16 - SOLID
Cocoaheads Brasil SP - 26/04/16 - SOLIDCocoaheads Brasil SP - 26/04/16 - SOLID
Cocoaheads Brasil SP - 26/04/16 - SOLID
Bruno Mazzo
 
Software robusto e flexível
Software robusto e flexívelSoftware robusto e flexível
Software robusto e flexível
Robson Bittencourt
 
TDC 2019 Clean Architeture com .net core
TDC 2019  Clean Architeture com .net coreTDC 2019  Clean Architeture com .net core
TDC 2019 Clean Architeture com .net core
Rodolfo Fadino Junior
 
Dojo solid
Dojo solidDojo solid
Dojo solid
jeffersonmc2
 
Princípios solid
Princípios solidPrincípios solid
Princípios solid
Dyego Costa
 
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
 
Solid
SolidSolid
SOLID Os princípios da linguagem orientada a objeto
SOLID Os princípios da linguagem orientada a objetoSOLID Os princípios da linguagem orientada a objeto
SOLID Os princípios da linguagem orientada a objeto
Alberto Monteiro
 
Livro Código limpo: Classes
Livro Código limpo:  ClassesLivro Código limpo:  Classes
Livro Código limpo: Classes
Inael Rodrigues
 
Code Smells
Code SmellsCode Smells
Code Smells
Alan Willms
 
Test driven development
Test driven developmentTest driven development
Test driven development
clauvane1708
 
pec-12-patterns-intro.ppt
pec-12-patterns-intro.pptpec-12-patterns-intro.ppt
pec-12-patterns-intro.ppt
ssuser7025cf
 
Arquitetura mix thiagoboufleuhr
Arquitetura mix thiagoboufleuhrArquitetura mix thiagoboufleuhr
Arquitetura mix thiagoboufleuhr
Thiago Boufleuhr
 
Programação Orientada a Objetos - Pós Graduação - aula 1
Programação Orientada a Objetos - Pós Graduação - aula 1Programação Orientada a Objetos - Pós Graduação - aula 1
Programação Orientada a Objetos - Pós Graduação - aula 1
Carlos Eduardo
 

Semelhante a Princípios S.O.L.I.D. (20)

Princípios SOLID
Princípios SOLIDPrincípios SOLID
Princípios SOLID
 
boas praticas
boas praticasboas praticas
boas praticas
 
Orientação a Objetos - Princípios SOLID
Orientação a Objetos - Princípios SOLIDOrientação a Objetos - Princípios SOLID
Orientação a Objetos - Princípios SOLID
 
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í
 
Java - Boas práticas
Java - Boas práticasJava - Boas práticas
Java - Boas práticas
 
Mwds01 - Introdução a Arquitetura e Projeto de Soluções Mobile
Mwds01 - Introdução a Arquitetura e Projeto de Soluções MobileMwds01 - Introdução a Arquitetura e Projeto de Soluções Mobile
Mwds01 - Introdução a Arquitetura e Projeto de Soluções Mobile
 
Cocoaheads Brasil SP - 26/04/16 - SOLID
Cocoaheads Brasil SP - 26/04/16 - SOLIDCocoaheads Brasil SP - 26/04/16 - SOLID
Cocoaheads Brasil SP - 26/04/16 - SOLID
 
Software robusto e flexível
Software robusto e flexívelSoftware robusto e flexível
Software robusto e flexível
 
TDC 2019 Clean Architeture com .net core
TDC 2019  Clean Architeture com .net coreTDC 2019  Clean Architeture com .net core
TDC 2019 Clean Architeture com .net core
 
Dojo solid
Dojo solidDojo solid
Dojo solid
 
Princípios solid
Princípios solidPrincípios solid
Princípios solid
 
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
 
Solid
SolidSolid
Solid
 
SOLID Os princípios da linguagem orientada a objeto
SOLID Os princípios da linguagem orientada a objetoSOLID Os princípios da linguagem orientada a objeto
SOLID Os princípios da linguagem orientada a objeto
 
Livro Código limpo: Classes
Livro Código limpo:  ClassesLivro Código limpo:  Classes
Livro Código limpo: Classes
 
Code Smells
Code SmellsCode Smells
Code Smells
 
Test driven development
Test driven developmentTest driven development
Test driven development
 
pec-12-patterns-intro.ppt
pec-12-patterns-intro.pptpec-12-patterns-intro.ppt
pec-12-patterns-intro.ppt
 
Arquitetura mix thiagoboufleuhr
Arquitetura mix thiagoboufleuhrArquitetura mix thiagoboufleuhr
Arquitetura mix thiagoboufleuhr
 
Programação Orientada a Objetos - Pós Graduação - aula 1
Programação Orientada a Objetos - Pós Graduação - aula 1Programação Orientada a Objetos - Pós Graduação - aula 1
Programação Orientada a Objetos - Pós Graduação - aula 1
 

Princípios S.O.L.I.D.

  • 2. Por que sistemas orientados a objetos são tão difíceis de se trabalhar?
  • 3. Dificuldades - Propagação de problemas? - Dificuldade de criar testes? - Refactorings sofríveis? - Instabilidades de classes? - Dificuldades de modularização do projeto? - Retrabalho? - ∞
  • 6. Criados por Michael Feathers nos anos 2000. Através de observações de arquiteturas de projetos OO
  • 10. Single Responsability Principle “Uma classe deve ter uma, e apenas uma razão para mudar.”
  • 11. - SRP == Coesão - Classes devem ter apenas uma responsabilidades; - Implementado de maneira correta, cada objeto terá apenas uma razão para mudar. - Builders são um bom exemplo de classes que utilizam SRP. Exemplo clichê “Head First: Object-Oriented Analysis & Design.”
  • 12. - SRP == Coesão - Classes devem ter apenas uma responsabilidades; - Implementado de maneira correta, cada objeto terá apenas uma razão para mudar; - Builders são um bom exemplo de classes que utilizam SRP. Exemplo clichê “Head First: Object-Oriented Analysis & Design.”
  • 13. Open and Closed Principle “Uma classe deve ser aberta para a extensão, mas fechada para a modificação.”
  • 14. - Refere-se a permissão de mudanças; - Porém sem necessariamente modificando um código existente; - Crie classes de forma que você crie ramos de modificações. - O Design Pattern Strategy é um excelente exemplo da aplicação correta do princípio.
  • 15. Liskov Substitution Principle “Classes derivadas devem ser substituíveis pela sua classe base.”
  • 16. Liskov? “O princípio foi inspirado através de um artigo escrito por Barbara Liskov sobre Hoare Logic”
  • 17. - Uso adequado da herança entre as classes; - Nunca deve-se quebrar o contrato de uma classe pai! - Nunca apertar pré condições; - Nunca afrouxar pós condições. Exemplo de quebra de contrato da classe pai.
  • 19. Interface Segregation Principle “Interfaces devem ser simples e com poucos comportamentos.”
  • 20. - Referencia diretamente ao acoplamento entre as classes - Interfaces ao ser implementadas não devem forçar comportamentos que outras classes não precisem! Template Method
  • 22. Dependency Inversion Principle “Dependa de abstrações e não de implementações.”
  • 23. - Uma classe sempre deve depender de classes que sejam mais estáveis que ela mesma. - Classes devem depender de abstrações. - Desenvolver seguindo o DIP é: “Pensar primeiro na abstrações de suas classes, e depois, na implementação.”
  • 24. Quais as vantagens da adoção dos princípios a curto prazo? Métricas finais do projeto de TCC ( github)
  • 25. E a longo prazo?
  • 26. E a longo prazo?
  • 27. E a longo prazo? Classes flexíveis e genéricas o suficiente para desenvolver OO utilizando composição.
  • 28. Se aprofunde Uncle Bob: SOLID Principles of Object Oriented And Agile Design https://youtu.be/TMuno5RZNeE Steve Freeman & Nat Pryce: Building on SOLID fundations https://youtu.be/6Bia81dI-JE Leia os livros: