Friday, April 14, 2017




Syntaxes de la POO en W-Langage


Syntaxes


  Exemple avancé reprenant les différentes syntaxes à utiliser
  en programmation objet en W-Langage.

//*********** Exemple de code de déclaration d'une classe en W-Langage
//Constantes de la classe
//Remarque : on est avant "ClasseExemple est une classe"
CONSTANT
//Syntaxe générale : <Nom Constante>=Valeur CST1CLASSEEX= 10 CST2CLASSEEX=
"BONJOUR"FIN
//Structure utilisée par la classe
//Remarque : on est avant "ClasseExemple est une classe"
StructurePourClasse est une structure
MembreStructureClasse est un entier
//Autres membres de la structureFIN

//Membres de la classe (ClasseExemple représente le nom de la classe)ClasseExemple est une classe
//Uniquement  dans le cas où la classe hérite d'une autre classe //Syntaxe générale : hérite de <Nom de la classe ancêtre> //A mettre impérativement au début avant les membres de la classe hérite de ClasseAncêtre
//On peut noter qu'il est également possible d'utiliser cette autre syntaxe : //un objet ClasseAncêtre(ParamConstructeurAncêtre) //Je conseille toutefois la première syntaxe //Membres globaux (commun à tous les objets bases sur cette classe dans le projet)GLOBAL
MembreGlobal est une chaîne
//Membres locaux (propre à chaque objet, à chaque instanciation de la classe) : Par défautLOCAL//Membres privés (utilisables uniquement dans la classe)PRIVÉ
//Uniquement  dans le cas où la classe utilise une autre classe MembreObjet est un objet AutreClasse
//Membres privés de la classe MembreClasse est une chaîne
//Membres publics (utilisables dans la classe et en dehors de la classe) : Par défautPUBLIC
MembreClasseBaséSurStructure est un StructurePourClasse
//Membres publics constant (utilisables en L/E dans la classe et en lecture seule en dehors de la classe) PUBLIC CONSTANT
MembreConstantClasse est un StructurePourClasse
//Membres protégés (accès autorisé depuis un code de la classe ou un code d'une classe dérivée)PROTÉGÉ
MembreProtege est un entier
FIN


//**************** Exemple de constructeur de classe
//ici constructeur qui attend 2 paramètres
PROCEDURE Constructeur(Param1,Param2)//appel du constructeur de la classe ancêtre (si nécessaire)
//A mettre impérativement au début avant les autres initialisations
Ancêtre:Constructeur(Param1)//OU
//Constructeur Ancêtre(Param1)
//OU
//En cas d'héritage multiple, ou pou être plus explicite on peut nommer la classe ancêtre :
//ClasseAncêtre:Constructeur(Param1)
//OU
//Constructeur ClasseAncêtre(Param1)

//En cas d'héritage multiple, ou pou être plus explicite on peut nommer la classe ancêtre :
//ClasseAncêtre: Constructeur(Param1)

//appel des constructeurs des membres qui sont eux-mêmes des objets (si nécessaire):MembreObjet:Constructeur(Param2)
//initialisation des membres (si nécessaire)
//A part dans la déclaration de la classe, pour manipuler les membres de la classe, il faut les préfixer de ":" (de la même façon pour les méthodes)
:MembreClasse =
"INIT"//Ici affectation d'un membre basé sur une structure:MembreClasseBaséSurStructure:MembreStructureClasse = 10


//**************** Exemple de méthode de classe (déclaration et manipulation des différents éléments de la classe dans le code)PROCEDURE PROTÉGÉ VIRTUELLE MéthodeExemple(Parametre1,Parametre2="")//PROTEGE: car la méthode n'est accessible que depuis les autres méthodes de la classe et les classes dérivées.
//Il faut mettre PRIVE pour pouvoir appeler cette méthode que depuis la classe elle-même. Et il ne faut rien mettre (ou PUBLIC) pou pourvoir l'appeler en dehors de la classe
//Il est possible de mettre GLOBAL (entre PROTEGE et VIRTUELLE) pour indiquer que cette méthode peut être appelée sans instanciation d'objet (juste avec la classe)
//VIRTUELLE indique que si cette méthode est redéfinie dans une classe dérivée, c'est la méthode de la classe dérivée qui sera appelée même depuis cette classe

//** Ici exemple d'appel de la méthode de même nom de la classe ancêtre (méthode qui existe donc dans la classe en cours est dans la classe ancêtre)
//Il faut ajouter le mot "Ancêtre" (ou le nom de la classe en cas d'héritage multiple) devant le nom de la méthode
Ancêtre:MéthodeExemple(Parametre1)// et donc l'autre possibilité en cas d'héritage multiple : 
//ClasseAncêtre:MéthodeExemple(Parametre1)

//Exemple d'utilisation d'un membre global : il faut préfixer de "::" ( de la même façon pour une méthode globale)::MembreGlobal=10//Exemple d'utilisation d'une constante de la classe : il faut préfixer de "::" ( les constantes sont des membres globaux non modifiables)Info(::CST1CLASSEEX)

//**************** Exemple de code (hors de la classe elle-même), qui utilise une classe
//Déclaration de l'objet (ici on passe 2 paramètres au constructeur)
ObjPerso est un objet ClasseExemple(1,2)// si le constructeur n'a pas de paramètre, il faut écrire :
//ObjPerso est un objet ClasseExemple

//Utilisation d'une structure de la classe MaStructure  est un ClasseExemple::StructurePourClasse
//Appel d'une méthodeObjPerso:MéthodePublic("Mon Paramètre")
//Appel d'une méthode globale : il faut utiliser le nom de la classe (et pas celui d'un objet), et il faut préfixer le nom de la méthode de "::"ClasseExemple::MéthodeGlobale("Autre Paramètre")
//Appel d'une constante de la classe : il faut utiliser le nom de la classe (et pas celui d'un objet), et il faut préfixer le nom de la constante de "::"Info(ClasseExemple::CST1CLASSEEX)

No comments:

Post a Comment