Chapitre 3 et 4

7
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

Transcript of Chapitre 3 et 4

Page 1: Chapitre 3 et 4

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

Page 2: Chapitre 3 et 4

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é

Page 3: Chapitre 3 et 4

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

Page 4: Chapitre 3 et 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).

Page 5: Chapitre 3 et 4

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é.

Page 6: Chapitre 3 et 4

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

Page 7: Chapitre 3 et 4

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