Guide : Déclarer un Objet en VB.NET
En VB.NET, déclarer un objet consiste à créer une variable qui fera référence à une instance d’une classe. Ce processus inclut deux étapes principales : la déclaration de l’objet et son instanciation. Voici un guide détaillé.
1. Déclaration d’un Objet
Pour déclarer un objet, utilisez le mot-clé Dim
, suivi du nom de l’objet, de l’opérateur As
, et du type de classe ou d’interface que l’objet représentera.
Syntaxe :
Dim nomObjet As TypeClasse
Exemple :
Dim voiture As Vehicule
Ici, voiture
est une variable qui peut contenir une instance de la classe Vehicule
.
2. Instanciation d’un Objet
Pour créer une instance d’une classe, utilisez le mot-clé New
, suivi du constructeur de la classe.
Syntaxe :
nomObjet = New TypeClasse()
Exemple :
voiture = New Vehicule()
Vous pouvez combiner la déclaration et l’instanciation en une seule ligne :
Dim voiture As Vehicule = New Vehicule()
3. Exemple Complet
Voici un exemple pratique de déclaration, instanciation, et utilisation d’un objet :
' Déclarer et instancier un objet
Dim voiture As New Vehicule()
' Accéder à une propriété
voiture.Marque = "Toyota"
' Appeler une méthode
voiture.Démarrer()
4. Utilisation d’Objets avec Constructeurs Paramétrés
Si la classe dispose de constructeurs acceptant des paramètres, vous pouvez les utiliser lors de l’instanciation.
Exemple :
Dim voiture As New Vehicule("Toyota", "Corolla")
Dans cet exemple, le constructeur de la classe Vehicule
attend deux paramètres : la marque et le modèle.
5. Utilisation de Objets avec le Mot-Clé With
VB.NET permet une initialisation plus concise en utilisant le mot-clé With
pour configurer plusieurs propriétés d’un objet après sa création.
Exemple :
Dim voiture As New Vehicule() With {
.Marque = "Toyota",
.Modèle = "Corolla"
}
6. Gestion des Objets Null (Nothing
)
Un objet non instancié aura la valeur Nothing
. Vous devez vérifier cette condition avant d’utiliser l’objet.
Exemple :
Dim voiture As Vehicule
If voiture Is Nothing Then
voiture = New Vehicule()
End If
7. Portée et Durée de Vie d’un Objet
- Les objets déclarés dans une méthode ou une fonction sont accessibles uniquement dans leur bloc de code.
- Les objets déclarés au niveau de la classe peuvent être utilisés dans toutes les méthodes de la classe (avec des modificateurs comme
Private
,Public
, ouProtected
).
Exemple :
Public Class Garage
Private voiture As Vehicule ' Déclarée au niveau de la classe
Public Sub GérerVoiture()
voiture = New Vehicule() ' Instanciée dans une méthode
End Sub
End Class
Déclarer un objet en VB.NET est simple et suit une logique claire :
- Déclarer la variable de l’objet avec
Dim
. - Instancier la classe avec
New
. - Configurer les propriétés ou appeler des méthodes.
Utilisation d’un Constructeur Personnalisé en VB.NET
Un constructeur personnalisé est une méthode spéciale définie dans une classe qui permet d’initialiser ses membres avec des valeurs spécifiques lors de l’instanciation d’un objet. Voici comment définir et utiliser un constructeur personnalisé en VB.NET.
1. Définir un Constructeur Personnalisé
En VB.NET, un constructeur est une méthode spéciale nommée Sub New
. Pour créer un constructeur personnalisé, vous pouvez ajouter des paramètres à cette méthode.
Exemple :
Public Class Voiture
' Propriétés de la classe
Public Property Marque As String
Public Property Modèle As String
' Constructeur personnalisé
Public Sub New(marque As String, modèle As String)
Me.Marque = marque
Me.Modèle = modèle
End Sub
End Class
2. Instancier un Objet avec un Constructeur Personnalisé
Lorsque vous définissez un constructeur personnalisé, vous devez fournir les arguments requis au moment de l’instanciation.
Exemple :
Dim maVoiture As New Voiture("Toyota", "Corolla")
Console.WriteLine($"Marque: {maVoiture.Marque}, Modèle: {maVoiture.Modèle}")
Sortie :
Marque: Toyota, Modèle: Corolla
3. Combiner Constructeurs Personnalisés et Défaut
Si vous souhaitez offrir à la fois un constructeur par défaut (sans paramètres) et un constructeur personnalisé, vous devez les définir séparément.
Exemple :
Public Class Voiture
Public Property Marque As String
Public Property Modèle As String
' Constructeur par défaut
Public Sub New()
Me.Marque = "Inconnu"
Me.Modèle = "Inconnu"
End Sub
' Constructeur personnalisé
Public Sub New(marque As String, modèle As String)
Me.Marque = marque
Me.Modèle = modèle
End Sub
End Class
Utilisation :
' Avec le constructeur par défaut
Dim voiture1 As New Voiture()
Console.WriteLine($"Marque: {voiture1.Marque}, Modèle: {voiture1.Modèle}")
' Avec le constructeur personnalisé
Dim voiture2 As New Voiture("Honda", "Civic")
Console.WriteLine($"Marque: {voiture2.Marque}, Modèle: {voiture2.Modèle}")
Sortie :
Marque: Inconnu, Modèle: Inconnu
Marque: Honda, Modèle: Civic
4. Appeler un Constructeur à partir d’un autre (Surcharge de Constructeurs)
Vous pouvez appeler un constructeur à partir d’un autre en utilisant le mot-clé Me
.
Exemple :
Public Class Voiture
Public Property Marque As String
Public Property Modèle As String
Public Property Année As Integer
' Constructeur principal
Public Sub New(marque As String, modèle As String, année As Integer)
Me.Marque = marque
Me.Modèle = modèle
Me.Année = année
End Sub
' Appelle le constructeur principal avec une année par défaut
Public Sub New(marque As String, modèle As String)
Me.New(marque, modèle, 2023) ' Année par défaut : 2023
End Sub
End Class
Utilisation :
Dim voiture1 As New Voiture("Ford", "Focus")
Console.WriteLine($"Marque: {voiture1.Marque}, Modèle: {voiture1.Modèle}, Année: {voiture1.Année}")
Dim voiture2 As New Voiture("Tesla", "Model S", 2021)
Console.WriteLine($"Marque: {voiture2.Marque}, Modèle: {voiture2.Modèle}, Année: {voiture2.Année}")
Sortie :
Marque: Ford, Modèle: Focus, Année: 2023
Marque: Tesla, Modèle: Model S, Année: 2021
5. Utiliser un Constructeur Personnalisé avec Héritage
Lorsqu’une classe dérive d’une classe de base, le constructeur de la classe de base peut être appelé avec MyBase.New
.
Exemple :
Public Class Vehicule
Public Property TypeVehicule As String
' Constructeur de la classe de base
Public Sub New(typeVehicule As String)
Me.TypeVehicule = typeVehicule
End Sub
End Class
Public Class Voiture
Inherits Vehicule
Public Property Marque As String
' Constructeur de la classe dérivée
Public Sub New(marque As String, typeVehicule As String)
MyBase.New(typeVehicule) ' Appelle le constructeur de la classe de base
Me.Marque = marque
End Sub
End Class
Utilisation :
Dim voiture As New Voiture("Toyota", "SUV")
Console.WriteLine($"Type: {voiture.TypeVehicule}, Marque: {voiture.Marque}")
Sortie :
Type: SUV, Marque: Toyota
Résumé
- Créer un constructeur personnalisé avec
Sub New
et ajouter les paramètres nécessaires. - Instancier des objets en passant les valeurs requises au constructeur.
- Surcharger les constructeurs pour permettre une flexibilité dans l’initialisation.
- Utiliser l’héritage pour appeler des constructeurs de classe de base avec
MyBase.New
.
Les constructeurs personnalisés sont essentiels pour initialiser les objets avec des valeurs spécifiques dès leur création et maintenir un code propre et compréhensible.
L’héritage en VB.NET
L’héritage est un concept fondamental en programmation orientée objet (OOP) qui permet à une classe (la classe dérivée ou sous-classe) d’hériter des membres (propriétés, méthodes, événements) d’une autre classe (la classe de base ou super-classe). Cela permet la réutilisation du code, la modularité et la création de hiérarchies de classes.
1. Définir l’Héritage
En VB.NET, l’héritage se déclare avec le mot-clé Inherits
. Une classe dérivée peut hériter de toutes les propriétés, méthodes, champs et événements publics ou protégés de sa classe de base.
Syntaxe :
Public Class ClasseBase
' Membres de la classe de base
End Class
Public Class ClasseDerivee
Inherits ClasseBase
' Membres supplémentaires ou redéfinis
End Class
2. Exemple Simple d’Héritage
Exemple :
Public Class Animal
Public Property Nom As String
Public Sub Manger()
Console.WriteLine($"{Nom} mange.")
End Sub
End Class
Public Class Chien
Inherits Animal
Public Sub Aboyer()
Console.WriteLine($"{Nom} aboie.")
End Sub
End Class
Utilisation :
Dim monChien As New Chien()
monChien.Nom = "Rex"
monChien.Manger() ' Méthode héritée de Animal
monChien.Aboyer() ' Méthode propre à Chien
Sortie :
Rex mange.
Rex aboie.
3. Visibilité des Membres dans l’Héritage
Les membres d’une classe de base peuvent être :
Public
: Accessibles partout, y compris dans les classes dérivées.Protected
: Accessibles uniquement dans la classe de base et ses classes dérivées.Private
: Accessibles uniquement dans la classe de base.
Exemple :
Public Class Animal
Public Property Nom As String
Protected Property Age As Integer
Private Property Couleur As String
Public Sub AfficherInfos()
Console.WriteLine($"Nom: {Nom}, Age: {Age}")
End Sub
End Class
Public Class Chat
Inherits Animal
Public Sub Vieillir()
Age += 1 ' Accessible car Protected
End Sub
End Class
4. Redéfinir les Membres d’une Classe de Base
Vous pouvez redéfinir une méthode ou une propriété dans une classe dérivée en utilisant les mots-clés Overrides
et Overridable
.
Exemple :
Public Class Animal
Public Overridable Sub FaireDuBruit()
Console.WriteLine("L'animal fait un bruit.")
End Sub
End Class
Public Class Chien
Inherits Animal
Public Overrides Sub FaireDuBruit()
Console.WriteLine("Le chien aboie.")
End Sub
End Class
Utilisation :
Dim animal As New Animal()
animal.FaireDuBruit() ' Sortie : L'animal fait un bruit.
Dim chien As New Chien()
chien.FaireDuBruit() ' Sortie : Le chien aboie.
5. Appeler les Membres de la Classe de Base
Dans une classe dérivée, vous pouvez appeler des membres de la classe de base avec MyBase
.
Exemple :
Public Class Animal
Public Overridable Sub FaireDuBruit()
Console.WriteLine("L'animal fait un bruit.")
End Sub
End Class
Public Class Chat
Inherits Animal
Public Overrides Sub FaireDuBruit()
MyBase.FaireDuBruit() ' Appelle la méthode de la classe de base
Console.WriteLine("Le chat miaule.")
End Sub
End Class
Utilisation :
Dim chat As New Chat()
chat.FaireDuBruit()
Sortie :
L'animal fait un bruit.
Le chat miaule.
6. Classes Abstraites et Héritage
Une classe abstraite (déclarée avec le mot-clé MustInherit
) ne peut pas être instanciée directement. Elle sert de modèle pour les classes dérivées et peut contenir des membres abstraits (déclarés avec MustOverride
) qui doivent être implémentés dans les classes dérivées.
Exemple :
Public MustInherit Class Animal
Public Property Nom As String
Public MustOverride Sub FaireDuBruit() ' Méthode abstraite
End Class
Public Class Oiseau
Inherits Animal
Public Overrides Sub FaireDuBruit()
Console.WriteLine($"{Nom} chante.")
End Sub
End Class
Utilisation :
Dim oiseau As New Oiseau()
oiseau.Nom = "Canari"
oiseau.FaireDuBruit()
Sortie :
Canari chante.
7. Héritage et Constructeurs
Une classe dérivée peut appeler un constructeur de la classe de base avec MyBase.New
.
Exemple :
Public Class Animal
Public Sub New(nom As String)
Console.WriteLine($"Animal créé : {nom}")
End Sub
End Class
Public Class Poisson
Inherits Animal
Public Sub New(nom As String)
MyBase.New(nom) ' Appelle le constructeur de la classe de base
Console.WriteLine("C'est un poisson.")
End Sub
End Class
Utilisation :
Dim poisson As New Poisson("Nemo")
Sortie :
Animal créé : Nemo
C'est un poisson.
Résumé des Concepts Clés
Inherits
: Permet à une classe de dériver d’une classe de base.- Accès aux membres :
Public
: Accessible partout.Protected
: Accessible dans la classe de base et les classes dérivées.Private
: Accessible uniquement dans la classe de base.
- Redéfinition (
Overrides
) : Permet de personnaliser le comportement des méthodes ou propriétés de la classe de base. - Classes abstraites (
MustInherit
) : Fournissent un modèle pour les classes dérivées. - Constructeurs et Héritage : Les constructeurs de la classe de base peuvent être appelés avec
MyBase.New
.
L’héritage permet une meilleure organisation du code, favorise la réutilisation et facilite la gestion des comportements communs dans des hiérarchies d’objets.
Les Interfaces en VB.NET
En VB.NET, une interface est un contrat qui définit un ensemble de propriétés, méthodes, événements ou indexeurs qu’une classe ou une structure doit implémenter. Contrairement aux classes, les interfaces ne contiennent pas de logique ou d’implémentation : elles définissent seulement ce qui doit être implémenté.
1. Définition d’une Interface
Une interface est définie avec le mot-clé Interface
. Elle ne contient que les signatures des membres (méthodes, propriétés, événements, etc.) sans implémentation.
Syntaxe :
Public Interface NomInterface
Sub Méthode1()
Function Méthode2() As String
Property Propriété1 As Integer
End Interface
2. Implémentation d’une Interface
Une classe ou une structure implémente une interface en utilisant le mot-clé Implements
. Tous les membres de l’interface doivent être implémentés dans la classe.
Exemple :
Définir une Interface
Public Interface IAnimal
Property Nom As String
Sub FaireDuBruit()
End Interface
Implémenter l’Interface
Public Class Chien
Implements IAnimal
' Implémentation de la propriété
Private _nom As String
Public Property Nom As String Implements IAnimal.Nom
Get
Return _nom
End Get
Set(value As String)
_nom = value
End Set
End Property
' Implémentation de la méthode
Public Sub FaireDuBruit() Implements IAnimal.FaireDuBruit
Console.WriteLine($"{Nom} aboie.")
End Sub
End Class
Utilisation :
Dim monChien As New Chien()
monChien.Nom = "Rex"
monChien.FaireDuBruit()
Sortie :
Rex aboie.
3. Implémentation Explicite
Vous pouvez implémenter les membres de l’interface de manière explicite, ce qui signifie que ces membres ne seront accessibles que via une référence à l’interface.
Exemple :
Public Class Chat
Implements IAnimal
' Implémentation explicite
Private Property Nom As String Implements IAnimal.Nom
Get
Return "Chat"
End Get
Set(value As String)
End Set
End Property
Private Sub FaireDuBruit() Implements IAnimal.FaireDuBruit
Console.WriteLine("Le chat miaule.")
End Sub
End Class
Utilisation :
Dim monChat As IAnimal = New Chat()
monChat.FaireDuBruit()
Sortie :
Le chat miaule.
4. Héritage d’Interfaces
Une interface peut hériter d’une ou plusieurs autres interfaces. Une classe qui implémente cette interface devra fournir une implémentation pour tous les membres des interfaces héritées.
Exemple :
Public Interface IVivant
Sub Respirer()
End Interface
Public Interface IAnimal
Inherits IVivant
Property Nom As String
Sub FaireDuBruit()
End Interface
Implémentation :
Public Class Oiseau
Implements IAnimal
Public Property Nom As String Implements IAnimal.Nom
Public Sub Respirer() Implements IVivant.Respirer
Console.WriteLine("L'oiseau respire.")
End Sub
Public Sub FaireDuBruit() Implements IAnimal.FaireDuBruit
Console.WriteLine("L'oiseau chante.")
End Sub
End Class
Utilisation :
Dim oiseau As New Oiseau()
oiseau.Nom = "Canari"
oiseau.Respirer()
oiseau.FaireDuBruit()
Sortie :
L'oiseau respire.
L'oiseau chante.
5. Avantages des Interfaces
- Flexibilité : Une classe peut implémenter plusieurs interfaces, ce qui permet de simuler un héritage multiple.
- Découplage : Les interfaces permettent de séparer les définitions des comportements des implémentations concrètes, ce qui facilite le test et la maintenance.
- Interopérabilité : Les interfaces facilitent l’intégration avec d’autres composants ou bibliothèques.
6. Exemple d’Implémentation de Plusieurs Interfaces
Une classe peut implémenter plusieurs interfaces, et elle devra fournir une implémentation pour tous leurs membres.
Exemple :
Public Interface IVéhicule
Sub Rouler()
End Interface
Public Interface IVéhiculeAmphibie
Sub Nager()
End Interface
Public Class VéhiculeAmphibie
Implements IVéhicule, IVéhiculeAmphibie
Public Sub Rouler() Implements IVéhicule.Rouler
Console.WriteLine("Le véhicule roule sur la route.")
End Sub
Public Sub Nager() Implements IVéhiculeAmphibie.Nager
Console.WriteLine("Le véhicule nage dans l'eau.")
End Sub
End Class
Utilisation :
Dim vehicule As New VéhiculeAmphibie()
vehicule.Rouler()
vehicule.Nager()
Sortie :
Le véhicule roule sur la route.
Le véhicule nage dans l'eau.
7. Interfaces vs Classes Abstraites
Critère | Interface | Classe Abstraite |
---|---|---|
Héritage Multiple | Une classe peut implémenter plusieurs interfaces. | Une classe ne peut hériter que d’une seule classe abstraite. |
Implémentation | Ne contient pas d’implémentation. | Peut contenir une implémentation partielle (méthodes concrètes). |
Constructeurs | Pas de constructeurs. | Peut avoir des constructeurs. |
Utilisation | Sert uniquement à définir un contrat de comportements. | Sert à fournir une base commune avec des comportements optionnels. |
8. Exemple Pratique d’Utilisation des Interfaces
Supposons que vous développez un programme de gestion de paiement et que vous voulez unifier les comportements des différents types de paiements.
Définition de l’Interface
Public Interface IPaiement
Sub EffectuerPaiement(montant As Decimal)
End Interface
Implémentation par Différents Modes de Paiement
Public Class CarteDeCrédit
Implements IPaiement
Public Sub EffectuerPaiement(montant As Decimal) Implements IPaiement.EffectuerPaiement
Console.WriteLine($"Paiement de {montant:C} effectué par carte de crédit.")
End Sub
End Class
Public Class PayPal
Implements IPaiement
Public Sub EffectuerPaiement(montant As Decimal) Implements IPaiement.EffectuerPaiement
Console.WriteLine($"Paiement de {montant:C} effectué via PayPal.")
End Sub
End Class
Utilisation avec Polymorphisme
Dim paiements As List(Of IPaiement) = New List(Of IPaiement) From {
New CarteDeCrédit(),
New PayPal()
}
For Each paiement As IPaiement In paiements
paiement.EffectuerPaiement(100D)
Next
Sortie :
Paiement de 100,00 € effectué par carte de crédit.
Paiement de 100,00 € effectué via PayPal.