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.
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
ThisSchoolName:= $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