Gambas 3/Gambas3LeLangage/L'orienté objet avec Gambas/Les événements
Les événements
modifierLorsqu'on en a besoin, on peut définir qu'un objet est capable d'envoyer des événements.
Pour cela, on utlise le mot clé Event
comme dans l'exemple ci-dessous. Lorsque les conditions sont remplies, on déclenche l'événement avec le mot clé Raise
.
' Gambas class file
' Audi
Private $vitesse As Integer
Private $nom As Integer
Property Read Vitesse As Integer
Property Read Roule As Boolean
Property Nom As String
'
' On déclare les événements qui peuvent se produire (ou pas) ' < ---
Event IsMoving(speed As Integer)
Event HasStopped()
Public Sub Accelere()
If $vitesse < 100 Then $vitesse += 25
'
' Ici, on déclenche l'événement si les conditions sont remplies
Raise IsMoving($vitesse)
End
Public Sub Freine()
If $vitesse >= 25 Then $vitesse -= 25
If $vitesse < 25 Then
' Ici, on déclenche l'événement ' < -----------------------------
Raise HasStopped()
Else
Raise IsMoving($vitesse) ' < ------------------------------------
Endif
End
Private Function Vitesse_Read() As Integer
Return $vitesse
End
Private Function Roule_Read() As Boolean
Return ($vitesse <> 0)
End
Private Function Nom_Read() As String
Return $nom
End
Private Sub Nom_Write(Value As String)
$nom = Value
End
Le code qui utilise l'objet, par exemple le module MMain, peut aussi utiliser les événements de l'objet. Il y a plusieurs façons de faire. Je vous montre ci-dessous la façon plus simple à mon avis.
- On donne une étiquette à l'objet :
Dim a As New Audi As "MonBolide"
- Puis on écrit la fonction correspondant à l'événement comme dans le code ci-dessous :
Public Sub MonBolide_IsMoving(vitesse As Integer)
Print "Mon bolide se déplace a une vitesse de " & CStr(vitesse) & ". "
End
Public Sub MonBolide_HasStopped()
Print "Mon bolide s'est arrêté. "
End
Une des autres possibilités consiste à utiliser un objet de type Observer. Je vous laisse lire la documentation sur le wiki officiel en cas de besoin.