Вы находитесь на странице: 1из 18

OMG IDL (Interface Definition Language)

Sistemas Distribuidos: Programacin con CORBA


Juan Pavn Mestras Dep. Sistemas Informticos y Programacin Universidad Complutense Madrid

Facultad de Informtica, curso 2000-01

Descripcin de interfaces con IDL


n

Una especificacin IDL es un contrato entre cliente y servidor:


n n

IDL especifica la sintaxis de las interfaces La semntica se puede expresar como comentarios

IDL es independiente de lenguajes de programacin y sistemas operativos


n

La correspondencia de IDL a Java o C++ la realiza el compilador Declaraciones de mdulos Declaraciones de interfaces
Soporta herencia Declaraciones de operaciones y atributos

Una especificacin en IDL comprende:


n n

Declaraciones de tipos de datos, constantes y excepciones


Necesarios para definir las operaciones y atributos

y tambin soporta las caractersticas de preproceso de C++


IDL 2

Juan Pavn Mestras, UCM 2000-01

Componentes del lenguaje IDL


n

Identificadores
miObjeto y MIOBJETO son identificadores distintos pero no pueden usarse en la misma declaracin de interfaz

Comentarios
// esto puede ser un comentario hasta el final de la lnea /* y esto se puede poner como comentario en cualquier parte e incluso ocupando varias lneas */

n n n n

Mdulos Tipos primitivos Tipos construidos Interfaces


n n

Operaciones Atributos
IDL 3

Directivas de preproceso ANSI C++

Juan Pavn Mestras, UCM 2000-01

Mdulos
n

Permite agrupar varias definiciones IDL que comparten un mismo propsito


n

Un mdulo (module) define un mbito de nombrado


module Banca { interface CuentaCorriente { /* ... */ } interface Banco { /* ... */ } }

Para referirse a un identificador de otro mdulo, se usa el operador ::


Banca::CuentaCorriente

n n

En Java se corresponde con un package y en C++ con un namespace Los mdulos se pueden reabrir
n

Esto permite mantener su definicin en mltiples ficheros


IDL 4

Juan Pavn Mestras, UCM 2000-01

Tipos de variables
n

Primitivos
n

Construidos
n n n n n n n

Entero:
short, long, long long signed & unsigned

Coma flotante:
float, double, long double, fixed

n n

char, wchar, boolean, octet Any Referencia a objeto CORBA

struct union enum sequence string, wstring array typedef

Juan Pavn Mestras, UCM 2000-01

IDL

Tipos primitivos
n n n n n n n n n n n n n

void para mtodos que no devuelven ningn valor boolean TRUE o FALSE char y wchar un carcter guardado en 8 o 16 bits short -215..215-1 (16 bits) unsigned short 0..216-1 (16 bits) long -231..231-1 (32 bits) unsigned long 0..232-1 (32 bits) long long -263..263-1 (64 bits) unsigned long long 0.. 264-1 (64 bits) float nmero de coma flotante de precisin simple (IEEE) double nmero de coma flotante de precisin doble (IEEE) octet grupo de 8 bits que se transmiten tal cual any valor de cualquier tipo IDL

Juan Pavn Mestras, UCM 2000-01

IDL

Any
n

any
n

Sirve para especificar que un parmetro puede ser de cualquier tipo El proceso que recibe un any debe determinar qu tipo de valor tiene y extraer ese valor
El pseudo-tipo TypeCode permite determinar el tipo que representa

Hay que utilizar el tipo any con precaucin porque hace las interfaces ms difciles de entender y no deja claro qu tipos se pasan
inteface ejemploAny { void operacion (in any a); };

Juan Pavn Mestras, UCM 2000-01

IDL

Tipo string
n

El tipo string en IDL representa una cadena de caracteres


n n

De tipo char: string De tipo wchar: wstring

Si se quiere limitar la longitud de un string, se puede indicndola entre < y >


typedef string nombre; typedef string<5> codigo_postal; typedef wstring cadenaUnicode;

Juan Pavn Mestras, UCM 2000-01

IDL

Tipos construidos
n

enum
n

Define un nuevo tipo con un conjunto de valores definidos por el usuario

enum Lenguaje {Java, C, Smalltalk, Cobol, Perl}; enum Dia {lunes, martes, miercoles, jueves, viernes, sabado, domingo}; enum Color {rojo, amarillo, verde, azul, blanco, negro, gris};

Juan Pavn Mestras, UCM 2000-01

IDL

Tipos construidos
n

struct
n

Empaqueta un conjunto de miembros nombrados de varios tipos

struct structsistema sistema{{ string string nombre; nombre; Lenguaje Lenguajeprogramacion; programacion; short nro_usuarios; short nro_usuarios; }; };

Juan Pavn Mestras, UCM 2000-01

IDL

10

Tipos construidos
n

union
n

Estructura que contiene un solo miembro de entre varias alternativas

union compilador switch (Lenguaje) { case Java: string versionstring; default: long versionlong; };

Juan Pavn Mestras, UCM 2000-01

IDL

11

Tipos contenedores
n

sequence
n n

n n

Representa una secuencia de datos de un mismo tipo Puede ser limitada a una longitud mxima o ilimitada (opcin por defecto) Una secuencia puede estar vaca Tienen que definirse con typedef o dentro de un struct
typedef sequence<Banco> bancos; // secuencia ilimitada typedef sequence<long,3> numeros; // secuencia limitada de 3 long struct contribuyente { string sequence<string, 2> }

nombre; apellidos;
IDL 12

Juan Pavn Mestras, UCM 2000-01

Tipos contenedores
n

array
n

Representa un array de una o ms dimensiones de tamao fijo


Para varias dimensiones se usa la sintaxis [m][n] Siempre hay que especificar todas las dimensiones del array Tiene que definirse en un typedef

typedef Banco arrayDeBancos[10]; typedef long matriz[6][8];

Juan Pavn Mestras, UCM 2000-01

IDL

13

Tipos contenedores
n

Comparacin entre array y sequence


n

n n n

En un array se transmiten todos sus elementos en cada llamada a operacin Un array es siempre de longitud fija, una secuencia puede variar de tamao (ms o menos) Un array no puede ser ilimitado, una secuencia s Una secuencia puede no tener ningn elemento, un array no Un array puede ser multidimensional, las secuencias no (pero puede haber secuencias de secuencias)

Juan Pavn Mestras, UCM 2000-01

IDL

14

Tipos contenedores
n

Cundo usar array o sequence


n

En general, si el nmero de los elementos puede variar, usar un sequence Si se tiene una coleccin de elementos y su nmero siempre es el mismo, usar un array Se pueden utilizar arrays de char para tratar strings de longitud fija
Ejemplo: typedef char CodigoPostal[5];

Con las secuencias es ms fcil definir estructuras de datos recursivas


Ejemplo: struct NodoArbol { Any contenido; sequence<NodoArbol> hijos; };
IDL 15

Juan Pavn Mestras, UCM 2000-01

typedef
n

Para dar un nombre ms significativo a un tipo dado


n

Tambin para permitir la definicin de nuevos tipos con sequence y array Ejemplos:
typedef string identificador; typedef sequence<long> numeros; typedef Banco BancoNacional;

Juan Pavn Mestras, UCM 2000-01

IDL

16

Interfaz
n

Interfaz
n n n

Grupo de operaciones y atributos Unidad de herencia Un objeto implementa una o ms interfaces Requiere:
Valor de retorno Nombre de operacin Lista de parmetros (in, out, inout)

Operacin
n

Opcional:
Excepciones Declaracin oneway

Atributo
n n

Define el acceso a un valor para leerlo o modificarlo Si solo se puede acceder al valor en lectura: readonly
IDL 17

Juan Pavn Mestras, UCM 2000-01

Interfaz
module Ejemplo { typedef long entero; interface primero { struct identificacion { string nombre; sequence< string, 2> apellidos; }; readonly attribute identificacion persona; void operacion1 (in entero cuenta); }; interface segundo { primero crea (in long long numero, out string id); }; };
Juan Pavn Mestras, UCM 2000-01 IDL 18

Interfaz
Herencia de Interfaces
n

Permite obtener una nueva interfaz a partir de una o ms interfaces existentes


n n

Soporta herencia mltiple Todas las interfaces heredan de CORBA::Object


Cualquier tipo de interface se puede pasar como de tipo Object

Se pueden aadir nuevos elementos


n n

Constantes, tipos, atributos y operaciones Restricciones:


No se pueden redefinir las operaciones heredadas No puede haber nuevas operaciones con el mismo nombre de las ya existentes (IDL no soporta sobrecarga de operadores)

interface madre: progenitor, mujer { boolean noHayMasQueUna (); };


Juan Pavn Mestras, UCM 2000-01 IDL 19

Operacin
n

Las operaciones de una interfaz definen la funcionalidad del objeto Sintaxis:


[oneway] tipo_retorno nombre_operacin ( dir_param1 tipo_param1, nombre_param1, dir_param2 tipo_param2, nombre_param2, ...) [raises (excepcin, excepcin2, ...)] ;

interface Cuenta { exception SaldoInsuficiente { float balance; } ; void ingreso(in float cantidad); void reintegro(in float cantidad) raises (SaldoInsuficiente); };
Juan Pavn Mestras, UCM 2000-01 IDL 20

10

Operacin
n

La direccin de cada parmetro puede ser:


n

in
permite que el cliente pueda pasar una copia de un valor inicializado al servidor el servidor no puede modificar la copia del cliente

out
permite que el cliente pueda pasar una referencia de un valor sin inicializar al servidor el servidor inicializar ese valor y se modificar el valor de la variable del cliente

inout
permite que el cliente pueda pasar una referencia de un valor sin inicializar al servidor el servidor puede usar esta referencia para acceder al valor inicial y modificarlo

El valor de retorno
permite que el cliente reciba una copia de un valor inicializado
IDL 21

Juan Pavn Mestras, UCM 2000-01

Operacin oneway
n

El modo de comunicacin puede ser:


n

sncrono (o bloqueante): es el modo por defecto


el cliente se queda bloqueado hasta recibir confirmacin de la terminacin o no terminacin de la operacin

oneway (no bloqueante)


el cliente invoca la operacin y sigue su ejecucin no se espera ninguna respuesta ni confirmacin sobre la realizacin de la operacin no devuelve ningn valor (se debe declarar como void) no puede tener parmetros out o inout no puede tener clusula raises oneway void notificacion (in string suceso);

Juan Pavn Mestras, UCM 2000-01

IDL

22

11

Operacin oneway
Cliente invocacin se bloquea return contina procesa operacin no se bloquea Servidor Cliente Servidor

invocacin oneway

inicia operacin acaba operacin

operacin sncrona (normal)


Juan Pavn Mestras, UCM 2000-01 IDL

operacin oneway
23

Referencias a objetos
n

Paso de referencias a objetos


n

CORBA tambin permite que se pasen referencias a objetos La referencia a un objeto se declara como del tipo de la interfaz Se pasa una copia de la referencia de tal manera que el cliente puede manipular la implementacin de la interfaz remotamente Widening: se trata un objeto de una clase derivada como de la clase base
Mecanismo estndar de la orientacin a objetos como parmetros como valor de retorno

n n

Es posible el widening y narrowing de referencias a objetos


n

Narrowing: a partir de un objeto declarado como de una clase base se obtiene uno de clase derivada:
Usando el mtodo narrow() de la clase Helper (en Java)

Tambin se soporta el polimorfismo con referencias a objetos


n

Los clientes que tengan referencias a una interfaz base pueden invocarlas en interfaces derivados
IDL 24

Juan Pavn Mestras, UCM 2000-01

12

Referencias a objetos
interface Cuenta { //... }; interface CuentaCredito: Cuenta { // ... }; interface Banco { // ... Cuenta abrirCuenta(string cliente); CuentaCredito abrirCuentaCredito (in string cliente, in float credito); void cerrarCuenta( in Cuenta c) raises (CuentaInexistente); };
se pueden pasar objetos Cuenta o CuentaCredito
Juan Pavn Mestras, UCM 2000-01 IDL 25

Referencias a objetos
Cuenta cuentaRef = ...; // obtiene una referencia a un objeto Cuenta CuentaCredito creditoRef = ...; // obtiene una referencia a un objeto CuentaCredito cuentaRef = creditoRef; // correcto: widening normal en OO creditoRef = cuentaRef; // ilegal creditoRef = (CuentaCredito)cuentaRef; // legal slo si cuentaRef es una // CuentaCredito o uno de sus tipos derivados // Mejor hacer esto: try { cuentaRef = CuentaHelper.narrow(otraRef); // devuelve nil si otraRef no es // una referencia a un objeto de tipo Cuenta o derivado } catch (SystemException e) { /* ... */ }

Juan Pavn Mestras, UCM 2000-01

IDL

26

13

Atributos
n n n

Un atributo define un valor de un tipo IDL accesible en la interfaz Sintaxis:


[readonly] attribute tipo_de_atributo nombre_de_atributo ;

En general se corresponde a dos operaciones:


1) tipo_de_atributo getNombre_de_atributo(); 2) void setNombre_de_atributo(in tipo_de_atributo nuevo_valor);

Los atributos readonly slo pueden consultarse, no modificarse


n

Slo se corresponden a la primera operacin interface Cuenta { attribute string cliente; readonly attribute float balance; };

Juan Pavn Mestras, UCM 2000-01

IDL

27

Declaraciones adelantadas
n n

En IDL las definiciones pueden aparecer en cualquier orden pero respetando el principio definir antes de usar A veces una interfaz tiene que referenciar a otra
n n

Una operacin que referencia a la otra interfaz en un parmetro o el tipo de retorno Un atributo del tipo de la otra interfaz

Tambin puede ocurrir que la otra interfaz referencia a la primera


n

Se produce una referencia circular: module EjemploDeclaracionCircular { interface hombre { mujer conyuge(); }; interface mujer { hombre conyuge(); }; };
IDL

Juan Pavn Mestras, UCM 2000-01

28

14

Declaraciones adelantadas
n

La solucin:
module EjemploDeclaracionCircular { interface mujer; // referencia adelantada interface hombre { mujer conyuge(); }; interface mujer { hombre conyuge(); }; };

Juan Pavn Mestras, UCM 2000-01

IDL

29

Excepciones
n n

Excepciones estndar de CORBA


n

Puede ser lanzada al invocar cualquier operacin o atributo Pueden tener campos como los struct Una operacin puede declarar que lanza ms de una excepcin exception CuentaInexistente {}; exception SaldoInsuficiente { double saldoActual; }; void reintegro (in string cuenta, in double cantidad) raises (NombreInexistente, SaldoInsuficiente);

Excepciones definidas por el usuario


n n

Juan Pavn Mestras, UCM 2000-01

IDL

30

15

Excepciones
n

Cundo definir excepciones de usuario


n n

Tener en cuenta que las excepciones rompen el flujo de control normal del programa Para reflejar situaciones en las que la operacin no puede concluir de forma normal
Por ejemplo, aunque al solicitar los elementos que cumplen una condicin se devuelva una secuencia vaca, no es necesaria la excepcin si la operacin se pudo realizar normalmente

Aadir informacin til en las excepciones


No es necesario devolver un campo de la excepcin con el valor incorrecto de un parmetro, pero s con el valor lmite posible

Una excepcin para cada condicin de fallo


El cliente debe saber la razn exacta por la que ocurri el fallo No es bueno definir una excepcin general que cubra muchos casos

Juan Pavn Mestras, UCM 2000-01

IDL

31

Constantes
n

Valores de datos constantes en varios tipos bsicos:


n

Enteros
const long MAXIMO = 10000, MINIMO = 0, MEDIO = (MAXIMO+MINIMO)/2;

Coma flotante
const float PI = 3.14159;

String
const string SALUDO = Hola;

Carcter
const char PRIMERA_LETRA = a;

Booleano
const boolean VERDADERO = TRUE;

o de un enumerado:
const Color PREFERIDO = rojo;
IDL 32

Juan Pavn Mestras, UCM 2000-01

16

Ejemplo de especificacin IDL


module Banca { interface Cuenta { exception SaldoInsuficiente { float balance; }; readonly attribute float balance; void ingreso(in float suma); void reintegro(in float suma) raises (SaldoInsuficiente); }; interface CuentaCredito : Cuenta { readonly attribute float credito; }; interface Banco { exception Rechazada { string causa; }; exception CuentaInexistente { }; Cuenta abrirCuenta (in string cliente) raises (Rechazada); CuentaCredito abrirCuentaCredito (in string cliente, in float credito ) raises (Rechazada); void cerrarCuenta(in Cuenta c) raises (CuentaInexistente); }; };
Juan Pavn Mestras, UCM 2000-01 IDL 33

Pseudo-objetos CORBA
n

Los pseudo-objetos son objetos proporcionados por el ORB, que estn especificados en IDL, pero:
n n

No estn representados en el Repositorio de Interfaces Se corresponden a una clase abstracta que no extiende ni hereda de otras clases o interfaces. CORBA::ORB CORBA::Object CORBA::Request CORBA::TypeCode CORBA::TCKind ... interfaz del ORB raz de todas las interfaces IDL objeto de invocacin de operacin representacin de un tipo

Algunos pseudo-objects bastante utilizados:


n n n n n n

En Java todos ellos tienen la clase correspondiente, dentro del paquete org.omg.CORBA en Java, o en orb.idl si se usa C++
IDL 34

Juan Pavn Mestras, UCM 2000-01

17

Directivas de preproceso
n

IDL acepta las directivas de preproceso de ANSI C++


#include #define, #undef #if, #ifdef, #ifndef, #else, #elif, #endif #defined #error #pragma #ifndef _AlgunNombreUnico #define _AlgunNombreUnico #include <fichero.idl> // ... #endif

Juan Pavn Mestras, UCM 2000-01

IDL

35

Resumen
n n n n

IDL permite definir las interfaces de los objetos CORBA Los mdulos permiten agrupar definiciones de interfaces y tipos de datos Para cada interfaz se definen un conjunto de operaciones Para cada operacin es necesario determinar los tipos de sus parmetros y su direccin (in, out, inout), y posibles excepciones de usuario En general, la sintaxis de IDL es similar a la que se utiliza en otros lenguajes como Java y C++
IDL 36

Juan Pavn Mestras, UCM 2000-01

18

Вам также может понравиться