SlideShare a Scribd company logo
1 of 11
DependencyInversionPrinciple Guilherme Pereira Túlio Guimarães
Classes de baixo nível que realizam operações básicas. Classes de alto nível com a lógica complexa. Dependência entre as duas classes. Rigidez, fragilidade e imobilidade. Introduzir uma camada de abstração entre as duas classes.
Princípio: ,[object Object]
abstrações não devem depender de detalhes. Os detalhes é que devem depender das abstrações,[object Object]
StragetyMethod. Estes dois padrões escondem as especificidades de um algoritmo  tanto via herança (Template) ou delegação  via uma interface (Strategy)
Antes:
publicclass Trabalhador { privateBooleantemValeTransporte; privateBooleantemValeRefeicao; privatedoublesalarioBase; } publicclassValeRefeicao { privatedoublevr = 12; publicdoubleretornarValorValeRefeicao(intdiasNoMes){ returndiasNoMes * vr;     } }
publicclassCalculadoraSalario {     Trabalhador trabalhador; privateintdiasUteisMes; publicvoidCalculadoraSalario(int dias, Trabalhador trab) {         trabalhador = trab; diasUteisMes = dias;     } publicdoubleretornarSalarioBase(){ return trabalhador.getSalarioBase();     } publicdoubleretornarSomaBeneficios(){ double total = 0; if(trabalhador.getTemValeRefeicao())         {             total += newValeRefeicao().retornarValorValeRefeicao(diasUteisMes);         } if(trabalhador.getTemValeTransporte())         {             total += newValeTransporte().retornarValorValeTransporte(diasUteisMes);         } return total;     }
Depois:
public interface IBeneficios { doubleretornarValorBeneficio(intdiasNoMes); } publicclassValeRefeicaoimplementsIBeneficios { privatedoublevr = 12; publicdoubleretornarValorBeneficio(intdiasNoMes){ returndiasNoMes * vr;     } }
publicclass Trabalhador { privatedoublesalarioBase; privateList<IBeneficios> listaDeBeneficios; public Trabalhador(){ listaDeBeneficios = newLinkedList<IBeneficios>();     } publicList<IBeneficios> getListaDeBeneficios() { returnlistaDeBeneficios;     } publicvoidsetListaDeBeneficios(List<IBeneficios> listaDeBeneficios) { this.listaDeBeneficios = listaDeBeneficios;     } }

More Related Content

What's hot

Java orientação a objetos (interfaces)
Java   orientação a objetos (interfaces)Java   orientação a objetos (interfaces)
Java orientação a objetos (interfaces)
Armando Daniel
 

What's hot (7)

Aula 2
Aula 2Aula 2
Aula 2
 
10. Encapsulação; Cópia de instâncias; Igualdade de instâncias – Fundamentos ...
10. Encapsulação; Cópia de instâncias; Igualdade de instâncias – Fundamentos ...10. Encapsulação; Cópia de instâncias; Igualdade de instâncias – Fundamentos ...
10. Encapsulação; Cópia de instâncias; Igualdade de instâncias – Fundamentos ...
 
[Curso Java Basico] Aula 61: Passagem de parametros por valor e referencia
[Curso Java Basico] Aula 61: Passagem de parametros por valor e referencia[Curso Java Basico] Aula 61: Passagem de parametros por valor e referencia
[Curso Java Basico] Aula 61: Passagem de parametros por valor e referencia
 
F sharp e o paradigma funcional
F sharp e o paradigma funcionalF sharp e o paradigma funcional
F sharp e o paradigma funcional
 
9. Operação toString(); Classes, instâncias e objectos; Scanner – Fundamentos...
9. Operação toString(); Classes, instâncias e objectos; Scanner – Fundamentos...9. Operação toString(); Classes, instâncias e objectos; Scanner – Fundamentos...
9. Operação toString(); Classes, instâncias e objectos; Scanner – Fundamentos...
 
Java orientação a objetos (interfaces)
Java   orientação a objetos (interfaces)Java   orientação a objetos (interfaces)
Java orientação a objetos (interfaces)
 
Algoritmos Aula 03
Algoritmos Aula 03Algoritmos Aula 03
Algoritmos Aula 03
 

Viewers also liked

Golf Clubs - All About Golf
Golf Clubs - All About GolfGolf Clubs - All About Golf
Golf Clubs - All About Golf
Agnes Bell
 
Chapter 1 lesson 2
Chapter 1 lesson 2Chapter 1 lesson 2
Chapter 1 lesson 2
Dan
 
Santrock.dev psych.chpt 10.outline
Santrock.dev psych.chpt 10.outlineSantrock.dev psych.chpt 10.outline
Santrock.dev psych.chpt 10.outline
jhoegh
 
Sla primary-school-library-charter-v2[2]
Sla primary-school-library-charter-v2[2]Sla primary-school-library-charter-v2[2]
Sla primary-school-library-charter-v2[2]
esperancasantos
 
Skynews newsletter sub ads
Skynews newsletter sub adsSkynews newsletter sub ads
Skynews newsletter sub ads
erooney
 
Weekend news
Weekend newsWeekend news
Weekend news
krivit
 
Dev Psych.ch5.keynote
Dev Psych.ch5.keynoteDev Psych.ch5.keynote
Dev Psych.ch5.keynote
jhoegh
 
Weekend news
Weekend newsWeekend news
Weekend news
krivit
 
ทับแก้วยามเย็น
ทับแก้วยามเย็นทับแก้วยามเย็น
ทับแก้วยามเย็น
singhasiri
 

Viewers also liked (20)

Golf Clubs - All About Golf
Golf Clubs - All About GolfGolf Clubs - All About Golf
Golf Clubs - All About Golf
 
Chapter 1 lesson 2
Chapter 1 lesson 2Chapter 1 lesson 2
Chapter 1 lesson 2
 
Event in Hospitality Education! Master Of Science HES-SO in Global Hospitalit...
Event in Hospitality Education! Master Of Science HES-SO in Global Hospitalit...Event in Hospitality Education! Master Of Science HES-SO in Global Hospitalit...
Event in Hospitality Education! Master Of Science HES-SO in Global Hospitalit...
 
Test cross cultural big
Test cross cultural bigTest cross cultural big
Test cross cultural big
 
Santrock.dev psych.chpt 10.outline
Santrock.dev psych.chpt 10.outlineSantrock.dev psych.chpt 10.outline
Santrock.dev psych.chpt 10.outline
 
Sla primary-school-library-charter-v2[2]
Sla primary-school-library-charter-v2[2]Sla primary-school-library-charter-v2[2]
Sla primary-school-library-charter-v2[2]
 
Skynews newsletter sub ads
Skynews newsletter sub adsSkynews newsletter sub ads
Skynews newsletter sub ads
 
Paula Belyeu Application 4
Paula Belyeu Application 4Paula Belyeu Application 4
Paula Belyeu Application 4
 
Weekend news
Weekend newsWeekend news
Weekend news
 
Dev Psych.ch5.keynote
Dev Psych.ch5.keynoteDev Psych.ch5.keynote
Dev Psych.ch5.keynote
 
Weekend news
Weekend newsWeekend news
Weekend news
 
Dichotomy
DichotomyDichotomy
Dichotomy
 
Dor Field School 2007prt 2
Dor Field School 2007prt 2Dor Field School 2007prt 2
Dor Field School 2007prt 2
 
Bot orientation 2010
Bot orientation 2010Bot orientation 2010
Bot orientation 2010
 
Steam turbine markets in Asian countries – China, India, Japan, South Korea, ...
Steam turbine markets in Asian countries – China, India, Japan, South Korea, ...Steam turbine markets in Asian countries – China, India, Japan, South Korea, ...
Steam turbine markets in Asian countries – China, India, Japan, South Korea, ...
 
ClearLakeAOR
ClearLakeAORClearLakeAOR
ClearLakeAOR
 
ทับแก้วยามเย็น
ทับแก้วยามเย็นทับแก้วยามเย็น
ทับแก้วยามเย็น
 
Motor vehicle parts markets in Asia
Motor vehicle parts markets in AsiaMotor vehicle parts markets in Asia
Motor vehicle parts markets in Asia
 
Chapter 1 Section 1
Chapter 1 Section 1Chapter 1 Section 1
Chapter 1 Section 1
 
Pavasaris
PavasarisPavasaris
Pavasaris
 

Similar to Dip the dependency inversion principle

introdução a linguagem java-2003
introdução a linguagem java-2003introdução a linguagem java-2003
introdução a linguagem java-2003
elliando dias
 
Introdução à análise orientada a objetos parte 2
Introdução à análise orientada a objetos parte 2Introdução à análise orientada a objetos parte 2
Introdução à análise orientada a objetos parte 2
irenescotolo
 

Similar to Dip the dependency inversion principle (20)

Refactoring
RefactoringRefactoring
Refactoring
 
introdução a linguagem java-2003
introdução a linguagem java-2003introdução a linguagem java-2003
introdução a linguagem java-2003
 
Tutorial java orientação a objetos parte 1
Tutorial java orientação a objetos parte 1Tutorial java orientação a objetos parte 1
Tutorial java orientação a objetos parte 1
 
Aula 3 - Java Prof.ª Cristiane Fidelix
Aula 3 -  Java Prof.ª Cristiane FidelixAula 3 -  Java Prof.ª Cristiane Fidelix
Aula 3 - Java Prof.ª Cristiane Fidelix
 
Como conectar programas em linguagem java a bases de dados
Como conectar programas em linguagem java  a bases de dadosComo conectar programas em linguagem java  a bases de dados
Como conectar programas em linguagem java a bases de dados
 
Palestra Mocks - AgileBrazil 2010
Palestra Mocks - AgileBrazil 2010Palestra Mocks - AgileBrazil 2010
Palestra Mocks - AgileBrazil 2010
 
Refatoração de código com Capitão Nascimento versão completa
Refatoração de código com Capitão Nascimento versão completaRefatoração de código com Capitão Nascimento versão completa
Refatoração de código com Capitão Nascimento versão completa
 
Encapsulamento em oo
Encapsulamento em ooEncapsulamento em oo
Encapsulamento em oo
 
04 modelagem classes
04 modelagem classes04 modelagem classes
04 modelagem classes
 
JTableView - Swing
JTableView - SwingJTableView - Swing
JTableView - Swing
 
Programação Orientada por Objectos - Aula 2
Programação Orientada por Objectos - Aula 2Programação Orientada por Objectos - Aula 2
Programação Orientada por Objectos - Aula 2
 
VRaptor4
VRaptor4VRaptor4
VRaptor4
 
13. Polimorfismo de subtipos; Análise, desenho e implementação – Fundamentos ...
13. Polimorfismo de subtipos; Análise, desenho e implementação – Fundamentos ...13. Polimorfismo de subtipos; Análise, desenho e implementação – Fundamentos ...
13. Polimorfismo de subtipos; Análise, desenho e implementação – Fundamentos ...
 
Curso Java Básico - Aula 03
Curso Java Básico - Aula 03Curso Java Básico - Aula 03
Curso Java Básico - Aula 03
 
Evento Front End SP - Organizando o Javascript
 Evento Front End SP - Organizando o Javascript Evento Front End SP - Organizando o Javascript
Evento Front End SP - Organizando o Javascript
 
Introdução à análise orientada a objetos parte 2
Introdução à análise orientada a objetos parte 2Introdução à análise orientada a objetos parte 2
Introdução à análise orientada a objetos parte 2
 
Refatoração e Boas Práticas no Desenvolvimento de Software com a Linguagem Ja...
Refatoração e Boas Práticas no Desenvolvimento de Software com a Linguagem Ja...Refatoração e Boas Práticas no Desenvolvimento de Software com a Linguagem Ja...
Refatoração e Boas Práticas no Desenvolvimento de Software com a Linguagem Ja...
 
Design OO
Design OODesign OO
Design OO
 
Construtores_Sobrecarga.pptx
Construtores_Sobrecarga.pptxConstrutores_Sobrecarga.pptx
Construtores_Sobrecarga.pptx
 
Java 06
Java 06Java 06
Java 06
 

More from Engenharia de Software Ágil

More from Engenharia de Software Ágil (20)

Sap – stablility and abstract principle
Sap – stablility and abstract principleSap – stablility and abstract principle
Sap – stablility and abstract principle
 
Sap – stablility and abstract principle
Sap – stablility and abstract principleSap – stablility and abstract principle
Sap – stablility and abstract principle
 
Sap – stablility and abstract principle
Sap – stablility and abstract principleSap – stablility and abstract principle
Sap – stablility and abstract principle
 
Common closure principle
Common closure principleCommon closure principle
Common closure principle
 
Common closure principle
Common closure principle Common closure principle
Common closure principle
 
Acyclic dependencies principle
Acyclic dependencies principleAcyclic dependencies principle
Acyclic dependencies principle
 
Acyclic dependencies principle (adp)
Acyclic dependencies principle  (adp)Acyclic dependencies principle  (adp)
Acyclic dependencies principle (adp)
 
Reuse release equivalence principle
Reuse release equivalence principleReuse release equivalence principle
Reuse release equivalence principle
 
Rep reuse release equivalence principle
Rep reuse release equivalence principleRep reuse release equivalence principle
Rep reuse release equivalence principle
 
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
 
Sdp – stable dependencies principles
Sdp – stable dependencies principlesSdp – stable dependencies principles
Sdp – stable dependencies principles
 
principio de reutilização comum
principio de reutilização comumprincipio de reutilização comum
principio de reutilização comum
 
Princípio law of demeter
Princípio law of demeterPrincípio law of demeter
Princípio law of demeter
 
Lod law of demeter
Lod law of demeterLod law of demeter
Lod law of demeter
 
Dip the dependency inversion principle
Dip   the dependency inversion principleDip   the dependency inversion principle
Dip the dependency inversion principle
 
(ISP) - Interface Segregation Principle
(ISP)  - Interface Segregation Principle(ISP)  - Interface Segregation Principle
(ISP) - Interface Segregation Principle
 
LSP – The Liskov Substitution Principle
LSP – The Liskov Substitution PrincipleLSP – The Liskov Substitution Principle
LSP – The Liskov Substitution Principle
 
SRP - Single Responsability Principle
SRP - Single Responsability PrincipleSRP - Single Responsability Principle
SRP - Single Responsability Principle
 
Princípio Law Of Demeter (LOD)
Princípio Law Of Demeter (LOD)Princípio Law Of Demeter (LOD)
Princípio Law Of Demeter (LOD)
 
TDD - Test Driven Development
TDD - Test Driven DevelopmentTDD - Test Driven Development
TDD - Test Driven Development
 

Dip the dependency inversion principle

  • 2. Classes de baixo nível que realizam operações básicas. Classes de alto nível com a lógica complexa. Dependência entre as duas classes. Rigidez, fragilidade e imobilidade. Introduzir uma camada de abstração entre as duas classes.
  • 3.
  • 4.
  • 5. StragetyMethod. Estes dois padrões escondem as especificidades de um algoritmo tanto via herança (Template) ou delegação via uma interface (Strategy)
  • 7. publicclass Trabalhador { privateBooleantemValeTransporte; privateBooleantemValeRefeicao; privatedoublesalarioBase; } publicclassValeRefeicao { privatedoublevr = 12; publicdoubleretornarValorValeRefeicao(intdiasNoMes){ returndiasNoMes * vr; } }
  • 8. publicclassCalculadoraSalario { Trabalhador trabalhador; privateintdiasUteisMes; publicvoidCalculadoraSalario(int dias, Trabalhador trab) { trabalhador = trab; diasUteisMes = dias; } publicdoubleretornarSalarioBase(){ return trabalhador.getSalarioBase(); } publicdoubleretornarSomaBeneficios(){ double total = 0; if(trabalhador.getTemValeRefeicao()) { total += newValeRefeicao().retornarValorValeRefeicao(diasUteisMes); } if(trabalhador.getTemValeTransporte()) { total += newValeTransporte().retornarValorValeTransporte(diasUteisMes); } return total; }
  • 10. public interface IBeneficios { doubleretornarValorBeneficio(intdiasNoMes); } publicclassValeRefeicaoimplementsIBeneficios { privatedoublevr = 12; publicdoubleretornarValorBeneficio(intdiasNoMes){ returndiasNoMes * vr; } }
  • 11. publicclass Trabalhador { privatedoublesalarioBase; privateList<IBeneficios> listaDeBeneficios; public Trabalhador(){ listaDeBeneficios = newLinkedList<IBeneficios>(); } publicList<IBeneficios> getListaDeBeneficios() { returnlistaDeBeneficios; } publicvoidsetListaDeBeneficios(List<IBeneficios> listaDeBeneficios) { this.listaDeBeneficios = listaDeBeneficios; } }
  • 12. publicclassCalculadoraSalario { Trabalhador trabalhador; privateintdiasUteisMes; publicvoidCalculadoraSalario(int dias, Trabalhador trab) { trabalhador = trab; diasUteisMes = dias; } publicdoubleretornaSalarioBase() { return trabalhador.getSalarioBase(); } publicdoubleretornaTotalBeneficios() { double total = 0; for(IBeneficios b : trabalhador.getListaDeBeneficios()) { total += b.retornarValorBeneficio(diasUteisMes); } return total; } }