1 / 15

Polymorphisme – 1

Polymorphisme – 1. Les objets peuvent réagir différemment à un appel de méthode, selon la classe dont ils sont une instance. Par exemple, la façon de dessiner n'est pas la même pour un cercle et pour un disque. L'appel de la méthode "dessiner" est le même.

Download Presentation

Polymorphisme – 1

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Polymorphisme – 1 Les objets peuvent réagir différemment à un appel de méthode, selon la classe dont ils sont une instance. Par exemple, la façon de dessiner n'est pas la même pour un cercle et pour un disque. L'appel de la méthode "dessiner" est le même. Comme "Disque" hérite de "Cercle", on définira : - une méthode dessiner dans la classe Cercle - une méthode "dessiner" dans la classe Disque. La méthode "dessiner" de Disque surcharge celle de Cercle. A l'exécution, JVM "décidera" de la méthode à appeler selon l'instance de l'objet : c'est la méthode de la classe de plus bas niveau dans le graphe d'héritage qui sera appelée. -> Edition de liens dynamique

  2. Polymorphisme - 2 class Cercle { . . . public void dessiner(Graphics g) { // on dessine le cercle... } . . . } class Disque extends Cercle { . . . public void dessiner(Graphics g) { // on dessine le disque... } . . . } Cercle c1 = new Cercle(. . .); Disque d1 = new Disque(. . .); . . . c1.dessiner(g); // les « bonnes » méthodes sont appelées d1.dessiner(g);

  3. Polymorphisme - 3 Employé • Soit la hiérarchie de classes suivante class Employé { . . . public int ancienneté() { . . .} public void augmenterSalaire(double pourCent) { salaire *= 1.0 + pourCent / 100.0; } private double salaire; } Manager Secrétaire

  4. Polymorphisme - 4 class Manager extends Employé { public void augmenterSalaire(double pourCent) { double bonus = 0.5 * ancienneté(); super.augmenterSalaire(pourCent + bonus); } } // Tout le personnel est conservé dans un tableau : Employé[] personnel = new Employé[100]; personnel[0] = new Secrétaire(. . .); personnel[1] = new Manager(. . .); // on augmente les salaires de 2% personnel[0].augmenterSalaire(2.0); personnel[1].augmenterSalaire(2.0); // le manager a eu son bonus !

  5. La classe Vector Tableau « à taille variable » Contient uniquement des références sur des objets de classe « Object » On doit donc transtyper ces références pour les utiliser. int size() // nombre d’éléments du vecteur. add(Object o) // ajoute un élément au vecteur. remove(int index)// supprime l’élément à la position index Object elementAt(int index) //l’élément à la position index Ex. : import java.util.Vector; Vector personnel = new Vector(); Manager m = new Manager(...); personnel.add( m ); personnel.add ( new Secrétaire(…) ); for(int i = 0; i < personnel.size(); i++) { Employé e = (Employé)personnel.elementAt(i); e.augmenterSalaire(5.0); }

  6. La classe Object Classe de base de toutes les classes. Contient des méthodes généralement redéfinies dans les classes dérivées. Exemple : public String toString() retourne une représentation lisible de l’objet sous forme de chaîne de caractère, et est appeléepar System.out.print Exemple class Cercle { . . . public String toString() { return " Rayon : " + rayon + " x : " + xCentre + " y : " + yCentre ; } } Cercle c = new Cercle(12.0, 5.0, 40.0); System.out.println(c); Rayon : 40.0 x : 12.0 y : 5.0

  7. Modificateurs d'accès • Accès depuis l’intérieur du paquet d’une classe Modificateur d’accès Héritage Accessible Par défaut Oui Oui Public Oui Oui Protected Oui Oui Private Non Non • Accès depuis l’extérieur du paquet d’une classe Modificateur d’accès Héritage Accessible Par défaut Non Non Public Oui Oui Protected Oui Non Private Non Non

  8. Classes abstraites - 1 • Une classe est dite abstraite si une de ses méthode au moins n'est pas implémentée (méthode abstraite). • Une classe abstraite ne peut pas être instanciée. • Une classe dérivée d'une classe abstraite doit implémenter toutes les méthodes abstraites pour pouvoir être instanciée. abstract public class ObjetGéométrique { . . . // Calcul de l'aire abstract public double aire(); // Calcul du périmètre abstract public double perimetre(); . . . } ObjetGéométrique unObjet; unObjet = new ObjetGéométrique(. . .);

  9. Classes abstraites - 2 abstract class Employé { . . . abstract public void augmenterSalaire(double pourCent); . . . protected double salaire; } class Manager extends Employé { . . . public void augmenterSalaire(double pourCent) { double bonus = 0.5 * ancienneté(); salaire = salaire * (1 + (pourCent + bonus)/100.0); } } class Secrétaire extends Employé { . . . public void augmenterSalaire(double pourCent) { salaire = salaire * (1 + (pourCent + bonus)/100.0); } }

  10. Interfaces - 1 • Une classe ne peut hériter (extends) que d'une seule classe. L'héritage multiple est interdit. Il est remplacé par l'utilisation d'interfaces. Une interface est une déclaration de classe qui contient des déclarations de méthodes, mais pas d’implémentation. Exemple : On veut pouvoir comparer des objets de classe Rectangle par leur aire. On définit une interface Comparable : public interface Comparable { public boolean isGreaterThan ( Object b); public boolean isSmallerThan ( Object b); } Cette interface pourra être utilisée par d’autres classes héritant de Object, c’est-à-dire toutes les classes…

  11. Interfaces - 2 On indique que la classe Rectangle implémente cette interface : public class Rectangle implements Comparable Il faut maintenant implémenter toutes les méthodes de l'interface Comparable dans la classe Rectangle public class Rectangle implements Comparable { Rectangle (…) public boolean isGreaterThan ( Object b) { Rectangle R = (Rectangle)b; return aire() > R.aire(); } public boolean isSmallerThan ( Object b) { Rectangle R = (Rectangle)b; return aire() < R.aire(); } }

  12. Méthode statique main - 1 class Test { int n; public static void main(String[] args) { n = 10; } } Test.java:6: non-static variable n cannot be referenced from a static context n = 10; ^ 1 error

  13. Méthode statique main – 2 class Test { int n; public Test() { n = 10; } public static void main(String[] args) { new Test(); } }

  14. Chaînes de caractères En Java, (pas en C / C++) les chaînes sont des objets Elles sont stockées dans des objets de classe String. String s; // déclaration s = "Bonjour"; // instanciation // ou s = new String("Bonjour"); // instanciation Longueur d'une chaîne : int n = s.length(); // n vaut 7 Caractère à une position donnée d'une chaîne : char unCar = s.charAt(3); // unCar vaut 'j' On ne peut pas modifier le contenu d'un objet String. Pour cela, utiliser la classe StringBuffer.

  15. Egalité des objets Égalité de deux objets ou de leurs valeurs String ch1 = "Azerty"; // un objet de classe String String ch2 = "Azerty"; // un autre objet de classe String System.out.println(ch1 == ch2); // Affiche false : les 2 objets // sont distincts System.out.println(ch1.equals(ch2) ); // Affiche true : les deux // objets ont la même valeur ch2 = ch1; // ch1 et ch2 sont "le même objet" System.out.println(ch1 == ch2); // Affiche true ch2 = new String(ch1); // on re-crée ch2 System.out.println(ch1 == ch2); // Affiche false System.out.println(ch1.equals(ch2) ); // Affiche true

More Related