SlideShare uma empresa Scribd logo
DependencyInversionPrincipleGuilherme PereiraTú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: 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çõesDois padrões de projeto ajudam a implementar este princípio: TemplateMethod
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;    }}

Mais conteúdo relacionado

PDF
Dip the dependency inversion principle
PDF
Sitema linear
PPTX
11. Enumerações; Instrução switch; Limitações dos inteiros – Fundamentos de P...
PPTX
Web Scraping com F Sharp
PPTX
Semana 10: Encapsulação, cópia de instâncias, igualdade de instâncias
DOCX
Logica trabalho
PPT
Função exponencial
DOCX
Código algoritmo simplex
Dip the dependency inversion principle
Sitema linear
11. Enumerações; Instrução switch; Limitações dos inteiros – Fundamentos de P...
Web Scraping com F Sharp
Semana 10: Encapsulação, cópia de instâncias, igualdade de instâncias
Logica trabalho
Função exponencial
Código algoritmo simplex

Mais procurados (7)

PDF
PPTX
10. Encapsulação; Cópia de instâncias; Igualdade de instâncias – Fundamentos ...
PDF
[Curso Java Basico] Aula 61: Passagem de parametros por valor e referencia
PPTX
F sharp e o paradigma funcional
PPTX
9. Operação toString(); Classes, instâncias e objectos; Scanner – Fundamentos...
PDF
Java orientação a objetos (interfaces)
PPT
Algoritmos Aula 03
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
F sharp e o paradigma funcional
9. Operação toString(); Classes, instâncias e objectos; Scanner – Fundamentos...
Java orientação a objetos (interfaces)
Algoritmos Aula 03
Anúncio

Destaque (20)

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

Semelhante a Dip the dependency inversion principle (7)

DOCX
Tutorial Java: Polimorfismo
PPTX
Princípio law of demeter
PDF
Aula 3 - Java Prof.ª Cristiane Fidelix
PDF
Lod law of demeter
PDF
Princípio Law Of Demeter (LOD)
PDF
Tutorial java orientação a objetos parte 1
PPTX
Design patterns
Tutorial Java: Polimorfismo
Princípio law of demeter
Aula 3 - Java Prof.ª Cristiane Fidelix
Lod law of demeter
Princípio Law Of Demeter (LOD)
Tutorial java orientação a objetos parte 1
Design patterns

Mais de Engenharia de Software Ágil (19)

PPTX
Sap – stablility and abstract principle
PPTX
Sap – stablility and abstract principle
PDF
Sap – stablility and abstract principle
PDF
Common closure principle
PPTX
Common closure principle
PDF
Acyclic dependencies principle
PPTX
Acyclic dependencies principle (adp)
PDF
Reuse release equivalence principle
PDF
Rep reuse release equivalence principle
PDF
OCP - The Open Close Principle - Princípio aberto/fechado
PDF
Sdp – stable dependencies principles
PDF
principio de reutilização comum
PPTX
Dip the dependency inversion principle
PDF
(ISP) - Interface Segregation Principle
PDF
LSP – The Liskov Substitution Principle
PDF
SRP - Single Responsability Principle
PPT
TDD - Test Driven Development
PPTX
DDD - Domain Driven Design
Sap – stablility and abstract principle
Sap – stablility and abstract principle
Sap – stablility and abstract principle
Common closure principle
Common closure principle
Acyclic dependencies principle
Acyclic dependencies principle (adp)
Reuse release equivalence principle
Rep reuse release equivalence principle
OCP - The Open Close Principle - Princípio aberto/fechado
Sdp – stable dependencies principles
principio de reutilização comum
Dip the dependency inversion principle
(ISP) - Interface Segregation Principle
LSP – The Liskov Substitution Principle
SRP - Single Responsability Principle
TDD - Test Driven Development
DDD - Domain Driven Design

Último (19)

PDF
Fundamentos de gerenciamento de ordens e planejamento no SAP TransportationMa...
PDF
COBITxITIL-Entenda as diferença em uso governança TI
PDF
Gestão de transportes básica no SAP S/4HANA, S4611 Col20
PDF
Fullfilment AI - Forum ecommerce 2025 // Distrito e Total Express
PDF
Custos e liquidação no SAP Transportation Management, TM130 Col18
PPTX
Aula16ManipulaçãoDadosssssssssssssssssssssssssssss
PPTX
Gestao-de-Bugs-em-Software-Introducao.pptxxxxxxxx
PDF
Aula04-Academia Heri- Tecnologia Geral 2025
PDF
Apple Pippin Uma breve introdução. - David Glotz
PPTX
Programação - Linguagem C - Variáveis, Palavras Reservadas, tipos de dados, c...
PPTX
BANCO DE DADOS - AULAS INICIAIS-sgbd.pptx
PPTX
Como-se-implementa-um-softwareeeeeeeeeeeeeeeeeeeeeeeee.pptx
PPTX
Informática Aplicada Informática Aplicada Plano de Ensino - estudo de caso NR...
PDF
Mergulho profundo técnico para gestão de transportes no SAP S/4HANA, S4TM6 Col14
PDF
Otimizador de planejamento e execução no SAP Transportation Management, TM120...
PDF
Custos e faturamento no SAP S/4HANA Transportation Management, S4TM3 Col26
PPTX
Aula 18 - Manipulacao De Arquivos python
PDF
Processos na gestão de transportes, TM100 Col18
PDF
20250805_ServiceNow e a Arquitetura Orientada a Serviços (SOA) A Base para Ap...
Fundamentos de gerenciamento de ordens e planejamento no SAP TransportationMa...
COBITxITIL-Entenda as diferença em uso governança TI
Gestão de transportes básica no SAP S/4HANA, S4611 Col20
Fullfilment AI - Forum ecommerce 2025 // Distrito e Total Express
Custos e liquidação no SAP Transportation Management, TM130 Col18
Aula16ManipulaçãoDadosssssssssssssssssssssssssssss
Gestao-de-Bugs-em-Software-Introducao.pptxxxxxxxx
Aula04-Academia Heri- Tecnologia Geral 2025
Apple Pippin Uma breve introdução. - David Glotz
Programação - Linguagem C - Variáveis, Palavras Reservadas, tipos de dados, c...
BANCO DE DADOS - AULAS INICIAIS-sgbd.pptx
Como-se-implementa-um-softwareeeeeeeeeeeeeeeeeeeeeeeee.pptx
Informática Aplicada Informática Aplicada Plano de Ensino - estudo de caso NR...
Mergulho profundo técnico para gestão de transportes no SAP S/4HANA, S4TM6 Col14
Otimizador de planejamento e execução no SAP Transportation Management, TM120...
Custos e faturamento no SAP S/4HANA Transportation Management, S4TM3 Col26
Aula 18 - Manipulacao De Arquivos python
Processos na gestão de transportes, TM100 Col18
20250805_ServiceNow e a Arquitetura Orientada a Serviços (SOA) A Base para Ap...

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. 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
  • 4. abstrações não devem depender de detalhes. Os detalhes é que devem depender das abstraçõesDois padrões de projeto ajudam a implementar este princípio: TemplateMethod
  • 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; }}