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++.
L'interface est un objet avec ses "propriétés" et ses "méthodes".
Pour la définir IDL utilise plusieurs types:
- les types de bases ( long, float...)
- les structures
- les modules
- les types séquentiels ( tableaux, types énumérés)
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 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 |
IDL permet la récursivité dans la définition d'une structure:
//IDL
struct Person {
readonly attribute float height;
readonly attribute Person spouse;
};
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 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;
};
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;
};