Baixe o app para aproveitar ainda mais
Prévia do material em texto
Objetos Distribuídos - Programação Distribuída Orientado a Objetos Luiz Affonso Guedes Introdução • Conceitos básicos – programação distribuída + programação orientada a objetos = Objetos distribuídos – Motivação • Associar as vantagens advindas da programação orientada a objetos no desenvolvimento de aplicações distribuídas – PD- Programação Distribuída – POO - Programação Orientada a Objetos – POOD- Programação Orientada a Objetos Distribuída Breve Histórico de Programação Distribuída • Programação distribuída – Programação de sistemas que executam sobre redes de computadores. • Conceito de redes de computadores • Conceito de processos • Modelo cliente-servidor • Conceito de troca de mensagens • Chamada de procedimento remoto • Invocação de métodos de objetos remotos • Sistemas baseados em agentes Conceito de Redes de Computadores • Modelo em camadas Camada Física Camada de Enlace Camada de Rede Camada de Transporte Camada de Aplicação Camada Física Camada de Enlace Camada de Rede Camada de Transporte Camada de Aplicação Aplicação Comunicação Conceito de Middleware • Necessidade de agrupar funcionalidades comuns às várias aplicações distribuídas – Conceito de abstração da programação distribuída • Tentar tornar a programação distribuída, em termos de facilidade de programação, o mais próximo possível da programação centralizada. Camada Física Camada de Enlace Camada de Rede Camada de Transporte Middleware S.O. + Hardware Software O middleware deve ser independente do SO e do hardware Evolução do Conceito de Middleware 1977 1982 1987 1992 1997 2002 2007 Troca de Mensagens (Sockets) Chamada de Procedimento Remoto (RPC) Objetos Distribuídos (RMI, CORBA) Agentes Paradigma de Troca de Mensagem Tarefa 1 Tarefa 2 send(M1) receive(M1) send(M2)receive(M2) Tarefa 1 Tarefa 2 send(M1) receive(M1) send(M2) receive(M2) bloqueio processando Troca de Mensagem - Implementação • Via Socket - síncrono ou assíncrono IP TCP ou UDP LAN ou WAN IP TCP ou UDP API Socket API Socket Interface de programação buffer portSistema Operacional Troca de Mensagens - Características de Programação • Baixo nível de abstração na programação • Necessidade de se conhecer aspectos de redes de computadores e sistemas operacionais – ports e número IP • Leva a programas poucos estruturados Chamada de Procedimento Remoto - RPC • Remote Procedure Call (RPC) – baseada no conceito de chamada de procedimento das linguagens estruturadas • A idéia é fazer a invocação de um procedimento remoto o mais similar possível como se faz a chamada de um procedimento local. RPC - Modelo de Programação Cliente Servidor P1 P2 P3 Call P2(a1,a2) retorno Cliente Servidor call P2(a1,a2) receive(M1) retorno do resultado de P2 bloqueio processandoP2 RPC - Implementação Cliente Servidor ... x = call P2(a1,a2); .... empacota parâmetros desempacota parâmetros empacota parâmetros desempacota parâmetros P1 P2 P3 despachante API (socket) API (socket) P2a1a2 resultado P2(a1,a2) Objetos Distribuídos • Surgiu da necessidade de se atender aos requisitos de software mais exigentes, oriundos de sistemas mais complexos. – Reusabilidade – Modularidade – Flexibilidade • Objetos Distribuídos = Programação Orientada a Objetos + Programação Distribuída Constituição dos Objetos Estados: Atributos método 1 método n método 2 interface Constituição de Objetos • Toda interação com um objeto se dá através da invocação de seus métodos declarados com públicos • Métodos declarados como privados só podem ser invocados pelos demais métodos do objeto • Os atributos são variáveis manipuladas pelos métodos do objeto Conceitos Básicos de Objetos • Classificação – Objetos são organizados em classes. Uma classe define o comportamento dos objetos dela derivados. – Relacionamento entre classes • herança: relação tipo é-um ou é-uma • composição: relação tipo é-parte-de • colaboração: relações tipo usa, delega e autoriza Conceitos Inerentes dos Objetos • Instanciação – objetos são criado a partir do modelo de sua classe • Encapsulamento – detalhes de implementação não são visíveis fora do objetos • Identidade – objetos possuem identidade única • Polimorfismo – métodos com o mesmo nome podem apresentar comportamento diferente OD - Modelo de programação ORB- Object Request Broker ServidorCliente requisição resposta ORBs • Object Request Broker – Middleware para suporte de serviço de distribuição. – RMI – Remote Method Invocation (Java) – Corba – Common ORB Architecture (OMG) Estrutura de um Orb LAN ou WAN Cliente Servidor IP Camada de Transporte Camada de Referência Remota Stub IP Camada de Transporte Camada de Referência Remota Skeleton Estrutura de um Orb Cliente Stub Skeleton ORB Servidor SkeletonStub Service Registry port Procedimento de Programação 1. Escrever Interface 2. Implementar a Interface 3. Implementar Servidor que contém a implementação da interface 4. Gerar Stub e Skeleton da Interface 5. Registrar Servidor e Disparar Servidor 6. Escrever Cliente que utiliza métodos da Interface RMI e Corba • RMI – a Interface é escrita em Java – Só opera com objeto remotos Java • Corba – a Interface é escrita em IDL (Interface Descrition Language – like C++) – Multi-linguagem – Há várias implementações do padrão Exemplo em RMI • Passo 1 – Especificação da Interface // Interface remota para implementação de método da séria de Fibinacci import java.rmi.*; import java.math.BigInteger; public interface Fibonacci extends Remote { public BigInteger getFibonacci (int n) throws RemoteException; public BigInteger getFibonacci (BigInteger n) throws RemoteException; } // Implementação da interface Fibonacci.java import java.rmi.*; import java.rmi.server.UnicastRemoteObject; import java.math.BigInteger; public class FibonacciImpl implements Fibonacci { public FibonacciImpl( ) throws RemoteException { UnicastRemoteObject.exportObject(this); } public BigInteger getFibonacci (int n) throws RemoteException { ... return (retorno); } public BigInteger getFibonacci (BigInteger n) throws RemoteException { ... return (retorno); } } Exemplo em RMI • Passo 2 – Implementar a Interface // Servidor que conterá o objeto da classe FibonacciImpl.java import java.net.*; import java.rmi.*; public class FibonacciServer { public static void main(String[] args) { try { FibonacciImpl f = new FibonacciImpl(); // instanciação do objeto remoto Naming.rebind("fibonacci", f); // registro do servidor System.out.println("Servidor Fibonacci pronto."); } catch (RemoteException re) { System.out.println(" Exception in FibonacciImpl.main: " + re); } catch (MalformedURLException e) { System.out.println(" URL mal formada" + e); } } } Exemplo em RMI • Passo 3 – Implementar o Servidor Exemplo em RMI • Passo 4 – Gerar Stub e Skeleton da Interface rmic FibonacciImpl Criação automática de FibonacciImpl_Skel.java e FibonacciImpl_Stub.java • Passo 5 – Registrar e Disparar Servidor rmiregistry (linux) start rmiregistry (windows) // porta default = 1099 java FiboncciServer Exemplo em RMI • Passo 6 – Implementar Cliente / Programa cliente da interface remota Fibonacci.java import java.rmi.*; import java.net.*; import java.math.BigInteger; public class FibonacciClient2 { public static void main(String args[]) { try { Object o = Naming.lookup("rmi://localhost/fibonacci"); // ligação com o servidor remoto Fibonacci calculator = (Fibonacci) o; // conversão de tipo BigInteger index = new BigInteger("3"); // número da série BigInteger f = calculator.getFibonacci(index); // chamada de método em interface remota System.out.println(" O " + index + "-ésimo termo da série de Fibonacci é " + f); } catch(MalformedURLException e) { ... } catch(RemoteException re) { ... } catch(NotBoundException e) { ... } } }
Compartilhar