Classes internes, Classes locales, Classes anonymes

Similar documents
Java et Mascopt. Jean-François Lalande, Michel Syska, Yann Verhoeven. Projet Mascotte, I3S-INRIA Sophia-Antipolis, France

VLANs. Commutation LAN et Wireless Chapitre 3

Collections. Collections. USTL routier 1

Patron: Visitor(Visiteur) TSP - June 2013 Patrons de Conception J Paul Gibson Visitor.1

Collections version 1.4

Héritage (2) Programmation Orientée Objet. Jean-Christophe Routier Licence mention Informatique Université Lille Sciences et Technologies

VHDL par Ahcène Bounceur VHDL

Solaris 8 6/00 Sun Hardware Roadmap

SunVTS Quick Reference Card

About Transferring License Rights for. PL7 V4.5 and Unity Pro V2.3 SP1 Software

TD : Compilateur ml2java semaine 3

Oracle ZFS Storage Appliance Cabling Guide. For ZS3-x, 7x20 Controllers, and DE2-24, Sun Disk Shelves

TP 2 : Application SnapTchat 20 février 2015

TP 3 des architectures logicielles Séance 3 : Architecture n-tiers distribuée à base d EJB. 1 Préparation de l environnement Eclipse

Oracle Dual Port QDR InfiniBand Adapter M3. Product Notes

Préparation au concours ACM TP 2

Forte for Java (Community Edition) QuickStart Guide

Analyse statique de programmes avioniques

UE 2I002 (ex LI230) : éléments de programmation par objets avec Java TD10 - Exceptions

AgileMesh Node Configuration Guide

Sun Control Station. Performance Module. Sun Microsystems, Inc. Part No September 2003, Revision A

IEC SYSTEM FOR MUTUAL RECOGNITION OF TEST CERTIFICATES FOR ELECTRICAL EQUIPMENT (IECEE) CB SCHEME. Additional Information on page 2

Read me carefully before making your connections!

Programmation Mobile Android Master CCI

Sun Java System Connector for Microsoft Outlook Q4 Installation Guide

EFFECTIVE NUMERICAL ANALYSIS METHOD APPLIED TO THE ROLL-TO-ROLL SYSTEM HAVING A WINDING WORKPIECE

User guide. Bluetooth Keyboard BKB10

CERTIFICAT D'ESSAI OC. Switching Power Supply XP POWER L L C RED HILL AVE, SUITE 100 TUSTIN CA 92780, USA

IEC SYSTEM FOR MUTUAL RECOGNITION OF TEST CERTIFICATES FOR ELECTRICAL EQUIPMENT (IECEE) CB SCHEME. Additional Information on page 2

FlexArmor 24V dc Sinking Input Modules

Solaris 9 9/04 Installation Roadmap

Conception Orientée Objet. Romain Rouvoy Licence mention Informatique Université Lille 1

Sun Ethernet Fabric Operating System. LLA Administration Guide

DK UL. Ref. Certif. No. Date: Signature:

Solaris PC NetLink 1.2 Installation Guide

IEC SYSTEM FOR MUTUAL RECOGNITION OF TEST CERTIFICATES FOR ELECTRICAL EQUIPMENT (IECEE) CB SCHEME. Additional Information on page 2.

Java Collection Framework

Cressy Onex Lancy-Pont-Rouge Tours-de-Carouge Crêts-de-Champel Gare des Eaux-Vives

ILLUSTRATION DES EXCEPTIONS

IEC SYSTEM FOR MUTUAL RECOGNITION OF TEST CERTIFICATES FOR ELECTRICAL EQUIPMENT (IECEE) CB SCHEME. Switching Power Supply for Building In

Canada s Energy Future:

man pages section 6: Demos

C-DIAS Analogue Output Module CAO 082 for eight ±10V DC respectively eight 0 20mA DC outputs

Solaris 8 User Supplement. Sun Microsystems, Inc. 901 San Antonio Road Palo Alto, CA U.S.A.

This manual provides information on the Extron MDA 4V EQ video distribution amplifier and discusses how to install and operate them.

Ecole Nationale d Ingénieurs de Brest. Programmation par objets Le langage C++ Type Concret de Données en C++

Traditional Chinese Solaris Release Overview

Oracle ZFS Storage Appliance Simulator Quick Start Guide

Sun Patch Manager 2.0 Administration Guide for the Solaris 8 Operating System

Efficient Learning of Sparse Representations with an Energy-Based Model

Sun Enterprise System 336-Mhz Processor Upgrade Instructions

Outline. iterator review iterator implementation the Java foreach statement testing

Memory Hole in Large Memory X86 Based Systems

Lab 5 Random numbers!

Providing Cluster Environments with High-Availability and Load-Balancing

Sun Ethernet Fabric Operating System. IGMP Administration Guide

Font Administrator User s Guide. Sun Microsystems, Inc. 901 San Antonio Road Palo Alto, CA U.S.A.

SunPCi Release Notes

AND.java. Constante.java. Printed by Marie Christine Counilh. oct. 01, 10 13:59 Page 1/1 package logique; oct. 01, 10 13:59 Page 1/1 package logique;

AXP 64 C AT Setup Guide

Java Desktop System Release 2 Installation Guide

The Solaris Security Toolkit - Quick Start

Solaris 8 User Supplement. Sun Microsystems, Inc. 901 San Antonio Road Palo Alto, CA U.S.A.

CS 3 Introduction to Software Engineering. 5: Iterators

C-DIAS Analog Module CAO 086 For eight ±10 V Outputs

ControlLogix Redundant Power Supply Chassis Adapter Module

Java Desktop System Release 3 Troubleshooting Guide

TP #2. Calc.java Procédure de lancement. CalcGUI.java Fenêtre de la calculatrice.

Rackmount Placement Matrix

Scenario Planning - Part 1

Solaris 8 Desktop User Supplement. Sun Microsystems, Inc. 901 San Antonio Road Palo Alto, CA U.S.A.

This document is a preview generated by EVS

Réinitialisation de serveur d'ucs série C dépannant TechNote

ANALYSIS OF A CHIMERA METHOD

What is an Iterator? An iterator is an abstract data type that allows us to iterate through the elements of a collection one by one

Ultra Enterprise 6000/5000/4000 Systems Power Cord Installation

JCF: user defined collections

Utilisez Mutant / Mutest pour améliorer vos tests, votre code Sigilium

Replacing the Quantum Ultra Disk Drives and System Board Computer Assembly

Sun Ethernet Fabric Operating System RMON Administration Guide

Jini Network Technology

Font Administrator User s Guide

AXP 64 C AT Setup Guide

PermaNetPlus for Pcorr+ and Permalog+ Quickstart Guide

Using Solaris Resource Manager Software with Solaris PC NetLink Software - Part 2

Switching Power Supply DELTA ELECTRONICS INC 3 TUNGYUAN RD CHUNGLI INDUSTRIAL ZONE TAOYUAN COUNTY TAIWAN

C-DIAS Analog Input Module CAI 086 For eight, ±10V voltage inputs

Oracle Flash Storage System and Oracle MaxRep for SAN Security Guide

User guide. Stereo Bluetooth Headset SBH80

CP-100. Owners And Installation Manual

Quick Start. AC1200 WiFi Range Extender Model EX6150

FLEX Integra 4 Input Module

User guide. Stereo Bluetooth Headset SBH60

HOW TO CHOOSE A PASSWORD

AXI 016 Setup Guide. Disconnect Power and Mount the AXI 016. Rear Panel Connections. C EXP Input Port and LED D EXP Thru Port and LED

Tales from the Trenches: The Case of the RAM Starved Cluster

Descriptif de communication Page 2 29 CALEC ST II KNX TP1

CMSC 206: Data Structures Final Exam Reference May 2018

Installation des interfaces et utilisation de WorldCAT-CIF pour le catalogue CD Meusburger

Transcription:

Classes internes, Classes locales, Classes anonymes Victor Marsault Aldric Degorre CPOO 2015

Enum (1) 2 Quand les utiliser: disjonctions de cas type au sens courant (eg. type de messages d erreur, type de pièces dans un jeu) Il n existe qu un nombre fini d instances différentes d un enum (ici 7); Toujours implicitement statique public enum Jour { LUNDI, MARDI, MERCREDI, JEUDI, VENDREDI, SAMEDI, DIMANCHE ;

Enum (2) 3 Utilisation de == et de switch; Garde-fou public enum Jour { LUNDI, MARDI, MERCREDI, JEUDI, VENDREDI, SAMEDI, DIMANCHE ; public Jour next() { switch (this) { case LUNDI: return MARDI; case MARDI: return MERCREDI; case DIMANCHE: return LUNDI;

Enum (3) 4 public enum Jour { LUNDI(0,"Mon."), MARDI(1,"Tue."), MERCREDI(2,"Wed."), JEUDI(3,"Thu."), VENDREDI(4,"Mon."), SAMEDI(5,"Sat."), DIMANCHE(6,"Sun.") ; final public int id; final public String nom; Jour (int id, String nom) { // Constructeur this.nom=nom; this.id=id; public static Jour ofint (int i) { for(jour j : Jour.values()) if (j.id == i) return j; return null; // return ofint(i%7);

Enum (4) 5 public class Test { public static void main (String args) { Jour j1 = Jour.Mardi; Jour j2 = Jour.ofInt(3); // vaut Jour.Mercredi Jour j3 = j1.next().next(); // vaut Jour.Vendredi for (Jour j : Jour.values()) if (j.id < j3.id) System.out.println(j.nom); // affiche Mon. Tue. Wed. Thu.

Classe interne statique (1) 6 Membre statique d une autre classe mot clef static N a accès qu aux membres statiques (de la classe externe). Utilisation principale: hiérarchisation. class Externe { class static Interne {

Classe interne statique (2) public class PileExecutable { public static abstract class Chainable { private Chainable suivant; public Chainable getsuivant() { public void setsuivant(chainable noeud) { public abstract void execute() ; Chainable tete; public void empiler(chainable c){ public Chainable depiler(){ public void execute() { Chainable tmp = tete; while (tmp!= null) { tmp.execute(); tmp = tmp.getsuivant(); 7

Classe interne statique (3) 8 class EntierAutoIncrem extends PileExecutable.Chainable { int valeur; public void execute() { valeur = valeur + 1; EntierAutoIncrem(int valeur) { this.valeur= valeur; // Dans EntierAutoIncrem.java class Copieur extends PileExecutable.Chainable { public void execute() { if (suivant!= null) suivant.execute(); // Copieur.java class StrAutoPrint extends PileExecutable.Chainable { String valeur; public void execute() { System.out.println(valeur); StrAutoPrint(String valeur) { this.valeur= valeur; // StringAutoPrint.java

Classe interne statique (4) 9 static void main (String args) { PileExecutable l = new PileExecutable(); l.empiler( new EntierAutoIncrem(1) ); l.empiler( new StrAutoPrint("Hello") ); l.empiler( new StrAutoPrint("World") ); l.empiler( new Copieur() ); l.execute(); // -> affiche // World // World // Hello // -> l entier vaut 2

Classe interne non-statique 10 Accède aux membres non-statiques de la classe. Est une partie de la classe externe: Ne peut avoir de membre static. class Externe { class Interne { Interne att;

Classe locale 11 Définie à l intérieur d un bloc de code. Accède aux attributs de la classe Externes. Accède aux variables locales déclarées final. Ne peut avoir de membre statique class Externe { public void TypeDeRetour mamethode () { class Interne extends TypeDeRetour { return new Interne()

Classe locale Premier exemple 12 public class ClasseExterne { public int i = 1; public affichetoto() { System.out.println("toto"); public void mamethode() { final int j=10; int k=100;

Classe locale Premier exemple 12 public class ClasseExterne { public int i = 1; // accessible car membre externe public affichetoto() { System.out.println("toto"); // public void mamethode() { final int j=10; // accessible car final int k=100; // inaccessible class ClasseLocale {

Classe locale Premier exemple 12 public class ClasseExterne { public int i = 1; // accessible car membre externe public affichetoto() { System.out.println("toto"); // public void mamethode() { final int j=10; // accessible car final int k=100; // inaccessible class ClasseLocale { int x = i;

Classe locale Premier exemple 12 public class ClasseExterne { public int i = 1; // accessible car membre externe public affichetoto() { System.out.println("toto"); // public void mamethode() { final int j=10; // accessible car final int k=100; // inaccessible class ClasseLocale { int x = i; int y = j;

Classe locale Premier exemple 12 public class ClasseExterne { public int i = 1; // accessible car membre externe public affichetoto() { System.out.println("toto"); // public void mamethode() { final int j=10; // accessible car final int k=100; // inaccessible class ClasseLocale { int x = i; int y = j; public void affiche() { affichetoto()

Classe locale Premier exemple 12 public class ClasseExterne { public int i = 1; // accessible car membre externe public affichetoto() { System.out.println("toto"); // public void mamethode() { final int j=10; // accessible car final int k=100; // inaccessible class ClasseLocale { int x = i; int y = j; public void affiche() { affichetoto() ClasseLocale loc1 = new ClasseLocale(); System.out.println(loc1.x); // affiche 1 System.out.println(loc1.y); // affiche 10 loc1.affiche; // affiche toto

Problème d Itérateur et Itérable 13 // Java Standard public interface Iterator<E>{ boolean hasnext(); E next() throws NoSuchElementException; void remove() throws UnsupportedOperationException, IllegalStateException; public interface Iterable<E> { Iterator<E> iterator() Si une classe C implémente Iterable<E> alors toute variable liste de type C peut être utilisée comme for(e element: liste)

Problème d Itérateur et Itérable (2) 14 public class MaCelluleDEntier { private int valeur; private int suivant; public class MaListeDentier { MaCellule tete; But Faire en sorte que MaListeDentier implémente Iterable<int>

Solution sans classe locale (1) 15 public class MonIterateur implements Iterator<int> { MaCelluleDEntier courante; MonIterateur(MaCelluleDEntier courante) { // méthodes requises pour implémenter Iterator<int> boolean hasnext() { return (courante!= null); int next() throws NoSuchElementException { int i = courante.getvaleur(); courante = courante.getsuivante(); return i;

Solution sans classe locale (1) 15 public class MonIterateur implements Iterator<int> { MaCelluleDEntier courante; MonIterateur(MaCelluleDEntier courante) { // méthodes requises pour implémenter Iterator<int> boolean hasnext() { return (courante!= null); int next() throws NoSuchElementException { int i = courante.getvaleur(); courante = courante.getsuivante(); return i; void remove() throws UnsupportedOperationException, IllegalStateException { throw new UnsupportedOperationException();

Solution sans classe locale (2) 16 public class MaListeDentier implements Iterable<int> { MaCellule tete; // méthode requise pour implémenter Iterator<int> Iterator<int> iterator() { return (new MonIterator(tete));

Solution sans classe locale (2) 16 public class MaListeDentier implements Iterable<int> { MaCellule tete; // méthode requise pour implémenter Iterator<int> Iterator<int> iterator() { return (new MonIterator(tete)); Cette méthode est lourde: elle oblige l ajout d une nouvelle classe.

Avec classe locale 17 public class MaListeDentier implements Iterable<int>{ MaCellule tete; // méthode requise pour implémenter Iterator<int> Iterator<int> iterator() { class MonIterateur implements Iterator<int> { MaCelluleDEntier courante=tete; public boolean hasnext() { public int next() throws NoSuchElementException void remove() throws UnsupportedOperationExcept IllegalStateException {.. return (new MonIterateur());

Et avec une classe anonyme 18 public class MaListeDentier implements Iterable<int>{ MaCellule tete; // méthode requise pour implémenter Iterator<int> Iterator<int> iterator() { return (new Iterator<int> { MaCelluleDEntier courante=tete; ) public boolean hasnext() { public int next() throws NoSuchElementException void remove() throws UnsupportedOperationExcept IllegalStateException {..

Les classes anonymes sont utiles pour les IG 19 class MaFenetre extends JFrame { JButton bouton; void actiondubouton(actionevent evt) { ; MaFenetre ( ) { // Constructeur bouton.addactionlistener(new ActionListener(){ public void actionperformed(actionevent evt){ actiondubouton(evt); )

Parce que dans la réalité 20 class MaFenetre extends JFrame { JButton bouton1; JButton bouton2; JButton bouton3; JButton bouton4; JButton bouton5;