Programação Orientada a Objetos
Refactoring com Hook
Method
Pós Graduação em Análise e Desenvolvimento de Sistemas
Aplicad...
Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br
Introdução
• Com a criação de novas telas, surgem
muitas linh...
Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br
Refactoring
• Segundo Martin Fowler, Refactoring é o
processo...
Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br
Refactoring
• Quanto mais cedo a necessidade de
refactoring f...
Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br
Herança - Diagrama de
Classes
• Será utilizada uma estratégia...
Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br
Interface CrudDao
• Crie uma interface chamada de CrudDao;
• ...
Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br
Genéricos
• A idéia por detrás dos genéricos é evitar
redundâ...
Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br
Genéricos
• A idéia por detrás dos genéricos é evitar
redundâ...
Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br
Genéricos
• A idéia por detrás dos genéricos é evitar
redundâ...
Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br
Classe CrudDaoImpl
• Deve ser criada a classe CrudDaoImpl,
im...
Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br
Classe CrudDaoImpl
Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br
Classe CrudDaoImpl
• Os métodos podem ser preenchidos com o
c...
Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br
Classe CrudDaoImpl
Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br
Classe CrudDaoImpl
• Observa-se que os métodos salvar e pesqu...
Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br
Classe CrudDaoImpl
• Desta forma, delegou-se para os filhos
e...
Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br
Interfaces ClienteDao e
PedidoDao
• Implementa-se as interfac...
Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br
Classe ClienteDaoImpl
• A classe deve ser filha da classe Cru...
Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br
Classe ClienteDaoImpl
• Implementa-se os métodos gancho, e re...
Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br
Classe PedidoDaoImpl
• Com a classe PedidoDaoImpl se realiza ...
Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br
SerialversionUID
• Este link esclarece dúvidas sobre o
Serial...
Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br
Geração do JAR para o
cliente
Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br
Execução
• Subir o servidor no Eclipse;
• Subir o banco de da...
Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br
Conclusões
• Houve uma considerável melhoria no
projeto, leva...
Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br
Referências
• ANICHE, Maurício. Orientação a objetos e
SOLID ...
Próximos SlideShares
Carregando em…5
×

Programação Orientada a Objetos - Pós Graduação - Aula 4 - refactoring com hook method

294 visualizações

Publicada em

Slides da quarta aula de Programação Orientada a Objetos no curso de Pós Graduação em Análise e Desenvolvimento Aplicados à Gestão Empresarial

Publicada em: Tecnologia
0 comentários
0 gostaram
Estatísticas
Notas
  • Seja o primeiro a comentar

  • Seja a primeira pessoa a gostar disto

Sem downloads
Visualizações
Visualizações totais
294
No SlideShare
0
A partir de incorporações
0
Número de incorporações
3
Ações
Compartilhamentos
0
Downloads
13
Comentários
0
Gostaram
0
Incorporações 0
Nenhuma incorporação

Nenhuma nota no slide

Programação Orientada a Objetos - Pós Graduação - Aula 4 - refactoring com hook method

  1. 1. Programação Orientada a Objetos Refactoring com Hook Method Pós Graduação em Análise e Desenvolvimento de Sistemas Aplicados à Gestão Empresarial INSTITUTO FEDERAL DE EDUCAÇÃO, CIÊNCIA E TECNOLOGIA TRIÂNGULO MINEIRO – Campus Uberlândia Centro Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br
  2. 2. Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br Introdução • Com a criação de novas telas, surgem muitas linhas de código duplicadas; • É necessário aplicar um refactoring no projeto.
  3. 3. Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br Refactoring • Segundo Martin Fowler, Refactoring é o processo de reestruturar o sistema sem mudar suas funcionalidades, tornando-o mais fácil de entender e modificar.
  4. 4. Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br Refactoring • Quanto mais cedo a necessidade de refactoring for identificada, melhor; • Muitas classes envolvidas no refactoring resulta em muito tempo de alteração;
  5. 5. Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br Herança - Diagrama de Classes • Será utilizada uma estratégia de Herança, onde a classe CrudDaoImpl terá o código genérico, e as classes filhas injetarão os parâmetros.
  6. 6. Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br Interface CrudDao • Crie uma interface chamada de CrudDao; • O código <E extends Serializable> caracteriza o uso de genéricos.
  7. 7. Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br Genéricos • A idéia por detrás dos genéricos é evitar redundância, ocultando o tipo da classe que será usada, para que instâncias filhas injetem o real tipo. • Mais detalhes em: http://www.devmedia.com.br/usando- generics-em-java/28981
  8. 8. Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br Genéricos • A idéia por detrás dos genéricos é evitar redundância, ocultando o tipo da classe que será usada, para que instâncias filhas injetem o real tipo. • Mais detalhes em: http://www.devmedia.com.br/usando- generics-em-java/28981
  9. 9. Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br Genéricos • A idéia por detrás dos genéricos é evitar redundância, ocultando o tipo da classe que será usada, para que instâncias filhas injetem o real tipo. • Mais detalhes em: http://www.devmedia.com.br/usando- generics-em-java/28981
  10. 10. Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br Classe CrudDaoImpl • Deve ser criada a classe CrudDaoImpl, implementando a Interface CrudDao. • Ao clicar no erro, os métodos da interface serão mostrados para que sejam implementados.
  11. 11. Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br Classe CrudDaoImpl
  12. 12. Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br Classe CrudDaoImpl • Os métodos podem ser preenchidos com o código de uma das classes filhas, como por exemplo, ClienteDaoImpl. • A idéia agora é preservar o que é genérico, e retirar o que é particular de cada filho.
  13. 13. Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br Classe CrudDaoImpl
  14. 14. Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br Classe CrudDaoImpl • Observa-se que os métodos salvar e pesquisar ainda possuem falhas, pois nestes casos, não tem como abstrair completamente o comportamento das classes filhas apenas usando genéricos. • Para isso, é necessário criar métodos abstratos, delegando a implementação para as classes filhas; • Também foi criado uma nova classe genérica, chamada I, para representar o tipo da chave.
  15. 15. Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br Classe CrudDaoImpl • Desta forma, delegou-se para os filhos entregarem os parâmetros específicos que a classe CrudDao precisa para concluir o método; • Esta abordagem é chamada de Hook Method (ou métodos gancho), utilizando um padrão de projeto chamado Template Method.
  16. 16. Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br Interfaces ClienteDao e PedidoDao • Implementa-se as interfaces ClienteDao e PedidoDao, extendendo de CrudDao e injetando a classe que substitui a classe genérica <E extends Serializable>
  17. 17. Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br Classe ClienteDaoImpl • A classe deve ser filha da classe CrudDaoImpl, e deve-se clicar no erro para implementar os métodos abstratos que CrudDaoImpl definiu, ou seja, os métodos abstratos que ClienteDaoImpl irá implementar serão como ganchos para que CrudDaoImpl execute seus métodos.
  18. 18. Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br Classe ClienteDaoImpl • Implementa-se os métodos gancho, e remove os métodos salvarAtualizar(),excluir() e pesquisar(), pois já estão implementados na classe pai.
  19. 19. Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br Classe PedidoDaoImpl • Com a classe PedidoDaoImpl se realiza o mesmo procedimento.
  20. 20. Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br SerialversionUID • Este link esclarece dúvidas sobre o SerialVersionUID • http://blog.caelum.com.br/entendendo- o-serialversionuid/
  21. 21. Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br Geração do JAR para o cliente
  22. 22. Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br Execução • Subir o servidor no Eclipse; • Subir o banco de dados no NetBeans; • Executar o comando limpar e construir clicando com o botão direito no projeto
  23. 23. Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br Conclusões • Houve uma considerável melhoria no projeto, levando-se em consideração o reaproveitamento de código; • Herança possui desvantagens, pois a quebra de encapsulamento é sempre uma ameaça; • Na próxima aula, será demonstrada a estratégia de hook class, ou composição.
  24. 24. Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br Referências • ANICHE, Maurício. Orientação a objetos e SOLID para Ninjas. Casa do Código, 2015; • GUERRA, Eduardo. Design Patterns com Java. Casa do Código, 2014; • “LARMAN, Craig – Utilizando UML e Padrões 3ª Edição. Bookman, 2007”.

×