12
1 Objectifs de ce cours (I21) Cours JAVA (I21) -Licence 1 Semestre 2 / Y.Laborde Maintenant !

1 Objectifs de ce cours (I21) Cours JAVA (I21) -Licence 1 Semestre 2 / Y.Laborde Maintenant !

Embed Size (px)

Citation preview

Page 1: 1 Objectifs de ce cours (I21) Cours JAVA (I21) -Licence 1 Semestre 2 / Y.Laborde Maintenant !

1Objectifs de ce cours (I21)

Cours JAVA (I21) -Licence 1 Semestre 2 / Y.Laborde

Maintenant !Maintenant !

Page 2: 1 Objectifs de ce cours (I21) Cours JAVA (I21) -Licence 1 Semestre 2 / Y.Laborde Maintenant !

2

Cours JAVA (I21) -Licence 1 Semestre 2 / Y.Laborde

Les énumérations en Java

➽ Exemples d’énumérations :

Les jours de la semaine public enum Jour { LUNDI, MARDI, MERCREDI, JEUDI, VENDREDI, SAMEDI, DIMANCHE }

Les saisons public enum Saison { PRINTEMPS, ETE, AUTOMNE, HIVER }

Les couleurs des cartes public enum COULEUR { PIQUE, COEUR, CARREAU, TREFLE }

➽ à partir de là, on peut définir des variables qui relèvent d’une énumération :Jour j = LUNDI; Attention: il n’y a pas de guillemetsCOULEUR couleur = PIQUE; car ce ne sont pas des String mais des noms (littéraux)

Les énumérations permettent de définir des typesqui contiennent un ensemble figé de constantessimplement désignées par des noms littéraux

Par convention, on met toujours les noms des constantes d’énumération en MAJUSCULES.On peut également choisir de mettre les noms des types d’énumération en MAJUSCULES.

Page 3: 1 Objectifs de ce cours (I21) Cours JAVA (I21) -Licence 1 Semestre 2 / Y.Laborde Maintenant !

3

Cours JAVA (I21) -Licence 1 Semestre 2 / Y.Laborde

Les énumérations en Java

➽ on peut utiliser ces variables dans des expressions Java :

- pour de nouvelles affectations :j = Jour . MERCREDI) // la variable j contient maintenant le littéral MERCREDI

- pour des comparaisons simples :if ( j = = Jour . LUNDI) // ...faire quelque chose de particulier à LUNDI...

- pour des comparaisons multiples :switch ( couleur ) {

case PIQUE : // ...faire quelque chose de particulier à PIQUE... puis break; case COEUR : // ...faire quelque chose de particulier à COEUR... puis break; case CARREAU : // ...faire quelque chose de particulier à CARREAU... puis

break; case TREFLE : // ...faire quelque chose de particulier à TREFLE... puis break;

}ATTENTION: en Java, les valeurs de comparaison des ordres « case » ne doivent pas utiliser la notation pointée (qui réfère au type d’énumération) mais doivent être fournies directement comme dans l’instruction  « switch » ci-dessus.

AU CONTRAIRE: dans tous les autres cas, on doit utiliser la notation pointée comme dans l’instruction « if » ci-dessus.

Page 4: 1 Objectifs de ce cours (I21) Cours JAVA (I21) -Licence 1 Semestre 2 / Y.Laborde Maintenant !

4

Cours JAVA (I21) -Licence 1 Semestre 2 / Y.Laborde

Les énumérations en Java

➽ Exemple 1, définition de l’énumération dans UN FICHIER À PART :

fichier Carte.java

public class Carte {// Variables d'instanceprivate COULEUR couleur; // couleur de la carteprivate int rang; // rang de la carte (de 0 à 13) // (Joker rang 0, As rang 1, 2 rang 2, ..., Roi rang ➨ ➨ ➨ ➨

13)private int force; // force de la carte (par défaut, la force est égale au rang)

/** Construit une carte en donnant sa couleur et son rang. La force de la * carte sera égale à son rang. Le rang doit être compris entre 0 et 13.public Carte (COULEUR couleur, int rang) {

this.couleur = couleur;this.rang = (rang >= 1 && rang <= 13 ? rang : 0);this.force = this.rang;

}}

fichier COULEUR.java/** Définition des couleurs des cartes (à l'aide de constantes littérales énumérées). */public enum COULEUR { PIQUE, COEUR, CARREAU, TREFLE }

Page 5: 1 Objectifs de ce cours (I21) Cours JAVA (I21) -Licence 1 Semestre 2 / Y.Laborde Maintenant !

5

Cours JAVA (I21) -Licence 1 Semestre 2 / Y.Laborde

Les énumérations en Java

➽ Exemple 2, définition de l’énumération dans UN FICHIER DE CLASSE :

fichier Carte.java

/** Définition des couleurs des cartes (à l'aide de constantes littérales énumérées). */public enum COULEUR { PIQUE, COEUR, CARREAU, TREFLE }

public class Carte {// Variables d'instanceprivate COULEUR couleur;// couleur de la carteprivate int rang;// rang de la carte (de 0 à 13) // (Joker rang 0, As rang 1, 2 rang 2, ..., Roi rang ➨ ➨ ➨ ➨

13)private int force; // force de la carte

// (par défaut, la force est égale au rang)/** Construit une carte en donnant sa couleur et son rang. La force de la * carte sera égale à son rang. Le rang doit être compris entre 0 et 13. */public Carte (COULEUR couleur, int rang) {

this.couleur = couleur;this.rang = (rang >= 1 && rang <= 13 ? rang : 0);this.force = this.rang;

}}

NE PAS DECLARER PUBLIC

NE PAS DECLARER PUBLIC

La déclaration d’une énumération dans un fichier de classe existant entraîne quelques différences (liées à la notion de package) qui ne seront vues que plus tard.

Page 6: 1 Objectifs de ce cours (I21) Cours JAVA (I21) -Licence 1 Semestre 2 / Y.Laborde Maintenant !

6

Cours JAVA (I21) -Licence 1 Semestre 2 / Y.Laborde

Les classes de types primitifs (wrappers)

Mais, n’étant pas des objets :

➽ ces données ne disposent d’aucune méthode !

Les types primitifs des langages O-O(byte, double, float, int, long, short, char, boolean)

fournissent des données immédiates(entières, réelles, de caractère ou booléennes)

➽ et ne peuvent être fournis en arguments là où un objet est attendu !

Pour palier à cela, tous les types primitifs ont été encapsulés dans des classes.

Types primitifs

byte short int long float double char boolean

Classes correspondantes (wrapped, litt. emballés)

Byte Short Integer Long Float Double Character Boolean

Voir http://java.sun.com/docs/books/tutorial/java/data/numberclasses.html

Page 7: 1 Objectifs de ce cours (I21) Cours JAVA (I21) -Licence 1 Semestre 2 / Y.Laborde Maintenant !

7

Cours JAVA (I21) -Licence 1 Semestre 2 / Y.Laborde

Les classes de types primitifs (wrappers)

Chaque classe contient une valeur primitive du type correspondantmais les objets issus des classes wrappées sont immutables.

Leurs valeurs sont figées à la construction.

Chaque classe fournit plusieurs méthodes :- pour convertir sa valeur (entière, réelle ou booléenne) en String- pour convertir un String en une valeur (entière, réelle ou booléenne)- ainsi que des constantes et d’autres méthodes utiles

Voir http://java.sun.com/javase/6/docs/api/java/lang/Integer.html

Exemple : // Ici, l’objet instancié ne changera jamais de valeur, il vaudra toujours 12 !Integer wi = new Integer(12);

Exemples :new Integer(12) Integer➠ wi.byteValue() byte➠ Integer.toString(12) String➠new Integer ("12") Integer➠ wi.intValue() int➠ Integer.toString(12,16) String➠Integer.valueOf(12) Integer➠ wi.doubleValue() double➠ Integer.toHexString(12) String➠Integer.valueOf("12") Integer➠ wi.floatValue() float➠ Integer.parseInt("12") int➠Integer.valueOf( "FF",16) Integer➠ Integer.parseInt("12",16) int➠ Integer.MAX_VALUE int➠ (231-1)

Page 8: 1 Objectifs de ce cours (I21) Cours JAVA (I21) -Licence 1 Semestre 2 / Y.Laborde Maintenant !

8

Cours JAVA (I21) -Licence 1 Semestre 2 / Y.Laborde

Les classes de types primitifs (wrappers)

Autoboxing et unboxingAutant que possible, on préfèrera utiliser des types primitifs dans nos codes. Il s’avèrera donc nécessaire d’effectuer des conversions vers des objets wrappés quand cela sera indispensable.

Heureusement, le plus souvent, c’est le compilateur qui se chargera de tout cela !Il effectuera tantôt un autoboxing (mise en boîte: int Integer), tantôt un ➠ unboxing (Integer int) là où ce sera nécessaire !➠

Voir http://java.sun.com/docs/books/tutorial/java/data/numberclasses.html

Exemple : // Ici, nbCartes est un type primitif à conjuguer avec un objet StringSystem.out.println ("nombre de cartes = " + nbCartes);// Ici, wx et wy sont des types objets initialisés avec des types primitifs

Integer wx, wy; wx = 12; wy = 15;// Ici, wx et wy sont des types objets à additionner auparavant comme des

intSystem.out.println ( wx+wy );

Voir http://java.sun.com/docs/books/tutorial/java/data/converting.html

Page 9: 1 Objectifs de ce cours (I21) Cours JAVA (I21) -Licence 1 Semestre 2 / Y.Laborde Maintenant !

9

Cours JAVA (I21) -Licence 1 Semestre 2 / Y.Laborde

Les classes de types primitifs (wrappers)

Application aux classes ensemblistesSi l’on désire former un ensemble d’entiers à l’aide d’une classe ArrayList<E>, il n’est d’autre solution que de spécialiser <E> à l’aide d’une classe wrappées, soit ArrayList<Integer>.

Comme précédemment, c’est le compilateur qui se chargera de toutes les conversions !

Exemple : // On commence par instancier une liste d’entiersArrayList<Integer> listeEntiers = new ArrayList<Integer>();

// Ici, on insère des entiers directement à l’aide de types primitifs int ! listeEntiers.add(12); ...

// Ici, on veut utiliser des types objets comme des int !if ( listeEntiers.get(0) > listeEntiers.get(1) ) ...

if ( listeEntiers.get(0) + 1 > listeEntiers.get(1) ) ...

// Ici, on veut directement itérer sur la base de types primitifs int !for ( int i : listeEntiers ) {

if ( i != 0 ) ...}

Évite : listeEntiers.add(Integer.valueOf(12))

Évite : listeEntiers.add(Integer.valueOf(12))

Évite :listeEntiers.get(0).intValue()

listeEntiers.get(1).intValue()

Évite :listeEntiers.get(0).intValue()

listeEntiers.get(1).intValue()

Évite : for ( Integer wi : listeEntiers ) {if ( wi. intValue() != 0 ) ...

}

Évite : for ( Integer wi : listeEntiers ) {if ( wi. intValue() != 0 ) ...

}

Page 10: 1 Objectifs de ce cours (I21) Cours JAVA (I21) -Licence 1 Semestre 2 / Y.Laborde Maintenant !

10

Cours JAVA (I21) -Licence 1 Semestre 2 / Y.Laborde

Première notion d’interface Java

Les INTERFACES sont des sortes de CONTRATSque des CLASSES s’engagent à respecter

Par convention, on commence toujours les noms des interfaces par une MAJUSCULE.

Une classe qui s’engage à respecter une interface DOIT DONNER une IMPLEMENTATION de TOUTES les méthodes définies dans l’interface.

Exemple : // INTERFACE servant à définir un CONTRAT de nommage :

public interface Nommable { public String getName ( ); public void setName (String name); }

Une interface ne fait que définir des

signatures de méthodes.

La classe Personne respecte l’interface

Nommable

Page 11: 1 Objectifs de ce cours (I21) Cours JAVA (I21) -Licence 1 Semestre 2 / Y.Laborde Maintenant !

11

Cours JAVA (I21) -Licence 1 Semestre 2 / Y.Laborde

Première notion d’interface Java

Dès lors, la classe Personne possède la qualité Nommableet il deviendra possible de ne s’intéresser qu’à cette qualité

Si l’on dispose de plusieurs classes implémentant une même interface,il peut arriver qu’une autre classe procède à des traitements communs

sur des objets relevant de cette qualité d’interface

Exemple : // INTERFACE utilisée pour restreindre la vision d’une classe : Personne p = new Personne ("Paul"); p.setNom ("Pierre"); Nommable n = new Personne ("Martin"); n.setNom ("James");

Un objet peut n’être vue qu’au travers de sa

qualité d’interface.

Exemple : // CLASSE utilisant la qualité d’interface Nommable dans l’une de ses méthodes : public class CCC { public void sanctifier ( Nommable nble ) { nble.setName ( "Saint " + nble.getName() ); System.out.println (  "Sanctification : " + nble.getName() ); }

}

Csq ②

Csq ①

Un objet peut être passé en paramètre par

le biais de sa qualité d’interface quelque soit

sa « classe vraie ».

Page 12: 1 Objectifs de ce cours (I21) Cours JAVA (I21) -Licence 1 Semestre 2 / Y.Laborde Maintenant !

12

Cours JAVA (I21) -Licence 1 Semestre 2 / Y.Laborde

Acta est fabula