Cours surcharge et redéfinition, tutoriel & guide de travaux pratiques en pdf.
Sur charge et Redéfinition
La surcharge
Type déclaré et type réel
Algorithme de résolution de la surcharge
Lare définition
Exécution de service
Exemple de sélection de services
La surcharge
La surcharge est la possibilité d’utiliser dans une même classe, le même nom pour déclarer des services différents mais qui ont la même sémantique. Nous avons déjà vu le mécanisme de sur charge lors que plusieurs constructeurs sont définis pour une classe.Un exemple des surcharge est le suivant:
public interface Point2D{ ...... public void homothetie(double rapport); //service sur charge public void homothetie (Point2Dp, double rapport);//service sur charge ..... } Dans ce cas, le service homothétie est sur chargé puis qu'il est déclaré deux fois dans l'interface Point2D avec des paramètres différents. L'utilisation de la surcharge se fait de la même manière avec des classes. Public classPoint2DCartesienimplements Point2D { ........ public void homothétie(double rapport) { homothetie (new Point Cartesion(0,0), rapport) ;// appel à l'autre fonction homothétie de la} // classePoint2DCartesien public void homothétie(Point2Dp, double rapport){ .............. } }
Type déclaré et type réel
Le type déclaré d’un objet est le type de la variable qui le référence, ce type peut varier en fonction de la déclaration. Le type réel d’un objet est le type de la classe qui l’a instancié, ce type ne peut jamais changé. Par exemple,
Forme Facto f =new Cercle();
Forme g= f;
Cercle c= (Cercle) g;
On suppose que Cercle est un sous type de Forme Facto qui lui même est un sous type de Forme.
L’objet crée par new Cercle() est un objet de type réel Cercle(). La variable f est de type déclaré Forme Facto, mais le type réel de l’objet référencé par f est Cercle. La variable gréféren ce le même objet que la variable f, le type déclaré de g est Forme et le type réel est toujours Cercle. En fin le type déclaré et le type réel de c concorde.
Algorithme de résolution de la surcharge
L’algorithme de surcharge peut produire trois résultats différents :
– Erreur de compilation si aucune fonctionne correspond à l’appel
– Erreur de compilation si plusieurs fonctions sont à la même distance minimale de l’appel
– Un résultat correct si une seule fonction est à une distance minimale de l’appel.
Soit l’appel o.f(p1,….pn) ou T.f(p1,….pn), on doit maintenant sélectionner la signature du service f qui correspond au mieux à cet appel. On notera T1le type déclaré dep1,…. TN le type déclaré de pn.
La redéfinition
La redéfinition est la possibilité d’utiliser exactement la même signature pour définir un service dans un type et dans un sous type.Le type de retour du service doit être le même, mais la visibilité peut changer.
Un exemple, qui mêle sur charge et redéfinition.
public interface Forme {………….} public class Carre implements Forme{……..} public class Cercle implements Forme{…….} public class Dessin { public void dessiner(Forme f) {………}// sur charge de dessiner dans la classe Dessin public void dessiner(Carre c){……….} //sur charge de dessiner dans la classeDessin } public classDessin Colorie extends Dessin { Public void dessiner(Formef) {……..}// redéfinition du service dessiner dela classe Dessin //dans la classe DessinColorie }
Exécution de service.
Algorithme de sélection de services, permet d’exécuter un service dynamiquement. Soit l’appel o.f(p1,….pn), on parle de liaison dynamique ou de polymorphisme simple. Le motpolymorphisme simple, signifie que le type réel de l’objet o participe à la sélection du service f , et que le type réel des paramètres n’intervient pas,d’où le qualificatif simple.
Algorithme de sélection des services :
Soit le code
Tdeclare o =new Treel() ;// Type Déclare de l’objet oTdeclare ;
//Type Réel de l’objet o Treel ;
o.f (p1,…pn) ;
…….