Beaucoup d’entre vous ont demandé à pouvoir définir un type d’objet depuis que le type Objet est disponible. Grâce à la notation objet, beaucoup d’entre vous rêvent d’avoir des fonctions objet. Ne rêvez plus et dites bonjour aux classes dans la base de données des projets 4D v18 R3 ! Dans ce billet de blog, nous vous présentons l’un des concepts les plus intéressants de la programmation orientée objet… avec un exemple de base de données et une vidéo bonus!
Exemple avec la classe « Personne
Remarque: à partir de 4D v18 R3, toutes les IDH seront hébergées sur GitHub. Vous pouvez soit cloner l’IDH, soit télécharger directement le fichier Zip. Consultez ce paragraphe pour plus de détails.
Qu’est-ce qu’une classe ?
Une classe est un type de données défini par l’utilisateur qui vous permet de définir le comportement d’un objet. Elle contient ses propres fonctions membres auxquelles on peut accéder et qu’on peut utiliser lorsqu’une instance de la classe est créée.
Comment créer une classe
Vous pouvez créer une classe à partir du menu Nouveau de la barre d’outils ou de la boîte de dialogue Explorateur. Maintenant que l’éditeur de classe est affiché, vous pouvez créer le constructeur et les fonctions.
Comment créer des fonctions de classe ?
Pour créer une fonction, vous devez utiliser le mot-clé Function suivi du nom de la fonction. Ensuite, vous pouvez passer des paramètres (comme pour les méthodes).
Function methodName
( ; ) :="Salut "+ C_TEXT$0$1
$0$1
Qu’est-ce que le magasin de classes ?
Vous connaissez déjà la commande ds (qui vous permet d’accéder au datastore). Maintenant, en utilisant la même logique, vous avez la commande cs qui renvoie le magasin de classes. Toutes les classes que vous créez sont visibles et disponibles dans le magasin de classes.
Pour créer un objet qui est une instance d’une classe, vous utilisez la commande cs et la fonction membre new.
C_OBJECT($o)
$o :=cs.myClass.new()
Qu’est-ce qu’un constructeur ?
Un constructeur est utilisé pour créer et instancier un objet avec des attributs par défaut. Il est appelé automatiquement lorsque l’objet est initialisé.
Dans l’éditeur, il suffit d’écrire Class constructor. Vous pouvez passer des paramètres à votre constructeur pour initialiser certaines variables, tout comme vous pouvez le faire avec une méthode en utilisant $1, $2, etc.
Pour la classe :
Class constructor
( ) . := C_LONGINT$1
Thisvariable$1
Pour la méthode qui instancie un objet de la classe, passez le paramètre à la nouvelle fonction membre :
C_OBJECT($o)
$o :=cs.Class1.new(8)
Exemple
Voyons un exemple concret avec une classe « Personne ». Je crée :
- un constructeur,
- une fonction getFullName,
- une fonction getAge.
Voici le contenu de ma classe :
Class constructor
( ) ( ) ( ) . := . := . := ( ) := . +" "+ ( . ) ( ) :=( - . )/365.25 C_TEXT$1 // FirstName
C_TEXT$2 // LastName
C_DATE$3 // Birthdate
ThisfirstName$1
ThislastName$2
Thisbirthdate$3
Function getFullName
C_TEXT$0
$0ThisfirstNameUppercaseThislastName
Function getAge
C_LONGINT$0
$0Current dateThisbirthdate
Maintenant, dans une méthode, je crée un objet « Personne ». Ensuite, je lis les attributs et j’exécute les fonctions.
C_OBJECT($o)
$o :=cs.Person.new("John" ; "Doe";!1956-10-27 !) // instantiate the object
$firstname :=$o.firstName // return John
$lastname :=$o.lastName // return Doe
$fullName:=$o.getFullName() // return John DOE
$age:=$o.getAge(
) // return 63
Quelle est la suite ?
Dans le prochain billet de blog, nous aborderons la notion d’héritage entre les classes.