La présentation est en train de télécharger. S'il vous plaît, attendez

La présentation est en train de télécharger. S'il vous plaît, attendez

1 COURS DE PROGRAMMATION ORIENTEE OBJET : Classes internes.

Présentations similaires


Présentation au sujet: "1 COURS DE PROGRAMMATION ORIENTEE OBJET : Classes internes."— Transcription de la présentation:

1 1 COURS DE PROGRAMMATION ORIENTEE OBJET : Classes internes

2 2 LES CLASSES INTERNES Une classe interne est une classe qui est définie à lintérieur dune autre classe. Intérêts dutiliser des classes internes –Elles peuvent être cachées aux autres classes du même package. –Leurs méthodes peuvent accéder aux données de la classe ou de linterface où elles sont définies, même les données privées. –Les classes internes anonymes sont utiles pour implémenter certaines interfaces ou étendre des classes abstraites de manière efficace.

3 3 Types de classes internes Classes internes public class A { private (ou public) class B { } } Classes internes statiques public class A { public static class B { } } Classes internes locales public class A { public void m(){ class B { } } } Classes internes anonymes public class A { public void m(){ new SuperType() { }; } } LES CLASSES INTERNES

4 4 Classe interne –Une classe interne possède une référence sur sa classe englobante. –Une classe englobante a accès à tous les membres de sa classe interne (même privés). –Une classe interne a accès à tous les membres d'une classe englobante. LES CLASSES INTERNES

5 5 Classe interne –Référence à la classe externe dans la classe interne : ClasseExterne.this –Appel du constructeur de lobjet interne : Dans la classe externe : new ClasseInterne(…) Hors de la classe externe, si la classe interne est publique ClasseExterne objetExterne = new ClasseExterne(…); ClasseExterne.ClasseInterne objetInterne= objetExterne.new ClasseInterne(…); LES CLASSES INTERNES

6 6 Classe interne - Exemple1 public class Suite { private final char[] tab; public class SousSuite { private final int debut; private final int longueur; public SousSuite (int debut, int lng) { this.debut=debut; this.longueur=longueur; } public char charAt ( int index ) { if ( index =lng ) throw new IllegalArgumentException(...); return tab[debut+index]; } LES CLASSES INTERNES

7 7 Classe interne – Exemple1 Instanciation de la classe SousSuite à lextérieur de la classe Suite : Suite s = new Suite("toto"); SousSuite sub = s.new SousSuite(1,3); System.out.println( sub.charAt(0) ); LES CLASSES INTERNES

8 8 Classe interne – Exemple1 Instanciation de la classe SousSuite à lintérieur de la classe Suite public class Suite { private final char[] tab; public class SousSuite { public SousSuite(int debut,int longueur) { } … } public SousSuite extraireSousSuite(int debut) { return new SousSuite(debut,tab.longueur- debut); // return Suite.this.new SousSuite(...) } LES CLASSES INTERNES

9 9 Classe interne – Exemple 2 Modifier la classe CompteBancaire de manière à rajouter un champ derOperation qui mémorise la dernière opération réalisée (retrait ou dépôt) ainsi que le montant de lopération. On souhaite pouvoir afficher, pour un compte donné, le numéro du compte suivi de la dernière opération réalisée sur le compte et le montant de celle-ci. LES CLASSES INTERNES

10 10 Classe interne – Exemple2 public class CompteBanquaire{ private String nom ; private String adresse ; private int numero ; private int solde; private Operation derOperation; public class Operation{ private String op; private long montant; Operation(String op, int montant){ this.op=op; this.montant= montant; } public String toString(){ return numero"+":"+op+" "+montant; //return CompteBancaire.this.numero"+":"+op+" "+montant; } LES CLASSES INTERNES

11 11 Classe interne – Exemple2 public void crediter(int montant){ solde += montant; derOperation=new Operation("depot",montant); } public void debiter(int montant){ solde -= montant; derOperation=new Operation("retrait",montant); } }//fin de la classe CompteBancaire LES CLASSES INTERNES

12 12 Classe interne et compilateur Les classes internes sont traduites en fichiers de classes réguliers par le compilateur. Le compilateur ajoute un champs vers la classe englobante et change l'appel au constructeur. LES CLASSES INTERNES

13 13 Classe interne locale Dans certains cas, on ne doit utiliser un objet de la classe interne que dans une seule méthode de la classe englobante. On peut alors définir une classe interne locale à une méthode. LES CLASSES INTERNES

14 14 Classe interne locale –La portée de la classe interne est réduite au bloc dans laquelle elle est déclarée. –Une classe interne locale est analogue à une variable locale, elle n'est pas membre de la classe. –La classe est complètement cachée au reste du code de la classe englobante et aux autres objets. LES CLASSES INTERNES

15 15 Classe interne locale –Utilisation1 : créer des instances qui peuvent être passées en paramètres. –Utilisation2 : créer des objets d'une extension d'une classe qui n'a de sens que localement (en particulier dans les interfaces graphiques). LES CLASSES INTERNES

16 16 Classe interne locale Exemple : Dans létude des Collections Java, nous fournirons plusieurs implémentations de la méthode public Iterator iterator() permettant de parcourir chaque élément dune collection déléments. Cette méthode retourne un objet de type Iterator qui est une interface. LES CLASSES INTERNES

17 17 Classe interne locale public interface Iterator{ //renvoie true si lobjet de litération possède encore //au moins un élément public boolean hasNext(); public Object next() throws NoSuchElementException ; public void remove() throws UnsupportedOperationException ; } LES CLASSES INTERNES

18 18 Classe interne locale public Iterator iterator(){ class Iterateur implements Iterator{ public boolean hasNext(){…} public Object next() throws NoSuchElementException{…} public void remove() throws UnsupportedOperationException{…} } return new Iterateur(); } LES CLASSES INTERNES

19 19 Classe interne anonyme Lors de lutilisation dune classe interne locale, si on ne souhaite créer quun seul objet de cette classe, il nest pas nécessaire de donner un nom à la classe. On définit une classe interne anonyme. LES CLASSES INTERNES

20 20 Classe interne anonyme – Syntaxe public class A{ … public void methodeDeA(…, final type parametre){ SuperType s = new SuperType(paramètres de construction) { méthodes et données de la classe interne }; } LES CLASSES INTERNES

21 21 Classe interne anonyme – Syntaxe –SuperType peut être une interface; la classe interne implémente alors cette interface. une classe; la classe interne étend alors cette classe. –Une classe interne anonyme ne peut pas avoir de constructeurs propres. LES CLASSES INTERNES

22 22 Classe interne anonyme – Syntaxe –Dans le cas dune interface, il ny aura pas de paramètres de construction. New TypeInterface () { méthodes et données } –La classe interne anonyme peut appeler les paramètres définis dans la méthode englobante avec le modificateur final. LES CLASSES INTERNES

23 23 Classe interne anonyme Exemple avec linterface Iterator : public Iterator iterator(){ return new Iterator(){ public boolean hasNext(){…} public Object next() throws NoSuchElementException{…} public void remove() throws UnsupportedOperationException{…} }; } LES CLASSES INTERNES

24 24 Classe interne statique –utile pour cacher des détails dimplémentation. –elle ne va pas utiliser de référence à un objet de la classe englobante. –elle accède uniquement aux champs statiques de la classe englobante. LES CLASSES INTERNES

25 25 Classe interne statique – Exemple On souhaite calculer les valeurs minimales et maximales dun tableau en ne parcourant le tableau quune seule fois. On déclare une classe TableauOperation et on crée une méthode statique minMax avec comme paramètre un tableau de double. minMax doit retourner deux nombres. Pour cela on déclare une classe Pair qui stocke deux valeurs numériques. LES CLASSES INTERNES

26 26 Classe interne statique – Exemple public class TableauOperations{ public static Pair minMax (double[] values){ double max = Double.MAX_VALUE; double min = Double.MIN_VALUE; for (double v : values){ if (min > v) min = v; if (max < v) max = v; } return new Pair (min, max); } Lobjet de la classe interne Pair est construit dans une méthode statique. La classe Pair doit être statique. LES CLASSES INTERNES

27 27 Classe interne statique – Exemple public static Pair { private double premier; private double second; public Pair (double p, double s){ premier = p; second = s; } public double getPremier(){ return premier;} public double getSecond(){ return second;} } }// fin de la classe TableauOperations La classe Pair ne possède pas de référence à lobjet externe qui la créé. LES CLASSES INTERNES

28 28 Classe interne statique – Exemple public class minMaxTest{ public static void main (String[] args){ double[] d= new double[20]; for (int i =0; i< d.length; i++) d[i] = 100* Math.random(); TableauOperations.Pair p = TableauOperations.minMax(d); System.out.println(" min = " + p.getPremier()); System.out.println(" max = " + p.getSecond()); } LES CLASSES INTERNES


Télécharger ppt "1 COURS DE PROGRAMMATION ORIENTEE OBJET : Classes internes."

Présentations similaires


Annonces Google