objetos distribuídos - programação distribuída …affonso/dca2401/2004_1/aulas/objetos... ·...

Post on 03-Oct-2018

224 Views

Category:

Documents

0 Downloads

Preview:

Click to see full reader

TRANSCRIPT

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

} }

top related