SlideShare uma empresa Scribd logo
1 de 29
JAVA: BOAS PRÁTICAS
Felippe Rodrigo Puhle
http://www.felippepuhle.com.br
PARTE 1
- Orientação a objetos
- Encapsulamento
- Polimorfismo
- Herança
- Classes abstratas
- Exceções
Interfaces
- É uma maneira de conversarmos com um objeto
- Pode definir uma série de métodos, mas nunca conter
a implementação deles
- Expõe o que o objeto deve fazer, e não como ele faz
ou o que ele tem
- “Contrato”
Interfaces
- O objetivo de uso é deixar o código mais flexível,
possibilitando uma mudança de implementação sem
maiores problemas
- Design patterns:
- evite herança, prefira composição
- programe voltado a interfaces
- Herança pode quebrar o encapsulamento: a partir do
momento que você precisa conhecer o código fonte da
sua mãe, você quebrou o encapsulamento)
Exemplo
Exemplo
DAO Genérico
- Ser um DAO ou ter um DAO?
- Todas as operações fazem sentido? E se quisermos
impossibilitar a exclusão no PagamentoDAO, por
exemplo?
- Liskov substitution principle(SOLID): em herança, a
classe filho nunca deve apertar as pré-condições ou
afrouxar as pós-condições.
DAO Genérico
Classes coesas
- Quando uma classe tem muitas responsabilidades com
pouca ou nenhuma relação entre si, dizemos que ela
não é coesa.
- Classes devem ter únicas responsabilidades, serem
pequenas e reutilizáveis.
- Single Responsibility Principle(SOLID): Princípio da
Responsabilidade Única. Tenha classes coesas.
Classes coesas
Classes coesas
Classes coesas
Ou, reduzindo o acoplamento:
Acoplamento
- A partir do momento em que eu tenho muitas
dependências, a minha classe depende de várias, que
podem propagar problema para a minha.
- “Tenha classes que são muito coesas e pouco
acopladas.”
kkkkkkkk
Acoplamento
- Evitar acoplamentos que são realmente perigosos e me
acoplar com coisas que são menos perigosas.
- Quando que é bom, e quando que é ruim?
- Exemplo: “Puxa, acoplar com List não é problema
porque List é uma interface que o Java fez. Vem na
linguagem Java”
- A resposta correta é: ela é estável, não muda.
Acoplamento
- Acoplamento eferente: eu, classe, dependo de outras.
- Acoplamento aferente: eu sou uma classe, e os outro
é quem dependem de mim.
Acoplamento
- O acoplamento aferente mostra que muitas outras
classes dependem de mim, e isso faz com que
eu(classe) seja estável.
- A chance de eu(classe) mudar é menor. Pois o
programador vai ter medo de alterar.
- “Programe voltado pra interface”
- Exemplo: utilização dos patterns Builder e Command.
Acoplamento
- Reduzir acoplamento usando polimorfismo.
Tell, Don't Ask
- você deve dizer ao objeto o que quer que ele faça ou retorne, e
não pedir sobre o seu estado para tomar decisões.
- exemplo: todos getters and setters em um Pedido
Lei de Demeter
- você deve ter conhecimento limitado sobre outras classes
- só deve saber coisas “próximas”
- fale apenas com “amigos”, e não “estranhos”
- exemplo: a().b().c() -> a().b()
Boas práticas de POO
- Seja objetivo, não tente prever o futuro
- Crie seus métodos com carinho
- Conheça e use coleções
- Sobrescreva equals, hashCode e toString
- Às vezes é melhor associar em vez de herdar
- Se preocupe com o encapsulamento
- Saiba usar interface e classe abstrata no momento certo
- Use e abuse das facilidades fornecidas por linguagens
orientadas a objetos
- Conheça e utilize as convenções de codificação da linguagem
Injeção de dependências
- É uma maneira de uma classe “pedir” uma determinada
dependência(outra classe)
- Geralmente esta classe que necessita de uma
determinada dependência não conhece(e nem deve
conhecer) muitas das coisas sobre a classe:
- Ciclo de vida, construção, implementações de métodos
e até mesmo sua destrução.
- Exemplo: banco de dados.
Injeção de dependências
CDI
- CDI é uma especificação do Java EE voltada a injeção
de dependências, mas que pode ser utilizada
naturalmente no Java SE.
- Com o CDI habilitado, praticamente todas as classes
do projeto são consideradas managed beans e,
portanto, passíveis de injeção e de serem injetadas.
- Podemos usar com CDI toda classe pública com um
construtor público padrão ou algum que receba
parâmetros e esteja anotado com @Inject.
CDI – Primeira injeção
- Basta usar a anotação @Inject
CDI – Producers
- Objetos complexos de serem criados
- Utilização do pattern Factory
CDI – Scopes
- Gerenciamento do ciclo de vida dos beans
- Uma instância por chamada, uma instância pra
aplicação, uma instância por requisição, etc.
Por que CDI?
- Separação de responsabilidades
- Inversão de controle
- Melhora o encapsulamento
- Gerenciamento do ciclo de vida
- Desacoplamento de processos
Próximos passos - Patterns
- Strategy
- Chain of Responsibility
- Template Method
- Decorator
- State
- Builder
- Observer
Próximos passos - Patterns
- Factory
- Flyweight
- Memento
- DSLs
- Interpreter
- Visitor
- Bridges
- Adapters
- Command
- Facade
- Singleton
Próximos passos - SOLID
- Single responsibility principle
- Open/closed principle
- Liskov substitution principle
- Interface segregation principle
- Dependency inversion principle
OBRIGADO!

Mais conteúdo relacionado

Mais procurados

Apresentação programação orientada à objetos
Apresentação   programação orientada à objetosApresentação   programação orientada à objetos
Apresentação programação orientada à objetos
soncino
 
Conceitos básicos de programação orientada a objetos
Conceitos básicos de programação orientada a objetosConceitos básicos de programação orientada a objetos
Conceitos básicos de programação orientada a objetos
Leonardo Melo Santos
 
Programação Orientada a Objetos - Uso da O.O. em Java
Programação Orientada a Objetos - Uso da O.O. em JavaProgramação Orientada a Objetos - Uso da O.O. em Java
Programação Orientada a Objetos - Uso da O.O. em Java
Cristiano Almeida
 
Conceitos Básicos de OO e Java
Conceitos Básicos de OO e JavaConceitos Básicos de OO e Java
Conceitos Básicos de OO e Java
Charles Jungbeck
 

Mais procurados (20)

Programação Orientada a Objetos
Programação Orientada a ObjetosProgramação Orientada a Objetos
Programação Orientada a Objetos
 
Introdução a programação Orientada a Objeto
Introdução a programação Orientada a ObjetoIntrodução a programação Orientada a Objeto
Introdução a programação Orientada a Objeto
 
Poo padadigmas
Poo padadigmasPoo padadigmas
Poo padadigmas
 
Apresentação programação orientada à objetos
Apresentação   programação orientada à objetosApresentação   programação orientada à objetos
Apresentação programação orientada à objetos
 
Conceitos básicos de programação orientada a objetos
Conceitos básicos de programação orientada a objetosConceitos básicos de programação orientada a objetos
Conceitos básicos de programação orientada a objetos
 
JAVA - Orientação a Objetos
JAVA - Orientação a ObjetosJAVA - Orientação a Objetos
JAVA - Orientação a Objetos
 
Programação Orientado a Objetos
Programação Orientado a ObjetosProgramação Orientado a Objetos
Programação Orientado a Objetos
 
POO - 10 - Herança
POO - 10 - HerançaPOO - 10 - Herança
POO - 10 - Herança
 
Programação Orientada a Objetos
Programação Orientada a ObjetosProgramação Orientada a Objetos
Programação Orientada a Objetos
 
POO - 01 - Introdução ao Paradigma Orientado a Objetos
POO - 01 - Introdução ao Paradigma Orientado a ObjetosPOO - 01 - Introdução ao Paradigma Orientado a Objetos
POO - 01 - Introdução ao Paradigma Orientado a Objetos
 
Programação Orientada á Objeto - Paradigmas e Implementação
Programação Orientada á Objeto - Paradigmas e ImplementaçãoProgramação Orientada á Objeto - Paradigmas e Implementação
Programação Orientada á Objeto - Paradigmas e Implementação
 
Programação Orientada a Objetos - Uso da O.O. em Java
Programação Orientada a Objetos - Uso da O.O. em JavaProgramação Orientada a Objetos - Uso da O.O. em Java
Programação Orientada a Objetos - Uso da O.O. em Java
 
Orientação a Objetos
Orientação a ObjetosOrientação a Objetos
Orientação a Objetos
 
Conceitos Básicos de OO e Java
Conceitos Básicos de OO e JavaConceitos Básicos de OO e Java
Conceitos Básicos de OO e Java
 
Java - Aula 2 - Orientado a Objetos
Java - Aula 2 - Orientado a ObjetosJava - Aula 2 - Orientado a Objetos
Java - Aula 2 - Orientado a Objetos
 
Conceitos Básicos de Orientação o Objetos aplicdo ao VBA - Classes em vba
Conceitos Básicos de Orientação o Objetos aplicdo ao VBA - Classes em vbaConceitos Básicos de Orientação o Objetos aplicdo ao VBA - Classes em vba
Conceitos Básicos de Orientação o Objetos aplicdo ao VBA - Classes em vba
 
Curso de OO com C# - Parte 01 - Orientação a objetos
Curso de OO com C# - Parte 01 - Orientação a objetosCurso de OO com C# - Parte 01 - Orientação a objetos
Curso de OO com C# - Parte 01 - Orientação a objetos
 
Aula 02 - Principios da Orientação a Objetos (POO)
Aula 02 - Principios da Orientação a Objetos (POO)Aula 02 - Principios da Orientação a Objetos (POO)
Aula 02 - Principios da Orientação a Objetos (POO)
 
Especialização e generalização em java
Especialização e generalização em javaEspecialização e generalização em java
Especialização e generalização em java
 
Análise Orientada a Objetos - Objetos E Classes
Análise Orientada a Objetos  -   Objetos E ClassesAnálise Orientada a Objetos  -   Objetos E Classes
Análise Orientada a Objetos - Objetos E Classes
 

Destaque

Classes Java , JDBC / Swing / Collections
Classes Java , JDBC / Swing / Collections Classes Java , JDBC / Swing / Collections
Classes Java , JDBC / Swing / Collections
Eduardo Carvalho
 
Java 10 Classes Abstratas Interfaces
Java 10 Classes Abstratas InterfacesJava 10 Classes Abstratas Interfaces
Java 10 Classes Abstratas Interfaces
Regis Magalhães
 
Programação orientada a_objetos
Programação orientada a_objetosProgramação orientada a_objetos
Programação orientada a_objetos
Claudio Araujo
 
The Colonies
The ColoniesThe Colonies
The Colonies
bowersc
 

Destaque (19)

Introdução a Orientaçãoo a Objetos
Introdução a Orientaçãoo a ObjetosIntrodução a Orientaçãoo a Objetos
Introdução a Orientaçãoo a Objetos
 
Classes Java , JDBC / Swing / Collections
Classes Java , JDBC / Swing / Collections Classes Java , JDBC / Swing / Collections
Classes Java , JDBC / Swing / Collections
 
Java 10 Classes Abstratas Interfaces
Java 10 Classes Abstratas InterfacesJava 10 Classes Abstratas Interfaces
Java 10 Classes Abstratas Interfaces
 
Polimorfismo em jogos
Polimorfismo em jogosPolimorfismo em jogos
Polimorfismo em jogos
 
Presentacion progra
Presentacion prograPresentacion progra
Presentacion progra
 
Programação orientada a_objetos
Programação orientada a_objetosProgramação orientada a_objetos
Programação orientada a_objetos
 
Apostila java completo
Apostila java completoApostila java completo
Apostila java completo
 
Aula 1 - Introdução a linguagem JAVA SE
Aula 1 - Introdução a linguagem JAVA SEAula 1 - Introdução a linguagem JAVA SE
Aula 1 - Introdução a linguagem JAVA SE
 
Aula de Introdução - JAVA
Aula de Introdução  - JAVAAula de Introdução  - JAVA
Aula de Introdução - JAVA
 
Apostila de Fundamentos Java
Apostila de Fundamentos JavaApostila de Fundamentos Java
Apostila de Fundamentos Java
 
DeadClerkDrawing14Sept2003.DOC
DeadClerkDrawing14Sept2003.DOCDeadClerkDrawing14Sept2003.DOC
DeadClerkDrawing14Sept2003.DOC
 
The Colonies
The ColoniesThe Colonies
The Colonies
 
Education Transcript
Education TranscriptEducation Transcript
Education Transcript
 
Modulowy Dom
Modulowy DomModulowy Dom
Modulowy Dom
 
MAPA DE TOLEDO
MAPA DE TOLEDOMAPA DE TOLEDO
MAPA DE TOLEDO
 
Descentralización de la gestión
Descentralización de la gestiónDescentralización de la gestión
Descentralización de la gestión
 
Chicago
ChicagoChicago
Chicago
 
Diez temas candentes de la sanidad española para 2012, Valencia, 2012
Diez temas candentes de la sanidad española para 2012, Valencia, 2012Diez temas candentes de la sanidad española para 2012, Valencia, 2012
Diez temas candentes de la sanidad española para 2012, Valencia, 2012
 
Diez temas candentes de la sanidad española para 2011
Diez temas candentes de la sanidad española para 2011 Diez temas candentes de la sanidad española para 2011
Diez temas candentes de la sanidad española para 2011
 

Semelhante a Java - Boas práticas

Poo slides01
Poo slides01Poo slides01
Poo slides01
jmtofoli
 
Princípios solid
Princípios solidPrincípios solid
Princípios solid
Dyego Costa
 
Orientação a Objetos no Delphi - Por onde começar (I)
Orientação a Objetos no Delphi - Por onde começar (I)Orientação a Objetos no Delphi - Por onde começar (I)
Orientação a Objetos no Delphi - Por onde começar (I)
Ryan Padilha
 

Semelhante a Java - Boas práticas (20)

Modelagem de sistemas
Modelagem de sistemasModelagem de sistemas
Modelagem de sistemas
 
POO2-Pre-32-PadroesProjetos_.pdf
POO2-Pre-32-PadroesProjetos_.pdfPOO2-Pre-32-PadroesProjetos_.pdf
POO2-Pre-32-PadroesProjetos_.pdf
 
Test driven development
Test driven developmentTest driven development
Test driven development
 
Code Smells
Code SmellsCode Smells
Code Smells
 
SOLID Os princípios da linguagem orientada a objeto
SOLID Os princípios da linguagem orientada a objetoSOLID Os princípios da linguagem orientada a objeto
SOLID Os princípios da linguagem orientada a objeto
 
Poo slides01
Poo slides01Poo slides01
Poo slides01
 
Estudos Technocorp
Estudos TechnocorpEstudos Technocorp
Estudos Technocorp
 
Qualidade no desenvolvimento de sistemas
Qualidade no desenvolvimento de sistemasQualidade no desenvolvimento de sistemas
Qualidade no desenvolvimento de sistemas
 
Strategy pattern
Strategy patternStrategy pattern
Strategy pattern
 
Java aula 2
Java aula 2Java aula 2
Java aula 2
 
01 java fundamentos
01 java fundamentos01 java fundamentos
01 java fundamentos
 
Apresentação curso de Extensão em Java (UERJ-IME) v1
Apresentação curso de Extensão em Java (UERJ-IME) v1Apresentação curso de Extensão em Java (UERJ-IME) v1
Apresentação curso de Extensão em Java (UERJ-IME) v1
 
Programação Orientada a Objetos - Pós Graduação - aula 1
Programação Orientada a Objetos - Pós Graduação - aula 1Programação Orientada a Objetos - Pós Graduação - aula 1
Programação Orientada a Objetos - Pós Graduação - aula 1
 
Princípios solid
Princípios solidPrincípios solid
Princípios solid
 
Orientação a Objetos - Princípios SOLID
Orientação a Objetos - Princípios SOLIDOrientação a Objetos - Princípios SOLID
Orientação a Objetos - Princípios SOLID
 
Módulo 9 - Introdução à Programação Orientada a Objectos
Módulo 9 - Introdução à Programação Orientada a Objectos Módulo 9 - Introdução à Programação Orientada a Objectos
Módulo 9 - Introdução à Programação Orientada a Objectos
 
Princípios SOLID
Princípios SOLIDPrincípios SOLID
Princípios SOLID
 
Orientação a Objetos no Delphi - Por onde começar (I)
Orientação a Objetos no Delphi - Por onde começar (I)Orientação a Objetos no Delphi - Por onde começar (I)
Orientação a Objetos no Delphi - Por onde começar (I)
 
Apresentação faef
Apresentação faefApresentação faef
Apresentação faef
 
Apresentacao Boas praticas, revisão java, SOLID, KISS, DRY, design patterns, ...
Apresentacao Boas praticas, revisão java, SOLID, KISS, DRY, design patterns, ...Apresentacao Boas praticas, revisão java, SOLID, KISS, DRY, design patterns, ...
Apresentacao Boas praticas, revisão java, SOLID, KISS, DRY, design patterns, ...
 

Java - Boas práticas

  • 1. JAVA: BOAS PRÁTICAS Felippe Rodrigo Puhle http://www.felippepuhle.com.br
  • 2. PARTE 1 - Orientação a objetos - Encapsulamento - Polimorfismo - Herança - Classes abstratas - Exceções
  • 3. Interfaces - É uma maneira de conversarmos com um objeto - Pode definir uma série de métodos, mas nunca conter a implementação deles - Expõe o que o objeto deve fazer, e não como ele faz ou o que ele tem - “Contrato”
  • 4. Interfaces - O objetivo de uso é deixar o código mais flexível, possibilitando uma mudança de implementação sem maiores problemas - Design patterns: - evite herança, prefira composição - programe voltado a interfaces - Herança pode quebrar o encapsulamento: a partir do momento que você precisa conhecer o código fonte da sua mãe, você quebrou o encapsulamento)
  • 7. DAO Genérico - Ser um DAO ou ter um DAO? - Todas as operações fazem sentido? E se quisermos impossibilitar a exclusão no PagamentoDAO, por exemplo? - Liskov substitution principle(SOLID): em herança, a classe filho nunca deve apertar as pré-condições ou afrouxar as pós-condições.
  • 9. Classes coesas - Quando uma classe tem muitas responsabilidades com pouca ou nenhuma relação entre si, dizemos que ela não é coesa. - Classes devem ter únicas responsabilidades, serem pequenas e reutilizáveis. - Single Responsibility Principle(SOLID): Princípio da Responsabilidade Única. Tenha classes coesas.
  • 13. Acoplamento - A partir do momento em que eu tenho muitas dependências, a minha classe depende de várias, que podem propagar problema para a minha. - “Tenha classes que são muito coesas e pouco acopladas.” kkkkkkkk
  • 14. Acoplamento - Evitar acoplamentos que são realmente perigosos e me acoplar com coisas que são menos perigosas. - Quando que é bom, e quando que é ruim? - Exemplo: “Puxa, acoplar com List não é problema porque List é uma interface que o Java fez. Vem na linguagem Java” - A resposta correta é: ela é estável, não muda.
  • 15. Acoplamento - Acoplamento eferente: eu, classe, dependo de outras. - Acoplamento aferente: eu sou uma classe, e os outro é quem dependem de mim.
  • 16. Acoplamento - O acoplamento aferente mostra que muitas outras classes dependem de mim, e isso faz com que eu(classe) seja estável. - A chance de eu(classe) mudar é menor. Pois o programador vai ter medo de alterar. - “Programe voltado pra interface” - Exemplo: utilização dos patterns Builder e Command.
  • 17. Acoplamento - Reduzir acoplamento usando polimorfismo. Tell, Don't Ask - você deve dizer ao objeto o que quer que ele faça ou retorne, e não pedir sobre o seu estado para tomar decisões. - exemplo: todos getters and setters em um Pedido Lei de Demeter - você deve ter conhecimento limitado sobre outras classes - só deve saber coisas “próximas” - fale apenas com “amigos”, e não “estranhos” - exemplo: a().b().c() -> a().b()
  • 18. Boas práticas de POO - Seja objetivo, não tente prever o futuro - Crie seus métodos com carinho - Conheça e use coleções - Sobrescreva equals, hashCode e toString - Às vezes é melhor associar em vez de herdar - Se preocupe com o encapsulamento - Saiba usar interface e classe abstrata no momento certo - Use e abuse das facilidades fornecidas por linguagens orientadas a objetos - Conheça e utilize as convenções de codificação da linguagem
  • 19. Injeção de dependências - É uma maneira de uma classe “pedir” uma determinada dependência(outra classe) - Geralmente esta classe que necessita de uma determinada dependência não conhece(e nem deve conhecer) muitas das coisas sobre a classe: - Ciclo de vida, construção, implementações de métodos e até mesmo sua destrução. - Exemplo: banco de dados.
  • 21. CDI - CDI é uma especificação do Java EE voltada a injeção de dependências, mas que pode ser utilizada naturalmente no Java SE. - Com o CDI habilitado, praticamente todas as classes do projeto são consideradas managed beans e, portanto, passíveis de injeção e de serem injetadas. - Podemos usar com CDI toda classe pública com um construtor público padrão ou algum que receba parâmetros e esteja anotado com @Inject.
  • 22. CDI – Primeira injeção - Basta usar a anotação @Inject
  • 23. CDI – Producers - Objetos complexos de serem criados - Utilização do pattern Factory
  • 24. CDI – Scopes - Gerenciamento do ciclo de vida dos beans - Uma instância por chamada, uma instância pra aplicação, uma instância por requisição, etc.
  • 25. Por que CDI? - Separação de responsabilidades - Inversão de controle - Melhora o encapsulamento - Gerenciamento do ciclo de vida - Desacoplamento de processos
  • 26. Próximos passos - Patterns - Strategy - Chain of Responsibility - Template Method - Decorator - State - Builder - Observer
  • 27. Próximos passos - Patterns - Factory - Flyweight - Memento - DSLs - Interpreter - Visitor - Bridges - Adapters - Command - Facade - Singleton
  • 28. Próximos passos - SOLID - Single responsibility principle - Open/closed principle - Liskov substitution principle - Interface segregation principle - Dependency inversion principle