Comparaison entre héritage et composition
257
Parrallèlement, créons une classe nommée Cerclec utilisant un attribut de type Point
classe Cerclec
{ méthode Cerclec (entier x, entier y, réel r)
{ centre := Création Point(x, y)
}
Point centre
réel rayon
}
On constate qu’ici, nous avons dû choisir entre les deux formes de constructeur possible
(coordonnées du centre, ou objet de type Point).
Considérons un objet de chaque type :
Cercled cd
Cerclec cc
cd := Création Cercled (3, 5, 4.5)
cc := Création Cerclec (3, 5, 4.5)
La situation peut être schématisée ainsi :
Dans le cas de la classe dérivée Cercled, on voit qu’on a été amené à ne créer qu’un seul
objet renfermant l’ensemble des attributs d’un cercle. En revanche, dans le cas de la classe
composée Cerclec, on constate qu’on est en présence de relations entre deux objets qui
seront plus ou moins « dépendants », suivant la manière dont s’est opérée la construction (ici,
on a affaire à une relation de possession).
D’autres différences apparaissent également au niveau de l’utilisation des objets correspondants. À l’objet cd, on peut, sans aucun problème appliquer la méthode déplace, héritée de
sa classe de base :
cd.deplace (4, 5)
// OK
En revanche, ce n’est plus possible avec cc :
cc.deplace (4, 5)
// impossible, déplace n’est pas une méthode de Cerclec
Il faudrait appliquer cette méthode à l’attribut cercle de cc (cc.cercle.deplace(...)), ce qui ici n’est pas possible puisque cet attribut est privé.
cc
3
5
4.5
4.5
3
5
cd
Objet créé par composition
Objet créé par dérivation
257
Parrallèlement, créons une classe nommée Cerclec utilisant un attribut de type Point
classe Cerclec
{ méthode Cerclec (entier x, entier y, réel r)
{ centre := Création Point(x, y)
}
Point centre
réel rayon
}
On constate qu’ici, nous avons dû choisir entre les deux formes de constructeur possible
(coordonnées du centre, ou objet de type Point).
Considérons un objet de chaque type :
Cercled cd
Cerclec cc
cd := Création Cercled (3, 5, 4.5)
cc := Création Cerclec (3, 5, 4.5)
La situation peut être schématisée ainsi :
Dans le cas de la classe dérivée Cercled, on voit qu’on a été amené à ne créer qu’un seul
objet renfermant l’ensemble des attributs d’un cercle. En revanche, dans le cas de la classe
composée Cerclec, on constate qu’on est en présence de relations entre deux objets qui
seront plus ou moins « dépendants », suivant la manière dont s’est opérée la construction (ici,
on a affaire à une relation de possession).
D’autres différences apparaissent également au niveau de l’utilisation des objets correspondants. À l’objet cd, on peut, sans aucun problème appliquer la méthode déplace, héritée de
sa classe de base :
cd.deplace (4, 5)
// OK
En revanche, ce n’est plus possible avec cc :
cc.deplace (4, 5)
// impossible, déplace n’est pas une méthode de Cerclec
Il faudrait appliquer cette méthode à l’attribut cercle de cc (cc.cercle.deplace(...)), ce qui ici n’est pas possible puisque cet attribut est privé.
cc
3
5
4.5
4.5
3
5
cd
Objet créé par composition
Objet créé par dérivation
