SlideShare uma empresa Scribd logo
SOLID, DRY & KISS
Princípios de POO
Apresentação 3
Daniel Christofolli
SOLID
SOLID é um acrônimo dos cinco primeiros princípios da
programação orientada a objetos e design de código
identificados por
Robert C. Martin (ou Uncle Bob) por volta do ano 2000. O
acrônimo SOLID foi introduzido por Michael Feathers, após
observar que os cinco princípios poderiam se encaixar nesta
palavra.
S SRP Princípio da Responsabilidade Única
Uma classe deve ter um, e somente um, motivo para mudar.
O OCPPrincípio Aberto-Fechado
Você deve ser capaz de estender um comportamento de uma
classe, sem modificá-lo.
L LSP Princípio da Substituição de Liskov
As classes base devem ser substituíveis por suas classes
derivadas.
I ISP Princípio da Segregação da Interface
Muitas interfaces específicas são melhores do que uma
interface única.
D DIP Princípio da inversão da dependência
Dependa de uma abstração e não de uma implementação.
Single Responsibility Principle
Princípio da responsabilidade única
Uma classe deve ter uma responsabilidade bem definida
Exem
plo
de código
errado!
SRP - Código Errado
SRP - Código Bom
Open/Closed Principle
Princípio do aberto/fechado
Uma classe deve ser aberta para ampliação mas fechada
para modificação
OCP - Código Bom
Liskov Substitution Principle
Princípio da substituição de Liskov
Uma classe derivada deve ser substituível pela sua classe
base
As classes ArquivoWord e ArquivoPDF
são extensões da classe Arquivo, porém
não usam o polimorfismo
LSP - Código Ruim
A classe Quadrado herda da
classe Retangulo, porém,
sobrescreve o método que
calcula a área
LSP - Código Ruim
LSP - Código Bom
Interface Segregation Principle
Princípio da Segregação de Interface
Muitas interfaces específicas são melhores do que
uma interface geral.
Uma interface deve ser enxuta, com poucos
comportamentos
Código ruim, pois está usando a interface
da forma errada
ISP - Código Ruim
ISP - Código Bom
Dependency Inversion Principle
Princípio da inversão de dependências
Devemos “depender de abstrações e não de classes
concretas”.
● “Módulos de alto nível não devem depender de
módulos de baixo nível.”
● “As abstrações não devem depender de detalhes.
Os detalhes devem depender das abstrações.”
DIP - Código Ruim
DIP - Código Bom
DRY
Do not Repeat Yourself
● Cada parte do conhecimento deve ter uma representação
única, não ambígua e definitiva dentro do sistema.
● Menos código é bom: economiza tempo e esforço, é fácil
de manter e também reduz as chances de erros.
DRY - Código Ruim
DRY - Código Bom
KISS
Keep It Simple, Stupid
Vantagens:
● Você será capaz de resolver mais problemas e com ainda mais eficiência;
● Você será capaz de produzir scripts que resolvem problemas complexos com
poucas linhas de código;
● Seus códigos terão muitos mais qualidade;
● Você será capaz de construir grandes sistemas fáceis de manter;
● Sua base de código será mais flexível, fácil para estender, modificar ou
refatorar quando novas funcionalidades forem solicitadas;
● Você será capaz de produzir mais do que já imaginava como um developer;
● Você será capaz de trabalhar em grandes grupos de desenvolvimento e em
grandes projetos desde que todos mantenham os códigos estupidamente
simples.
KISS
Keep It Simple, Stupid
Resumo
Os melhores algoritmos são muitas vezes aqueles com
poucas linhas de código. E quando lemos o código linha a
linha, podemos facilmente entender o que está sendo feito. A
inovação consiste em quebrar o problema cada vez mais em
problemas menores a ponto de eles ficarem muito fáceis de
entender e implementar. Muitos dos grandes solucionadores
de problemas de códigos não são excelentes codificadores,
mas eles ainda produzem um excelente (simples) código.
KISS - Código Ruim
KISS - Código Bom
Conclusão
Se usarmos esses princípios, teremos um código
fácil de se manter, testar, reutilizar, estender e
evoluir.

Mais conteúdo relacionado

Mais procurados

Diagrama de Atividades - UML
Diagrama de Atividades - UMLDiagrama de Atividades - UML
Diagrama de Atividades - UML
Vinícius Barros
 
Sistemas Operacionais Modernos Capítulo 3 Deadlock
Sistemas Operacionais Modernos Capítulo 3 DeadlockSistemas Operacionais Modernos Capítulo 3 Deadlock
Sistemas Operacionais Modernos Capítulo 3 Deadlock
Wellington Oliveira
 
Declarative Clients in Spring
Declarative Clients in SpringDeclarative Clients in Spring
Declarative Clients in Spring
VMware Tanzu
 
Open Closed Principle kata
Open Closed Principle kataOpen Closed Principle kata
Open Closed Principle kata
Paul Blundell
 
Learning ASP.NET 5 and MVC 6
Learning ASP.NET 5 and MVC 6Learning ASP.NET 5 and MVC 6
Learning ASP.NET 5 and MVC 6
Ido Flatow
 
SOLID principles
SOLID principlesSOLID principles
SOLID principles
Jonathan Holloway
 
SOLID Design Principles
SOLID Design PrinciplesSOLID Design Principles
SOLID Design Principles
Samuel Breed
 
Java orientação a objetos (variaveis de instancia e metodos)
Java   orientação a objetos (variaveis de instancia e metodos)Java   orientação a objetos (variaveis de instancia e metodos)
Java orientação a objetos (variaveis de instancia e metodos)
Armando Daniel
 
Gitlab CI : Integration et Déploiement Continue
Gitlab CI : Integration et Déploiement ContinueGitlab CI : Integration et Déploiement Continue
Gitlab CI : Integration et Déploiement Continue
Vincent Composieux
 
SOLID Design Principles applied in Java
SOLID Design Principles applied in JavaSOLID Design Principles applied in Java
SOLID Design Principles applied in Java
Ionut Bilica
 
MDL - Elaborando diagramas em Micro Development Language
MDL - Elaborando diagramas em Micro Development LanguageMDL - Elaborando diagramas em Micro Development Language
MDL - Elaborando diagramas em Micro Development Language
Gustavo Sanchez - Palência
 
WEB SERVICE SOAP, JAVA, XML, JAXWS
WEB SERVICE SOAP, JAVA, XML, JAXWSWEB SERVICE SOAP, JAVA, XML, JAXWS
WEB SERVICE SOAP, JAVA, XML, JAXWS
Lhouceine OUHAMZA
 
Jenkins.pdf
Jenkins.pdfJenkins.pdf
Dependency Inversion Principle
Dependency Inversion PrincipleDependency Inversion Principle
Dependency Inversion Principle
Marco Mangia Musardo
 
SOLID : les principes à l’origine du succès de Symfony et de vos applications
SOLID : les principes à l’origine du succès de Symfony et de vos applicationsSOLID : les principes à l’origine du succès de Symfony et de vos applications
SOLID : les principes à l’origine du succès de Symfony et de vos applications
Vladyslav Riabchenko
 
Design Patterns
Design PatternsDesign Patterns
Design Patterns
Koffi Sani
 
Architectures distribuées
Architectures distribuéesArchitectures distribuées
Architectures distribuées
Franck SIMON
 
Formation jpa-hibernate-spring-data
Formation jpa-hibernate-spring-dataFormation jpa-hibernate-spring-data
Formation jpa-hibernate-spring-data
Lhouceine OUHAMZA
 
Build Automation using Maven
Build Automation using Maven Build Automation using Maven
Build Automation using Maven
Ankit Gubrani
 
2012 the clean architecture by Uncle bob
2012 the clean architecture by Uncle bob 2012 the clean architecture by Uncle bob
2012 the clean architecture by Uncle bob
GEORGE LEON
 

Mais procurados (20)

Diagrama de Atividades - UML
Diagrama de Atividades - UMLDiagrama de Atividades - UML
Diagrama de Atividades - UML
 
Sistemas Operacionais Modernos Capítulo 3 Deadlock
Sistemas Operacionais Modernos Capítulo 3 DeadlockSistemas Operacionais Modernos Capítulo 3 Deadlock
Sistemas Operacionais Modernos Capítulo 3 Deadlock
 
Declarative Clients in Spring
Declarative Clients in SpringDeclarative Clients in Spring
Declarative Clients in Spring
 
Open Closed Principle kata
Open Closed Principle kataOpen Closed Principle kata
Open Closed Principle kata
 
Learning ASP.NET 5 and MVC 6
Learning ASP.NET 5 and MVC 6Learning ASP.NET 5 and MVC 6
Learning ASP.NET 5 and MVC 6
 
SOLID principles
SOLID principlesSOLID principles
SOLID principles
 
SOLID Design Principles
SOLID Design PrinciplesSOLID Design Principles
SOLID Design Principles
 
Java orientação a objetos (variaveis de instancia e metodos)
Java   orientação a objetos (variaveis de instancia e metodos)Java   orientação a objetos (variaveis de instancia e metodos)
Java orientação a objetos (variaveis de instancia e metodos)
 
Gitlab CI : Integration et Déploiement Continue
Gitlab CI : Integration et Déploiement ContinueGitlab CI : Integration et Déploiement Continue
Gitlab CI : Integration et Déploiement Continue
 
SOLID Design Principles applied in Java
SOLID Design Principles applied in JavaSOLID Design Principles applied in Java
SOLID Design Principles applied in Java
 
MDL - Elaborando diagramas em Micro Development Language
MDL - Elaborando diagramas em Micro Development LanguageMDL - Elaborando diagramas em Micro Development Language
MDL - Elaborando diagramas em Micro Development Language
 
WEB SERVICE SOAP, JAVA, XML, JAXWS
WEB SERVICE SOAP, JAVA, XML, JAXWSWEB SERVICE SOAP, JAVA, XML, JAXWS
WEB SERVICE SOAP, JAVA, XML, JAXWS
 
Jenkins.pdf
Jenkins.pdfJenkins.pdf
Jenkins.pdf
 
Dependency Inversion Principle
Dependency Inversion PrincipleDependency Inversion Principle
Dependency Inversion Principle
 
SOLID : les principes à l’origine du succès de Symfony et de vos applications
SOLID : les principes à l’origine du succès de Symfony et de vos applicationsSOLID : les principes à l’origine du succès de Symfony et de vos applications
SOLID : les principes à l’origine du succès de Symfony et de vos applications
 
Design Patterns
Design PatternsDesign Patterns
Design Patterns
 
Architectures distribuées
Architectures distribuéesArchitectures distribuées
Architectures distribuées
 
Formation jpa-hibernate-spring-data
Formation jpa-hibernate-spring-dataFormation jpa-hibernate-spring-data
Formation jpa-hibernate-spring-data
 
Build Automation using Maven
Build Automation using Maven Build Automation using Maven
Build Automation using Maven
 
2012 the clean architecture by Uncle bob
2012 the clean architecture by Uncle bob 2012 the clean architecture by Uncle bob
2012 the clean architecture by Uncle bob
 

Semelhante a Princípios de Programação Orientada a Objetos Solid, dry e kiss

Um desenvolvedor com princípios SOLID
Um desenvolvedor com princípios SOLIDUm desenvolvedor com princípios SOLID
Um desenvolvedor com princípios SOLID
Hélio Medeiros
 
SOLID - Teoria e Prática
SOLID - Teoria e PráticaSOLID - Teoria e Prática
SOLID - Teoria e Prática
Eduardo Pires
 
Princípios SOLID
Princípios SOLIDPrincípios SOLID
Princípios SOLID
Cesar Vilarim
 
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
 
Apres s4
Apres s4 Apres s4
Clean Code na prática
Clean Code na práticaClean Code na prática
Clean Code na prática
Evelise Vazquez
 
Código limpo php
Código limpo phpCódigo limpo php
Código limpo php
FilipiAtaideArruda
 
Clean code
Clean codeClean code
boas praticas
boas praticasboas praticas
boas praticas
lcbj
 
Pragmatismo e Padroes - Um limiar tenue entre o sucesso e o fracasso do seu p...
Pragmatismo e Padroes - Um limiar tenue entre o sucesso e o fracasso do seu p...Pragmatismo e Padroes - Um limiar tenue entre o sucesso e o fracasso do seu p...
Pragmatismo e Padroes - Um limiar tenue entre o sucesso e o fracasso do seu p...
Klederson Bueno
 
Qualidade no desenvolvimento de sistemas
Qualidade no desenvolvimento de sistemasQualidade no desenvolvimento de sistemas
Qualidade no desenvolvimento de sistemas
Joao Galdino Mello de Souza
 
Princípios SOLID
Princípios SOLIDPrincípios SOLID
Princípios SOLID
Edmilson Filho
 
Estudos Technocorp
Estudos TechnocorpEstudos Technocorp
Estudos Technocorp
GiovaneGarcia3
 
Solid
SolidSolid
Objects calisthenics - Os 10 mandamentos do rei do código
Objects calisthenics - Os 10 mandamentos do rei do códigoObjects calisthenics - Os 10 mandamentos do rei do código
Objects calisthenics - Os 10 mandamentos do rei do código
BonoBee
 
#DNAD15 - Diminuindo sofrimento com código legado de linguagens não mainstreams
#DNAD15  - Diminuindo sofrimento com código legado de linguagens não mainstreams#DNAD15  - Diminuindo sofrimento com código legado de linguagens não mainstreams
#DNAD15 - Diminuindo sofrimento com código legado de linguagens não mainstreams
Jacqueline Abreu
 
Codigo limpo.pptx
Codigo limpo.pptxCodigo limpo.pptx
O que é ser um bom programador?
O que é ser um bom programador?O que é ser um bom programador?
O que é ser um bom programador?
Lucas Boeing Scarduelli
 
Aplicando SOLID com PHP7
Aplicando SOLID com PHP7Aplicando SOLID com PHP7
Aplicando SOLID com PHP7
Daniel Archer Marques Cramer
 
O que devo procurar em um code review
O que devo procurar em um code review O que devo procurar em um code review
O que devo procurar em um code review
Rodrigo de Souza Castro
 

Semelhante a Princípios de Programação Orientada a Objetos Solid, dry e kiss (20)

Um desenvolvedor com princípios SOLID
Um desenvolvedor com princípios SOLIDUm desenvolvedor com princípios SOLID
Um desenvolvedor com princípios SOLID
 
SOLID - Teoria e Prática
SOLID - Teoria e PráticaSOLID - Teoria e Prática
SOLID - Teoria e Prática
 
Princípios SOLID
Princípios SOLIDPrincípios SOLID
Princípios SOLID
 
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
 
Apres s4
Apres s4 Apres s4
Apres s4
 
Clean Code na prática
Clean Code na práticaClean Code na prática
Clean Code na prática
 
Código limpo php
Código limpo phpCódigo limpo php
Código limpo php
 
Clean code
Clean codeClean code
Clean code
 
boas praticas
boas praticasboas praticas
boas praticas
 
Pragmatismo e Padroes - Um limiar tenue entre o sucesso e o fracasso do seu p...
Pragmatismo e Padroes - Um limiar tenue entre o sucesso e o fracasso do seu p...Pragmatismo e Padroes - Um limiar tenue entre o sucesso e o fracasso do seu p...
Pragmatismo e Padroes - Um limiar tenue entre o sucesso e o fracasso do seu p...
 
Qualidade no desenvolvimento de sistemas
Qualidade no desenvolvimento de sistemasQualidade no desenvolvimento de sistemas
Qualidade no desenvolvimento de sistemas
 
Princípios SOLID
Princípios SOLIDPrincípios SOLID
Princípios SOLID
 
Estudos Technocorp
Estudos TechnocorpEstudos Technocorp
Estudos Technocorp
 
Solid
SolidSolid
Solid
 
Objects calisthenics - Os 10 mandamentos do rei do código
Objects calisthenics - Os 10 mandamentos do rei do códigoObjects calisthenics - Os 10 mandamentos do rei do código
Objects calisthenics - Os 10 mandamentos do rei do código
 
#DNAD15 - Diminuindo sofrimento com código legado de linguagens não mainstreams
#DNAD15  - Diminuindo sofrimento com código legado de linguagens não mainstreams#DNAD15  - Diminuindo sofrimento com código legado de linguagens não mainstreams
#DNAD15 - Diminuindo sofrimento com código legado de linguagens não mainstreams
 
Codigo limpo.pptx
Codigo limpo.pptxCodigo limpo.pptx
Codigo limpo.pptx
 
O que é ser um bom programador?
O que é ser um bom programador?O que é ser um bom programador?
O que é ser um bom programador?
 
Aplicando SOLID com PHP7
Aplicando SOLID com PHP7Aplicando SOLID com PHP7
Aplicando SOLID com PHP7
 
O que devo procurar em um code review
O que devo procurar em um code review O que devo procurar em um code review
O que devo procurar em um code review
 

Mais de DanielChristofolli

Docker
DockerDocker
Gradle spring-hateoas-Lombok
Gradle spring-hateoas-LombokGradle spring-hateoas-Lombok
Gradle spring-hateoas-Lombok
DanielChristofolli
 
Design patterns - Gang of Four - Observer e Prototype
Design patterns - Gang of Four - Observer e PrototypeDesign patterns - Gang of Four - Observer e Prototype
Design patterns - Gang of Four - Observer e Prototype
DanielChristofolli
 
Soa x microservices e versionamento de contrato de API
Soa x microservices e versionamento de contrato de APISoa x microservices e versionamento de contrato de API
Soa x microservices e versionamento de contrato de API
DanielChristofolli
 
Api best practices - SOAP vs REST
Api best practices - SOAP vs RESTApi best practices - SOAP vs REST
Api best practices - SOAP vs REST
DanielChristofolli
 
Novidades java 8, 9, 10 e11
Novidades java 8, 9, 10 e11Novidades java 8, 9, 10 e11
Novidades java 8, 9, 10 e11
DanielChristofolli
 

Mais de DanielChristofolli (6)

Docker
DockerDocker
Docker
 
Gradle spring-hateoas-Lombok
Gradle spring-hateoas-LombokGradle spring-hateoas-Lombok
Gradle spring-hateoas-Lombok
 
Design patterns - Gang of Four - Observer e Prototype
Design patterns - Gang of Four - Observer e PrototypeDesign patterns - Gang of Four - Observer e Prototype
Design patterns - Gang of Four - Observer e Prototype
 
Soa x microservices e versionamento de contrato de API
Soa x microservices e versionamento de contrato de APISoa x microservices e versionamento de contrato de API
Soa x microservices e versionamento de contrato de API
 
Api best practices - SOAP vs REST
Api best practices - SOAP vs RESTApi best practices - SOAP vs REST
Api best practices - SOAP vs REST
 
Novidades java 8, 9, 10 e11
Novidades java 8, 9, 10 e11Novidades java 8, 9, 10 e11
Novidades java 8, 9, 10 e11
 

Princípios de Programação Orientada a Objetos Solid, dry e kiss

  • 1. SOLID, DRY & KISS Princípios de POO Apresentação 3 Daniel Christofolli
  • 2. SOLID SOLID é um acrônimo dos cinco primeiros princípios da programação orientada a objetos e design de código identificados por Robert C. Martin (ou Uncle Bob) por volta do ano 2000. O acrônimo SOLID foi introduzido por Michael Feathers, após observar que os cinco princípios poderiam se encaixar nesta palavra.
  • 3. S SRP Princípio da Responsabilidade Única Uma classe deve ter um, e somente um, motivo para mudar. O OCPPrincípio Aberto-Fechado Você deve ser capaz de estender um comportamento de uma classe, sem modificá-lo. L LSP Princípio da Substituição de Liskov As classes base devem ser substituíveis por suas classes derivadas. I ISP Princípio da Segregação da Interface Muitas interfaces específicas são melhores do que uma interface única. D DIP Princípio da inversão da dependência Dependa de uma abstração e não de uma implementação.
  • 4. Single Responsibility Principle Princípio da responsabilidade única Uma classe deve ter uma responsabilidade bem definida
  • 7. Open/Closed Principle Princípio do aberto/fechado Uma classe deve ser aberta para ampliação mas fechada para modificação
  • 9. Liskov Substitution Principle Princípio da substituição de Liskov Uma classe derivada deve ser substituível pela sua classe base
  • 10. As classes ArquivoWord e ArquivoPDF são extensões da classe Arquivo, porém não usam o polimorfismo LSP - Código Ruim
  • 11. A classe Quadrado herda da classe Retangulo, porém, sobrescreve o método que calcula a área LSP - Código Ruim
  • 13. Interface Segregation Principle Princípio da Segregação de Interface Muitas interfaces específicas são melhores do que uma interface geral. Uma interface deve ser enxuta, com poucos comportamentos
  • 14. Código ruim, pois está usando a interface da forma errada ISP - Código Ruim
  • 16. Dependency Inversion Principle Princípio da inversão de dependências Devemos “depender de abstrações e não de classes concretas”. ● “Módulos de alto nível não devem depender de módulos de baixo nível.” ● “As abstrações não devem depender de detalhes. Os detalhes devem depender das abstrações.”
  • 19. DRY Do not Repeat Yourself ● Cada parte do conhecimento deve ter uma representação única, não ambígua e definitiva dentro do sistema. ● Menos código é bom: economiza tempo e esforço, é fácil de manter e também reduz as chances de erros.
  • 22. KISS Keep It Simple, Stupid Vantagens: ● Você será capaz de resolver mais problemas e com ainda mais eficiência; ● Você será capaz de produzir scripts que resolvem problemas complexos com poucas linhas de código; ● Seus códigos terão muitos mais qualidade; ● Você será capaz de construir grandes sistemas fáceis de manter; ● Sua base de código será mais flexível, fácil para estender, modificar ou refatorar quando novas funcionalidades forem solicitadas; ● Você será capaz de produzir mais do que já imaginava como um developer; ● Você será capaz de trabalhar em grandes grupos de desenvolvimento e em grandes projetos desde que todos mantenham os códigos estupidamente simples.
  • 23. KISS Keep It Simple, Stupid Resumo Os melhores algoritmos são muitas vezes aqueles com poucas linhas de código. E quando lemos o código linha a linha, podemos facilmente entender o que está sendo feito. A inovação consiste em quebrar o problema cada vez mais em problemas menores a ponto de eles ficarem muito fáceis de entender e implementar. Muitos dos grandes solucionadores de problemas de códigos não são excelentes codificadores, mas eles ainda produzem um excelente (simples) código.
  • 26. Conclusão Se usarmos esses princípios, teremos um código fácil de se manter, testar, reutilizar, estender e evoluir.