IDL ( Interface Definition Language )


Introduction

IDL définit les frontières d'un composant ainsi que ses interfaces avec des clients potentiels.C'est un langage de description ( des interfaces ) et non un langage de programmation.Le mapping est l'opération qui consiste à traduire les spécifications IDL dans des langages de programmation comme Java ou C++.

Définition d'une interface

L'interface est un objet avec ses "propriétés" et ses "méthodes".
Pour la définir IDL utilise plusieurs types:

Voici un exemple de définition de l'interface "FrontOffice":
Les mots in et out indiquent si les variables sont reçues ou envoyées et permettent d'allouer de la mémoire si nécessaire.
On note un mélange de propriétés ( name,lastRow) et de méthodes ( checkOpen, getPrice). Une variable ou une méthode est précédé par son type.
L'instruction readonly interdit la mise à jour de la variable.

//IDL
interface FrontOffice{
readonly attribute string name;
readonly attribute char lastRow;
boolean checkOpen ( in Date when, out Date nextAvailableDate);
Price getPrice ( in Place Placewhere, in Date when);
};

Les types de bases

Les types de bases sont normalisés afin d'avoir une définition commune utilisable dans les dialogues et cela quel que soit le type de machine ou le système d'exploitation.

float nombre à virgule flottante simple précision IEEE
double nombre à virgule flottante double précision IEEE
long -2^31....2^31 - 1 (32 bits)
short -2^15....2^15 - 1 (16 bits)
..... ......
any n'importe quel type IDL

Les structures

IDL permet la récursivité dans la définition d'une structure:

//IDL
struct Person {
readonly attribute float height;
readonly attribute Person spouse;
};

Les modules

Une méthode a un type et des arguments eux aussi typés dont on précise le sens avec in et out.Une méthode qui se déroule mal peut lever une exception; on le précise a l'aide du terme raises.

//IDL
interface FrontOffice{
exception NoSuchPlace{
Place where;
};
exception InvalidDate{
Date when
};
Places getPrice ( in Place chosenPlace,in Date when )
raises (NoSuchPlace,InvalidDate);
};

Les types séquentiels

Les tableux:

//IDL
// Tableau à une dimension
typedef Booking Booking[100];
// Tableau à deux dimensions
typedef Place BlockOfPlaces[20][30];

Le type énuméré:

//IDL
enum seatQuality (high,medium,low);

Le type union qui permet en fonction d'un paramètre de changer la définition d'une variable:

union Tokenswitch(long){
case 1 : long f;
case 2 : float f;
default : string str;
};

Héritage

Comme tout langage objet, IDL permet l'héritage et même l'héritage multiple ( une interface hérite de plusieurs interfaces).
Ici GroupBooking hérite de Booking.

//IDL
interface Booking{
readonly attribute Date when;
readonly attribute Places seats;
void cancel();
};
interface GroupBooking : Booking{
readonly attribute string organizer;
readonly attribute string groupName;
};