POO - TP - 00 - Partie 2 - C#
POO - TP - 00 - Partie 2 - C#
FAKHOURI
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 »
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
End Class
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
End Class
End Property
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.
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
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
Exercice 0_9
Créer le diagramme de classe suivant :
z
60 Programmation Orientée Objet : TP 00 H.FAKHOURI
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
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.
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
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:
'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
Exemples:
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).
'Remplir Animals2 avec tous les éléments de Animals après passage par le
converteur RaccourcirNom
'Fonction RaccourcirNom
Private Shared Function RaccourcirNom(ByVal x As String) As String
Return x.Substring(0, 4)
End Function
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
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:
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
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
Exemple :
Dim R As New Regex (“ ^A|a”)
Le modèle difinit pour R indique que l’expression doit commencer par A ou a.