SlideShare uma empresa Scribd logo
1 de 21
Baixar para ler offline
Programação Orientada a Objetos
Refactoring com Hook
Class
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
• Estratégias baseadas em herança são como cartas
que só podem ser usadas uma única vez;
• Qualquer nova implementação na classe
CrudDaoImpl naturalmente será propagada
para as classes filhas;
• Em casos de métodos duplicados entre os filhos,
é natural desejar que subam para a classe pai,
contudo, podem existir outros filhos que não
usem tal método, quebrando o encapsulamento.
Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br
Hook Class vs Hook Methods
• Hook methods e Hook classes se tratam de uma
classe principal que chama um método cuja
implementação pode variar;
• Em hook methods, esse método está na mesma
classe, podendo a implementação variar de
acordo com a subclasse;
• Em hook classes, esse método está em um objeto
que compõe a classe, fazendo com que a
implementação varie com a instância.
Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br
Hook Class vs Hook Methods
Hook Method Hook Class
Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br
Hook Class vs Hook Methods
• Reaproveitamento de código é importante,
mas mais importante é a flexibilidade e
fácil manutenibilidade que o código-fonte
OO pode proporcionar, por isso é
preferível composição à herança;
• Joshua Block diz: “Crie suas classes
pensando em herança, ou então proíba-a”
Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br
Hook Class vs Hook Methods
• Reaproveitamento de código é importante,
mas mais importante é a flexibilidade e
fácil manutenibilidade que o código-fonte
OO pode proporcionar, por isso é
preferível composição à herança;
• Joshua Block diz: “Crie suas classes
pensando em herança, ou então proíba-a”
Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br
Refatorando para Hook Class
– Criação da interface
Crudavel
• Crie a interface e coloque todos os
métodos abstratos da classe CrudDaoImpl
Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br
Refatorando para Hook Class
– Alterando a classe
CrudDaoImpl
• A classe deixa de ser abstrata, de extender
objetos do RMI, e passa a ter uma
instância da interface Crudavel, injetada
via construtor
Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br
Refatorando para Hook Class
– Alterando a classe
CrudDaoImpl
• A classe deixa de ser abstrata, de extender
objetos do RMI, e passa a ter uma
instância da interface Crudavel, injetada
via construtor
Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br
Refatorando para Hook Class
– Alterando a classe
CrudDaoImpl
• Desse modo, os métodos da interface
passam a ser invocados, deixando a classe
CrudDaoImpl coesa.
Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br
Refatorando para Hook Class
– classes ClienteDaoImpl e
PedidoDaoImpl
• Estas classes passam a implementar
Crudavel, e os métodos precisam ser
públicos
Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br
Refatorando para Hook Class
– pacote service
• A estrutura DAO está praticamente
pronta. Contudo, é necessário publicar
estes serviços via RMI, para que a
aplicação cliente os consuma;
• É desaconselhável exportar serviços na
camada DAO, já que a mesma precisa ser
genérica tanto para chamadas locais
quanto remotas;
• Para isso, será criado o pacote service, que
irá expor os serviços remotamente.
Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br
Refatorando para Hook Class
– interfaces ClienteService e
PedidoService
Com estas interfaces, não são mais necessárias as
interfaces ClienteDao e PedidoDao.
Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br
Refatorando para Hook Class
– classe ClienteServiceImpl
• A classe ClienteServiceImpl irá ter uma
instância de CrudDaoImpl, injetando os
parâmetros de ClienteDaoImpl
Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br
Refatorando para Hook Class
– corrigindo a classe Principal
• A classe Principal deverá ser ajustada para
exportar PedidoService e ClienteService,
encapsulando todo o pacote Dao.
Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br
Refatorando para Hook Class
– exportando jar para a
aplicação cliente
• O pacote Dao não será mais exportado ao
cliente, restando apenas as interfaces de
service, e as classes de
domínio
Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br
Refatorando para Hook Class
– corrigindo aplicação cliente
• Surgirão erros na aplicação cliente, porque
esta não conhece o pacote service
Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br
Refatorando para Hook Class
– corrigindo aplicação cliente
• Correções nas classes Control.
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
• Com a composição, o código ficou menos
desacoplado e mais flexível;
• O pacote service também pode ser
implementado na solução de hook
method, embora tornou-se obrigatório no
hook class;
• Em casos onde não existe cliente remoto, o
pacote service é desnecessário.
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”.

Mais conteúdo relacionado

Mais procurados

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

Mais procurados (6)

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

Destaque

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 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 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 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 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
 
Aula de Algoritmos II - Turma 222
Aula de Algoritmos II - Turma 222Aula de Algoritmos II - Turma 222
Aula de Algoritmos II - Turma 222Bianca Dantas
 
Apresentação wxWidgets
Apresentação wxWidgetsApresentação wxWidgets
Apresentação wxWidgetsRenzo Petri
 
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
 
Projeto calculadora em_java
Projeto calculadora em_javaProjeto calculadora em_java
Projeto calculadora em_javasamuelthiago
 

Destaque (20)

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
 
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
 
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 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
 
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
 
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
 
Apresentação wxWidgets
Apresentação wxWidgetsApresentação wxWidgets
Apresentação wxWidgets
 
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
 
Merci 10 Completo
Merci 10 CompletoMerci 10 Completo
Merci 10 Completo
 
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
 
Exercicios - Java Swing Listeners
Exercicios - Java Swing ListenersExercicios - Java Swing Listeners
Exercicios - Java Swing Listeners
 
Projeto calculadora em_java
Projeto calculadora em_javaProjeto calculadora em_java
Projeto calculadora em_java
 

Semelhante a Programação Orientada a Objetos - Pós Graduação - Aula 5 - refactoring com hook class

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
 
Programação Concorrente - Curso Completo
Programação Concorrente - Curso CompletoProgramação Concorrente - Curso Completo
Programação Concorrente - Curso Completothomasdacosta
 
00. apresentacao da disciplina
00. apresentacao da disciplina00. apresentacao da disciplina
00. apresentacao da disciplinaEverton De Grande
 
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
 
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
 
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
 
Apresentação Banco de Dados - Caché
Apresentação Banco de Dados - CachéApresentação Banco de Dados - Caché
Apresentação Banco de Dados - CachéRenzo Petri
 
Projeto Integrado jornada empreendedora TI.pdf
Projeto Integrado jornada empreendedora TI.pdfProjeto Integrado jornada empreendedora TI.pdf
Projeto Integrado jornada empreendedora TI.pdfHELENO FAVACHO
 
Projeto Integrado Áreas de TI - iniciar uma jornada empreendedora.pdf
Projeto Integrado Áreas de TI -  iniciar uma jornada empreendedora.pdfProjeto Integrado Áreas de TI -  iniciar uma jornada empreendedora.pdf
Projeto Integrado Áreas de TI - iniciar uma jornada empreendedora.pdfHELENO FAVACHO
 
PROJETO INTEGRADO - CURSOS DA ÁREA DE TI - A UML (Linguagem de Modelagem Uni...
PROJETO INTEGRADO - CURSOS DA ÁREA DE TI -  A UML (Linguagem de Modelagem Uni...PROJETO INTEGRADO - CURSOS DA ÁREA DE TI -  A UML (Linguagem de Modelagem Uni...
PROJETO INTEGRADO - CURSOS DA ÁREA DE TI - A UML (Linguagem de Modelagem Uni...HELENO 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
 

Semelhante a Programação Orientada a Objetos - Pós Graduação - Aula 5 - refactoring com hook class (15)

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
 
Programação Concorrente - Curso Completo
Programação Concorrente - Curso CompletoProgramação Concorrente - Curso Completo
Programação Concorrente - Curso Completo
 
00. apresentacao da disciplina
00. apresentacao da disciplina00. apresentacao da disciplina
00. apresentacao da disciplina
 
Java - Boas práticas
Java - Boas práticasJava - Boas práticas
Java - Boas práticas
 
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...
 
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
 
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
 
Apresentação Banco de Dados - Caché
Apresentação Banco de Dados - CachéApresentação Banco de Dados - Caché
Apresentação Banco de Dados - Caché
 
Code Smells
Code SmellsCode Smells
Code Smells
 
Projeto Integrado jornada empreendedora TI.pdf
Projeto Integrado jornada empreendedora TI.pdfProjeto Integrado jornada empreendedora TI.pdf
Projeto Integrado jornada empreendedora TI.pdf
 
Projeto Integrado Áreas de TI - iniciar uma jornada empreendedora.pdf
Projeto Integrado Áreas de TI -  iniciar uma jornada empreendedora.pdfProjeto Integrado Áreas de TI -  iniciar uma jornada empreendedora.pdf
Projeto Integrado Áreas de TI - iniciar uma jornada empreendedora.pdf
 
POO - Aula 003
POO - Aula 003POO - Aula 003
POO - Aula 003
 
PROJETO INTEGRADO - CURSOS DA ÁREA DE TI - A UML (Linguagem de Modelagem Uni...
PROJETO INTEGRADO - CURSOS DA ÁREA DE TI -  A UML (Linguagem de Modelagem Uni...PROJETO INTEGRADO - CURSOS DA ÁREA DE TI -  A UML (Linguagem de Modelagem Uni...
PROJETO INTEGRADO - CURSOS DA ÁREA DE TI - A UML (Linguagem de Modelagem Uni...
 
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
 

Mais 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
 

Mais 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
 

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

  • 1. Programação Orientada a Objetos Refactoring com Hook Class 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 • Estratégias baseadas em herança são como cartas que só podem ser usadas uma única vez; • Qualquer nova implementação na classe CrudDaoImpl naturalmente será propagada para as classes filhas; • Em casos de métodos duplicados entre os filhos, é natural desejar que subam para a classe pai, contudo, podem existir outros filhos que não usem tal método, quebrando o encapsulamento.
  • 3. Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br Hook Class vs Hook Methods • Hook methods e Hook classes se tratam de uma classe principal que chama um método cuja implementação pode variar; • Em hook methods, esse método está na mesma classe, podendo a implementação variar de acordo com a subclasse; • Em hook classes, esse método está em um objeto que compõe a classe, fazendo com que a implementação varie com a instância.
  • 4. Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br Hook Class vs Hook Methods Hook Method Hook Class
  • 5. Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br Hook Class vs Hook Methods • Reaproveitamento de código é importante, mas mais importante é a flexibilidade e fácil manutenibilidade que o código-fonte OO pode proporcionar, por isso é preferível composição à herança; • Joshua Block diz: “Crie suas classes pensando em herança, ou então proíba-a”
  • 6. Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br Hook Class vs Hook Methods • Reaproveitamento de código é importante, mas mais importante é a flexibilidade e fácil manutenibilidade que o código-fonte OO pode proporcionar, por isso é preferível composição à herança; • Joshua Block diz: “Crie suas classes pensando em herança, ou então proíba-a”
  • 7. Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br Refatorando para Hook Class – Criação da interface Crudavel • Crie a interface e coloque todos os métodos abstratos da classe CrudDaoImpl
  • 8. Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br Refatorando para Hook Class – Alterando a classe CrudDaoImpl • A classe deixa de ser abstrata, de extender objetos do RMI, e passa a ter uma instância da interface Crudavel, injetada via construtor
  • 9. Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br Refatorando para Hook Class – Alterando a classe CrudDaoImpl • A classe deixa de ser abstrata, de extender objetos do RMI, e passa a ter uma instância da interface Crudavel, injetada via construtor
  • 10. Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br Refatorando para Hook Class – Alterando a classe CrudDaoImpl • Desse modo, os métodos da interface passam a ser invocados, deixando a classe CrudDaoImpl coesa.
  • 11. Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br Refatorando para Hook Class – classes ClienteDaoImpl e PedidoDaoImpl • Estas classes passam a implementar Crudavel, e os métodos precisam ser públicos
  • 12. Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br Refatorando para Hook Class – pacote service • A estrutura DAO está praticamente pronta. Contudo, é necessário publicar estes serviços via RMI, para que a aplicação cliente os consuma; • É desaconselhável exportar serviços na camada DAO, já que a mesma precisa ser genérica tanto para chamadas locais quanto remotas; • Para isso, será criado o pacote service, que irá expor os serviços remotamente.
  • 13. Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br Refatorando para Hook Class – interfaces ClienteService e PedidoService Com estas interfaces, não são mais necessárias as interfaces ClienteDao e PedidoDao.
  • 14. Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br Refatorando para Hook Class – classe ClienteServiceImpl • A classe ClienteServiceImpl irá ter uma instância de CrudDaoImpl, injetando os parâmetros de ClienteDaoImpl
  • 15. Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br Refatorando para Hook Class – corrigindo a classe Principal • A classe Principal deverá ser ajustada para exportar PedidoService e ClienteService, encapsulando todo o pacote Dao.
  • 16. Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br Refatorando para Hook Class – exportando jar para a aplicação cliente • O pacote Dao não será mais exportado ao cliente, restando apenas as interfaces de service, e as classes de domínio
  • 17. Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br Refatorando para Hook Class – corrigindo aplicação cliente • Surgirão erros na aplicação cliente, porque esta não conhece o pacote service
  • 18. Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br Refatorando para Hook Class – corrigindo aplicação cliente • Correções nas classes Control.
  • 19. 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
  • 20. Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br Conclusões • Com a composição, o código ficou menos desacoplado e mais flexível; • O pacote service também pode ser implementado na solução de hook method, embora tornou-se obrigatório no hook class; • Em casos onde não existe cliente remoto, o pacote service é desnecessário.
  • 21. 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”.