|
Site |
Cours VB.net |
|
|
|
Les interfaces. |
|
|
Définition: Interface et implémentation:
Ce que je vois de l'objet, c'est son interface (le nom des propriétés, le nom des méthodes..) exemple: le nom de la méthode Clear fait partie de l'interface d'une ListBox. Par contre le code qui effectue la méthode (celui qui efface physiquement toutes les lignes de la listeBox), ce code se nomme implémentation, lui n'est ni visible ni accessible (Quand on est du coté du développeur qui utilise l'objet).
Un objet a donc une interface et une implémentation.
Quand maintenant on est du coté du créateur d'objet, dans un module de classe, si on a crée un objet et ses membres, sans le savoir, on crée en même temps l'interface et l'implémentation.
Mais il est possible de dissocier les 2.
Quel intérêt d'utiliser les interfaces?
Vous pouvez développer des implémentations avancées pour vos interfaces sans endommager le code existant, ce qui limite les problèmes de compatibilité. Vous pouvez également ajouter de nouvelles fonctionnalités à tout moment en développant des interfaces et implémentations supplémentaires.
Différences entre Classe et Interface:
Tout comme les classes, les interfaces définissent un ensemble de propriétés, méthodes et événements. Cependant, contrairement aux classes, les interfaces n'assurent pas l'implémentation. Elles sont implémentées par les classes et définies en tant qu'entités distinctes des classes.
Les interfaces ne peuvent pas être modifiées après publication. En effet, toute modification apportée à une interface publiée risque d'endommager le code existant. Il faut partir du principe qu'une interface est une sorte de contrat.(La partie qui publie une interface accepte de ne jamais modifier cette dernière et l'implémenteur accepte de l'implémenter exactement comme elle a été conçue.)
Comme d'habitude:
Il y a
-les interfaces présentes dans les classes du Framework (IList, ICollection...)
-les interfaces que vous créez de toutes pièces pour créer des objets.
Visual Basic .NET vous permet de définir des interfaces à l'aide de l'instruction Interface et de les implémenter avec le mot clé Implements.
Les interfaces présentes dans les classes du Framework.
Pour 'uniformiser' le comportement des objets, les interfaces sont largement utilisées dans VB.
Prenons l'exemple des collections:
Plutôt que de rendre communs à toutes les collections une méthode( Clear par exemple), VB donne la même interface à plusieurs types de Collections, ce qui uniformise la totalité des membres.
Les collections reposent sur l'interface
Le nom des interfaces
commence toujours par 'I'.
Dans les collections fondées sur l'interface
IList ou directement sur l'interface ICollection (telles que
Détaillons l'interface Ilist:
L'interface Ilist permet de présenter une collection d'objets accessibles séparément par index.
Les méthodes de l'interface IList sont répertoriées ici.
| Add | Ajoute un élément. |
| Clear | Supprime tous les éléments. |
| Contains | Détermine si la liste contient une valeur spécifique. |
| IndexOf | Détermine l'index d'un élément spécifique. |
| Insert | Insère un élément dans la liste à la position spécifiée. |
| Remove | Supprime la première occurrence d'un objet spécifique. |
| RemoveAt | Supprime l'élément correspondant à l'index spécifié. |
| IsFixedSide | Obtient une valeur indiquant si IList est de taille fixe. |
| IsReadOnly | Obtient une valeur indiquant si IList est en lecture seule. |
| Item | Obtient ou définit l'élément correspondant à l'index spécifié. |
Les tableaux (Array) utilisent l'interface Ilist, mais aussi les collections (ArrayList) , des contrôles utilisent aussi cette interface (les ListBox, ComboBox), mais aussi les DataView...
Les ListBox possédent donc l'interface Ilist , on s'en doutait car on utilisait les méthodes Clear, Insert, Item...
Il y a plein d'autres interfaces.
Autre exemple: IEnumerable.
La Classe System.Array ( et d'autres ) implémente l'interface IEnumerable, ce qui permet d'utiliser une boucle For Each pour parcourir tous les éléments de l'Array.
(Voir 8-5 pour plus de détail)
Les interfaces crées par le programmeur:
De même que vous savez créer des classes, il est possible de créer de toutes pièces des interfaces.
Pour créer une Interface
Cryptage :
Interface Cryptage End Interface
:
Interface Cryptage Function Encrypt(ByVal estring As String) As String Function Decrypt(ByVal dstring As String) As String Property CledeCodage() As Integer Event FinDecoding(ByVal RetVal As Integer) End Interface
L'interface est créée.
Pour implémenter une Interface
Cryptage , vous pouvez nommer la classe d'implémentation
MonEncrypte, comme dans le code suivant :
Class MonEncrypte Implements Cryptage End Class
Class MonEncrypte
Implements Cryptage
Event FinDecoding(ByVal RetVal As Integer) Implements Cryptage.FinDecoding
Function Encrypt(ByVal estring As String) As String Implements Cryptage.Encrypt
' Placer le code de cryptage ici.
End Function
Function Decrypt(ByVal dstring As String) As String Implements Cryptage.Decrypt
' Placer le code de décryptage ici.
End Function
Property CledeCodage() As Integer Implements Cryptage.CledeCodage
Get
'Placer ici le code qui retourne la valeur de la propriété.
End Get
Set
'Placer ici le code qui donne une valeur à la propriété.
End Set
End Property
End Class
Noter que :
Pour chaque membre implémenté dans ce code, une instruction Implements indique le nom de l'interface et du membre implémenté.
Tous les membres de l'interface doivent être implémentés.
Enfin utiliser la classe MonEncrypte dans votre programme.
Dim C As New MonEncrypte()
C.CledeCodage=3
Dim ChaineEncryptée As String= C.Encrypt( "ChaineAEncrypter")
ou
Il faut créer une instance de la classe qui implémente MonEncrypte, crée une variable du type de l'interface, qui associe un gestionnaire d'événements à l'événement déclenché par l'instance, qui définit une propriété et exécute une méthode via l'interface.
Dim C As New MonEncrypte() 'Classe
Dim I As Cryptage()'Variable d'interface (ne pas mettre de 'New'
I=C
I.CledeCodage=3
Dim ChaineEncryptée As String = I.Encrypt( "ChaineAEncrypter")
Les 2 versions marchent.
S'il y a un RaiseEvent dans une procédure qui déclenche un évènement de la classe il faut aussi ajouter une ligne AddHandler.
Il peut y avoir héritage de plusieurs interfaces:
Interface IComboBox
Inherits ITextBox, IListBox
End Interface
Public Class EditBox
Inherits Control
Implements ITextBox
Implements IListBox
Public Sub Paint()Implements ITextBox.Paint
...
End Sub Public Sub Bind(b As string) Implements IListBox.Clear End Sub End Class
|
|
|
|
|