1. 10
III. 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. Voici par exemple la définition de l'interface Istats :
Public Interface Istats
Function moyenne() As Double
Function écartType() As Double
End Interface
Toute classe implémentant cette interface sera déclarée comme
public class C
Implements Istats
...
function moyenne() as Double Implements Istats.moyenne
...
end function
function écartType () as Double Implements Istats. écartType
...
end function
end class
Les méthodes [moyenne] et [écartType] devront être définies dans la classe C.
Une classe peut en même temps hériter une autre classe et implémenter une interface :
Public Class notesStats
Inherits notes
Implements Istats
L’héritage d'interfaces peut être multiple, c.à.d. qu'on peut écrire
Public Class classe
Implements I1,I2,...
où les Ij sont des interfaces.
IV. Les structures
La structure VB.NET est directement issue de la structure du langage C et est très proche de
la classe. Une structure est définie comme suit :
Structure spersonne
' attributs
...
' propriétés
...
' constructeurs
...
' méthodes
End Structure
2. 11
Il y a, malgré une similitude de déclaration, des différences importantes entre classe et
structure. La notion d'héritage n'existe par exemple pas avec les structures.
• la valeur d'une variable de type structure est la structure elle-même
• la valeur d'une variable de type objet est l'adresse de l'objet pointé
3. 1
Chapitre 4 : Classes .NET d'usage courant
I. La classe String
La classe String présente de nombreuses propriétés et méthodes. En voici quelques-unes :
II. La classe Array
La classe Array implémente un tableau. Nous utiliserons dans notre exemple les propriétés et
méthodes suivantes :
Public ReadOnly Property Length As Integer nombre de caractères de la chaîne
Public Default ReadOnly Property Chars(ByVal index As Integer) As
Char
propriété indexée par défaut. [String].Chars(i) est le
caractère n° i de la chaîne
Public Function EndsWith(ByVal value As String) As Boolean rend vrai si la chaîne se termine par value
Public Function StartsWith(ByVal value As String) As Boolean rend vrai si la chaîne commence par value
Overloads Public Function Equals(ByVal value As String) As Boolean rend vrai si la chaîne est égale à value
Overloads Public Function IndexOf(ByVal value As String) As Integer rend la première position dans la chaîne de la chaîne value -
la recherche commence à partir du caractère n° 0
Overloads Public Function IndexOf(ByVal value As String,ByVal
startIndex As Integer) As Integer
rend la première position dans la chaîne de la chaîne value -
la recherche commence à partir du caractère n° startIndex
Overloads Public Shared Function Join(ByVal separator As
String,ByVal value() As String) As String
méthode de classe - rend une chaîne de caractères, résultat
de la concaténation des valeurs du tableau value avec le
séparateur separator
Overloads Public Function Replace(ByVal oldChar As Char,ByVal
newChar As Char) As String
rend une chaîne copie de la chaîne courante où le caractère
oldChar a été remplacé par le caractère newChar
Overloads Public Function Split(ByVal ParamArray separator() As
Char) As String()
la chaîne est vue comme une suite de champs séparés par les
caractères présents dans le tableau separator. Le résultat est
le tableau de ces champs
Overloads Public Function Substring(ByVal startIndex As
Integer,ByVal length As Integer) As String
sous-chaîne de la chaîne courante commençant à la position
startIndex et ayant length caractères
Overloads Public Function ToLower() As String
rend la chaîne courante en minuscules
Overloads Public Function ToUpper() As String rend la chaîne courante en majuscules
Overloads Public Function Trim() As String
rend la chaîne courante débarrassée de ses espaces de début
et fin
4. 2
Le programme suivant illustre l'utilisation de la classe Array :
Module test
Sub Main()
' lecture des éléments d'un tableau tapés au clavier
Dim terminé As [Boolean] = False
Dim i As Integer = 0
Dim éléments1 As Double() = Nothing
Dim éléments2 As Double() = Nothing
Dim élément As Double = 0
Dim réponse As String = Nothing
Dim erreur As [Boolean] = False
While Not terminé
' question
Console.Out.Write(("Elément (réel) " & i & " du tableau (rien pour terminer) : "))
' lecture de la réponse
réponse = Console.ReadLine().Trim()
' fin de saisie si chaîne vide
If réponse.Equals("") Then
Exit While
End If
' vérification saisie
Try
élément = [Double].Parse(réponse)
erreur = False
Catch
Console.Error.WriteLine("Saisie incorrecte, recommencez")
erreur = True
End Try
' si pas d'erreur
If Not erreur Then
' nouveau tableau pour accueillir le nouvel élément
éléments2 = New Double(i) {}
' copie ancien tableau vers nouveau tableau
If i <> 0 Then
Array.Copy(éléments1, éléments2, i)
End If
' nouveau tableau devient ancien tableau
éléments1 = éléments2
' plus besoin du nouveau tableau
éléments2 = Nothing
' insertion nouvel élément
éléments1(i) = élément
' un élémt de plus dans le tableau
i += 1
End If
End While
' affichage tableau non trié
System.Console.Out.WriteLine("Tableau non trié")
For i = 0 To éléments1.Length - 1
Console.Out.WriteLine(("éléments[" & i & "]=" & éléments1(i)))
Next i
' tri du tableau
System.Array.Sort(éléments1)
' affichage tableau trié
System.Console.Out.WriteLine("Tableau trié")
For i = 0 To éléments1.Length - 1
Console.Out.WriteLine(("éléments[" & i & "]=" & éléments1(i)))
Public ReadOnly Property Length As Integer propriété - nombre d'éléments du tableau
Overloads Public Shared Function BinarySearch(ByVal array As
Array,ByVal index As Integer,ByVal length As Integer,ByVal value As
Object) As Integer
méthode de classe - rend la position de value dans le tableau trié array -
cherche à partir de la position index et avec length éléments
Overloads Public Shared Sub Copy(ByVal sourceArray As Array,ByVal
destinationArray As Array,ByVal length As Integer)
méthode de classe -copie length éléments de sourceArray dans
destinationArray -destinationArray est créé pour l'occasion
Overloads Public Shared Sub Sort(ByVal array As Array) méthode de classe -trie le tableau array - celui doit contenir un type de
données ayant une fonction d'ordre par défaut (chaînes, nombres).
5. 3
Next i
' Recherche
While Not terminé
' question
Console.Out.Write("Elément cherché (rien pour arrêter) : ")
' lecture-vérification réponse
réponse = Console.ReadLine().Trim()
' fini ?
If réponse.Equals("") Then
Exit While
End If
' vérification
Try
élément = [Double].Parse(réponse)
erreur = False
Catch
Console.Error.WriteLine("Saisie incorrecte, recommencez")
erreur = True
End Try
' si pas d'erreur
If Not erreur Then
' on cherche l'élément dans le tableau trié
i = System.Array.BinarySearch(éléments1, 0, éléments1.Length, élément)
' Affichage réponse
If i >= 0 Then
Console.Out.WriteLine(("Trouvé en position " & i))
Else
Console.Out.WriteLine("Pas dans le tableau")
End If
End If
End While
End Sub
End Module
La première partie du programme construit un tableau à partir de données numériques tapées
au clavier. Le tableau ne peut être dimensionné à priori puisqu'on ne connaît pas le nombre
d'éléments que va taper l'utilisateur. On travaille alors avec deux tableaux éléments1 et
éléments2.
Le tableau éléments1 contient les valeurs actuellement saisies. Lorsque l'utilisateur ajoute une
nouvelle valeur, on construit un tableau éléments2 avec un élément de plus que éléments1, on
copie le contenu de éléments1 dans éléments2 (Array.Copy), on fait "pointer" éléments1 sur
éléments2 et enfin on ajoute le nouvel élément à éléments1. C'est un processus complexe qui
peut être simplifié si au lieu d'utiliser un tableau de taille fixe (Array) on utilise un tableau de
taille variable (ArrayList).
Le tableau est trié avec la méthode Array.Sort. Cette méthode peut être appelée avec
différents paramètres précisant les règles de tri. Sans paramètres, c'est ici un tri en ordre
croissant qui est fait par défault. Enfin, la méthode Array.BinarySearch permet de chercher
un élément dans un tableau trié.
6. 4
III. La classe ArrayList
La classe ArrayList permet d'implémenter des tableaux de taille variable au cours de
l'exécution du programme, ce que ne permet pas la classe Array précédente. Voici quelques-
unes des propriétés et méthodes courantes :
Reprenons l'exemple traité avec des objets de type Array et traitons-le avec des objets de type
ArrayList :
Imports System.Collections
Module test
Sub Main()
' lecture des éléments d'un tableau tapés au clavier
Dim terminé As [Boolean] = False
Dim i As Integer = 0
Dim éléments As New ArrayList
Dim élément As Double = 0
Dim réponse As String = Nothing
Dim erreur As [Boolean] = False
While Not terminé
' question
Public Sub New() construit une liste vide
Public Overridable ReadOnly Property Count As Integer Implements
ICollection.Count
nombre d'éléments de la collection
Public Overridable Function Add(ByVal value As Object) As Integer
Implements IList.Add
ajoute l'objet value à la fin de la collection
Public Overridable Sub Clear() Implements IList.Clear efface la liste
Overloads Public Overridable Function IndexOf(ByVal value As
Object) As Integer Implements IList.IndexOf
indice de l'objet value dans la liste ou -1 s'il n'existe pas
Overloads Public Overridable Function IndexOf(ByVal value As
Object, ByVal startIndex As Integer) As Integer
idem mais en cherchant à partir de l'élément n° startIndex
Overloads Public Overridable Function LastIndexOf(ByVal value As
Object) As Integer
idem mais rend l'indice de la dernière occurrence de value
dans la liste
Overloads Public Overridable Function LastIndexOf(ByVal value As
Object, ByVal startIndex As Integer) As Integer
idem mais en cherchant à partir de l'élément n° startIndex
Public Overridable Sub Remove( ByVal obj As Object) Implements
IList.Remove
enlève l'objet obj s'il existe dans la liste
Public Overridable Sub RemoveAt(ByVal index As Integer) Implements
IList.RemoveAt
enlève l'élément index de la liste
Overloads Public Overridable Function BinarySearch(ByVal value As
Object) As Integer
rend la position de l'objet value dans la liste ou -1 s'il ne s'y
trouve pas. La liste doit être triée
Overloads Public Overridable Sub Sort() trie la liste. Celle-ci doit contenir des objets ayant une
relation d'ordre prédéfinie (chaînes, nombres)
Overloads Public Overridable Sub Sort(ByVal comparer As IComparer) trie la liste selon la relation d'ordre établie par la fonction
comparer
7. 5
Console.Out.Write(("Elément (réel) " & i & " du tableau (rien pour terminer) : "))
' lecture de la réponse
réponse = Console.ReadLine().Trim()
' fin de saisie si chaîne vide
If réponse.Equals("") Then
Exit While
End If
' vérification saisie
Try
élément = Double.Parse(réponse)
erreur = False
Catch
Console.Error.WriteLine("Saisie incorrecte, recommencez")
erreur = True
End Try
' si pas d'erreur
If Not erreur Then
' un élémt de plus dans le tableau
éléments.Add(élément)
End If
End While
' affichage tableau non trié
System.Console.Out.WriteLine("Tableau non trié")
For i = 0 To éléments.Count - 1
Console.Out.WriteLine(("éléments[" & i & "]=" & éléments(i).ToString))
Next i ' tri du tableau
éléments.Sort()
' affichage tableau trié
System.Console.Out.WriteLine("Tableau trié")
For i = 0 To éléments.Count - 1
Console.Out.WriteLine(("éléments[" & i & "]=" & éléments(i).ToString))
Next i
' Recherche
While Not terminé
' question
Console.Out.Write("Elément cherché (rien pour arrêter) : ")
' lecture-vérification réponse
réponse = Console.ReadLine().Trim()
' fini ?
If réponse.Equals("") Then
Exit While
End If
' vérification
Try
élément = [Double].Parse(réponse)
erreur = False
Catch
Console.Error.WriteLine("Saisie incorrecte, recommencez")
erreur = True
End Try
' si pas d'erreur
If Not erreur Then
' on cherche l'élément dans le tableau trié
i = éléments.BinarySearch(élément)
' Affichage réponse
If i >= 0 Then
Console.Out.WriteLine(("Trouvé en position " & i))
Else
Console.Out.WriteLine("Pas dans le tableau")
End If
End If
End While
End Sub
End Module