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

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

Embed Size (px)

Citation preview

Page 1: Objetos Distribuídos - Programação Distribuída Orientado a Objetos Luiz Affonso Guedes

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

Orientado a Objetos

Luiz Affonso Guedes

Page 2: 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

Page 3: Objetos Distribuídos - Programação Distribuída Orientado a Objetos Luiz Affonso Guedes

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 Orientado a Objetos Luiz Affonso Guedes

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 Orientado a Objetos Luiz Affonso Guedes

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 Transporte

Middleware

S.O. + Hardware

SoftwareO middleware deve ser independente do SO e do hardware

Page 6: Objetos Distribuídos - Programação Distribuída Orientado a Objetos Luiz Affonso Guedes

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

Page 7: Objetos Distribuídos - Programação Distribuída Orientado a Objetos Luiz Affonso Guedes

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)

bloqueioprocessando

Page 8: Objetos Distribuídos - Programação Distribuída Orientado a Objetos Luiz Affonso Guedes

Troca de Mensagem - Implementação

• Via Socket - síncrono ou assíncrono

IP

TCP ou UDP

LAN ou WAN

IP

TCP ou UDP

APISocket

APISocket

Interface de programação

buffer

portSistema Operacional

Page 9: Objetos Distribuídos - Programação Distribuída Orientado a Objetos Luiz Affonso Guedes

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 Orientado a Objetos Luiz Affonso Guedes

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 Orientado a Objetos Luiz Affonso Guedes

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

bloqueioprocessando

P2

Page 12: Objetos Distribuídos - Programação Distribuída Orientado a Objetos Luiz Affonso Guedes

RPC - Implementação

Cliente Servidor

...x = call P2(a1,a2);

....

empacota parâmetros

desempacota parâmetros

empacota parâmetros

desempacota parâmetros

P1

P2P3

despachante

API(socket)

API(socket)

P2a1a2

resultado

P2(a1,a2)

Page 13: Objetos Distribuídos - Programação Distribuída Orientado a Objetos Luiz Affonso Guedes

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 Orientado a Objetos Luiz Affonso Guedes

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 Orientado a Objetos Luiz Affonso Guedes

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 Orientado a Objetos Luiz Affonso Guedes

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 Orientado a Objetos Luiz Affonso Guedes

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 Orientado a Objetos Luiz Affonso Guedes

OD - Modelo de programação

ORB- Object Request Broker

ServidorCliente

requisição

resposta

Page 19: Objetos Distribuídos - Programação Distribuída Orientado a Objetos Luiz Affonso Guedes

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 Orientado a Objetos Luiz Affonso Guedes

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

Page 21: Objetos Distribuídos - Programação Distribuída Orientado a Objetos Luiz Affonso Guedes

Estrutura de um Orb

Cliente

Stub Skeleton

ORB

Servidor

SkeletonStub

ServiceRegistry

port

Page 22: Objetos Distribuídos - Programação Distribuída Orientado a Objetos Luiz Affonso Guedes

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

Page 23: Objetos Distribuídos - Programação Distribuída Orientado a Objetos Luiz Affonso Guedes

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 Orientado a Objetos Luiz Affonso Guedes

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 Orientado a Objetos Luiz Affonso Guedes

// 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 Orientado a Objetos Luiz Affonso Guedes

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

Page 27: Objetos Distribuídos - Programação Distribuída Orientado a Objetos Luiz Affonso Guedes

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

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

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