Gambas 3/Gambas3LeLangage/L'orienté objet avec Gambas/Les classes statiques
Les classes statiques
modifierEn Gambas, je devrais dire "une classe créée statiquement" et ça serait bien plus juste ! Gare aux abus de langages !
Définition
modifierUne 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
modifierDans 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
modifierAprè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
modifierIl 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 !