Classes abstraites en Windev

v. Formet - Dsr57

WinDev est un EDI édité par la société française PC Soft et conçu pour développer des applications. Il propose son propre langage appelé le WLangage. Plus d'informations sur le site officiel. Dans cet article, nous allons voir comment déclarer une classe abstraite en WinDev. ♪

Commentez

- Titre : Classes abstraites en Windev

- Auteur : v. Formet - Dsr57

- Parution : 4 octobre 2013

- Public visé :

- Licence : Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2013 dsr57. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.

Sommaire

- I. Qu'est-ce qu'une classe abstraite ?

- II. WinDev et les classes abstraites

- II-A. Définition des classes

- II-B. Instanciation des classes

- II-C. Avant la version 19

- II-D. Depuis la version 19

- III. Conclusion

I - Qu'est-ce qu'une classe abstraite ?

En programmation orientée objet (POO), une classe abstraite est une classe qui ne peut être instanciée. Elle ne peut être utilisée que comme classe de base dans une relation d'héritage. En général, dans ce genre de classe, seules les déclarations de méthodes sont définies, et il faudra écrire le contenu des méthodes dans les classes dérivées. Une classe abstraite permet aussi de définir les caractéristiques communes à plusieurs classes.

II - WinDev et les classes abstraites

Depuis les dernières versions, WinDev a amélioré la possibilité de programmer en objet. Avant la version 19, on ne pouvait pas définir si elle est publique ou abstraite. Nous pouvons pallier cela en changeant l'accès du constructeur. Cette astuce permettra de créer une classe non instanciable et donc abstraite. Nous allons découvrir cette possibilité à l'aide d'un exemple et nous verrons comment déclarer une classe abstraite depuis la version 19.

II-A - Définition des classes

Nous allons définir deux classes :

- ac_document : représente un objet de type document.
Elle est composée de trois attributs :

- ls_auteur : auteur du document,

- ls_titre : titre du document,

- ls_reference : référence du livre.

Ces trois attributs possèdent des propriétés en lecture et en écriture ;

- pc_livre : représente un livre et hérite de ac_document.

Elle hérite des trois attributs de ac_document et on y ajoute un attribut

li_nbPage : nombre de pages du livre.

L'attribut possède des propriétés en lecture/écriture.

Code de la classe ac_document

ac_document est une Classe
PRIVÉE
ls_auteur est une chaîne
ls_titre est une chaîne
ls_reference est une chaîne
FIN

PROCEDURE auteur()
RENVOYER :ls_auteur
PROCEDURE auteur(ps_auteur est une chaîne)
:ls_auteur = ps_auteur

PROCEDURE Titre()
RENVOYER :ls_titre
PROCEDURE Titre(ps_titre est une chaîne)
:ls_titre = ps_titre

PROCEDURE Reference()
RENVOYER :ls_reference
PROCEDURE Reference(ps_reference est une chaîne)
:ls_reference = ps_reference
PROCEDURE PUBLIC Constructeur()
//Pas de code

Code de la classe pc_livre

pc_livre est une Classe
hérite de ac_document
PRIVÉE
li_nbPage est un entier
FIN

PROCEDURE NbPages()
RENVOYER :li_nbPage
PROCEDURE NbPages(pi_nbPages est un entier)
:li_nbPage = pi_nbPages

PROCEDURE Constructeur()
Ancêtre:Constructeur()

Nous laissons l'accès des constructeurs public pour visualiser le comportement de WinDev, ensuite nous changerons celui de la classe ac_document.

II-B - Instanciation des classes

Les classes étant créées, je vais les instancier dans le code d'initialisation d'une fenêtre.

Code de la fenêtre

lo_document est un ac_document()
lo_livre est un pc_livre()

WinDev ne génère pas d'erreur de compilation, il nous laisse la possibilité d'instancier un objet de type ac_document.

II-C - Avant la version 19

Dans ce paragraphe nous allons voir comment contourner l'absence de notion de classe abstraite avant la version 19. Pour pouvoir introduire une « notion » de classe abstraite dans notre projet, nous allons modifier l'accès du constructeur « ac_document ». L'accès devient protégé. Maintenant, retournons à notre code où sont instanciés les objets. WinDev a généré une erreur de compilation.

Avec le message suivant :

Erreur : Le support des constructeurs privés est disponible à partir de la version 16 (permet de réaliser des classes abstraites, des interfaces, ou des « factory »).

Le constructeur de la classe 'ac_document' n'est pas public, la création d'une instance de 'ac_document' est interdite.

EXPRESS_Fenêtre1, Initialisation, ligne 1, colonne 20

II-D - Depuis la version 19

Depuis la version 19 WinDev introduit un nouveau mot-clé « abstraite » permettant de déclarer une classe abstraite, voyons cela avec une mise en application.

Exemple d'utilisation du mot clé abstraite

ac_document est une Classe, abstraite
PRIVÉE
ls_auteur est une chaîne
ls_titre est une chaîne
ls_reference est une chaîne
FIN

III - Conclusion

Nous venons de voir à travers ce document comment déclarer une classe abstraite

- avant la version 19 ou WinDev ne gérait pas explicitement les classes abstraites ;

- après la version 19, avec l'introduction du mot clé « abstraite ».

EDIT : 19/03/2016, mise à jour de l'article initiale pour prendre en compte la nouveauté de la version 19.