Académique Documents
Professionnel Documents
Culture Documents
Les classes
Riadh BOUSLIMI
bouslimi.riadh@gmail.com
Programmation orientée objet
Plan
Méthode d’instance ou méthode de classe
static
final
Constructeurs
Types énumérés
Les modificateurs
Expressions booléennes et égalité
2
Programmation orientée objet
Calculatrice
Calculatrice.java
class Calculatrice {
double add(double v1, double v2) {
return v1 + v2;
}
double mul(double v1, double v2) {
return v1 * v2;
}
double inv(double v) {
return 1 / v;
}
} État : ?
3
Programmation orientée objet
4
Programmation orientée objet
5
Programmation orientée objet
6
Programmation orientée objet
Un champ qui est à la fois static et final correspond à une vraie
constante et doit être initialisé à la déclaration.
7
Programmation orientée objet
8
Programmation orientée objet
Plan
Méthode d’instance ou méthode de classe
Constructeurs
Initialisation des champs
Surcharge du constructeur
Surcharge des paramètres
Mots clés this. et this(
Constructeur par défaut
Types énumérés
Les modificateurs
Expressions booléennes et égalité
10
Programmation orientée objet
double norme() {
return reelle * reelle + imaginaire * imaginaire;
}
}
Initialisation par défaut des champs
Valeurs numériques (byte, short, int, long, float, double) : 0
Booléens (boolean) : false
Références : null
Usage
Complexe c1 = new Complexe();
11
Programmation orientée objet
Constructeur
class Complexe {
double reelle, imaginaire; // valeur initiale ?
12
Programmation orientée objet
13
Programmation orientée objet
Constructeur : surcharge
class Complexe {
double reelle, imaginaire; // valeur initiale ?
14
Programmation orientée objet
Constructeur : this()
class Complexe {
double reelle, imaginaire; // valeur initiale ?
15
Programmation orientée objet
Instantiation et constructeur
Si un ou plusieurs constructeurs explicites
Il faut obligatoirement utiliser un de ces constructeurs
• Complexe c1 = new Complexe(0, 1);
• Complexe c2 = new Complexe(5);
• Complexe c3 = new Complexe(); // interdit
16
Programmation orientée objet
17
Programmation orientée objet
Plan
Méthode d’instance ou méthode de classe
Constructeurs
Types énumérés
Les modificateurs
Expressions booléennes et égalité
18
Programmation orientée objet
Types énumérés
Introduits par le JDK 5.0
Les types énumérés ressemblent à des classes
Leurs valeurs ressemblent à des champs statiques
Le compilateur construit des helpers (constructeurs, affichage, …)
Peut avoir des constructeurs, méthodes et champs
Exemple
[Couleur.java] [Valeur.java]
enum Couleur { enum Valeur {
TREFLE, CARREAU, CŒUR, PIQUE; SEPT, HUIT, NEUF, DIX,
} VALET, DAME, ROI, AS;
}
[Test.java]
class Test {
static public void main(String[] args) {
Couleur c = Couleur.TREFLE;
Valeur v = Valeur.AS; > java Test
System.out.println(v + " " + c); AS TREFLE
}
}
19
Programmation orientée objet
Couleur de cartes
Sans les énumérés
[Couleur.java]
class Couleur {
int valeur;
Couleur(int v) {
this.valeur = v;
}
static final Couleur TREFLE = new Couleur(1);
static final Couleur PIQUE = new Couleur(2);
static final Couleur CŒUR = new Couleur(3);
static final Couleur CARREAU = new Couleur(4);
}
[Test.java]
class Test {
static public void main(String[] args) {
Couleur c = Couleur.TREFLE;
System.out.println(c);
}
}
20
Programmation orientée objet
Couleur de cartes
Sans les énumérés
[Couleur.java]
class Couleur {
int valeur;
Couleur(int v) {
this.valeur = v;
}
static final Couleur TREFLE = new Couleur(1),
PIQUE = new Couleur(2),
CŒUR = new Couleur(3),
CARREAU = new Couleur(4);
}
[Test.java]
class Test {
static public void main(String[] args) { > java Test
Couleur c = Couleur.TREFLE;
Couleur@740355a4
System.out.println(c);
}
}
21
Programmation orientée objet
Couleur de cartes
class Couleur { // [Couleur.java]
int valeur;
Couleur(int v) { this.valeur = v; }
static final Couleur TREFLE = new Couleur(1), PIQUE = new Couleur(2),
CŒUR = new Couleur(3), CARREAU = new Couleur(4);
String nom() {
if (valeur == 1) return "Trèfle";
if (valeur == 2) return "Pique";
if (valeur == 3) return "Coeur";
if (valeur == 4) return "Carreau";
return "Erreur!";
}
}
22
Programmation orientée objet
Méthode toString()
class Couleur { // [Couleur.java]
int valeur;
Couleur(int v) { this.valeur = v; }
static final Couleur TREFLE = new Couleur(1), PIQUE = new Couleur(2),
CŒUR = new Couleur(3), CARREAU = new Couleur(4);
23
Programmation orientée objet
Méthode toString()
class Couleur { // [Couleur.java]
int valeur;
Couleur(int v) { this.valeur = v; }
static final Couleur TREFLE = new Couleur(1), PIQUE = new
Couleur(2),
CŒUR = new Couleur(3), CARREAU = new Couleur(4);
public String toString() {
switch (valeur) {
case 1:
return "Trèfle";
case 2: Ici, on n’a pas besoin d’instruction break car
return
case 3:
"Pique";
return interrompt immédiatement la méthode
return "Coeur"; en renvoyant la valeur.
case 4:
return "Carreau";
default:
return "Erreur!";
}
}
24
Programmation orientée objet
25
Programmation orientée objet
switch/case
class Valeur { // [Valeur.java]
int valeur;
Valeur(int v) { valeur = v; }
static final Valeur SEPT = new Valeur(7), HUIT = new Valeur(8), NEUF = new Valeur(9),
DIX = new Valeur(10), VALET = new Valeur(11), DAME = new
Valeur(12),
ROI = new Valeur(13), AS = new Valeur(14);
26
Programmation orientée objet
switch/case
class Valeur { // [Valeur.java]
int valeur;
Valeur(int v) { valeur = v; }
static final Valeur SEPT = new Valeur(7), HUIT = new Valeur(8), NEUF = new Valeur(9),
DIX = new Valeur(10), VALET = new Valeur(11), DAME = new
Valeur(12),
ROI = new Valeur(13), AS = new Valeur(14);
int maValeur() {
int v = 0;
switch (valeur) {
case 11: case 12: case 13:
v = valeur – 9;
case 14:
v = valeur – 3;
default:
}
return v;
}
}
27
Programmation orientée objet
switch/case
class Valeur { // [Valeur.java]
int valeur;
Valeur(int v) { valeur = v; }
static final Valeur SEPT = new Valeur(7), HUIT = new Valeur(8), NEUF = new Valeur(9),
DIX = new Valeur(10), VALET = new Valeur(11), DAME = new
Valeur(12),
ROI = new Valeur(13), AS = new Valeur(14);
int maValeur() {
int v = 0;
switch (valeur) {
case 11: case 12: case 13:
v = valeur – 9;
break;
case 14:
v = valeur – 3;
break;
default:
}
return v;
}
} 28
Programmation orientée objet
Rappels : constructeurs
class Valeur { // [Valeur.java]
int ordre;
String nom;
Valeur(int o) {
this(o, o + "");
}
Valeur(int o, String nom) {
ordre = o;
this.nom = nom;
}
static final Valeur SEPT = new Valeur(7), HUIT = new Valeur(8), NEUF = new
Valeur(9), DIX = new Valeur(10), VALET = new Valeur(11, "Valet"),
DAME = new Valeur(12, "Dame"), ROI = new Valeur(13,
"Roi"), AS = new Valeur(14, "As");
29
Programmation orientée objet
Rappels : final
class Valeur { // [Valeur.java] Valeur.AS = new Valeur(1);
int ordre;
Valeur.AS.ordre = 1;
String nom;
Valeur(int o) { Valeur.AS.estSupérieurA(Valeur.ROI);
this(o, o + ""); false!
}
Valeur(int o, String nom) {
ordre = o;
this.nom = nom;
}
static final Valeur SEPT = new Valeur(7), HUIT = new Valeur(8), NEUF = new
Valeur(9), DIX = new Valeur(10), VALET = new Valeur(11, "Valet"),
DAME = new Valeur(12, "Dame"), ROI = new Valeur(13,
"Roi"), AS = new Valeur(14, "As");
39
Programmation orientée objet
Le modificateur private
class Valeur { // [Valeur.java] Valeur.AS = new Valeur(1);
private int ordre;
private String nom; Valeur.AS.ordre = 1;
Valeur(int o) {
Valeur.AS.estSupérieurA(Valeur.ROI);
this(o, o + ""); true!
}
Valeur(int o, String nom) {
ordre = o;
this.nom = nom;
}
static final Valeur SEPT = new Valeur(7), HUIT = new Valeur(8), NEUF = new
Valeur(9), DIX = new Valeur(10), VALET = new Valeur(11, "Valet"),
DAME = new Valeur(12, "Dame"), ROI = new Valeur(13,
"Roi"), AS = new Valeur(14, "As");
31
Programmation orientée objet
Le modificateur private
class Valeur { // [Valeur.java] class X {
private int ordre; static public void main(String[] args)
private String nom; { Valeur v1 = new Valeur(1);
Valeur v2 = Valeur.AS;
private Valeur(int o) {
}
this(o, o + ""); }
}
private Valeur(int o, String nom) {
ordre = o;
this.nom = nom;
}
static final Valeur SEPT = new Valeur(7), HUIT = new Valeur(8), NEUF = new
Valeur(9), DIX = new Valeur(10), VALET = new Valeur(11, "Valet"),
DAME = new Valeur(12, "Dame"), ROI = new Valeur(13,
"Roi"), AS = new Valeur(14, "As");
32
Programmation orientée objet
Les modificateurs
Le modificateur public
Membres (champ, méthode, constructeur) accessibles de n’importe où
Le modificateur private
Membres accessibles seulement depuis le bloc de déclaration de classe
class MaClasse {
// bloc de déclaration de classe
}
Pas de modificateur
Le plus souvent => package
• Membres accessibles depuis n’importe quel bloc d’une classe appartement au même
paquetage
Parfois public ou private selon le contexte
33
Programmation orientée objet
Paquetage
Un paquetage est un ensemble de classes regroupées en une unité logique,
c’est l’équivalent d’une bibliothèque de classes.
On peut déclarer un paquetage en début de fichier, les paquetages sont
hiérarchisés.
package monPaquetage.monSousPaquetage;
class MaClasse { ... }
Une classe dans un paquetage a accès aux classes, méthodes et champs avec
droit de paquetage du même paquetage.
Depuis un autre paquetage, seuls les classes, méthodes et champs public sont
accessibles.
package monPaquetage.monSousPaquetage;
class A { ... } // seulement accessible depuis le même paquetage
public class B { ... } // accessible depuis n’importe quel paquetage
34
Programmation orientée objet
35
Programmation orientée objet
36
Programmation orientée objet
38
Programmation orientée objet
boolean estNoire() {
switch (this) {
case TREFLE:
case PIQUE:
return true;
default:
return false;
}
}
}
Dans un switch, il n’est pas nécessaire de préfixer les membres de
l’énumération avec son nom.
39
Programmation orientée objet
Plan
Méthode d’instance ou méthode de classe
Constructeurs
Types énumérés
Les modificateurs
Expressions booléennes et égalité
40
Programmation orientée objet
Conditions booléennes
6 opérateurs de comparaison (int, long, float, double)
< inférieur
<= inférieur ou égal
> supérieur
>= supérieur ou égal
!= différent
== égal
4 opérateurs logiques (boolean)
&& et logique (différent de &)
|| ou logique (différent de |)
^ ou exclusif logique
! non logique
41
Programmation orientée objet
Egalité de littéraux
Entiers, booléens, caractères
if (x == y – 2) …
42
Programmation orientée objet
Egalité de références
Le test d’égalité entre références ne compare pas les objets !
Couleur c1 = new Couleur(1);
Couleur c2 = new Couleur(1); Couleur
c1 == c2 ? valeur : int
c1 != c2
c1 c2
: Couleur : Couleur
valeur = 1 valeur = 1
43
Programmation orientée objet
Egalité de références
Le test d’égalité entre références ne compare pas les objets !
Couleur c3 = new Couleur(1);
Couleur c4 = c3; Couleur
c3 == c4 valeur : int
c3 c4
: Couleur
valeur = 1
44
Programmation orientée objet
Comparaison en profondeur
Créer une méthode qui compare
class Couleur {
int valeur;
Couleur(int v) { valeur = v; }
boolean estLaMemeCouleurQue(Couleur c) {
if (this.valeur == c.valeur)
return true;
else
return false;
}
}
Usage
if (c1.estLaMemeCouleurQue(c2)) ...
45
Programmation orientée objet
Comparaison en profondeur
Créer une méthode qui compare
class Couleur {
int valeur;
Couleur(int v) { valeur = v; }
boolean estLaMemeCouleurQue(Couleur c) {
return (this.valeur == c.valeur);
}
}
Usage
if (c1.estLaMemeCouleurQue(c2)) ...
46
Programmation orientée objet
Comparaison en profondeur
Créer une méthode qui compare
class Couleur {
private int valeur;
Couleur(int v) { valeur = v; }
boolean estLaMemeCouleurQue(Couleur c) {
return (this.valeur == c.valeur);
}
}
Usage
if (c1.estLaMemeCouleurQue(c2)) ...
47
Programmation orientée objet
s1 s2
: String : String
= "rouge" = "rouge"
48