programação orientada a objetos - pós graduação - aula 4 - refactoring com hook method

24
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 [email protected]

Upload: carlos-eduardo-dantas

Post on 21-Jul-2015

97 views

Category:

Technology


0 download

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 – [email protected]

Prof Carlos Eduardo Dantas – [email protected]

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 – [email protected]

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 – [email protected]

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 – [email protected]

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 – [email protected]

Interface CrudDao

• Crie uma interface chamada de CrudDao;

• O código <E extends Serializable> caracteriza o uso de genéricos.

Prof Carlos Eduardo Dantas – [email protected]

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 – [email protected]

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 – [email protected]

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 – [email protected]

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 – [email protected]

Classe CrudDaoImpl

Prof Carlos Eduardo Dantas – [email protected]

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 – [email protected]

Classe CrudDaoImpl

Prof Carlos Eduardo Dantas – [email protected]

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 – [email protected]

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 – [email protected]

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 – [email protected]

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 – [email protected]

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 – [email protected]

Classe PedidoDaoImpl

• Com a classe PedidoDaoImpl se realiza o mesmo procedimento.

Prof Carlos Eduardo Dantas – [email protected]

SerialversionUID

• Este link esclarece dúvidas sobre o SerialVersionUID

• http://blog.caelum.com.br/entendendo-o-serialversionuid/

Prof Carlos Eduardo Dantas – [email protected]

Geração do JAR para o cliente

Prof Carlos Eduardo Dantas – [email protected]

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 – [email protected]

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.

Prof Carlos Eduardo Dantas – [email protected]

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”.