Améliorer vos développements orientés objet .NET grâce à la propriété Shared

Publié le 06 octobre 2008 par Dave Lizotte

En effet, il est «simple» si l'on s'en tient à la base, de programmer en orienté objet sous .NET. Mais dans les faits, si on a la ferme intention de devenir meilleur dans ce type de programmation il faudra voir un peu plus loin que la base. Il existe plusieurs méthodes et façons de faire afin d'amener notre code à un autre niveau. C'est une de ces techniques que nous allons voir aujourd'hui.

Sous .NET, vous avez peut-être déjà remarqué la propriété «Shared»! Mais vous ne savez peut-être pas à quoi elle sert! Alors après la lecture de cet article, vous serez en mesure d'être plus efficace et de générer un code plus performant et moins gourmand en mémoire.

La différence en une classe et une instantiation de classe

Une façon simple de comprendre la différence en la classe et l'instantiation de la classe est de considérer la distinction entre le type Integer et une variable de type Integer.
  • Vous ne pouvez assigner une valeur à un type :
Integer = 5      ' Erreur
  • Par contre, vous pouvez assigner une valeur à un objet de ce type :
Dim monInteger as Integer monInteger = 5   ' Ok

Si on reprend le même principe du côté orienté objet, il est impossible d'utiliser le membre d'une classe sans instanciation :

Maclasse.maPropriété = 5    ' Erreur

Afin d'être en mesure d'effectuer cette opération, il faut créer une instance de notre objet :

Dim monObjet as New Objet
monObjet.maPropriété = 5   ' Ok

La propriété Shared

Mais où voulons nous en venir ? Les principes énumérés ci-haut sont en effet très simple et doivent être normalement connu de tous programmeurs. Où est le problème alors ? Afin d'illustrer le problème, voyons l'exemple suivant : J'ai un objet Employé ayant plusieurs méthodes. Cette objet contient une méthode nommé GetEmployeByID(X as Integer) qui retourne les informations de l'employé ayant l'identifiant X. Jusque là rien de bien complexe. La pluspart des programmeurs novices feront comme ceci. Ils généreront 2 objets! Un premier vide qui permetteras d'instancier le nouveau comme ceci :

Dim monObjet1 as New Employe
Dim monObjet2 as New Employe
monObjet1 = monObjet2.GetEmployeById(X)

Nous voilà ici avec 2 objets en mémoire qui dans la réalité devient une perte de performance, de lisibilités ... Par contre, d'autre seront un peu plus astucieux et contourneront ce problème en générant un objet Employe vide. Ce dernier appelera la méthode GetEmployeById(X) qui ce chargera d'attribué les valeurs à chaque propriété comme ceci :

Dim monObjet1 as New Employe
monObjet1.GetEmployeById(X)

Voilà le moment ou la propriété Shared entre en jeu. En effet, grâce à cette propriété, il est possible d'utiliser une méthode, une fonction ou une propriété d'une objet sans instance de ce dernier. Ceci vient palier à tous les problèmes de mémoire, de performance et autre. Voilà comment ce dernier s'utilise :

Classe

Public Class Employe
   ''' <summary>
   ''' Méthode retournant un Employe selon sont Identifiant
   ''' </summary>
   ''' <param name="ID">Identifiant de l'employé recherché</param>
   ''' <returns>Objet Employe</returns>
   ''' <remarks>Version 1.00</remarks>
   Public Shared Function GetEmployeById(ByVal ID As Integer) As Employe
         ...
      End Function     
End Class

Code

...
' Utilisation : Namespace.Objet.Méthode
Dim MonEmploye As Employes.Employe = Employes.Employe.GetEmployeById(2)