Classes : modèles d'objets

Mise à jour : novembre 2007

Les classes sont des représentations symboliques d'objets ; elles décrivent les propriétés, les champs, les méthodes et les événements qui constituent des objets de la même façon que les plans sont des modèles décrivant les éléments qui composent un bâtiment. Tout comme un plan peut être employé pour construire plusieurs bâtiments, une classe unique peut servir à créer autant d'objets que cela est nécessaire. Et tout comme un plan définit les parties d'un bâtiment qui sont accessibles aux personnes utilisant celui-ci, les classes peuvent elles aussi contrôler l'accès des utilisateurs aux composants des objets par l'encapsulation.

Classes et objets

Les termes classe et objet sont parfois employés indifféremment, mais en réalité, les classes décrivent la structure des objets, alors que ces derniers sont des instances utilisables des classes. Chaque instance est une copie exacte, mais distincte de sa classe. Dans la mesure où un objet est une instance d'une classe, l'action de créer un objet se nomme instanciation.

Si l'on reprend l'analogie avec un plan de construction, une classe est un plan, et un objet est un bâtiment construit à partir de ce plan. Habituellement, la modification des données dans un objet ne modifie les données dans aucun autre objet. (les membres partagés qui sont des membres de classe déclarés avec le modificateur Shared, font toutefois exception à cette règle puisqu'ils existent indépendamment des instances spécifiques d'une classe).

Encapsulation

L'encapsulation est la capacité à contenir un groupe d'éléments associés et à en contrôler l'accès. Les classes constituent l'un des moyens les plus courants d'encapsuler des éléments. Dans l'exemple ci-dessous, la classe BankAccount encapsule les méthodes, les champs et les propriétés qui décrivent un compte bancaire.

Sans encapsulation, il aurait été nécessaire de déclarer des procédures et des variables distinctes pour stocker et gérer les informations relatives au compte bancaire, sans parler de la difficulté de manipuler plus d'un seul compte bancaire à la fois. L'encapsulation vous permet d'utiliser les données et les procédures de la classe BankAccount en tant qu'unité. Vous pouvez manipuler plusieurs comptes bancaires à la fois sans qu'il y ait confusion, car chaque compte est représenté par une instance unique de la classe.

L'encapsulation permet en outre de contrôler la manière dont les données et les procédures sont utilisées. Vous pouvez recourir à des modificateurs d'accès, tels que Private ou Protected, pour empêcher les procédures externes d'exécuter des méthodes de classe ou de lire et de modifier les données figurant dans les propriétés et les champs. Vous devez déclarer les détails internes d'une classe en tant que Private pour éviter qu'ils soient utilisés en dehors de votre classe ; cette technique est appelée le masquage de données et permet de protéger des informations client, telles que le solde d'un compte.

L'une des règles fondamentales de l'encapsulation est que des données de classe doivent être modifiées ou extraites uniquement par des méthodes ou des procédures Property. Le fait de masquer les informations d'implémentation des classes vous permet d'empêcher que celles-ci ne soient utilisées de façon non souhaitée et de modifier ces éléments ultérieurement sans risquer des problèmes de compatibilité. Par exemple, les versions ultérieures de la classe BankAccount peuvent modifier le type de données du champ AccountBalance sans entraver le fonctionnement des applications pour lesquelles ce champ doit absolument présenter un type de données spécifique.

Héritage

Comme les structures Visual Basic, vous pouvez utiliser des classes pour définir des types de données qui encapsulent un groupe d'éléments connexes. Contrairement aux structures, toutefois, les classes Visual Basic peuvent hériter des caractéristiques d'autres classes et étendre ces caractéristiques. Les classes qui servent de base à de nouvelles classes sont appelées classes de base. Les classes dérivées des classes de base sont appelées classes dérivées. Les classes dérivées héritent de tous les champs, propriétés, méthodes et événements de leur classe de base. Cela signifie que vous pouvez développer et déboguer une classe une seule fois et la réutiliser ensuite comme la classe de base d'autres classes.

L'exemple suivant définit une classe de base qui représente un compte bancaire générique, et une classe spécifique qui hérite des propriétés de la classe de base, mais qui est personnalisée pour décrire un compte de chèques.

Class BankAccount
    Private AccountNumber As String
    Private AccountBalance As Decimal
    Private HoldOnAccount As Boolean = False
    Public Sub PostInterest()
        ' Add code to calculate the interest for this account.
    End Sub
    ReadOnly Property Balance() As Decimal
        Get
            ' Return the available balance.
            Return AccountBalance
        End Get
    End Property
End Class

Class CheckingAccount
    Inherits BankAccount
    Sub ProcessCheck()
        ' Add code to process a check drawn on this account.
    End Sub
End Class

Pour plus d'informations sur l'héritage, consultez Éléments fondamentaux de l'héritage.

Membres partagés

Par défaut, les données de classe sont spécifiques à chaque instance de la classe, mais il peut arriver qu'une donnée unique doive être partagée entre tous les objets créés à partir d'une classe. Dans de tels cas, utilisez le modificateur Shared pour qu'une variable partage la même valeur dans toutes les instances d'une classe (les membres Shared sont parfois désignés sous le nom de « membres statiques » dans d'autres langages de programmation). Vous pouvez appeler des méthodes partagées directement à l'aide d'un nom de classe sans créer au préalable une instance de la classe.

Pour plus d'informations sur les membres partagés, consultez Membres partagés en Visual Basic.

Occultation

Les classes dérivées peuvent utiliser le mot clé Shadows pour déclarer un membre avec le même nom que le membre hérité. Les membres occultés ne doivent pas forcément être du même type de données que le membre à occulter. Par exemple, une propriété peut occulter une variable de type Integer.

Pour plus d'informations sur les membres partagés, consultez Occultation dans Visual Basic.

Voir aussi

Concepts

Structures et classes

Éléments fondamentaux de l'héritage

Membres partagés en Visual Basic

Occultation dans Visual Basic

Référence

Shadows

Shared (Visual Basic)

Autres ressources

Création et utilisation d'objets

Héritage en Visual Basic