Gambas 3/Gambas3LeLangage/L'orienté objet avec Gambas/Les méthodes et les variables statiques
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
' ..
Quiz
[modifier | modifier le wikicode]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 !