Interface - Définition d'un type interface

Instruction. Définition d'une nouvelle interface.

Syntaxe

Interface NomDeLInterface ParametrageDuType HeritageDeLInterface
InflexionInterface
ListeDeComposantsDUnType
Fin Interface

Interface NomDeLInterface Recursif;

Description

L'instruction Interface permet de définir un type de données servant d'interface entre deux parties du programme. Une interface peut être vue comme un contrat passé entre ces deux parties du programme. Concernant les interfaces, il y a trois acteurs : Le principe est de définir par avance des services utilisables par des clients sans pour autant connaître le ou les serveurs. Des serveurs pourront être ajoutés ultérieurement, voire être remodeler sans que cela ait une quelconque incidence pour le client. La seule contrainte est que les serveurs respectent toujours l'interface, ce dont Up ! Application System est garant.

L'éditeur, le client, le serveur peuvent être dans le même composant, mais cela n'est pas le plus intéressant. Le mieux est de répartir les clients et les serveurs dans des modules séparés et de charger les modules implémentant les interfaces dynamiquement.

Une fois définie, l'interface se comporte comme un type défini par l'instruction Type, si ce n'est que tous les objets déclarés de ce type doivent être précédés de Nul Ou. En effet, le type implémentant l'interface n'étant pas à priori connu, il est impossible d'invoquer son constructeur implicite pour l'initialisation des objets.

Un type implémente une interface au moyen de l'instruction Implemente. En ce cas, toutes les méthodes de l'interface doivent être présentes dans la définition du type, avec les mêmes prototypes et les mêmes droit d'accès.

Exemple

Module M1

Public :
Interface IObjetADessiner
/***********************/
/* Interface définissant le comportement d'un objet à dessiner. */
Protege :
Public :
Fin Interface

Module M2

ImporterModule M1(<M1.upi>);

Public :
Type TCercle Implemente M1.IObjetADessiner
/****************************************/
/* Un cercle est un objet à dessiner particulier. */
Public : Fin Type

/****************************************************************/
Procedure TCercle.Selectionner(S : Booleen)
/* Objet : Methode de selection du cercle. */
/****************************************************************/
Debut
...
Fin Procedure

/****************************************************************/
Fonction TCercle.Deplacer(PX : Entier, PY : Entier) Retourner Booleen
/* Objet : Methode de deplacement du cercle. */
/****************************************************************/
Debut ...
Fin Fonction

/****************************************************************/
Fonction TCercle.Agrandir(PX : Entier, PY : Entier, PLargeur : Entier, PHauteur : Entier) Retourner Booleen
/* Objet : Methode d'agrandissement du cercle. */
/****************************************************************/
Debut
...
Fin Fonction

/****************************************************************/
Procedure TCercle.Dessiner()
/* Objet : Methode de dessin du cercle. */
/****************************************************************/
Debut
...
Fin Procedure

Module M3

ImporterModule M1(<M1.upi>);

Public :
Type TCarre Implemente M1.IObjetADessiner
/***************************************/
/* Un carré est un objet à dessiner particulier. */
Public : Fin Type

/****************************************************************/
Procedure TCarre.Selectionner(S : Booleen)
/* Objet : Methode de selection du carre. */
/****************************************************************/
Debut
...
Fin Procedure

/****************************************************************/
Fonction TCarre.Deplacer(PX : Entier, PY : Entier) Retourner Booleen
/* Objet : Methode de deplacement du carre. */
/****************************************************************/
Debut
...
Fin Fonction

/****************************************************************/
Fonction TCarre.Agrandir(PX : Entier, PY : Entier, PLargeur : Entier, PHauteur : Entier) Retourner Booleen
/* Objet : Methode d'agrandissement du carre. */
/****************************************************************/
Debut
...
Fin Fonction

/****************************************************************/
Procedure TCarre.Dessiner()
/* Objet : Methode de dessin du carre. */
/****************************************************************/
Debut
...
Fin Procedure

Module M4

Principal
/*******/
Variable
/******/
Debut M=Module("M2");
/* Le module M2 contenant le serveur 'cercle' est chargé dynamiquement. */
A=M.NouvelObjet(IObjetADessiner);
/* Création d'un objet à dessiner. Pour ce serveur, il s'agit d'un cercle. */
A.Dessiner();
/* Dessin du cercle. */
M=Nul;
/* Déchargement du serveur 'cercle'. */
...
M=Module("M3");
/* Le module M3 contenant le serveur 'carré' est chargé dynamiquement. */
A=M.NouvelObjet(IObjetADessiner);
/* Création d'un objet à dessiner. Pour ce serveur, il s'agit d'un carré. */
A.Dessiner();
/* Dessin du carré. */
M=Nul;
/* Déchargement du serveur 'carré'. */
Fin Principal

Voir aussi

Type pour définir un type.

Metier pour définir un type métier.

Traduction

---------