I-D-L Interface Definition Language Elaboré par Elaboré par : Mohamed Moncef SAAFI Sofien SAGHROUNI Mondher MOULAHI Marwen BALLOUMI LFSi-3
Plan Introduction Définition de IDL Règles Modules Interfaces Déclaration Exception
Introduction Le client et le serveur ont besoin d'informations pour pouvoir travailler sur les mêmes objets. Par exemple, chaque objet doit annoncer les opérations que l'on peut effectuer sur lui. CORBA dispose ces informations dans une interface qui définit les caractéristiques et les comportement de chaque type d'objet, y compris les opérations qu'un serveur peut exécuter sur ces objets. Pour définir une interface, on utilise l' IDL pour coder l'information dans un jeu de définitions d'interfaces. Les développeurs entreposent ces définitions d'interfaces dans des fichiers IDL.
Définition de IDL Ainsi avant d'écrire une application cliente ou serveur, on doit d'abord définir son ou ses interface(s), c'est à dire créer un fichier IDL. C'est ce fichier qui contient les définitions des interfaces que le client ou le serveur supporte. L'IDL est un langage de définition et non un langage de programmation grâce auquel on définit des interfaces et des structures de données et non des algorithmes. On utilise des fichiers IDL pour générer un code source pour le langage de programmation désiré. On peut donc, par exemple, écrire des applications clientes en LISP et des applications serveurs en C et faire communiquer ce client et ce serveur.
- 5 - Le contrat IDL IDL Bus CORBA Squelette IDL Stub IDL Fournisseur d ’objets Client d ’objets Le Langage IDL Un « esperanto » pour les objets Objets Corba
Le Langage IDL Interface Definition Language langage de spécification d’interfaces, supportant l’héritage multiple; indépendant de tout langage de programmation ou compilateur (langage pivot entre applications); langage utilisé pour générer les stubs, les squelettes et pour définir les interfaces du Référentiel d’interface; la correspondance IDL-langage de programmation est fournie pour les langages C, C++, Java, Smalltalk, Ada, Cobol.
- 7 - Projection vers un langage de programmation Stubs Definitions IDL Précompilateur IDL Objet implementation Methodes Squelettes Client Serveur Adaptateur d'objet Noyau ORB C++ Java
Les Règles CORBA définit les règles de correspondance de l’IDL vers les langages cibles (mapping). Mapping normalisé pour C, C++, Ada, Smalltalk, COBOL, Java. Ce qui est défini en IDL : Des modules. Unités de structuration (opérateur de portée ::). Des constantes. Des interfaces. Des opérations. Des types construits à partir de types simples prédéfinis. Des exceptions utilisateurs. Les objets peuvent lever des exceptions et retourner des informations.
Déclaration de module module { }
Déclaration d’interface interface [:inheritance] { }
Un exemple de définition d'interface module Animals { // Interface for a dog interface Dog : Animal { // a public attribute attribute integer age; // an exception that can be raised exception notInterested (string why);
Un exemple de définition d'interface // public methods void Bark (in short duration) raises (notInterested) ; void Sit (in string local) raises (notInterested) ; void Play (in Dog friend) raises (notInterested) ; boolean Alive () ; }
Exemple interface account { readonly attribute float balance; attribute string description; void credit (in float f); void debit (in float f); }; interface currentAccount : account { readonly attribute float overdraftLimit; }; interface bank { exception reject {string reason;}; account newAccount (in string name) raises (reject); currentAccount newCurrentAccount (in string name, in float limit) raises (reject); void deleteAccount (in account a); }; interface attribut opérations exception opérations
module Escola { interface Curso; // declarado, mas não definido interface Estudante { attribute string nome; attribute unsigned long matricula; exception ClasseLotada; void registra (in Curso curso) raises (ClasseLotada); exception ReqIncompleto; void gradua ( ) raises (ReqIncompleto); typedef sequence ListaCursos; ListaCursos cursos_registrados(); } Exemples
Types de données IDL Types de base short long float boolean... Types dérivés using the typedef keyword Types structurés enum struct union array Types variables: dynamic arrays, string
Types de données IDL Types de base et constantes Integer: [ unsigned ] short long Reals: float double 8 bits: char octet boolean Generic: any const double Pi = ; const string Msg = “This is a message” ; const unsigned long Mask =(1<<5)|(1<<7) ;
Types de données IDL Types structurés enum CreditCard {Master, Visa, none}; struct PersonRecord { string name ; short age ; } union Customer switch (CreditCard) { case Master: string cardNumber ;... }
Types de données IDL Types Variables // arrays typedef long longVect [30]; typedef long longArray [2][10]; // sequences typedef sequence shortSeq; typedef sequence shortSeq20; // strings typedef string boundedString;
Déclaration de méthode ( ) [raises ] [context] ; Les paramètres de méthode peuvent être: in :sent to the server (envoyé au serveur) out :received from the server (reçu du serveur) inout :both directions (les deux directions)
Déclaration d'attribut attribute string name ; readonly attribute short age ; Les Attributs: sont déclarés comme variables les méthodes get et set sont fournies
Les Exceptions Une méthode de l'application du serveur peut fournir l'information sur l'exception s'il y a une erreur ou par exemple s'il n'y a pas assez d'arguments dans la requête. Le broker lui-même peut le faire si par exemple l'accès d'un serveur lui est interdit. L'application client peut lire mais ne peut pas modifier une exception. Par défaut, s'il n'y a pas de retour d'exception, l'opération est considérée comme réussie. Par contre s'il y en a une, l'application cliente doit vérifier si l'opération est réussie ou non.
Conclusion CORBA : ça marche et c’est simple Choisir son langage d’implantation C++ : complexe et moins portable Java : portable et plus lent Choisir son bus 1 bus = 1 bibliothèque mixer les bus : c’est possible