Title: Objetos Distribu
1Objetos Distribuídos - Programação Distribuída
Orientado a Objetos
2Introduçã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
3Breve 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
4Conceito de Redes de Computadores
5Conceito 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
O middleware deve ser independente do SO e do
hardware
S.O. Hardware
6Evolução do Conceito de Middleware
7Paradigma de Troca de Mensagem
send(M1)
receive(M1)
Tarefa 1
Tarefa 2
send(M2)
receive(M2)
8Troca de Mensagem - Implementação
- Via Socket - síncrono ou assíncrono
9Troca 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
10Chamada 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.
11RPC - Modelo de Programação
Call P2(a1,a2)
Servidor
Cliente
P1
retorno
P2
P3
12RPC - 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
P2
a1
a2
resultado
13Objetos 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
14Constituição dos Objetos
método 1
método n
método 2
interface
15Constituiçã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
16Conceitos 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
17Conceitos 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
18OD - Modelo de programação
19ORBs
- Object Request Broker
- Middleware para suporte de serviço de
distribuição. - RMI Remote Method Invocation (Java)
- Corba Common ORB Architecture (OMG)
20Estrutura de um Orb
Cliente
Servidor
Skeleton
Camada de Referência Remota
Camada de Transporte
IP
LAN ou WAN
21Estrutura de um Orb
Servidor
Service Registry
port
Cliente
Stub
Stub
Skeleton
Skeleton
ORB
22Procedimento de Programação
- Escrever Interface
- Implementar a Interface
- Implementar Servidor que contém a implementação
da interface - Gerar Stub e Skeleton da Interface
- Registrar Servidor e Disparar Servidor
- Escrever Cliente que utiliza métodos da Interface
23RMI 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
24Exemplo 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
25Exemplo em RMI
- Passo 2 Implementar a Interface
// Implementação da interface Fibonacci.java impo
rt java.rmi. import java.rmi.server.UnicastRemot
eObject 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)
26Exemplo 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("fibonacc
i", 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)
27Exemplo 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
28Exemplo 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) ...