programação orientada a objetos - pós graduação - aula 4 - refactoring com hook method
Post on 21-Jul-2015
97 Views
Preview:
TRANSCRIPT
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
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.
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.
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;
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.
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.
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
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
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
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.
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.
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.
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.
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>
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.
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.
Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br
Classe PedidoDaoImpl
• Com a classe PedidoDaoImpl se realiza o mesmo procedimento.
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/
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
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.
top related