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

268 visualizações

Publicada em

Slides da quinta 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
268
No SlideShare
0
A partir de incorporações
0
Número de incorporações
3
Ações
Compartilhamentos
0
Downloads
15
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 5 - refactoring com hook class

  1. 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. 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. 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. 4. Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br Hook Class vs Hook Methods Hook Method Hook Class
  5. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 18. Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br Refatorando para Hook Class – corrigindo aplicação cliente • Correções nas classes Control.
  19. 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. 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. 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”.

×