PC SOFT

DOCUMENTATION EN LIGNE
DE WINDEVWEBDEV ET WINDEV MOBILE

  • Présentation
  • Syntaxe du Constructeur de la classe
  • Note concernant les constructeurs
  • Syntaxe des constructeurs des classes de base et des membres
  • Notes
  • Syntaxes de la méthode Destructeur
WINDEV
WindowsLinuxUniversal Windows 10 AppJavaEtats et RequêtesCode Utilisateur (MCU)
WEBDEV
WindowsLinuxPHPWEBDEV - Code Navigateur
WINDEV Mobile
AndroidWidget AndroidiPhone/iPadWidget iOSApple WatchCatalystUniversal Windows 10 AppWindows Mobile
Autres
Procédures stockées
Présentation
Par défaut, lors de la création d'une classe sous l'éditeur de code les méthodes Constructeur et Destructeur sont automatiquement créées.
  • La méthode Constructeur, si elle est définie par le développeur, est automatiquement appelée lors de l'instanciation d'un objet. Elle permet par exemple d'effectuer des initialisations sur l'objet ou relatives à l'objet (affectation des membres, vérifications...)
  • La méthode Destructeur, si elle est définie par le développeur, est automatiquement appelée lors de la suppression de l'objet (sortie de procédure dans laquelle l'objet a été instancié). Elle permet par exemple d'effectuer les traitements de libération de ressources...
Les méthodes Constructeur et Destructeur ne peuvent pas contenir les fonctions Evénement, Timer, Multitache, DnDEvénement, DDEEvénement, AppelDLL32, etc.
Versions 16 et supérieures
Remarques :
  • Les méthodes Constructeur peuvent être publiques, protégées ou privées.
  • Il est possible de créer des Constructeurs multisyntaxes. Pour plus de détails, consultez Surcharge de prototype.
Nouveauté 16
Remarques :
  • Les méthodes Constructeur peuvent être publiques, protégées ou privées.
  • Il est possible de créer des Constructeurs multisyntaxes. Pour plus de détails, consultez Surcharge de prototype.
Remarques :
  • Les méthodes Constructeur peuvent être publiques, protégées ou privées.
  • Il est possible de créer des Constructeurs multisyntaxes. Pour plus de détails, consultez Surcharge de prototype.
Versions 17 et supérieures
AndroidUniversal Windows 10 App Cette fonctionnalité est désormais disponible pour les applications Android et Windows Phone.
iPhone/iPad Cette fonctionnalité est désormais disponible pour les applications iPhone/iPad.
Nouveauté 17
AndroidUniversal Windows 10 App Cette fonctionnalité est désormais disponible pour les applications Android et Windows Phone.
iPhone/iPad Cette fonctionnalité est désormais disponible pour les applications iPhone/iPad.
AndroidUniversal Windows 10 App Cette fonctionnalité est désormais disponible pour les applications Android et Windows Phone.
iPhone/iPad Cette fonctionnalité est désormais disponible pour les applications iPhone/iPad.
Versions 21 et supérieures
Universal Windows 10 App Cette fonctionnalité est disponible en mode Universal Windows 10 App.
Apple Watch Cette fonctionnalité est disponible en mode Apple Watch.
Nouveauté 21
Universal Windows 10 App Cette fonctionnalité est disponible en mode Universal Windows 10 App.
Apple Watch Cette fonctionnalité est disponible en mode Apple Watch.
Universal Windows 10 App Cette fonctionnalité est disponible en mode Universal Windows 10 App.
Apple Watch Cette fonctionnalité est disponible en mode Apple Watch.
Syntaxe du Constructeur de la classe
Déclaration du constructeur
PROCEDURE [<Accès>] Constructeur([<Paramètres>])
Détail de la syntaxe
Versions 16 et supérieures
<Accès> : Optionnel
3 niveaux d'accès sont disponibles :
  • PUBLIC (par défaut) : Le constructeur est accessible en dehors de la classe.
  • PROTEGE : Le constructeur est accessible dans la classe et dans les classes dérivées.
  • PRIVE : Le constructeur est accessible uniquement dans la classe.
Pour plus détails, consultez le paragraphe Notes sur les Constructeurs.
Remarque : Pour modifier la portée du Constructeur, il est possible d'utiliser le menu contextuel sur la méthode dans l'explorateur de projet.
Nouveauté 16
<Accès> : Optionnel
3 niveaux d'accès sont disponibles :
  • PUBLIC (par défaut) : Le constructeur est accessible en dehors de la classe.
  • PROTEGE : Le constructeur est accessible dans la classe et dans les classes dérivées.
  • PRIVE : Le constructeur est accessible uniquement dans la classe.
Pour plus détails, consultez le paragraphe Notes sur les Constructeurs.
Remarque : Pour modifier la portée du Constructeur, il est possible d'utiliser le menu contextuel sur la méthode dans l'explorateur de projet.
<Accès> : Optionnel
3 niveaux d'accès sont disponibles :
  • PUBLIC (par défaut) : Le constructeur est accessible en dehors de la classe.
  • PROTEGE : Le constructeur est accessible dans la classe et dans les classes dérivées.
  • PRIVE : Le constructeur est accessible uniquement dans la classe.
Pour plus détails, consultez le paragraphe Notes sur les Constructeurs.
Remarque : Pour modifier la portée du Constructeur, il est possible d'utiliser le menu contextuel sur la méthode dans l'explorateur de projet.
<Paramètres>
Paramètres optionnels du constructeur. Si ces paramètres sont précisés, il est nécessaire de passer ces paramètres lors de la déclaration de l'objet ou lors de l'instanciation dynamique.
Déclaration de l'objet : le constructeur est appelé automatiquement
<NomObjet> est [un] [objet] <Nom Classe> ([<Paramètres>])
Détail de la syntaxe
<NomObjet>
Nom identifiant l'instance de la classe.
<Nom classe>
Nom identifiant la classe, défini lors de la création de la classe sous l'éditeur de code.
<Paramètres>
Paramètres optionnels du constructeur.
Instanciation dynamique : le constructeur est appelé automatiquement
<NomObjet> est [un] [objet] <NomClasse> dynamique
<NomObjet> = allouer un <NomClasse> ([<Paramètres>])
Détail de la syntaxe
<NomObjet>
Nom identifiant l'instance de la classe.
<Nom classe>
Nom identifiant la classe, défini lors de la création de la classe sous l'éditeur de code.
<Paramètres>
Paramètres optionnels du constructeur.
Note concernant les constructeurs
Versions 16 et supérieures
Portée et accès des Constructeurs
Le Constructeur d'une classe peut être public, protégé ou privé.
Héritage :
  • Une classe avec Constructeur public peut être héritée.
  • Une classe avec Constructeur protégé peut être héritée.
  • Une classe avec Constructeur privée ne peut pas être héritée.
Accessibilité dans le cas des Constructeurs privés ou protégés :
  • Il est impossible d'instancier un objet de la classe dans un code du projet.
  • Il est impossible de déclarer de tableau dont les éléments sont des instances de la classe dans un code du projet.
  • Il est impossible de déclarer de membre du type de la classe dans une variable composée, une structure ou une autre classe dans un code de la classe ou du projet.
Remarque importante : Quelle que soit la portée du Constructeur, il est toujours possible de déclarer des objets dynamiques dans un code du projet. Si l'instanciation (l'allocation) des objets est impossible, la déclaration d'objets dynamiques est toujours possible. Les codes suivants sont donc toujours valides :
// Dans ces deux cas, l'instanciation n'est pas faite à la déclaration.
Objet1 est un Classe1 dynamique
Objet2 est un Classe1 <- ...
Pour instancier des objets dans le code du projet, il est possible d'utiliser une méthode globale de la classe.
Exemple avec un Constructeur privé :
// Méthode globale de ClasseAvecConstructeurPrivée
PROCEDURE GLOBALE MéthodeGlobaleAllocation(...)

o est ClasseAvecConstructeurPrivé
RENVOYER o
// *****************************************

// Récupération d'un objet de la classe depuis un code du projet :

// Solution 1 :
o2 est ClasseAvecConstructeurPrivé dynamique
o2 = ClasseAvecConstructeurPrivé.MéthodeGlobaleAllocation(...)

// Solution 2 :
o3 est ClasseAvecConstructeurPrivé <- ClasseAvecConstructeurPrivé.MéthodeGlobaleAllocation(...)
Attention : L'opérateur d'affectation (=) n'a pas le même comportement avec des objets dynamiques ou non dynamiques. L'utilisation des objets o2 et o3 dans des affectations provoquera un comportement différent :
// Déclaration d'un nouvel objet dynamique.
o4 est un ClasseAvecConstructeurPrivé dynamique

// o2 est une référence à o4
o2 = o4

// Les membres de o4 sont copiés dans o3
o3 = o4

Nouveauté 16
Portée et accès des Constructeurs
Le Constructeur d'une classe peut être public, protégé ou privé.
Héritage :
  • Une classe avec Constructeur public peut être héritée.
  • Une classe avec Constructeur protégé peut être héritée.
  • Une classe avec Constructeur privée ne peut pas être héritée.
Accessibilité dans le cas des Constructeurs privés ou protégés :
  • Il est impossible d'instancier un objet de la classe dans un code du projet.
  • Il est impossible de déclarer de tableau dont les éléments sont des instances de la classe dans un code du projet.
  • Il est impossible de déclarer de membre du type de la classe dans une variable composée, une structure ou une autre classe dans un code de la classe ou du projet.
Remarque importante : Quelle que soit la portée du Constructeur, il est toujours possible de déclarer des objets dynamiques dans un code du projet. Si l'instanciation (l'allocation) des objets est impossible, la déclaration d'objets dynamiques est toujours possible. Les codes suivants sont donc toujours valides :
// Dans ces deux cas, l'instanciation n'est pas faite à la déclaration.
Objet1 est un Classe1 dynamique
Objet2 est un Classe1 <- ...
Pour instancier des objets dans le code du projet, il est possible d'utiliser une méthode globale de la classe.
Exemple avec un Constructeur privé :
// Méthode globale de ClasseAvecConstructeurPrivée
PROCEDURE GLOBALE MéthodeGlobaleAllocation(...)

o est ClasseAvecConstructeurPrivé
RENVOYER o
// *****************************************

// Récupération d'un objet de la classe depuis un code du projet :

// Solution 1 :
o2 est ClasseAvecConstructeurPrivé dynamique
o2 = ClasseAvecConstructeurPrivé.MéthodeGlobaleAllocation(...)

// Solution 2 :
o3 est ClasseAvecConstructeurPrivé <- ClasseAvecConstructeurPrivé.MéthodeGlobaleAllocation(...)
Attention : L'opérateur d'affectation (=) n'a pas le même comportement avec des objets dynamiques ou non dynamiques. L'utilisation des objets o2 et o3 dans des affectations provoquera un comportement différent :
// Déclaration d'un nouvel objet dynamique.
o4 est un ClasseAvecConstructeurPrivé dynamique

// o2 est une référence à o4
o2 = o4

// Les membres de o4 sont copiés dans o3
o3 = o4

Portée et accès des Constructeurs
Le Constructeur d'une classe peut être public, protégé ou privé.
Héritage :
  • Une classe avec Constructeur public peut être héritée.
  • Une classe avec Constructeur protégé peut être héritée.
  • Une classe avec Constructeur privée ne peut pas être héritée.
Accessibilité dans le cas des Constructeurs privés ou protégés :
  • Il est impossible d'instancier un objet de la classe dans un code du projet.
  • Il est impossible de déclarer de tableau dont les éléments sont des instances de la classe dans un code du projet.
  • Il est impossible de déclarer de membre du type de la classe dans une variable composée, une structure ou une autre classe dans un code de la classe ou du projet.
Remarque importante : Quelle que soit la portée du Constructeur, il est toujours possible de déclarer des objets dynamiques dans un code du projet. Si l'instanciation (l'allocation) des objets est impossible, la déclaration d'objets dynamiques est toujours possible. Les codes suivants sont donc toujours valides :
// Dans ces deux cas, l'instanciation n'est pas faite à la déclaration.
Objet1 est un Classe1 dynamique
Objet2 est un Classe1 <- ...
Pour instancier des objets dans le code du projet, il est possible d'utiliser une méthode globale de la classe.
Exemple avec un Constructeur privé :
// Méthode globale de ClasseAvecConstructeurPrivée
PROCEDURE GLOBALE MéthodeGlobaleAllocation(...)

o est ClasseAvecConstructeurPrivé
RENVOYER o
// *****************************************

// Récupération d'un objet de la classe depuis un code du projet :

// Solution 1 :
o2 est ClasseAvecConstructeurPrivé dynamique
o2 = ClasseAvecConstructeurPrivé.MéthodeGlobaleAllocation(...)

// Solution 2 :
o3 est ClasseAvecConstructeurPrivé <- ClasseAvecConstructeurPrivé.MéthodeGlobaleAllocation(...)
Attention : L'opérateur d'affectation (=) n'a pas le même comportement avec des objets dynamiques ou non dynamiques. L'utilisation des objets o2 et o3 dans des affectations provoquera un comportement différent :
// Déclaration d'un nouvel objet dynamique.
o4 est un ClasseAvecConstructeurPrivé dynamique

// o2 est une référence à o4
o2 = o4

// Les membres de o4 sont copiés dans o3
o3 = o4

Syntaxe des constructeurs des classes de base et des membres
Exécution du constructeur d'une classe de base ou d'un membre
Si une classe de base ou un membre de type classe possède un constructeur, ce constructeur est automatiquement appelé sans paramètre. Il faut :
  • soit attribuer des valeurs par défaut aux paramètres du constructeur (de la classe de base ou du membre)
  • soit appeler explicitement le constructeur en lui passant les paramètres.
Appel de la méthode constructeur pour construire une classe
Constructeur <NomClasse>(<Paramètres>)
Détail de la syntaxe
<NomClasse>
Nom identifiant la classe.
<Paramètres>
Paramètres du constructeur.
Appel du constructeur pour construire un membre
Constructeur <Nom membre> (<Paramètres>)
Détail de la syntaxe
<Nom Membre>
Nom identifiant le membre de la classe.
<Paramètres>
Paramètres du constructeur.
Exemple
Les constructeurs explicites de la classe de base ou du membre doivent être appelés en première instruction du constructeur de la classe dérivée.
//----Déclaration de classe ClasseBase1
ClasseBase1 est une Classe
MembreClasseBase1 est un entier
FIN
//---- Constructeur de ClasseBase1
PROCEDURE Constructeur(Param1)
Info("Constructeur de ClasseBase1 => " + Param1)
//----Déclaration de classe ClasseBase2
ClasseBase2 est une Classe
MembreClasseBase2 est un entier
FIN
//---- Constructeur de ClasseBase2
PROCEDURE Constructeur(Param1)
Info("Constructeur de ClasseBase2 => " + Param1)
//---- Déclaration de classe ClasseDérivée
ClasseDérivée est une Classe
// Héritage de ClasseBase1 dont
// le Constructeur attend un paramètre
hérite de ClasseBase1
// Membre de type ClasseBase2 dont
// le Constructeur attend un paramètre
MembreClasseDérivée est un ClasseBase2
FIN
//----Constructeur de ClasseDérivée
PROCEDURE Constructeur()
// Appel explicite du Constructeur
Constructeur ClasseBase1(10)
Constructeur MembreClasseDérivée(20)
Notes
Valeur par défaut des membres
Chaque membre d'une classe est mis à zéro si aucun constructeur n'est associé à la classe.
Syntaxes de la méthode Destructeur
Déclaration de la méthode
PROCEDURE Destructeur <NomClasse>()
Détail de la syntaxe
<NomClasse>
Nom identifiant la classe. Le destructeur n'accepte aucun paramètre.
AndroidJava Cas particulier en Java/Android
La notion de destructeur n'existe pas en Java/Android. Le code situé dans le destructeur d'une classe ne sera par conséquent jamais exécuté.

Un objet est libéré par le ramasse-miette (garbage collector) lorsqu'il n'est plus référencé dans l'application. Le moment où intervient cette libération n'est pas prévisible.

Pour forcer la libération d'un objet, il est possible de l'affecter à NULL ou d'utiliser l'instruction Libérer.
Liste des exemples associés :
WD POO Simple Exemples didactiques (WINDEV) : WD POO Simple
[ + ] L'exemple "WD POO Simple" est un exemple didactique sur la POO avec WINDEV. Cet exemple permet de voir le fonctionnement :
- des classes,
- des héritages,
- des procédures virtuelles,
- des diagrammes UML,
- ...
Version minimum requise
  • Version 9
Documentation également disponible pour…
Commentaires
Cliquez sur [Ajouter] pour publier un commentaire