SlideShare una empresa de Scribd logo
1 de 24
Descargar para leer sin conexión
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
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
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
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 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.
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”.

Más contenido relacionado

La actualidad más candente

Algoritmos e Estrutura de Dados - Aula 01
Algoritmos e Estrutura de Dados - Aula 01Algoritmos e Estrutura de Dados - Aula 01
Algoritmos e Estrutura de Dados - Aula 01thomasdacosta
 
Padrões de Projeto - Design Patterns e Anti-Patterns
Padrões de Projeto - Design Patterns e Anti-PatternsPadrões de Projeto - Design Patterns e Anti-Patterns
Padrões de Projeto - Design Patterns e Anti-PatternsRodrigo Kono
 
Dextra Sistemas: A linguagem PHP no modelo de Fábrica de Software
Dextra Sistemas: A linguagem PHP no modelo de Fábrica de SoftwareDextra Sistemas: A linguagem PHP no modelo de Fábrica de Software
Dextra Sistemas: A linguagem PHP no modelo de Fábrica de SoftwareDextra
 
Trilhando o caminho PHP [2.0]
Trilhando o caminho PHP [2.0]Trilhando o caminho PHP [2.0]
Trilhando o caminho PHP [2.0]Rafael Dohms
 
Trilhando o Caminho PHP - PHPConf2008
Trilhando o Caminho PHP - PHPConf2008Trilhando o Caminho PHP - PHPConf2008
Trilhando o Caminho PHP - PHPConf2008Rafael Dohms
 

La actualidad más candente (6)

Algoritmos e Estrutura de Dados - Aula 01
Algoritmos e Estrutura de Dados - Aula 01Algoritmos e Estrutura de Dados - Aula 01
Algoritmos e Estrutura de Dados - Aula 01
 
Padrões de Projeto - Design Patterns e Anti-Patterns
Padrões de Projeto - Design Patterns e Anti-PatternsPadrões de Projeto - Design Patterns e Anti-Patterns
Padrões de Projeto - Design Patterns e Anti-Patterns
 
Dextra Sistemas: A linguagem PHP no modelo de Fábrica de Software
Dextra Sistemas: A linguagem PHP no modelo de Fábrica de SoftwareDextra Sistemas: A linguagem PHP no modelo de Fábrica de Software
Dextra Sistemas: A linguagem PHP no modelo de Fábrica de Software
 
PHPZEIRO: Adote um framework
PHPZEIRO: Adote um frameworkPHPZEIRO: Adote um framework
PHPZEIRO: Adote um framework
 
Trilhando o caminho PHP [2.0]
Trilhando o caminho PHP [2.0]Trilhando o caminho PHP [2.0]
Trilhando o caminho PHP [2.0]
 
Trilhando o Caminho PHP - PHPConf2008
Trilhando o Caminho PHP - PHPConf2008Trilhando o Caminho PHP - PHPConf2008
Trilhando o Caminho PHP - PHPConf2008
 

Destacado

Mini Curso - Programação de Interfaces Gráficas - aula extra persistência
Mini Curso - Programação de Interfaces Gráficas - aula extra persistênciaMini Curso - Programação de Interfaces Gráficas - aula extra persistência
Mini Curso - Programação de Interfaces Gráficas - aula extra persistênciaCarlos Eduardo
 
Mini Curso - Programação de Interfaces Gráficas - aula 1
Mini Curso - Programação de Interfaces Gráficas - aula 1Mini Curso - Programação de Interfaces Gráficas - aula 1
Mini Curso - Programação de Interfaces Gráficas - aula 1Carlos Eduardo
 
Mini Curso - Programação de Interfaces Gráficas - aula 3
Mini Curso - Programação de Interfaces Gráficas - aula 3Mini Curso - Programação de Interfaces Gráficas - aula 3
Mini Curso - Programação de Interfaces Gráficas - aula 3Carlos Eduardo
 
Mini Curso - Programação de Interfaces Gráficas - aula 4
Mini Curso - Programação de Interfaces Gráficas - aula 4Mini Curso - Programação de Interfaces Gráficas - aula 4
Mini Curso - Programação de Interfaces Gráficas - aula 4Carlos Eduardo
 
Mini Curso - Programação de Interfaces Gráficas - aula 2
Mini Curso - Programação de Interfaces Gráficas - aula 2Mini Curso - Programação de Interfaces Gráficas - aula 2
Mini Curso - Programação de Interfaces Gráficas - aula 2Carlos Eduardo
 
Apresentação wxWidgets
Apresentação wxWidgetsApresentação wxWidgets
Apresentação wxWidgetsRenzo Petri
 
Aula de Algoritmos II - Turma 222
Aula de Algoritmos II - Turma 222Aula de Algoritmos II - Turma 222
Aula de Algoritmos II - Turma 222Bianca Dantas
 
Algoritmos Genéticos Aplicados ao Problema da Mochila Multidimensional
Algoritmos Genéticos Aplicados ao Problema da Mochila MultidimensionalAlgoritmos Genéticos Aplicados ao Problema da Mochila Multidimensional
Algoritmos Genéticos Aplicados ao Problema da Mochila MultidimensionalBianca Dantas
 
Aula sobre multithreading
Aula sobre multithreadingAula sobre multithreading
Aula sobre multithreadingBianca Dantas
 
Java 08 Modificadores Acesso E Membros De Classe
Java 08 Modificadores Acesso E Membros De ClasseJava 08 Modificadores Acesso E Membros De Classe
Java 08 Modificadores Acesso E Membros De ClasseRegis Magalhães
 
Exercicios - Java Swing Listeners
Exercicios - Java Swing ListenersExercicios - Java Swing Listeners
Exercicios - Java Swing ListenersDaniel Arndt Alves
 

Destacado (20)

Lazarus Free
Lazarus FreeLazarus Free
Lazarus Free
 
Mini Curso - Programação de Interfaces Gráficas - aula extra persistência
Mini Curso - Programação de Interfaces Gráficas - aula extra persistênciaMini Curso - Programação de Interfaces Gráficas - aula extra persistência
Mini Curso - Programação de Interfaces Gráficas - aula extra persistência
 
php 01 introducao
php 01 introducaophp 01 introducao
php 01 introducao
 
Mini Curso - Programação de Interfaces Gráficas - aula 1
Mini Curso - Programação de Interfaces Gráficas - aula 1Mini Curso - Programação de Interfaces Gráficas - aula 1
Mini Curso - Programação de Interfaces Gráficas - aula 1
 
Mini Curso - Programação de Interfaces Gráficas - aula 3
Mini Curso - Programação de Interfaces Gráficas - aula 3Mini Curso - Programação de Interfaces Gráficas - aula 3
Mini Curso - Programação de Interfaces Gráficas - aula 3
 
Mini Curso - Programação de Interfaces Gráficas - aula 4
Mini Curso - Programação de Interfaces Gráficas - aula 4Mini Curso - Programação de Interfaces Gráficas - aula 4
Mini Curso - Programação de Interfaces Gráficas - aula 4
 
Java Lista Exercicios 04
Java Lista Exercicios 04Java Lista Exercicios 04
Java Lista Exercicios 04
 
Mini Curso - Programação de Interfaces Gráficas - aula 2
Mini Curso - Programação de Interfaces Gráficas - aula 2Mini Curso - Programação de Interfaces Gráficas - aula 2
Mini Curso - Programação de Interfaces Gráficas - aula 2
 
Lista Exercicios C2
Lista Exercicios C2Lista Exercicios C2
Lista Exercicios C2
 
Apresentação wxWidgets
Apresentação wxWidgetsApresentação wxWidgets
Apresentação wxWidgets
 
Java 07 Entrada Dados
Java 07 Entrada DadosJava 07 Entrada Dados
Java 07 Entrada Dados
 
Aula de Algoritmos II - Turma 222
Aula de Algoritmos II - Turma 222Aula de Algoritmos II - Turma 222
Aula de Algoritmos II - Turma 222
 
Algoritmos Genéticos Aplicados ao Problema da Mochila Multidimensional
Algoritmos Genéticos Aplicados ao Problema da Mochila MultidimensionalAlgoritmos Genéticos Aplicados ao Problema da Mochila Multidimensional
Algoritmos Genéticos Aplicados ao Problema da Mochila Multidimensional
 
Aula sobre multithreading
Aula sobre multithreadingAula sobre multithreading
Aula sobre multithreading
 
Java Lista Exercicios 06
Java Lista Exercicios 06Java Lista Exercicios 06
Java Lista Exercicios 06
 
JTableView - Swing
JTableView - SwingJTableView - Swing
JTableView - Swing
 
Lista Exercicios C
Lista Exercicios CLista Exercicios C
Lista Exercicios C
 
Java 08 Modificadores Acesso E Membros De Classe
Java 08 Modificadores Acesso E Membros De ClasseJava 08 Modificadores Acesso E Membros De Classe
Java 08 Modificadores Acesso E Membros De Classe
 
Merci 10 Completo
Merci 10 CompletoMerci 10 Completo
Merci 10 Completo
 
Exercicios - Java Swing Listeners
Exercicios - Java Swing ListenersExercicios - Java Swing Listeners
Exercicios - Java Swing Listeners
 

Similar a Refactoring com Hook Method e Herança Genérica

Programação Concorrente - Curso Completo
Programação Concorrente - Curso CompletoProgramação Concorrente - Curso Completo
Programação Concorrente - Curso Completothomasdacosta
 
POO2-Pre-32-PadroesProjetos_.pdf
POO2-Pre-32-PadroesProjetos_.pdfPOO2-Pre-32-PadroesProjetos_.pdf
POO2-Pre-32-PadroesProjetos_.pdfAndreCosta502039
 
Global tecnol s.a – tecnologias – ads semestre 5º e 6º semestre
Global tecnol s.a – tecnologias – ads semestre 5º e 6º semestreGlobal tecnol s.a – tecnologias – ads semestre 5º e 6º semestre
Global tecnol s.a – tecnologias – ads semestre 5º e 6º semestreHELENO FAVACHO
 
PROJETO INTEGRADO - CURSOS DA ÁREA DE TI - Uma das tecnologias mais populare...
PROJETO INTEGRADO - CURSOS DA ÁREA DE TI -  Uma das tecnologias mais populare...PROJETO INTEGRADO - CURSOS DA ÁREA DE TI -  Uma das tecnologias mais populare...
PROJETO INTEGRADO - CURSOS DA ÁREA DE TI - Uma das tecnologias mais populare...HELENO FAVACHO
 
Test driven development
Test driven developmentTest driven development
Test driven developmentclauvane1708
 
TDD: A Essência do Mantra
TDD: A Essência do MantraTDD: A Essência do Mantra
TDD: A Essência do MantraDionatan default
 
CURSOS DA ÁREA DE TI - Instanciação é um processo muito comum na programação ...
CURSOS DA ÁREA DE TI - Instanciação é um processo muito comum na programação ...CURSOS DA ÁREA DE TI - Instanciação é um processo muito comum na programação ...
CURSOS DA ÁREA DE TI - Instanciação é um processo muito comum na programação ...HELENO FAVACHO
 
Administração de materiais unidade 03 14-06-07 - 108 - ppts 01 slide por fo...
Administração de materiais unidade 03   14-06-07 - 108 - ppts 01 slide por fo...Administração de materiais unidade 03   14-06-07 - 108 - ppts 01 slide por fo...
Administração de materiais unidade 03 14-06-07 - 108 - ppts 01 slide por fo...Alex Casañas
 
Clean Code - Fork In Tuba
Clean Code - Fork In TubaClean Code - Fork In Tuba
Clean Code - Fork In TubaRafael Paz
 
Cleaner-Code-CentralIT-2015
Cleaner-Code-CentralIT-2015Cleaner-Code-CentralIT-2015
Cleaner-Code-CentralIT-2015Valdemar Júnior
 
Clean code @rogeriofontes-techfriday-everis
Clean code @rogeriofontes-techfriday-everisClean code @rogeriofontes-techfriday-everis
Clean code @rogeriofontes-techfriday-everisRogerio Fontes
 
DDD – Domain Driven Design
DDD – Domain Driven DesignDDD – Domain Driven Design
DDD – Domain Driven DesignÍtalo Bandeira
 
Projeto Integrado Áreas de TI - iniciar uma jornada empreendedora - 2.pdf
Projeto Integrado Áreas de TI - iniciar uma jornada empreendedora - 2.pdfProjeto Integrado Áreas de TI - iniciar uma jornada empreendedora - 2.pdf
Projeto Integrado Áreas de TI - iniciar uma jornada empreendedora - 2.pdfHELENO FAVACHO
 
Projeto Integrado ADS - a agricultura familiar.pdf
Projeto Integrado ADS - a agricultura familiar.pdfProjeto Integrado ADS - a agricultura familiar.pdf
Projeto Integrado ADS - a agricultura familiar.pdfHELENO FAVACHO
 

Similar a Refactoring com Hook Method e Herança Genérica (20)

Code Smells
Code SmellsCode Smells
Code Smells
 
Programação Concorrente - Curso Completo
Programação Concorrente - Curso CompletoProgramação Concorrente - Curso Completo
Programação Concorrente - Curso Completo
 
Aula 3.ppt
Aula 3.pptAula 3.ppt
Aula 3.ppt
 
POO2-Pre-32-PadroesProjetos_.pdf
POO2-Pre-32-PadroesProjetos_.pdfPOO2-Pre-32-PadroesProjetos_.pdf
POO2-Pre-32-PadroesProjetos_.pdf
 
Global tecnol s.a – tecnologias – ads semestre 5º e 6º semestre
Global tecnol s.a – tecnologias – ads semestre 5º e 6º semestreGlobal tecnol s.a – tecnologias – ads semestre 5º e 6º semestre
Global tecnol s.a – tecnologias – ads semestre 5º e 6º semestre
 
PROJETO INTEGRADO - CURSOS DA ÁREA DE TI - Uma das tecnologias mais populare...
PROJETO INTEGRADO - CURSOS DA ÁREA DE TI -  Uma das tecnologias mais populare...PROJETO INTEGRADO - CURSOS DA ÁREA DE TI -  Uma das tecnologias mais populare...
PROJETO INTEGRADO - CURSOS DA ÁREA DE TI - Uma das tecnologias mais populare...
 
Code Smells
Code SmellsCode Smells
Code Smells
 
Refatoração
RefatoraçãoRefatoração
Refatoração
 
Test driven development
Test driven developmentTest driven development
Test driven development
 
TDD: A Essência do Mantra
TDD: A Essência do MantraTDD: A Essência do Mantra
TDD: A Essência do Mantra
 
CURSOS DA ÁREA DE TI - Instanciação é um processo muito comum na programação ...
CURSOS DA ÁREA DE TI - Instanciação é um processo muito comum na programação ...CURSOS DA ÁREA DE TI - Instanciação é um processo muito comum na programação ...
CURSOS DA ÁREA DE TI - Instanciação é um processo muito comum na programação ...
 
Java com Excelência
Java com ExcelênciaJava com Excelência
Java com Excelência
 
Administração de materiais unidade 03 14-06-07 - 108 - ppts 01 slide por fo...
Administração de materiais unidade 03   14-06-07 - 108 - ppts 01 slide por fo...Administração de materiais unidade 03   14-06-07 - 108 - ppts 01 slide por fo...
Administração de materiais unidade 03 14-06-07 - 108 - ppts 01 slide por fo...
 
Clean Code - Fork In Tuba
Clean Code - Fork In TubaClean Code - Fork In Tuba
Clean Code - Fork In Tuba
 
Cleaner-Code-CentralIT-2015
Cleaner-Code-CentralIT-2015Cleaner-Code-CentralIT-2015
Cleaner-Code-CentralIT-2015
 
Modelo anêmico x Modelo rico
Modelo anêmico x Modelo ricoModelo anêmico x Modelo rico
Modelo anêmico x Modelo rico
 
Clean code @rogeriofontes-techfriday-everis
Clean code @rogeriofontes-techfriday-everisClean code @rogeriofontes-techfriday-everis
Clean code @rogeriofontes-techfriday-everis
 
DDD – Domain Driven Design
DDD – Domain Driven DesignDDD – Domain Driven Design
DDD – Domain Driven Design
 
Projeto Integrado Áreas de TI - iniciar uma jornada empreendedora - 2.pdf
Projeto Integrado Áreas de TI - iniciar uma jornada empreendedora - 2.pdfProjeto Integrado Áreas de TI - iniciar uma jornada empreendedora - 2.pdf
Projeto Integrado Áreas de TI - iniciar uma jornada empreendedora - 2.pdf
 
Projeto Integrado ADS - a agricultura familiar.pdf
Projeto Integrado ADS - a agricultura familiar.pdfProjeto Integrado ADS - a agricultura familiar.pdf
Projeto Integrado ADS - a agricultura familiar.pdf
 

Más de Carlos Eduardo

When and Why Your Code Starts to Smell Bad
When and Why Your Code Starts to Smell BadWhen and Why Your Code Starts to Smell Bad
When and Why Your Code Starts to Smell BadCarlos Eduardo
 
Experimentos envolvendo ações de Rejuvenescimento de Software
Experimentos envolvendo ações de Rejuvenescimento de SoftwareExperimentos envolvendo ações de Rejuvenescimento de Software
Experimentos envolvendo ações de Rejuvenescimento de SoftwareCarlos Eduardo
 
A Measurement-Based Model for Estimation of Resource Exhaustion in Operationa...
A Measurement-Based Model for Estimation of Resource Exhaustion in Operationa...A Measurement-Based Model for Estimation of Resource Exhaustion in Operationa...
A Measurement-Based Model for Estimation of Resource Exhaustion in Operationa...Carlos Eduardo
 
Socket Descriptor Leak encontrado na JDK
Socket Descriptor Leak encontrado na JDKSocket Descriptor Leak encontrado na JDK
Socket Descriptor Leak encontrado na JDKCarlos Eduardo
 
Máquinas de turing com memória limitada
Máquinas de turing com memória limitadaMáquinas de turing com memória limitada
Máquinas de turing com memória limitadaCarlos Eduardo
 
Detecting bad smells in source code using change history information
Detecting bad smells in source code using change history informationDetecting bad smells in source code using change history information
Detecting bad smells in source code using change history informationCarlos Eduardo
 
Recommending refactoring operations in large software systems
Recommending refactoring operations in large software systemsRecommending refactoring operations in large software systems
Recommending refactoring operations in large software systemsCarlos Eduardo
 

Más de Carlos Eduardo (8)

When and Why Your Code Starts to Smell Bad
When and Why Your Code Starts to Smell BadWhen and Why Your Code Starts to Smell Bad
When and Why Your Code Starts to Smell Bad
 
Experimentos envolvendo ações de Rejuvenescimento de Software
Experimentos envolvendo ações de Rejuvenescimento de SoftwareExperimentos envolvendo ações de Rejuvenescimento de Software
Experimentos envolvendo ações de Rejuvenescimento de Software
 
A Measurement-Based Model for Estimation of Resource Exhaustion in Operationa...
A Measurement-Based Model for Estimation of Resource Exhaustion in Operationa...A Measurement-Based Model for Estimation of Resource Exhaustion in Operationa...
A Measurement-Based Model for Estimation of Resource Exhaustion in Operationa...
 
Socket Descriptor Leak encontrado na JDK
Socket Descriptor Leak encontrado na JDKSocket Descriptor Leak encontrado na JDK
Socket Descriptor Leak encontrado na JDK
 
Máquinas de turing com memória limitada
Máquinas de turing com memória limitadaMáquinas de turing com memória limitada
Máquinas de turing com memória limitada
 
Detecting bad smells in source code using change history information
Detecting bad smells in source code using change history informationDetecting bad smells in source code using change history information
Detecting bad smells in source code using change history information
 
Recommending refactoring operations in large software systems
Recommending refactoring operations in large software systemsRecommending refactoring operations in large software systems
Recommending refactoring operations in large software systems
 
NoSql
NoSqlNoSql
NoSql
 

Refactoring com Hook Method e Herança Genérica

  • 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br Classe CrudDaoImpl
  • 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. Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br Classe CrudDaoImpl
  • 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. 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. 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. 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. 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. Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br Classe PedidoDaoImpl • Com a classe PedidoDaoImpl se realiza o mesmo procedimento.
  • 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. Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br Geração do JAR para o cliente
  • 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. 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. 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”.