Vous êtes sur la page 1sur 8

"Mini-lab" WinDev Les listes doublement chaines WinDev 10

Cours WinDev Numro 10




Objectifs : Les listes d'objets doublement chanes.

Cration d'objets dynamique.
Cration de liste.
Ajout dans une liste.
Suppression d'un objet dans la liste.
La rcursivit.

Pr-requis : Avoir fait les cours sur les objets

Les listes chanes constituent une alternative aux tableaux. L'ajout, l'insertion et le retrait d'information y sont trs
rapides et la longueur totale de la liste est inconnue au dpart. Cependant, la recherche est lente, la sauvegarde dlicate.

Une liste chane est un ensemble de cellules, d'objets, de structures, reli entre eux par des pointeurs

On pourrait reprsenter une liste chane comme ceci :


Dbut
Donnes Utilisateur

Fin










L'inconvnient majeur des listes simplement chanes est qu'on ne peut les parcourir que du dbut vers la fin.

La solution c'est la liste doublement chane :


Donnes Utilisateur
Fin Dbut












Ce nouveau support va vous faire programmer une liste doublement chane.

Pour commencer, crez un nouveau projet nomm "ListeDC", ce projet ne gre aucune analyse. Il contiendra une
fentre et une classe.

J ean-Luc Baptiste www.btsig.org Page 1 / 8
"Mini-lab" WinDev Les listes doublement chaines WinDev 10
La fentre :

Crez une nouvelle fentre que vous nommerez "Dpart".

Voici ses dimensions : 350x230





Tableau d'objets :

Type de champ Nom Libelle Position relative Taille
Bouton Bremplir Remplir 150, 153 80X24
Bouton Bvoir Voir la liste 6, 6 80X24
Bouton Bsupprime Supprimer 6, 48 80X24
Champ liste Listeprnom Aucun 121, 8 150x128

Vous n'oublierez pas de mettre cette fentre comme premire du projet.

Le rle du bouton "Remplir" est de remplir la liste doublement chane d'lments, ici une liste de prnoms et de les
ajouter dans la liste chane.

Le bouton "Voir la liste" efface les lments prsents dans la zone d'affichage "liste" et inscrit ceux contenus dans la
liste chane.

Le bouton "Supprimer" supprime la fois dans la liste chane et dans la zone d'affichage "liste".

Voil pour le dcor, passons la ralisation. Pour que tout fonctionne, nous avons besoin d'une classe nomme
"Cliste".

J ean-Luc Baptiste www.btsig.org Page 2 / 8
"Mini-lab" WinDev Les listes doublement chaines WinDev 10
J e vous laisse la concevoir partir de ce diagramme UML.



Voyons ensemble cette classe.

Les attributs comportent :

Un objet nomm Oprcdent charg de contenir la rfrence de l'objet Cliste prcdent (ce qui explique le lien
de r-entrance).
Un objet nomm Osuivant charg de contenir l'objet Cliste suivant.
Une chaine nomme Lenom qui contiendra la valeur faire afficher.

Les mthodes publiques sont celles qui seront ncessaires la mise en uvre de la classe :

Pour faire fonctionner une liste nous avons besoin :

D'ajouter un lment l'intrieur,
De supprimer un lment,
De lire.

Nous aurions aussi besoin d'insrer et de modifier mais je vous laisse le soin de crer vous mme ces 2 mthodes l !

Les mthodes prives sont des mthodes fonctionnelles inaccessibles de l'extrieur. Elles servent aux diffrents
positionnements ou dplacement dans la liste. Pour les besoins du cours, il n'y a aucune optimisation donc les puristes
vont pouvoir trouver de quoi s'amuser en exercice.

J e pense que vous venez de voir quelles mthodes vont activer les 3 boutons ?

On dcortique la classe ?

J ean-Luc Baptiste www.btsig.org Page 3 / 8
"Mini-lab" WinDev Les listes doublement chaines WinDev 10


Comme vous le voyez dans la dclaration de la classe Cliste on lui signifie qu'elle contiendra 2 objets Cliste
dynamiques ( par rfrence ).

La mthode ajouter :



Explications : La mthode ajouter est charge d'ajouter une valeur dans notre liste chane. On vrifie que la valeur
passe en paramtre est valide. Ensuite on teste si l'attribut "lenom" de l'objet en cours est affect ou pas s'il n'est pas
affect on lui affecte la variable passe en paramtre sinon on appelle la mthode parcourir en lui passant en paramtre
l'objet en cours et la valeur ajouter dans la liste chane.

La mthode Parcourir :



La mthode parcourir comme but de parcourir la liste chane vers la fin jusqu' ce qu'elle trouve un emplacement
"Objet suivant" vide (Null). Ds qu'elle a une place libre, elle y affecte la rfrence du nouvel objet.
Toute l'lgance de cette mthode tient au fait quelle est rcursive, c'est dire quelle se rappelle jusqu' ce quelle
trouve une place libre. Remarquez la chose suivante : au dbut la mthode Parcourir a comme paramtre objet l'objet
en cours, ensuite en rcursivit elle prend l'objet suivant et si elle n'a pas trouv, elle progresse d'objet suivant en objet
suivant.
J e suis clair ?

J ean-Luc Baptiste www.btsig.org Page 4 / 8
"Mini-lab" WinDev Les listes doublement chaines WinDev 10

Voici une autre mthode utilisant la rcursivit. Son but est de renvoyer le premier objet de la liste chane. Etudiez son
comportement.

La mthode Dbutliste :



La mthode lire:

Cette mthode fait passer l'objet en cours la mthode "dbutliste" qui recherche le premier objet de la liste chane et
donne la rfrence du premier objet "lobjet". Une fois ceci ralis, la mthode supprime tout le contenu de la liste de
la fentre "dpart". Ensuite, elle enclenche une mthode de lecture de la liste chane.




Mthode Lire_suivant:

Cette mthode rcursive remplit la liste de la fentre "dpart" du dbut de la liste chane la fin. J e vous laisse
l'analyser.



J ean-Luc Baptiste www.btsig.org Page 5 / 8
"Mini-lab" WinDev Les listes doublement chaines WinDev 10
La mthode Rechercher :

Comme vous le voyez cette mthode recherche dans un objet une valeur, pour progresser dans la liste chane il
emploie la mthode "Avance".



La mthode Avance :
C'est beau la rcursivit, je ne m'en lasse pasAllez je vous laisse comprendre ce qu'elle fait, c'est simple.



La mthode Supprimer :

Celle l c'est ma prfre ! Elle utilise la mthode "dbutliste" pour se positionner en dbut de liste, elle lance ensuite
la mthode de recherche de valeur.
Une fois l'objet contenant la valeur trouv, elle le supprime. En fait elle ne le supprime pas pour de vrai, on pourrait
dire qu'elle le dbranche de la liste. Regardez ce qu'elle fait sur ce dessin (on dbranche p_1) :



J ean-Luc Baptiste www.btsig.org Page 6 / 8
"Mini-lab" WinDev Les listes doublement chaines WinDev 10


C'est magique, non ? Voici le code :



Voil la dfinition de la classe est finie.
Voyons le code des objets de la fentre :

On dmarre par le code de la fentre "dpart" :
Ici on dfinit un objet "maliste" de type "Cliste"



J ean-Luc Baptiste www.btsig.org Page 7 / 8
"Mini-lab" WinDev Les listes doublement chaines WinDev 10
Voyons maintenant le code du bouton "Bremplir".
Comme vous le voyez, il vide la liste contenant les prnoms, ensuite il la remplit avec les valeurs de bases et enfin il
ajoute tout les lments de la liste dans la liste doublement chane.



Voici le code du bouton "Bsupprime" :

On supprime la valeur pointe et ensuite on fait rafficher la liste doublement chane.



Voici le dernier code, celui du bouton "Bvoirliste" :



On excute quelques clics ?
Lancer le projet et commencez par cliquer sur le bouton voir liste, comme vous pouvez le constater rien ne s'affiche
dans la zone liste.
Maintenant cliquez sur remplir, la liste de prnom est remplie ainsi que la liste doublement chane.
Slectionnez un lment (moi par exemple NdL : moi c'est J ean-Luc) et hop on le supprime !
Magique, je viens de disparatre !

Voil, je viens de finir de vous parler des listes doublement chanes.

Exercices.

Pour vous entraner :

Cliquez sur le premier lment de la liste : Comme vous le voyez il y a un big problme. J e vous laisse
analyser le problme et y trouver une solution (en fait, il y en a deux possibles)

Programmez les mthodes permettant :

D'insrer un lment avant la position de l'lment slectionn.
De trier la liste par ordre croissant ou dcroissant.

J ean-Luc Baptiste www.btsig.org Page 8 / 8