SlideShare ist ein Scribd-Unternehmen logo
1 von 29
PRINCÍPIOS
SOLID
Introdução aos princípios SOLID
Jefferson Martins Cardoso
jefferson.mcardoso@yahoo.com.br
“Enquanto a programação estruturada tem
como principal foco as ações
(procedimentos e funções), a programação
OO se preocupa com os objetos e seus
relacionamentos”.
O que é SOLID?
O que é SOLID?
Os princípios SOLID são
cinco princípios básicos
de programação e design
orientados a objetos,
introduzidos por Uncle
Bob no início de 2000. Robert C. Martin (Uncle
Bob)
Princípios
SRP – Princípio da Responsabilidade Única
OCP – Princípio Aberto e Fechado
LSP – Princípio da Substituição de Liskov
ISP – Princípio da Segregação de Interface
DIP – Princípio da Inversão de Dependência
Benefícios
Código fácil de se manter, adaptar e se ajustar
às alterações de escopo;
Código testável e de fácil entendimento;
Código extensível para alterações com o
menor esforço necessário;
Que forneça o máximo de reaproveitamento;
Princípio da Responsabilidade Única
“Uma classe deve ter um, e somente um,
motivo para mudar”.
Princípio da Responsabilidade Única
class DebitoContaCorrente
{
public function ValidarSaldo($valor) { }
public function DebitarConta($valor) { }
public function EmitirComprovante() { }
}
Princípio da Responsabilidade Única
Essa classe valida o saldo e debita conta e
emite comprovante. Ela tende a crescer muito,
pois cada vez que houver alguma mudança
na forma de validar o saldo, ou na forma de
debitar, ou na forma de emitir comprovante
essa classe será alterada.
Agora, aplicando o SRP...
Princípio da Responsabilidade Única
public class DebitoContaCorrente{
public function DebitarConta($valor) { }
}
public class SaldoContaCorrente{
public function ValidarSaldo($valor) { }
}
public class ComprovanteContaCorrente{
public function EmitirComprovante() { }
}
Princípio da Responsabilidade Única
Agora, as responsabilidades estão
separadas e cada classe tem a sua função.
Princípio do Aberto e Fechado
Entidades de software (classes, módulos,
funções, etc) devem estar abertas para
extensão, mas fechadas para modificação.
Princípio do Aberto e Fechado
Princípio do Aberto e Fechado
abstract class CalculadoraSalarioBase{
public function CalcularSalario() ;
}
class CalculadoraSalarioAnalista extends CalculadoraSalarioBase{
public function CalcularSalario() { return 5000; }
}
class CalculadoraSalarioArquiteto extends CalculadoraSalarioBase{
public function CalcularSalario() { return 7000; }
}
Princípio do Aberto e Fechado
Segundo o OCP, a classe base
(CalculadoraSalarioBase) nunca pode mudar
(fechada para modificação), porém a posso
tranquilamente estender outras classes a
partir dela(CalculadoraSalarioDiretor,
CalculadoraSalarioEstagiario, etc.)
Princípio da substituição de Liskov
Se q(x) é uma propriedade demonstrável
dos objetos x de tipo T. Então q(y) deve
ser verdadeiro para objetos y de tipo S
onde S é um subtipo de T.
Princípio da substituição de Liskov
Sempre que uma classe cliente esperar
uma instância de uma classe base X, uma
instância de uma subclasse Y de X deve
poder ser usada no seu lugar.
Princípio da substituição de Liskov
Um Quadrado
é um
Retângulo?
Princípio da segregação de interfaces
Muitas interfaces específicas são melhores
do que uma interface única.
Princípio da segregação de interfaces
Princípio da segregação de interfaces
Essa classe “SuperInterface” fere o ISP, pois os
clientes são obrigados a utilizar uma interface a
qual não necessitam. As implementações desta
interface precisarão também suprir as
necessidades dos clientes, implementando
métodos que não serão utilizados e/ou não são
de sua responsabilidade.
Princípio da inversão de dependência
Dependa de uma abstração(interfaces) e
não de uma implementação(classes
concretas).
Princípio da inversão de dependência
public class Botao{
private Lampada _lampada;
public void Acionar()
{
if (condicao)
_lampada.Ligar();
}
}
Princípio da inversão de dependência
Esse exemplo viola o DIP, uma vez que o
atributo _lampada receberá uma classe
concreta em vez de uma interface. Sendo
que dessa forma o funcionamento do
método acionar fica restrito apenas a
“Lampada”.
Princípio da inversão de dependência
O correto é que em vez de usarmos uma
classe especifica criarmos uma interface
Dispositivo, na qual a classe Lampada a
implementará. Assim, o funcionamento da
classe Botao será estendido para todas as
classes que implementarem Dispositivo,
nos dando flexibilidade.
Princípio da inversão de dependência
public class Botao{
private Dispositivo
_dispositivo;
public void Acionar(){
if (condicao)
_dispositivo.Ligar();
}
}
public interface Dispositivo{
void Ligar();
void Desligar();
}
public class Lampada : Dispositivo{
public void Ligar() {
// ligar lampada
}
public void Desligar(){
//desligar lampada
}
}
Princípio da inversão de dependência
“Classes devem ter alta coesão e baixo
acoplamento.”
“Programe voltado a interface e não à
implementação.”
“Evite herança, prefira composição.”
http://www.infoq.com/br/presentations/principios-solid
http://eduardopires.net.br/2013/04/orientacao-a-objeto-solid/
https://brizeno.wordpress.com/2012/01/15/principios-de-design-de-
software-interface-segregation-principle/
http://www.macoratti.net/11/05/pa_solid.htm
Bibliografia
PRINCÍPIOS
SOLID
Introdução aos princípios SOLID
Jefferson Martins Cardoso
jefferson.mcardoso@yahoo.com.br

Weitere ähnliche Inhalte

Was ist angesagt?

Boas práticas para desenvolvimento de software
Boas práticas para desenvolvimento de softwareBoas práticas para desenvolvimento de software
Boas práticas para desenvolvimento de softwarePedro Hübner
 
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
 
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/fechadoEngenharia de Software Ágil
 
Princípios solid
Princípios solidPrincípios solid
Princípios solidDyego Costa
 
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 - SOLIDBruno Mazzo
 
Padrão de Projeto Observer
Padrão de Projeto ObserverPadrão de Projeto Observer
Padrão de Projeto ObserverLuiza Uira
 
SCAP ( Security Content Automation Protocol ) na BSides São Paulo 2014
SCAP ( Security Content Automation Protocol ) na BSides São Paulo 2014SCAP ( Security Content Automation Protocol ) na BSides São Paulo 2014
SCAP ( Security Content Automation Protocol ) na BSides São Paulo 2014Rodrigo Montoro
 
Padrões de Projeto - Observer
Padrões de Projeto - ObserverPadrões de Projeto - Observer
Padrões de Projeto - ObserverJuliana Cindra
 
Padrão Observer (Java)
Padrão Observer (Java)Padrão Observer (Java)
Padrão Observer (Java)Allan Denis
 

Was ist angesagt? (12)

Boas práticas para desenvolvimento de software
Boas práticas para desenvolvimento de softwareBoas práticas para desenvolvimento de software
Boas práticas para desenvolvimento de software
 
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
 
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
 
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.
 
Solid
SolidSolid
Solid
 
Princípios solid
Princípios solidPrincípios solid
Princípios solid
 
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
 
Padrão de Projeto Observer
Padrão de Projeto ObserverPadrão de Projeto Observer
Padrão de Projeto Observer
 
SCAP ( Security Content Automation Protocol ) na BSides São Paulo 2014
SCAP ( Security Content Automation Protocol ) na BSides São Paulo 2014SCAP ( Security Content Automation Protocol ) na BSides São Paulo 2014
SCAP ( Security Content Automation Protocol ) na BSides São Paulo 2014
 
Padrões de Projeto - Observer
Padrões de Projeto - ObserverPadrões de Projeto - Observer
Padrões de Projeto - Observer
 
Padrão Observer (Java)
Padrão Observer (Java)Padrão Observer (Java)
Padrão Observer (Java)
 
Clean architecture
Clean architectureClean architecture
Clean architecture
 

Ähnlich wie Dojo solid

qualidade de código: boas práticas, princípios e padrões
qualidade de código: boas práticas, princípios e padrõesqualidade de código: boas práticas, princípios e padrões
qualidade de código: boas práticas, princípios e padrõesedgarddavidson.com
 
principios_SOLID_resumo.pdf
principios_SOLID_resumo.pdfprincipios_SOLID_resumo.pdf
principios_SOLID_resumo.pdfssuser9941f1
 
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 coreRodolfo Fadino Junior
 
Apresentacao Boas praticas, revisão java, SOLID, KISS, DRY, design patterns, ...
Apresentacao Boas praticas, revisão java, SOLID, KISS, DRY, design patterns, ...Apresentacao Boas praticas, revisão java, SOLID, KISS, DRY, design patterns, ...
Apresentacao Boas praticas, revisão java, SOLID, KISS, DRY, design patterns, ...Vinicius Pulgatti
 
Programação Funcional - Luiz Stangarlin
Programação Funcional - Luiz StangarlinProgramação Funcional - Luiz Stangarlin
Programação Funcional - Luiz StangarlinDev PP
 
Arquitetura mix thiagoboufleuhr
Arquitetura mix thiagoboufleuhrArquitetura mix thiagoboufleuhr
Arquitetura mix thiagoboufleuhrThiago Boufleuhr
 
Modelagem de sistemas
Modelagem de sistemasModelagem de sistemas
Modelagem de sistemassauloroos01
 
Refatoracao de codigo
Refatoracao de codigoRefatoracao de codigo
Refatoracao de codigoPaula Santana
 
SOLID - Princípio da Responsabilidade Única
SOLID - Princípio da Responsabilidade ÚnicaSOLID - Princípio da Responsabilidade Única
SOLID - Princípio da Responsabilidade ÚnicaAndré Faria Gomes
 
Programação orientada a objetos
Programação orientada a objetosProgramação orientada a objetos
Programação orientada a objetosCleyton Ferrari
 
TDC2022 - Como desacoplar Componentes aplicando DI e IoC com Kotlin e Spring....
TDC2022 - Como desacoplar Componentes aplicando DI e IoC com Kotlin e Spring....TDC2022 - Como desacoplar Componentes aplicando DI e IoC com Kotlin e Spring....
TDC2022 - Como desacoplar Componentes aplicando DI e IoC com Kotlin e Spring....Fabiano Góes
 
Construção de Frameworks com Annotation e Reflection API em Java
Construção de Frameworks com Annotation e Reflection API em JavaConstrução de Frameworks com Annotation e Reflection API em Java
Construção de Frameworks com Annotation e Reflection API em JavaFernando Camargo
 

Ähnlich wie Dojo solid (20)

qualidade de código: boas práticas, princípios e padrões
qualidade de código: boas práticas, princípios e padrõesqualidade de código: boas práticas, princípios e padrões
qualidade de código: boas práticas, princípios e padrões
 
principios_SOLID_resumo.pdf
principios_SOLID_resumo.pdfprincipios_SOLID_resumo.pdf
principios_SOLID_resumo.pdf
 
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
 
Introdução ao TDD
Introdução ao TDDIntrodução ao TDD
Introdução ao TDD
 
Solid
SolidSolid
Solid
 
Apresentacao Boas praticas, revisão java, SOLID, KISS, DRY, design patterns, ...
Apresentacao Boas praticas, revisão java, SOLID, KISS, DRY, design patterns, ...Apresentacao Boas praticas, revisão java, SOLID, KISS, DRY, design patterns, ...
Apresentacao Boas praticas, revisão java, SOLID, KISS, DRY, design patterns, ...
 
Programação Funcional - Luiz Stangarlin
Programação Funcional - Luiz StangarlinProgramação Funcional - Luiz Stangarlin
Programação Funcional - Luiz Stangarlin
 
SOLID
SOLID SOLID
SOLID
 
Arquitetura mix thiagoboufleuhr
Arquitetura mix thiagoboufleuhrArquitetura mix thiagoboufleuhr
Arquitetura mix thiagoboufleuhr
 
Modelagem de sistemas
Modelagem de sistemasModelagem de sistemas
Modelagem de sistemas
 
Refatoracao de codigo
Refatoracao de codigoRefatoracao de codigo
Refatoracao de codigo
 
JAVA REFLETCION
JAVA REFLETCIONJAVA REFLETCION
JAVA REFLETCION
 
Strategy pattern
Strategy patternStrategy pattern
Strategy pattern
 
Java - Boas práticas
Java - Boas práticasJava - Boas práticas
Java - Boas práticas
 
SOLID - Princípio da Responsabilidade Única
SOLID - Princípio da Responsabilidade ÚnicaSOLID - Princípio da Responsabilidade Única
SOLID - Princípio da Responsabilidade Única
 
Programação orientada a objetos
Programação orientada a objetosProgramação orientada a objetos
Programação orientada a objetos
 
TDC2022 - Como desacoplar Componentes aplicando DI e IoC com Kotlin e Spring....
TDC2022 - Como desacoplar Componentes aplicando DI e IoC com Kotlin e Spring....TDC2022 - Como desacoplar Componentes aplicando DI e IoC com Kotlin e Spring....
TDC2022 - Como desacoplar Componentes aplicando DI e IoC com Kotlin e Spring....
 
Mvc delphi
Mvc delphiMvc delphi
Mvc delphi
 
Construção de Frameworks com Annotation e Reflection API em Java
Construção de Frameworks com Annotation e Reflection API em JavaConstrução de Frameworks com Annotation e Reflection API em Java
Construção de Frameworks com Annotation e Reflection API em Java
 
Encapsulamento em oo
Encapsulamento em ooEncapsulamento em oo
Encapsulamento em oo
 

Dojo solid

  • 1. PRINCÍPIOS SOLID Introdução aos princípios SOLID Jefferson Martins Cardoso jefferson.mcardoso@yahoo.com.br
  • 2. “Enquanto a programação estruturada tem como principal foco as ações (procedimentos e funções), a programação OO se preocupa com os objetos e seus relacionamentos”. O que é SOLID?
  • 3. O que é SOLID? Os princípios SOLID são cinco princípios básicos de programação e design orientados a objetos, introduzidos por Uncle Bob no início de 2000. Robert C. Martin (Uncle Bob)
  • 4. Princípios SRP – Princípio da Responsabilidade Única OCP – Princípio Aberto e Fechado LSP – Princípio da Substituição de Liskov ISP – Princípio da Segregação de Interface DIP – Princípio da Inversão de Dependência
  • 5. Benefícios Código fácil de se manter, adaptar e se ajustar às alterações de escopo; Código testável e de fácil entendimento; Código extensível para alterações com o menor esforço necessário; Que forneça o máximo de reaproveitamento;
  • 6. Princípio da Responsabilidade Única “Uma classe deve ter um, e somente um, motivo para mudar”.
  • 7. Princípio da Responsabilidade Única class DebitoContaCorrente { public function ValidarSaldo($valor) { } public function DebitarConta($valor) { } public function EmitirComprovante() { } }
  • 8. Princípio da Responsabilidade Única Essa classe valida o saldo e debita conta e emite comprovante. Ela tende a crescer muito, pois cada vez que houver alguma mudança na forma de validar o saldo, ou na forma de debitar, ou na forma de emitir comprovante essa classe será alterada. Agora, aplicando o SRP...
  • 9. Princípio da Responsabilidade Única public class DebitoContaCorrente{ public function DebitarConta($valor) { } } public class SaldoContaCorrente{ public function ValidarSaldo($valor) { } } public class ComprovanteContaCorrente{ public function EmitirComprovante() { } }
  • 10. Princípio da Responsabilidade Única Agora, as responsabilidades estão separadas e cada classe tem a sua função.
  • 11. Princípio do Aberto e Fechado Entidades de software (classes, módulos, funções, etc) devem estar abertas para extensão, mas fechadas para modificação.
  • 12. Princípio do Aberto e Fechado
  • 13. Princípio do Aberto e Fechado abstract class CalculadoraSalarioBase{ public function CalcularSalario() ; } class CalculadoraSalarioAnalista extends CalculadoraSalarioBase{ public function CalcularSalario() { return 5000; } } class CalculadoraSalarioArquiteto extends CalculadoraSalarioBase{ public function CalcularSalario() { return 7000; } }
  • 14. Princípio do Aberto e Fechado Segundo o OCP, a classe base (CalculadoraSalarioBase) nunca pode mudar (fechada para modificação), porém a posso tranquilamente estender outras classes a partir dela(CalculadoraSalarioDiretor, CalculadoraSalarioEstagiario, etc.)
  • 15. Princípio da substituição de Liskov Se q(x) é uma propriedade demonstrável dos objetos x de tipo T. Então q(y) deve ser verdadeiro para objetos y de tipo S onde S é um subtipo de T.
  • 16. Princípio da substituição de Liskov Sempre que uma classe cliente esperar uma instância de uma classe base X, uma instância de uma subclasse Y de X deve poder ser usada no seu lugar.
  • 17. Princípio da substituição de Liskov Um Quadrado é um Retângulo?
  • 18. Princípio da segregação de interfaces Muitas interfaces específicas são melhores do que uma interface única.
  • 19. Princípio da segregação de interfaces
  • 20. Princípio da segregação de interfaces Essa classe “SuperInterface” fere o ISP, pois os clientes são obrigados a utilizar uma interface a qual não necessitam. As implementações desta interface precisarão também suprir as necessidades dos clientes, implementando métodos que não serão utilizados e/ou não são de sua responsabilidade.
  • 21. Princípio da inversão de dependência Dependa de uma abstração(interfaces) e não de uma implementação(classes concretas).
  • 22. Princípio da inversão de dependência public class Botao{ private Lampada _lampada; public void Acionar() { if (condicao) _lampada.Ligar(); } }
  • 23. Princípio da inversão de dependência Esse exemplo viola o DIP, uma vez que o atributo _lampada receberá uma classe concreta em vez de uma interface. Sendo que dessa forma o funcionamento do método acionar fica restrito apenas a “Lampada”.
  • 24. Princípio da inversão de dependência O correto é que em vez de usarmos uma classe especifica criarmos uma interface Dispositivo, na qual a classe Lampada a implementará. Assim, o funcionamento da classe Botao será estendido para todas as classes que implementarem Dispositivo, nos dando flexibilidade.
  • 25. Princípio da inversão de dependência public class Botao{ private Dispositivo _dispositivo; public void Acionar(){ if (condicao) _dispositivo.Ligar(); } } public interface Dispositivo{ void Ligar(); void Desligar(); } public class Lampada : Dispositivo{ public void Ligar() { // ligar lampada } public void Desligar(){ //desligar lampada } }
  • 26. Princípio da inversão de dependência
  • 27. “Classes devem ter alta coesão e baixo acoplamento.” “Programe voltado a interface e não à implementação.” “Evite herança, prefira composição.”
  • 29. PRINCÍPIOS SOLID Introdução aos princípios SOLID Jefferson Martins Cardoso jefferson.mcardoso@yahoo.com.br