Dip the dependency inversion principle
Click here to load reader
-
Upload
engenharia-de-software-agil -
Category
Technology
-
view
760 -
download
0
Transcript of Dip the dependency inversion principle
![Page 1: Dip the dependency inversion principle](https://reader038.fdocumentos.tips/reader038/viewer/2022100518/559582a81a28ab0e548b468b/html5/thumbnails/1.jpg)
Dependency Inversion Principle
Guilherme PereiraTúlio Guimarães
![Page 2: Dip the dependency inversion principle](https://reader038.fdocumentos.tips/reader038/viewer/2022100518/559582a81a28ab0e548b468b/html5/thumbnails/2.jpg)
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.
![Page 3: Dip the dependency inversion principle](https://reader038.fdocumentos.tips/reader038/viewer/2022100518/559582a81a28ab0e548b468b/html5/thumbnails/3.jpg)
Princípio:
• módulos de alto nível não devem depender de módulos de baixo nível. Ambos devem depender de abstrações
• abstrações não devem depender de detalhes. Os detalhes é que devem depender das abstrações
![Page 4: Dip the dependency inversion principle](https://reader038.fdocumentos.tips/reader038/viewer/2022100518/559582a81a28ab0e548b468b/html5/thumbnails/4.jpg)
Dois padrões de projeto ajudam a implementar este princípio:
• Template Method• Stragety Method.
Estes dois padrões escondem as especificidades de um algoritmo tanto via herança (Template) ou delegação via uma interface (Strategy)
![Page 5: Dip the dependency inversion principle](https://reader038.fdocumentos.tips/reader038/viewer/2022100518/559582a81a28ab0e548b468b/html5/thumbnails/5.jpg)
Antes:
![Page 6: Dip the dependency inversion principle](https://reader038.fdocumentos.tips/reader038/viewer/2022100518/559582a81a28ab0e548b468b/html5/thumbnails/6.jpg)
public class Trabalhador {
private Boolean temValeTransporte;private Boolean temValeRefeicao;private double salarioBase;
}
public class ValeRefeicao {
private double vr = 12;
public double retornarValorValeRefeicao(int diasNoMes){return diasNoMes * vr;
}
}
![Page 7: Dip the dependency inversion principle](https://reader038.fdocumentos.tips/reader038/viewer/2022100518/559582a81a28ab0e548b468b/html5/thumbnails/7.jpg)
public class CalculadoraSalario {
Trabalhador trabalhador;private int diasUteisMes;
public void CalculadoraSalario(int dias, Trabalhador trab) {trabalhador = trab;diasUteisMes = dias;
}
public double retornarSalarioBase(){return trabalhador.getSalarioBase();
}
public double retornarSomaBeneficios(){double total = 0;
if(trabalhador.getTemValeRefeicao()){
total += new ValeRefeicao().retornarValorValeRefeicao(diasUteisMes);}if(trabalhador.getTemValeTransporte()){
total += new ValeTransporte().retornarValorValeTransporte(diasUteisMes);}
return total;}
![Page 8: Dip the dependency inversion principle](https://reader038.fdocumentos.tips/reader038/viewer/2022100518/559582a81a28ab0e548b468b/html5/thumbnails/8.jpg)
Depois:
![Page 9: Dip the dependency inversion principle](https://reader038.fdocumentos.tips/reader038/viewer/2022100518/559582a81a28ab0e548b468b/html5/thumbnails/9.jpg)
public interface IBeneficios {
double retornarValorBeneficio(int diasNoMes);
}
public class ValeRefeicao implements IBeneficios {
private double vr = 12;
public double retornarValorBeneficio(int diasNoMes){return diasNoMes * vr;
}
}
![Page 10: Dip the dependency inversion principle](https://reader038.fdocumentos.tips/reader038/viewer/2022100518/559582a81a28ab0e548b468b/html5/thumbnails/10.jpg)
public class Trabalhador {
private double salarioBase;private List<IBeneficios> listaDeBeneficios;
public Trabalhador(){listaDeBeneficios = new LinkedList<IBeneficios>();
}
public List<IBeneficios> getListaDeBeneficios() {return listaDeBeneficios;
}public void setListaDeBeneficios(List<IBeneficios> listaDeBeneficios) {
this.listaDeBeneficios = listaDeBeneficios;}
}
![Page 11: Dip the dependency inversion principle](https://reader038.fdocumentos.tips/reader038/viewer/2022100518/559582a81a28ab0e548b468b/html5/thumbnails/11.jpg)
public class CalculadoraSalario {
Trabalhador trabalhador;private int diasUteisMes;
public void CalculadoraSalario(int dias, Trabalhador trab) {trabalhador = trab;diasUteisMes = dias;
}
public double retornaSalarioBase() {return trabalhador.getSalarioBase();
}
public double retornaTotalBeneficios(){
double total = 0;
for(IBeneficios b : trabalhador.getListaDeBeneficios()){
total += b.retornarValorBeneficio(diasUteisMes);}return total;
}}