DOCUMENTATION EN LIGNE
DE WINDEVWEBDEV ET WINDEV MOBILE

Aide / WLangage / POO (Programmation Orientée Objet)
  • Présentation
  • Syntaxes
  • Héritage d'une classe
  • Détail de la syntaxe
  • Syntaxe conservée pour compatibilité
  • Redéfinition de méthodes
  • Exemple
  • Exemple
  • Syntaxe pour appeler une méthode de la classe de base
  • Syntaxe 1
  • Syntaxe 2
  • Syntaxe 3
  • Remarque
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
Présentation
L'organisation hiérarchique en classes et sous-classes a permis de créer la notion d'héritage.
Autrement dit un objet de la sous-classe A (classe dérivée) qui possède les mêmes caractéristiques que la classe B (classe ancêtre), plus certaines qui lui sont propres, hérite d'emblée des caractéristiques de la classe B sans qu'il soit nécessaire de dupliquer les programmes dans l'objet de la sous-classe A. Ainsi le nombre de lignes de code diminue.
L'héritage est le mécanisme par lequel la classe en cours de description utilise les méthodes et les membres définies dans les classes existantes.
  • La classe existante est appelée Classe ancêtre ou Classe de base.
  • La nouvelle classe est appelée Classe dérivée. La classe dérivée englobe la classe ancêtre et y ajoute de nouvelles méthodes, de nouveaux membres et de nouvelles propriétés.
Le but de l'héritage est de récupérer pour une classe, les méthodes développées pour une autre classe, en y ajoutant les spécificités de la nouvelle classe.
Une classe dérivée permet à ses objets d'accéder à toutes les méthodes, à tous les membres et à toutes les propriétés de ses classes ancêtres; tout se passe comme si les méthodes, les membres et les propriétés des classes ancêtres faisaient partie de la classe dérivée.
Caractéristiques d'un héritage :
  • Un héritage peut être multiple. Dans ce cas, la classe dérivée peut être dérivée de plusieurs classes ancêtres.
  • Un héritage peut être privé ou public (par défaut).
    Si l'héritage est public, il est possible d'accéder aux méthodes, aux propriétés et aux membres hérités depuis l'extérieur de la classe.
    Si l'héritage est privé, seules les méthodes de la classe dérivée peuvent accéder aux méthodes, aux propriétés et aux membres hérités.
  • Comme dans tous les langages, le polymorphisme ne fonctionne qu'avec des objets dynamiques.
Syntaxes

Héritage d'une classe

<NomClasseDérivée> est une classe
[PRIVE, PROTEGE, PUBLIC]
Hérite de <NomClasseAncêtre>
<Nom Membre classe Dérivée> est <Type du membre>
...
FIN

Détail de la syntaxe

<NomClasseDérivée>
Nom identifiant la classe dérivée en cours de déclaration.

PRIVE, PROTEGE, PUBLIC
Mot-clé optionnel. Indique si l'héritage est privé ou non. Si ce mot n'est pas précisé, l'héritage est public.

<NomClasseAncêtre>
Nom de la classe ancêtre.

<Nom Membre classe Dérivée>
Nom du membre de la classe dérivée. Ce membre sera utilisable uniquement dans un objet de la classe dérivée.

<Type du membre>
Type du membre, choisi parmi les types disponibles.
NomFichier est une Classe
Nom est une chaîne
Extension est une chaîne
Répertoire est une chaîne
FIN
 
InformationsFichier est une Classe
hérite de NomFichier
TailleFichier est un entier
DateFichier est une chaîne
HeureFichier est une chaîne
FIN

Syntaxe conservée pour compatibilité

<NomClasseDérivée> est une classe
[PRIVE, PROTEGE, PUBLIC]
Un objet <NomClasseAncêtre>
<Nom Membre classe Dérivée> est <Type du membre>
...
FIN
Redéfinition de méthodes
Dans une classe dérivée, une méthode de la classe de base peut être redéfinie en créant dans la classe dérivée une méthode de même nom que celle de la classe de base.
La redéfinition de méthode permet de modifier le comportement de la méthode définie dans la classe de base; la classe dérivée peut éventuellement redéfinir la méthode en fonction de ses besoins.
Par défaut, la méthode redéfinie est une méthode virtuelle.
Remarque : la surcharge d'une méthode (utilisation de deux méthodes de même nom dans la même classe) est gérée en WLangage. Pour plus de détails, consultez Surcharge de prototype/Multisyntaxe.
Note : le mot-clé Objet permet d'accéder à l'objet courant à l'intérieur d'une méthode

Exemple

La classe InfoFichier hérite de la classe NomFichier. Ces deux classes ont une méthode Affiche. La méthode Affiche de la classe NomFichier est utilisée par la méthode Affiche de la classe InfoFichier.
Classe NomFichierClasse InfoFichier
Déclaration de la classeDéclaration de la classe
NomFichier est une Classe
Nom est une chaîne
Extension est une chaîne
Répertoire est une chaîne
FIN
InformationsFichier est une Classe
hérite de NomFichier
TailleFichier est un entier
DateFichier est une chaîne  
HeureFichier est une chaîne  
FIN
Méthode AfficheMéthode Affiche
PROCÉDURE Affiche()
Trace(:Nom)
Trace(:Extension)
Trace(:Répertoire)
PROCÉDURE AFFICHE()
Ancêtre:Affiche()
Trace(:TailleFichier)
Trace(:DateFichier)
Trace(:HeureFichier)

Exemple

Le polymorphisme ne fonctionne qu'avec des objets dynamiques.
Dans cet exemple, une classe virtuelle animal est créée. Deux classes (lapin et chat) héritent de cette classe. On veut réaliser une liste des objets différents (des lapins et des chats).
Animal est une Classe
FIN
 
Chat est une Classe
hérite de Animal
FIN
Lapin est une Classe
hérite de Animal
FIN
 
ListeA est un tableau de 16 animal dynamiques
ListeA[1] = allouer un chat
ListeA[1] = allouer un lapin
Syntaxe pour appeler une méthode de la classe de base

Syntaxe 1

Ancêtre:<Nom de la Méthode>()
Détail de la syntaxe
Ancêtre
mot-clé permettant d'indiquer que la méthode à utiliser est la méthode de la classe ancêtre immédiatement précédente (utilisable dans le cas d'un seul héritage). Pour appeler une méthode d'une classe de base quelque soit son niveau dans l'ordre d'héritage, il est nécessaire d'utiliser la syntaxe 2.

<Nom de la méthode>
Nom de la méthode à utiliser dans la classe ancêtre.

Syntaxe 2

<Classe de base>:<Nom de la Méthode>()
Détail de la syntaxe
<Classe de base>
Nom de la classe ancêtre dans laquelle la méthode à utiliser a été définie.

<Nom de la méthode>
Nom de la méthode à utiliser dans la classe ancêtre.

Syntaxe 3

:<Classe de base>:<Nom de la Méthode>()
Détail de la syntaxe
<Classe de base>
Nom de la classe ancêtre dans laquelle la méthode à utiliser a été définie.

<Nom de la méthode>
Nom de la méthode à utiliser dans la classe ancêtre.

Remarque

Pour les constructeurs et destructeurs, il est conseillé d'utiliser des syntaxes spécifiques (consultez Syntaxe des constructeurs des classes de base et des membres).
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,
- ...
WD Pilotage traitement de texte Exemples didactiques (WINDEV) : WD Pilotage traitement de texte
[ + ] Le but de cet exemple est de proposer une interface universelle, permettant de piloter ces applications, sans se soucier de l'application à piloter. Cet exemple se base sur un concept de la programmation orientée objet : le polymorphisme. Cela consiste à utiliser des objets différents (objet LibreOffice et objet MicrosoftWord), sans savoir réellement lequel est utilisé.
Version minimum requise
  • Version 9
Documentation également disponible pour…
Commentaires
Héritage multiple et Android
Point important à préciser : L'héritage multiple n'est pas disponible en Android (du fait d'une limitation de Java).
Donc attention si vous faites du code multi-plateforme, à ne pas utiliser l'héritage multiple.
Marc LAZZARINI
18 déc. 2023

Dernière modification : 25/05/2022

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