Sistemas de Objetos Distribuídos Revisão Java e Java ORBs Francisco José da Silva e Silva Departamento de Informática da Universidade Federal do Maranhão Sistemas de Objetos DistribuídosRevisão Java e Java ORBs p.1/26
Contruções Básicas Sistemas de Objetos DistribuídosRevisão Java e Java ORBs p.2/26
Interfaces Interfaces Java são semelhantes a interfaces IDL Interfaces Java são implementadas por classes Java enquanto interfaces IDL podem ser implementadas por várias linguagens de programação Sistemas de Objetos DistribuídosRevisão Java e Java ORBs p.3/26
Herança de Classes Java suporta apenas herança simples para classes Motivo: evitar inconsistencias nas classes derivadas. Por exemplo, herança diamante: se as duas classes implementarem o método m() não é claro a qual classe base o método m() da classe derivada refere-se Outras linguagens como C++ e Eiffel permitem herança múltipla e possuem mecanismos através dos quais pode-se selecionar a implementação do método a ser utilizada class Derived extends Base {... } Sistemas de Objetos DistribuídosRevisão Java e Java ORBs p.4/26
Herança de Classes Sistemas de Objetos DistribuídosRevisão Java e Java ORBs p.5/26
Herança de Interfaces Declaração: extends Herda-se apenas definições e não código Interfaces podem herdar de várias interfaces Dado que não há herança de código, herança múltipla para interfaces não gera problemas IDL também permite herança múltipla de interfaces. O mapeamento para Java é bem natural A relação entre classes e interfaces é declarada com a palavra-chave implements Uma classe pode implementar mais de uma interface e ainda herdar de uma outra classe base Sistemas de Objetos DistribuídosRevisão Java e Java ORBs p.6/26
Herança de Interfaces interface Derived extends Left, Right {... } class Car extends Vehicle implements Observable, Derived {... } Sistemas de Objetos DistribuídosRevisão Java e Java ORBs p.7/26
Métodos e Excessões A semântica de passagem de parâmetros é passagem por valor O retorno de resultados é recebido: Como resultado do método Como campos de uma excessão. Neste caso, o receptor deve prover uma cláusula catch. Esta forma NÃO deve ser utilizada para retornar resultados regulares. O método chamado pode ter efeito nos parâmetros passados caso eles sejam referencias a um objeto Neste caso, dado que a referência denotará o mesmo objeto, a chamada de métodos nos objetos passados como parâmetro pode modificar o estado dos mesmos. Sistemas de Objetos DistribuídosRevisão Java e Java ORBs p.8/26
Definição Excessão class MyException extends Exception { public int value; } MyException (int i) { value = i; } Sistemas de Objetos DistribuídosRevisão Java e Java ORBs p.9/26
Disparo Excessão int MyMethod (boolean flag) throws MyException { if (flag) throw new MyException (1); else return 1; } Sistemas de Objetos DistribuídosRevisão Java e Java ORBs p.10/26
Pacotes Mecanismo para escopo de nomes que permite: agrupar um grupo de classes e interfaces relacionadas nomes iguais sejam utilizados em escopos diferentes, distiguindo-os através de qualificadores para os nomes declarados através da palavra-chave package o nome do pacote deve refletir o diretório onde os arquivos contendo o código fonte Java é localizado nomes de pacotes começam com letras minúsculas, enquanto classes com maiúsculas. Sistemas de Objetos DistribuídosRevisão Java e Java ORBs p.11/26
Pacotes // outerpackage/myclass.java: package outerpackage; public class MyClass { } // outerpackage/innerpackage/myclass.java: package outerpackage.innerpackage; public class MyClass { public outerpackage.myclass my_object1; public MyClass my_object2; } // outerpackage/innerpackage/myotherclass.java: package outerpackage.innerpackage; public class MyOtherClass { public MyClass my_other_object1; public outerpackage.innerpackage.myclass my_other_object2; } Sistemas de Objetos DistribuídosRevisão Java e Java ORBs p.12/26
Pacotes Disponibilizam um controle de acesso a interfaces e classes Se não fosse utilizado o modificador public na definição do campo MyOtherClass.my_other_object1, um código externo ao pacote não teria acesso a este campo Pode-se aninhar classes ou interfaces Sistemas de Objetos DistribuídosRevisão Java e Java ORBs p.13/26
Pacotes package outerpackage.innerpackage; public class Outer { public static class Inner {... } } Nome qualificado: outerpackage.innerpackage.outer.inner Sistemas de Objetos DistribuídosRevisão Java e Java ORBs p.14/26
Threads Java permite que objetos tenham sua própria thread de execução Isto é provido pelo pacote java.lang através da classe Thread Este pacete disponibiliza a interface Runnable que possui o método: public void run (); Java ORBs são tipicamente multithreaded. Sistemas de Objetos DistribuídosRevisão Java e Java ORBs p.15/26
Applets Objetos intanciados a partir de classes que extendem java.applet.applet As classes e interfaces do pacote java.applet permitem que o código da applet seja executado em browsers Web O código da applet é ancorado em documentos HTML Devido a estrutura de hierarquia de applets, uma applet contêm a base para uma GUI através da classe herdada java.awt.panel. Sistemas de Objetos DistribuídosRevisão Java e Java ORBs p.16/26
Applets Sistemas de Objetos DistribuídosRevisão Java e Java ORBs p.17/26
applet sandbox Limitaçãoes: 1. applets não podem acessar recursos locais, como o sistema de arquivos 2. applets não podem executar código nativo da máquina a não ser com permissão explícita de seu usuário 3. applets podem apenas estabelecer conexões sockets com a máquina da qual foram baixadas (verificação através de endereço IP). Sistemas de Objetos DistribuídosRevisão Java e Java ORBs p.18/26
Terminologia Java ORB Objeto: usamos o termo objeto CORBA quando a interface for definida em OMG IDL e objeto Java quando a interface for definida através de declarações Java Servente: um papel assumido por um objeto Java quando ele encarna um objeto CORBA. Cliente: papel assumido por um programa quando realiza invocações a um objeto CORBA. Servidor: papel desempenhado por um programa quando disponibiliza um objeto para acesso por um cliente. Sistemas de Objetos DistribuídosRevisão Java e Java ORBs p.19/26
lientes e Servidores como Aplicações Java Sistemas de Objetos DistribuídosRevisão Java e Java ORBs p.20/26
lientes e Servidores como Aplicações Java Sistemas de Objetos DistribuídosRevisão Java e Java ORBs p.21/26
Clientes como Applets Java Sistemas de Objetos DistribuídosRevisão Java e Java ORBs p.22/26
Clientes como Applets Java Sistemas de Objetos DistribuídosRevisão Java e Java ORBs p.23/26
Gateway IIOP Gateway: Contorna as limitações impostas pelo applet sandbox com relação ao acesso a servidores CORBA, restaurando o conceito de transparência de localização. Sistemas de Objetos DistribuídosRevisão Java e Java ORBs p.24/26
Servidores como Applets Java Sistemas de Objetos DistribuídosRevisão Java e Java ORBs p.25/26
Servidores como Applets Java Objetos não podem ser persistentes devido ao applet sandbox Clientes destes objetos devem utilizar o IIOP gateway a não ser que estejam localizados na máquina através da qual a applet foi baixada Sistemas de Objetos DistribuídosRevisão Java e Java ORBs p.26/26