SlideShare une entreprise Scribd logo
1  sur  13
Hangout OOD – Princípio
da Inversão de
Dependência
01/07/2014
Participantes:
• João Batista Neto - Hoster
• Augusto Pascutti - Moderador
• Priscila Mayumi Sato – Slider maker
• Ivo nascimento – Controlador do chat
• Luís Otavio
• Henrique Moody
• Daniel Ribeiro
Pauta
• Resumo rápido dos hangouts anteriores
• Abordar, com profundidade e exemplos, o princípio de design D.I.P.
• O que é dependencia?
• Diferenciar Injeção de Dependência e Inversão de Dependência
• Ilustrar casos do mundo real
• Pôs pauta: discutir exemplos enviados previamente por cobaias e
responder dúvidas
Resumo anteriores
Princípio de design D.I.P
D.I.P.
• “Impossível compreender o principio da inversão de dependência antes
de compreender dependência. A dependência é um participante A
precisar de participante B para cumprir com sua responsabilidade. É
aquilo que eu preciso para fazer alguma coisa.” João
• “As classes de alto nível não devem depender das classes de baixo nível.
A inversão de dependência funciona para você poder casar um
determinado tipo com outras partes, não precisar usar tipos primitivos e
usar classes de alto nível” (Moody? Foi ele que disse? :p)
• “Quando trabalhamos com classes concretas e precisamos mudar o
comportamento da nossa aplicação precisamos mudar as nossas classes
concretas, o que não é bom e viola os princípios citados anteriormente.
Por isso precisamos lidar com interfaces, quanto mais abstração melhor
para evitar lidar com as classes diretamente” Daniel
D.I.P.
• “Vamos supor que temos uma classe que recebe uma outra classe que
escreve um arquivo XML, essa estritamente relacionada com arquivos
XMLs. Se eu precisar um novo formato de texto eu preciso alterar a classe
cliente, sendo eu preciso escrever um novo método. É essa a abstração
de que estamos falando agora” Moody
• “Uma das coisas mais difíceis de se entender é o conceito de abstração.
Assim podemos falar além do ambiente de software. Falando ‘mesa’,
cada um pode pensar em uma mesa, o João pensa numa mesa diferente
da mesa que a Thamara pensa. Todo mundo aqui sabe o que é uma
mesa, mesmo sem saber quantos pés tem, qual a cor, de que material é
feito. Em software podemos pensar nos comportamentos mesmo sem
pensar em detalhes. No caso o exemplo da PDO é um exemplo da
abstração de dependência” Daniel
D.I.P.
• “Ao conversar sobre dependência costumo analisar o cenário também.
Por exemplo: dados transacionais são usados em bases de dados
relacionais, por isso o Doctrine por exemplo abstraiu o problema de base
de dados relacional. Mesmo sendo uma solução para dados
transacionais, mas é uma abstração para o cenário especifico.” João
• “Qual as consequências de um software depender de implementações:
as implementações mudam! Por exemplo você trabalha com mysql e
precisa mudar para uma base oracle. A mudança de servidor quebrou a
sua aplicação. Ela era rígida ao depender da implementação.
• Você ganha ao não depender em estabilidade e flexibilidade.” João
D.I.P.
• “Duas coisas sobre software: o software muda. A grande probabilidade de
seu softwarer ter bug.
• Vivemos em um mercado muito acirrado, você precisa lançar features
muito rápido, por isso quanto mais rápido você consegue mudar seu
software mais você se mantém no mercado. Deixar seu software
engessado atrapalha as mudanças e torna mais custoso as alterações.
Depender de abstrações torna seu software mais fácil de se manter e
escalável” João
• “Precisamos tentar ao máximo entender o que estamos fazendo. O que o
objeto faz, para que vamos usar ele. Quando falamos de inversão de
dependência não devemos transitar as implementações, mas teremos as
implementações. Classe tem seu contexto.” Moodysim, true
D.I.P.
• “Exmplo: numa loja virtual eu quero saber o valor do total dos meus itens.
Se no cara que faz a soma ele só sabe calcular o preço de um celular.
Bom, o celular é uma única possibilidade. Ele pode calcular então
qualquer coisa que tenha um preço, produto, serviço, etc. Então nesse
meu processo eu recebo uma abstração de qualquer coisa que tenha um
preço. Passando então qualquer coisa que tenha um preço pode ser
passado para esse processo que segue a abstração.” Luiz
• “”Alguns exemplos que falam de vida real tem problemas pois a vida real
de desenvolvedores é diferente da vida real de não desenvolvedores.
Quando usamos o exemplo da garrafa e liquido fica difícil de identificar
comportamentos. Como comporta um liquido, uma garrafa? O líquido
não interfere em como a garrafa vai se comportar. E orientação a objetos
é relacionada a comportamentos.” João
D.I.P.
• “Quando estamos falando de abstração estamos falando de abstração
de comportamento e não de características.” João
• “Exemplificando a classe de logger. Pensando em uma classe concreta
que faz o log de um arquivo. O que significa inveter a dependência: é
fazer a classe concreta também depender da implementação, a seta da
dependência foi invertida.” Daniel
• “
Exemplos
Pós pauta

Contenu connexe

En vedette (6)

Dependency Inversion and Dependency Injection in PHP
Dependency Inversion and Dependency Injection in PHPDependency Inversion and Dependency Injection in PHP
Dependency Inversion and Dependency Injection in PHP
 
Entendendo Domain-Driven Design
Entendendo Domain-Driven DesignEntendendo Domain-Driven Design
Entendendo Domain-Driven Design
 
SOLID - Teoria e Prática
SOLID - Teoria e PráticaSOLID - Teoria e Prática
SOLID - Teoria e Prática
 
Entity framework migrations
Entity framework migrationsEntity framework migrations
Entity framework migrations
 
Entity framework
Entity frameworkEntity framework
Entity framework
 
Do 0 a estar online no Google App Engine
Do 0 a estar online no Google App EngineDo 0 a estar online no Google App Engine
Do 0 a estar online no Google App Engine
 

Similaire à OOD - Princípio da Inversão de Dependência

InovaSession - Design Thinking 2012
InovaSession - Design Thinking 2012InovaSession - Design Thinking 2012
InovaSession - Design Thinking 2012
rcmello13
 
2.1 introdução a oo
2.1 introdução a oo2.1 introdução a oo
2.1 introdução a oo
PAULO Moreira
 
Relato dos principais tópicos - Aquário da Formação - 2º Seminário da Rede de...
Relato dos principais tópicos - Aquário da Formação - 2º Seminário da Rede de...Relato dos principais tópicos - Aquário da Formação - 2º Seminário da Rede de...
Relato dos principais tópicos - Aquário da Formação - 2º Seminário da Rede de...
Rede de Formação Telecentros.BR
 

Similaire à OOD - Princípio da Inversão de Dependência (20)

Freelancer Lifestyle no WDS 2015
Freelancer Lifestyle no WDS 2015Freelancer Lifestyle no WDS 2015
Freelancer Lifestyle no WDS 2015
 
Como não ferrar com a user experience - Campus Party 2012
Como não ferrar com a user experience - Campus Party 2012 Como não ferrar com a user experience - Campus Party 2012
Como não ferrar com a user experience - Campus Party 2012
 
DevOps.pdf
DevOps.pdfDevOps.pdf
DevOps.pdf
 
InovaSession - Design Thinking 2012
InovaSession - Design Thinking 2012InovaSession - Design Thinking 2012
InovaSession - Design Thinking 2012
 
"Mas eu não tenho experiência..." E daí??? - Como quebrar o ciclo vicioso de...
 "Mas eu não tenho experiência..." E daí??? - Como quebrar o ciclo vicioso de... "Mas eu não tenho experiência..." E daí??? - Como quebrar o ciclo vicioso de...
"Mas eu não tenho experiência..." E daí??? - Como quebrar o ciclo vicioso de...
 
Projete pensando no usuário e todo mundo sai ganhando
Projete pensando no usuário e todo mundo sai ganhandoProjete pensando no usuário e todo mundo sai ganhando
Projete pensando no usuário e todo mundo sai ganhando
 
Excelência - PUC
Excelência - PUCExcelência - PUC
Excelência - PUC
 
Descoberta de Produtos Digitais com PaperPrototyping
Descoberta de Produtos Digitais com PaperPrototypingDescoberta de Produtos Digitais com PaperPrototyping
Descoberta de Produtos Digitais com PaperPrototyping
 
Repensando Comportamentos
Repensando ComportamentosRepensando Comportamentos
Repensando Comportamentos
 
Teorias e Prática aplicadas ao mercado digital
Teorias e Prática aplicadas ao mercado digitalTeorias e Prática aplicadas ao mercado digital
Teorias e Prática aplicadas ao mercado digital
 
2.1 introdução a oo
2.1 introdução a oo2.1 introdução a oo
2.1 introdução a oo
 
Design Thinking - Design é função, não forma (Evento Empr3ender)
Design Thinking - Design é função, não forma (Evento Empr3ender)Design Thinking - Design é função, não forma (Evento Empr3ender)
Design Thinking - Design é função, não forma (Evento Empr3ender)
 
Alessandro Ribeiro | Fazemos nosso usuário sorrir
Alessandro Ribeiro | Fazemos nosso usuário sorrirAlessandro Ribeiro | Fazemos nosso usuário sorrir
Alessandro Ribeiro | Fazemos nosso usuário sorrir
 
Design de Interação - Entendendo, conceituando e abordagem centrada no usuário
Design de Interação - Entendendo, conceituando e abordagem centrada no usuárioDesign de Interação - Entendendo, conceituando e abordagem centrada no usuário
Design de Interação - Entendendo, conceituando e abordagem centrada no usuário
 
Relato dos principais tópicos - Aquário da Formação - 2º Seminário da Rede de...
Relato dos principais tópicos - Aquário da Formação - 2º Seminário da Rede de...Relato dos principais tópicos - Aquário da Formação - 2º Seminário da Rede de...
Relato dos principais tópicos - Aquário da Formação - 2º Seminário da Rede de...
 
Design de Redes Sociais
Design de Redes SociaisDesign de Redes Sociais
Design de Redes Sociais
 
apresenta
apresentaapresenta
apresenta
 
Aula 04.pdf
Aula 04.pdfAula 04.pdf
Aula 04.pdf
 
O que é o barreiras jug
O que é o barreiras jugO que é o barreiras jug
O que é o barreiras jug
 
Visão De Si E Do Mundo
Visão De Si E Do MundoVisão De Si E Do Mundo
Visão De Si E Do Mundo
 

Plus de Priscila Mayumi

Banco de dados de grafos
Banco de dados de grafosBanco de dados de grafos
Banco de dados de grafos
Priscila Mayumi
 

Plus de Priscila Mayumi (11)

Sistemas de recomendações e neo4J na cloud computing
Sistemas de recomendações e neo4J na cloud computingSistemas de recomendações e neo4J na cloud computing
Sistemas de recomendações e neo4J na cloud computing
 
Conhecendo o Firefox OS
Conhecendo o Firefox OSConhecendo o Firefox OS
Conhecendo o Firefox OS
 
Oportunidades para desenvolvedores
Oportunidades para desenvolvedoresOportunidades para desenvolvedores
Oportunidades para desenvolvedores
 
PHP no Windows Azure
PHP no Windows AzurePHP no Windows Azure
PHP no Windows Azure
 
Banco de dados de grafos
Banco de dados de grafosBanco de dados de grafos
Banco de dados de grafos
 
Entity framework
Entity frameworkEntity framework
Entity framework
 
Trabalhando com banco de dados e Entity Framework
Trabalhando com banco de dados e Entity FrameworkTrabalhando com banco de dados e Entity Framework
Trabalhando com banco de dados e Entity Framework
 
Ninja migrations
Ninja migrationsNinja migrations
Ninja migrations
 
O Mágico Mundo do Entity Framework
O Mágico Mundo do Entity FrameworkO Mágico Mundo do Entity Framework
O Mágico Mundo do Entity Framework
 
Ruby versus Python
Ruby versus PythonRuby versus Python
Ruby versus Python
 
Apresentando a Linguagem de Programação Python
Apresentando a Linguagem de Programação PythonApresentando a Linguagem de Programação Python
Apresentando a Linguagem de Programação Python
 

Dernier

Assessement Boas Praticas em Kubernetes.pdf
Assessement Boas Praticas em Kubernetes.pdfAssessement Boas Praticas em Kubernetes.pdf
Assessement Boas Praticas em Kubernetes.pdf
Natalia Granato
 

Dernier (6)

ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docxATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
 
Padrões de Projeto: Proxy e Command com exemplo
Padrões de Projeto: Proxy e Command com exemploPadrões de Projeto: Proxy e Command com exemplo
Padrões de Projeto: Proxy e Command com exemplo
 
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docxATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
 
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docxATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
 
Assessement Boas Praticas em Kubernetes.pdf
Assessement Boas Praticas em Kubernetes.pdfAssessement Boas Praticas em Kubernetes.pdf
Assessement Boas Praticas em Kubernetes.pdf
 
Boas práticas de programação com Object Calisthenics
Boas práticas de programação com Object CalisthenicsBoas práticas de programação com Object Calisthenics
Boas práticas de programação com Object Calisthenics
 

OOD - Princípio da Inversão de Dependência

  • 1. Hangout OOD – Princípio da Inversão de Dependência 01/07/2014
  • 2. Participantes: • João Batista Neto - Hoster • Augusto Pascutti - Moderador • Priscila Mayumi Sato – Slider maker • Ivo nascimento – Controlador do chat • Luís Otavio • Henrique Moody • Daniel Ribeiro
  • 3. Pauta • Resumo rápido dos hangouts anteriores • Abordar, com profundidade e exemplos, o princípio de design D.I.P. • O que é dependencia? • Diferenciar Injeção de Dependência e Inversão de Dependência • Ilustrar casos do mundo real • Pôs pauta: discutir exemplos enviados previamente por cobaias e responder dúvidas
  • 6. D.I.P. • “Impossível compreender o principio da inversão de dependência antes de compreender dependência. A dependência é um participante A precisar de participante B para cumprir com sua responsabilidade. É aquilo que eu preciso para fazer alguma coisa.” João • “As classes de alto nível não devem depender das classes de baixo nível. A inversão de dependência funciona para você poder casar um determinado tipo com outras partes, não precisar usar tipos primitivos e usar classes de alto nível” (Moody? Foi ele que disse? :p) • “Quando trabalhamos com classes concretas e precisamos mudar o comportamento da nossa aplicação precisamos mudar as nossas classes concretas, o que não é bom e viola os princípios citados anteriormente. Por isso precisamos lidar com interfaces, quanto mais abstração melhor para evitar lidar com as classes diretamente” Daniel
  • 7. D.I.P. • “Vamos supor que temos uma classe que recebe uma outra classe que escreve um arquivo XML, essa estritamente relacionada com arquivos XMLs. Se eu precisar um novo formato de texto eu preciso alterar a classe cliente, sendo eu preciso escrever um novo método. É essa a abstração de que estamos falando agora” Moody • “Uma das coisas mais difíceis de se entender é o conceito de abstração. Assim podemos falar além do ambiente de software. Falando ‘mesa’, cada um pode pensar em uma mesa, o João pensa numa mesa diferente da mesa que a Thamara pensa. Todo mundo aqui sabe o que é uma mesa, mesmo sem saber quantos pés tem, qual a cor, de que material é feito. Em software podemos pensar nos comportamentos mesmo sem pensar em detalhes. No caso o exemplo da PDO é um exemplo da abstração de dependência” Daniel
  • 8. D.I.P. • “Ao conversar sobre dependência costumo analisar o cenário também. Por exemplo: dados transacionais são usados em bases de dados relacionais, por isso o Doctrine por exemplo abstraiu o problema de base de dados relacional. Mesmo sendo uma solução para dados transacionais, mas é uma abstração para o cenário especifico.” João • “Qual as consequências de um software depender de implementações: as implementações mudam! Por exemplo você trabalha com mysql e precisa mudar para uma base oracle. A mudança de servidor quebrou a sua aplicação. Ela era rígida ao depender da implementação. • Você ganha ao não depender em estabilidade e flexibilidade.” João
  • 9. D.I.P. • “Duas coisas sobre software: o software muda. A grande probabilidade de seu softwarer ter bug. • Vivemos em um mercado muito acirrado, você precisa lançar features muito rápido, por isso quanto mais rápido você consegue mudar seu software mais você se mantém no mercado. Deixar seu software engessado atrapalha as mudanças e torna mais custoso as alterações. Depender de abstrações torna seu software mais fácil de se manter e escalável” João • “Precisamos tentar ao máximo entender o que estamos fazendo. O que o objeto faz, para que vamos usar ele. Quando falamos de inversão de dependência não devemos transitar as implementações, mas teremos as implementações. Classe tem seu contexto.” Moodysim, true
  • 10. D.I.P. • “Exmplo: numa loja virtual eu quero saber o valor do total dos meus itens. Se no cara que faz a soma ele só sabe calcular o preço de um celular. Bom, o celular é uma única possibilidade. Ele pode calcular então qualquer coisa que tenha um preço, produto, serviço, etc. Então nesse meu processo eu recebo uma abstração de qualquer coisa que tenha um preço. Passando então qualquer coisa que tenha um preço pode ser passado para esse processo que segue a abstração.” Luiz • “”Alguns exemplos que falam de vida real tem problemas pois a vida real de desenvolvedores é diferente da vida real de não desenvolvedores. Quando usamos o exemplo da garrafa e liquido fica difícil de identificar comportamentos. Como comporta um liquido, uma garrafa? O líquido não interfere em como a garrafa vai se comportar. E orientação a objetos é relacionada a comportamentos.” João
  • 11. D.I.P. • “Quando estamos falando de abstração estamos falando de abstração de comportamento e não de características.” João • “Exemplificando a classe de logger. Pensando em uma classe concreta que faz o log de um arquivo. O que significa inveter a dependência: é fazer a classe concreta também depender da implementação, a seta da dependência foi invertida.” Daniel • “