Objetos Distribudos Programao Distribuda Orientado a Objetos Luiz
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 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(M 1) receive(M 1) Tarefa 2 send(M 1) receive(M 1) Tarefa 1 receive(M 2) Tarefa 2 send(M 2) bloqueio processando send(M 2) receive(M 2)
Troca de Mensagem - Implementação • Via Socket - síncrono ou assíncrono Interface de programação API Socket TCP ou UDP IP Sistema Operacional port buffer API Socket TCP ou UDP IP LAN ou WAN
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 P 2(a 1, a 2) Call P 2(a 1, a 2) Servidor P 1 Cliente retorno receive(M 1) bloqueio processando P 2 P 3 retorno do resultado de P 2
RPC - Implementação Cliente Servidor P 1 . . . x = call P 2(a 1, a 2); . . P 3 P 2(a 1, a 2) despachante empacota parâmetros desempacota parâmetros a 2 a 1 P 2 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 Referência Remota Camada de Transporte IP IP LAN ou WAN
Estrutura de um Orb Servidor Service Registry port Cliente 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. Big. Integer; public interface Fibonacci extends Remote { public Big. Integer get. Fibonacci (int n) throws Remote. Exception; public Big. Integer get. Fibonacci (Big. Integer n) throws Remote. Exception; }
Exemplo em RMI • Passo 2 – Implementar a Interface // Implementação da interface Fibonacci. java import java. rmi. *; import java. rmi. server. Unicast. Remote. Object; import java. math. Big. Integer; public class Fibonacci. Impl implements Fibonacci { public Fibonacci. Impl( ) throws Remote. Exception { Unicast. Remote. Object. export. Object(this); } public Big. Integer get. Fibonacci (int n) throws Remote. Exception {. . . return (retorno); } public Big. Integer get. Fibonacci (Big. Integer n) throws Remote. Exception {. . . return (retorno); } }
Exemplo em RMI • Passo 3 – Implementar o Servidor // Servidor que conterá o objeto da classe Fibonacci. Impl. java import java. net. *; import java. rmi. *; public class Fibonacci. Server { public static void main(String[] args) { try { Fibonacci. Impl f = new Fibonacci. Impl(); // instanciação do objeto remoto Naming. rebind("fibonacci", f); // registro do servidor System. out. println("Servidor Fibonacci pronto. "); } catch (Remote. Exception re) { System. out. println(" Exception in Fibonacci. Impl. main: " + re); } catch (Malformed. URLException e) { System. out. println(" URL mal formada" + e); } } }
Exemplo em RMI • Passo 4 – Gerar Stub e Skeleton da Interface Ø Ø • rmic Fibonacci. Impl Criação automática de Fibonacci. Impl_Skel. java e Fibonacci. Impl_Stub. java Passo 5 – Registrar e Disparar Servidor Ø Ø Ø rmiregistry (linux) start rmiregistry (windows) java Fiboncci. Server // 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. Big. Integer; public class Fibonacci. Client 2 { 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 Big. Integer index = new Big. Integer("3"); // número da série Big. Integer f = calculator. get. Fibonacci(index); // chamada de método em interface remota System. out. println(" O " + index + "-ésimo termo da série de Fibonacci é " + f); } catch(Malformed. URLException e) {. . . } catch(Remote. Exception re) {. . . } catch(Not. Bound. Exception e) {. . . } } }
- Slides: 28