Vai alla Home Page About me Courseware Federica Living Library Federica Federica Podstudio Virtual Campus 3D Le Miniguide all'orientamento Gli eBook di Federica La Corte in Rete
 
 
Il Corso Le lezioni del Corso La Cattedra
 
Materiali di approfondimento Risorse Web Il Podcast di questa lezione

Stefano Russo » 22.Regole di traduzione da IDL a Java


Regole di traduzione – generalità

Definite da standard OMG per C++, COBOL, Java.
Necessarie per costruire compilatori IDL, ma …
… il programmatore applicativo deve conoscerle, relativamente ad aspetti quali:

  • le eventuali restrizioni sull’uso di nomi nella programmazione nel linguaggio scelto;
  • la corrispondenza tra i tipi di dato IDL e quelli del linguaggio di programmazione scelto;
  • le modalità per lo scambio dei parametri;
  • la struttura del codice generato dalla compilazione IDL, e l’organizzazione dei relativi file sorgente.

Regole di traduzione da IDL a Java

Criteri generali della traduzione da IDL a Java

  • Un modulo IDL viene tradotto in un package Java;
  • un’interfaccia IDL viene tradotta in un’interfaccia public Java;
  • una gerarchia di interfacce IDL si traduce in una gerarchia di interfacce Java;
  • gli attributi di un’interfaccia IDL sono tradotti in una coppia di metodi Java per leggerne e modificarne il valore;
  • le operazioni di un’interfaccia IDL sono tradotte in corrispondenti metodi Java;
  • i parametri di out e inout di un’operazione IDL richiedono la generazione di un’apposita classe contenitore (holder class).

Identificatori riservati

Per ogni tipo primitivo tipoT del linguaggio IDL, sono riservati gli identificatori TipoTHolder e TipoTHelper, con la particolarità dunque che l’iniziale del nome del tipo viene convertita in maiuscolo. Per esempio, l’identificatore StringHolder relativo al tipo IDL string è riservato.

Per ogni tipo d’utente T definito in una specifica IDL, sono riservati gli identificatori THolder e THelper.

Per ogni interfaccia I definita in una specifica IDL, sono riservati gli identificatori IOperations, IPOA, IPOATie e IPackage.

Gli identificatori di attributi e operazioni che collidono con i nomi dei metodi dichiarati nel classe di libreria Java java.lang.Object.

Sono riservati gli identificatori che collidono con le parole chiave Java.

Traduzione delle interfacce IDL

Un’interfaccia IDL I viene tradotta in una coppia di interfacce Java:

  • un’interfaccia IOperations, contenente le rappresentazioni Java di attributi e operazioni, necessaria per la programmazione lato servente;
  • un’interfaccia I, che estende IOperations, utilizzata per la programmazione lato cliente.

Traduzione delle interfacce IDL

Vengono inoltre generate:

  • una classe Java _IStub (stub lato cliente);
  • una classe astratta Java IPOA (skeleton lato servente);
  • una classe IPOATie, derivata dallo skeleton IPOA, utilizzata nell’approccio per delega (Tie approach) nella programmazione lato servente;
  • una classe IHelper, contenente un insieme di metodi pubblici statici: in aggiunta ai metodi di ogni classe Helper che realizzano le operazioni di marshalling e unmarshalling di oggetti di tipo I, è definito il metodo narrow(), che serve a convertire un riferimento a un oggetto remoto in un riferimento a un oggetto che implementa l’interfaccia I. Tale operazione, detta narrowing del riferimento, serve a creare un’istanza dello stub _IStub;
  • una classe contenitore IHolder.

Traduzione degli attributi IDL

Per ogni dichiarazione IDL:

attribute T x;

vengono generati i seguenti metodi dell’interfaccia Java IOperations:

  • T x(), per la lettura del valore;
  • void x (T v), per l’assegnazione del valore v a x.

Traduzione delle operazioni IDL

Ogni operazione IDL definita in un’interfaccia I viene tradotta in un metodo omonimo dell’interfaccia Java IOperations.

Il corpo di tali metodi va implementato dal programmatore della classe servente.

Java non consente di definire classi in un’interfaccia.

Nomi di tipo (struct, exceptions, …) definiti in un’interfaccia IDL I diventano classi, inserite in un package denominato IPackage.

Traduzione dei moduli IDL

Un modulo IDL viene tradotto in un package Java.

Le dichiarazioni nel modulo sono inserite nel package.

Moduli nidificati sono tradotti in gerarchie di package.

Esempio:

// IDL – gerarchia di moduli

module org {

module omg {

module CORBA { … };
… };

};

package org.omg.CORBA;

Corrispondenza tipi IDL – tipi Java


Traduzione delle eccezioni

Le eccezioni d’utente diventano classi Java

Sottoclassi della classe di libreria CORBA org.omg.CORBA.UserException.

Una variabile membro per ciascun campo della exception.

Devono essere gestite dal programmatore in blocchi try – catch.

Le eccezioni di sistema sono sottoclassi della classe di libreria Java java.lang.RuntimeException.

La gestione può essere demandata alla piattaforma Java.

Traduzione delle eccezioni


Traduzione di valuetype

Una dichiarazione valuetype IDL viene tradotta in Java in una omonima classe astratta pubblica, contenente:

  • variabili membro, corrispondenti alle variabili di stato del valuetype;
  • metodi _read() e _write(), utilizzati nelle operazioni di marshalling e unmarshalling dello stato;
  • un metodo di lettura e uno di assegnazione per ciascun attributo del valuetype;
  • metodi pubblici, corrispondenti alle operazioni del valuetype.
  • Contenuti protetti da Creative Commons
  • Feed RSS
  • Condividi su FriendFeed
  • Condividi su Facebook
  • Segnala su Twitter
  • Condividi su LinkedIn
Progetto "Campus Virtuale" dell'Università degli Studi di Napoli Federico II, realizzato con il cofinanziamento dell'Unione europea. Asse V - Società dell'informazione - Obiettivo Operativo 5.1 e-Government ed e-Inclusion