Академический Документы
Профессиональный Документы
Культура Документы
IDL especifica la sintaxis de las interfaces La semntica se puede expresar como comentarios
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
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
Operaciones Atributos
IDL 3
Mdulos
n
n n
En Java se corresponde con un package y en C++ con un namespace Los mdulos se pueden reabrir
n
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
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
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); };
IDL
Tipo string
n
IDL
Tipos construidos
n
enum
n
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};
IDL
Tipos construidos
n
struct
n
struct structsistema sistema{{ string string nombre; nombre; Lenguaje Lenguajeprogramacion; programacion; short nro_usuarios; short nro_usuarios; }; };
IDL
10
Tipos construidos
n
union
n
union compilador switch (Lenguaje) { case Java: string versionstring; default: long versionlong; };
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
Tipos contenedores
n
array
n
IDL
13
Tipos contenedores
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)
IDL
14
Tipos contenedores
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];
typedef
n
Tambin para permitir la definicin de nuevos tipos con sequence y array Ejemplos:
typedef string identificador; typedef sequence<long> numeros; typedef Banco BancoNacional;
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
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
Operacin
n
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
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
Operacin oneway
n
IDL
22
11
Operacin oneway
Cliente invocacin se bloquea return contina procesa operacin no se bloquea Servidor Cliente Servidor
invocacin oneway
operacin oneway
23
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
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)
Los clientes que tengan referencias a una interfaz base pueden invocarlas en interfaces derivados
IDL 24
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) { /* ... */ }
IDL
26
13
Atributos
n n n
Slo se corresponden a la primera operacin interface Cuenta { attribute string cliente; readonly attribute float balance; };
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
Se produce una referencia circular: module EjemploDeclaracionCircular { interface hombre { mujer conyuge(); }; interface mujer { hombre conyuge(); }; };
IDL
28
14
Declaraciones adelantadas
n
La solucin:
module EjemploDeclaracionCircular { interface mujer; // referencia adelantada interface hombre { mujer conyuge(); }; interface mujer { hombre conyuge(); }; };
IDL
29
Excepciones
n 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);
IDL
30
15
Excepciones
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
IDL
31
Constantes
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
16
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
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
17
Directivas de preproceso
n
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
18