Programmation orientée objet dans 4D : Gérer l’héritage des classes

Traduit automatiquement de Deepl

Dans un précédent billet de blog, nous avons présenté un concept très important de la programmation orientée objet : Les classes. Nous allons maintenant passer en revue un autre concept essentiel : L’héritage, le mécanisme qui permet à une classe d’acquérir le comportement d’une autre classe.

Exemple de base de données

Vous vous souvenez de l’exemple de la classe « Personne » dans l’article précédent ? Imaginons une école et nous voulons gérer les étudiants et les enseignants. Tous deux sont des personnes, mais avec des caractéristiques différentes. Nous créons donc une classe « Professeur » et une classe « Étudiant », et ces deux classes héritent des caractéristiques de la classe « Personne ».

Comment hérite-t-on d’une classe d’une autre ?

Un nouveau Class extends est maintenant disponible pour faciliter l’héritage. En reprenant notre exemple d’école, nous créons une classe « Student » qui hérite de la classe « Person ».

Class Extends Person

Et le constructeur ?

Alors pour le constructeur (si vous n’avez pas défini un constructeur spécifique pour la classe « Student »), le constructeur de la classe « Person » est automatiquement appelé.

Vous pouvez également surcharger un constructeur. Par exemple dans le cas de « Student » : un étudiant a un nom, un prénom et une date de naissance comme une personne, mais un étudiant a aussi une note et une école. Dans ce cas, vous pouvez utiliser la commande new Super qui permet d’appeler le constructeur de la classe parente. Ensuite, dans le constructeur « Student », vous pouvez ajouter le code spécifique pour le grade et l’école.

Class constructor
C_TEXT( ) ( ) ( ) ( ) ( ) ( ; ; ) $1 // FirstName
C_TEXT$2 // LastName
C_DATE$3 // Birthdate
C_TEXT$4 // SchoolName
C_TEXT$5 // Grade
Super$1$2$3 // Call the "Person" constructor
This
.SchoolName:= $4
This . :Grade
=$5

Et les fonctions ?

Vous pouvez ajouter des fonctions spécifiques à la classe « Student » à partir desquelles vous pouvez appeler une fonction de la classe parente (« Person »).

Dans l’exemple suivant, nous avons une fonction qui renvoie une chaîne de caractères contenant le nom, la classe et l’école de l’étudiant. Dans la classe « Personne », nous avons déjà une fonction qui renvoie le nom complet d’une personne. Nous appelons donc cette fonction, getFullName, et ajoutons les informations spécifiques à un étudiant.

Function getIdentity
C_TEXT( ) := . ()+", "+ . +" note dans "+ .$0
$0SupergetFullNameThisGradeThisSchoolName

Dans une méthode, nous instancions une instance de la classe « Student ». Nous appelons la fonction getFullName de la classe parente, « Personne ». Puis, nous appelons la fonction getIdentity de la classe « Student ». Comme vous pouvez le constater, il n’y a aucune différence entre les fonctions getFullName et getIdentity.

C_OBJECT($s)
$s :=cs.Student.new("Joe" ; "Doe";!2002-02-20! ; "Waco High School" ; "10th")

$name :=$s.getFullName()
//return John Doe
$identity :=$s.getIdentity() //return Joe DOE, 10th grade in Waco High School

Une démonstration en direct à résumer

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.