achref el mouelhi - lis lab · 2020. 7. 26. · achref el mouelhi docteur de l’universite...

158
Java : classes et interfaces Achref El Mouelhi Docteur de l’universit ´ e d’Aix-Marseille Chercheur en Programmation par contrainte (IA) Ing ´ enieur en G ´ enie logiciel [email protected] H & H: Research and Training 1 / 84

Upload: others

Post on 12-Oct-2020

100 views

Category:

Documents


29 download

TRANSCRIPT

Page 1: Achref El Mouelhi - LIS lab · 2020. 7. 26. · Achref El Mouelhi Docteur de l’universite d’Aix-Marseille ... Saisir le nom du package et celui de la classe Pour la classe Main,

Java : classes et interfaces

Achref El Mouelhi

Docteur de l’universite d’Aix-MarseilleChercheur en Programmation par contrainte (IA)

Ingenieur en Genie logiciel

[email protected]

H & H: Research and Training 1 / 84

Page 2: Achref El Mouelhi - LIS lab · 2020. 7. 26. · Achref El Mouelhi Docteur de l’universite d’Aix-Marseille ... Saisir le nom du package et celui de la classe Pour la classe Main,

Plan

1 Rappel

2 ClassetoString()SetterGetterConstructeurequals() et hashCode()Attributs et methodes statiques

H & H: Research and Training 2 / 84

Page 3: Achref El Mouelhi - LIS lab · 2020. 7. 26. · Achref El Mouelhi Docteur de l’universite d’Aix-Marseille ... Saisir le nom du package et celui de la classe Pour la classe Main,

Plan

3 Associations particulieres entre classesHeritageAgregation et composition

4 Classe et methode abstraites

5 Classe et methode finales

6 Interface

7 Enumeration

H & H: Research and Training 3 / 84

Page 4: Achref El Mouelhi - LIS lab · 2020. 7. 26. · Achref El Mouelhi Docteur de l’universite d’Aix-Marseille ... Saisir le nom du package et celui de la classe Pour la classe Main,

© Achref EL MOUELHI ©

Rappel

Java

Qu’est ce qu’une classe en POO?

Ca correspond a un plan, un moule, une usine...

C’est une description abstraite d’un type d’objets

Elle represente un ensemble d’objets ayant les memes proprietesstatiques (attributs) et dynamiques (methodes)

Qu’est ce que c’est la notion d’instance?

Une instance correspond a un objet cree a partir d’une classe (viale constructeur)

L’instanciation : creation d’un objet d’une classe

instance ≡ objet

H & H: Research and Training 4 / 84

Page 5: Achref El Mouelhi - LIS lab · 2020. 7. 26. · Achref El Mouelhi Docteur de l’universite d’Aix-Marseille ... Saisir le nom du package et celui de la classe Pour la classe Main,

© Achref EL MOUELHI ©

Rappel

Java

Qu’est ce qu’une classe en POO?

Ca correspond a un plan, un moule, une usine...

C’est une description abstraite d’un type d’objets

Elle represente un ensemble d’objets ayant les memes proprietesstatiques (attributs) et dynamiques (methodes)

Qu’est ce que c’est la notion d’instance?

Une instance correspond a un objet cree a partir d’une classe (viale constructeur)

L’instanciation : creation d’un objet d’une classe

instance ≡ objet

H & H: Research and Training 4 / 84

Page 6: Achref El Mouelhi - LIS lab · 2020. 7. 26. · Achref El Mouelhi Docteur de l’universite d’Aix-Marseille ... Saisir le nom du package et celui de la classe Pour la classe Main,

© Achref EL MOUELHI ©

Rappel

Java

Qu’est ce qu’une classe en POO?

Ca correspond a un plan, un moule, une usine...

C’est une description abstraite d’un type d’objets

Elle represente un ensemble d’objets ayant les memes proprietesstatiques (attributs) et dynamiques (methodes)

Qu’est ce que c’est la notion d’instance?

Une instance correspond a un objet cree a partir d’une classe (viale constructeur)

L’instanciation : creation d’un objet d’une classe

instance ≡ objet

H & H: Research and Training 4 / 84

Page 7: Achref El Mouelhi - LIS lab · 2020. 7. 26. · Achref El Mouelhi Docteur de l’universite d’Aix-Marseille ... Saisir le nom du package et celui de la classe Pour la classe Main,

© Achref EL MOUELHI ©

Rappel

Java

De quoi est compose une classe?

NomClasse

les attributs

les methodes

Attribut : [visibilite] + type + nom

Methode : [visibilite] + valeur de retour + nom + arguments ≡signature : exactement comme les fonctions en procedurale

H & H: Research and Training 5 / 84

Page 8: Achref El Mouelhi - LIS lab · 2020. 7. 26. · Achref El Mouelhi Docteur de l’universite d’Aix-Marseille ... Saisir le nom du package et celui de la classe Pour la classe Main,

© Achref EL MOUELHI ©

Classe

Java

Particularite du Java

Toutes les classes heritent implicitement (pas besoin d’ajouterextends) d’une classe mere Object.

La classe Object contient plusieurs methodes telles quetoString() (pour transformer un objet en chaıne de caractere),clone() (pour cloner)...

Le mot-cle this permet de designer l’objet courant.

Contrairement a certains LOO, le this n’est pas obligatoire siaucune ambiguite ne se presente.

H & H: Research and Training 6 / 84

Page 9: Achref El Mouelhi - LIS lab · 2020. 7. 26. · Achref El Mouelhi Docteur de l’universite d’Aix-Marseille ... Saisir le nom du package et celui de la classe Pour la classe Main,

© Achref EL MOUELHI ©

Classe

JavaCommencons par creer un nouveau projet Java

Aller dans File > New > Java Project

Remplir le champ Project name: avec cours-poo puis cliquersur Next

Decocher la case Create module-info.java file puiscliquer sur Finish

Creons deux packages org.eclipse.test etorg.eclipse.model

Aller dans File > New > Package

Saisir le nom du premier package et valider

Refaire la meme chose pour le second

H & H: Research and Training 7 / 84

Page 10: Achref El Mouelhi - LIS lab · 2020. 7. 26. · Achref El Mouelhi Docteur de l’universite d’Aix-Marseille ... Saisir le nom du package et celui de la classe Pour la classe Main,

© Achref EL MOUELHI ©

Classe

JavaCommencons par creer un nouveau projet Java

Aller dans File > New > Java Project

Remplir le champ Project name: avec cours-poo puis cliquersur Next

Decocher la case Create module-info.java file puiscliquer sur Finish

Creons deux packages org.eclipse.test etorg.eclipse.model

Aller dans File > New > Package

Saisir le nom du premier package et valider

Refaire la meme chose pour le secondH & H: Research and Training 7 / 84

Page 11: Achref El Mouelhi - LIS lab · 2020. 7. 26. · Achref El Mouelhi Docteur de l’universite d’Aix-Marseille ... Saisir le nom du package et celui de la classe Pour la classe Main,

© Achref EL MOUELHI ©

Classe

Java

Creons deux classes

Une classe Personne dans org.eclipse.model contenanttrois attributs : num, nom et prenom

Une classe Main dans org.eclipse.test contenant lepublic static void main dans lequel on instanciera laclasse Personne

Creons les classes

Aller dans File > New > Class

Saisir le nom du package et celui de la classe

Pour la classe Main, cocher la case public static voidmain (String[] args)

Cliquer sur Finish

H & H: Research and Training 8 / 84

Page 12: Achref El Mouelhi - LIS lab · 2020. 7. 26. · Achref El Mouelhi Docteur de l’universite d’Aix-Marseille ... Saisir le nom du package et celui de la classe Pour la classe Main,

© Achref EL MOUELHI ©

Classe

Java

Creons deux classes

Une classe Personne dans org.eclipse.model contenanttrois attributs : num, nom et prenom

Une classe Main dans org.eclipse.test contenant lepublic static void main dans lequel on instanciera laclasse Personne

Creons les classes

Aller dans File > New > Class

Saisir le nom du package et celui de la classe

Pour la classe Main, cocher la case public static voidmain (String[] args)

Cliquer sur FinishH & H: Research and Training 8 / 84

Page 13: Achref El Mouelhi - LIS lab · 2020. 7. 26. · Achref El Mouelhi Docteur de l’universite d’Aix-Marseille ... Saisir le nom du package et celui de la classe Pour la classe Main,

© Achref EL MOUELHI ©

Classe

JavaContenu de la classe Personne

package org.eclipse.model;

public class Personne {int num;String nom;String prenom;

}

Remarques

En Java, toute classe a un constructeur par defaut sans parametres.

Par defaut, la visibilite des attributs, en Java, est package.

Donc, les attributs ne seront pas accessibles depuis la classe Main qui se situedans un package different (org.eclipse.test)

Donc, changeons la visibilite des trois attributs de la classe Personne

H & H: Research and Training 9 / 84

Page 14: Achref El Mouelhi - LIS lab · 2020. 7. 26. · Achref El Mouelhi Docteur de l’universite d’Aix-Marseille ... Saisir le nom du package et celui de la classe Pour la classe Main,

© Achref EL MOUELHI ©

Classe

Java

Nouveau contenu de la classe Personne

package org.eclipse.model;

public class Personne {public int num;public String nom;public String prenom;

}

H & H: Research and Training 10 / 84

Page 15: Achref El Mouelhi - LIS lab · 2020. 7. 26. · Achref El Mouelhi Docteur de l’universite d’Aix-Marseille ... Saisir le nom du package et celui de la classe Pour la classe Main,

© Achref EL MOUELHI ©

Classe

Java

Contenu de la classe Main

package org.eclipse.test;

public class Main {

public static void main(String[] args) {// TODO Auto-generated method stub

}}

H & H: Research and Training 11 / 84

Page 16: Achref El Mouelhi - LIS lab · 2020. 7. 26. · Achref El Mouelhi Docteur de l’universite d’Aix-Marseille ... Saisir le nom du package et celui de la classe Pour la classe Main,

© Achref EL MOUELHI ©

Classe

Java

Hypothese

Si on voulait creer un objet de la classe Personne avec lesvaleurs 1, wick et john

Etape 1 : declaration d’un objet (objet non cree)

Personne personne;

Etape 2 : instanciation de la classe Personne (objet cree)

personne = new Personne();

On peut faire declaration + instanciation

Personne personne = new Personne();

H & H: Research and Training 12 / 84

Page 17: Achref El Mouelhi - LIS lab · 2020. 7. 26. · Achref El Mouelhi Docteur de l’universite d’Aix-Marseille ... Saisir le nom du package et celui de la classe Pour la classe Main,

© Achref EL MOUELHI ©

Classe

Java

Hypothese

Si on voulait creer un objet de la classe Personne avec lesvaleurs 1, wick et john

Etape 1 : declaration d’un objet (objet non cree)

Personne personne;

Etape 2 : instanciation de la classe Personne (objet cree)

personne = new Personne();

On peut faire declaration + instanciation

Personne personne = new Personne();

H & H: Research and Training 12 / 84

Page 18: Achref El Mouelhi - LIS lab · 2020. 7. 26. · Achref El Mouelhi Docteur de l’universite d’Aix-Marseille ... Saisir le nom du package et celui de la classe Pour la classe Main,

© Achref EL MOUELHI ©

Classe

Java

Hypothese

Si on voulait creer un objet de la classe Personne avec lesvaleurs 1, wick et john

Etape 1 : declaration d’un objet (objet non cree)

Personne personne;

Etape 2 : instanciation de la classe Personne (objet cree)

personne = new Personne();

On peut faire declaration + instanciation

Personne personne = new Personne();

H & H: Research and Training 12 / 84

Page 19: Achref El Mouelhi - LIS lab · 2020. 7. 26. · Achref El Mouelhi Docteur de l’universite d’Aix-Marseille ... Saisir le nom du package et celui de la classe Pour la classe Main,

© Achref EL MOUELHI ©

Classe

Java

Hypothese

Si on voulait creer un objet de la classe Personne avec lesvaleurs 1, wick et john

Etape 1 : declaration d’un objet (objet non cree)

Personne personne;

Etape 2 : instanciation de la classe Personne (objet cree)

personne = new Personne();

On peut faire declaration + instanciation

Personne personne = new Personne();

H & H: Research and Training 12 / 84

Page 20: Achref El Mouelhi - LIS lab · 2020. 7. 26. · Achref El Mouelhi Docteur de l’universite d’Aix-Marseille ... Saisir le nom du package et celui de la classe Pour la classe Main,

© Achref EL MOUELHI ©

Classe

Java

Affectons les valeurs aux differents attributs

personne.num = 1;personne.nom = "wick";personne.prenom = "john";

Pour etre sur que les valeurs ont bien ete affectees aux attributs,on affiche

System.out.println(personne)

H & H: Research and Training 13 / 84

Page 21: Achref El Mouelhi - LIS lab · 2020. 7. 26. · Achref El Mouelhi Docteur de l’universite d’Aix-Marseille ... Saisir le nom du package et celui de la classe Pour la classe Main,

© Achref EL MOUELHI ©

Classe

Java

Affectons les valeurs aux differents attributs

personne.num = 1;personne.nom = "wick";personne.prenom = "john";

Pour etre sur que les valeurs ont bien ete affectees aux attributs,on affiche

System.out.println(personne)

H & H: Research and Training 13 / 84

Page 22: Achref El Mouelhi - LIS lab · 2020. 7. 26. · Achref El Mouelhi Docteur de l’universite d’Aix-Marseille ... Saisir le nom du package et celui de la classe Pour la classe Main,

© Achref EL MOUELHI ©

Classe

JavaContenu de la classe Main

package org.eclipse.test;

public class Main {

public static void main(String[] args) {Personne personne = new Personne();personne.num = 1;personne.nom = "wick";personne.prenom = "john";System.out.println(personne);

}}

En executant, le resultat est :org.eclipse.model.Personne@7852e922

H & H: Research and Training 14 / 84

Page 23: Achref El Mouelhi - LIS lab · 2020. 7. 26. · Achref El Mouelhi Docteur de l’universite d’Aix-Marseille ... Saisir le nom du package et celui de la classe Pour la classe Main,

© Achref EL MOUELHI ©

Classe

JavaContenu de la classe Main

package org.eclipse.test;

public class Main {

public static void main(String[] args) {Personne personne = new Personne();personne.num = 1;personne.nom = "wick";personne.prenom = "john";System.out.println(personne);

}}

En executant, le resultat est :org.eclipse.model.Personne@7852e922

H & H: Research and Training 14 / 84

Page 24: Achref El Mouelhi - LIS lab · 2020. 7. 26. · Achref El Mouelhi Docteur de l’universite d’Aix-Marseille ... Saisir le nom du package et celui de la classe Pour la classe Main,

© Achref EL MOUELHI ©

Classe toString()

Java

Explication

Pour afficher les details d’un objet, il faut que la methodetoString() soit implementee

Pour la generer, clic droit sur la classe Personne, aller danssource > Generate toString()..., selectionner leschamps a afficher puis valider.

Le code de la methode toString()

@Overridepublic String toString() {

return "Personne [num=" + num + ", nom=" + nom +", prenom=" + prenom + "]";

}

H & H: Research and Training 15 / 84

Page 25: Achref El Mouelhi - LIS lab · 2020. 7. 26. · Achref El Mouelhi Docteur de l’universite d’Aix-Marseille ... Saisir le nom du package et celui de la classe Pour la classe Main,

© Achref EL MOUELHI ©

Classe toString()

Java

Explication

Pour afficher les details d’un objet, il faut que la methodetoString() soit implementee

Pour la generer, clic droit sur la classe Personne, aller danssource > Generate toString()..., selectionner leschamps a afficher puis valider.

Le code de la methode toString()

@Overridepublic String toString() {

return "Personne [num=" + num + ", nom=" + nom +", prenom=" + prenom + "]";

}

H & H: Research and Training 15 / 84

Page 26: Achref El Mouelhi - LIS lab · 2020. 7. 26. · Achref El Mouelhi Docteur de l’universite d’Aix-Marseille ... Saisir le nom du package et celui de la classe Pour la classe Main,

© Achref EL MOUELHI ©

Classe toString()

Java

@Override

Une annotation (appele aussi decorateur par MicroSoft)

Pour nous rappeler qu’on redefinit une methode qui appartient ala classe mere (ici Object)

En executant, le resultat est :

Personne [num=1, nom=wick, prenom=john]

H & H: Research and Training 16 / 84

Page 27: Achref El Mouelhi - LIS lab · 2020. 7. 26. · Achref El Mouelhi Docteur de l’universite d’Aix-Marseille ... Saisir le nom du package et celui de la classe Pour la classe Main,

© Achref EL MOUELHI ©

Classe toString()

Java

@Override

Une annotation (appele aussi decorateur par MicroSoft)

Pour nous rappeler qu’on redefinit une methode qui appartient ala classe mere (ici Object)

En executant, le resultat est :

Personne [num=1, nom=wick, prenom=john]

H & H: Research and Training 16 / 84

Page 28: Achref El Mouelhi - LIS lab · 2020. 7. 26. · Achref El Mouelhi Docteur de l’universite d’Aix-Marseille ... Saisir le nom du package et celui de la classe Pour la classe Main,

© Achref EL MOUELHI ©

Classe Setter

JavaHypothese

Supposant que l’on n’accepte pas de valeur negative pour l’attribut num de laclasse Personne

Demarche

1 Bloquer l’acces directe aux attributs (mettre la visibilite a private)

2 Definir des methodes publiques qui controlent l’affectation de valeursaux attributs (les setter)

Convention

Mettre la visibilite private ou protected pour tous les attributs

Mettre la visibilite public pour toutes les methodes

H & H: Research and Training 17 / 84

Page 29: Achref El Mouelhi - LIS lab · 2020. 7. 26. · Achref El Mouelhi Docteur de l’universite d’Aix-Marseille ... Saisir le nom du package et celui de la classe Pour la classe Main,

© Achref EL MOUELHI ©

Classe Setter

JavaHypothese

Supposant que l’on n’accepte pas de valeur negative pour l’attribut num de laclasse Personne

Demarche

1 Bloquer l’acces directe aux attributs (mettre la visibilite a private)

2 Definir des methodes publiques qui controlent l’affectation de valeursaux attributs (les setter)

Convention

Mettre la visibilite private ou protected pour tous les attributs

Mettre la visibilite public pour toutes les methodes

H & H: Research and Training 17 / 84

Page 30: Achref El Mouelhi - LIS lab · 2020. 7. 26. · Achref El Mouelhi Docteur de l’universite d’Aix-Marseille ... Saisir le nom du package et celui de la classe Pour la classe Main,

© Achref EL MOUELHI ©

Classe Setter

JavaHypothese

Supposant que l’on n’accepte pas de valeur negative pour l’attribut num de laclasse Personne

Demarche

1 Bloquer l’acces directe aux attributs (mettre la visibilite a private)

2 Definir des methodes publiques qui controlent l’affectation de valeursaux attributs (les setter)

Convention

Mettre la visibilite private ou protected pour tous les attributs

Mettre la visibilite public pour toutes les methodes

H & H: Research and Training 17 / 84

Page 31: Achref El Mouelhi - LIS lab · 2020. 7. 26. · Achref El Mouelhi Docteur de l’universite d’Aix-Marseille ... Saisir le nom du package et celui de la classe Pour la classe Main,

© Achref EL MOUELHI ©

Classe Setter

JavaMettons la visibilite private pour tous les attributs de la classe Personne

package org.eclipse.model;

public class Personne {private int num;private String nom;private String prenom;

@Overridepublic String toString() {

return "Personne [num=" + num + ", nom=" + nom + ",prenom=" + prenom + "]";

}}

Dans la classe Main, les trois lignes suivantes sont soulignees en rouge

personne.num = 1;personne.nom = "wick";personne.prenom = "john";

H & H: Research and Training 18 / 84

Page 32: Achref El Mouelhi - LIS lab · 2020. 7. 26. · Achref El Mouelhi Docteur de l’universite d’Aix-Marseille ... Saisir le nom du package et celui de la classe Pour la classe Main,

© Achref EL MOUELHI ©

Classe Setter

JavaMettons la visibilite private pour tous les attributs de la classe Personne

package org.eclipse.model;

public class Personne {private int num;private String nom;private String prenom;

@Overridepublic String toString() {

return "Personne [num=" + num + ", nom=" + nom + ",prenom=" + prenom + "]";

}}

Dans la classe Main, les trois lignes suivantes sont soulignees en rouge

personne.num = 1;personne.nom = "wick";personne.prenom = "john";

H & H: Research and Training 18 / 84

Page 33: Achref El Mouelhi - LIS lab · 2020. 7. 26. · Achref El Mouelhi Docteur de l’universite d’Aix-Marseille ... Saisir le nom du package et celui de la classe Pour la classe Main,

© Achref EL MOUELHI ©

Classe Setter

Java

Explication

Les attributs sont prives, donc aucun acces direct ne sera autorise

Solution : generer les setters

Faire clic droit sur la classe Personne

Aller dans Source > Generate Getters and Setters...

Cliquer sur chaque attribut et cocher la casesetNomAttribut(...)

Valider

H & H: Research and Training 19 / 84

Page 34: Achref El Mouelhi - LIS lab · 2020. 7. 26. · Achref El Mouelhi Docteur de l’universite d’Aix-Marseille ... Saisir le nom du package et celui de la classe Pour la classe Main,

© Achref EL MOUELHI ©

Classe Setter

Java

Explication

Les attributs sont prives, donc aucun acces direct ne sera autorise

Solution : generer les setters

Faire clic droit sur la classe Personne

Aller dans Source > Generate Getters and Setters...

Cliquer sur chaque attribut et cocher la casesetNomAttribut(...)

Valider

H & H: Research and Training 19 / 84

Page 35: Achref El Mouelhi - LIS lab · 2020. 7. 26. · Achref El Mouelhi Docteur de l’universite d’Aix-Marseille ... Saisir le nom du package et celui de la classe Pour la classe Main,

© Achref EL MOUELHI ©

Classe Setter

JavaLes trois methodes generees

public void setNum(int num) {this.num = num;

}public void setNom(String nom) {

this.nom = nom;}public void setPrenom(String prenom) {

this.prenom = prenom;}

Modifions setNum() pour ne plus accepter de valeurs inferieures a 1

public void setNum(int num) {if (num >= 1){

this.num = num;}

}public void setNom(String nom) {

this.nom = nom;}public void setPrenom(String prenom) {

this.prenom = prenom;}

H & H: Research and Training 20 / 84

Page 36: Achref El Mouelhi - LIS lab · 2020. 7. 26. · Achref El Mouelhi Docteur de l’universite d’Aix-Marseille ... Saisir le nom du package et celui de la classe Pour la classe Main,

© Achref EL MOUELHI ©

Classe Setter

JavaLes trois methodes generees

public void setNum(int num) {this.num = num;

}public void setNom(String nom) {

this.nom = nom;}public void setPrenom(String prenom) {

this.prenom = prenom;}

Modifions setNum() pour ne plus accepter de valeurs inferieures a 1

public void setNum(int num) {if (num >= 1){

this.num = num;}

}public void setNom(String nom) {

this.nom = nom;}public void setPrenom(String prenom) {

this.prenom = prenom;}

H & H: Research and Training 20 / 84

Page 37: Achref El Mouelhi - LIS lab · 2020. 7. 26. · Achref El Mouelhi Docteur de l’universite d’Aix-Marseille ... Saisir le nom du package et celui de la classe Pour la classe Main,

© Achref EL MOUELHI ©

Classe Setter

JavaMettons a jour la classe Main

package org.eclipse.test;

public class Main {

public static void main(String[] args) {Personne personne = new Personne();personne.setNum(1);personne.setNom("wick");personne.setPrenom("john");System.out.println(personne);

}}

En executant, le resultat est :Personne [num=1, nom=wick, prenom=john]

H & H: Research and Training 21 / 84

Page 38: Achref El Mouelhi - LIS lab · 2020. 7. 26. · Achref El Mouelhi Docteur de l’universite d’Aix-Marseille ... Saisir le nom du package et celui de la classe Pour la classe Main,

© Achref EL MOUELHI ©

Classe Setter

JavaMettons a jour la classe Main

package org.eclipse.test;

public class Main {

public static void main(String[] args) {Personne personne = new Personne();personne.setNum(1);personne.setNom("wick");personne.setPrenom("john");System.out.println(personne);

}}

En executant, le resultat est :Personne [num=1, nom=wick, prenom=john]

H & H: Research and Training 21 / 84

Page 39: Achref El Mouelhi - LIS lab · 2020. 7. 26. · Achref El Mouelhi Docteur de l’universite d’Aix-Marseille ... Saisir le nom du package et celui de la classe Pour la classe Main,

© Achref EL MOUELHI ©

Classe Setter

JavaMettons a jour la classe Main

package org.eclipse.test;

public class Main {

public static void main(String[] args) {Personne personne = new Personne();personne.setNum(-1);personne.setNom("wick");personne.setPrenom("john");System.out.println(personne);

}}

En executant, le resultat est :Personne [num=0, nom=wick, prenom=john]

H & H: Research and Training 22 / 84

Page 40: Achref El Mouelhi - LIS lab · 2020. 7. 26. · Achref El Mouelhi Docteur de l’universite d’Aix-Marseille ... Saisir le nom du package et celui de la classe Pour la classe Main,

© Achref EL MOUELHI ©

Classe Setter

JavaMettons a jour la classe Main

package org.eclipse.test;

public class Main {

public static void main(String[] args) {Personne personne = new Personne();personne.setNum(-1);personne.setNom("wick");personne.setPrenom("john");System.out.println(personne);

}}

En executant, le resultat est :Personne [num=0, nom=wick, prenom=john]

H & H: Research and Training 22 / 84

Page 41: Achref El Mouelhi - LIS lab · 2020. 7. 26. · Achref El Mouelhi Docteur de l’universite d’Aix-Marseille ... Saisir le nom du package et celui de la classe Pour la classe Main,

© Achref EL MOUELHI ©

Classe Getter

Java

Hypothese

Si on voulait afficher les attributs (prives) de la classe Personne, unpar un, dans la classe Main sans passer par le toString()

Demarche

Definir des methodes qui retournent les valeurs des attributs (lesgetter)

H & H: Research and Training 23 / 84

Page 42: Achref El Mouelhi - LIS lab · 2020. 7. 26. · Achref El Mouelhi Docteur de l’universite d’Aix-Marseille ... Saisir le nom du package et celui de la classe Pour la classe Main,

© Achref EL MOUELHI ©

Classe Getter

Java

Hypothese

Si on voulait afficher les attributs (prives) de la classe Personne, unpar un, dans la classe Main sans passer par le toString()

Demarche

Definir des methodes qui retournent les valeurs des attributs (lesgetter)

H & H: Research and Training 23 / 84

Page 43: Achref El Mouelhi - LIS lab · 2020. 7. 26. · Achref El Mouelhi Docteur de l’universite d’Aix-Marseille ... Saisir le nom du package et celui de la classe Pour la classe Main,

© Achref EL MOUELHI ©

Classe Getter

Java

Pour generer les getters

Faire clic droit sur la classe Personne

Aller dans Source > Generate Getters and Setters...

Cliquer sur chaque attribut et cocher la casegetNomAttribut()

Valider

H & H: Research and Training 24 / 84

Page 44: Achref El Mouelhi - LIS lab · 2020. 7. 26. · Achref El Mouelhi Docteur de l’universite d’Aix-Marseille ... Saisir le nom du package et celui de la classe Pour la classe Main,

© Achref EL MOUELHI ©

Classe Getter

Java

Mettons a jour la classe Main

package org.eclipse.test;

public class Main {

public static void main(String[] args) {Personne personne = new Personne();personne.setNum(1);personne.setNom("wick");personne.setPrenom("john");System.out.println(personne.getNum() + " " + personne.

getNom() + " " + personne.getPrenom());}

}

En executant, le resultat est :

1 wick john

H & H: Research and Training 25 / 84

Page 45: Achref El Mouelhi - LIS lab · 2020. 7. 26. · Achref El Mouelhi Docteur de l’universite d’Aix-Marseille ... Saisir le nom du package et celui de la classe Pour la classe Main,

© Achref EL MOUELHI ©

Classe Getter

Java

Mettons a jour la classe Main

package org.eclipse.test;

public class Main {

public static void main(String[] args) {Personne personne = new Personne();personne.setNum(1);personne.setNom("wick");personne.setPrenom("john");System.out.println(personne.getNum() + " " + personne.

getNom() + " " + personne.getPrenom());}

}

En executant, le resultat est :

1 wick john

H & H: Research and Training 25 / 84

Page 46: Achref El Mouelhi - LIS lab · 2020. 7. 26. · Achref El Mouelhi Docteur de l’universite d’Aix-Marseille ... Saisir le nom du package et celui de la classe Pour la classe Main,

© Achref EL MOUELHI ©

Classe Constructeur

JavaRemarques

Par defaut, toute classe en Java a un constructeur par defaut sansparametre

Pour simplifier la creation d’objets, on peut definir un nouveauconstructeur qui prend en parametre plusieurs attributs de laclasse

Pour generer un constructeur avec parametre

1 Faire clic droit sur la classe Personne

2 Aller dans Source > Generate Constructor usingFields...

3 Verifier que toutes les cases sont cochees et valider

H & H: Research and Training 26 / 84

Page 47: Achref El Mouelhi - LIS lab · 2020. 7. 26. · Achref El Mouelhi Docteur de l’universite d’Aix-Marseille ... Saisir le nom du package et celui de la classe Pour la classe Main,

© Achref EL MOUELHI ©

Classe Constructeur

JavaRemarques

Par defaut, toute classe en Java a un constructeur par defaut sansparametre

Pour simplifier la creation d’objets, on peut definir un nouveauconstructeur qui prend en parametre plusieurs attributs de laclasse

Pour generer un constructeur avec parametre

1 Faire clic droit sur la classe Personne

2 Aller dans Source > Generate Constructor usingFields...

3 Verifier que toutes les cases sont cochees et valider

H & H: Research and Training 26 / 84

Page 48: Achref El Mouelhi - LIS lab · 2020. 7. 26. · Achref El Mouelhi Docteur de l’universite d’Aix-Marseille ... Saisir le nom du package et celui de la classe Pour la classe Main,

© Achref EL MOUELHI ©

Classe Constructeur

JavaLe constructeur genere

public Personne(int num, String nom, String prenom) {super();this.num = num;this.nom = nom;this.prenom = prenom;

}

Pour preserver la coherence, il faut que le constructeur controle lavaleur de l’attribut num

public Personne(int num, String nom, String prenom) {super();if (num >= 1){

this.num = num;}this.nom = nom;this.prenom = prenom;

}

H & H: Research and Training 27 / 84

Page 49: Achref El Mouelhi - LIS lab · 2020. 7. 26. · Achref El Mouelhi Docteur de l’universite d’Aix-Marseille ... Saisir le nom du package et celui de la classe Pour la classe Main,

© Achref EL MOUELHI ©

Classe Constructeur

JavaLe constructeur genere

public Personne(int num, String nom, String prenom) {super();this.num = num;this.nom = nom;this.prenom = prenom;

}

Pour preserver la coherence, il faut que le constructeur controle lavaleur de l’attribut num

public Personne(int num, String nom, String prenom) {super();if (num >= 1){

this.num = num;}this.nom = nom;this.prenom = prenom;

}H & H: Research and Training 27 / 84

Page 50: Achref El Mouelhi - LIS lab · 2020. 7. 26. · Achref El Mouelhi Docteur de l’universite d’Aix-Marseille ... Saisir le nom du package et celui de la classe Pour la classe Main,

© Achref EL MOUELHI ©

Classe Constructeur

Java

On peut aussi appele le setter dans le constructeur

public Personne(int num, String nom, String prenom){super();this.setNum(num);this.nom = nom;this.prenom = prenom;

}

H & H: Research and Training 28 / 84

Page 51: Achref El Mouelhi - LIS lab · 2020. 7. 26. · Achref El Mouelhi Docteur de l’universite d’Aix-Marseille ... Saisir le nom du package et celui de la classe Pour la classe Main,

© Achref EL MOUELHI ©

Classe Constructeur

Java

Dans la classe Main, la ligne suivante est soulignee en rougePersonne personne = new Personne();

Explication

Le constructeur par defaut a ete ecrase (il n’existe plus)

SolutionGenerer un constructeur sans parametre

H & H: Research and Training 29 / 84

Page 52: Achref El Mouelhi - LIS lab · 2020. 7. 26. · Achref El Mouelhi Docteur de l’universite d’Aix-Marseille ... Saisir le nom du package et celui de la classe Pour la classe Main,

© Achref EL MOUELHI ©

Classe Constructeur

Java

Dans la classe Main, la ligne suivante est soulignee en rougePersonne personne = new Personne();

Explication

Le constructeur par defaut a ete ecrase (il n’existe plus)

SolutionGenerer un constructeur sans parametre

H & H: Research and Training 29 / 84

Page 53: Achref El Mouelhi - LIS lab · 2020. 7. 26. · Achref El Mouelhi Docteur de l’universite d’Aix-Marseille ... Saisir le nom du package et celui de la classe Pour la classe Main,

© Achref EL MOUELHI ©

Classe Constructeur

Java

Dans la classe Main, la ligne suivante est soulignee en rougePersonne personne = new Personne();

Explication

Le constructeur par defaut a ete ecrase (il n’existe plus)

SolutionGenerer un constructeur sans parametre

H & H: Research and Training 29 / 84

Page 54: Achref El Mouelhi - LIS lab · 2020. 7. 26. · Achref El Mouelhi Docteur de l’universite d’Aix-Marseille ... Saisir le nom du package et celui de la classe Pour la classe Main,

© Achref EL MOUELHI ©

Classe Constructeur

Mettons a jour la classe Main

package org.eclipse.test;

public class Main {

public static void main(String[] args) {Personne personne = new Personne();personne.setNum(1);personne.setNom("wick");personne.setPrenom("john");System.out.println(personne.getNum() + " " + personne.getNom()

+ " " + personne.getPrenom());Personne personne2 = new Personne(2, "bob", "mike");System.out.println(personne2);

}}

En executant, le resultat est :

1 wick johnPersonne [num=2, nom=bob, prenom=mike]

H & H: Research and Training 30 / 84

Page 55: Achref El Mouelhi - LIS lab · 2020. 7. 26. · Achref El Mouelhi Docteur de l’universite d’Aix-Marseille ... Saisir le nom du package et celui de la classe Pour la classe Main,

© Achref EL MOUELHI ©

Classe Constructeur

Mettons a jour la classe Main

package org.eclipse.test;

public class Main {

public static void main(String[] args) {Personne personne = new Personne();personne.setNum(1);personne.setNom("wick");personne.setPrenom("john");System.out.println(personne.getNum() + " " + personne.getNom()

+ " " + personne.getPrenom());Personne personne2 = new Personne(2, "bob", "mike");System.out.println(personne2);

}}

En executant, le resultat est :

1 wick johnPersonne [num=2, nom=bob, prenom=mike]

H & H: Research and Training 30 / 84

Page 56: Achref El Mouelhi - LIS lab · 2020. 7. 26. · Achref El Mouelhi Docteur de l’universite d’Aix-Marseille ... Saisir le nom du package et celui de la classe Pour la classe Main,

© Achref EL MOUELHI ©

Classe equals() et hashCode()

Java

En testant l’egalite entre les deux objets suivants

Personne personne2 = new Personne(2, "bob", "mike");Personne personne3 = new Personne(2, "bob", "mike");System.out.println(personne2.equals(personne3));

Le resultat est

false

H & H: Research and Training 31 / 84

Page 57: Achref El Mouelhi - LIS lab · 2020. 7. 26. · Achref El Mouelhi Docteur de l’universite d’Aix-Marseille ... Saisir le nom du package et celui de la classe Pour la classe Main,

© Achref EL MOUELHI ©

Classe equals() et hashCode()

Java

En testant l’egalite entre les deux objets suivants

Personne personne2 = new Personne(2, "bob", "mike");Personne personne3 = new Personne(2, "bob", "mike");System.out.println(personne2.equals(personne3));

Le resultat est

false

H & H: Research and Training 31 / 84

Page 58: Achref El Mouelhi - LIS lab · 2020. 7. 26. · Achref El Mouelhi Docteur de l’universite d’Aix-Marseille ... Saisir le nom du package et celui de la classe Pour la classe Main,

© Achref EL MOUELHI ©

Classe equals() et hashCode()

Java

Explication

Par defaut, deux objets d’une meme classe sont egaux s’ilspointent sur le meme espace memoire (identiques).

Pour comparer les valeurs, il faut redefinir les methodesequals() et hashCode().

equals() permet de definir comment tester semantiquementl’egalite de deux objets.

hashCode() permet de retourner la valeur de hachage d’un objet(elle ne retourne pas un identifiant unique).

Si une classe redefinit equals(), alors elle doit aussi redefinirhashCode().

equals() et hashCode() doivent utiliser les memes attributs.

H & H: Research and Training 32 / 84

Page 59: Achref El Mouelhi - LIS lab · 2020. 7. 26. · Achref El Mouelhi Docteur de l’universite d’Aix-Marseille ... Saisir le nom du package et celui de la classe Pour la classe Main,

© Achref EL MOUELHI ©

Classe equals() et hashCode()

Java

equals() et hashCode() doivent respecter les contraintes suivantes

Symetrie : si a.equals(b) retourne true alors b.equals(a) aussi.

Reflexivite : a.equals(a) retourne true si a est un objet non null.

Transitivite : si a.equals(b) et b.equals(c) alors a.equals(c).

Consistance : si a.equals(b) alors a.hashCode() == b.hashCode().

a.equals(null) retourne false.

H & H: Research and Training 33 / 84

Page 60: Achref El Mouelhi - LIS lab · 2020. 7. 26. · Achref El Mouelhi Docteur de l’universite d’Aix-Marseille ... Saisir le nom du package et celui de la classe Pour la classe Main,

© Achref EL MOUELHI ©

Classe equals() et hashCode()

Java

Code par defaut de equals() dans Object

public boolean equals(Object obj) {return (this == obj);

}

H & H: Research and Training 34 / 84

Page 61: Achref El Mouelhi - LIS lab · 2020. 7. 26. · Achref El Mouelhi Docteur de l’universite d’Aix-Marseille ... Saisir le nom du package et celui de la classe Pour la classe Main,

© Achref EL MOUELHI ©

Classe equals() et hashCode()

Java

Generation sous Eclipse

Faire clic droit sur la classe Personne,

Aller dans source > Generate hashCode() andequals(),

Selectionner les champs a utiliser puis valider.

H & H: Research and Training 35 / 84

Page 62: Achref El Mouelhi - LIS lab · 2020. 7. 26. · Achref El Mouelhi Docteur de l’universite d’Aix-Marseille ... Saisir le nom du package et celui de la classe Pour la classe Main,

© Achref EL MOUELHI ©

Classe equals() et hashCode()

Le code genere

@Overridepublic int hashCode() {

final int prime = 31;int result = 1;result = prime * result + ((nom == null) ? 0 : nom.hashCode());result = prime * result + num;result = prime * result + ((prenom == null) ? 0 : prenom.hashCode());return result;

}@Overridepublic boolean equals(Object obj) {

if (this == obj)return true;

if (obj == null)return false;

if (getClass() != obj.getClass())return false;

Personne other = (Personne) obj;if (nom == null) {

if (other.nom != null)return false;

} else if (!nom.equals(other.nom))return false;

if (num != other.num)return false;

if (prenom == null) {if (other.prenom != null)

return false;} else if (!prenom.equals(other.prenom))

return false;return true;

}

H & H: Research and Training 36 / 84

Page 63: Achref El Mouelhi - LIS lab · 2020. 7. 26. · Achref El Mouelhi Docteur de l’universite d’Aix-Marseille ... Saisir le nom du package et celui de la classe Pour la classe Main,

© Achref EL MOUELHI ©

Classe equals() et hashCode()

Java

En retestant le code precedent

Personne personne2 = new Personne(2, "bob", "mike");Personne personne3 = new Personne(2, "bob", "mike");System.out.println(personne2.equals(personne3));

Le resultat est

true

H & H: Research and Training 37 / 84

Page 64: Achref El Mouelhi - LIS lab · 2020. 7. 26. · Achref El Mouelhi Docteur de l’universite d’Aix-Marseille ... Saisir le nom du package et celui de la classe Pour la classe Main,

© Achref EL MOUELHI ©

Classe equals() et hashCode()

Java

En retestant le code precedent

Personne personne2 = new Personne(2, "bob", "mike");Personne personne3 = new Personne(2, "bob", "mike");System.out.println(personne2.equals(personne3));

Le resultat est

true

H & H: Research and Training 37 / 84

Page 65: Achref El Mouelhi - LIS lab · 2020. 7. 26. · Achref El Mouelhi Docteur de l’universite d’Aix-Marseille ... Saisir le nom du package et celui de la classe Pour la classe Main,

© Achref EL MOUELHI ©

Classe Attributs et methodes statiques

Java

Recapitulatif

Les instances d’une meme classe ont toutes les memes attributs maispas les memes valeurs.

Hypothese

Et si nous voudrions qu’un attribut ait une valeur partagee par toutesles instances (le nombre d’objets instancies de la classe Personne).

Definition

Un attribut dont la valeur est partagee par toutes les instances de laclasse est appelee : attribut statique ou attribut de classe.

H & H: Research and Training 38 / 84

Page 66: Achref El Mouelhi - LIS lab · 2020. 7. 26. · Achref El Mouelhi Docteur de l’universite d’Aix-Marseille ... Saisir le nom du package et celui de la classe Pour la classe Main,

© Achref EL MOUELHI ©

Classe Attributs et methodes statiques

Java

Recapitulatif

Les instances d’une meme classe ont toutes les memes attributs maispas les memes valeurs.

Hypothese

Et si nous voudrions qu’un attribut ait une valeur partagee par toutesles instances (le nombre d’objets instancies de la classe Personne).

Definition

Un attribut dont la valeur est partagee par toutes les instances de laclasse est appelee : attribut statique ou attribut de classe.

H & H: Research and Training 38 / 84

Page 67: Achref El Mouelhi - LIS lab · 2020. 7. 26. · Achref El Mouelhi Docteur de l’universite d’Aix-Marseille ... Saisir le nom du package et celui de la classe Pour la classe Main,

© Achref EL MOUELHI ©

Classe Attributs et methodes statiques

Java

Recapitulatif

Les instances d’une meme classe ont toutes les memes attributs maispas les memes valeurs.

Hypothese

Et si nous voudrions qu’un attribut ait une valeur partagee par toutesles instances (le nombre d’objets instancies de la classe Personne).

Definition

Un attribut dont la valeur est partagee par toutes les instances de laclasse est appelee : attribut statique ou attribut de classe.

H & H: Research and Training 38 / 84

Page 68: Achref El Mouelhi - LIS lab · 2020. 7. 26. · Achref El Mouelhi Docteur de l’universite d’Aix-Marseille ... Saisir le nom du package et celui de la classe Pour la classe Main,

© Achref EL MOUELHI ©

Classe Attributs et methodes statiques

Java

Exemple

Pour creer un attribut contenant le nombre des objets crees apartir de la classe Personne.

Cet attribut doit etre static, sinon chaque objet pourrait avoir sapropre valeur pour cet attribut.

H & H: Research and Training 39 / 84

Page 69: Achref El Mouelhi - LIS lab · 2020. 7. 26. · Achref El Mouelhi Docteur de l’universite d’Aix-Marseille ... Saisir le nom du package et celui de la classe Pour la classe Main,

© Achref EL MOUELHI ©

Classe Attributs et methodes statiques

JavaAjoutons un attribut statique nbrPersonnes a la liste d’attributs de laclasse Personne

private static int nbrPersonnes;

Incrementons notre compteur de personnes dans les constructeurs

public Personne() {super();nbrPersonnes++;

}public Personne(int num, String nom, String prenom) {

super();this.setNum(num);this.nom = nom;this.prenom = prenom;nbrPersonnes++;

}

H & H: Research and Training 40 / 84

Page 70: Achref El Mouelhi - LIS lab · 2020. 7. 26. · Achref El Mouelhi Docteur de l’universite d’Aix-Marseille ... Saisir le nom du package et celui de la classe Pour la classe Main,

© Achref EL MOUELHI ©

Classe Attributs et methodes statiques

JavaAjoutons un attribut statique nbrPersonnes a la liste d’attributs de laclasse Personne

private static int nbrPersonnes;

Incrementons notre compteur de personnes dans les constructeurs

public Personne() {super();nbrPersonnes++;

}public Personne(int num, String nom, String prenom) {

super();this.setNum(num);this.nom = nom;this.prenom = prenom;nbrPersonnes++;

}

H & H: Research and Training 40 / 84

Page 71: Achref El Mouelhi - LIS lab · 2020. 7. 26. · Achref El Mouelhi Docteur de l’universite d’Aix-Marseille ... Saisir le nom du package et celui de la classe Pour la classe Main,

© Achref EL MOUELHI ©

Classe Attributs et methodes statiques

JavaGenerons un getter pour l’attribut static nbrPersonnes

public static int getNbrPersonnes() {return nbrPersonnes;

}

Testons cela dans la classe Main

Personne personne = new Personne();personne.setNum(1);personne.setNom("wick");personne.setPrenom("john");System.out.println(personne.getNum() + " " +personne.getNom() + " " +

personne.getPrenom());System.out.println(Personne.getNbrPersonnes());Personne personne2 = new Personne(2, "bob", "mike");System.out.println(personne2);System.out.println(Personne.getNbrPersonnes());

Le resultat est

1 wick john1Personne [num=2, nom=bob, prenom=mike]2

H & H: Research and Training 41 / 84

Page 72: Achref El Mouelhi - LIS lab · 2020. 7. 26. · Achref El Mouelhi Docteur de l’universite d’Aix-Marseille ... Saisir le nom du package et celui de la classe Pour la classe Main,

© Achref EL MOUELHI ©

Classe Attributs et methodes statiques

JavaGenerons un getter pour l’attribut static nbrPersonnes

public static int getNbrPersonnes() {return nbrPersonnes;

}

Testons cela dans la classe Main

Personne personne = new Personne();personne.setNum(1);personne.setNom("wick");personne.setPrenom("john");System.out.println(personne.getNum() + " " +personne.getNom() + " " +

personne.getPrenom());System.out.println(Personne.getNbrPersonnes());Personne personne2 = new Personne(2, "bob", "mike");System.out.println(personne2);System.out.println(Personne.getNbrPersonnes());

Le resultat est

1 wick john1Personne [num=2, nom=bob, prenom=mike]2

H & H: Research and Training 41 / 84

Page 73: Achref El Mouelhi - LIS lab · 2020. 7. 26. · Achref El Mouelhi Docteur de l’universite d’Aix-Marseille ... Saisir le nom du package et celui de la classe Pour la classe Main,

© Achref EL MOUELHI ©

Classe Attributs et methodes statiques

JavaGenerons un getter pour l’attribut static nbrPersonnes

public static int getNbrPersonnes() {return nbrPersonnes;

}

Testons cela dans la classe Main

Personne personne = new Personne();personne.setNum(1);personne.setNom("wick");personne.setPrenom("john");System.out.println(personne.getNum() + " " +personne.getNom() + " " +

personne.getPrenom());System.out.println(Personne.getNbrPersonnes());Personne personne2 = new Personne(2, "bob", "mike");System.out.println(personne2);System.out.println(Personne.getNbrPersonnes());

Le resultat est

1 wick john1Personne [num=2, nom=bob, prenom=mike]2

H & H: Research and Training 41 / 84

Page 74: Achref El Mouelhi - LIS lab · 2020. 7. 26. · Achref El Mouelhi Docteur de l’universite d’Aix-Marseille ... Saisir le nom du package et celui de la classe Pour la classe Main,

© Achref EL MOUELHI ©

Classe Attributs et methodes statiques

Java

Exercice

Definir une classe Adresse avec trois attributs prives (rue,codePostal et ville de type chaıne de caractere

Definir un constructeur avec trois parametres, les getters, lessetters et la methode toString()

Dans la classe Personne, ajouter un attribut adresse de typeAdresse et definir un nouveau constructeur a quatre parametreset le getter et le setter de ce nouvel attribut

Dans la classe Main, creer deux objets, un objet de typeAdresse et un de type Personne et lui attribuer l’adresse creeeprecedemment

Afficher tous les attributs de cet objet de la classe Personne

H & H: Research and Training 42 / 84

Page 75: Achref El Mouelhi - LIS lab · 2020. 7. 26. · Achref El Mouelhi Docteur de l’universite d’Aix-Marseille ... Saisir le nom du package et celui de la classe Pour la classe Main,

© Achref EL MOUELHI ©

Associations particulieres entre classes Heritage

Java

L’heritage, quand ?

Lorsque deux ou plusieurs classes partagent plusieurs attributs(et methodes)

Lorsqu’une Classe1 est une sorte de Classe2

H & H: Research and Training 43 / 84

Page 76: Achref El Mouelhi - LIS lab · 2020. 7. 26. · Achref El Mouelhi Docteur de l’universite d’Aix-Marseille ... Saisir le nom du package et celui de la classe Pour la classe Main,

© Achref EL MOUELHI ©

Associations particulieres entre classes Heritage

Java

Exemple

Un enseignant a un numero, un nom, un prenom et un salaire

Un etudiant a aussi un numero, un nom, un prenom et et unniveau

Semantiquement, enseignant et etudiant sont une sorte depersonne

En plus, les deux partagent plusieurs attributs tels que numero,nom et prenom

Donc, on peut mettre en commun les attributs numero, nom etprenom dans une classe Personne

Les classes Etudiant et Enseignant heriteront (extends) dela classe Personne

H & H: Research and Training 44 / 84

Page 77: Achref El Mouelhi - LIS lab · 2020. 7. 26. · Achref El Mouelhi Docteur de l’universite d’Aix-Marseille ... Saisir le nom du package et celui de la classe Pour la classe Main,

© Achref EL MOUELHI ©

Associations particulieres entre classes Heritage

Java

Exemple

Un enseignant a un numero, un nom, un prenom et un salaire

Un etudiant a aussi un numero, un nom, un prenom et et unniveau

Semantiquement, enseignant et etudiant sont une sorte depersonne

En plus, les deux partagent plusieurs attributs tels que numero,nom et prenom

Donc, on peut mettre en commun les attributs numero, nom etprenom dans une classe Personne

Les classes Etudiant et Enseignant heriteront (extends) dela classe Personne

H & H: Research and Training 44 / 84

Page 78: Achref El Mouelhi - LIS lab · 2020. 7. 26. · Achref El Mouelhi Docteur de l’universite d’Aix-Marseille ... Saisir le nom du package et celui de la classe Pour la classe Main,

© Achref EL MOUELHI ©

Associations particulieres entre classes Heritage

Java

Exemple

Un enseignant a un numero, un nom, un prenom et un salaire

Un etudiant a aussi un numero, un nom, un prenom et et unniveau

Semantiquement, enseignant et etudiant sont une sorte depersonne

En plus, les deux partagent plusieurs attributs tels que numero,nom et prenom

Donc, on peut mettre en commun les attributs numero, nom etprenom dans une classe Personne

Les classes Etudiant et Enseignant heriteront (extends) dela classe Personne

H & H: Research and Training 44 / 84

Page 79: Achref El Mouelhi - LIS lab · 2020. 7. 26. · Achref El Mouelhi Docteur de l’universite d’Aix-Marseille ... Saisir le nom du package et celui de la classe Pour la classe Main,

© Achref EL MOUELHI ©

Associations particulieres entre classes Heritage

Java

Exemple

Un enseignant a un numero, un nom, un prenom et un salaire

Un etudiant a aussi un numero, un nom, un prenom et et unniveau

Semantiquement, enseignant et etudiant sont une sorte depersonne

En plus, les deux partagent plusieurs attributs tels que numero,nom et prenom

Donc, on peut mettre en commun les attributs numero, nom etprenom dans une classe Personne

Les classes Etudiant et Enseignant heriteront (extends) dela classe Personne

H & H: Research and Training 44 / 84

Page 80: Achref El Mouelhi - LIS lab · 2020. 7. 26. · Achref El Mouelhi Docteur de l’universite d’Aix-Marseille ... Saisir le nom du package et celui de la classe Pour la classe Main,

© Achref EL MOUELHI ©

Associations particulieres entre classes Heritage

Java

Exemple

Un enseignant a un numero, un nom, un prenom et un salaire

Un etudiant a aussi un numero, un nom, un prenom et et unniveau

Semantiquement, enseignant et etudiant sont une sorte depersonne

En plus, les deux partagent plusieurs attributs tels que numero,nom et prenom

Donc, on peut mettre en commun les attributs numero, nom etprenom dans une classe Personne

Les classes Etudiant et Enseignant heriteront (extends) dela classe Personne

H & H: Research and Training 44 / 84

Page 81: Achref El Mouelhi - LIS lab · 2020. 7. 26. · Achref El Mouelhi Docteur de l’universite d’Aix-Marseille ... Saisir le nom du package et celui de la classe Pour la classe Main,

© Achref EL MOUELHI ©

Associations particulieres entre classes Heritage

Java

Exemple

Un enseignant a un numero, un nom, un prenom et un salaire

Un etudiant a aussi un numero, un nom, un prenom et et unniveau

Semantiquement, enseignant et etudiant sont une sorte depersonne

En plus, les deux partagent plusieurs attributs tels que numero,nom et prenom

Donc, on peut mettre en commun les attributs numero, nom etprenom dans une classe Personne

Les classes Etudiant et Enseignant heriteront (extends) dela classe Personne

H & H: Research and Training 44 / 84

Page 82: Achref El Mouelhi - LIS lab · 2020. 7. 26. · Achref El Mouelhi Docteur de l’universite d’Aix-Marseille ... Saisir le nom du package et celui de la classe Pour la classe Main,

© Achref EL MOUELHI ©

Associations particulieres entre classes Heritage

Java

Particularite du Java

L’heritage multiple n’est pas permis par le langage Java

C’est-a-dire, une classe ne peut heriter de plusieurs classesdifferentes

H & H: Research and Training 45 / 84

Page 83: Achref El Mouelhi - LIS lab · 2020. 7. 26. · Achref El Mouelhi Docteur de l’universite d’Aix-Marseille ... Saisir le nom du package et celui de la classe Pour la classe Main,

© Achref EL MOUELHI ©

Associations particulieres entre classes Heritage

Java

Creons les classes Etudiant et Enseignant

Aller dans File > New > Class

Choisir le package org.eclipse.model

Saisir le nom de la classe

Dans la section Superclass, cliquer sur Browse et chercherpuis selectionner Personne

Cliquer sur Ok et enfin Finish

Refaire la meme chose pour la seconde classe

H & H: Research and Training 46 / 84

Page 84: Achref El Mouelhi - LIS lab · 2020. 7. 26. · Achref El Mouelhi Docteur de l’universite d’Aix-Marseille ... Saisir le nom du package et celui de la classe Pour la classe Main,

© Achref EL MOUELHI ©

Associations particulieres entre classes Heritage

JavaContenu de la classe Enseignant

package org.eclipse.model;

public class Enseignant extends Personne {

}

Contenu de la classe Etudiant

package org.eclipse.model;

public class Etudiant extends Personne {

}

extends est le mot-cle a utiliser pour definir une relation d’heritageentre deux classes

H & H: Research and Training 47 / 84

Page 85: Achref El Mouelhi - LIS lab · 2020. 7. 26. · Achref El Mouelhi Docteur de l’universite d’Aix-Marseille ... Saisir le nom du package et celui de la classe Pour la classe Main,

© Achref EL MOUELHI ©

Associations particulieres entre classes Heritage

JavaContenu de la classe Enseignant

package org.eclipse.model;

public class Enseignant extends Personne {

}

Contenu de la classe Etudiant

package org.eclipse.model;

public class Etudiant extends Personne {

}

extends est le mot-cle a utiliser pour definir une relation d’heritageentre deux classes

H & H: Research and Training 47 / 84

Page 86: Achref El Mouelhi - LIS lab · 2020. 7. 26. · Achref El Mouelhi Docteur de l’universite d’Aix-Marseille ... Saisir le nom du package et celui de la classe Pour la classe Main,

© Achref EL MOUELHI ©

Associations particulieres entre classes Heritage

Java

Ensuite

Creer un attribut niveau dans la classe Etudiant puis genererles getter et setter

Creer un attribut salaire dans la classe Enseignant puisgenerer les getter et setter

H & H: Research and Training 48 / 84

Page 87: Achref El Mouelhi - LIS lab · 2020. 7. 26. · Achref El Mouelhi Docteur de l’universite d’Aix-Marseille ... Saisir le nom du package et celui de la classe Pour la classe Main,

© Achref EL MOUELHI ©

Associations particulieres entre classes Heritage

Java

Pour creer un objet de type Enseignant

Enseignant enseignant = new Enseignant();enseignant.setNum(3);enseignant.setNom("green");enseignant.setPrenom("jonas");enseignant.setSalaire(1700);System.out.println(enseignant);

En executant, le resultat est :

Personne [num=3, nom=green, prenom=jonas]

Mais on ne voit pas le salaire, pourquoi?

car on a pas redefini la methode toString(), on a utilise celle de laclasse mere

H & H: Research and Training 49 / 84

Page 88: Achref El Mouelhi - LIS lab · 2020. 7. 26. · Achref El Mouelhi Docteur de l’universite d’Aix-Marseille ... Saisir le nom du package et celui de la classe Pour la classe Main,

© Achref EL MOUELHI ©

Associations particulieres entre classes Heritage

Java

Pour creer un objet de type Enseignant

Enseignant enseignant = new Enseignant();enseignant.setNum(3);enseignant.setNom("green");enseignant.setPrenom("jonas");enseignant.setSalaire(1700);System.out.println(enseignant);

En executant, le resultat est :

Personne [num=3, nom=green, prenom=jonas]

Mais on ne voit pas le salaire, pourquoi?

car on a pas redefini la methode toString(), on a utilise celle de laclasse mere

H & H: Research and Training 49 / 84

Page 89: Achref El Mouelhi - LIS lab · 2020. 7. 26. · Achref El Mouelhi Docteur de l’universite d’Aix-Marseille ... Saisir le nom du package et celui de la classe Pour la classe Main,

© Achref EL MOUELHI ©

Associations particulieres entre classes Heritage

Java

Pour creer un objet de type Enseignant

Enseignant enseignant = new Enseignant();enseignant.setNum(3);enseignant.setNom("green");enseignant.setPrenom("jonas");enseignant.setSalaire(1700);System.out.println(enseignant);

En executant, le resultat est :

Personne [num=3, nom=green, prenom=jonas]

Mais on ne voit pas le salaire, pourquoi?

car on a pas redefini la methode toString(), on a utilise celle de laclasse mere

H & H: Research and Training 49 / 84

Page 90: Achref El Mouelhi - LIS lab · 2020. 7. 26. · Achref El Mouelhi Docteur de l’universite d’Aix-Marseille ... Saisir le nom du package et celui de la classe Pour la classe Main,

© Achref EL MOUELHI ©

Associations particulieres entre classes Heritage

JavaEt si on genere le toString() dans la classe Enseignant

@Overridepublic String toString() {

return "Enseignant [salaire=" + salaire + "]";}

Pour appeler le toString() de la classe mere a partir de classefille (Enseignant)

@Overridepublic String toString() {

return super.toString() + " Enseignant [salaire=" + salaire + "]";

}

Le mot-cle super permet d’appeler une methode de la classe mere

H & H: Research and Training 50 / 84

Page 91: Achref El Mouelhi - LIS lab · 2020. 7. 26. · Achref El Mouelhi Docteur de l’universite d’Aix-Marseille ... Saisir le nom du package et celui de la classe Pour la classe Main,

© Achref EL MOUELHI ©

Associations particulieres entre classes Heritage

JavaEt si on genere le toString() dans la classe Enseignant

@Overridepublic String toString() {

return "Enseignant [salaire=" + salaire + "]";}

Pour appeler le toString() de la classe mere a partir de classefille (Enseignant)

@Overridepublic String toString() {

return super.toString() + " Enseignant [salaire=" + salaire + "]";

}

Le mot-cle super permet d’appeler une methode de la classe mereH & H: Research and Training 50 / 84

Page 92: Achref El Mouelhi - LIS lab · 2020. 7. 26. · Achref El Mouelhi Docteur de l’universite d’Aix-Marseille ... Saisir le nom du package et celui de la classe Pour la classe Main,

© Achref EL MOUELHI ©

Associations particulieres entre classes Heritage

JavaComment generer un constructeur a plusieurs parametres et utiliser celui de la classe mere

Faire clic droit sur la classe Enseignant

Aller dans Source > Generate Constructor using Fields...

Dans Select super constructor to invoke, selectionner le constructeur a troisparametres

Dans Select fields to initialize, verifier que la case salaire est selectionneeet valider

Le constructeur genere

public Enseignant(int num, String nom, String prenom, int salaire) {super(num, nom, prenom);this.salaire = salaire;

}

Maintenant, on peut creer un enseignant ainsi

Enseignant enseignant = new Enseignant(3, "green", "jonas", 1700);

H & H: Research and Training 51 / 84

Page 93: Achref El Mouelhi - LIS lab · 2020. 7. 26. · Achref El Mouelhi Docteur de l’universite d’Aix-Marseille ... Saisir le nom du package et celui de la classe Pour la classe Main,

© Achref EL MOUELHI ©

Associations particulieres entre classes Heritage

JavaComment generer un constructeur a plusieurs parametres et utiliser celui de la classe mere

Faire clic droit sur la classe Enseignant

Aller dans Source > Generate Constructor using Fields...

Dans Select super constructor to invoke, selectionner le constructeur a troisparametres

Dans Select fields to initialize, verifier que la case salaire est selectionneeet valider

Le constructeur genere

public Enseignant(int num, String nom, String prenom, int salaire) {super(num, nom, prenom);this.salaire = salaire;

}

Maintenant, on peut creer un enseignant ainsi

Enseignant enseignant = new Enseignant(3, "green", "jonas", 1700);

H & H: Research and Training 51 / 84

Page 94: Achref El Mouelhi - LIS lab · 2020. 7. 26. · Achref El Mouelhi Docteur de l’universite d’Aix-Marseille ... Saisir le nom du package et celui de la classe Pour la classe Main,

© Achref EL MOUELHI ©

Associations particulieres entre classes Heritage

JavaComment generer un constructeur a plusieurs parametres et utiliser celui de la classe mere

Faire clic droit sur la classe Enseignant

Aller dans Source > Generate Constructor using Fields...

Dans Select super constructor to invoke, selectionner le constructeur a troisparametres

Dans Select fields to initialize, verifier que la case salaire est selectionneeet valider

Le constructeur genere

public Enseignant(int num, String nom, String prenom, int salaire) {super(num, nom, prenom);this.salaire = salaire;

}

Maintenant, on peut creer un enseignant ainsi

Enseignant enseignant = new Enseignant(3, "green", "jonas", 1700);

H & H: Research and Training 51 / 84

Page 95: Achref El Mouelhi - LIS lab · 2020. 7. 26. · Achref El Mouelhi Docteur de l’universite d’Aix-Marseille ... Saisir le nom du package et celui de la classe Pour la classe Main,

© Achref EL MOUELHI ©

Associations particulieres entre classes Heritage

Java

A partir de la classe Enseignant

On ne peut avoir acces direct a un attribut de la classe mere

C’est-a-dire, on ne peut faire this.num car les attributs ont unevisibilite private

Pour modifier la valeur d’un attribut prive de la classe mere, il faut

soit utiliser les getters/setters

soit mettre la visibilite des attributs de la classe mere a protected

H & H: Research and Training 52 / 84

Page 96: Achref El Mouelhi - LIS lab · 2020. 7. 26. · Achref El Mouelhi Docteur de l’universite d’Aix-Marseille ... Saisir le nom du package et celui de la classe Pour la classe Main,

© Achref EL MOUELHI ©

Associations particulieres entre classes Heritage

Java

On peut creer un objet de la classe Personne ainsi

Enseignant enseignant = new Enseignant(3, "green", "jonas", 1700);

Ou ainsi

Personne enseignant = new Enseignant(3, "green", "jonas", 1700);

Ceci est faux

Enseignant enseignant = new Personne(3, "green", "jonas");

H & H: Research and Training 53 / 84

Page 97: Achref El Mouelhi - LIS lab · 2020. 7. 26. · Achref El Mouelhi Docteur de l’universite d’Aix-Marseille ... Saisir le nom du package et celui de la classe Pour la classe Main,

© Achref EL MOUELHI ©

Associations particulieres entre classes Heritage

Java

On peut creer un objet de la classe Personne ainsi

Enseignant enseignant = new Enseignant(3, "green", "jonas", 1700);

Ou ainsi

Personne enseignant = new Enseignant(3, "green", "jonas", 1700);

Ceci est faux

Enseignant enseignant = new Personne(3, "green", "jonas");

H & H: Research and Training 53 / 84

Page 98: Achref El Mouelhi - LIS lab · 2020. 7. 26. · Achref El Mouelhi Docteur de l’universite d’Aix-Marseille ... Saisir le nom du package et celui de la classe Pour la classe Main,

© Achref EL MOUELHI ©

Associations particulieres entre classes Heritage

Java

On peut creer un objet de la classe Personne ainsi

Enseignant enseignant = new Enseignant(3, "green", "jonas", 1700);

Ou ainsi

Personne enseignant = new Enseignant(3, "green", "jonas", 1700);

Ceci est faux

Enseignant enseignant = new Personne(3, "green", "jonas");

H & H: Research and Training 53 / 84

Page 99: Achref El Mouelhi - LIS lab · 2020. 7. 26. · Achref El Mouelhi Docteur de l’universite d’Aix-Marseille ... Saisir le nom du package et celui de la classe Pour la classe Main,

© Achref EL MOUELHI ©

Associations particulieres entre classes Heritage

JavaRemarque

1 Pour connaıtre la classe d’un objet, on peut utiliser le mot-cleinstanceof

Exemple

Personne enseignant = new Enseignant(3, "green", "jonas", 1700);

System.out.println(enseignant instanceof Enseignant);

// affiche trueSystem.out.println(enseignant instanceof Personne);// affiche trueSystem.out.println(personne instanceof Enseignant);// affiche false

H & H: Research and Training 54 / 84

Page 100: Achref El Mouelhi - LIS lab · 2020. 7. 26. · Achref El Mouelhi Docteur de l’universite d’Aix-Marseille ... Saisir le nom du package et celui de la classe Pour la classe Main,

© Achref EL MOUELHI ©

Associations particulieres entre classes Heritage

JavaRemarque

1 Pour connaıtre la classe d’un objet, on peut utiliser le mot-cleinstanceof

Exemple

Personne enseignant = new Enseignant(3, "green", "jonas", 1700);

System.out.println(enseignant instanceof Enseignant);

// affiche trueSystem.out.println(enseignant instanceof Personne);// affiche trueSystem.out.println(personne instanceof Enseignant);// affiche false

H & H: Research and Training 54 / 84

Page 101: Achref El Mouelhi - LIS lab · 2020. 7. 26. · Achref El Mouelhi Docteur de l’universite d’Aix-Marseille ... Saisir le nom du package et celui de la classe Pour la classe Main,

© Achref EL MOUELHI ©

Associations particulieres entre classes Heritage

Java

Exercice

1 Creer deux objets de type Etudiant et deux objets de typeEnseignant et stocker les tous dans un seul tableau.

2 Parcourir le tableau et afficher pour chacun soit le salaire soit leniveau

Pour parcourir un tableau, on peut utiliser le raccourci de for

Personne personnes [] = { personne, personne2,enseignant };

for(Personne perso : personnes) {System.out.println(perso);

}

H & H: Research and Training 55 / 84

Page 102: Achref El Mouelhi - LIS lab · 2020. 7. 26. · Achref El Mouelhi Docteur de l’universite d’Aix-Marseille ... Saisir le nom du package et celui de la classe Pour la classe Main,

© Achref EL MOUELHI ©

Associations particulieres entre classes Heritage

Java

Exercice

1 Creer deux objets de type Etudiant et deux objets de typeEnseignant et stocker les tous dans un seul tableau.

2 Parcourir le tableau et afficher pour chacun soit le salaire soit leniveau

Pour parcourir un tableau, on peut utiliser le raccourci de for

Personne personnes [] = { personne, personne2,enseignant };

for(Personne perso : personnes) {System.out.println(perso);

}

H & H: Research and Training 55 / 84

Page 103: Achref El Mouelhi - LIS lab · 2020. 7. 26. · Achref El Mouelhi Docteur de l’universite d’Aix-Marseille ... Saisir le nom du package et celui de la classe Pour la classe Main,

© Achref EL MOUELHI ©

Associations particulieres entre classes Agregation et composition

Java

L’agregation

C’est une association non-symetrique

Elle represente une relation de type ensemble/element

La composition

C’est une agregation forte

L’element n’existe pas sans l’agregat (l’element est detruit lorsquel’agregat n’existe plus)

H & H: Research and Training 56 / 84

Page 104: Achref El Mouelhi - LIS lab · 2020. 7. 26. · Achref El Mouelhi Docteur de l’universite d’Aix-Marseille ... Saisir le nom du package et celui de la classe Pour la classe Main,

© Achref EL MOUELHI ©

Associations particulieres entre classes Agregation et composition

Java

L’agregation

C’est une association non-symetrique

Elle represente une relation de type ensemble/element

La composition

C’est une agregation forte

L’element n’existe pas sans l’agregat (l’element est detruit lorsquel’agregat n’existe plus)

H & H: Research and Training 56 / 84

Page 105: Achref El Mouelhi - LIS lab · 2020. 7. 26. · Achref El Mouelhi Docteur de l’universite d’Aix-Marseille ... Saisir le nom du package et celui de la classe Pour la classe Main,

© Achref EL MOUELHI ©

Associations particulieres entre classes Agregation et composition

Java

Comment coder des relations d’agregation et de composition en Java?

Vehicule

numImmatmarque

modele

Moteur

num

poids

Chssis

id

matiere

H & H: Research and Training 57 / 84

Page 106: Achref El Mouelhi - LIS lab · 2020. 7. 26. · Achref El Mouelhi Docteur de l’universite d’Aix-Marseille ... Saisir le nom du package et celui de la classe Pour la classe Main,

© Achref EL MOUELHI ©

Associations particulieres entre classes Agregation et composition

JavaLa classe Chassis

public class Chassis {private int id;private String matiere;public int getId() {

return id;}public void setId(int id) {

this.id = id;}public String getMatiere() {

return matiere;}public void setMatiere(String matiere) {

this.matiere = matiere;}

}

H & H: Research and Training 58 / 84

Page 107: Achref El Mouelhi - LIS lab · 2020. 7. 26. · Achref El Mouelhi Docteur de l’universite d’Aix-Marseille ... Saisir le nom du package et celui de la classe Pour la classe Main,

© Achref EL MOUELHI ©

Associations particulieres entre classes Agregation et composition

JavaLa classe Moteur

public class Moteur {private int num;private float poids;public int getNum() {

return num;}public void setNum(int num) {

this.num = num;}public float getPoids() {

return poids;}public void setPoids(float poids) {

this.poids = poids;}

}

H & H: Research and Training 59 / 84

Page 108: Achref El Mouelhi - LIS lab · 2020. 7. 26. · Achref El Mouelhi Docteur de l’universite d’Aix-Marseille ... Saisir le nom du package et celui de la classe Pour la classe Main,

© Achref EL MOUELHI ©

Associations particulieres entre classes Agregation et composition

La classe Vehicule

public class Vehivule {private Moteur moteur;private final Chassis chassis;public Vehivule(Chassis chassis) {

this.chassis = chassis;}public Moteur getMoteur() {

return moteur;}public void setMoteur(Moteur moteur) {

this.moteur = moteur;}

}

Explication

un composant est declare final et instanciable une seule fois au moment del’instanciation de l’objet composite

un composant n’a ni getter ni setter

lorsque le vehicule est detruit, le chassis le sera aussi

H & H: Research and Training 60 / 84

Page 109: Achref El Mouelhi - LIS lab · 2020. 7. 26. · Achref El Mouelhi Docteur de l’universite d’Aix-Marseille ... Saisir le nom du package et celui de la classe Pour la classe Main,

© Achref EL MOUELHI ©

Associations particulieres entre classes Agregation et composition

La classe Vehicule

public class Vehivule {private Moteur moteur;private final Chassis chassis;public Vehivule(Chassis chassis) {

this.chassis = chassis;}public Moteur getMoteur() {

return moteur;}public void setMoteur(Moteur moteur) {

this.moteur = moteur;}

}

Explication

un composant est declare final et instanciable une seule fois au moment del’instanciation de l’objet composite

un composant n’a ni getter ni setter

lorsque le vehicule est detruit, le chassis le sera aussi

H & H: Research and Training 60 / 84

Page 110: Achref El Mouelhi - LIS lab · 2020. 7. 26. · Achref El Mouelhi Docteur de l’universite d’Aix-Marseille ... Saisir le nom du package et celui de la classe Pour la classe Main,

© Achref EL MOUELHI ©

Associations particulieres entre classes Agregation et composition

Java

Pour tester

public class Main {public static void main(String[] args) {Chassis chassis = new Chassis();chassis.setId(100);chassis.setMatiere("fer");Vehivule vehivule = new Vehivule(chassis);Moteur moteur = new Moteur();moteur.setNum(100);moteur.setPoids(500f);vehivule.setMoteur(moteur);// pas de methode permettant de modifier le cha

ssis d’un vehicule}

}

H & H: Research and Training 61 / 84

Page 111: Achref El Mouelhi - LIS lab · 2020. 7. 26. · Achref El Mouelhi Docteur de l’universite d’Aix-Marseille ... Saisir le nom du package et celui de la classe Pour la classe Main,

© Achref EL MOUELHI ©

Classe et methode abstraites

JavaClasse abstraite

C’est une classe qu’on ne peut instancier

Les constructeurs peuvent donc etre supprimes

Si on declare la classe Personne abstraite

public abstract class Personne {...

}

Tout ce code sera souligne en rouge

Personne personne = new Personne();...Personne personne2 = new Personne(2, "bob", "mike");

H & H: Research and Training 62 / 84

Page 112: Achref El Mouelhi - LIS lab · 2020. 7. 26. · Achref El Mouelhi Docteur de l’universite d’Aix-Marseille ... Saisir le nom du package et celui de la classe Pour la classe Main,

© Achref EL MOUELHI ©

Classe et methode abstraites

JavaClasse abstraite

C’est une classe qu’on ne peut instancier

Les constructeurs peuvent donc etre supprimes

Si on declare la classe Personne abstraite

public abstract class Personne {...

}

Tout ce code sera souligne en rouge

Personne personne = new Personne();...Personne personne2 = new Personne(2, "bob", "mike");

H & H: Research and Training 62 / 84

Page 113: Achref El Mouelhi - LIS lab · 2020. 7. 26. · Achref El Mouelhi Docteur de l’universite d’Aix-Marseille ... Saisir le nom du package et celui de la classe Pour la classe Main,

© Achref EL MOUELHI ©

Classe et methode abstraites

JavaClasse abstraite

C’est une classe qu’on ne peut instancier

Les constructeurs peuvent donc etre supprimes

Si on declare la classe Personne abstraite

public abstract class Personne {...

}

Tout ce code sera souligne en rouge

Personne personne = new Personne();...Personne personne2 = new Personne(2, "bob", "mike");

H & H: Research and Training 62 / 84

Page 114: Achref El Mouelhi - LIS lab · 2020. 7. 26. · Achref El Mouelhi Docteur de l’universite d’Aix-Marseille ... Saisir le nom du package et celui de la classe Pour la classe Main,

© Achref EL MOUELHI ©

Classe et methode abstraites

JavaMethode abstraite

C’est une methode non implementee (sans code)

Une methode abstraite doit etre declaree dans une classeabstraite

Une methode abstraite doit etre implementee par les classes fillesde la classe abstraite

Declarons une methode abstraite afficherDetails() dansPersonne

public abstract void afficherDetails();

Suite a la declaration de afficherDetails() dans Personne, lesdeux classes Etudiant et Enseignant sont signalees en rouge

H & H: Research and Training 63 / 84

Page 115: Achref El Mouelhi - LIS lab · 2020. 7. 26. · Achref El Mouelhi Docteur de l’universite d’Aix-Marseille ... Saisir le nom du package et celui de la classe Pour la classe Main,

© Achref EL MOUELHI ©

Classe et methode abstraites

JavaMethode abstraite

C’est une methode non implementee (sans code)

Une methode abstraite doit etre declaree dans une classeabstraite

Une methode abstraite doit etre implementee par les classes fillesde la classe abstraite

Declarons une methode abstraite afficherDetails() dansPersonne

public abstract void afficherDetails();

Suite a la declaration de afficherDetails() dans Personne, lesdeux classes Etudiant et Enseignant sont signalees en rouge

H & H: Research and Training 63 / 84

Page 116: Achref El Mouelhi - LIS lab · 2020. 7. 26. · Achref El Mouelhi Docteur de l’universite d’Aix-Marseille ... Saisir le nom du package et celui de la classe Pour la classe Main,

© Achref EL MOUELHI ©

Classe et methode abstraites

JavaMethode abstraite

C’est une methode non implementee (sans code)

Une methode abstraite doit etre declaree dans une classeabstraite

Une methode abstraite doit etre implementee par les classes fillesde la classe abstraite

Declarons une methode abstraite afficherDetails() dansPersonne

public abstract void afficherDetails();

Suite a la declaration de afficherDetails() dans Personne, lesdeux classes Etudiant et Enseignant sont signalees en rouge

H & H: Research and Training 63 / 84

Page 117: Achref El Mouelhi - LIS lab · 2020. 7. 26. · Achref El Mouelhi Docteur de l’universite d’Aix-Marseille ... Saisir le nom du package et celui de la classe Pour la classe Main,

© Achref EL MOUELHI ©

Classe et methode abstraites

Pour implementer la methode abstraite

Placer le curseur sur le nom de la classe

Dans le menu afficher, choisir Add unimplemented methods

Le code genere

@Overridepublic void afficherDetails() {

// TODO Auto-generated method stub}

Dans Enseignant

@Overridepublic void afficherDetails() {

System.out.println(getPrenom() + " " + getNom() + " " + salaire);}

Dans Etudiant

@Overridepublic void afficherDetails() {

System.out.println(getPrenom() + " " + getNom() + " " + niveau);}

H & H: Research and Training 64 / 84

Page 118: Achref El Mouelhi - LIS lab · 2020. 7. 26. · Achref El Mouelhi Docteur de l’universite d’Aix-Marseille ... Saisir le nom du package et celui de la classe Pour la classe Main,

© Achref EL MOUELHI ©

Classe et methode abstraites

Pour implementer la methode abstraite

Placer le curseur sur le nom de la classe

Dans le menu afficher, choisir Add unimplemented methods

Le code genere

@Overridepublic void afficherDetails() {

// TODO Auto-generated method stub}

Dans Enseignant

@Overridepublic void afficherDetails() {

System.out.println(getPrenom() + " " + getNom() + " " + salaire);}

Dans Etudiant

@Overridepublic void afficherDetails() {

System.out.println(getPrenom() + " " + getNom() + " " + niveau);}

H & H: Research and Training 64 / 84

Page 119: Achref El Mouelhi - LIS lab · 2020. 7. 26. · Achref El Mouelhi Docteur de l’universite d’Aix-Marseille ... Saisir le nom du package et celui de la classe Pour la classe Main,

© Achref EL MOUELHI ©

Classe et methode abstraites

Pour implementer la methode abstraite

Placer le curseur sur le nom de la classe

Dans le menu afficher, choisir Add unimplemented methods

Le code genere

@Overridepublic void afficherDetails() {

// TODO Auto-generated method stub}

Dans Enseignant

@Overridepublic void afficherDetails() {

System.out.println(getPrenom() + " " + getNom() + " " + salaire);}

Dans Etudiant

@Overridepublic void afficherDetails() {

System.out.println(getPrenom() + " " + getNom() + " " + niveau);}

H & H: Research and Training 64 / 84

Page 120: Achref El Mouelhi - LIS lab · 2020. 7. 26. · Achref El Mouelhi Docteur de l’universite d’Aix-Marseille ... Saisir le nom du package et celui de la classe Pour la classe Main,

© Achref EL MOUELHI ©

Classe et methode abstraites

Pour implementer la methode abstraite

Placer le curseur sur le nom de la classe

Dans le menu afficher, choisir Add unimplemented methods

Le code genere

@Overridepublic void afficherDetails() {

// TODO Auto-generated method stub}

Dans Enseignant

@Overridepublic void afficherDetails() {

System.out.println(getPrenom() + " " + getNom() + " " + salaire);}

Dans Etudiant

@Overridepublic void afficherDetails() {

System.out.println(getPrenom() + " " + getNom() + " " + niveau);}

H & H: Research and Training 64 / 84

Page 121: Achref El Mouelhi - LIS lab · 2020. 7. 26. · Achref El Mouelhi Docteur de l’universite d’Aix-Marseille ... Saisir le nom du package et celui de la classe Pour la classe Main,

© Achref EL MOUELHI ©

Classe et methode abstraites

Java

Pour tester

Enseignant enseignant = new Enseignant(3, "green","jonas", 1700);

enseignant.afficherDetails();

En executant, le resultat est :

jonas green 1700

H & H: Research and Training 65 / 84

Page 122: Achref El Mouelhi - LIS lab · 2020. 7. 26. · Achref El Mouelhi Docteur de l’universite d’Aix-Marseille ... Saisir le nom du package et celui de la classe Pour la classe Main,

© Achref EL MOUELHI ©

Classe et methode abstraites

Java

Pour tester

Enseignant enseignant = new Enseignant(3, "green","jonas", 1700);

enseignant.afficherDetails();

En executant, le resultat est :

jonas green 1700

H & H: Research and Training 65 / 84

Page 123: Achref El Mouelhi - LIS lab · 2020. 7. 26. · Achref El Mouelhi Docteur de l’universite d’Aix-Marseille ... Saisir le nom du package et celui de la classe Pour la classe Main,

© Achref EL MOUELHI ©

Classe et methode finales

JavaClasse finale

C’est une classe qui ne peut avoir de classes filles

Pour tester

Commencons par mettre en commentaire afficherNomComplet() dans les troisclasses Personne, Enseignant et Etudiant

Declarons la classe Personne finale

public final class Personne {...

}

Les deux classes filles sont affichees en rouge

The type Enseignant cannot subclass the final class Personne

H & H: Research and Training 66 / 84

Page 124: Achref El Mouelhi - LIS lab · 2020. 7. 26. · Achref El Mouelhi Docteur de l’universite d’Aix-Marseille ... Saisir le nom du package et celui de la classe Pour la classe Main,

© Achref EL MOUELHI ©

Classe et methode finales

JavaClasse finale

C’est une classe qui ne peut avoir de classes filles

Pour tester

Commencons par mettre en commentaire afficherNomComplet() dans les troisclasses Personne, Enseignant et Etudiant

Declarons la classe Personne finale

public final class Personne {...

}

Les deux classes filles sont affichees en rouge

The type Enseignant cannot subclass the final class Personne

H & H: Research and Training 66 / 84

Page 125: Achref El Mouelhi - LIS lab · 2020. 7. 26. · Achref El Mouelhi Docteur de l’universite d’Aix-Marseille ... Saisir le nom du package et celui de la classe Pour la classe Main,

© Achref EL MOUELHI ©

Classe et methode finales

JavaClasse finale

C’est une classe qui ne peut avoir de classes filles

Pour tester

Commencons par mettre en commentaire afficherNomComplet() dans les troisclasses Personne, Enseignant et Etudiant

Declarons la classe Personne finale

public final class Personne {...

}

Les deux classes filles sont affichees en rouge

The type Enseignant cannot subclass the final class Personne

H & H: Research and Training 66 / 84

Page 126: Achref El Mouelhi - LIS lab · 2020. 7. 26. · Achref El Mouelhi Docteur de l’universite d’Aix-Marseille ... Saisir le nom du package et celui de la classe Pour la classe Main,

© Achref EL MOUELHI ©

Classe et methode finales

JavaClasse finale

C’est une classe qui ne peut avoir de classes filles

Pour tester

Commencons par mettre en commentaire afficherNomComplet() dans les troisclasses Personne, Enseignant et Etudiant

Declarons la classe Personne finale

public final class Personne {...

}

Les deux classes filles sont affichees en rouge

The type Enseignant cannot subclass the final class Personne

H & H: Research and Training 66 / 84

Page 127: Achref El Mouelhi - LIS lab · 2020. 7. 26. · Achref El Mouelhi Docteur de l’universite d’Aix-Marseille ... Saisir le nom du package et celui de la classe Pour la classe Main,

© Achref EL MOUELHI ©

Classe et methode finales

JavaMethode finale

C’est une methode qu’on ne peut redefinir

Pour tester

Commencons par supprimer le mot-cle final dans la classe Personne

Ajoutons une methode finale afficherNomComplet() dans Personne

public final void afficherNomComplet() {System.out.println(this.getPrenom() + " " + this.getNom());

}

Si on essaye de redefinir cette methode dans Enseignant

Cannot override the final method from Personne

H & H: Research and Training 67 / 84

Page 128: Achref El Mouelhi - LIS lab · 2020. 7. 26. · Achref El Mouelhi Docteur de l’universite d’Aix-Marseille ... Saisir le nom du package et celui de la classe Pour la classe Main,

© Achref EL MOUELHI ©

Classe et methode finales

JavaMethode finale

C’est une methode qu’on ne peut redefinir

Pour tester

Commencons par supprimer le mot-cle final dans la classe Personne

Ajoutons une methode finale afficherNomComplet() dans Personne

public final void afficherNomComplet() {System.out.println(this.getPrenom() + " " + this.getNom());

}

Si on essaye de redefinir cette methode dans Enseignant

Cannot override the final method from Personne

H & H: Research and Training 67 / 84

Page 129: Achref El Mouelhi - LIS lab · 2020. 7. 26. · Achref El Mouelhi Docteur de l’universite d’Aix-Marseille ... Saisir le nom du package et celui de la classe Pour la classe Main,

© Achref EL MOUELHI ©

Classe et methode finales

JavaMethode finale

C’est une methode qu’on ne peut redefinir

Pour tester

Commencons par supprimer le mot-cle final dans la classe Personne

Ajoutons une methode finale afficherNomComplet() dans Personne

public final void afficherNomComplet() {System.out.println(this.getPrenom() + " " + this.getNom());

}

Si on essaye de redefinir cette methode dans Enseignant

Cannot override the final method from Personne

H & H: Research and Training 67 / 84

Page 130: Achref El Mouelhi - LIS lab · 2020. 7. 26. · Achref El Mouelhi Docteur de l’universite d’Aix-Marseille ... Saisir le nom du package et celui de la classe Pour la classe Main,

© Achref EL MOUELHI ©

Classe et methode finales

JavaMethode finale

C’est une methode qu’on ne peut redefinir

Pour tester

Commencons par supprimer le mot-cle final dans la classe Personne

Ajoutons une methode finale afficherNomComplet() dans Personne

public final void afficherNomComplet() {System.out.println(this.getPrenom() + " " + this.getNom());

}

Si on essaye de redefinir cette methode dans Enseignant

Cannot override the final method from Personne

H & H: Research and Training 67 / 84

Page 131: Achref El Mouelhi - LIS lab · 2020. 7. 26. · Achref El Mouelhi Docteur de l’universite d’Aix-Marseille ... Saisir le nom du package et celui de la classe Pour la classe Main,

© Achref EL MOUELHI ©

Classe et methode finales

Java

Remarques

Une classe abstraite ne doit pas forcement contenir une methodeabstraite

Une classe finale ne doit pas forcement contenir une methodefinale

Une methode finale ne doit pas forcement etre dans une classefinale

H & H: Research and Training 68 / 84

Page 132: Achref El Mouelhi - LIS lab · 2020. 7. 26. · Achref El Mouelhi Docteur de l’universite d’Aix-Marseille ... Saisir le nom du package et celui de la classe Pour la classe Main,

© Achref EL MOUELHI ©

Interface

Java

En Java

Une classe ne peut heriter que d’une seule classe

Mais elle peut heriter de plusieurs interfaces

H & H: Research and Training 69 / 84

Page 133: Achref El Mouelhi - LIS lab · 2020. 7. 26. · Achref El Mouelhi Docteur de l’universite d’Aix-Marseille ... Saisir le nom du package et celui de la classe Pour la classe Main,

© Achref EL MOUELHI ©

Interface

Java

Une interface

declaree avec le mot-cle interface

comme une classe abstraite (impossible de l’instancier) dont :

toutes les methodes sont abstraites

tous les attributs sont constants

un protocole, un contrat : toute classe qui herite d’une interfacedoit implementer toutes ses methodes

pouvant proposee une implementation par defaut pour lesmethodes en utilisant le mot-cle default

H & H: Research and Training 70 / 84

Page 134: Achref El Mouelhi - LIS lab · 2020. 7. 26. · Achref El Mouelhi Docteur de l’universite d’Aix-Marseille ... Saisir le nom du package et celui de la classe Pour la classe Main,

© Achref EL MOUELHI ©

Interface

Java

Pour creer une interface sous Eclipse

Aller dans File > New > Interface

Saisir org.eclipse.interfaces dans Package name

Saisir IMiseEnForme dans Name

Valider

H & H: Research and Training 71 / 84

Page 135: Achref El Mouelhi - LIS lab · 2020. 7. 26. · Achref El Mouelhi Docteur de l’universite d’Aix-Marseille ... Saisir le nom du package et celui de la classe Pour la classe Main,

© Achref EL MOUELHI ©

Interface

JavaContenu genere de l’interface IMiseEnForme

package org.eclipse.interfaces;

public interface IMiseEnForme {

}

Definissons la signature de deux methodes dans l’interfaceIMiseEnForme

package org.eclipse.interfaces;

public interface IMiseEnForme {public void afficherNomMajuscule();public void afficherPrenomMajuscule();

}

H & H: Research and Training 72 / 84

Page 136: Achref El Mouelhi - LIS lab · 2020. 7. 26. · Achref El Mouelhi Docteur de l’universite d’Aix-Marseille ... Saisir le nom du package et celui de la classe Pour la classe Main,

© Achref EL MOUELHI ©

Interface

JavaContenu genere de l’interface IMiseEnForme

package org.eclipse.interfaces;

public interface IMiseEnForme {

}

Definissons la signature de deux methodes dans l’interfaceIMiseEnForme

package org.eclipse.interfaces;

public interface IMiseEnForme {public void afficherNomMajuscule();public void afficherPrenomMajuscule();

}

H & H: Research and Training 72 / 84

Page 137: Achref El Mouelhi - LIS lab · 2020. 7. 26. · Achref El Mouelhi Docteur de l’universite d’Aix-Marseille ... Saisir le nom du package et celui de la classe Pour la classe Main,

© Achref EL MOUELHI ©

Interface

Java

Pour heriter d’une interface, on utilise le mot-cle implements

public class Personne implements IMiseEnForme {...

}

La classe Personne est soulignee en rouge

Placer le curseur sur la classe Personne

Dans le menu affiche, selectionner Add unimplementedmethods

H & H: Research and Training 73 / 84

Page 138: Achref El Mouelhi - LIS lab · 2020. 7. 26. · Achref El Mouelhi Docteur de l’universite d’Aix-Marseille ... Saisir le nom du package et celui de la classe Pour la classe Main,

© Achref EL MOUELHI ©

Interface

Java

Pour heriter d’une interface, on utilise le mot-cle implements

public class Personne implements IMiseEnForme {...

}

La classe Personne est soulignee en rouge

Placer le curseur sur la classe Personne

Dans le menu affiche, selectionner Add unimplementedmethods

H & H: Research and Training 73 / 84

Page 139: Achref El Mouelhi - LIS lab · 2020. 7. 26. · Achref El Mouelhi Docteur de l’universite d’Aix-Marseille ... Saisir le nom du package et celui de la classe Pour la classe Main,

© Achref EL MOUELHI ©

Interface

Java

Le code genere

@Overridepublic void afficherNomMajuscule() {

// TODO Auto-generated method stub

}

@Overridepublic void afficherPrenomMajuscule() {

// TODO Auto-generated method stub

}

H & H: Research and Training 74 / 84

Page 140: Achref El Mouelhi - LIS lab · 2020. 7. 26. · Achref El Mouelhi Docteur de l’universite d’Aix-Marseille ... Saisir le nom du package et celui de la classe Pour la classe Main,

© Achref EL MOUELHI ©

Interface

Java

Modifions le code de deux methodes generees

@Overridepublic void afficherNomMajuscule() {

System.out.println(nom.toUpperCase());}

@Overridepublic void afficherPrenomMajuscule() {

System.out.println(prenom.toUpperCase());

}

H & H: Research and Training 75 / 84

Page 141: Achref El Mouelhi - LIS lab · 2020. 7. 26. · Achref El Mouelhi Docteur de l’universite d’Aix-Marseille ... Saisir le nom du package et celui de la classe Pour la classe Main,

© Achref EL MOUELHI ©

Interface

Java

Pour tester

Enseignant enseignant = new Enseignant(3, "green","jonas", 1700);

enseignant.afficherNomMajuscule();enseignant.afficherPrenomMajuscule();

En executant, le resultat est :

GREENJONAS

H & H: Research and Training 76 / 84

Page 142: Achref El Mouelhi - LIS lab · 2020. 7. 26. · Achref El Mouelhi Docteur de l’universite d’Aix-Marseille ... Saisir le nom du package et celui de la classe Pour la classe Main,

© Achref EL MOUELHI ©

Interface

Java

Pour tester

Enseignant enseignant = new Enseignant(3, "green","jonas", 1700);

enseignant.afficherNomMajuscule();enseignant.afficherPrenomMajuscule();

En executant, le resultat est :

GREENJONAS

H & H: Research and Training 76 / 84

Page 143: Achref El Mouelhi - LIS lab · 2020. 7. 26. · Achref El Mouelhi Docteur de l’universite d’Aix-Marseille ... Saisir le nom du package et celui de la classe Pour la classe Main,

© Achref EL MOUELHI ©

Interface

Java

Definissons un attribut i dans l’interface IMiseEnForme

package org.eclipse.interfaces;

public interface IMiseEnForme {

int i = 5;

public void afficherNomMajuscule();public void afficherPrenomMajuscule();

}

L’attribut i est, par definition static et final

H & H: Research and Training 77 / 84

Page 144: Achref El Mouelhi - LIS lab · 2020. 7. 26. · Achref El Mouelhi Docteur de l’universite d’Aix-Marseille ... Saisir le nom du package et celui de la classe Pour la classe Main,

© Achref EL MOUELHI ©

Interface

Java

Definissons un attribut i dans l’interface IMiseEnForme

package org.eclipse.interfaces;

public interface IMiseEnForme {

int i = 5;

public void afficherNomMajuscule();public void afficherPrenomMajuscule();

}

L’attribut i est, par definition static et final

H & H: Research and Training 77 / 84

Page 145: Achref El Mouelhi - LIS lab · 2020. 7. 26. · Achref El Mouelhi Docteur de l’universite d’Aix-Marseille ... Saisir le nom du package et celui de la classe Pour la classe Main,

© Achref EL MOUELHI ©

Interface

JavaIl est possible de definir une implementation par defaut pour unemethode d’interface (depuis Java 8)

package org.eclipse.interfaces;

public interface IMiseEnForme {int i = 5;

default public void afficherNomMajuscule() {System.out.println("Doe");

}public void afficherPrenomMajuscule();

}

Remarque

Les classes filles ne sont pas dans l’obligation d’implementer lesmethodes d’une interface ayant une implementation par defaut

H & H: Research and Training 78 / 84

Page 146: Achref El Mouelhi - LIS lab · 2020. 7. 26. · Achref El Mouelhi Docteur de l’universite d’Aix-Marseille ... Saisir le nom du package et celui de la classe Pour la classe Main,

© Achref EL MOUELHI ©

Interface

JavaIl est possible de definir une implementation par defaut pour unemethode d’interface (depuis Java 8)

package org.eclipse.interfaces;

public interface IMiseEnForme {int i = 5;

default public void afficherNomMajuscule() {System.out.println("Doe");

}public void afficherPrenomMajuscule();

}

Remarque

Les classes filles ne sont pas dans l’obligation d’implementer lesmethodes d’une interface ayant une implementation par defaut

H & H: Research and Training 78 / 84

Page 147: Achref El Mouelhi - LIS lab · 2020. 7. 26. · Achref El Mouelhi Docteur de l’universite d’Aix-Marseille ... Saisir le nom du package et celui de la classe Pour la classe Main,

© Achref EL MOUELHI ©

Interface

Java

Remarques

Une interface peut heriter de plusieurs autres interfaces (mais pasd’une classe)

Pour cela, il faut utiliser le mot-cle extends et pas implementscar une interface n’implemente jamais de methodes.

Question : une interface est-elle vraiment une classe abstraite?

Non, car toute classe abstraite herite de la classe Object mais uneinterface non

H & H: Research and Training 79 / 84

Page 148: Achref El Mouelhi - LIS lab · 2020. 7. 26. · Achref El Mouelhi Docteur de l’universite d’Aix-Marseille ... Saisir le nom du package et celui de la classe Pour la classe Main,

© Achref EL MOUELHI ©

Interface

Java

Remarques

Une interface peut heriter de plusieurs autres interfaces (mais pasd’une classe)

Pour cela, il faut utiliser le mot-cle extends et pas implementscar une interface n’implemente jamais de methodes.

Question : une interface est-elle vraiment une classe abstraite?

Non, car toute classe abstraite herite de la classe Object mais uneinterface non

H & H: Research and Training 79 / 84

Page 149: Achref El Mouelhi - LIS lab · 2020. 7. 26. · Achref El Mouelhi Docteur de l’universite d’Aix-Marseille ... Saisir le nom du package et celui de la classe Pour la classe Main,

© Achref EL MOUELHI ©

Enumeration

Java

Enumeration

est un ensemble de constantes

introduit depuis Java 5

peut etre declaree, dans une fichier toute seule, dans une classe ou dans une interface

Pour creer une enumeration sous Eclipse

Aller dans File > New > Enum

Saisir org.eclipse.enums dans Package name

Saisir Sport dans Name

Valider

H & H: Research and Training 80 / 84

Page 150: Achref El Mouelhi - LIS lab · 2020. 7. 26. · Achref El Mouelhi Docteur de l’universite d’Aix-Marseille ... Saisir le nom du package et celui de la classe Pour la classe Main,

© Achref EL MOUELHI ©

Enumeration

Java

Enumeration

est un ensemble de constantes

introduit depuis Java 5

peut etre declaree, dans une fichier toute seule, dans une classe ou dans une interface

Pour creer une enumeration sous Eclipse

Aller dans File > New > Enum

Saisir org.eclipse.enums dans Package name

Saisir Sport dans Name

Valider

H & H: Research and Training 80 / 84

Page 151: Achref El Mouelhi - LIS lab · 2020. 7. 26. · Achref El Mouelhi Docteur de l’universite d’Aix-Marseille ... Saisir le nom du package et celui de la classe Pour la classe Main,

© Achref EL MOUELHI ©

Enumeration

JavaLe code genere

package org.eclipse.enums;

public enum Sport {

}

Ajoutons des constantes a cette enumeration Sport

package org.eclipse.enums;

public enum Sport {FOOT,RUGBY,TENNIS,CROSS_FIT,BASKET

}

H & H: Research and Training 81 / 84

Page 152: Achref El Mouelhi - LIS lab · 2020. 7. 26. · Achref El Mouelhi Docteur de l’universite d’Aix-Marseille ... Saisir le nom du package et celui de la classe Pour la classe Main,

© Achref EL MOUELHI ©

Enumeration

JavaLe code genere

package org.eclipse.enums;

public enum Sport {

}

Ajoutons des constantes a cette enumeration Sport

package org.eclipse.enums;

public enum Sport {FOOT,RUGBY,TENNIS,CROSS_FIT,BASKET

}

H & H: Research and Training 81 / 84

Page 153: Achref El Mouelhi - LIS lab · 2020. 7. 26. · Achref El Mouelhi Docteur de l’universite d’Aix-Marseille ... Saisir le nom du package et celui de la classe Pour la classe Main,

© Achref EL MOUELHI ©

Enumeration

Java

Pour utiliser cette enumeration dans la classe Main

Sport sport = Sport.BASKET;System.out.println(sport); // affiche BASKET

N’oublions pas d’importer l’enumeration dans la classe Main

import org.eclipse.enums.Sport;

H & H: Research and Training 82 / 84

Page 154: Achref El Mouelhi - LIS lab · 2020. 7. 26. · Achref El Mouelhi Docteur de l’universite d’Aix-Marseille ... Saisir le nom du package et celui de la classe Pour la classe Main,

© Achref EL MOUELHI ©

Enumeration

Java

Pour utiliser cette enumeration dans la classe Main

Sport sport = Sport.BASKET;System.out.println(sport); // affiche BASKET

N’oublions pas d’importer l’enumeration dans la classe Main

import org.eclipse.enums.Sport;

H & H: Research and Training 82 / 84

Page 155: Achref El Mouelhi - LIS lab · 2020. 7. 26. · Achref El Mouelhi Docteur de l’universite d’Aix-Marseille ... Saisir le nom du package et celui de la classe Pour la classe Main,

© Achref EL MOUELHI ©

Enumeration

JavaOn peut aussi definir une enumeration comme une classe avec un ensembled’attributs et de methodes

public enum Sport {

FOOT("foot", 1),RUGBY("rugby", 7),TENNIS("tennis", 3),CROSS_FIT("cross_fit", 4),BASKET("basket", 6) ;private final String nom;private final int code;

Sport(String nom, int code) {this.nom = nom;this.code = code;

}public String getNom(){ return this.nom; }public int getCode(){ return this.code; }

};

H & H: Research and Training 83 / 84

Page 156: Achref El Mouelhi - LIS lab · 2020. 7. 26. · Achref El Mouelhi Docteur de l’universite d’Aix-Marseille ... Saisir le nom du package et celui de la classe Pour la classe Main,

© Achref EL MOUELHI ©

Enumeration

Java

Recuperer la valeur de l’attribut code de la constante BASKET

Sport sport = Sport.BASKET;System.out.println(sport.getCode());// affiche 6

Recuperer l’indice de la constante BASKET dans l’enumeration

Sport sport = Sport.BASKET;System.out.println(sport.ordinal());// affiche l’indice ici 4

Transformer l’enumeration en tableau et recuperer l’element d’indice 2

System.out.println(Sport.values()[2]);// affiche Tennis

H & H: Research and Training 84 / 84

Page 157: Achref El Mouelhi - LIS lab · 2020. 7. 26. · Achref El Mouelhi Docteur de l’universite d’Aix-Marseille ... Saisir le nom du package et celui de la classe Pour la classe Main,

© Achref EL MOUELHI ©

Enumeration

Java

Recuperer la valeur de l’attribut code de la constante BASKET

Sport sport = Sport.BASKET;System.out.println(sport.getCode());// affiche 6

Recuperer l’indice de la constante BASKET dans l’enumeration

Sport sport = Sport.BASKET;System.out.println(sport.ordinal());// affiche l’indice ici 4

Transformer l’enumeration en tableau et recuperer l’element d’indice 2

System.out.println(Sport.values()[2]);// affiche Tennis

H & H: Research and Training 84 / 84

Page 158: Achref El Mouelhi - LIS lab · 2020. 7. 26. · Achref El Mouelhi Docteur de l’universite d’Aix-Marseille ... Saisir le nom du package et celui de la classe Pour la classe Main,

© Achref EL MOUELHI ©

Enumeration

Java

Recuperer la valeur de l’attribut code de la constante BASKET

Sport sport = Sport.BASKET;System.out.println(sport.getCode());// affiche 6

Recuperer l’indice de la constante BASKET dans l’enumeration

Sport sport = Sport.BASKET;System.out.println(sport.ordinal());// affiche l’indice ici 4

Transformer l’enumeration en tableau et recuperer l’element d’indice 2

System.out.println(Sport.values()[2]);// affiche Tennis

H & H: Research and Training 84 / 84