DOCUMENTATION EN LIGNE
DE WINDEVWEBDEV ET WINDEV MOBILE

Aide / WLangage / POO (Programmation Orientée Objet)
  • Les règles de copie
  • Cas des tableaux lors de la copie d'instances de classes
  • Des attributs d'extension spécifiques
  • La fonction Clone
WINDEV
WindowsLinuxUniversal Windows 10 AppJavaEtats et RequêtesCode Utilisateur (MCU)
WEBDEV
WindowsLinuxPHPWEBDEV - Code Navigateur
WINDEV Mobile
AndroidWidget AndroidiPhone/iPadWidget IOSApple WatchMac CatalystUniversal Windows 10 App
Autres
Procédures stockées
Les règles de copie
La copie des variables est effectuée grâce à l'opérateur "=".
Type des variablesEffet
Types simples (entier, réel, chaîne, ...)La valeur de la variable est copiée.
TableauxLe tableau destination est une référence sur le tableau source.
Tableaux associatifsLe contenu du tableau est copié.
FileLe contenu de la file est copié.
PileLe contenu de la pile est copié.
ListeLe contenu de la liste est copié.
Objet = Objet dynamiqueLes membres de l'objet dynamique sont copiés dans ceux de l'objet.
Objet = ObjetLes membres de l'objet source sont copiés dans ceux de l'objet destination.
Objet dynamique = Objet dynamiqueL'objet dynamique destination est une référence à l'objet dynamique source.
Objet dynamique = ObjetL'objet dynamique destination est une référence à l'objet source.
Structure = Structure dynamiqueUne copie de la structure est réalisée. Les membres de même nom sont initialisés avec les valeurs existantes. Les membres inexistants sont ignorés.
Structure = StructureUne copie de la structure est réalisée. Les membres de même nom sont initialisés avec les valeurs existantes. Les membres inexistants sont ignorés.
Structure dynamique = Structure dynamiqueLa structure dynamique destination est une référence à la structure dynamique source.
Structure dynamique = StructureLa structure dynamique destination est une référence à la structure source.
Type avancé = Type avancéUne copie de la variable de type avancé est réalisée. Les propriétés de même nom sont initialisées avec les valeurs existantes.
Type avancé = Type avancé dynamiqueUne copie de la variable de type avancé est réalisée. Les propriétés de même nom sont initialisées avec les valeurs existantes.
Type avancé dynamique = Type avancéLa variable de type avancé dynamique destination est une référence à la variable de type avancé source.
Type avancé dynamique = Type avancé dynamiqueLa variable de type avancé dynamique destination est une référence à la variable de type avancé dynamique source.

Cas des tableaux lors de la copie d'instances de classes

Lors de copies d'instances de classes, tous les membres de la classe sont recopiés dans la nouvelle instance y compris les tableaux. Ainsi les tableaux sont indépendants dans toutes les instances de classes.
Pour ne pas obtenir des tableaux indépendants dans toutes les instances de classes :
  1. Affichez la fenêtre de description du projet : sous le volet "Projet", dans le groupe "Projet", cliquez sur "Description".
  2. Dans l'onglet "Compilation", décochez l'option "Tableaux : l'affectation copie le contenu".
Pour plus de détails, consultez Description projet, onglet compilation.
Des attributs d'extension spécifiques
Deux attributs d'extension spécifiques peuvent être utilisés pour indiquer les opérations à effectuer :
  • <Copie=Clone> : utilisé sur un objet dynamique, cet attribut d'extension permet de forcer le clonage de l'objet.
  • <Copie=Faux> : utilisé sur un membre, cet attribut d'extension permet d'empêcher la copie de la valeur du membre lors de la copie d'un objet dans un autre.
La fonction Clone
La fonction Clone permet de construire une copie d'une instance de classe :
  • Un objet de la classe réelle de l'instance de la classe est alloué.
  • Une copie des membres de l'instance de la classe vers les membres du nouvel objet est effectuée. Les méthodes "Constructeur" et "Destructeur" sont également copiées.
Avantage : Dans le cas du polymorphisme, il n'est plus nécessaire d'écrire le code nécessaire à ce clonage. Il est également inutile d'écrire les méthodes virtuelles dans toutes les classes dérivées ainsi que les constructeurs.
Remarque : La copie tient compte de l'attribut <Copie> de chaque membre :
  • <Copie=Faux> pour ignorer un membre,
  • <Copie=Clone> pour effectuer un clonage.
Exemple :
// Il existe un feu tricolore dans le XIIè arrondissement de Paris, au 1 Rue Taine
// Il est rouge
FeuCroisement est un FeuTricolore
FeuCroisement.Adresse = "1 Rue Taine, 75012 Paris"
FeuCroisement.Statut = RougeFoncé
 
// On doit mettre en place un deuxième feu, au numéro 25 de la même rue
 
// Si on copie simplement l'objet...
FeuCopie est un FeuTricolore dynamique = FeuCroisement
FeuCopie.Adresse = "25 Rue Taine, 75012 Paris"
// FeuCroisement a aussi changé d'adresse... !
 
// Si on clone l'objet...
FeuBis est un FeuTricolore dynamique = Clone(FeuCroisement)
// FeuBis contient les mêmes informations que FeuCroisement
// Mais si l'on modifie l'une de ses propriétés, cela n'impacte pas le feu d'origine
 
// Change l'adresse
FeuBis.Adresse = "25 Rue Taine, 75012 Paris"
// >> FeuCroisement.Adresse = "1 Rue Taine, 75012 Paris"
 
FeuBis.Statut = RougeFoncé
// >> FeuCroisement.Statut = VertFoncé
Version minimum requise
  • Version 25
Documentation également disponible pour…
Commentaires
Cliquez sur [Ajouter] pour publier un commentaire

Dernière modification : 13/06/2023

Signaler une erreur ou faire une suggestion | Aide en ligne locale