VB.NET

Guide : Déclaration d’un objet en VB.NET avec exercices corrigés

VB.NET (Visual Basic .NET) est un langage orienté objet qui permet de manipuler des objets de manière simple et structurée. Ce guide présente les bases de la déclaration d’un objet, avec des exercices corrigés pour illustrer le fonctionnement.


1. Qu’est-ce qu’un objet en VB.NET ?

Un objet est une instance d’une classe. Une classe est une définition ou un modèle qui contient des propriétés (attributs) et des méthodes (comportements). Lorsqu’une classe est instanciée, elle devient un objet.


2. Déclaration d’un objet

Pour déclarer un objet en VB.NET, vous suivez ces étapes :

  1. Créer une classe (définition de l’objet).
  2. Instancier la classe pour créer un objet.

Exemple de base :

' Déclaration de la classe
Public Class Voiture
    Public Marque As String
    Public Couleur As String

    ' Méthode pour afficher les détails
    Public Sub AfficherDetails()
        Console.WriteLine("Marque : " & Marque & ", Couleur : " & Couleur)
    End Sub
End Class

' Déclaration et utilisation de l'objet
Sub Main()
    ' Instanciation de la classe Voiture
    Dim maVoiture As New Voiture()
    maVoiture.Marque = "Toyota"
    maVoiture.Couleur = "Rouge"
    maVoiture.AfficherDetails() ' Affiche : Marque : Toyota, Couleur : Rouge
End Sub

3. Syntaxe pour déclarer un objet

Déclaration de base :

Dim objet As New Classe()

Déclaration sans instanciation immédiate :

Dim objet As Classe
objet = New Classe()

4. Propriétés et méthodes

  • Propriétés : Contiennent les données associées à l’objet.
  • Méthodes : Représentent les comportements ou actions que l’objet peut effectuer.

Exemple :

Public Class Personne
    Public Nom As String
    Public Age As Integer

    Public Sub DireBonjour()
        Console.WriteLine("Bonjour, je m'appelle " & Nom & " et j'ai " & Age & " ans.")
    End Sub
End Class

5. Exercices corrigés

Exercice 1 : Déclaration simple d’un objet

Objectif : Déclarez une classe Animal avec les propriétés Nom et Type, et affichez leurs valeurs.

Solution :

Public Class Animal
    Public Nom As String
    Public Type As String
End Class

Sub Main()
    Dim monAnimal As New Animal()
    monAnimal.Nom = "Lion"
    monAnimal.Type = "Mammifère"
    Console.WriteLine("Animal : " & monAnimal.Nom & ", Type : " & monAnimal.Type)
End Sub

Résultat attendu :

Animal : Lion, Type : Mammifère

Exercice 2 : Ajouter des méthodes à une classe

Objectif : Créez une classe CompteBancaire avec des propriétés pour le solde (Solde) et une méthode pour déposer de l’argent.

Solution :

Public Class CompteBancaire
    Public Solde As Decimal

    Public Sub Deposer(montant As Decimal)
        Solde += montant
        Console.WriteLine("Vous avez déposé : " & montant & "€. Nouveau solde : " & Solde & "€.")
    End Sub
End Class

Sub Main()
    Dim monCompte As New CompteBancaire()
    monCompte.Solde = 100
    monCompte.Deposer(50) ' Dépose 50€
End Sub

Résultat attendu :

Vous avez déposé : 50€. Nouveau solde : 150€.

Exercice 3 : Utiliser un constructeur pour initialiser un objet

Objectif : Ajoutez un constructeur à une classe Rectangle pour initialiser sa longueur et sa largeur.

Solution :

Public Class Rectangle
    Public Longueur As Double
    Public Largeur As Double

    ' Constructeur
    Public Sub New(longueur As Double, largeur As Double)
        Me.Longueur = longueur
        Me.Largeur = largeur
    End Sub

    ' Méthode pour calculer l'aire
    Public Function CalculerAire() As Double
        Return Longueur * Largeur
    End Function
End Class

Sub Main()
    Dim monRectangle As New Rectangle(5, 10)
    Console.WriteLine("Aire du rectangle : " & monRectangle.CalculerAire())
End Sub

Résultat attendu :

Aire du rectangle : 50

Exercice 4 : Gestion de plusieurs objets

Objectif : Créez une liste d’objets Etudiant et affichez leurs noms.

Solution :

Public Class Etudiant
    Public Nom As String

    Public Sub New(nom As String)
        Me.Nom = nom
    End Sub
End Class

Sub Main()
    Dim etudiants As New List(Of Etudiant)()
    etudiants.Add(New Etudiant("Alice"))
    etudiants.Add(New Etudiant("Bob"))
    etudiants.Add(New Etudiant("Charlie"))

    For Each etudiant As Etudiant In etudiants
        Console.WriteLine("Étudiant : " & etudiant.Nom)
    Next
End Sub

Résultat attendu :

Étudiant : Alice
Étudiant : Bob
Étudiant : Charlie

6. Bonnes pratiques

  1. Encapsulation :
    • Utilisez des propriétés avec des Get et Set pour contrôler l’accès aux données.
    Public Property Nom As String
  2. Réutilisabilité :
    • Concevez des classes génériques pour éviter la duplication du code.
  3. Commentaires :
    • Documentez les classes et méthodes pour les rendre compréhensibles.

Exercices Avancés et Cas Particuliers en VB.NET

Pour approfondir votre compréhension des objets en VB.NET, voici des exercices avancés traitant de cas particuliers, incluant des concepts comme l’héritage, les interfaces, les collections, et la gestion des exceptions.


Exercice 1 : Héritage et polymorphisme

Objectif : Créez une classe parent Forme avec une méthode virtuelle pour calculer l’aire. Ensuite, implémentez deux classes filles Cercle et Rectangle qui calculent l’aire selon leur formule respective.

Consignes :

  1. Créez une classe Forme avec une méthode CalculerAire marquée comme virtuelle.
  2. Implémentez les classes Cercle et Rectangle.
  3. Dans Main, utilisez le polymorphisme pour calculer et afficher l’aire de plusieurs formes.

Solution :

Public MustInherit Class Forme
    Public MustOverride Function CalculerAire() As Double
End Class

Public Class Cercle
    Inherits Forme
    Public Rayon As Double

    Public Sub New(rayon As Double)
        Me.Rayon = rayon
    End Sub

    Public Overrides Function CalculerAire() As Double
        Return Math.PI * Rayon * Rayon
    End Function
End Class

Public Class Rectangle
    Inherits Forme
    Public Longueur As Double
    Public Largeur As Double

    Public Sub New(longueur As Double, largeur As Double)
        Me.Longueur = longueur
        Me.Largeur = largeur
    End Sub

    Public Overrides Function CalculerAire() As Double
        Return Longueur * Largeur
    End Function
End Class

Sub Main()
    Dim formes As New List(Of Forme)()
    formes.Add(New Cercle(5))
    formes.Add(New Rectangle(4, 6))

    For Each forme As Forme In formes
        Console.WriteLine("Aire de la forme : " & forme.CalculerAire())
    Next
End Sub

Résultat attendu :

Aire de la forme : 78.5398163397448
Aire de la forme : 24

Exercice 2 : Implémenter une interface

Objectif : Créez une interface IVolant pour les objets volants. Implémentez cette interface dans deux classes Avion et Oiseau.

Consignes :

  1. Déclarez l’interface IVolant avec une méthode Voler.
  2. Implémentez les classes Avion et Oiseau.
  3. Affichez les types d’objets volants dans une liste.

Solution :

Public Interface IVolant
    Sub Voler()
End Interface

Public Class Avion
    Implements IVolant

    Public Sub Voler() Implements IVolant.Voler
        Console.WriteLine("L'avion vole dans le ciel.")
    End Sub
End Class

Public Class Oiseau
    Implements IVolant

    Public Sub Voler() Implements IVolant.Voler
        Console.WriteLine("L'oiseau bat des ailes et vole.")
    End Sub
End Class

Sub Main()
    Dim volants As New List(Of IVolant)()
    volants.Add(New Avion())
    volants.Add(New Oiseau())

    For Each volant As IVolant In volants
        volant.Voler()
    Next
End Sub

Résultat attendu :

L'avion vole dans le ciel.
L'oiseau bat des ailes et vole.

Exercice 3 : Gestion des exceptions avec des objets

Objectif : Créez une classe CompteBancaire qui lève une exception personnalisée si un retrait dépasse le solde.

Consignes :

  1. Créez une classe CompteBancaire avec une méthode Retirer.
  2. Ajoutez une exception personnalisée SoldeInsuffisantException.
  3. Gérez cette exception dans Main.

Solution :

Public Class SoldeInsuffisantException
    Inherits Exception

    Public Sub New(message As String)
        MyBase.New(message)
    End Sub
End Class

Public Class CompteBancaire
    Public Solde As Decimal

    Public Sub New(soldeInitial As Decimal)
        Solde = soldeInitial
    End Sub

    Public Sub Retirer(montant As Decimal)
        If montant > Solde Then
            Throw New SoldeInsuffisantException("Fonds insuffisants pour effectuer ce retrait.")
        End If
        Solde -= montant
        Console.WriteLine("Retrait effectué. Nouveau solde : " & Solde & "€.")
    End Sub
End Class

Sub Main()
    Dim compte As New CompteBancaire(100)

    Try
        compte.Retirer(50)
        compte.Retirer(70) ' Provoquera une exception
    Catch ex As SoldeInsuffisantException
        Console.WriteLine("Erreur : " & ex.Message)
    End Try
End Sub

Résultat attendu :

Retrait effectué. Nouveau solde : 50€.
Erreur : Fonds insuffisants pour effectuer ce retrait.

Exercice 4 : Collection générique avec des objets

Objectif : Créez une classe Produit avec une propriété Prix. Utilisez une liste générique pour calculer le total des prix.

Consignes :

  1. Créez la classe Produit avec les propriétés Nom et Prix.
  2. Ajoutez plusieurs objets Produit à une liste.
  3. Calculez et affichez le total des prix.

Solution :

Public Class Produit
    Public Nom As String
    Public Prix As Decimal

    Public Sub New(nom As String, prix As Decimal)
        Me.Nom = nom
        Me.Prix = prix
    End Sub
End Class

Sub Main()
    Dim produits As New List(Of Produit)()
    produits.Add(New Produit("Télévision", 300))
    produits.Add(New Produit("Smartphone", 500))
    produits.Add(New Produit("Tablette", 200))

    Dim totalPrix As Decimal = 0
    For Each produit As Produit In produits
        totalPrix += produit.Prix
        Console.WriteLine(produit.Nom & " : " & produit.Prix & "€")
    Next

    Console.WriteLine("Total : " & totalPrix & "€")
End Sub

Résultat attendu :

Télévision : 300€
Smartphone : 500€
Tablette : 200€
Total : 1000€

Exercice 5 : Simulation avancée avec des objets imbriqués

Objectif : Modélisez une classe Commande contenant une liste de Produit. Calculez le total de la commande.

Consignes :

  1. Créez les classes Produit et Commande.
  2. Une Commande doit contenir plusieurs objets Produit.
  3. Calculez et affichez le total des produits d’une commande.

Solution :

Public Class Produit
    Public Nom As String
    Public Prix As Decimal

    Public Sub New(nom As String, prix As Decimal)
        Me.Nom = nom
        Me.Prix = prix
    End Sub
End Class

Public Class Commande
    Public Produits As New List(Of Produit)()

    Public Function CalculerTotal() As Decimal
        Dim total As Decimal = 0
        For Each produit As Produit In Produits
            total += produit.Prix
        Next
        Return total
    End Function
End Class

Sub Main()
    Dim commande As New Commande()
    commande.Produits.Add(New Produit("Ordinateur", 1000))
    commande.Produits.Add(New Produit("Souris", 20))
    commande.Produits.Add(New Produit("Clavier", 50))

    Console.WriteLine("Total de la commande : " & commande.CalculerTotal() & "€")
End Sub

Résultat attendu :

Total de la commande : 1070€

Ces exercices avancés couvrent des concepts importants de la programmation orientée objet en VB.NET et offrent une bonne pratique pour des scénarios réels.

Exemple avec Héritage : Gestion d’un Zoo

Dans cet exemple, nous allons créer une hiérarchie de classes pour modéliser différents animaux dans un zoo. Chaque type d’animal aura des propriétés et des comportements spécifiques, tout en partageant des caractéristiques communes définies dans une classe parent.


Objectif

  1. Créer une classe parent Animal avec des propriétés communes comme Nom et Age.
  2. Définir des méthodes génériques dans Animal comme Manger et Dormir.
  3. Implémenter des classes filles Lion et Perroquet avec des propriétés et comportements spécifiques.
  4. Utiliser un polymorphisme pour afficher les caractéristiques de chaque animal.

Code Complet

' Classe parent Animal
Public Class Animal
    Public Property Nom As String
    Public Property Age As Integer

    Public Sub New(nom As String, age As Integer)
        Me.Nom = nom
        Me.Age = age
    End Sub

    ' Méthode générique commune à tous les animaux
    Public Overridable Sub FaireDuBruit()
        Console.WriteLine(Nom & " fait un bruit générique.")
    End Sub

    ' Méthodes communes à tous les animaux
    Public Sub Manger()
        Console.WriteLine(Nom & " est en train de manger.")
    End Sub

    Public Sub Dormir()
        Console.WriteLine(Nom & " dort paisiblement.")
    End Sub
End Class

' Classe fille Lion
Public Class Lion
    Inherits Animal

    Public Sub New(nom As String, age As Integer)
        MyBase.New(nom, age)
    End Sub

    ' Méthode spécifique au Lion
    Public Overrides Sub FaireDuBruit()
        Console.WriteLine(Nom & " rugit puissamment !")
    End Sub
End Class

' Classe fille Perroquet
Public Class Perroquet
    Inherits Animal

    Public Property Couleur As String

    Public Sub New(nom As String, age As Integer, couleur As String)
        MyBase.New(nom, age)
        Me.Couleur = couleur
    End Sub

    ' Méthode spécifique au Perroquet
    Public Overrides Sub FaireDuBruit()
        Console.WriteLine(Nom & " dit : 'Bonjour !' et gazouille.")
    End Sub

    ' Méthode spécifique pour le Perroquet
    Public Sub Voler()
        Console.WriteLine(Nom & " vole dans les airs avec ses plumes " & Couleur & ".")
    End Sub
End Class

' Programme principal
Sub Main()
    ' Création d'objets
    Dim simba As New Lion("Simba", 5)
    Dim polly As New Perroquet("Polly", 2, "verte")

    ' Liste polymorphique des animaux
    Dim zoo As New List(Of Animal)()
    zoo.Add(simba)
    zoo.Add(polly)

    ' Parcourir et afficher les actions des animaux
    For Each animal As Animal In zoo
        Console.WriteLine("Nom : " & animal.Nom & ", Âge : " & animal.Age & " ans.")
        animal.FaireDuBruit()
        animal.Manger()
        animal.Dormir()
        Console.WriteLine()
    Next

    ' Appel spécifique au Perroquet
    polly.Voler()
End Sub

Explications

  1. Classe Parent Animal :
    • Contient les propriétés communes (Nom, Age) et des méthodes génériques (FaireDuBruit, Manger, Dormir).
    • La méthode FaireDuBruit est marquée comme Overridable, ce qui permet aux classes dérivées de la redéfinir.
  2. Classe Fille Lion :
    • Hérite d’Animal et redéfinit la méthode FaireDuBruit avec un comportement spécifique (Rugit puissamment).
  3. Classe Fille Perroquet :
    • Ajoute une nouvelle propriété (Couleur) et une méthode spécifique (Voler).
    • Redéfinit également FaireDuBruit pour inclure le comportement propre au perroquet.
  4. Liste Polymorphique :
    • La liste zoo contient des objets de type Animal. Cela permet d’exploiter le polymorphisme pour appeler les méthodes des classes filles sans connaître leur type exact.

Résultat Attendu

Nom : Simba, Âge : 5 ans.
Simba rugit puissamment !
Simba est en train de manger.
Simba dort paisiblement.

Nom : Polly, Âge : 2 ans.
Polly dit : 'Bonjour !' et gazouille.
Polly est en train de manger.
Polly dort paisiblement.

Polly vole dans les airs avec ses plumes verte.

Cas Pratique : Extension du Zoo

Pour enrichir ce système, vous pouvez :

  • Ajouter d’autres classes filles (Éléphant, Tigre, Poisson).
  • Gérer des comportements communs spécifiques aux sous-groupes (par exemple, les animaux aquatiques avec une méthode Nager).
  • Utiliser des collections ou des bases de données pour stocker et récupérer les informations des animaux.

Cet exercice montre comment structurer un système complexe avec héritage et polymorphisme pour le rendre extensible et facile à maintenir.

Exemples de Polymorphisme en VB.NET

Le polymorphisme est un concept fondamental en programmation orientée objet qui permet d’utiliser une interface ou une classe de base pour accéder à des objets dérivés sans connaître leur type exact. Voici des exemples pour illustrer ce concept.


1. Polymorphisme avec Héritage

Dans cet exemple, une méthode redéfinie dans des classes dérivées est appelée dynamiquement.

Code Exemple

' Classe parent
Public Class Animal
    Public Overridable Sub FaireDuBruit()
        Console.WriteLine("L'animal fait un bruit générique.")
    End Sub
End Class

' Classe fille Chien
Public Class Chien
    Inherits Animal

    Public Overrides Sub FaireDuBruit()
        Console.WriteLine("Le chien aboie : Woof!")
    End Sub
End Class

' Classe fille Chat
Public Class Chat
    Inherits Animal

    Public Overrides Sub FaireDuBruit()
        Console.WriteLine("Le chat miaule : Miaou!")
    End Sub
End Class

' Programme principal
Sub Main()
    Dim animaux As New List(Of Animal)()
    animaux.Add(New Chien())
    animaux.Add(New Chat())

    For Each animal As Animal In animaux
        animal.FaireDuBruit() ' Appelle la méthode redéfinie selon l'objet
    Next
End Sub

Résultat Attendu

Le chien aboie : Woof!
Le chat miaule : Miaou!

2. Polymorphisme avec Interfaces

Avec une interface, plusieurs classes peuvent implémenter les mêmes méthodes avec un comportement différent.

Code Exemple

' Interface commune
Public Interface IVehicule
    Sub Deplacer()
End Interface

' Classe Voiture
Public Class Voiture
    Implements IVehicule

    Public Sub Deplacer() Implements IVehicule.Deplacer
        Console.WriteLine("La voiture roule sur la route.")
    End Sub
End Class

' Classe Bateau
Public Class Bateau
    Implements IVehicule

    Public Sub Deplacer() Implements IVehicule.Deplacer
        Console.WriteLine("Le bateau navigue sur l'eau.")
    End Sub
End Class

' Programme principal
Sub Main()
    Dim vehicules As New List(Of IVehicule)()
    vehicules.Add(New Voiture())
    vehicules.Add(New Bateau())

    For Each vehicule As IVehicule In vehicules
        vehicule.Deplacer() ' Appelle la méthode de chaque classe
    Next
End Sub

Résultat Attendu

La voiture roule sur la route.
Le bateau navigue sur l'eau.

3. Polymorphisme avec Méthodes Génériques

Les méthodes génériques permettent de travailler avec différents types sans écrire de code spécifique pour chaque type.

Code Exemple

' Classe générique pour afficher des détails
Public Class DetailsAffichage
    Public Sub Afficher(Of T)(objet As T)
        Console.WriteLine("Détails : " & objet.ToString())
    End Sub
End Class

' Programme principal
Sub Main()
    Dim affichage As New DetailsAffichage()

    ' Utilisation avec différents types
    affichage.Afficher(123) ' Appelle avec un entier
    affichage.Afficher("Bonjour") ' Appelle avec une chaîne
    affichage.Afficher(DateTime.Now) ' Appelle avec une date
End Sub

Résultat Attendu

Détails : 123
Détails : Bonjour
Détails : 01/12/2024 10:23:45

4. Polymorphisme avec des Méthodes Abstraites

Les classes abstraites permettent d’imposer un comportement spécifique dans les classes dérivées.

Code Exemple

' Classe abstraite
Public MustInherit Class Employe
    Public MustOverride Function CalculerSalaire() As Decimal
End Class

' Classe Employe à temps plein
Public Class EmployeTempsPlein
    Inherits Employe
    Public Overrides Function CalculerSalaire() As Decimal
        Return 3000 ' Salaire fixe
    End Function
End Class

' Classe Employe contractuel
Public Class EmployeContractuel
    Inherits Employe
    Public Overrides Function CalculerSalaire() As Decimal
        Return 20 * 50 ' 20 heures à 50€/heure
    End Function
End Class

' Programme principal
Sub Main()
    Dim employes As New List(Of Employe)()
    employes.Add(New EmployeTempsPlein())
    employes.Add(New EmployeContractuel())

    For Each employe As Employe In employes
        Console.WriteLine("Salaire : " & employe.CalculerSalaire() & "€")
    Next
End Sub

Résultat Attendu

Salaire : 3000€
Salaire : 1000€

5. Polymorphisme avec Collections Polymorphiques

Vous pouvez manipuler des objets de différents types dans une seule collection polymorphique.

Code Exemple

' Classe parent
Public Class Document
    Public Overridable Sub Imprimer()
        Console.WriteLine("Impression d'un document générique.")
    End Sub
End Class

' Classe fille Facture
Public Class Facture
    Inherits Document

    Public Overrides Sub Imprimer()
        Console.WriteLine("Impression d'une facture.")
    End Sub
End Class

' Classe fille Rapport
Public Class Rapport
    Inherits Document

    Public Overrides Sub Imprimer()
        Console.WriteLine("Impression d'un rapport.")
    End Sub
End Class

' Programme principal
Sub Main()
    Dim documents As New List(Of Document)()
    documents.Add(New Facture())
    documents.Add(New Rapport())

    For Each document As Document In documents
        document.Imprimer()
    Next
End Sub

Résultat Attendu

Impression d'une facture.
Impression d'un rapport.

6. Polymorphisme Statique avec Surcharge

La surcharge de méthode est une forme de polymorphisme où une méthode peut avoir plusieurs signatures.

Code Exemple

Public Class Calculatrice
    ' Surcharge avec deux entiers
    Public Function Additionner(a As Integer, b As Integer) As Integer
        Return a + b
    End Function

    ' Surcharge avec trois entiers
    Public Function Additionner(a As Integer, b As Integer, c As Integer) As Integer
        Return a + b + c
    End Function
End Class

' Programme principal
Sub Main()
    Dim calc As New Calculatrice()
    Console.WriteLine("Addition de 2 et 3 : " & calc.Additionner(2, 3))
    Console.WriteLine("Addition de 1, 4 et 5 : " & calc.Additionner(1, 4, 5))
End Sub

Résultat Attendu

Addition de 2 et 3 : 5
Addition de 1, 4 et 5 : 10

Résumé

Le polymorphisme en VB.NET permet de :

  • Simplifier la gestion des comportements grâce aux classes de base et aux interfaces.
  • Rendre le code extensible pour de nouveaux types d’objets.
  • Faciliter la réutilisation et la maintenance du code.

Ces exemples montrent comment tirer parti du polymorphisme dans différents contextes pour écrire un code clair, concis et évolutif.

Autres articles

Guide : Trier un Tableau en VB.Net
Trier un tableau en VB.Net consiste à organiser ses éléments...
Read more
Guide : Désérialiser un Tableau JSON avec...
Newtonsoft.Json (ou Json.NET) est une bibliothèque populaire pour la manipulation...
Read more
Guide : Tableaux d’Objets en VB.Net
Un tableau d’objets en VB.Net est une structure de données...
Read more

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *