Une introduction à la programmation orientée objet en 4D : Classes

Traduit automatiquement de Deepl

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.

Vanessa Talbot
- Product Owner -Vanessa Talbot a rejoint l'équipe du programme 4D en juin 2014. En tant que Product Owner, elle est chargée de rédiger les user stories puis de les traduire en spécifications fonctionnelles. Son rôle est également de s'assurer que l'implémentation des fonctionnalités livrées répond aux besoins des clients.Depuis son arrivée, elle a travaillé à la définition des fonctionnalités clés de 4D. Elle a travaillé sur la plupart des nouvelles fonctionnalités de multithreading préemptif et aussi sur un sujet très complexe : la nouvelle architecture pour les applications enginées. Vanessa est diplômée de Telecom Saint-Etienne. Elle a commencé sa carrière à l'Institut de Recherche Criminelle en tant que développeur pour le département audiovisuel. Elle a également travaillé dans les domaines des médias et du médical en tant qu'experte en support technique, en production ainsi qu'en documentation de nouvelles fonctionnalités.