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

Les classes statiques

modifier

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

Définition

modifier

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

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

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

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 !