Aller au contenu

Gambas 3/Gambas3LeLangage/L'orienté objet avec Gambas/Les méthodes et les variables statiques

Un livre de Wikilivres.

Les méthodes et les variables statiques

[modifier | modifier le wikicode]

Le mot-clé "Static" indique que la portée de la méthode ou de la variable est générale à toute la classe. (et pas au seul objet)

Variables statiques

[modifier | modifier le wikicode]

Une variable statique est une variable stockée au niveau de la classe. Cette variable est partagée par tous les objets instanciés étant du type de cette classe. Tous les objets de cette classe peuvent y accéder.

L'exemple typique est le compteur d'instances créées.

  • Créez un nouveau projet de type Console !
  • Créez une nouvelle classe nommée "Thing" et collez-y le code suivant !
' Gambas class file

' Thing

Property Name As String

Static Private $iInstancesCount As Integer

Private $name As String

Public Sub _new()
  
  $iInstancesCount += 1
  
End

Public Sub _free()
  
  $iInstancesCount -= 1
  
End


Static Public Function GetInstances() As Integer
  
  Return $iInstancesCount
  
End

Static Public Function Create(ChoseName As String) As Thing
  
  Dim c As New Thing
  c.Name = ChoseName
  Return c  
  
End

Private Function Name_Read() As String

  Return $name

End

Private Sub Name_Write(Value As String)

  $name = Value

End
  • Puis activez le code du module principal et remplacez le code par ce qui suit !
' Gambas module file

' Main

Public Sub Main()

  Dim c As Thing
  Dim d As Thing
  Dim e As Thing

  Print Thing.GetInstances()
  
  Print "Nous créons présentement 3 instances de Thing ... "
  c = Thing.Create("test1")
  d = Thing.Create("test2")
  e = Thing.Create("test3")  
  Print "Le compte est le suivant: " & Thing.GetInstances()

  Print "Nous supprimons présentement 2 instances de Thing ... "
  e = Null
  d = Null
  Print "Le compte est le suivant: " & Thing.GetInstances()
  
  Print "Bien que vous ne le voyez pas, à la fin du programme, "
  Print "La dernière des instances sera également supprimée. "

End

Pour accéder au variables statiques, vous devriez utiliser des méthodes statiques.

Méthodes statiques

[modifier | modifier le wikicode]

Un objet a une instance qui lui est propre. Si j'ai un objet appelé "$titine" typé Voiture, $titine.Avance() agira au niveau de l'objet.

  $titine.Avance()

Seule la voiture nommée $titine avancera. Toutes les autres voitures ne seront pas concernées.

Un jour ou l'autre, vous voudrez créer une méthode qui concernera les voitures en général.

Imaginons ceci : nous voulons définir une méthode Créer() qui génère une nouvelle instance de Voiture selon des modèles prédéfinis. Cette méthode sera appelée sur la classe en général et non sur une instance précise comme ceci :

  Voiture.Créer("modèle formule 1")

Vous l'aurez deviné, Static est le mot-clé qui définit une méthode au niveau de la classe (et non au niveau de chaque objet).

Dans la classe Voiture, la méthode Avance() est une méthode qui agit sur une instance d'un objet de type Voiture.

  ' agit sur une instance ... 
  Public Sub Avance()
  ' ..

La méthode Créer(), elle, agit sans avoir besoin d'une instance. Elle agit au niveau de la classe :

  ' agit sur la classe (le moule) ... 
  Static Public Function Créer() as Voiture
  ' ..

Static est un mot-clé que vous n'employez que dans les classes. Pourquoi ?

Parce qu'un module est statique par définition. Vous n'avez pas à le spécifier une fois de plus dans le code. Toutes les méthodes et toutes les variables appartenant à un module sont statiques. On le voit lors de l'invocation de la méthode :

  Module1.FaitCeci()

Bravo pour l'acquisition de ces notions importantes !