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
Aplicação
Camada de Aplicação
Camada de Aplicação
Camada de Transporte
Camada de Rede
Camada de Enlace
Camada Física
Camada de Transporte
Camada de Rede
Camada de Enlace
Camada Física
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.
Software
S.O. +
Hardware
Middleware
Camada de Transporte
Camada de Rede
Camada de Enlace
Camada Física
O middleware deve
ser independente do SO e
do hardware
Evolução do Conceito de
Middleware
Agentes
Objetos
Chamada de
Distribuídos (RMI, CORBA)
Procedimento
Remoto (RPC)
Troca de
Mensagens (Sockets)
1977 1982
1987 1992 1997 2002 2007
Paradigma de Troca de
Mensagem
Tarefa 1
send(M1)
receive(M1)
Tarefa 2
send(M1)
receive(M1)
Tarefa 1
receive(M2)
Tarefa 2
send(M2)
bloqueio
processando
send(M2)
receive(M2)
Troca de Mensagem - Implementação
• Via Socket - síncrono ou assíncrono
Interface de programação
API
Socket
TCP ou UDP
IP
Sistema
Operacional
LAN ou WAN
port
buffer
API
Socket
TCP ou UDP
IP
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
call P2(a1,a2)
Call P2(a1,a2)
Servidor
P1
Cliente retorno
receive(M1)
bloqueio
processando
P2
P2
P3
retorno do
resultado de P2
RPC - Implementação
Cliente
Servidor
P1
...
x = call P2(a1,a2);
....
P3
P2
P2(a1,a2)
despachante
empacota
parâmetros
desempacota
parâmetros
empacota
parâmetros
desempacota
parâmetros
a2 a1 P2
API
(socket)
resultado
API
(socket)
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
método 1
Estados:
Atributos
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
Servidor
Cliente
requisição
resposta
ORB- Object Request Broker
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
Cliente
Servidor
Stub
Skeleton
Camada de
Camada de
Referência Remota
Referência Remota
Camada de Transporte
Camada de Transporte
IP
IP
LAN ou WAN
Estrutura de um Orb
Servidor
Service
Registry
port
Cliente
Stub
Stub
Skeleton
ORB
Skeleton
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;
}
Exemplo em RMI
• Passo 2 – Implementar a Interface
// 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 3 – Implementar o Servidor
// 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 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)
java FiboncciServer
// porta default = 1099
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) { ... }
}
}
Download

Objetos Distribuídos