28
Objetos Distribuídos - Programação Distribuída Orientado a Objetos Luiz Affonso Guedes

Objetos Distribuídos - Programação Distribuída …affonso/DCA2401/2004_1/aulas/objetos... · – Só opera com objeto remotos Java • Corba – a Interface é escrita em IDL

Embed Size (px)

Citation preview

Page 1: Objetos Distribuídos - Programação Distribuída …affonso/DCA2401/2004_1/aulas/objetos... · – Só opera com objeto remotos Java • Corba – a Interface é escrita em IDL

Objetos Distribuídos -Programação Distribuída

Orientado a Objetos

Luiz Affonso Guedes

Page 2: Objetos Distribuídos - Programação Distribuída …affonso/DCA2401/2004_1/aulas/objetos... · – Só opera com objeto remotos Java • Corba – a Interface é escrita em IDL

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

Page 3: Objetos Distribuídos - Programação Distribuída …affonso/DCA2401/2004_1/aulas/objetos... · – Só opera com objeto remotos Java • Corba – a Interface é escrita em IDL

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

Page 4: Objetos Distribuídos - Programação Distribuída …affonso/DCA2401/2004_1/aulas/objetos... · – Só opera com objeto remotos Java • Corba – a Interface é escrita em IDL

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

Page 5: Objetos Distribuídos - Programação Distribuída …affonso/DCA2401/2004_1/aulas/objetos... · – Só opera com objeto remotos Java • Corba – a Interface é escrita em IDL

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

Page 6: Objetos Distribuídos - Programação Distribuída …affonso/DCA2401/2004_1/aulas/objetos... · – Só opera com objeto remotos Java • Corba – a Interface é escrita em IDL

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

Page 7: Objetos Distribuídos - Programação Distribuída …affonso/DCA2401/2004_1/aulas/objetos... · – Só opera com objeto remotos Java • Corba – a Interface é escrita em IDL

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

Page 8: Objetos Distribuídos - Programação Distribuída …affonso/DCA2401/2004_1/aulas/objetos... · – Só opera com objeto remotos Java • Corba – a Interface é escrita em IDL

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

Page 9: Objetos Distribuídos - Programação Distribuída …affonso/DCA2401/2004_1/aulas/objetos... · – Só opera com objeto remotos Java • Corba – a Interface é escrita em IDL

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

Page 10: Objetos Distribuídos - Programação Distribuída …affonso/DCA2401/2004_1/aulas/objetos... · – Só opera com objeto remotos Java • Corba – a Interface é escrita em IDL

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.

Page 11: Objetos Distribuídos - Programação Distribuída …affonso/DCA2401/2004_1/aulas/objetos... · – Só opera com objeto remotos Java • Corba – a Interface é escrita em IDL

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

Page 12: Objetos Distribuídos - Programação Distribuída …affonso/DCA2401/2004_1/aulas/objetos... · – Só opera com objeto remotos Java • Corba – a Interface é escrita em IDL

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)

Page 13: Objetos Distribuídos - Programação Distribuída …affonso/DCA2401/2004_1/aulas/objetos... · – Só opera com objeto remotos Java • Corba – a Interface é escrita em IDL

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

Page 14: Objetos Distribuídos - Programação Distribuída …affonso/DCA2401/2004_1/aulas/objetos... · – Só opera com objeto remotos Java • Corba – a Interface é escrita em IDL

Constituição dos Objetos

Estados:Atributos

método 1 método n

método 2

interface

Page 15: Objetos Distribuídos - Programação Distribuída …affonso/DCA2401/2004_1/aulas/objetos... · – Só opera com objeto remotos Java • Corba – a Interface é escrita em IDL

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

Page 16: Objetos Distribuídos - Programação Distribuída …affonso/DCA2401/2004_1/aulas/objetos... · – Só opera com objeto remotos Java • Corba – a Interface é escrita em IDL

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

Page 17: Objetos Distribuídos - Programação Distribuída …affonso/DCA2401/2004_1/aulas/objetos... · – Só opera com objeto remotos Java • Corba – a Interface é escrita em IDL

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

Page 18: Objetos Distribuídos - Programação Distribuída …affonso/DCA2401/2004_1/aulas/objetos... · – Só opera com objeto remotos Java • Corba – a Interface é escrita em IDL

OD - Modelo de programação

ORB- Object Request Broker

ServidorCliente

requisição

resposta

Page 19: Objetos Distribuídos - Programação Distribuída …affonso/DCA2401/2004_1/aulas/objetos... · – Só opera com objeto remotos Java • Corba – a Interface é escrita em IDL

ORBs

• Object Request Broker– Middleware para suporte de serviço de

distribuição.– RMI – Remote Method Invocation (Java)– Corba – Common ORB Architecture (OMG)

Page 20: Objetos Distribuídos - Programação Distribuída …affonso/DCA2401/2004_1/aulas/objetos... · – Só opera com objeto remotos Java • Corba – a Interface é escrita em IDL

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

Page 21: Objetos Distribuídos - Programação Distribuída …affonso/DCA2401/2004_1/aulas/objetos... · – Só opera com objeto remotos Java • Corba – a Interface é escrita em IDL

Estrutura de um Orb

Cliente

Stub Skeleton

ORB

Servidor

SkeletonStub

ServiceRegistry

port

Page 22: Objetos Distribuídos - Programação Distribuída …affonso/DCA2401/2004_1/aulas/objetos... · – Só opera com objeto remotos Java • Corba – a Interface é escrita em IDL

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

Page 23: Objetos Distribuídos - Programação Distribuída …affonso/DCA2401/2004_1/aulas/objetos... · – Só opera com objeto remotos Java • Corba – a Interface é escrita em IDL

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

Page 24: Objetos Distribuídos - Programação Distribuída …affonso/DCA2401/2004_1/aulas/objetos... · – Só opera com objeto remotos Java • Corba – a Interface é escrita em IDL

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;

}

Page 25: Objetos Distribuídos - Programação Distribuída …affonso/DCA2401/2004_1/aulas/objetos... · – Só opera com objeto remotos Java • Corba – a Interface é escrita em IDL

// 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

Page 26: Objetos Distribuídos - Programação Distribuída …affonso/DCA2401/2004_1/aulas/objetos... · – Só opera com objeto remotos Java • Corba – a Interface é escrita em IDL

// 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

Page 27: Objetos Distribuídos - Programação Distribuída …affonso/DCA2401/2004_1/aulas/objetos... · – Só opera com objeto remotos Java • Corba – a Interface é escrita em IDL

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

Page 28: Objetos Distribuídos - Programação Distribuída …affonso/DCA2401/2004_1/aulas/objetos... · – Só opera com objeto remotos Java • Corba – a Interface é escrita em IDL

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

} }