La notion d’héritage
249
attributs publics de Point. Pour simplifier le discours, nous parlerons de membre pour désigner indifféremment un attribut ou une méthode. D’une manière générale, nous pouvons
dire que :
Tout se passe comme si ces membres publics de la classe de base étaient finalement définis
dans la classe dérivée.
En revanche, un objet d’une classe dérivée n’a pas accès aux membres (attributs et méthodes)
privés de la classe de base. C’est bien ce à quoi on peut s’attendre, dans la mesure où l’on ne
voit pas pourquoi un objet de la classe dérivée aurait plus de droits qu’un objet de la classe de
base.
Par exemple, avec :
Pointcol pc
on pourra utiliser l’appel pc.déplace ou pc.affiche, mais on ne pourra (heureusement)
pas accéder à pc.abs ou pc.ord.
Voici un petit programme complet illustrant ces possibilités (pour l’instant, la classe
Pointcol est très rudimentaire ; nous verrons plus loin comment la doter d’autres
fonctionnalités indispensables). Ici, nous créons à la fois un objet de type Pointcol et un
objet de type Point.
// classe de base
classe Point
{ méthode initialise (entier x, entier y) { abs := x ; ord := y }
méthode déplace (entier dx, entier dy) { abs := abs + dx ; ord := ord + dy }
méthode affiche { écrire «Je suis en », x, « », y }
entier abs, ord
}
// classe dérivée
classe Pointcol dériveDe Point
{ méthode colore (entier c) { couleur := c }
entier couleur
}
// Programme utilisant Pointcol et Point
Pointcol pc
Point p
pc := Création Pointcol
pc.affiche
pc.initialise (3, 5)
pc.colore (3)
pc.affiche
pc.déplace (2, -1)
pc.affiche()
p := Création Point
p.initialise (6, 9)
p.affiche()
Un objet d’une classe dérivée accède aux membres publics de sa classe de base.
249
attributs publics de Point. Pour simplifier le discours, nous parlerons de membre pour désigner indifféremment un attribut ou une méthode. D’une manière générale, nous pouvons
dire que :
Tout se passe comme si ces membres publics de la classe de base étaient finalement définis
dans la classe dérivée.
En revanche, un objet d’une classe dérivée n’a pas accès aux membres (attributs et méthodes)
privés de la classe de base. C’est bien ce à quoi on peut s’attendre, dans la mesure où l’on ne
voit pas pourquoi un objet de la classe dérivée aurait plus de droits qu’un objet de la classe de
base.
Par exemple, avec :
Pointcol pc
on pourra utiliser l’appel pc.déplace ou pc.affiche, mais on ne pourra (heureusement)
pas accéder à pc.abs ou pc.ord.
Voici un petit programme complet illustrant ces possibilités (pour l’instant, la classe
Pointcol est très rudimentaire ; nous verrons plus loin comment la doter d’autres
fonctionnalités indispensables). Ici, nous créons à la fois un objet de type Pointcol et un
objet de type Point.
// classe de base
classe Point
{ méthode initialise (entier x, entier y) { abs := x ; ord := y }
méthode déplace (entier dx, entier dy) { abs := abs + dx ; ord := ord + dy }
méthode affiche { écrire «Je suis en », x, « », y }
entier abs, ord
}
// classe dérivée
classe Pointcol dériveDe Point
{ méthode colore (entier c) { couleur := c }
entier couleur
}
// Programme utilisant Pointcol et Point
Pointcol pc
Point p
pc := Création Pointcol
pc.affiche
pc.initialise (3, 5)
pc.colore (3)
pc.affiche
pc.déplace (2, -1)
pc.affiche()
p := Création Point
p.initialise (6, 9)
p.affiche()
Un objet d’une classe dérivée accède aux membres publics de sa classe de base.
