SlideShare uma empresa Scribd logo
1 de 14
Desenvolvendo em Java
     Visando o
 Baixo Acoplamento

       Marcelo de Melo Madeira
            Just Java 2011
Marcelo de Melo Madeira


• Arquiteto de sistemas
• Instrutor Java na Globalcode
• SCJP e SCWCD
Agenda
•   Acoplamento

        •   Alto Acoplamento

        •   Baixo Acoplamento

•   Coesão

        •   Baixa Coesão

        •   Alta Coesão

•   Live code!!!
Acoplamento
Alto Acoplamento

• Forte dependência entre componentes.
• É difícil trocar dependências de um objeto
  sem quebrar seu funcionamento interno.
• É difícil adicionar mais funcionalidades ao
  componente sem ter que alterar seu
  código.
Baixo Acoplamento
•   Depender de abstrações
    •   Classe abstrata???

    •   Interface




•   IoC (Inversão de controle)
    •   Spring

    •   Guice

    •   Puro Java
Coesão
Qual é a sua função?
Baixa Coesão

• Várias funcionalidades em um mesmo
  objeto.
• Difícil reaproveitamento
• Difícil manutenção
• Alta complexidade
Alta coesão

• Objetos devem fazer apenas uma (e bem
  feita) tarefa.
• Maior capacidade de reaproveitamento
• Facilidade de manutenção
Logo....
baixoAcoplamento.plus(AltaCoesao).equals(ProgramadorFe
                          liz)
Live Code!!!
   Perigoso!!!
API de Validação
               Requisitos:

• Objetos não podem ser nulos.
• String não devem ser vazias.
• Números não podem ser menor que zero.
• Deve possibilitar a adição de novos
  validadores sem a necessidade de alteração
  no código da API.
Conclusão

• Componentes devem depender de
  abstrações.
• Objetos devem ser especialistas.
• Funcionalidades devem resultar da
  composição de componentes especialistas.
Obrigado!!!

  Onde me encontrar???


celodemelo.wordpress.com
     @celodemelo
 celodemelo@gmail.com

Mais conteúdo relacionado

Destaque

Introdução ao Hibernate
Introdução ao HibernateIntrodução ao Hibernate
Introdução ao Hibernatecelodemelo
 
Como um grande sistema REST funciona - arquitetura e desempenho
Como um grande sistema REST funciona - arquitetura e desempenhoComo um grande sistema REST funciona - arquitetura e desempenho
Como um grande sistema REST funciona - arquitetura e desempenhoDavid Robert Camargo de Campos
 
Java e Mercado de Trabalho
Java e Mercado de TrabalhoJava e Mercado de Trabalho
Java e Mercado de TrabalhoEduardo Carvalho
 
REST – Desmistificando A Implementação De Web Services REST Em Java Monografia
REST – Desmistificando A Implementação De Web Services REST Em Java MonografiaREST – Desmistificando A Implementação De Web Services REST Em Java Monografia
REST – Desmistificando A Implementação De Web Services REST Em Java MonografiaCarl Edwin Antonio Nascimento
 
Gestão de Projetos - Exemplo de Documentação de Projeto
Gestão de Projetos - Exemplo de Documentação de ProjetoGestão de Projetos - Exemplo de Documentação de Projeto
Gestão de Projetos - Exemplo de Documentação de ProjetoCarl Edwin Antonio Nascimento
 
Acesso a Banco de Dados em Java usando JDBC
Acesso a Banco de Dados em Java usando JDBCAcesso a Banco de Dados em Java usando JDBC
Acesso a Banco de Dados em Java usando JDBCLuiz Ricardo Silva
 
Descrição formal de Casos de Uso
Descrição formal de Casos de UsoDescrição formal de Casos de Uso
Descrição formal de Casos de UsoNatanael Simões
 
Porque você deveria usar CDI nos seus projetos Java! - JavaOne LA 2012 - Sérg...
Porque você deveria usar CDI nos seus projetos Java! - JavaOne LA 2012 - Sérg...Porque você deveria usar CDI nos seus projetos Java! - JavaOne LA 2012 - Sérg...
Porque você deveria usar CDI nos seus projetos Java! - JavaOne LA 2012 - Sérg...Caelum
 
[Curso Java Básico] Aula 09: Introdução à Orientação a Objetos
[Curso Java Básico] Aula 09: Introdução à Orientação a Objetos[Curso Java Básico] Aula 09: Introdução à Orientação a Objetos
[Curso Java Básico] Aula 09: Introdução à Orientação a ObjetosLoiane Groner
 
Curso Java Básico Aula 01: Introdução e Dicas para quem está Começando
Curso Java Básico Aula 01: Introdução e Dicas para quem está ComeçandoCurso Java Básico Aula 01: Introdução e Dicas para quem está Começando
Curso Java Básico Aula 01: Introdução e Dicas para quem está ComeçandoLoiane Groner
 
UNESCO Certificate of Recognition
UNESCO Certificate of RecognitionUNESCO Certificate of Recognition
UNESCO Certificate of RecognitionClaudia Baha
 
Programação orientada a objetos
Programação orientada a objetosProgramação orientada a objetos
Programação orientada a objetosCleyton Ferrari
 
Como redigir a introdução e a conclusão de um trabalho escrito
Como redigir a introdução e a conclusão de um trabalho escritoComo redigir a introdução e a conclusão de um trabalho escrito
Como redigir a introdução e a conclusão de um trabalho escritoBiblioteca Escolar Ourique
 
Top 5 Deep Learning and AI Stories 3/9
Top 5 Deep Learning and AI Stories 3/9Top 5 Deep Learning and AI Stories 3/9
Top 5 Deep Learning and AI Stories 3/9NVIDIA
 

Destaque (20)

Introdução ao Hibernate
Introdução ao HibernateIntrodução ao Hibernate
Introdução ao Hibernate
 
Como um grande sistema REST funciona - arquitetura e desempenho
Como um grande sistema REST funciona - arquitetura e desempenhoComo um grande sistema REST funciona - arquitetura e desempenho
Como um grande sistema REST funciona - arquitetura e desempenho
 
Java7 tdc2011
Java7 tdc2011Java7 tdc2011
Java7 tdc2011
 
Non woven bags
Non woven bagsNon woven bags
Non woven bags
 
Java e Mercado de Trabalho
Java e Mercado de TrabalhoJava e Mercado de Trabalho
Java e Mercado de Trabalho
 
REST – Desmistificando A Implementação De Web Services REST Em Java Monografia
REST – Desmistificando A Implementação De Web Services REST Em Java MonografiaREST – Desmistificando A Implementação De Web Services REST Em Java Monografia
REST – Desmistificando A Implementação De Web Services REST Em Java Monografia
 
Gestão de Projetos - Exemplo de Documentação de Projeto
Gestão de Projetos - Exemplo de Documentação de ProjetoGestão de Projetos - Exemplo de Documentação de Projeto
Gestão de Projetos - Exemplo de Documentação de Projeto
 
CONEXÃO BANCO DE DADOS MYSQL COM JAVA
CONEXÃO BANCO DE DADOS MYSQL  COM JAVACONEXÃO BANCO DE DADOS MYSQL  COM JAVA
CONEXÃO BANCO DE DADOS MYSQL COM JAVA
 
POO - 03 - Alocação de Memória em Java
POO - 03 - Alocação de Memória em JavaPOO - 03 - Alocação de Memória em Java
POO - 03 - Alocação de Memória em Java
 
Acesso a Banco de Dados em Java usando JDBC
Acesso a Banco de Dados em Java usando JDBCAcesso a Banco de Dados em Java usando JDBC
Acesso a Banco de Dados em Java usando JDBC
 
Paradigma Orientado a Objeto
Paradigma Orientado a ObjetoParadigma Orientado a Objeto
Paradigma Orientado a Objeto
 
Descrição formal de Casos de Uso
Descrição formal de Casos de UsoDescrição formal de Casos de Uso
Descrição formal de Casos de Uso
 
Figuras retóricas
Figuras retóricasFiguras retóricas
Figuras retóricas
 
Porque você deveria usar CDI nos seus projetos Java! - JavaOne LA 2012 - Sérg...
Porque você deveria usar CDI nos seus projetos Java! - JavaOne LA 2012 - Sérg...Porque você deveria usar CDI nos seus projetos Java! - JavaOne LA 2012 - Sérg...
Porque você deveria usar CDI nos seus projetos Java! - JavaOne LA 2012 - Sérg...
 
[Curso Java Básico] Aula 09: Introdução à Orientação a Objetos
[Curso Java Básico] Aula 09: Introdução à Orientação a Objetos[Curso Java Básico] Aula 09: Introdução à Orientação a Objetos
[Curso Java Básico] Aula 09: Introdução à Orientação a Objetos
 
Curso Java Básico Aula 01: Introdução e Dicas para quem está Começando
Curso Java Básico Aula 01: Introdução e Dicas para quem está ComeçandoCurso Java Básico Aula 01: Introdução e Dicas para quem está Começando
Curso Java Básico Aula 01: Introdução e Dicas para quem está Começando
 
UNESCO Certificate of Recognition
UNESCO Certificate of RecognitionUNESCO Certificate of Recognition
UNESCO Certificate of Recognition
 
Programação orientada a objetos
Programação orientada a objetosProgramação orientada a objetos
Programação orientada a objetos
 
Como redigir a introdução e a conclusão de um trabalho escrito
Como redigir a introdução e a conclusão de um trabalho escritoComo redigir a introdução e a conclusão de um trabalho escrito
Como redigir a introdução e a conclusão de um trabalho escrito
 
Top 5 Deep Learning and AI Stories 3/9
Top 5 Deep Learning and AI Stories 3/9Top 5 Deep Learning and AI Stories 3/9
Top 5 Deep Learning and AI Stories 3/9
 

Semelhante a Baixo Acoplamento e Alta Coesão

Design Patterns on Rails
Design Patterns on RailsDesign Patterns on Rails
Design Patterns on Railstchandy
 
Java CDI: Usando Java CDI em projetos Jakarta EE ou Microprofile
Java CDI: Usando Java CDI em projetos Jakarta EE ou MicroprofileJava CDI: Usando Java CDI em projetos Jakarta EE ou Microprofile
Java CDI: Usando Java CDI em projetos Jakarta EE ou MicroprofileVictor Osorio
 
GlassFish, Maven, Cloud e o futuro do Java EE
GlassFish, Maven, Cloud e o futuro do Java EEGlassFish, Maven, Cloud e o futuro do Java EE
GlassFish, Maven, Cloud e o futuro do Java EEBruno Borges
 
Três anos de Scala em Produção: desafios, aprendizados e dores de cabeça
Três anos de Scala em Produção: desafios, aprendizados e dores de cabeçaTrês anos de Scala em Produção: desafios, aprendizados e dores de cabeça
Três anos de Scala em Produção: desafios, aprendizados e dores de cabeçaFelipe Hummel
 
Spring roo produtividade no java
Spring roo produtividade no javaSpring roo produtividade no java
Spring roo produtividade no javaPedro Cavalero
 
GlassFish, Maven, Cloud e Java EE
GlassFish, Maven, Cloud e Java EEGlassFish, Maven, Cloud e Java EE
GlassFish, Maven, Cloud e Java EEBruno Borges
 
Inversão de Controle, Injeção de Dependências e AOP com Spring
Inversão de Controle, Injeção de Dependências e AOP com SpringInversão de Controle, Injeção de Dependências e AOP com Spring
Inversão de Controle, Injeção de Dependências e AOP com SpringHenrique Weissmann
 
Refinamento e boas práticas de programação
Refinamento e boas práticas de programaçãoRefinamento e boas práticas de programação
Refinamento e boas práticas de programaçãoAécio Costa
 
JHipster - Produtividade e Maturidade em suas mãos
JHipster - Produtividade e Maturidade em suas mãosJHipster - Produtividade e Maturidade em suas mãos
JHipster - Produtividade e Maturidade em suas mãosThiago Soares
 
ASP.NET Core APIs: Performance Tips
ASP.NET Core APIs: Performance TipsASP.NET Core APIs: Performance Tips
ASP.NET Core APIs: Performance TipsAndre Baltieri
 
Programando java independente da ide
Programando java independente da ideProgramando java independente da ide
Programando java independente da ideHeider Lopes
 
Programando java independente da ide
Programando java independente da ideProgramando java independente da ide
Programando java independente da ideHeider Lopes
 
O que ganhamos com Java e Cloud Computing?
O que ganhamos com Java e Cloud Computing?O que ganhamos com Java e Cloud Computing?
O que ganhamos com Java e Cloud Computing?Bruno Borges
 
Python - Programando em alto nível
Python - Programando em alto nívelPython - Programando em alto nível
Python - Programando em alto nívelIgor Sobreira
 

Semelhante a Baixo Acoplamento e Alta Coesão (20)

Princípios SOLID
Princípios SOLIDPrincípios SOLID
Princípios SOLID
 
Design Patterns on Rails
Design Patterns on RailsDesign Patterns on Rails
Design Patterns on Rails
 
Java CDI: Usando Java CDI em projetos Jakarta EE ou Microprofile
Java CDI: Usando Java CDI em projetos Jakarta EE ou MicroprofileJava CDI: Usando Java CDI em projetos Jakarta EE ou Microprofile
Java CDI: Usando Java CDI em projetos Jakarta EE ou Microprofile
 
GlassFish, Maven, Cloud e o futuro do Java EE
GlassFish, Maven, Cloud e o futuro do Java EEGlassFish, Maven, Cloud e o futuro do Java EE
GlassFish, Maven, Cloud e o futuro do Java EE
 
Três anos de Scala em Produção: desafios, aprendizados e dores de cabeça
Três anos de Scala em Produção: desafios, aprendizados e dores de cabeçaTrês anos de Scala em Produção: desafios, aprendizados e dores de cabeça
Três anos de Scala em Produção: desafios, aprendizados e dores de cabeça
 
Spring roo produtividade no java
Spring roo produtividade no javaSpring roo produtividade no java
Spring roo produtividade no java
 
10-codigo-limpo-parte-3.pdf
10-codigo-limpo-parte-3.pdf10-codigo-limpo-parte-3.pdf
10-codigo-limpo-parte-3.pdf
 
GlassFish, Maven, Cloud e Java EE
GlassFish, Maven, Cloud e Java EEGlassFish, Maven, Cloud e Java EE
GlassFish, Maven, Cloud e Java EE
 
Inversão de Controle, Injeção de Dependências e AOP com Spring
Inversão de Controle, Injeção de Dependências e AOP com SpringInversão de Controle, Injeção de Dependências e AOP com Spring
Inversão de Controle, Injeção de Dependências e AOP com Spring
 
Potencializando a qualidade de código
Potencializando a qualidade de códigoPotencializando a qualidade de código
Potencializando a qualidade de código
 
Refinamento e boas práticas de programação
Refinamento e boas práticas de programaçãoRefinamento e boas práticas de programação
Refinamento e boas práticas de programação
 
JHipster - Produtividade e Maturidade em suas mãos
JHipster - Produtividade e Maturidade em suas mãosJHipster - Produtividade e Maturidade em suas mãos
JHipster - Produtividade e Maturidade em suas mãos
 
Clean architecture
Clean architectureClean architecture
Clean architecture
 
ASP.NET Core APIs: Performance Tips
ASP.NET Core APIs: Performance TipsASP.NET Core APIs: Performance Tips
ASP.NET Core APIs: Performance Tips
 
Programando java independente da ide
Programando java independente da ideProgramando java independente da ide
Programando java independente da ide
 
Programando java independente da ide
Programando java independente da ideProgramando java independente da ide
Programando java independente da ide
 
O que ganhamos com Java e Cloud Computing?
O que ganhamos com Java e Cloud Computing?O que ganhamos com Java e Cloud Computing?
O que ganhamos com Java e Cloud Computing?
 
Python - Programando em alto nível
Python - Programando em alto nívelPython - Programando em alto nível
Python - Programando em alto nível
 
Serra StarTec 2013 - Java EE
Serra StarTec 2013 - Java EESerra StarTec 2013 - Java EE
Serra StarTec 2013 - Java EE
 
De 0 a DevOps
De 0 a DevOpsDe 0 a DevOps
De 0 a DevOps
 

Baixo Acoplamento e Alta Coesão

  • 1. Desenvolvendo em Java Visando o Baixo Acoplamento Marcelo de Melo Madeira Just Java 2011
  • 2. Marcelo de Melo Madeira • Arquiteto de sistemas • Instrutor Java na Globalcode • SCJP e SCWCD
  • 3. Agenda • Acoplamento • Alto Acoplamento • Baixo Acoplamento • Coesão • Baixa Coesão • Alta Coesão • Live code!!!
  • 5. Alto Acoplamento • Forte dependência entre componentes. • É difícil trocar dependências de um objeto sem quebrar seu funcionamento interno. • É difícil adicionar mais funcionalidades ao componente sem ter que alterar seu código.
  • 6. Baixo Acoplamento • Depender de abstrações • Classe abstrata??? • Interface • IoC (Inversão de controle) • Spring • Guice • Puro Java
  • 7. Coesão Qual é a sua função?
  • 8. Baixa Coesão • Várias funcionalidades em um mesmo objeto. • Difícil reaproveitamento • Difícil manutenção • Alta complexidade
  • 9. Alta coesão • Objetos devem fazer apenas uma (e bem feita) tarefa. • Maior capacidade de reaproveitamento • Facilidade de manutenção
  • 11. Live Code!!! Perigoso!!!
  • 12. API de Validação Requisitos: • Objetos não podem ser nulos. • String não devem ser vazias. • Números não podem ser menor que zero. • Deve possibilitar a adição de novos validadores sem a necessidade de alteração no código da API.
  • 13. Conclusão • Componentes devem depender de abstrações. • Objetos devem ser especialistas. • Funcionalidades devem resultar da composição de componentes especialistas.
  • 14. Obrigado!!! Onde me encontrar??? celodemelo.wordpress.com @celodemelo celodemelo@gmail.com

Notas do Editor

  1. \n
  2. \n
  3. \n
  4. \n
  5. \n
  6. \n
  7. \n
  8. \n
  9. \n
  10. \n
  11. \n
  12. \n
  13. \n
  14. \n