Gambas 3/Gambas3LeLangage/L'orienté objet avec Gambas/Les classes statiques

Un livre de Wikilivres.
Sauter à la navigation Sauter à la recherche

Les classes statiques[modifier | modifier le wikicode]

En Gambas, je devrais dire "une classe créée statiquement" et ça serait bien plus juste ! Gare aux abus de langages !

Définition[modifier | modifier le wikicode]

Une classe statique est une classe utilitaire regroupant des outils par thème.

La classe Settings (les options sauvegardées par les utilisateurs d'un programme) est un bon exemple de classe statique.

On utilise la classe sans devoir créer une instance au préalable comme par exemple :

  Settings.Save()

C'est commode car on n'a pas eu besoin de créer un objet.

Particularité de Gambas[modifier | modifier le wikicode]

Dans beaucoup d'autre langages, une classe statique ne peut pas être instanciée !

En Gambas, c'est différent. En effet, une classe statique est instanciée automatiquement. Dans le code ci-dessus, Settings désigne l'instance créée par Gambas au démarrage du programme.

Gambas permet même de créer d'autres instances et c'est là que ça devient un peu perturbant ! Au début, je vous recommande de ne pas instancier d'objet lorsque la classe est statique même si le code ci-dessous est tout à fait valide en Gambas :

  Dim s as New Settings  
  s.Save()

Par commodité, vous allez vouloir créer des classes statiques. Voici comment procéder.

Comment créer votre classe statique[modifier | modifier le wikicode]

Après avoir créé votre classe comme d'habitude, vous inscrivez le mot-clé Create Static tout au début de votre classe comme ceci :

  Create Static   ' tout en haut de la classe
  ' ...

Retenez que le constructeur est invoqué lors de la création de l'instance automatique et que vous pouvez implémenter _new().

Comment créer une unique instance[modifier | modifier le wikicode]

Il existe un patron de conception (design pattern) nommé Singleton qui nous donne une recette pour créer une unique instance d'un objet. En Gambas, vous pouvez utiliser un module directement ou, plus compliqué, ajouter Create Private comme dans le code ci-dessous :

' Gambas class file

' Singleton

Create Static
Create Private

Private $nom As String

Public Sub _new()

  $nom = "Singleton"

End

Public Function GetInstance() As Singleton

  Return Me

End

Public Sub printNom()

  Print $nom

End

N'hésitez pas à revenir sur ces notions plus tard. Continuez à progresser !