More Related Content Similar to Dip the dependency inversion principle (20) More from Engenharia de Software Ágil (20) Dip the dependency inversion principle2. 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. 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; } }