Explorer les Livres électroniques
Catégories
Explorer les Livres audio
Catégories
Explorer les Magazines
Catégories
Explorer les Documents
Catégories
Achref El Mouelhi
elmouelhi.achref@gmail.com
1 Rappel
2 Classe
toString()
Setter
Getter
Constructeur
equals() et hashCode()
Attributs et méthodes statiques
6 Interface
7 Énumération
Java
Qu’est ce qu’une classe en POO ?
f E LM
ch r e
Qu’est ce que c’est la notion d’instance ?
©A
Une instance correspond à un objet créé à partir d’une classe (via
le constructeur)
Java
Qu’est ce qu’une classe en POO ?
f E LM
ch r e
Qu’est ce que c’est la notion d’instance ?
©A
Une instance correspond à un objet créé à partir d’une classe (via
le constructeur)
L’instanciation : création d’un objet d’une classe
Java
Qu’est ce qu’une classe en POO ?
f E LM
ch r e
Qu’est ce que c’est la notion d’instance ?
©A
Une instance correspond à un objet créé à partir d’une classe (via
le constructeur)
L’instanciation : création d’un objet d’une classe
instance ≡ objet
Java
NomClasse
H I ©
EL
les attributs
O U
L M
ref E
les méthodes
A ch
©
Attribut : [visibilité] + type + nom
Méthode : [visibilité] + valeur de retour + nom + arguments ≡
signature : exactement comme les fonctions en procédurale
Java
Particularité du Java
Toutes les classes héritent implicitement (pas besoin d’ajouter
extends) d’une classe mère Object.
H I ©
La classe Object contient plusieurs mU EL telles que
éthodes
toString() (pour transformerM un O
objet en chaı̂ne de caractère),
f
clone() (pour cloner)... E L
c h r e
© A permet de désigner l’objet courant.
Le mot-clé this
Contrairement à certains LOO, le this n’est pas obligatoire si
aucune ambiguité ne se présente.
Java
Commençons par créer un nouveau projet Java
Aller dans File > New > Java Project
Remplir le champ Project name: avec cours-poo puis cliquer
sur Next
H I ©
U EL file puis
Décocher la case Create module-info.java
cliquer sur Finish
L MO
r e f E
A ch
©
Java
Commençons par créer un nouveau projet Java
Aller dans File > New > Java Project
Remplir le champ Project name: avec cours-poo puis cliquer
sur Next
H I ©
U EL file puis
Décocher la case Create module-info.java
cliquer sur Finish
L MO
r e f E
A chorg.eclipse.test et
Créons deux packages
©
org.eclipse.model
Aller dans File > New > Package
Saisir le nom du premier package et valider
Refaire la même chose pour le second
H & H: Research and Training 7 / 84
Classe
Java
Créons deux classes
Une classe Personne dans org.eclipse.model contenant
trois attributs : num, nom et prénom
I ©
Une classe Main dans org.eclipse.test contenant le
H
EL
public static void main dans lequel on instanciera la
U
O
LM
classe Personne
r e f E
ch
©A
Java
Créons deux classes
Une classe Personne dans org.eclipse.model contenant
trois attributs : num, nom et prénom
I ©
Une classe Main dans org.eclipse.test contenant le
H
EL
public static void main dans lequel on instanciera la
U
O
LM
classe Personne
r e f E
A
Créons les classes ch
©
Aller dans File > New > Class
Saisir le nom du package et celui de la classe
Pour la classe Main, cocher la case public static void
main (String[] args)
H & H: Research and Training 8 / 84
Classe
Java
Contenu de la classe Personne
package org.eclipse.model;
ch r e
A
En Java, toute classe a un constructeur par défaut sans paramètres.
©
Par défaut, la visibilité des attributs, en Java, est package.
Donc, les attributs ne seront pas accessibles depuis la classe Main qui se situe
dans un package différent (org.eclipse.test)
Java
Java
A chr
// TODO Auto-generated method stub
} ©
}
Java
Hypothèse
H I ©
UEL
O
f E LM
ch r e
©A
Java
Hypothèse
H I ©
U
Étape 1 : déclaration d’un objet (objet non EéLé)
cr
Personne personne; L MO
r e f E
A ch
©
Java
Hypothèse
H I ©
U
Étape 1 : déclaration d’un objet (objet non EéLé)
cr
Personne personne; L MO
r e f E
A ch de la classe Personne (objet créé)
©
Étape 2 : instanciation
personne = new Personne();
Java
Hypothèse
H I ©
U
Étape 1 : déclaration d’un objet (objet non EéLé)
cr
Personne personne; L MO
r e f E
A ch de la classe Personne (objet créé)
©
Étape 2 : instanciation
personne = new Personne();
Java
Java
Java
Contenu de la classe Main
package org.eclipse.test;
H I ©
public static void main(String[] args) {
UEL
O
Personne personne = new Personne();
personne.num = 1;
f E LM
r
personne.nom = "wick";
ch e
©A
personne.prenom = "john";
System.out.println(personne);
}
}
Java
Contenu de la classe Main
package org.eclipse.test;
H I ©
public static void main(String[] args) {
UEL
O
Personne personne = new Personne();
personne.num = 1;
f E LM
r
personne.nom = "wick";
ch e
©A
personne.prenom = "john";
System.out.println(personne);
}
}
Java
Explication
H I ©
Pour la générer, clic droit sur la classe Personne, aller dans
source > Generate toString()..., sélectionner les
U EL
O
LM
champs à afficher puis valider.
r e f E
ch
©A
Java
Explication
H I ©
Pour la générer, clic droit sur la classe Personne, aller dans
source > Generate toString()..., sélectionner les
U EL
O
LM
champs à afficher puis valider.
r e f E
Le code de la mA ch toString()
éthode
@Override
©
public String toString() {
return "Personne [num=" + num + ", nom=" + nom +
", prenom=" + prenom + "]";
}
Java
@Override
Une annotation (appelé aussi décorateur par MicroSoft)
H I ©
EL
Pour nous rappeler qu’on redéfinit une méthode qui appartient à
U
la classe mère (ici Object)
O
f E LM
ch r e
©A
Java
@Override
Une annotation (appelé aussi décorateur par MicroSoft)
H I ©
EL
Pour nous rappeler qu’on redéfinit une méthode qui appartient à
U
la classe mère (ici Object)
O
f E LM
ch r e
© A
En exécutant, le résultat est :
Personne [num=1, nom=wick, prenom=john]
Java
Hypothèse
Supposant que l’on n’accepte pas de valeur négative pour l’attribut num de la
classe Personne
H I ©
UEL
O
f E LM
ch r e
©A
Java
Hypothèse
Supposant que l’on n’accepte pas de valeur négative pour l’attribut num de la
classe Personne
Démarche
H I ©
UEL
O
LM
1 Bloquer l’accès directe aux attributs (mettre la visibilité à private)
2
r e f E
Définir des méthodes publiques qui contrôlent l’affectation de valeurs
ch
©A
aux attributs (les setter)
Java
Hypothèse
Supposant que l’on n’accepte pas de valeur négative pour l’attribut num de la
classe Personne
Démarche
H I ©
UEL
O
LM
1 Bloquer l’accès directe aux attributs (mettre la visibilité à private)
2
r e f E
Définir des méthodes publiques qui contrôlent l’affectation de valeurs
ch
©A
aux attributs (les setter)
Convention
Java
Mettons la visibilité private pour tous les attributs de la classe Personne
package org.eclipse.model;
O U
LM
@Override
public String toString() {
r e f E
return "Personne [num=" + num + ", nom=" + nom + ",
ch
©A
prenom=" + prenom + "]";
}
}
Java
Mettons la visibilité private pour tous les attributs de la classe Personne
package org.eclipse.model;
O U
LM
@Override
public String toString() {
r e f E
return "Personne [num=" + num + ", nom=" + nom + ",
ch
©A
prenom=" + prenom + "]";
}
}
Dans la classe Main, les trois lignes suivantes sont soulignées en rouge
personne.num = 1;
personne.nom = "wick";
personne.prenom = "john";
Java
Explication
Les attributs sont privés, donc aucun accès direct ne sera autorisé
H I ©
UEL
O
f E LM
ch r e
©A
Java
Explication
Les attributs sont privés, donc aucun accès direct ne sera autorisé
H I ©
UEL
O
LM
Solution : générer les setters
r e f E
Faire clic droit sur la classe Personne
ch
©A
Aller dans Source > Generate Getters and Setters...
Cliquer sur chaque attribut et cocher la case
setNomAttribut(...)
Valider
Java
Les trois méthodes générées
public void setNum(int num) {
this.num = num;
}
public void setNom(String nom) {
this.nom = nom;
}
H I ©
EL
public void setPrenom(String prenom) {
}
this.prenom = prenom;
O U
f E LM
ch r e
©A
Java
Les trois méthodes générées
public void setNum(int num) {
this.num = num;
}
public void setNom(String nom) {
this.nom = nom;
}
H I ©
EL
public void setPrenom(String prenom) {
}
this.prenom = prenom;
O U
E LM
Modifions setNum() pour ne plus accepter de valeurs inférieures à 1
f
public void setNum(int num) {
ch r e
©A
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
Classe Setter
Java
Mettons à jour la classe Main
package org.eclipse.test;
H I ©
public static void main(String[] args) {
UEL
O
Personne personne = new Personne();
personne.setNum(1);
f E LM
r e
personne.setNom("wick");
ch
©A
personne.setPrenom("john");
System.out.println(personne);
}
}
Java
Mettons à jour la classe Main
package org.eclipse.test;
H I ©
public static void main(String[] args) {
UEL
O
Personne personne = new Personne();
personne.setNum(1);
f E LM
r e
personne.setNom("wick");
ch
©A
personne.setPrenom("john");
System.out.println(personne);
}
}
Java
Mettons à jour la classe Main
package org.eclipse.test;
H I ©
public static void main(String[] args) {
UEL
O
Personne personne = new Personne();
personne.setNum(-1);
f E LM
r e
personne.setNom("wick");
ch
©A
personne.setPrenom("john");
System.out.println(personne);
}
}
Java
Mettons à jour la classe Main
package org.eclipse.test;
H I ©
public static void main(String[] args) {
UEL
O
Personne personne = new Personne();
personne.setNum(-1);
f E LM
r e
personne.setNom("wick");
ch
©A
personne.setPrenom("john");
System.out.println(personne);
}
}
Java
Hypothèse
H I ©
Si on voulait afficher les attributs (privés) de la classe Personne, un
par un, dans la classe Main sans passer par le toString()
UEL
O
f E LM
ch r e
©A
Java
Hypothèse
H I ©
Si on voulait afficher les attributs (privés) de la classe Personne, un
par un, dans la classe Main sans passer par le toString()
UEL
O
f E LM
ch r e
Démarche
© A
Définir des méthodes qui retournent les valeurs des attributs (les
getter)
Java
f E LM
ch r e
Cliquer sur chaque attribut et cocher la case
©A
getNomAttribut()
Valider
Java
Mettons à jour la classe Main
package org.eclipse.test;
H I ©
EL
public static void main(String[] args) {
Personne personne = new Personne();
O U
LM
personne.setNum(1);
personne.setNom("wick");
r e f
personne.setPrenom("john"); E
ch
System.out.println(personne.getNum() + " " + personne.
} ©A
getNom() + " " + personne.getPrenom());
Java
Mettons à jour la classe Main
package org.eclipse.test;
H I ©
EL
public static void main(String[] args) {
Personne personne = new Personne();
O U
LM
personne.setNum(1);
personne.setNom("wick");
r e f
personne.setPrenom("john"); E
ch
System.out.println(personne.getNum() + " " + personne.
} ©A
getNom() + " " + personne.getPrenom());
Java
Remarques
I ©
Pour simplifier la création d’objets, on peut définir un nouveau
H
EL
constructeur qui prend en paramètre plusieurs attributs de la
U
classe
O
f E LM
ch r e
©A
Java
Remarques
I ©
Pour simplifier la création d’objets, on peut définir un nouveau
H
EL
constructeur qui prend en paramètre plusieurs attributs de la
U
classe
O
f E LM
r e
ch avec paramètre
Pour générer un constructeur
© A
1 Faire clic droit sur la classe Personne
2 Aller dans Source > Generate Constructor using
Fields...
3 Vérifier que toutes les cases sont cochées et valider
H & H: Research and Training 26 / 84
Classe Constructeur
Java
Le constructeur généré
public Personne(int num, String nom, String prenom) {
super();
this.num = num;
this.nom = nom;
this.prenom = prenom;
H I ©
}
U EL
O
f E LM
ch r e
©A
Java
Le constructeur généré
public Personne(int num, String nom, String prenom) {
super();
this.num = num;
this.nom = nom;
this.prenom = prenom;
H I ©
}
U EL
O
f E LM
Pour préserver la cohérence, il faut que le constructeur contrôle la
r e
valeur de l’attribut num
ch num, String nom, String prenom) {
©
super();
A
public Personne(int
Java
Java
Java
A ch
©
Java
A ch
Solution
©
Générer un constructeur sans paramètre
package org.eclipse.test;
LM
+ " " + personne.getPrenom());
r e E
Personne personne2 = new Personne(2, "bob", "mike");
f
System.out.println(personne2);
}
ch
©A
}
package org.eclipse.test;
LM
+ " " + personne.getPrenom());
r e E
Personne personne2 = new Personne(2, "bob", "mike");
f
System.out.println(personne2);
}
ch
©A
}
1 wick john
Personne [num=2, nom=bob, prenom=mike]
Java
Java
Java
Explication
Par défaut, deux objets d’une même classe sont égaux s’ils
pointent sur le même espace mémoire (identiques).
H I ©
Pour comparer les valeurs, il faut redéfinir les méthodes
equals() et hashCode().
U EL
O
f E LM
equals() permet de définir comment tester sémantiquement
e
l’égalité de deux objets.
r
(elle©
Achpermet de retourner la valeur de hachage d’un objet
hashCode()
ne retourne pas un identifiant unique).
Java
H I ©
Symétrie : si a.equals(b) retourne true alors b.equals(a) aussi.
EL
OU
Réflexivité : a.equals(a) retourne true si a est un objet non null.
M
Transitivité : si a.equals(b)E
f L
et b.equals(c) alors a.equals(c).
e
chr alors a.hashCode() == b.hashCode().
A
Consistance : si a.equals(b)
©
a.equals(null) retourne false.
Java
Java
@Override
public 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;
}
©
@Override
public boolean equals(Object obj) {
H I
EL
if (this == obj)
return true;
if (obj == null)
return false;
O U
LM
if (getClass() != obj.getClass())
e E
return false;
f
Personne other = (Personne) obj;
r
ch
if (nom == null) {
if (other.nom != null)
©A
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;
}
Java
Java
Java
Récapitulatif
Les instances d’une même classe ont toutes les mêmes attributs mais
pas les mêmes valeurs.
H I ©
U EL
O
f E LM
ch r e
©A
Java
Récapitulatif
Les instances d’une même classe ont toutes les mêmes attributs mais
pas les mêmes valeurs.
H I ©
EL
Hypothèse
M OU
f E Lait une valeur partagée par toutes
Et si nous voudrions qu’un attribut
e
chrd’objets instanciés de la classe Personne).
les instances (le nombre
© A
Java
Récapitulatif
Les instances d’une même classe ont toutes les mêmes attributs mais
pas les mêmes valeurs.
H I ©
EL
Hypothèse
M OU
f E Lait une valeur partagée par toutes
Et si nous voudrions qu’un attribut
e
chrd’objets instanciés de la classe Personne).
les instances (le nombre
© A
Définition
Un attribut dont la valeur est partagée par toutes les instances de la
classe est appelée : attribut statique ou attribut de classe.
Java
Exemple
H I ©
Pour créer un attribut contenant le nombreE
U L objets créés à
des
partir de la classe Personne.
L MO
r e f E sinon chaque objet pourrait avoir sa
Cet attribut doit être static,
A chcet attribut.
propre valeur pour
©
Java
Ajoutons un attribut statique nbrPersonnes à la liste d’attributs de la
classe Personne
private static int nbrPersonnes;
H I ©
U EL
O
f E LM
ch r e
©A
Java
Ajoutons un attribut statique nbrPersonnes à la liste d’attributs de la
classe Personne
private static int nbrPersonnes;
Java
Générons un getter pour l’attribut static nbrPersonnes
public static int getNbrPersonnes() {
return nbrPersonnes;
}
H I ©
U EL
O
f E LM
ch r e
©A
Java
Générons un getter pour l’attribut static nbrPersonnes
public static int getNbrPersonnes() {
return nbrPersonnes;
}
personne.getPrenom());
r e E
System.out.println(personne.getNum() + " " +personne.getNom() + " " +
f
ch
System.out.println(Personne.getNbrPersonnes());
©A
Personne personne2 = new Personne(2, "bob", "mike");
System.out.println(personne2);
System.out.println(Personne.getNbrPersonnes());
Java
Générons un getter pour l’attribut static nbrPersonnes
public static int getNbrPersonnes() {
return nbrPersonnes;
}
personne.getPrenom());
r e E
System.out.println(personne.getNum() + " " +personne.getNom() + " " +
f
ch
System.out.println(Personne.getNbrPersonnes());
©A
Personne personne2 = new Personne(2, "bob", "mike");
System.out.println(personne2);
System.out.println(Personne.getNbrPersonnes());
Le résultat est
1 wick john
1
Personne [num=2, nom=bob, prenom=mike]
2
H & H: Research and Training 41 / 84
Classe Attributs et méthodes statiques
Java
Exercice
Définir une classe Adresse avec trois attributs privés (rue,
codePostal et ville de type chaı̂ne de caractère
H I ©
Définir un constructeur avec trois paramètres, les getters, les
setters et la méthode toString()
U EL
M O
f E L constructeur
Dans la classe Personne, ajouter un attribut adresse de type
Adresse et définir un
h r e nouveau
lecsetter de ce nouvel attribut
à quatre paramètres
©A
et le getter et
Dans la classe Main, créer deux objets, un objet de type
Adresse et un de type Personne et lui attribuer l’adresse créée
précédemment
Afficher tous les attributs de cet objet de la classe Personne
Java
L’héritage, quand ?
H I ©
Lorsque deux ou plusieurs classes partagent plusieurs attributs UEL
O
(et méthodes)
f E LM
ch r e
Lorsqu’une Classe1 est une sorte de Classe2
©A
Java
Exemple
Un enseignant a un numéro, un nom, un prénom et un salaire
H I ©
UEL
O
f E LM
ch r e
©A
Java
Exemple
Un enseignant a un numéro, un nom, un prénom et un salaire
Un étudiant a aussi un numéro, un nom, un prénom et et un
niveau
H I ©
UEL
O
f E LM
ch r e
©A
Java
Exemple
Un enseignant a un numéro, un nom, un prénom et un salaire
Un étudiant a aussi un numéro, un nom, un prénom et et un
niveau
H I ©
U
Sémantiquement, enseignant et étudiant ELune sorte de
sont
personne
L MO
r e f E
A ch
©
Java
Exemple
Un enseignant a un numéro, un nom, un prénom et un salaire
Un étudiant a aussi un numéro, un nom, un prénom et et un
niveau
H I ©
U
Sémantiquement, enseignant et étudiant ELune sorte de
sont
personne
L MO
r e f Eplusieurs attributs tels que numéro,
En plus, les deux partagent
A
nom et prénom ch
©
Java
Exemple
Un enseignant a un numéro, un nom, un prénom et un salaire
Un étudiant a aussi un numéro, un nom, un prénom et et un
niveau
H I ©
U
Sémantiquement, enseignant et étudiant ELune sorte de
sont
personne
L MO
r e f Eplusieurs attributs tels que numéro,
En plus, les deux partagent
A
nom et prénom ch
©
Donc, on peut mettre en commun les attributs numéro, nom et
prénom dans une classe Personne
Java
Exemple
Un enseignant a un numéro, un nom, un prénom et un salaire
Un étudiant a aussi un numéro, un nom, un prénom et et un
niveau
H I ©
U
Sémantiquement, enseignant et étudiant ELune sorte de
sont
personne
L MO
r e f Eplusieurs attributs tels que numéro,
En plus, les deux partagent
A
nom et prénom ch
©
Donc, on peut mettre en commun les attributs numéro, nom et
prénom dans une classe Personne
Les classes Étudiant et Enseignant hériteront (extends) de
la classe Personne
Java
Particularité du Java
H I ©
L’héritage multiple n’est pas permis parU le E
L
langage Java
M O
E L
C’est-à-dire, une classe ne peut
f hériter de plusieurs classes
différentes
ch r e
© A
Java
H I ©
Choisir le package org.eclipse.model
UEL
O
LM
Saisir le nom de la classe
r e f E
Dans la section Superclass, cliquer sur Browse et chercher
A ch
puis sélectionner Personne
©
Cliquer sur Ok et enfin Finish
Refaire la même chose pour la seconde classe
Java
Contenu de la classe Enseignant
package org.eclipse.model;
H I ©
}
UEL
O
f E LM
ch r e
©A
Java
Contenu de la classe Enseignant
package org.eclipse.model;
H I ©
}
UEL
L MO
f E
Contenu de la classe Etudiant
r e
A ch
package org.eclipse.model;
©
public class Etudiant extends Personne {
}
extends est le mot-clé à utiliser pour définir une relation d’héritage
entre deux classes
H & H: Research and Training 47 / 84
Associations particulières entre classes Héritage
Java
Ensuite
H I ©
Créer un attribut niveau dans la classe Etudiant puis générer
UEL
les getter et setter O
f E LM
ch r
générer les getter et setter
e
Créer un attribut salaire dans la classe Enseignant puis
©A
Java
Pour créer un objet de type Enseignant
Enseignant enseignant = new Enseignant();
enseignant.setNum(3);
enseignant.setNom("green");
enseignant.setPrenom("jonas");
H I ©
enseignant.setSalaire(1700);
UEL
O
LM
System.out.println(enseignant);
r e f E
ch
©A
Java
Pour créer un objet de type Enseignant
Enseignant enseignant = new Enseignant();
enseignant.setNum(3);
enseignant.setNom("green");
enseignant.setPrenom("jonas");
H I ©
enseignant.setSalaire(1700);
UEL
O
LM
System.out.println(enseignant);
r e f E
ch
En exécutant, le résultat est :
©A
Personne [num=3, nom=green, prenom=jonas]
Java
Pour créer un objet de type Enseignant
Enseignant enseignant = new Enseignant();
enseignant.setNum(3);
enseignant.setNom("green");
enseignant.setPrenom("jonas");
H I ©
enseignant.setSalaire(1700);
UEL
O
LM
System.out.println(enseignant);
r e f E
ch
En exécutant, le résultat est :
©A
Personne [num=3, nom=green, prenom=jonas]
Java
Et si on génère le toString() dans la classe Enseignant
@Override
public String toString() {
return "Enseignant [salaire=" + salaire + "]";
}
H I ©
UEL
O
f E LM
ch r e
©A
Java
Et si on génère le toString() dans la classe Enseignant
@Override
public String toString() {
return "Enseignant [salaire=" + salaire + "]";
}
H I ©
U EL
M O
Pour appeler le toString() deLla classe mère à partir de classe
fille (Enseignant)
r e f E
A ch
@Override
©
public String toString() {
return super.toString() + " Enseignant [salaire
=" + salaire + "]";
}
Java
Comment générer un constructeur à plusieurs paramètres et utiliser celui de la classe mère
paramètres
H I ©
Dans Select super constructor to invoke, sélectionner le constructeur à trois
UEL
O
Dans Select fields to initialize, vérifier que la case salaire est sélectionnée
LM
et valider
r e f E
ch
©A
Java
Comment générer un constructeur à plusieurs paramètres et utiliser celui de la classe mère
paramètres
H I ©
Dans Select super constructor to invoke, sélectionner le constructeur à trois
UEL
O
Dans Select fields to initialize, vérifier que la case salaire est sélectionnée
LM
et valider
r e f E
Le constructeur généré
ch
©A
public Enseignant(int num, String nom, String prenom, int salaire) {
super(num, nom, prenom);
this.salaire = salaire;
}
Java
Comment générer un constructeur à plusieurs paramètres et utiliser celui de la classe mère
paramètres
H I ©
Dans Select super constructor to invoke, sélectionner le constructeur à trois
UEL
O
Dans Select fields to initialize, vérifier que la case salaire est sélectionnée
LM
et valider
r e f E
Le constructeur généré
ch
©A
public Enseignant(int num, String nom, String prenom, int salaire) {
super(num, nom, prenom);
this.salaire = salaire;
}
Java
©A
soit utiliser les getters/setters
soit mettre la visibilité des attributs de la classe mère à protected
Java
On peut créer un objet de la classe Personne ainsi
Enseignant enseignant = new Enseignant(3, "green", "
jonas", 1700);
H I ©
UEL
O
f E LM
ch r e
©A
Java
On peut créer un objet de la classe Personne ainsi
Enseignant enseignant = new Enseignant(3, "green", "
jonas", 1700);
H I ©
EL
Ou ainsi
M OU
Personne enseignant = E L Enseignant(3, "green", "
new
jonas", 1700); ref
A ch
©
Java
On peut créer un objet de la classe Personne ainsi
Enseignant enseignant = new Enseignant(3, "green", "
jonas", 1700);
H I ©
EL
Ou ainsi
M OU
Personne enseignant = E L Enseignant(3, "green", "
new
jonas", 1700); ref
A ch
©
Ceci est faux
Enseignant enseignant = new Personne(3, "green", "
jonas");
Java
Remarque
1 Pour connaı̂tre la classe d’un objet, on peut utiliser le mot-clé
instanceof
H I ©
UEL
O
f E LM
ch r e
©A
Java
Remarque
1 Pour connaı̂tre la classe d’un objet, on peut utiliser le mot-clé
instanceof
H I ©
Exemple UEL
O
Personne enseignant = new Enseignant(3, "green", "
f E LM
jonas", 1700);
ch r e
©A
System.out.println(enseignant instanceof Enseignant)
;
// affiche true
System.out.println(enseignant instanceof Personne);
// affiche true
System.out.println(personne instanceof Enseignant);
// affiche false
H & H: Research and Training 54 / 84
Associations particulières entre classes Héritage
Java
Exercice
1 Créer deux objets de type Etudiant et deux objets de type
Enseignant et stocker les tous dans un seul tableau.
2 Parcourir le tableau et afficher pour chacun soit le salaire soit le
H I ©
niveau
UEL
O
f E LM
ch r e
©A
Java
Exercice
1 Créer deux objets de type Etudiant et deux objets de type
Enseignant et stocker les tous dans un seul tableau.
2 Parcourir le tableau et afficher pour chacun soit le salaire soit le
H I ©
niveau
UEL
O
f E LM
ch r e
Pour parcourir un tableau, on peut utiliser le raccourci de for
©A
Personne personnes [] = { personne, personne2,
enseignant };
for(Personne perso : personnes) {
System.out.println(perso);
}
Java
L’agrégation
Java
L’agrégation
Java
Comment coder des relations d’agrégation et de composition en Java ?
Véhicule
numImmat
marque
modèle
H I ©
U EL
O
f E LM
ch r e
Moteur ©A Chssis
num id
poids matière
Java
La classe Châssis
public class Chassis {
private int id;
private String matiere;
public int getId() {
H I ©
EL
return id;
}
O U
LM
public void setId(int id) {
this.id = id;
r e f E
ch
}
©A
public String getMatiere() {
return matiere;
}
public void setMatiere(String matiere) {
this.matiere = matiere;
}
}
Java
La classe Moteur
public class Moteur {
private int num;
private float poids;
public int getNum() {
H I ©
EL
return num;
}
O U
LM
public void setNum(int num) {
this.num = num;
r e f E
ch
}
©A
public float getPoids() {
return poids;
}
public void setPoids(float poids) {
this.poids = poids;
}
}
La classe Véhicule
public class Vehivule {
private Moteur moteur;
private final Chassis chassis;
public Vehivule(Chassis chassis) {
this.chassis = chassis;
}
public Moteur getMoteur() {
return moteur;
H I ©
EL
}
public void setMoteur(Moteur moteur) {
this.moteur = moteur;
O U
}
}
f E LM
ch r e
©A
La classe Véhicule
public class Vehivule {
private Moteur moteur;
private final Chassis chassis;
public Vehivule(Chassis chassis) {
this.chassis = chassis;
}
public Moteur getMoteur() {
return moteur;
H I ©
EL
}
public void setMoteur(Moteur moteur) {
this.moteur = moteur;
O U
}
}
f E LM
ch r e
Explication ©A
un composant est déclaré final et instanciable une seule fois au moment de
l’instanciation de l’objet composite
Java
Pour tester
public class Main {
public static void main(String[] args) {
Chassis chassis = new Chassis();
chassis.setId(100);
H I ©
chassis.setMatiere("fer");
U EL
O
LM
Vehivule vehivule = new Vehivule(chassis);
Moteur moteur = new Moteur();
r e f E
moteur.setNum(100);
ch
©A
moteur.setPoids(500f);
vehivule.setMoteur(moteur);
// pas de méthode permettant de modifier le châ
ssis d’un véhicule
}
}
Java
Classe abstraite
C’est une classe qu’on ne peut instancier
Les constructeurs peuvent donc être supprimés
H I ©
UEL
O
f E LM
ch r e
©A
Java
Classe abstraite
C’est une classe qu’on ne peut instancier
Les constructeurs peuvent donc être supprimés
H I ©
U
Si on déclare la classe Personne abstraite EL
M O
E L
public abstract class Personne
f
{
...
c h re
©A
}
Java
Classe abstraite
C’est une classe qu’on ne peut instancier
Les constructeurs peuvent donc être supprimés
H I ©
U
Si on déclare la classe Personne abstraite EL
M O
E L
public abstract class Personne
f
{
...
c h re
©A
}
Java
Méthode abstraite
C’est une méthode non implémentée (sans code)
Une méthode abstraite doit être déclarée dans une classe
abstraite
H I ©
U EéeLpar les classes filles
Une méthode abstraite doit être implément
de la classe abstraite
L MO
r e f E
A ch
©
Java
Méthode abstraite
C’est une méthode non implémentée (sans code)
Une méthode abstraite doit être déclarée dans une classe
abstraite
H I ©
U EéeLpar les classes filles
Une méthode abstraite doit être implément
de la classe abstraite
L MO
r e f E
ch abstraite afficherDetails() dans
Déclarons une méthode
Personne © A
public abstract void afficherDetails();
Java
Méthode abstraite
C’est une méthode non implémentée (sans code)
Une méthode abstraite doit être déclarée dans une classe
abstraite
H I ©
U EéeLpar les classes filles
Une méthode abstraite doit être implément
de la classe abstraite
L MO
r e f E
ch abstraite afficherDetails() dans
Déclarons une méthode
Personne © A
public abstract void afficherDetails();
H I ©
UEL
O
f E LM
ch r e
©A
Le code généré
@Override
public void afficherDetails() {
H I ©
EL
// TODO Auto-generated method stub
}
O U
f E LM
ch r e
©A
Le code généré
@Override
public void afficherDetails() {
H I ©
EL
// TODO Auto-generated method stub
}
O U
Dans Enseignant
f E LM
@Override
ch r e
©A
public void afficherDetails() {
System.out.println(getPrenom() + " " + getNom() + " " + salaire);
}
Le code généré
@Override
public void afficherDetails() {
H I ©
EL
// TODO Auto-generated method stub
}
O U
Dans Enseignant
f E LM
@Override
ch r e
©A
public void afficherDetails() {
System.out.println(getPrenom() + " " + getNom() + " " + salaire);
}
Dans Etudiant
@Override
public void afficherDetails() {
System.out.println(getPrenom() + " " + getNom() + " " + niveau);
}
Java
Pour tester
Enseignant enseignant = new Enseignant(3, "green",
H I ©
"jonas", 1700);
UEL
enseignant.afficherDetails();
O
f E LM
ch r e
©A
Java
Pour tester
Enseignant enseignant = new Enseignant(3, "green",
H I ©
"jonas", 1700);
UEL
enseignant.afficherDetails();
O
f E LM
r e
ch est :
En exécutant, leArésultat
©
jonas green 1700
Java
Classe finale
H I ©
UEL
O
f E LM
ch r e
©A
Java
Classe finale
Pour tester
H I ©
EL
Commençons par mettre en commentaire afficherNomComplet() dans les trois
U
classes Personne, Enseignant et Etudiant
O
f E LM
ch r e
©A
Java
Classe finale
Pour tester
H I ©
EL
Commençons par mettre en commentaire afficherNomComplet() dans les trois
U
classes Personne, Enseignant et Etudiant
O
f E LM
r e
Déclarons la classe Personne finale
h
cPersonne
© A
public final class
...
{
Java
Classe finale
Pour tester
H I ©
EL
Commençons par mettre en commentaire afficherNomComplet() dans les trois
U
classes Personne, Enseignant et Etudiant
O
f E LM
r e
Déclarons la classe Personne finale
h
cPersonne
© A
public final class
...
{
Java
Méthode finale
H I ©
UEL
O
f E LM
ch r e
©A
Java
Méthode finale
Pour tester
H I ©
EL
Commençons par supprimer le mot-clé final dans la classe Personne
U
O
f E LM
ch r e
©A
Java
Méthode finale
Pour tester
H I ©
EL
Commençons par supprimer le mot-clé final dans la classe Personne
M OU
f E L
Ajoutons une méthode finale afficherNomComplet() dans Personne
chr e
public final void afficherNomComplet() {
© A
System.out.println(this.getPrenom() + " " + this.getNom());
Java
Méthode finale
Pour tester
H I ©
EL
Commençons par supprimer le mot-clé final dans la classe Personne
M OU
f E L
Ajoutons une méthode finale afficherNomComplet() dans Personne
chr e
public final void afficherNomComplet() {
© A
System.out.println(this.getPrenom() + " " + this.getNom());
Java
Remarques
H I ©
Une classe abstraite ne doit pas forcément contenir une méthode
abstraite
U EL
M O
Une classe finale ne doit pasLforcément contenir une méthode
finale
r e f E
A ch ne doit pas forcément être dans une classe
finale
©
Une méthode finale
Java
En Java H I ©
UEL
O
Une classe ne peut hériter que d’une seule classe
f E LM
ch r e
Mais elle peut hériter de plusieurs interfaces
©A
Java
Une interface
déclarée avec le mot-clé interface
H I ©
comme une classe abstraite (impossible de l’instancier) dont :
EL
OU
toutes les méthodes sont abstraites
M
E L
tous les attributs sont constants
f
ch e
r : toute classe qui hérite d’une interface
doit impl©
A
un protocole, un contrat
émenter toutes ses méthodes
pouvant proposée une implémentation par défaut pour les
méthodes en utilisant le mot-clé default
Java
r e
Saisir IMiseEnForme dans Name
ch
Valider ©A
Java
Contenu généré de l’interface IMiseEnForme
package org.eclipse.interfaces;
H I ©
}
UEL
O
f E LM
ch r e
©A
Java
Contenu généré de l’interface IMiseEnForme
package org.eclipse.interfaces;
H I ©
}
EL
M OU
Définissons la signature de E
f L méthodes dans l’interface
deux
IMiseEnForme
c hr e
© A
package org.eclipse.interfaces;
Java
Java
Java
Le code généré
@Override
public void afficherNomMajuscule() {
// TODO Auto-generated method stub H I ©
UEL
O
}
f E LM
@Override
ch r e
©A
public void afficherPrenomMajuscule() {
// TODO Auto-generated method stub
Java
Java
Pour tester
Enseignant enseignant = new Enseignant(3, "green",
"jonas", 1700);
H I ©
enseignant.afficherNomMajuscule();
UEL
enseignant.afficherPrenomMajuscule(); O
f E LM
ch r e
©A
Java
Pour tester
Enseignant enseignant = new Enseignant(3, "green",
"jonas", 1700);
H I ©
enseignant.afficherNomMajuscule();
UEL
enseignant.afficherPrenomMajuscule(); O
f E LM
ch r e
©A
En exécutant, le résultat est :
GREEN
JONAS
Java
Définissons un attribut i dans l’interface IMiseEnForme
package org.eclipse.interfaces;
L M
f E
public void afficherNomMajuscule();
e
chr
public void afficherPrenomMajuscule();
A
} ©
Java
Définissons un attribut i dans l’interface IMiseEnForme
package org.eclipse.interfaces;
L M
f E
public void afficherNomMajuscule();
e
chr
public void afficherPrenomMajuscule();
A
} ©
Java
Il est possible de définir une implémentation par défaut pour une
méthode d’interface (depuis Java 8)
package org.eclipse.interfaces;
c h re
System.out.println("Doe");
© A void afficherPrenomMajuscule();
}
public
}
Java
Il est possible de définir une implémentation par défaut pour une
méthode d’interface (depuis Java 8)
package org.eclipse.interfaces;
c h re
System.out.println("Doe");
© A void afficherPrenomMajuscule();
}
public
}
Remarque
Les classes filles ne sont pas dans l’obligation d’implémenter les
méthodes d’une interface ayant une implémentation par défaut
H & H: Research and Training 78 / 84
Interface
Java
Remarques
L MO
car une interface n’implémente jamais de méthodes.
r e f E
A ch
©
Java
Remarques
L MO
car une interface n’implémente jamais de méthodes.
r e f E
A ch
©
Question : une interface est-elle vraiment une classe abstraite ?
Non, car toute classe abstraite hérite de la classe Object mais une
interface non
Java
Énumération
H I ©
EL
peut être déclarée, dans une fichier toute seule, dans une classe ou dans une interface
O U
f E LM
ch r e
©A
Java
Énumération
H I ©
EL
peut être déclarée, dans une fichier toute seule, dans une classe ou dans une interface
O U
f E LM
ch r e
©A
Pour créer une énumération sous Eclipse
Valider
Java
Le code généré
package org.eclipse.enums;
}
H I ©
UEL
O
f E LM
ch r e
©A
Java
Le code généré
package org.eclipse.enums;
}
H I ©
UEL
MO
Ajoutons des constantes à cette énumération Sport
L
f
package org.eclipse.enums;
r e E
A ch{
public enum Sport
©
FOOT,
RUGBY,
TENNIS,
CROSS_FIT,
BASKET
}
Java
Java
Java
On peut aussi définir une énumération comme une classe avec un ensemble
d’attributs et de méthodes
public enum Sport {
FOOT("foot", 1),
RUGBY("rugby", 7),
H I ©
TENNIS("tennis", 3),
UEL
CROSS_FIT("cross_fit", 4),
O
BASKET("basket", 6) ;
private final String nom;
f E LM
private final int code;
ch r e
©A
Sport(String nom, int code) {
this.nom = nom;
this.code = code;
}
public String getNom(){ return this.nom; }
public int getCode(){ return this.code; }
};
Java
Récupérer la valeur de l’attribut code de la constante BASKET
Sport sport = Sport.BASKET;
System.out.println(sport.getCode());
// affiche 6
H I ©
UEL
O
f E LM
ch r e
©A
Java
Récupérer la valeur de l’attribut code de la constante BASKET
Sport sport = Sport.BASKET;
System.out.println(sport.getCode());
// affiche 6
H I ©
EL
OU
Récupérer l’indice de la constante BASKET dans l’énumération
M
Sport sport = Sport.BASKET;L
r e f E
ch ici 4
System.out.println(sport.ordinal());
A
// affiche l’indice
©
Java
Récupérer la valeur de l’attribut code de la constante BASKET
Sport sport = Sport.BASKET;
System.out.println(sport.getCode());
// affiche 6
H I ©
EL
OU
Récupérer l’indice de la constante BASKET dans l’énumération
M
Sport sport = Sport.BASKET;L
r e f E
ch ici 4
System.out.println(sport.ordinal());
A
// affiche l’indice
©
Transformer l’énumération en tableau et récupérer l’élément d’indice 2
System.out.println(Sport.values()[2]);
// affiche Tennis