0% ont trouvé ce document utile (0 vote)
404 vues19 pages

POO - TP - 00 - Partie 2 - C#

Ce document décrit l'utilisation des interfaces en programmation orientée objet. Il présente un exemple d'interface Forme avec les méthodes surface et périmètre. Puis il décrit les classes Carré, Cercle et Rectangle qui implémentent cette interface. Le document présente également un exercice d'application pour dessiner des formes géométriques.

Transféré par

Abderrahim TANAN
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
404 vues19 pages

POO - TP - 00 - Partie 2 - C#

Ce document décrit l'utilisation des interfaces en programmation orientée objet. Il présente un exemple d'interface Forme avec les méthodes surface et périmètre. Puis il décrit les classes Carré, Cercle et Rectangle qui implémentent cette interface. Le document présente également un exercice d'application pour dessiner des formes géométriques.

Transféré par

Abderrahim TANAN
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

52 Programmation Orientée Objet : TP 00 H.

FAKHOURI

Rappel : les Interfaces


Une interface est un ensemble de prototypes de méthodes ou de propriétés qui forme un contrat. Une
classe qui décide d'implémenter une interface s'engage à fournir une implémentation de toutes les
méthodes définies dans l'interface. C'est le compilateur qui vérifie cette implémentation.
On peut considérer qu’une interface est une classe où toutes ces méthodes sont abstraites
Une interface est comme une classe, ne peuvent pas être instancie
Syntaxe
Créer une interface interface1
Public Interface Interface1
Function f1() As type1
sub p1()
...
End Interface
Créer une classe c1 qui implémente l’interface interface1
Public Class C1
Implements Interface1

Public Function f1() As Double Implements Interface1.f1


...
End Function

Public sub p1()Implements Interface1.p1


...
End Function
End Class

Exemple :
L’objectif est de créer une application d’aide aux élèves du primaire pour comprendre les notions des
formes géométriques de base.
Les formes traitées sont : Rectangle, carré et cercle.
Toute forme aura besoin d’une méthode pour calculer la surface est une autre pour calculer le périmètre,
pour créer ce contrat (ces règles) on utilise une interface avec ces deux méthodes.
Forme « Interface »

Function surface() : Double


Function perimetre() Double
Par la suite toute classe qui décide d’implémenter cette interface s’engage à définir ces deux fonctions.
La classe Carré :
Un carré est caractérisé par sa largeur :
Carre
 Forme
- _largeur: double
+propriétés
+constructeurs
 surface() : double
 perimetre() : double

La classe Cercle :
Une Cercle est caractérisé par un rayon :
Cercle
 Forme
- _rayon: double
+propriétés
+constructeurs
 surface() : double
 perimetre() : double
La classe Rectangle :
53 Programmation Orientée Objet : TP 00 H.FAKHOURI

Un rectangle est caractérisé par la largeur et longueur:


Rectangle
 Forme
- _largeur: double
+propriétés
+constructeurs
 surface() : double
 perimetre() : double

Implémentation Interface Forme


Public Interface Forme
Function surface() As Double
Function perimetre() As Double
End Interface

Implémentation Classe Caree


Public Class Caree
Implements Forme
Private _largeur As Integer

Public Property Largeur() As Integer


Get
Return _largeur
End Get
Set(ByVal value As Integer)
If value > 0 Then
_largeur = value
Else
Throw New Exception("valeur négative invalidée")
End If
End Set
End Property

Public Sub New()


_largeur = 1
End Sub
Public Sub New(ByVal l As Integer)
_largeur = l
End Sub
Public Sub New(ByVal c As Caree)
Largeur = c.Largeur
End Sub

'implémentation (redéfinition) de la méthode perimetre()


Public Function perimetre() As Double Implements Forme.perimetre
Return _largeur * 4
End Function

'implémentation (redéfinition) de la méthode surface()


Public Function surface() As Double Implements Forme.surface
Return _largeur ^ 2
End Function

Public Overrides Function ToString() As String


Return "Caree: " & Largeur
End Function

End Class

Implémentation classe Cercle


Public Class Cercle
Implements Forme
Private _rayon As Integer

Public Property Rayon() As Integer


54 Programmation Orientée Objet : TP 00 H.FAKHOURI

Get
Return _rayon
End Get
Set(ByVal value As Integer)
If value > 0 Then
_rayon = value
Else
Throw New Exception("valeur négative invalidée")
End If
End Set
End Property

Public Sub New()


_rayon = 1
End Sub
Public Sub New(ByVal l As Integer)
_rayon = l
End Sub
Public Sub New(ByVal c As Cercle)
Rayon = c.Rayon
End Sub

'implémentation (redéfinition) de la méthode perimetre()


Public Function perimetre() As Double Implements Forme.perimetre
Return Rayon * 2 * Math.PI
End Function

'implémentation (redéfinition) de la méthode surface()


Public Function surface() As Double Implements Forme.surface
Return Rayon ^ 2 * Math.PI
End Function

Public Overrides Function ToString() As String


Return "Cercle: " & Rayon
End Function

End Class

Implémentation classe Rectangle


Public Class Rectangle
Implements Forme

Private _largeur As Integer


Private _longueur As Integer

Public Property Largeur() As Integer


Get
Return _largeur
End Get
Set(ByVal value As Integer)
If value > 0 Then
_largeur = value
Else
Throw New Exception("valeur négative invalidée")
End If
End Set
End Property
Public Property Longueur() As Integer
Get
Return _longueur
End Get
Set(ByVal value As Integer)
If value > 0 Then
_longueur = value
Else
Throw New Exception("valeur négative invalidée")
End If
End Set
55 Programmation Orientée Objet : TP 00 H.FAKHOURI

End Property

Public Sub New()


_largeur = 1
End Sub
Public Sub New(ByVal la As Integer, ByVal lo As Integer)
_largeur = la
_longueur = lo
End Sub
Public Sub New(ByVal c As Rectangle)
Largeur = c.Largeur
Longueur = c.Longueur
End Sub

'implémentation (redéfinition) de la méthode perimetre()


Public Function perimetre() As Double Implements Forme.perimetre
Return (Largeur + Longueur) * 2
End Function

'implémentation (redéfinition) de la méthode surface()


Public Function surface() As Double Implements Forme.surface
Return Largeur * Longueur
End Function

Public Overrides Function ToString() As String


Return "Rectangle: " & Largeur & " x " & Longueur
End Function
End Class

Exercice d’application
L’application permettra de dessiner une forme géométrique (Carré, Rectangle ou Cercle) à partir des
coordonnées (x,y) avec la couleur choisi par l’utilisateur (noir, bleu, vert ou rouge).
Les différentes formes géométriques doivent être stockées dans un tableau convenable et chargé dans une
liste.
1. Créer l’interface graphique suivante :
56 Programmation Orientée Objet : TP 00 H.FAKHOURI

Le choix d’un type de forme géométrique (Carré, Rectangle ou Cercle) paramètre l’affichage des zones de
textes pour la saisie des données (Largeur pour un carré, Largeur et Longueur pour un rectangle ou Rayon
pour une cercle)
 Option Carré

 Option Rectangle

 Option Cercle

2. Le bouton ajouter permet de créer une forme et de l’ajouter au tableau des formes et à la liste.

3. Le bouton effacer la liste permet de vider le tableau des formes et effacer la liste
4. Le choix d’un élément dans la liste permet de le dessiner avec les paramètres sélectionnés par
l’utilisateur (couleur et coordonnées (x,y))
57 Programmation Orientée Objet : TP 00 H.FAKHOURI

N.B
Avant de pouvoir dessiner des traits et des formes, de rendre du texte ou d'afficher et de manipuler des images
avec GDI+, vous devez créer un objet Graphics. L'objet Graphics représente une surface de dessin GDI+ et
l'objet utilisé pour créer des images graphiques.

Deux étapes sont nécessaires à l'utilisation de graphiques :


1.Création d'un objet Graphics.
2.Utilisation de l'objet Graphics pour dessiner des traits et des formes, pour rendre du texte ou pour
afficher et manipuler des images.
Un objet Graphics peut être créé de diverses manières.

Pour créer un objet Graphics


• Recevoir une référence à un objet Graphics dans le cadre de PaintEventArgs de l'événement Paint d'un
formulaire ou d'un contrôle. Cette approche est généralement utilisée pour obtenir une référence à un
objet Graphics lors de la création du code de peinture d'un contrôle.
- ou -
• Appelez la méthode CreateGraphics d'un contrôle ou d'un formulaire afin d'obtenir une référence à un
objet Graphics représentant la surface de dessin de ce contrôle ou formulaire. Utilisez cette méthode si
vous voulez dessiner sur un formulaire ou un contrôle existant.
- ou -
• Créez un objet Graphics à partir de n'importe quel objet héritant de la classe Image. Cette approche est
utile si vous voulez modifier une image existante.
Les sections qui suivent expliquent en détail chacun de ces processus.
Vous pouvez aussi appeler la méthode CreateGraphics d'un contrôle ou d'un formulaire afin d'obtenir une
référence à un objet Graphics représentant la surface de dessin de ce contrôle ou formulaire.

Pour créer un objet Graphics à l'aide de la méthode CreateGraphics


• Appelez la méthode CreateGraphics du formulaire ou contrôle sur lequel vous voulez rendre des
graphiques.
Dim g as Graphics
' Sets g to a Graphics object representing the drawing surface of the
' control or form g is a member of.
g = Me.CreateGraphics
Une autre solution consiste à créer un objet Graphics à partir de n'importe quel objet dérivé de la classe Image.

Pour créer un objet Graphics à partir d'un objet Image


• Appelez la méthode Graphics.FromImage, en fournissant le nom de la variable Image à partir de laquelle
vous voulez créer un objet Graphics.

L'exemple ci-dessous explique comment utiliser un objet Bitmap :


Dim myBitmap as New Bitmap("C:\Documents and Settings\Joe\Pics\myPic.bmp")
Dim g as Graphics = Graphics.FromImage(myBitmap)
Une fois l'objet Graphics créé, il peut être employé pour dessiner des traits et des formes, pour rendre du texte
ou pour afficher et manipuler des images. Les principaux objets utilisés avec l'objet Graphics sont les suivants :
• La classe Pen est utilisée pour dessiner des traits, tracer le contour de formes ou rendre d'autres
représentations géométriques.
• La classe Brush est utilisée pour remplir des zones de graphiques, telles que du texte, des images ou des
formes remplies.
• La classe Font décrit les formes à utiliser pour le rendu de texte.
• La structure Color représente les différentes couleurs à afficher.

Pour utiliser l'objet Graphics que vous avez créé


• Utilisez l'objet approprié figurant dans la liste ci-dessus pour dessiner ce dont vous avez besoin.
Pour plus d'informations, consultez les rubriques suivantes :

Pour rendre Consultez

Traits Comment : dessiner une ligne dans un Windows Form

Formes Comment : dessiner une forme avec contour

Texte Comment : dessiner du texte dans un Windows Form

Formes Comment : remplir une forme avec une couleur unie


58 Programmation Orientée Objet : TP 00 H.FAKHOURI

 Cet exemple dessine une ligne dans un formulaire.


Dim myPen As New System.Drawing.Pen(System.Drawing.Color.Red)
Dim formGraphics As System.Drawing.Graphics
formGraphics = Me.CreateGraphics()
formGraphics.DrawLine(myPen, 0, 0, 200, 200)
myPen.Dispose()
formGraphics.Dispose()

 Cet exemple dessine des ellipses et des rectangles avec contour dans un formulaire.
Private Sub DrawEllipse()
Dim myPen As New System.Drawing.Pen(System.Drawing.Color.Red)
Dim formGraphics As System.Drawing.Graphics
formGraphics = Me.CreateGraphics()
formGraphics.DrawEllipse(myPen, 0, 0, 200, 300)
myPen.Dispose()
formGraphics.Dispose()
End Sub

Private Sub DrawRectangle()


Dim myPen As New System.Drawing.Pen(System.Drawing.Color.Red)
Dim formGraphics As System.Drawing.Graphics
formGraphics = Me.CreateGraphics()
formGraphics.DrawRectangle(myPen, 0, 0, 200, 300)
myPen.Dispose()
formGraphics.Dispose()
End Sub

 L'exemple de code suivant montre comment utiliser la méthode DrawString de Graphics pour dessiner du
texte sur un formulaire
Public Sub DrawString()
Dim formGraphics As System.Drawing.Graphics =
Me.CreateGraphics()
Dim drawString As String = "Sample Text"
Dim drawFont As New System.Drawing.Font("Arial", 16)
Dim drawBrush As New _
System.Drawing.SolidBrush(System.Drawing.Color.Black)
Dim x As Single = 150.0
Dim y As Single = 50.0
Dim drawFormat As New System.Drawing.StringFormat
formGraphics.DrawString(drawString, drawFont, drawBrush, _
x, y, drawFormat)
drawFont.Dispose()
drawBrush.Dispose()
formGraphics.Dispose()
End Sub

 Un objet Brush GDI+ est utilisé pour remplir l'intérieur d'une forme fermée. GDI+ définit plusieurs styles de
remplissage : couleur unie, motif hachuré, texture d'image et couleur dégradée

Private Sub DrawEllipse()


Dim c As Drawing.Brush = Brushes.Green
Dim formGraphics As System.Drawing.Graphics
formGraphics = Me.CreateGraphics()
formGraphics.FillRectangle(c, 0, 0, 200, 300)
c.Dispose()
formGraphics.Dispose()
End Sub
59 Programmation Orientée Objet : TP 00 H.FAKHOURI

Exercice 0_9
Créer le diagramme de classe suivant :

z
60 Programmation Orientée Objet : TP 00 H.FAKHOURI

Salaire Formateur = Salaire de base + masse horaire x 100


Salaire Agent = Salaire de base + prime
L’application vise à gérer le personnel d’un établissement de formation professionnelle, ainsi que les
stagiaires inscrit.
Créer une application MDI avec un menu convenable pour accéder aux formulaires :
a. Gestion des stagiaires

 Le bouton ajouter permet d’ajouter le stagiaire à un tableau de stagiaire (ou une collection)
 Le bouton modifier permet de demander à l’utilisateur de saisir le nom du stagiaire via une
InputBox puis rechercher et afficher ce stagiaire et changer le texte du bouton en Enregistrer.
désactiver les boutons Ajouter à la liste et supprimer.
 Le bouton enregistrer permet de modifier les informations du stagiaire
 Le bouton supprimer permet de demander à l’utilisateur le nom du stagiaire, rechercher ce
stagiaire, afficher ces informations s’il existe avec un message d’avertissement « êtes-vous sûre de
vouloir supprimer ce stagiaire » et le supprimer si la réponse est OUI.
 Le bouton charger la liste permet de charger les stagiaires déjà enregistrés dans le tableau des
stagiaires dans la grille, avec une case à coché devant chaque stagiaire (utiliser la propriété
CheckBoxs)

 Le bouton Ajouter groupe X permet d’ajouter les stagiaires actives dans la grille à la liste des
stagiaires du groupe X (ListBox au dessous)
 Actualiser les données affichées dans les zones de texte (nombre d’éléments, Groupe A…) au
nécessaire.
61 Programmation Orientée Objet : TP 00 H.FAKHOURI

b. Gestion des employés

 Le bouton ajouter permet d’ajouter l’employé (Agent/formateur) à un tableau des employés ainsi
qu’à la grille (la grilles est répartit en deux groupe).
 Le bouton Modifier permet de charger / modifier l’employé sélectionné dans la grille.
 Le bouton Supprimer permet de supprimer l’employé sélectionné dans la grille.
 Changer la colonne Date embauche par Ancienneté
Rappel : Collection
1- Définition :
Une collection est une classe qui représente un regroupement d’objets qui peuvent être de
même type ou de type différent; c’est un objet similaire à un tableau dynamique dans lequel on peut
insérer ou supprimer des éléments aisément à l’aide des méthodes prédéfinies dans la classe.
Il est intéressant de classer les collections par fonction:
 les List, comme dans l'exemple simpliste. On a un Index pour repérer les éléments (Pas de clé).

Toto
Lulu
Titi

 les Dictionnaires, chaque élément à une clé, on parle de Collection Clé-Valeur. On utilise la clé pour
retrouver une valeur.

Certaines collections combinent List et Dictionnaire, d'autres sont triées automatiquement.


Enfin il y a des collections particulières: les Piles, Queue, HashSet, SortedSet....
Certaines collections peuvent contenir des objets, d'autres des Strings ou des Bytes..
Certaines collections utilisent, elles, les génériques: Elles sont faites pour contenir des génériques c'est
à dire ce que l'on veut. Quand on utilise la Collection, on indique le type. Du coup la collection est
fortement typée: elle ne peut contenir qu'un type de donnée.
Exemple : List(Of String) est une List ne pouvant contenir que des Strings.
62 Programmation Orientée Objet : TP 00 H.FAKHOURI

Voici les principales collections:

 Les Listes:ArrayList, List(Of..) VB 2005


 Les Dictionnaires:HashTable, Dictionnary
 Les Listes-Dictionnaires:SortedList,DictionnaryList
 Les Queue et les Queue (Of..)
 Les Piles: Les Stack et les Stack (Of..)
 Les Listes chaînées Les LinkedList(Of....) VB 2005
 Gestion des ensembles: Les HashSet VB 2008
 Collections travaillant sur les Bits:BitArray, BitVector32
 Collections triée: SortedList, SortedDictionnary SortedSet du framework 4
 Autres: ObservableCollection

2- Type de collections :
a- Classe Collection :
 Présentation :
C’est une classe hérité des versions anciennes de VB, ces objets sont de base 1 c'est-à-
dire l’indice du premier élément est 1 et l’indice du dernier c’est Count.
 Déclaration :
Dim Col As New Collection
 Manipulation:
Add: Ajout d’élément dans la collection. La méthode à plusieurs signatures.
 La premier surcharge : Col.Add(“Chaine 1 “)
 La 2ème surcharge est : Col.Add(“C1”, “K1”) où on doit ajouter une clé ( clé
primaire)
 La 3ème surcharge est : Col.Add(“C1”, “K1”,before, after). Cette signature
permet d’insérer l’élément non pas à la fin de la collection mais avant ou
après un élément spécifié par son indice ou sa clé
Exemple:
Dim Col As New Collection
Col.Add(“Chaine 1 “) Clé
Ou// Col.Add(“C1”, “K1”)
Col.Add(“C1”, “K1”,before, after)

Clé

Remove: Col.Remove(Clé)
For i=1 to Col.Count
‘Traitement/// Col.item(i) {ou} Col(i)
Next
For each E in Col
‘Traitement // Console.WriteLine(E)
Next
Count : Le nombre des éléments de la collection
Indexof : l’indice d’un élément dans la collection
b- Classe ArrayList:
 Présentation:
C’est une collection à base 0 qui offrent plus de facilité de traitement par rapport à la
première.
 Déclaration :
Dim Ar As New ArrayList
 Manipulation :
63 Programmation Orientée Objet : TP 00 H.FAKHOURI

For i=0 to Ar.Count-1


Console.WriteLine(Ar.Item(i) {ou} Ar(i))
Next
For Each E in Ar
Console.WriteLine(E)
Next
Add: Ar.Add(Obejt) {Ou} Ar.Insert(indice,Objet)
Remove: Ar.Remove(Objet) {Ou} Ar.RemoveAt(indice) {Ou pour supprimer plusieurs
objets} Ar.RemoveRange(indice,nbr)
Clear : effacer tous les éléments.
Clone : créer une copie.
Containts(élément) : Retourne True si la liste contient 'élément'

c- Classe List(Of:
 Présentation:
A partir de 2005 on a des collections que l'on peut typer, c'est à dire qu'elles ne
pourront contenir qu'un type de donnée, que des String, des entiers, des instances de
telle classe... On parle de collections génériques. Le terme Of permet de définir le type
de la collection.
 Déclaration :
Dim lst As New List (Of Article): permet de créer une collection des articles (une liste ne
contenant que des objets de type 'Article').
 Manipulation :
For Each element As Article In lst
Console.WriteLine(element.toString)
Next
Rechercher un élément dans la liste:

lst.IndexOf("lulu") 'retourne l'index de l'élément qui contient "lulu"

lst.IndexOf("lulu", 2,7) recherche à partir de l'élément 2 et sur 7 éléments.


Il existe aussi LastIndexOf.
On peut copier une List ou une partie de la List dans un tableau:

'Avec CopyTo
Dim array(14) As String 'tableau
lst.CopyTo(array) 'copier la list dans le tableau
lst.CopyTo(array, 6) 'copier 6 éléments de la list dans le tableau
lst.CopyTo(2, array, 12, 3) 'index de départ dans list, tableau, index de
départ dans array, nombre

'Avec GetRange
Dim output() As String = lst.GetRange(2, 3).ToArray()
On voit que List (Of) possède toutes les méthodes des ArrayList, mais en plus il existe des méthodes
propres aux collections génériques (à partir du Framework 2):

 Exists : List contient-il des éléments qui correspondent aux conditions définies par un prédicat?
 TrueForAll : Chaque élément dans List correspond-il aux conditions définies par un prédicat?
 Find : Recherche un élément qui correspond aux conditions définies par le prédicat et retourne la
première occurrence.
 FindLast : Idem pour la dernière occurrence.
 FindAll : Récupère tous les éléments qui correspondent aux conditions définies par le prédicat.
 ConvertAll : Chaque élément est passé individuellement à un Converter, et les éléments convertis
sont enregistrés dans la nouvelle collection.
 RemoveAll : Efface les éléments qui correspondent au Predicat
64 Programmation Orientée Objet : TP 00 H.FAKHOURI

La syntaxe est de la forme ListeResultat= List.Find(Liste, AdresseOf Predicat)


Un Predicat est une Fonction qui retourne True si une condition est remplie, ou false sinon.

Exemples:

Exemple 1: Avec FindAll:


J'ai une list 'Animals', je veux mettre dans 'listResult' tous les éléments de Animals qui se terminent par 'us'.
On crée une liste (listResult) qui grâce à FindAll se chargera des éléments de Animals qui répondent à une
condition:

'List de String contenant des noms d'animeaux


Dim Animals As New List(Of String) From {"Compsognathus", _
"Amargasaurus", "Oviraptor", "Velociraptor", _
"Deinonychus", "Dilophosaurus", "Gallimimus", _
"Triceratops"}

Dim listResult As List(Of String) = Animals.FindAll(AddressOf SeTermineParUS)


En argument de FindAll on a l'adresse d'une fonction: ici la fonction 'SeTermineParUS'. Pour chaque
élément de Animals si SeTermineParUS retourne True, l'élément correspondant est passé dans listResult.

Voici la fonction de test, le Predicat.

Private Shared Function SeTermineParUS (ByVal s As String) As Boolean


If (s.Length > 2) AndAlso (s.Substring(s.Length - 2).ToLower() = "lu") Then
Return True
Else
Return False
End If
End Function

Exemple 2:
Avec ConvertAll on obtient à partir d'une première liste, une seconde liste ou chaque élément à été
convertit par une fonction.
Ici on a une liste d'animaux , on va obtenir une seconde liste avec des noms court (4 caractères).

'List de String contenant des noms d'animeaux


Dim Animals As New List(Of String) From {"Compsognathus", _
"Amargasaurus", "Oviraptor", "Velociraptor", _
"Deinonychus", "Dilophosaurus", "Gallimimus", _
"Triceratops"}
'Seconde list de String
Dim Animals2 As New List(Of String)

'Remplir Animals2 avec tous les éléments de Animals après passage par le
converteur RaccourcirNom

Animals2 = Animals.ConvertAll(New Converter(Of String, String)(AddressOf


RaccourcirNom))

'Afficher la seconde list


For Each dinosaur As String In Animals2
Console.WriteLine(dinosaur)
Next

'Fonction RaccourcirNom
Private Shared Function RaccourcirNom(ByVal x As String) As String
Return x.Substring(0, 4)
End Function

Trier une List:

Soit une liste (Of String) de noms d'animaux, on veut trier par ordre alphabétique:
On utilise Sort.
65 Programmation Orientée Objet : TP 00 H.FAKHOURI

Dim Animals As New List(Of String) From {"Compsognathus", _


"Amargasaurus", "Oviraptor", "Velociraptor", _
"Deinonychus", "Dilophosaurus", "Gallimimus", _
"Triceratops"}
Animals.Sort()

Mais on peut indiquer une Fonction qui va definir la manière de trier: Ici je veux trier en fonction de la
longueur des String:
Je vais indiquer l'adresse de ma fonction de comparaison comme argument de Sort:

Dim Animals As New List(Of String) From {"Compsognathus", _


"Amargasaurus", "Oviraptor", "Velociraptor", _
"Deinonychus", "Dilophosaurus", "Gallimimus", _
"Triceratops"}
Animals.Sort(AddressOf CompareByLength)
'Avec la fonction:
Private Shared Function CompareByLength( _
ByVal x As String, ByVal y As String) As Integer
Return x.Length.CompareTo(y.Length)
End Function

d- Classe Queue (File d’attente):


 Présentation :
C’est une classe permettant d’instancier des collections basés sur le principe FIFO : First In
First Out (c'est-à-dire le 1er élément inséré sera le premier d’être supprimé)
 Déclaration :
Dim Q As New Queue
 Utilisation :
 Insertion :
Q.Enqueue ( Objet) >>> l élément sera ajouter à la fin
 Suppression :
Q.Dequeue() >>>> Le 1er élément inséré va être supprimé
 Pour la classe Queue on dispose aussi de la méthode Peek « Q.Peek() »
elle permet de retourner le 1er élément sans le supprimer.
 Boucle de parcours :
For i=0 To Q.Count-1
Console.WriteLine(Q(i).ToString)
Next
For Each O in Q
Console.WriteLine(O)
Next

e- Classe stack: (Pile)


 Présentation:
C’est une classe permettant d’instancier des collections basé sur le principe LIFO :
Last In / First Out (c'est-à-dire le dernier élément inséré dans la collection sera le premier
d’être supprimé).
 Déclaration:
Dim S As New Stack
 Utilisation:
 Insertion :
S.push (Objet)
66 Programmation Orientée Objet : TP 00 H.FAKHOURI

 Suppression:
Var= S.pop()
La classe stack dispose de la méthode Peek permettant de retourner le
dernier élément sans le supprimé.
 la classe Queue on dispose aussi de la méthode Peek « Q.Peek() » elle
permet de retourner le dernier élément sans le supprimer.
 Boucle de parcours :
For i=0 To Q.Count-1
Console.WriteLine(Q(i).ToString)
Next
For each O in Q
Console.WriteLine(O)
Next
f- SortedList
 Présentation :
C’est une classe permettant d’instancier des collections de paires de clé/value, trié
en ordre croissant en fonction des clés. La clé représente l’identifiant de chaque élément
de la collection sortedList ; une clé associée à un élément peut être de n’importe quel type
et pas forcement String.
SortedList

Keys Values
 Déclaration :
Dim St As New SortedList
 Utilisation :
 Ajout:
St.Add(Key,Value)
 Suppression:
St.remove(key)
St.removeAt(indice)
 Rechercher:
St.contains(key)
St.containskey(key)
St.containsValue(Value)
St.indexOfKey(Key)
St.indexOfValue(value)
 Boucle de parcours :
For i=0 To st.Count-1
Console.WriteLine(st.Keys(i) & “ “ & st.value(i))
Next
For each O As DictionaryEntry in St
Console.WriteLine(O.key & “ ” & O.Value)
Next

g- Classe HashTable:
 Présentation:
C’est une classe permettant d’instancié les collections de paires Clé/valeur, qui sont
trié en fonction du code de hachage des clés.
Remarque :
Une fonction de hachage permet d’associé à toute clé de la collection un indice de la table.
67 Programmation Orientée Objet : TP 00 H.FAKHOURI

 Déclaration :
Dim H As New Hashtable
 Utilisation :
 Ajout:
H.Add(Key,Value)
 Suppression:
H.remove(key)
H.removeAt(indice)
 Rechercher:
H.contains(key)
H.containskey(key)
H.containsValue(Value)
H.indexOfKey(Key)
H.indexOfValue(value)
 Boucle de parcours :
For i=0 To st.Count-1
Console.WriteLine(H.Keys(i) & “ “ & H.value(i))
Next
For Each O As DictionaryEntry in H
Console.WriteLine(O.key & “ ” & O.Value)
Next
Exemple :
Objectifs :
 Comprendre l’utilisation des interfaces IComparable et IComparer .
 Apprendre à créer et utiliser les fonctions du prédicat.
 Trier une liste à l’aide de la méthode sort.
 Rechercher un élément dans une liste à l’aide des méthodes find et findAll

Exercices d’application:
Ex 1:
a. Définir une classe Employé caractérisée par le nom et la date de naissance, la date de recrutement et le
salaire, définir le constructeur d’initialisation pour cette classe, et les accesseurs des propriétés, définir les
méthodes ToString et Equals pour cette classe.
b. Définir un module dans lequel vous créez une collection d’employés à l’aide de la classe Collection, le
module propose à l’utilisateur le menu suivant :
1. Pour ajouter un employé identifié par un code.
2. Pour rechercher un employé par son code
3. Pour supprimer un employé par son code
4. Pour effacer tous les employés
5. Pour afficher la liste des employés
6. Pour quitter le programme
Les employés sont référencés dans la collection par un code qui constitue la clé.
Ex 2:
a. Définir une classe Elève caractérisée par le nom, l’âge et trois notes rangées dans un tableau.
Cette classe implémente l’interface IComparable. Définir le constructeur d’initialisation pour cette classe, et
les propriétés, définir une méthode moyenne qui retourne la moyenne de l’objet en cours, définir les
méthodes ToString, Equals pour cette classe, ainsi que la méthode CompareTo qui implémente
IComparable.CompareTo et qui compare les élèves en terme de moyenne.
b. Définir une classe Elèves qui contient un objet col de type ArrayList. Définir un constructeur par défaut
de cette classe. Ainsi que :
68 Programmation Orientée Objet : TP 00 H.FAKHOURI

1. La méthode Public Sub Ajouter(nom As String, age As Integer, note() As Single) qui permet de
créer un objet de type Elève avec les valeurs passées en argument et de l’ajouter à la collection col.
2. La méthode Public Sub Vider() qui permet d’effacer tous les éléments de la collection col.
3. La propriété Public ReadOnly Property nbre() As Integer permettant d’obtenir le nombre
d’éléments stockés dans la collection col.
4. La méthode Public Sub Inserer(nom As String, age As Integer, note() As Single, i As Integer) qui
permet de créer un objet de type Eleve avec les valeurs passées en paramètre et de l’insérer à la
position i de la collection.
5. La propriété Public Property Elément(i As Integer) As Eleve qui permet d’obtenir et de définir
l’élément qui se trouve à l’indice i de la collection.
6. La méthode Public Function IndiceDe(e As Elève) As Integer qui retourne l’indice de l’élève
passé en paramètre dans la collection ou -1 si l’élève n’existe pas dans la collection.
7. La méthode Public sub Supprimer(i As Integer) qui supprime l’élève qui se trouve à l’indice i.
8. La méthode Public sub Trier() qui réalise le tri des élèves par ordre de mérite (par moyenne
décroissante).
c. Créer un formulaire proposant à l’utilisateur de réaliser les opérations suivantes :
1. Pour ajouter un élève.
2. Pour rechercher un élève par son nom
3. Pour supprimer un élève par son nom
4. Pour effacer tous les élèves
5. Pour afficher la liste des élèves
6. Pour quitter le programme

Ex 3: On désire réaliser un annuaire téléphonique. Pour cela on utilise une collection de type HashTable
dont les clés sont des objets de type Personne, et les valeurs sont les numéros de téléphone. Définir la
classe Personne caractérisée par le nom et le prénom, définir le constructeur d’initialisation pour cette
classe, et les accesseurs des propriétés, définir les méthodes ToString et Equals pour cette classe.
b. Définir une classe Annuaire qui contient un objet col de type HashTable. Définir un constructeur par
défaut de cette classe. Ainsi que :
1. La méthode Public Sub Ajouter(nom As String, prénom As Integer, Tel As String) qui permet de
créer un objet de type Personne avec les valeurs passées en argument et de l’ajouter à la collection
col avec le numéro de téléphone Tel.
2. La méthode Public Sub Vider() qui permet d’effacer tous les éléments de la collection col.
3. La propriété Public ReadOnly Property nbre() As Integer permettant d’obtenir le nombre
d’éléments stockés dans la collection col.
4. La méthode Public Function ContientClé(nom As String, prénom As String) As Boolean qui
détermine si la clé constituée du nom et prénom passés en argument existe dans la collection.
5. La méthode Public Function ContientValeur(Tel As String) As Boolean qui détermine si le
numéro de téléphone passé en argument existe dans la collection.
6. La propriété Public Property Elément(nom As String, prénom As String) As String qui permet
d’obtenir et de définir le numéro de téléphone correspondant à la clé constituée du nom et
prénom passés en argument.
7. La méthode Public sub Supprimer(nom As String, prénom As String) qui supprime l’élément
correspondant à la clé constituée du nom et prénom passés en argument
c. Créer un formulaire permettant d’afficher un menu à l’utilisateur proposant de réaliser les opérations
suivantes :
1. Pour ajouter un contact.
2. Pour rechercher un contact par son nom et prénom
3. Pour supprimer un contact par son nom et prénom
4. Pour effacer tous les contacts
69 Programmation Orientée Objet : TP 00 H.FAKHOURI

5. Pour modifier un contact


6. Pour quitter le programme
Exercice 4: On désire réaliser une application de gestion d’un service de salariés triés par ordre
alphabétique des noms. Pour cela on utilise une collection de type SortedList dont les clés sont des objets
de type Salarié, et les valeurs sont les salaires des employés.
a. Définir la classe Salarié caractérisée par le nom et l’année de recrutement qui doit implémenter
l’interface IComparable, définir le constructeur d’initialisation pour cette classe, et les accesseurs des
propriétés, définir les méthodes ToString et Equals pour cette classe ainsi que la méthode CompareTo qui
doit comparer les salariés en termes de nom (ordre alphabétique).
b. Définir une classe Service qui contient un objet col de type SortedList. Définir un constructeur par défaut
de cette classe. Ainsi que :
1. La méthode Public Sub Ajouter(nom As String, annéeRecrutement As Integer, salaire As
Double) qui permet de créer un objet de type Salarié avec les valeurs passées en argument et de
l’ajouter à la collection col avec le salaire associé.
2. La méthode Public Sub Vider() qui permet d’effacer tous les éléments de la collection col.
3. La propriété Public ReadOnly Property Nbre() As Integer permettant d’obtenir le nombre
d’éléments stockés dans la collection col.
4. La méthode Public Function ContientClé(nom As String) As Boolean qui détermine si la clé
constituée du nom passé en argument existe dans la collection.
5. La propriété Public Property Salaire(Nom As String) As Double qui retourne et modifie le salaire
du salarié identifié par le nom passé en paramètre.
6. La propriété Public Property Salaire(s As Salarié) As Double qui retourne et modifie le salaire du
salarié passé en paramètre.
7. La propriété Public ReadOnly Property Salariés() As ICollection qui permet d’obtenir la liste des
salariés appartenant à la collection col.
8. La méthode Public sub Supprimer(nom As String) qui supprime l’élément correspondant à la clé
constituée du nom du salarié passé en paramètre.
c. Créer une application (Windows Form) permettant d’afficher un menu à l’utilisateur proposant de
réaliser les opérations suivantes :
1. Pour ajouter un salarié.
2. Pour rechercher le salaire d’un salarié
3. Pour supprimer un salarié
4. Pour effacer tous les salariés
5. Pour afficher la liste des salariés et leur salaire
6. Pour quitter le programme

Exercice 0_10
Modifier l’application de l’exercice 0_9 pour fournir à l’utilisateur les fonctionnalités suivantes :
 Trier la liste des stagiaires par Age
 Trier la liste des employés par année d’enceinté
 Trier une personne (Employé / stagiaire) par nom en ordre alphabétique.
 Rechercher une personne (Employé / stagiaire) par nom.
 Rechercher un employé par type (Agent ou Formateur)
L’application sera de type MDI avec un menu convenable.
Exercice 0_11
Reprendre la classe Fraction de l’exercice 0_2 pour en créer une classe Fractions permettant de gérer un
ensemble de plusieurs fraction, cette classe doit avoir les membres suivants :
 Méthode ajouter (avec deux surcharges) permettant d’ajouter une fraction à la liste.
 Méthode supprimer (avec deux surcharges) pour supprimer une fraction.
 Propriété element pour retourner la fraction qui se trouve à l’indice donné en paramètre.
70 Programmation Orientée Objet : TP 00 H.FAKHOURI

 Equals pour teste l’égalité de deux Fractions (deux collections sont égaux si les éléments qui se
trouve au même indice sont égaux)
 toString pour afficher les éléments séparer par « - »
 Méthode TriCroissant permettant de trier les éléments en ordre croissant
 Méthode TriDecroissant permettant de trier les éléments en ordre décroissant
 Méthode somme pour calculer la somme de tous les éléments
 Méthode produit pour calculer le produit de tous les éléments

Rappel : Les Regex


1/ Class Regex:
C’est une classe permettant d’instancier des objets permettront de contrôler des
valeurs de type String en les comparant avec un modèle.
Remarque :
Pour pouvoir utiliser cette classe on doit intégrer un autre programme>>> Imports
System.Text.RegularExpressions
L’espace de nom
2/Déclaration : String
Dim Rg As New (Modèle)

 Exemple :
Dim R As New Regex (“ ^A|a”)
Le modèle difinit pour R indique que l’expression doit commencer par A ou a.

Dim R As New Regex(« ^A|a”)


Dim S As String
S= “text”
Console.wrtieline(R.isMatch(s))
S=”Atext”
Console.writeline(R.ismatch(s))

Vous aimerez peut-être aussi