Buscar

objetos-distribuidos

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) { ... }
} 
}

Continue navegando