SlideShare uma empresa Scribd logo
1 de 26
Baixar para ler offline
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

Mais procurados (20)

Kotlin
KotlinKotlin
Kotlin
 
Introdução a Linguagem de Programação PHP
Introdução a Linguagem de Programação PHPIntrodução a Linguagem de Programação PHP
Introdução a Linguagem de Programação PHP
 
How to Build Your Own Test Automation Framework?
How to Build Your Own Test Automation Framework?How to Build Your Own Test Automation Framework?
How to Build Your Own Test Automation Framework?
 
Python Orientação a Objeto
Python Orientação a ObjetoPython Orientação a Objeto
Python Orientação a Objeto
 
Curso de ReactJS
Curso de ReactJSCurso de ReactJS
Curso de ReactJS
 
Design applicatif avec symfony2
Design applicatif avec symfony2Design applicatif avec symfony2
Design applicatif avec symfony2
 
React Native
React Native React Native
React Native
 
Aula - Metodologias Ágeis
Aula - Metodologias ÁgeisAula - Metodologias Ágeis
Aula - Metodologias Ágeis
 
SOLID Principles
SOLID PrinciplesSOLID Principles
SOLID Principles
 
Marathon Testing Tool
Marathon Testing ToolMarathon Testing Tool
Marathon Testing Tool
 
SOLID principles
SOLID principlesSOLID principles
SOLID principles
 
POO - 19 - Elementos Estáticos
POO - 19 - Elementos EstáticosPOO - 19 - Elementos Estáticos
POO - 19 - Elementos Estáticos
 
Aula 1. apresentação + frameworks
Aula 1. apresentação + frameworksAula 1. apresentação + frameworks
Aula 1. apresentação + frameworks
 
clean code
clean codeclean code
clean code
 
Introdução ao Front-end no Desenvolvimento Web
Introdução ao Front-end no Desenvolvimento WebIntrodução ao Front-end no Desenvolvimento Web
Introdução ao Front-end no Desenvolvimento Web
 
Princípios SOLID
Princípios SOLIDPrincípios SOLID
Princípios SOLID
 
Minicurso - Teste de software (CACSI 2015)
Minicurso - Teste de software (CACSI 2015)Minicurso - Teste de software (CACSI 2015)
Minicurso - Teste de software (CACSI 2015)
 
Javascript best practices
Javascript best practicesJavascript best practices
Javascript best practices
 
Java 09 Heranca Reescrita Polimorfismo
Java 09 Heranca Reescrita PolimorfismoJava 09 Heranca Reescrita Polimorfismo
Java 09 Heranca Reescrita Polimorfismo
 
Python Programlama Dili
Python Programlama DiliPython Programlama Dili
Python Programlama Dili
 

Semelhante a SOLID, DRY e KISS na POO

Um desenvolvedor com princípios SOLID
Um desenvolvedor com princípios SOLIDUm desenvolvedor com princípios SOLID
Um desenvolvedor com princípios SOLIDHélio Medeiros
 
SOLID - Teoria e Prática
SOLID - Teoria e PráticaSOLID - Teoria e Prática
SOLID - Teoria e PráticaEduardo Pires
 
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 passosGabrielly Gomes
 
boas praticas
boas praticasboas praticas
boas praticaslcbj
 
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
 
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ódigoBonoBee
 
#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 mainstreamsJacqueline Abreu
 
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 lindoAnna Cruz
 

Semelhante a SOLID, DRY e KISS na POO (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
 
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
 
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
 

Mais de 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 PrototypeDanielChristofolli
 
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 APIDanielChristofolli
 
Api best practices - SOAP vs REST
Api best practices - SOAP vs RESTApi best practices - SOAP vs REST
Api best practices - SOAP vs RESTDanielChristofolli
 

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
 

SOLID, DRY e KISS na POO

  • 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.