programação orientada a objetos - pós graduação - aula 3

31
Programação Orientada a Objetos Acoplamento 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 20-Jul-2015

243 views

Category:

Technology


4 download

TRANSCRIPT

Page 1: Programação Orientada a Objetos - Pós Graduação - Aula 3

Programação Orientada a Objetos

Acoplamento

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]

Page 2: Programação Orientada a Objetos - Pós Graduação - Aula 3

Prof Carlos Eduardo Dantas – [email protected]

Introdução

• Acoplamento significa o quanto uma classe depende de outra para funcionar;

• Quanto maior for esta dependência entre ambas, mais fortemente acopladas estão essas classes.

Page 3: Programação Orientada a Objetos - Pós Graduação - Aula 3

Prof Carlos Eduardo Dantas – [email protected]

Introdução

• Uma alteração em uma classe provavelmente irá resultar em alterações nas suas dependências;

• Complica a manutenção e o gerenciamento das classes.

Page 4: Programação Orientada a Objetos - Pós Graduação - Aula 3

Prof Carlos Eduardo Dantas – [email protected]

Introdução

• Observa-se que a classe ClienteControl está fortemente acoplada com ClienteDaoImpl(), assim como ClienteView está com ClienteControl, pois conhece-se a instância específica que irá executar as solicitações.

Page 5: Programação Orientada a Objetos - Pós Graduação - Aula 3

Prof Carlos Eduardo Dantas – [email protected]

Introdução

• Uma simples analogia, seria como a classe ClienteControl fosse um funcionário que apertasse parafuso, e este precisasse saber onde está a chave certa para executar tal procedimento. Se a chave mudar de lugar, o funcionário precisa saber. Este é um problema clássico de manutenções em sistemas, onde a mudança em um lugar reflete em outros lugares.

Page 6: Programação Orientada a Objetos - Pós Graduação - Aula 3

Prof Carlos Eduardo Dantas – [email protected]

Refactoring Desacoplamento

• O projeto será refatorado para eliminar os acoplamentos;

Page 7: Programação Orientada a Objetos - Pós Graduação - Aula 3

Prof Carlos Eduardo Dantas – [email protected]

Refactoring Desacoplamento

• Será criada a classe ServiceLocator, que irá funcionar como se fosse um funcionário do almoxarifado, que fornece a chave certa

Page 8: Programação Orientada a Objetos - Pós Graduação - Aula 3

Prof Carlos Eduardo Dantas – [email protected]

Refactoring Desacoplamento

• E neste caso, a classe ClienteControl está delegando para a classe ServiceLocator para entregar a instância certa.

Page 9: Programação Orientada a Objetos - Pós Graduação - Aula 3

Prof Carlos Eduardo Dantas – [email protected]

Refactoring Desacoplamento

• A princípio não parece que surgiram muitas vantagens, mas agora a classe ClienteControl apenas conhece a interface e a classe que entrega a implementação pronta, sem ter a menor idéia de quem implementa a solução.

Page 10: Programação Orientada a Objetos - Pós Graduação - Aula 3

Prof Carlos Eduardo Dantas – [email protected]

Refactoring Desacoplamento

• É muito comum existirem sistemas legados em desktop, onde em um certo momento, surge a demanda de criar uma versão para a web;

• Seria razoável desacoplar o model deste sistema desktop, para que não seja necessário reescrever o mesmo em um sistema web, reaproveitando código.

Page 11: Programação Orientada a Objetos - Pós Graduação - Aula 3

Prof Carlos Eduardo Dantas – [email protected]

Sistema Server

• Será criado um projeto no Eclipse que contempla a parte model, e o sistema desktop escrito no NetBeans será um mero cliente.

Page 12: Programação Orientada a Objetos - Pós Graduação - Aula 3

Prof Carlos Eduardo Dantas – [email protected]

Sistema Server

• Deverão ser copiados os fontes do model, e criado um novo folder chamado lib

Page 13: Programação Orientada a Objetos - Pós Graduação - Aula 3

Prof Carlos Eduardo Dantas – [email protected]

Sistema Server

• Deverão ser copiadas as bibliotecas do hibernate e JavaDB

Page 14: Programação Orientada a Objetos - Pós Graduação - Aula 3

Prof Carlos Eduardo Dantas – [email protected]

Sistema Server

• Todos os arquivos .jar deverão ser importados clicando com o botão direito, de acordo com a imagem abaixo.

Page 15: Programação Orientada a Objetos - Pós Graduação - Aula 3

Prof Carlos Eduardo Dantas – [email protected]

Sistema Server

• Será implementado um servidor de RMI, que é apenas um serviço RPC com objetos. Deve ser alterada a interface ClienteDao;

• É uma boa prática colocar o nome e a URL do serviço na interface.

Page 16: Programação Orientada a Objetos - Pós Graduação - Aula 3

Prof Carlos Eduardo Dantas – [email protected]

Sistema Server

• A implementação também deverá ser alterada.

Page 17: Programação Orientada a Objetos - Pós Graduação - Aula 3

Prof Carlos Eduardo Dantas – [email protected]

Sistema Server

• Deverá ser criada uma classe Principal que irá executar o servidor.

Page 18: Programação Orientada a Objetos - Pós Graduação - Aula 3

Prof Carlos Eduardo Dantas – [email protected]

Sistema Server

• Desta forma, existe um servidor RMI atendendo requisições na porta 1099;

• Basta que a aplicação cliente tenha a interface ClienteDao, a classe de domínio Cliente e a URL, para conseguir conectar com o servidor.

Page 19: Programação Orientada a Objetos - Pós Graduação - Aula 3

Prof Carlos Eduardo Dantas – [email protected]

Exportando o serviço para a aplicação cliente

Page 20: Programação Orientada a Objetos - Pós Graduação - Aula 3

Prof Carlos Eduardo Dantas – [email protected]

Sistema Client

• Deverão ser excluídos todos os arquivos que foram exportados para o projeto Server do Eclipse, e importar a biblioteca que foi gerada no sistema Server;

Page 21: Programação Orientada a Objetos - Pós Graduação - Aula 3

Prof Carlos Eduardo Dantas – [email protected]

Sistema Client

• Deverão ser corrigidas as classes ClienteControl e ServiceLocator.

Page 22: Programação Orientada a Objetos - Pós Graduação - Aula 3

Prof Carlos Eduardo Dantas – [email protected]

Sistema Client – classe ServiceLocator

• A correção da classe ServiceLocator, observe que a implementação de ClienteDao mudou, e essa alteração continua transparente para ClienteControl

Page 23: Programação Orientada a Objetos - Pós Graduação - Aula 3

Prof Carlos Eduardo Dantas – [email protected]

Sistema Client – classe ClienteControl

• Em ClienteControl, as exceções RemoteException devem ser propagadas para ClienteView

Page 24: Programação Orientada a Objetos - Pós Graduação - Aula 3

Prof Carlos Eduardo Dantas – [email protected]

Sistema Client – classe ClienteView

• Em ClienteView, as exceções devem ser tratadas, mostrando para o usuário um erro de conexão.

Page 25: Programação Orientada a Objetos - Pós Graduação - Aula 3

Prof Carlos Eduardo Dantas – [email protected]

Sistema Client – classe ClienteView

Page 26: Programação Orientada a Objetos - Pós Graduação - Aula 3

Prof Carlos Eduardo Dantas – [email protected]

Sistema Client – alterando o persistence.xml

• Crie duas propriedades, show_sql e format_sql para visualizar as consultas sql que o client demanda para o servidor, e suba novamente o servidor.

Page 27: Programação Orientada a Objetos - Pós Graduação - Aula 3

Prof Carlos Eduardo Dantas – [email protected]

Sistema Client – executar

• Ao executar o client, observa-se que foi gerado log do lado servidor

Page 28: Programação Orientada a Objetos - Pós Graduação - Aula 3

Prof Carlos Eduardo Dantas – [email protected]

Exercício

• Implementar uma estrutura de Pedido, onde este possui data/hora, Cliente e número;

• Esta estrutura deve salvar, atualizar, excluir e alterar, ou seja, implementar todas as operações de CRUD, igual foi feito com a estrutura de Cliente.

Page 29: Programação Orientada a Objetos - Pós Graduação - Aula 3

Prof Carlos Eduardo Dantas – [email protected]

Desacoplamento da ClienteView

• A ClienteControl foi desacoplada da ClienteDaoImpl para que o sistema pudesse ser separado em duas camadas físicas;

• Dificilmente a classe ClienteView iria precisar ser desacoplada da ClienteControl para separação em camadas físicas, já que o framework Beans Binding e os componentes Swing são exclusivos para aplicações GUI.

Page 30: Programação Orientada a Objetos - Pós Graduação - Aula 3

Prof Carlos Eduardo Dantas – [email protected]

Desacoplamento da ClienteView

• De qualquer forma, é preferível o desacoplamento, mesmo que a classe fornecedora da implementação apenas retorne a instância.

Page 31: Programação Orientada a Objetos - Pós Graduação - Aula 3

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