Présentation des technologies Mozilla

En savoir plus

 

 

 

 

 

Dans l'exemple, Peugeot, Renault ou Porsche vont implémenter une voiture : ils vont ajouter des attributs (roues, volant, moteur…) et des actions seront possibles sur cette voiture (rouler, tourner, accélérer…). Pour utiliser la voiture, je n'ai pas forcément besoin de savoir comment elle est implémentée… ou plus prosaïquement être mécanicien.

Voyons pour les plus curieux comment cela est possible. Tout d'abord, il faut assimiler la conception de Composants et d'Interfaces.

Une interface est la partie publique du composant : elle présente ce que le composant contient et peut faire. Il s'agit ni plus ni moins de sa description. Cela s'intègre complètement dans la logique objet. Par exemple, je suis une voiture, j'ai une couleur, une taille, un moteur (attributs) et je sais rouler, freiner, tourner (méthodes). Cette description est écrite dans le langage de description IDL (Interface Description Language4), utilisé entre autres avec le langage CORBA. Son unique but est de décrire une interface.

Concernant maintenant l'implémentation, on peut la faire dans plusieurs langages (C, C++, Javascript, Python). Le compilateur "xpidl" nous facilite cette tâche en nous fournissant tous les fichiers nécessaires depuis un fichier IDL : il n'y a plus qu'à écrire le code qui implémente les fonctionnalités décrites.

Pour que tous ces composants puissent fonctionner sur toutes les plate-formes, Mozilla a défini des types de variables au niveau IDL, et a implémenté un moteur comprenant l'implémentation de ces types pour chaque architecture et chaque langage. L'avantage est qu'une variable de type entier en C++ pourra être passée dans la couche XPCOM et sera comprise comme un type entier Python.

Exemple : voici la description de l'interface « nsIToolbar » qui permet de créer une barre d'outils. On découvre que les composants qui l'implémentent peuvent ajouter et récupérer des éléments dans cette barre :

interface nsIToolbar : nsISupports {
 readonly attribute boolean visible;
 attribute int margin;
 attribute boolean horizontalLayout;
 attribute boolean lastItemIsRightJustified;
 attribute boolean wrapping;

 void AddItem(in nsIToolbarItem anItem, 
  in int aLeftGap,in boolean stretchable);
 void InsertItemAt(in nsIToolbarItem anItem, 
  in int aLeftGap, in boolean aStretchable,in int 
   anIndex);
 void GetItemAt(out nsIToolbarItem anItem,in int 
   anIndex);
}

Une seule interface peut ainsi disposer de plusieurs composants, réalisés sous différents langages ou architectures. L'architecte logiciel peut donc librement décrire ce dont il a besoin, et les développeurs peuvent ensuite écrire les composants dans leur langage de prédilection.

Désormais, nous savons que nous pouvons afficher des pages XUL ou HTML avec des CSS (Gecko), et que l'on dispose des briques fonctionnelles (XPCOM). Reste à savoir comment faire le lien entre ces deux mondes. Comment puis-je appeler ces composants XPCOM dans mon application ?


JDN Développeur Envoyer Imprimer Haut de page