Upload
lamduong
View
224
Download
0
Embed Size (px)
Citation preview
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ísicaCamada de EnlaceCamada de Rede
Camada de Transporte
Camada de Aplicação
Camada FísicaCamada de EnlaceCamada 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ísicaCamada de EnlaceCamada de Rede
Camada de TransporteMiddleware
S.O. + Hardware
SoftwareO middleware deveser independente do SO e do hardware
Evolução do Conceito de Middleware
1977 1982 1987 1992 1997 2002 2007
Troca deMensagens (Sockets)
Chamada de Procedimento Remoto (RPC)
ObjetosDistribuídos (RMI, CORBA)
Agentes
Paradigma de Troca de Mensagem
Tarefa 1 Tarefa 2
send(M1) receive(M1)
send(M2)receive(M2)
Tarefa 1 Tarefa 2send(M1)
receive(M1)
send(M2)
receive(M2)
bloqueio processando
Troca de Mensagem - Implementação• Via Socket - síncrono ou assíncrono
IPTCP ou UDP
LAN ou WAN
IPTCP ou UDP
APISocket
APISocket
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 Servidorcall P2(a1,a2)
receive(M1)
retorno do resultado de P2
bloqueio processandoP2
RPC - ImplementaçãoCliente Servidor
...x = call P2(a1,a2);
....
empacotaparâmetros
desempacotaparâmetros
empacotaparâmetros
desempacotaparâmetros
P1P2
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
IPCamada de Transporte
Camada deReferência Remota
Stub
IPCamada de Transporte
Camada deReferência Remota
Skeleton
Estrutura de um Orb
Cliente
Stub Skeleton
ORB
Servidor
SkeletonStub
ServiceRegistry
port
Procedimento de Programação1. Escrever Interface2. Implementar a Interface3. Implementar Servidor que contém a
implementação da interface4. Gerar Stub e Skeleton da Interface5. Registrar Servidor e Disparar Servidor6. 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.javaimport java.net.*;import java.rmi.*;
public class FibonacciServer {public static void main(String[] args) {
try {FibonacciImpl f = new FibonacciImpl(); // instanciação do objeto remotoNaming.rebind("fibonacci", f); // registro do servidorSystem.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 FibonacciImplCriação automática de FibonacciImpl_Skel.java e FibonacciImpl_Stub.java
• Passo 5 – Registrar e Disparar Servidorrmiregistry (linux)start rmiregistry (windows) // porta default = 1099java FiboncciServer
Exemplo em RMI• Passo 6 – Implementar Cliente
/ Programa cliente da interface remota Fibonacci.javaimport 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 remotoFibonacci calculator = (Fibonacci) o; // conversão de tipoBigInteger index = new BigInteger("3"); // número da sérieBigInteger f = calculator.getFibonacci(index); // chamada de método em interface remotaSystem.out.println(" O " + index + "-ésimo termo da série de Fibonacci é " + f);
} catch(MalformedURLException e) { ... }catch(RemoteException re) { ... }catch(NotBoundException e) { ... }
} }