Les énumérations : Définition. Une énumération est un ensemble fini de constantes.

Documents pareils
Pour signifier qu'une classe fille hérite d'une classe mère, on utilise le mot clé extends class fille extends mère

Classe Interne, Anonyme & Enumération

Chapitre 10. Les interfaces Comparable et Comparator 1

Programmation par les Objets en Java

Héritage presque multiple en Java (1/2)

Projet de programmation (IK3) : TP n 1 Correction

INITIATION AU LANGAGE JAVA

Auto-évaluation Programmation en Java

TP n 2 Concepts de la programmation Objets Master 1 mention IL, semestre 2 Le type Abstrait Pile

Encapsulation. L'encapsulation consiste à rendre les membres d'un objet plus ou moins visibles pour les autres objets.

Programmer en JAVA. par Tama

Premiers Pas en Programmation Objet : les Classes et les Objets

Java Licence Professionnelle CISII,

Chapitre VI- La validation de la composition.

Java Licence Professionnelle Cours 7 : Classes et méthodes abstraites

Structure d un programme et Compilation Notions de classe et d objet Syntaxe

TD/TP PAC - Programmation n 3

Package Java.util Classe générique

Introduction à Java. Matthieu Herrb CNRS-LAAS. Mars

Langage et Concepts de Programmation Objet. 1 Attributs et Méthodes d instance ou de classe. Travaux Dirigés no2

RAPPELS SUR LES METHODES HERITEES DE LA CLASSE RACINE Object ET LEUR SPECIALISATION (i.e. REDEFINITION)

Exceptions. 1 Entrées/sorties. Objectif. Manipuler les exceptions ;

Page 1 sur 5 TP3. Thèmes du TP : l la classe Object. l Vector<T> l tutorial Interfaces. l Stack<T>

Tp 1 correction. Structures de données (IF2)

Initiation à JAVA et à la programmation objet.

Une introduction à Java

C++ COURS N 2 : CLASSES, DONNÉES ET FONCTIONS MEMBRES Classes et objets en C++ Membres d'une classe Spécification d'une classe Codage du comportement

Corrigé des exercices sur les références

ALGORITHMIQUE ET PROGRAMMATION ORIENTEE OBJET

Polymorphisme, la classe Object, les package et la visibilité en Java... 1

TP1 : Initiation à Java et Eclipse

2 e édition JAVA 5 et 6. Jérôme Bougeault. TSoft et Groupe Eyrolles, 2003, 2008, ISBN :

Quelques patterns pour la persistance des objets avec DAO DAO. Principe de base. Utilité des DTOs. Le modèle de conception DTO (Data Transfer Object)

Java Licence Professionnelle CISII, Cours 2 : Classes et Objets

Corrigés des premiers exercices sur les classes

Environnements de développement (intégrés)

Généralités sur le Langage Java et éléments syntaxiques.

LMI 2. Programmation Orientée Objet POO - Cours 9. Said Jabbour. jabbour@cril.univ-artois.fr

Objets et Programmation. origine des langages orientés-objet

JAVA TD0. Prise en main du langage Environnement de base JAVA 1

Programme Compte bancaire (code)

TD/TP PAC - Programmation n 3

RMI le langage Java XII-1 JMF

P r ob lé m a t iq u e d e la g é n é r icit é. Pr in cip e d e la g é n é r icit é e n Ja v a ( 1 /3 )

Cours 1: Java et les objets

PROGRAMMATION PAR OBJETS

TD Objets distribués n 3 : Windows XP et Visual Studio.NET. Introduction à.net Remoting

TP, première séquence d exercices.

Prénom : Matricule : Sigle et titre du cours Groupe Trimestre INF1101 Algorithmes et structures de données Tous H2004. Loc Jeudi 29/4/2004

Cours intensif Java. 1er cours: de C à Java. Enrica DUCHI LIAFA, Paris 7. Septembre Enrica.Duchi@liafa.jussieu.fr

Serveur d'archivage 2007 Installation et utilisation de la BD exist

Programmation Orientée Objet application au langage Java Version Novembre 2007

Gestion distribuée (par sockets) de banque en Java

Exercices sur les interfaces

Info0604 Programmation multi-threadée. Cours 5. Programmation multi-threadée en Java

Design patterns. Design patterns - définition. Design patterns - avantages

1. Structure d un programme C. 2. Commentaire: /*..texte */ On utilise aussi le commentaire du C++ qui est valable pour C: 3.

Licence Bio Informatique Année Premiers pas. Exercice 1 Hello World parce qu il faut bien commencer par quelque chose...

Facultés Universitaires Notre-Dame de la Paix. Conception et Programmation Orientées- Object

Langage et Concepts de ProgrammationOrientée-Objet 1 / 40

Utilisation d objets : String et ArrayList

RMI. Remote Method Invocation: permet d'invoquer des méthodes d'objets distants.

Programmation Par Objets

Java c est quoi? Java pourquoi?

Utiliser Java sans BlueJ

Programmation Réseau. Sécurité Java. UFR Informatique jeudi 4 avril 13

Dis papa, c est quoi un bus logiciel réparti?

Remote Method Invocation (RMI)

Polycopié Cours Programmation Orientée Objet sous Java Programme : Filière SMI S5

as Architecture des Systèmes d Information

INTRODUCTION A JAVA. Fichier en langage machine Exécutable

7 Développement d une application de MapReduce

Chapitre 2. Classes et objets

Support de cours et TD Programmation Orientée Objet

Création d objet imbriqué sous PowerShell.

Un ordonnanceur stupide

Plan du cours. Historique du langage Nouveautés de Java 7

Threads. Threads. USTL routier 1

Synchro et Threads Java TM

Langage Java. Classe de première SI

J2SE Threads, 1ère partie Principe Cycle de vie Création Synchronisation

Remote Method Invocation Les classes implémentant Serializable

Les chaînes de caractères

Bases Java - Eclipse / Netbeans

Programmation avec des objets : Cours 7. Menu du jour

API04 Contribution. Apache Hadoop: Présentation et application dans le domaine des Data Warehouses. Introduction. Architecture

JADE : Java Agent DEvelopment framework. Laboratoire IBISC & Départ. GEII Université & IUT d Evry nadia.abchiche@ibisc.univ-evry.

OpenPaaS Le réseau social d'entreprise

Lambda! Rémi Forax Univ Paris-Est Marne-la-Vallée

Projet gestion d'objets dupliqués

Programmation Orientée Objet en C#

Cours 1 : Introduction. Langages objets. but du module. contrôle des connaissances. Pourquoi Java? présentation du module. Présentation de Java

Aide mémoire UML & Java 1ère partie : Introduction. marc.lemaire@u-cergy.fr

TD3: tableaux avancées, première classe et chaînes

Traduction des Langages : Le Compilateur Micro Java

Info0101 Intro. à l'algorithmique et à la programmation. Cours 3. Le langage Java

La persistance des données dans les applications : DAO, JPA, Hibernate... COMPIL 2010 francois.jannin@inp-toulouse.fr 1

Prendre le marteau, le tableau, le mètre, le crayon, la ficelle, le clou, la pointe ;

Programmation Objet I

Apprendre Java en 154 minutes

Transcription:

Chapitre 9 Les énumérations Les énumérations : Définition Une énumération est un ensemble fini de constantes. Exemple : public enum Jours { LUNDI, MARDI, MERCREDI, JEUDI, VENDREDI, SAMEDI, DIMANCHE La déclaration d'une énumération crée un nouveau type dont une variable ne peut prendre qu'une des constantes de l'énumération. Exemple : Jours j=jours.vendredi; Le nom de l'énumération précède toujours ses constantes sauf dans le cas d'un Switch Java - Dr A. Belangour 429 1

Les énumérations : Exemple public class TestEnum { private Jours jour; public TestEnum(Jours jour) { this.jour = jour; public void afficherjour() { switch (jour) { case LUNDI: System.out.println("Lundi"); break; case MARDI: System.out.println("Mardi"); break; case MERCREDI: System.out.println("Mercredi"); break; case JEUDI: System.out.println("Jeudi"); break; case VENDREDI: System.out.println("Vendredi"); break; case SAMEDI: System.out.println("Samedi"); break; case DIMANCHE: System.out.println("Dimanche"); break; Java - Dr A. Belangour 430 Les énumérations : Exemple public class Main { public static void main(string[] args) { TestEnum testenum = new TestEnum(Jours.VENDREDI); testenum.afficherjour(); Java - Dr A. Belangour 431 2

Les énumérations : valeurs Le premier élément d'une énumération correspond à 0, le deuxième à 1,..etc. Il est possible de changer ses valeurs comme on verra plus tard dans ce cours. La méthode ordinal() permet d'obtenir la valeur associé à chacun de ses éléments. Exemple : Jours j=jours.vendredi; System.out.println(j.ordinal()); Java - Dr A. Belangour 432 Les énumérations : déclaration Les énumérations sont déclarées au même niveau que les classes et les interfaces. Elles peuvent ainsi être déclaré dans un fichier dédié ou suite à une autre classe ou même à l'intérieur d'une classe. Java - Dr A. Belangour 433 3

Les énumérations Lors de la compilation Java, encapsule l'énumération dans une classe héritant de la classe java.lang.enum (il ne peut donc pas hériter d'une autre classe). Cette classe est composée de: Des champs publiques, statiques et finaux du type de l'énumération pour chaque élément Un bloc d'initialisation statique permettant de créer les différentes instances statiques des éléments Java - Dr A. Belangour 434 Les énumérations Une méthode values() renvoyant un tableau des valeurs de l'énumération Une méthode valueof() qui renvoie l'élément de l'énumération dont le nom est fourni en paramètre Remarques : La méthode valueof() prend en paramètre une chaine de caractère représentant le nom de l'identifiant utilisé dans la déclaration de l'énumération. La méthode valueof() ne peut être redéfinie. Java - Dr A. Belangour 435 4

Les énumérations L'exemple de l'énumération précédente deviendra : public final class Jours extends java.lang.enum{ public static final Jours LUNDI; public static final Jours DIMANCHE; static {; public static Jours[] values(); public static Jours valueof(java.lang.string); Java - Dr A. Belangour 436 Les énumérations Remarque : La méthode tostring() est implémentée par défaut dans une énumération. Elle renvoie le nom de la constante. Il est possible de la redéfinir aux besoins. Java - Dr A. Belangour 437 5

Les énumérations En résumé, une énumération peut: implémenter une ou plusieurs interfaces avoir plusieurs constructeurs avoir des attributs et des méthodes avoir des classes internes avoir un bloc d'initialisation statique Java - Dr A. Belangour 438 Les énumérations Il est possible de personnaliser les valeurs associées aux éléments d'une énumération. Dans ce cas, l'énumération doit implicitement définir : un attribut qui contient la valeur associée à l'élément un constructeur qui attend en paramètre la valeur une méthode de type getter pour obtenir la valeur Java - Dr A. Belangour 439 6

Les énumérations Exemple : public enum Coefficient { MONO(1), BI(2), QUADRI(4); private final int valeur; private Coefficient(int valeur) { this.valeur = valeur; public int getvaleur() { return this.valeur; Java - Dr A. Belangour 440 Les énumérations Remarques : Les données manipulées dans un élément d'une énumération doivent être immuables (ne pas changer dans le temps) Les constantes doivent obligatoirement être définis en premier, avant les attributs et les méthodes et ils doivent être terminé par point virgule dans ce cas. Le constructeur d'une classe de type enum ne peut pas être public car il ne doit être invoqué que par la classe elle même pour créer les constantes définies au début de la déclaration de l'énumération. Java - Dr A. Belangour 441 7

Les énumérations : association de valeurs aux éléments Comme une énumération est une classe, il est possible d'associer plusieurs valeurs à un élément de l'énumération. Ces valeurs seront stockées sous la forme d'attributs devant être initialisé par un constructeur. Java - Dr A. Belangour 442 Les énumérations : association de valeurs aux éléments Exemple : import java.math.bigdecimal; public enum Remise { COURANTE(new BigDecimal("0.05"), "Remise de 5%"), FIDELITE(new BigDecimal("0.07"), "Remise de 7%"), EXCEPTIONNELLE(new BigDecimal("0.10"), "Remise de 10%"); private final BigDecimal taux; private final String libelle; Java - Dr A. Belangour 443 8

Les énumérations : association de valeurs aux éléments private Remise(BigDecimal taux, String libelle) { this.taux = taux; this.libelle = libelle; public BigDecimal gettaux() { return this.taux; public String getlibelle() { return this.libelle; Java - Dr A. Belangour 444 Les énumérations : association de valeurs aux éléments public BigDecimal calculer(bigdecimal valeur) { return valeur.multiply(taux).setscale(2, BigDecimal.ROUND_FLOOR); public static void main(string[] args) { BigDecimal montant = new BigDecimal("153.99"); for (Remise remise : Remise.values()) { System.out.println(remise.getLibelle() + " \t" + remise.calculer(montant)); Java - Dr A. Belangour 445 9

Les énumérations : association de valeurs aux éléments Remarques : Dans l'exemple précédent, chaque constante est définie avec les deux paramètres qui la compose : le taux et le libellé. Ces valeurs sont passées au constructeur par le bloc d'initialisation static qui est créé par le compilateur. Un élément d'une énumération ne peut avoir que la valeur avec laquelle elle est définie dans sa déclaration. Ceci justifie que le constructeur ne soit pas public et qu'une énumération ne puisse pas avoir de classes filles. Java - Dr A. Belangour 446 Les énumérations : association de valeurs aux éléments Remarques : Tous les éléments de l'énumération sont encapsulés dans une instance finale du type de l'énumération : ce sont donc des singletons. De plus, les valeurs peuvent être testées avec l'opérateur == puisqu'elles sont déclarées avec le modificateur final. Plusieurs fonctionnalités permettent de s'assurer qu'il n'y aura pas d'autres instances que celles définies par le compilateur à partir du code source : Java - Dr A. Belangour 447 10

Les énumérations : association de valeurs aux éléments il n'y a pas de constructeur public qui permette de l'invoquer pour créer une nouvelle instance il n'est pas possible d'hériter d'une autre classe que la classe Enum il n'est pas possible de créer une classe fille de l'énumération puisqu'elle est déclarée finale l'invocation de la méthode clone() de l'énumération lève une exception de type CloneNotSupportedException Une énumération peut implémenter une ou plusieurs interfaces. Une énumération peut contenir une méthode main(). Java - Dr A. Belangour 448 Les énumérations : personnalisation il est possible de définir chaque élément sous la forme d'une classe interne dans laquelle il est possible de fournir une implémentation particulière pour chaque élément. Il est ainsi possible de définir explicitement pour chaque valeur le corps de la classe qui va l'encapsuler Cette classe est implicitement une extension de la classe englobante. Il est ainsi possible de redéfinir une méthode définie dans l'énumération. Java - Dr A. Belangour 449 11

Les énumérations : personnalisation Exemple : import java.math.bigdecimal; public enum Remise { COURANTE(new BigDecimal("0.05"), "Remise de 5%") { @Override public String tostring() { return "Remise 5%";, Java - Dr A. Belangour 450 Les énumérations : personnalisation FIDELITE(new BigDecimal("0.07"), "Remise de 7%") { @Override public String tostring() { return "Remise fidelite 7%";, Java - Dr A. Belangour 451 12

Les énumérations : personnalisation EXCEPTIONNELLE(new BigDecimal("0.10"), "Remise de 10%") { @Override public String tostring() { return "Remise exceptionnelle 10%"; @Override public String getlibelle() { return "Remise à titre exceptionnelle de 10%"; ; Java - Dr A. Belangour 452 Les énumérations : personnalisation private final BigDecimal taux; private final String libelle; private Remise(BigDecimal taux, String libelle) { this.taux = taux; this.libelle = libelle; public BigDecimal gettaux() { return this.taux; Java - Dr A. Belangour 453 13

Les énumérations : personnalisation public String getlibelle() { return this.libelle; public BigDecimal calculer(bigdecimal valeur) { return valeur.multiply(taux).setscale(2, BigDecimal.ROUND_FLOOR); Java - Dr A. Belangour 454 Les énumérations : personnalisation public static void main(string[] args) { BigDecimal montant = new BigDecimal("153.99"); for (Remise remise : Remise.values()) { System.out.println(remise.getLibelle() + " \t" + remise.calculer(montant)); Java - Dr A. Belangour 455 14

Les énumérations : personnalisation Remarque : Il est aussi possible de définir une méthode abstract dans l'énumération pour forcer la définition de la méthode dans chaque élément. Exemple : La méthode : public abstract String getlibelle(); Se redéfinition dans l'élément exceptionnelle par exemple : @Override public String getlibelle() { return "Remise à titre exceptionnelle de 10%"; Java - Dr A. Belangour 456 Limites des énumérations Les éléments de l'énumération doivent être définis en premier. Un élément d'une énumération ne doit pas être null. Un type Enum ne peut pas hériter d'une autre classe mère (hérite déjà de la classe Enum) Pour garantir qu'il n'y ait qu'une seule instance d'un élément d'une énumération, le constructeur n'est pas accessible et l'énumération ne peut pas avoir de classe fille. Java - Dr A. Belangour 457 15

Limites des énumérations Une énumération ne peut pas être définie localement dans une méthode. La méthode values() renvoie un tableau des éléments de l'énumération dans l'ordre dans lequel ils sont déclarés mais il ne faut surtout pas utiliser l'ordre des éléments d'une énumération dans les traitements : il ne faut par exemple pas tester la valeur retournée par la méthode ordinal() dans les traitements. Des problèmes apparaitront à l'exécution si l'ordre des éléments est modifié car le compilateur ne peut pas détecter ce type de soucis. Java - Dr A. Belangour 458 16