Gambas 3/Gambas3LeLangage/L'orienté objet avec Gambas/Les événements

Les événements

modifier

Lorsqu'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.