Accueil > Ressources > Perl 5 > L’héritage en java vu depuis perl 5

L’héritage en java vu depuis perl 5

lundi 25 janvier 2010, par GHISLERI, THOME

Perl 5 incorpore l’héritage, mais en une couche supplémentaire. Java plus récent, est Orienté Objet à la base.

JAVA est un langage informatique qui a été conçu spécialement pour la programmation orientée objet.
L’idée de celle-ci est de rassembler dans une même entité appelée objet les données et les traitements qui s’y appliquent.

L’héritage en JAVA.

Le concept d’héritage est un des concepts les plus importants de la programmation orientée objet car on peut faire dériver une nouvelle classe d’une classe existante et ainsi en récupérer les attributs et méthodes, sans avoir à la réécrire complètement.

On dit que la classe Enfant hérite de la classe Parent, qu’elle étend cette ancienne classe.
Pour cela, il existe deux types de classes différentes :

Enfant est alors une sous-classe (subclassed) de Parent
Parent est une super-classe (surclasse) de Enfant.

Une sous-classe reprend toutes les propriétés et méthodes de la super-classe,tout en pouvant intégrer de champs nouveaux (attributs et méthodes).

Ainsi, pour définir une nouvelle classe, il suffit de la faire hériter d’une classe existante et de lui ajouter de nouvelles propriétés/méthodes.
Par contre, une classe peut posséder un nombre illimité de sous-classes mais elle ne peut avoir qu’une seule classe mère : il n’y a pas d’héritage multiple en Java.

De cette façon, les classes héritées forment une hiérarchie descendante (voir schéma PowerPoint), au sommet de laquelle se situe la classe de base (superclasse). On appelle également la classe héritée la sous-classe et la classe parente la super-classe.

Exemple JAVA :

Soit une classe générale Ville qui possède 2 attributs d’instance privés nom et nbHabitants (on aurait pu ajouter une variable statique pour numéroter les villes construites)

******************** la classe Ville ************************
public class Ville
private String nom ;
private int nbHabitants ;

L’héritage est un des apports de la programmation objet. Perl dispose de tout ce qu’il faut pour le mettre en œuvre.

Il existe un tableau spécial appelé @ISA à l’intérieur de chaque paquetage, qui indique une méthode, si on ne la trouve pas dans le paquetage courant.
C’est de cette façon que Perl implémente l’héritage.
Chaque élément du tableau @ISA est juste le nom d’un autre paquetage qui s’avère être un paquetage de classe. Les méthodes manquantes sont recherchées dans cette arborescence de classes en profondeur et de gauche à droite par défaut.
Les classes accessibles à travers @ISA sont les classes de base de la classe courante.

Exemple PERL :

Imaginons que nous avons la classe Employeur héritant de Personne
(l’employé est une personne ayant un statut) :

package Employeur ;
use Personne ;
our @ISA = ("Personne") ;
sub est_embauche
my($classe,$un_nom,$un_age,$un_statut) = @_ ;
my $self = $classe->SUPER ::new($un_nom,$un_age) ;
$self->STATUT = $un_statut ;
bless($self,$classe) ;
return($self) ;

De plus, l’héritage nous permet d’exprimer cette relation entre deux classes. Il permet de dire qu’une classe ISA est une spécialisation d’une autre classe. Lorsqu’une classe hérite d’une autre, elle hérite de ses attributs et de ses méthodes, et elle rajoute à cela ses propres méthodes et attributs, On peut parler aussi de classe dérivée.

Cependant, la classe dérivée est donc plus complète que la classe de base puisqu’elle rajoute des éléments supplémentaires

Exemple :

Si Classe2 hérite de Classe1, Classe2 est la classe fille et Classe1 la classe mère ou la classe parente. On dit aussi que Classe2 est une classe dérivée de Classe1.

L’héritage permet de ne pas recommencer à zéro à chaque fois que l’on crée une classe. Il introduit la notion de classification.

En Perl, les classes mères sont stockées dans le tableau@ISA (variable globale - déclarée non pas via my mais our).

Par contre, en Java, l’héritage de classe se fait de manière très simple, à l’aide de l’instruction extends. Pour information, toutes les classes d’une application Java sont des extensions de la classe java.lang.Object, qui est la racine de cette hiérarchie.

Exemple JAVA :

public class Ornithorynque extends Monotreme

...instructions...

Les propriétés et méthodes "héritées" peuvent être définies au sein de la super-classe. Ainsi, la sous-classe hérite de toutes les propriétés et méthodes de sa super-classe qui lui sont accessibles, à moins que la super-classe ne dissimule de manière explicite des propriétés ou méthodes.