Académique Documents
Professionnel Documents
Culture Documents
et le langage Java
Master BBSG 2
Laurent Tichit
Département Informatique et Interactions, Faculté des Sciences de Luminy
Cours 2: L’encapsulation
L.
c Tichit, 2015-2016 POO et Java 1/1
L’encapsulation
L.
c Tichit, 2015-2016 POO et Java 2/1
L’encapsulation
L.
c Tichit, 2015-2016 POO et Java 2/1
L’encapsulation
L.
c Tichit, 2015-2016 POO et Java 2/1
L’encapsulation
L.
c Tichit, 2015-2016 POO et Java 2/1
L’encapsulation
L.
c Tichit, 2015-2016 POO et Java 3/1
L’encapsulation
L.
c Tichit, 2015-2016 POO et Java 3/1
L’encapsulation
sePlacer(a,b)
distance(p)
x()
toString()
y()
L.
c Tichit, 2015-2016 POO et Java 3/1
L’encapsulation
L.
c Tichit, 2015-2016 POO et Java 4/1
L’encapsulation
L.
c Tichit, 2015-2016 POO et Java 4/1
L’encapsulation
L.
c Tichit, 2015-2016 POO et Java 4/1
L’encapsulation
L.
c Tichit, 2015-2016 POO et Java 4/1
L’encapsulation
L.
c Tichit, 2015-2016 POO et Java 5/1
L’encapsulation
L.
c Tichit, 2015-2016 POO et Java 5/1
L’encapsulation
L.
c Tichit, 2015-2016 POO et Java 5/1
L’encapsulation
L.
c Tichit, 2015-2016 POO et Java 5/1
L’encapsulation
L.
c Tichit, 2015-2016 POO et Java 6/1
L’encapsulation
L.
c Tichit, 2015-2016 POO et Java 6/1
L’encapsulation
L.
c Tichit, 2015-2016 POO et Java 6/1
L’encapsulation
L.
c Tichit, 2015-2016 POO et Java 6/1
L’encapsulation
L.
c Tichit, 2015-2016 POO et Java 6/1
L’encapsulation
L.
c Tichit, 2015-2016 POO et Java 6/1
L’encapsulation
La classe Point
Fichier Point.java
class Point {
int x, y;
L.
c Tichit, 2015-2016 POO et Java 7/1
L’encapsulation
La classe Point
Fichier Point.java
class Point {
int x, y;
void sePlacer(int a, int b) {
validation de a et b
x = a;
y = b;
}
L.
c Tichit, 2015-2016 POO et Java 7/1
L’encapsulation
La classe Point
Fichier Point.java
class Point {
int x, y;
void sePlacer(int a, int b) {
validation de a et b
x = a;
y = b;
}
double module() {
return Math.sqrt(x * x + y * y);
}
L.
c Tichit, 2015-2016 POO et Java 7/1
L’encapsulation
La classe Point
Fichier Point.java
class Point {
int x, y;
void sePlacer(int a, int b) {
validation de a et b
x = a;
y = b;
}
double module() {
return Math.sqrt(x * x + y * y);
}
double distance(Point p) {
int dx = x - p.x;
int dy = y - p.y;
return Math.sqrt(dx * dx + dy * dy);
}
L.
c Tichit, 2015-2016 POO et Java 7/1
L’encapsulation
La classe Point
Fichier Point.java
class Point {
int x, y;
void sePlacer(int a, int b) {
validation de a et b
x = a;
y = b;
}
double module() {
return Math.sqrt(x * x + y * y);
}
double distance(Point p) {
int dx = x - p.x;
int dy = y - p.y;
return Math.sqrt(dx * dx + dy * dy);
}
public String toString() {
return "(" + x + ", " + y + ")";
}
...
}
L.
c Tichit, 2015-2016 POO et Java 7/1
L’encapsulation
La classe Point
Fichier Point.java
class Point {
int x, y;
void sePlacer(int a, int b) { sePlacer(a,b) distance(p)
validation de a et b
x = a; x
y = b; y
} module() toString()
double module() {
return Math.sqrt(x * x + y * y);
}
double distance(Point p) {
int dx = x - p.x;
int dy = y - p.y;
return Math.sqrt(dx * dx + dy * dy);
}
public String toString() {
return "(" + x + ", " + y + ")";
}
...
}
L.
c Tichit, 2015-2016 POO et Java 7/1
L’encapsulation
La classe Point
Fichier Point.java
class Point {
int x, y;
void sePlacer(int a, int b) { sePlacer(a,b) distance(p)
validation de a et b
x = a; x
y = b; y
} module() toString()
double module() {
return Math.sqrt(x * x + y * y);
}
double distance(Point p) {
int dx = x - p.x;
int dy = y - p.y;
return Math.sqrt(dx * dx + dy * dy);
}
public String toString() { Noter que le qualifieur static
return "(" + x + ", " + y + ")"; a disparu.
}
...
}
L.
c Tichit, 2015-2016 POO et Java 7/1
L’encapsulation
Fichier TestPoint.java
class TestPoint {
public static void main(String[] args) {
Point a, b;
L.
c Tichit, 2015-2016 POO et Java 8/1
L’encapsulation
Fichier TestPoint.java
class TestPoint {
public static void main(String[] args) {
Point a, b;
a = new Point();
b = new Point();
L.
c Tichit, 2015-2016 POO et Java 8/1
L’encapsulation
Fichier TestPoint.java
class TestPoint {
public static void main(String[] args) {
Point a, b;
a = new Point();
b = new Point();
a.sePlacer(10, 0);
b.sePlacer(13, 4);
L.
c Tichit, 2015-2016 POO et Java 8/1
L’encapsulation
Fichier TestPoint.java
class TestPoint {
public static void main(String[] args) {
Point a, b;
a = new Point();
b = new Point();
a.sePlacer(10, 0);
b.sePlacer(13, 4);
System.out.println(a.module());
System.out.println(a.distance(b));
System.out.println(a.toString());
System.out.println(b);
}
}
L.
c Tichit, 2015-2016 POO et Java 8/1
L’encapsulation
Fichier TestPoint.java
class TestPoint {
public static void main(String[] args) { a
Point a, b;
10
a = new Point(); 0
b = new Point();
a.sePlacer(10, 0);
b.sePlacer(13, 4); b
System.out.println(a.module()); 13
System.out.println(a.distance(b)); 4
System.out.println(a.toString());
System.out.println(b);
}
}
L.
c Tichit, 2015-2016 POO et Java 8/1
L’encapsulation
Fichier TestPoint.java
class TestPoint {
public static void main(String[] args) { a
Point a, b;
10
a = new Point(); 0
b = new Point();
a.sePlacer(10, 0);
b.sePlacer(13, 4); b
System.out.println(a.module()); 13
System.out.println(a.distance(b)); 4
System.out.println(a.toString());
System.out.println(b);
}
}
Exécution :
10.0
5.0
(10, 0)
(13, 4)
L.
c Tichit, 2015-2016 POO et Java 8/1
L’encapsulation
class Point {
int x, y;
void sePlacer(int a, int b) {...}
double longueur() {...}
... la classe
}
... des objets
Point a = new Point();
Point b = new Point();
...
L.
c Tichit, 2015-2016 POO et Java 9/1
L’encapsulation
class Point {
int x, y;
void sePlacer(int a, int b) {...}
double longueur() {...}
... la classe
}
... des objets
Point a = new Point();
Point b = new Point();
...
L.
c Tichit, 2015-2016 POO et Java 9/1
L’encapsulation
class Point {
int x, y;
void sePlacer(int a, int b) {...}
double longueur() {...}
... la classe
}
... des objets
Point a = new Point();
Point b = new Point();
...
L.
c Tichit, 2015-2016 POO et Java 9/1
L’encapsulation
class Point {
int x, y;
void sePlacer(int a, int b) {...}
double longueur() {...}
... la classe
}
... des objets
Point a = new Point();
Point b = new Point();
...
L.
c Tichit, 2015-2016 POO et Java 9/1
L’encapsulation
class Point {
int x, y;
void sePlacer(int a, int b) {...}
double longueur() {...}
... la classe
}
... des objets
Point a = new Point();
Point b = new Point();
...
L.
c Tichit, 2015-2016 POO et Java 9/1
L’encapsulation
L.
c Tichit, 2015-2016 POO et Java 10 / 1
L’encapsulation
L.
c Tichit, 2015-2016 POO et Java 10 / 1
L’encapsulation
L.
c Tichit, 2015-2016 POO et Java 10 / 1
L’encapsulation
L.
c Tichit, 2015-2016 POO et Java 10 / 1
L’encapsulation
L.
c Tichit, 2015-2016 POO et Java 10 / 1
L’encapsulation
L.
c Tichit, 2015-2016 POO et Java 11 / 1
L’encapsulation
L.
c Tichit, 2015-2016 POO et Java 11 / 1
L’encapsulation
L.
c Tichit, 2015-2016 POO et Java 11 / 1
L’encapsulation
L.
c Tichit, 2015-2016 POO et Java 11 / 1
L’encapsulation
L.
c Tichit, 2015-2016 POO et Java 11 / 1
L’encapsulation
L.
c Tichit, 2015-2016 POO et Java 11 / 1
L’encapsulation
Un exercice de style
Fichier Point.java
class Point {
int x, y;
...
double distance(Point p) { // méthode d’instance
int dx = x - p.x;
int dy = y - p.y;
return Math.sqrt(dx * dx + dy * dy);
}
static double distance(Point u, Point v) { // méthode de classe
int dx = u.x - v.x;
int dy = u.y - v.y;
return Math.sqrt(dx * dx + dy * dy);
}
}
L.
c Tichit, 2015-2016 POO et Java 12 / 1
L’encapsulation
Un exercice de style
Fichier Point.java
class Point {
int x, y;
...
double distance(Point p) { // méthode d’instance
int dx = x - p.x;
int dy = y - p.y;
return Math.sqrt(dx * dx + dy * dy);
}
static double distance(Point u, Point v) { // méthode de classe
int dx = u.x - v.x;
int dy = u.y - v.y;
return Math.sqrt(dx * dx + dy * dy);
}
}
L.
c Tichit, 2015-2016 POO et Java 12 / 1
L’encapsulation
dans une méthode d’instance, l’objet à travers lequel on appelle la méthode est désigné
implicitement :
double distance(Point p) {
int dx = x - p.x;
int dy = y - p.y;
return Math.sqrt(dx * dx + dy * dy);
}
L.
c Tichit, 2015-2016 POO et Java 13 / 1
L’encapsulation
dans une méthode d’instance, l’objet à travers lequel on appelle la méthode est désigné
implicitement :
double distance(Point p) {
int dx = x - p.x;
int dy = y - p.y;
return Math.sqrt(dx * dx + dy * dy);
}
L.
c Tichit, 2015-2016 POO et Java 13 / 1
L’encapsulation
dans une méthode d’instance, l’objet à travers lequel on appelle la méthode est désigné
implicitement :
double distance(Point p) {
int dx = x - p.x;
int dy = y - p.y;
return Math.sqrt(dx * dx + dy * dy);
}
L.
c Tichit, 2015-2016 POO et Java 13 / 1
L’encapsulation
double distance(Point p) {
int dx = x - p.x;
int dy = y - p.y;
return Math.sqrt(dx * dx + dy * dy);
}
static double distance(Point p, Point q) {
return p.distance(q);
}
L.
c Tichit, 2015-2016 POO et Java 14 / 1
L’encapsulation
double distance(Point p) {
int dx = x - p.x;
int dy = y - p.y;
return Math.sqrt(dx * dx + dy * dy);
}
static double distance(Point p, Point q) {
return p.distance(q);
}
L.
c Tichit, 2015-2016 POO et Java 14 / 1
L’encapsulation
Constructeurs
L.
c Tichit, 2015-2016 POO et Java 15 / 1
L’encapsulation
Constructeurs
L.
c Tichit, 2015-2016 POO et Java 15 / 1
L’encapsulation
Constructeurs
L.
c Tichit, 2015-2016 POO et Java 15 / 1
L’encapsulation
Constructeurs
L.
c Tichit, 2015-2016 POO et Java 15 / 1
L’encapsulation
Fichier Point.java
class Point {
int x, y;
Point(int a, int b) {
validation de a et b
x = a;
y = b;
}
Point(int a) {
validation de a
x = a;
y = 0;
}
Point() {
x = 0;
y = 0;
}
...
}
L.
c Tichit, 2015-2016 POO et Java 16 / 1
L’encapsulation
Fichier Point.java
class Point {
Emplois respectifs :
int x, y;
Point(int a, int b) {
validation de a et b
Point p = new Point(u, v);
...
x = a;
Point q = new Point(w);
y = b;
...
}
Point r = new Point();
Point(int a) {
validation de a
x = a;
y = 0;
}
Point() {
x = 0;
y = 0;
}
...
}
L.
c Tichit, 2015-2016 POO et Java 16 / 1
L’encapsulation
Fichier Point.java
class Point {
Emplois respectifs :
int x, y;
Point(int a, int b) {
validation de a et b
Point p = new Point(u, v);
...
x = a;
Point q = new Point(w);
y = b;
...
}
Point r = new Point();
Point(int a) {
validation de a
x = a;
y = 0;
A retenir : la création d’un objet
}
se fait toujours
Point() {
x = 0; par l’opérateur new
y = 0; associé à l’appel d’un constructeur
}
...
}
L.
c Tichit, 2015-2016 POO et Java 16 / 1
L’encapsulation
Fichier Point.java
class Point { Emplois respectifs :
int x, y;
Point(int a, int b) { Point p = new Point(u, v);
validation de a et b ...
x = a; Point q = new Point(w);
y = b; ...
} Point r = new Point();
Point(int a) {
this(a, 0);
}
Point() { Attention :
this(0, 0); this(arguments); doit être la
L.
c Tichit, 2015-2016 POO et Java 17 / 1
L’encapsulation
L.
c Tichit, 2015-2016 POO et Java 18 / 1
L’encapsulation
L.
c Tichit, 2015-2016 POO et Java 18 / 1
L’encapsulation
L.
c Tichit, 2015-2016 POO et Java 18 / 1
L’encapsulation
L.
c Tichit, 2015-2016 POO et Java 18 / 1
L’encapsulation
Fichier Recipient.java
class Recipient {
float hauteur;
float largeur = 40;
float niveau;
...
Recipient(float niveau) {
this.niveau = niveau;
}
...
}
Emploi : rec
0 hauteur
Recipient rec 40 largeur
= new Recipient(25); 25 niveau
L.
c Tichit, 2015-2016 POO et Java 19 / 1
L’encapsulation
L.
c Tichit, 2015-2016 POO et Java 20 / 1
L’encapsulation
(a,b)
Les objets peuvent avoir (ont souvent) pour membres
d’autres objets
Exemple : un objet Rectangle est défini par deux
objets Point
(c,d)
L.
c Tichit, 2015-2016 POO et Java 20 / 1
L’encapsulation
(a,b)
Les objets peuvent avoir (ont souvent) pour membres
d’autres objets
Exemple : un objet Rectangle est défini par deux
objets Point
(c,d)
Bonne nouvelle : il n’y a pas de problème particulier pour l’initialisation :
Fichier Rectangle.java
class Rectangle {
Point coinNO, coinSE;
L.
c Tichit, 2015-2016 POO et Java 20 / 1
L’encapsulation
(a,b)
Les objets peuvent avoir (ont souvent) pour membres
d’autres objets
Exemple : un objet Rectangle est défini par deux
objets Point
(c,d)
Bonne nouvelle : il n’y a pas de problème particulier pour l’initialisation :
Fichier Rectangle.java
class Rectangle {
Point coinNO, coinSE;
L.
c Tichit, 2015-2016 POO et Java 20 / 1
L’encapsulation
(à propos...)
Mise en garde sur une erreur grave que le compilateur ne peut pas déceler
Fichier Rectangle.java
class Rectangle {
Point coinNO, coinSE;
L.
c Tichit, 2015-2016 POO et Java 21 / 1
L’encapsulation
(à propos...)
Mise en garde sur une erreur grave que le compilateur ne peut pas déceler
Fichier Rectangle.java
class Rectangle {
Point coinNO, coinSE;
L.
c Tichit, 2015-2016 POO et Java 21 / 1
L’encapsulation
(à propos...)
Mise en garde sur une erreur grave que le compilateur ne peut pas déceler
Fichier Rectangle.java
class Rectangle {
Point coinNO, coinSE;
L.
c Tichit, 2015-2016 POO et Java 21 / 1
L’encapsulation
(à propos...)
Mise en garde sur une erreur grave que le compilateur ne peut pas déceler
Fichier Rectangle.java
class Rectangle {
Point coinNO, coinSE;
L.
c Tichit, 2015-2016 POO et Java 21 / 1
L’encapsulation
créées lors de la création des objets (new), les variables d’instance peuvent être initialisées
dans les constructeurs
L.
c Tichit, 2015-2016 POO et Java 22 / 1
L’encapsulation
créées lors de la création des objets (new), les variables d’instance peuvent être initialisées
dans les constructeurs
les variables de classe sont créées au lancement du programme ; comment les initialiser ?
L.
c Tichit, 2015-2016 POO et Java 22 / 1
L’encapsulation
créées lors de la création des objets (new), les variables d’instance peuvent être initialisées
dans les constructeurs
les variables de classe sont créées au lancement du programme ; comment les initialiser ?
autant que possible, utiliser des affectations
L.
c Tichit, 2015-2016 POO et Java 22 / 1
L’encapsulation
créées lors de la création des objets (new), les variables d’instance peuvent être initialisées
dans les constructeurs
les variables de classe sont créées au lancement du programme ; comment les initialiser ?
autant que possible, utiliser des affectations
L.
c Tichit, 2015-2016 POO et Java 22 / 1
L’encapsulation
L.
c Tichit, 2015-2016 POO et Java 23 / 1
L’encapsulation
L.
c Tichit, 2015-2016 POO et Java 24 / 1
L’encapsulation
L.
c Tichit, 2015-2016 POO et Java 24 / 1
L’encapsulation
L.
c Tichit, 2015-2016 POO et Java 24 / 1
L’encapsulation
L.
c Tichit, 2015-2016 POO et Java 24 / 1
L’encapsulation
L.
c Tichit, 2015-2016 POO et Java 24 / 1
L’encapsulation
L.
c Tichit, 2015-2016 POO et Java 24 / 1
L’encapsulation
L.
c Tichit, 2015-2016 POO et Java 24 / 1
L’encapsulation
L.
c Tichit, 2015-2016 POO et Java 24 / 1
L’encapsulation
Fichier Point.java
class Point {
private int x, y;
L.
c Tichit, 2015-2016 POO et Java 25 / 1
L’encapsulation
Fichier Point.java
class Point {
private int x, y;
L.
c Tichit, 2015-2016 POO et Java 25 / 1
L’encapsulation
Fichier Point.java
class Point {
private int x, y;
L.
c Tichit, 2015-2016 POO et Java 25 / 1
L’encapsulation
Fichier Point.java
class Point {
private int x, y;
L.
c Tichit, 2015-2016 POO et Java 25 / 1
L’encapsulation
Fichier Point.java
class Point {
private int x, y;
L.
c Tichit, 2015-2016 POO et Java 25 / 1
L’encapsulation
Fichier Point.java
class Point {
private int x, y;
L.
c Tichit, 2015-2016 POO et Java 25 / 1
L’encapsulation
Fichier Point.java
class Point {
private int x, y;
L.
c Tichit, 2015-2016 POO et Java 25 / 1
L’encapsulation
A propos d’accesseurs
L.
c Tichit, 2015-2016 POO et Java 26 / 1
L’encapsulation
A propos d’accesseurs
L.
c Tichit, 2015-2016 POO et Java 26 / 1
L’encapsulation
L.
c Tichit, 2015-2016 POO et Java 27 / 1
L’encapsulation
L.
c Tichit, 2015-2016 POO et Java 27 / 1
L’encapsulation
L.
c Tichit, 2015-2016 POO et Java 27 / 1
L’encapsulation
Encapsulation
Fichier Point.java
class Point {
private int r, t;
L.
c Tichit, 2015-2016 POO et Java 28 / 1
L’encapsulation
Encapsulation
Fichier Point.java
class Point {
private int r, t;
L.
c Tichit, 2015-2016 POO et Java 28 / 1
L’encapsulation
les classes avec visibilité par défaut (i.e. non qualifiées public) sont accessibles
uniquement depuis les classes de leur propre paquetage
package mesAffaires.outils;
class Machin {
...
}
L.
c Tichit, 2015-2016 POO et Java 29 / 1
L’encapsulation
les classes avec visibilité par défaut (i.e. non qualifiées public) sont accessibles
uniquement depuis les classes de leur propre paquetage
package mesAffaires.outils;
class Machin {
...
}
les classes qualifiées public sont accessibles depuis les classes de tous les
paquetages
package mesAffaires.outils;
public class Truc {
...
}
L.
c Tichit, 2015-2016 POO et Java 29 / 1
L’encapsulation
les classes avec visibilité par défaut (i.e. non qualifiées public) sont accessibles
uniquement depuis les classes de leur propre paquetage
package mesAffaires.outils;
class Machin {
...
}
les classes qualifiées public sont accessibles depuis les classes de tous les
paquetages
package mesAffaires.outils;
public class Truc {
...
}
L.
c Tichit, 2015-2016 POO et Java 29 / 1
L’encapsulation
Variables finales
Une variable (d’instance ou de classe) qualifiée final ne doit pas changer de valeur
variable d’instance : reçoit une valeur à la construction et n’en change plus
variable de classe : se comporte comme les constantes des autres langages
L.
c Tichit, 2015-2016 POO et Java 30 / 1
L’encapsulation
Variables finales
Une variable (d’instance ou de classe) qualifiée final ne doit pas changer de valeur
variable d’instance : reçoit une valeur à la construction et n’en change plus
variable de classe : se comporte comme les constantes des autres langages
Fichier Point.java
public class Point {
private int x, y;
L.
c Tichit, 2015-2016 POO et Java 30 / 1
L’encapsulation
Variables finales
Une variable (d’instance ou de classe) qualifiée final ne doit pas changer de valeur
variable d’instance : reçoit une valeur à la construction et n’en change plus
variable de classe : se comporte comme les constantes des autres langages
Fichier Point.java
public class Point {
private int x, y;
private static int nombreDePoints = 0;
L.
c Tichit, 2015-2016 POO et Java 30 / 1
L’encapsulation
Variables finales
Une variable (d’instance ou de classe) qualifiée final ne doit pas changer de valeur
variable d’instance : reçoit une valeur à la construction et n’en change plus
variable de classe : se comporte comme les constantes des autres langages
Fichier Point.java
public class Point {
private int x, y;
private static int nombreDePoints = 0;
private final int rang;
L.
c Tichit, 2015-2016 POO et Java 30 / 1
L’encapsulation
Variables finales
Une variable (d’instance ou de classe) qualifiée final ne doit pas changer de valeur
variable d’instance : reçoit une valeur à la construction et n’en change plus
variable de classe : se comporte comme les constantes des autres langages
Fichier Point.java
public class Point {
private int x, y;
private static int nombreDePoints = 0;
private final int rang;
private static final int MAX POINTS = 1000;
L.
c Tichit, 2015-2016 POO et Java 30 / 1
L’encapsulation
Variables finales
Une variable (d’instance ou de classe) qualifiée final ne doit pas changer de valeur
variable d’instance : reçoit une valeur à la construction et n’en change plus
variable de classe : se comporte comme les constantes des autres langages
Fichier Point.java
public class Point {
private int x, y;
private static int nombreDePoints = 0;
private final int rang;
private static final int MAX POINTS = 1000;
L.
c Tichit, 2015-2016 POO et Java 30 / 1
L’encapsulation
L.
c Tichit, 2015-2016 POO et Java 31 / 1
L’encapsulation
2 3
x y
L.
c Tichit, 2015-2016 POO et Java 31 / 1
L’encapsulation
L.
c Tichit, 2015-2016 POO et Java 32 / 1
L’encapsulation
2 3
L.
c Tichit, 2015-2016 POO et Java 32 / 1
L’encapsulation
2 3
2 3 2 3
L.
c Tichit, 2015-2016 POO et Java 32 / 1
L’encapsulation
L.
c Tichit, 2015-2016 POO et Java 33 / 1
L’encapsulation
2 3 2 3
L.
c Tichit, 2015-2016 POO et Java 33 / 1
L’encapsulation
2 3 2 3
la bonne comparaison
if ( p.equals(q) )
System.out.println("egaux");
...
L.
c Tichit, 2015-2016 POO et Java 33 / 1
L’encapsulation
L.
c Tichit, 2015-2016 POO et Java 34 / 1
L’encapsulation
L.
c Tichit, 2015-2016 POO et Java 34 / 1
L’encapsulation
L.
c Tichit, 2015-2016 POO et Java 34 / 1