java les classes et les objets -...
TRANSCRIPT
![Page 1: Java Les Classes et les Objets - univ-brest.frpagesperso.univ-brest.fr/~bounceur/cours_pdf/java/poo...Java transmet les informations Par valeurs pour les types primitifs Par références](https://reader031.vdocuments.fr/reader031/viewer/2022013100/61177217db6ac60ad31d84cd/html5/thumbnails/1.jpg)
Java
Les Classes et les Objets Ahcène Bounceur
![Page 2: Java Les Classes et les Objets - univ-brest.frpagesperso.univ-brest.fr/~bounceur/cours_pdf/java/poo...Java transmet les informations Par valeurs pour les types primitifs Par références](https://reader031.vdocuments.fr/reader031/viewer/2022013100/61177217db6ac60ad31d84cd/html5/thumbnails/2.jpg)
Attributs et Méthodes
Les Attributs usuels public class A {
private int n ;
private float y ;
}
public class Test {
...
A a1 = new A() , a2 = new A() ;
...
}
a
n
y b
n
y
![Page 3: Java Les Classes et les Objets - univ-brest.frpagesperso.univ-brest.fr/~bounceur/cours_pdf/java/poo...Java transmet les informations Par valeurs pour les types primitifs Par références](https://reader031.vdocuments.fr/reader031/viewer/2022013100/61177217db6ac60ad31d84cd/html5/thumbnails/3.jpg)
Attributs et Méthodes
Les Attributs de classe "static" public class B {
public static int n ;
private float y ;
}
public class Test {
...
B b1 = new B() , b2 = new B() ;
...
}
a y
b
n
y
![Page 4: Java Les Classes et les Objets - univ-brest.frpagesperso.univ-brest.fr/~bounceur/cours_pdf/java/poo...Java transmet les informations Par valeurs pour les types primitifs Par références](https://reader031.vdocuments.fr/reader031/viewer/2022013100/61177217db6ac60ad31d84cd/html5/thumbnails/4.jpg)
Attributs et Méthodes
Les Attributs static
◦ Comme les attributs static n'appartiennent pas à
chaque objet, c'est-à-dire que tous les objets
partagent le même attribut, il est donc possible
de modifier ou de récupérer sa valeur sans
passer pes les accesseurs (ou les mutateurs) :
public class Test {
...
B b1 = new B() , b2 = new B() ;
int n1 = b1.n ; // déconseillé
int n2 = b2.n ; // déconseillé
int n3 = B.n ; // recommandé
...
}
![Page 5: Java Les Classes et les Objets - univ-brest.frpagesperso.univ-brest.fr/~bounceur/cours_pdf/java/poo...Java transmet les informations Par valeurs pour les types primitifs Par références](https://reader031.vdocuments.fr/reader031/viewer/2022013100/61177217db6ac60ad31d84cd/html5/thumbnails/5.jpg)
Attributs et Méthodes
Les méthodes (de classe) public class A {
public static int n ; // attribut de classe
private float y ; // attribut usuel
public static void f() {
// on ne peux pas manipuler dans cette méthode
// les attributs usuels (y), mais il est
// possible d’accéder aux attributs de
// classes (n)
}
}
public class Test {
...
A a = new A() ;
a.f() ; // déconseillé
A.f() ; // recommandé
...
}
![Page 6: Java Les Classes et les Objets - univ-brest.frpagesperso.univ-brest.fr/~bounceur/cours_pdf/java/poo...Java transmet les informations Par valeurs pour les types primitifs Par références](https://reader031.vdocuments.fr/reader031/viewer/2022013100/61177217db6ac60ad31d84cd/html5/thumbnails/6.jpg)
Attributs et Méthodes
Exemples de la classe Math : double x = 4.5 ;
double y = 2.;
Math.abs(x); // valeur absolue de x
Math.pow(x, y); // x puissance y
Math.sqrt(x); // racine carrée de x
Math.max(x, y); // maximum entre x et y
Math.sin(y * Math.PI); // sinus de y
![Page 7: Java Les Classes et les Objets - univ-brest.frpagesperso.univ-brest.fr/~bounceur/cours_pdf/java/poo...Java transmet les informations Par valeurs pour les types primitifs Par références](https://reader031.vdocuments.fr/reader031/viewer/2022013100/61177217db6ac60ad31d84cd/html5/thumbnails/7.jpg)
Initialisation des attributs de classe
La déclaration d'un objet avant toute
instanciation ne permet pas d'initialiser les
attributs usuels. Cependant, elle initialise les
attributs de classe.
Les attributs de classe ne peuvent pas être
initialisés dans un constructeur.
![Page 8: Java Les Classes et les Objets - univ-brest.frpagesperso.univ-brest.fr/~bounceur/cours_pdf/java/poo...Java transmet les informations Par valeurs pour les types primitifs Par références](https://reader031.vdocuments.fr/reader031/viewer/2022013100/61177217db6ac60ad31d84cd/html5/thumbnails/8.jpg)
Initialisation des attributs de classe
Exemple : public class A {
public static int n = 10 ;
public static int p ;
public static void f() {...}
}
public class Test {
...
A a ; // l’objet a n’est pas encore instancié, mais
// l’attribut n est déjà initialisé
// (explicitement) à 10 et p à 0
// (implicitement).
...
}
![Page 9: Java Les Classes et les Objets - univ-brest.frpagesperso.univ-brest.fr/~bounceur/cours_pdf/java/poo...Java transmet les informations Par valeurs pour les types primitifs Par références](https://reader031.vdocuments.fr/reader031/viewer/2022013100/61177217db6ac60ad31d84cd/html5/thumbnails/9.jpg)
Bloc d’initialisation static
Exemple : initialisation des variables de
classes dans un bloc :
public class A {
public static int n ;
public static int [] t;
static {
n = 10;
t = new int [n];
for (int i = 0; i < n; i++) {
t[i] = i ;
}
}
}
![Page 10: Java Les Classes et les Objets - univ-brest.frpagesperso.univ-brest.fr/~bounceur/cours_pdf/java/poo...Java transmet les informations Par valeurs pour les types primitifs Par références](https://reader031.vdocuments.fr/reader031/viewer/2022013100/61177217db6ac60ad31d84cd/html5/thumbnails/10.jpg)
Surdéfinition des méthodes
Surdéfinition : on l’appelle aussi
Surcharge (ou overload) des méthodes
Pouvoir déclarer plusieurs méthodes en
utilisant le même nom. Ce qui les diffère,
c’est leurs arguments (en type et en
nombre)
![Page 11: Java Les Classes et les Objets - univ-brest.frpagesperso.univ-brest.fr/~bounceur/cours_pdf/java/poo...Java transmet les informations Par valeurs pour les types primitifs Par références](https://reader031.vdocuments.fr/reader031/viewer/2022013100/61177217db6ac60ad31d84cd/html5/thumbnails/11.jpg)
Surdéfinition des méthodes
Exemple du point :
◦ Supposons que nous avons 3 manières de
déplacement d’un point :
1. En lui spécifiant les nouvelles coordonnées
2. En lui spécifiant un seul paramètre qui permettra de
le déplacer horizontalement
3. En le déplaçant horizontalement d’une unité quand
aucun paramètre n’est spécifié
![Page 12: Java Les Classes et les Objets - univ-brest.frpagesperso.univ-brest.fr/~bounceur/cours_pdf/java/poo...Java transmet les informations Par valeurs pour les types primitifs Par références](https://reader031.vdocuments.fr/reader031/viewer/2022013100/61177217db6ac60ad31d84cd/html5/thumbnails/12.jpg)
Surdéfinition des méthodes
Exemple du point (suite) : public class Point {
private int x ; // abscisse
private int y ; // ordonnee
...
public void deplacer(int dx, int dy) {
x += dx ;
y += dy ;
}
public void deplacer(int dx) {
x += dx ;
}
public void deplacer() {
x += 1 ;
}
...
}
![Page 13: Java Les Classes et les Objets - univ-brest.frpagesperso.univ-brest.fr/~bounceur/cours_pdf/java/poo...Java transmet les informations Par valeurs pour les types primitifs Par références](https://reader031.vdocuments.fr/reader031/viewer/2022013100/61177217db6ac60ad31d84cd/html5/thumbnails/13.jpg)
Surdéfinition des méthodes
Exemple du point (suite) : on peut aussi
écrire public class Point {
private int x ; // abscisse
private int y ; // ordonnee
...
public void deplacer(int dx, int dy) {
x += dx ;
y += dy ;
}
public void deplacer(int dx) {
deplacer(dx, 0) ;
}
public void deplacer() {
deplacer(1) ;
}
...
}
![Page 14: Java Les Classes et les Objets - univ-brest.frpagesperso.univ-brest.fr/~bounceur/cours_pdf/java/poo...Java transmet les informations Par valeurs pour les types primitifs Par références](https://reader031.vdocuments.fr/reader031/viewer/2022013100/61177217db6ac60ad31d84cd/html5/thumbnails/14.jpg)
Surdéfinition des méthodes
Attention : ambigüité !!! public class A {
private byte x ;
private int y ;
...
public void methode(byte a, int b) { // 1
x = a ;
y = b ;
}
public void methode(int b, byte a) { // 2
x = a ;
y = b ;
}
...
}
![Page 15: Java Les Classes et les Objets - univ-brest.frpagesperso.univ-brest.fr/~bounceur/cours_pdf/java/poo...Java transmet les informations Par valeurs pour les types primitifs Par références](https://reader031.vdocuments.fr/reader031/viewer/2022013100/61177217db6ac60ad31d84cd/html5/thumbnails/15.jpg)
Surdéfinition des méthodes
Attention : ambigüité !!! (suite) public class Test_A {
...
public void m() {
A a = new A() ;
byte v1 ;
int v2 ;
a.methode(v1, v2) ; // juste : méthode 1
a.methode(v2, v1) ; // juste : méthode 2
a.methode(v2, v2) ; // ici, les deux
// constructeurs peuvent
// être utilisés :
// ambigüité
}
...
}
![Page 16: Java Les Classes et les Objets - univ-brest.frpagesperso.univ-brest.fr/~bounceur/cours_pdf/java/poo...Java transmet les informations Par valeurs pour les types primitifs Par références](https://reader031.vdocuments.fr/reader031/viewer/2022013100/61177217db6ac60ad31d84cd/html5/thumbnails/16.jpg)
Surdéfinition des méthodes
Attention : ambigüité !!! (suite)
◦ Si dans cette situation il faut utiliser le deuxième
constructeur, il faut caster ou transformer le
deuxième paramètre en int
// Cast :
a.methode((int) v2, v2) ;
// une autre solution :
a.methode( 1*v2, v2) ;
![Page 17: Java Les Classes et les Objets - univ-brest.frpagesperso.univ-brest.fr/~bounceur/cours_pdf/java/poo...Java transmet les informations Par valeurs pour les types primitifs Par références](https://reader031.vdocuments.fr/reader031/viewer/2022013100/61177217db6ac60ad31d84cd/html5/thumbnails/17.jpg)
Surdéfinition des constructeurs
Les constructeurs peuvent être surdéfinis
de la même manière que les méthodes
![Page 18: Java Les Classes et les Objets - univ-brest.frpagesperso.univ-brest.fr/~bounceur/cours_pdf/java/poo...Java transmet les informations Par valeurs pour les types primitifs Par références](https://reader031.vdocuments.fr/reader031/viewer/2022013100/61177217db6ac60ad31d84cd/html5/thumbnails/18.jpg)
Échange d’informations avec les
méthodes Java transmet les informations
◦ Par valeurs pour les types primitifs
◦ Par références pour les objets
Exemple :
◦ On va ajouter l’attribut couleur à la classe Point
◦ On va essayer de permuter les coordonnées
d’un point (on ajoute la méthode coordPermut)
◦ On va essayer de permuter deux points (on
ajoute la méthode permut)
![Page 19: Java Les Classes et les Objets - univ-brest.frpagesperso.univ-brest.fr/~bounceur/cours_pdf/java/poo...Java transmet les informations Par valeurs pour les types primitifs Par références](https://reader031.vdocuments.fr/reader031/viewer/2022013100/61177217db6ac60ad31d84cd/html5/thumbnails/19.jpg)
Échange d’informations avec les
méthodes L’attribut couleur public class Point {
private int x ; // abscisse
private int y ; // ordonnee
private String couleur ; // couleur
...
public Point(String couleur, int x, int y) {...}
public int getX() {...}
public void setX() {...}
public int getY() {...}
public void setY() {...}
public String getCouleur() {...}
public void setCouleur() {...}
public void afficher() {
System.out.println(couleur+" : "+x+" , "+y) ;
}
...
}
![Page 20: Java Les Classes et les Objets - univ-brest.frpagesperso.univ-brest.fr/~bounceur/cours_pdf/java/poo...Java transmet les informations Par valeurs pour les types primitifs Par références](https://reader031.vdocuments.fr/reader031/viewer/2022013100/61177217db6ac60ad31d84cd/html5/thumbnails/20.jpg)
Échange d’informations avec les
méthodes Permutation des coordonnées d’un point
◦ On utilisera deux méthodes, une sans arguments
et l’autre avec arguments public class Point {
private int x ; // abscisse
private int y ; // ordonnee
private String couleur ; // couleur
...
public void coordPermut() {
int s = x ;
x = y ;
y = s ;
}
public void coordPermut(int xP, int yP) {
int s = xP ;
xP = yP ;
yP = s ;
}
...
}
![Page 21: Java Les Classes et les Objets - univ-brest.frpagesperso.univ-brest.fr/~bounceur/cours_pdf/java/poo...Java transmet les informations Par valeurs pour les types primitifs Par références](https://reader031.vdocuments.fr/reader031/viewer/2022013100/61177217db6ac60ad31d84cd/html5/thumbnails/21.jpg)
Échange d’informations avec les
méthodes Permutation des coordonnées d’un point
◦ Test 1
public class TestPermut {
public static void main( String [] args ) {
MonPoint p = new MonPoint(0, 1) ;
p.afficher() ;
System.out.println("Permutation : ");
p.coordPermut(p.getX(), p.getY()) ;
p.afficher() ;
}
} Point rouge : 0 , 1
Permutation :
Point rouge : 0 , 1
![Page 22: Java Les Classes et les Objets - univ-brest.frpagesperso.univ-brest.fr/~bounceur/cours_pdf/java/poo...Java transmet les informations Par valeurs pour les types primitifs Par références](https://reader031.vdocuments.fr/reader031/viewer/2022013100/61177217db6ac60ad31d84cd/html5/thumbnails/22.jpg)
Échange d’informations avec les
méthodes Permutation des coordonnées d’un point
◦ Test 2
public class TestPermut {
public static void main( String [] args ) {
MonPoint p = new MonPoint(0, 1) ;
p.afficher() ;
System.out.println("Permutation : ");
p.coordPermut() ;
p.afficher() ;
}
} Point rouge : 0 , 1
Permutation :
Point rouge : 1 , 0
![Page 23: Java Les Classes et les Objets - univ-brest.frpagesperso.univ-brest.fr/~bounceur/cours_pdf/java/poo...Java transmet les informations Par valeurs pour les types primitifs Par références](https://reader031.vdocuments.fr/reader031/viewer/2022013100/61177217db6ac60ad31d84cd/html5/thumbnails/23.jpg)
Échange d’informations avec les
méthodes Permutation de deux points
◦ On utilisera la méthode permut (version 1)
public class Point {
private int x ; // abscisse
private int y ; // ordonnee
private String couleur ; // couleur
...
public void permut(MonPoint p) {
int tX = x ;
int tY = y ;
x = p.getX() ;
y = p.getY() ;
p.setX(tX);
p.setY(tY);
}
...
}
![Page 24: Java Les Classes et les Objets - univ-brest.frpagesperso.univ-brest.fr/~bounceur/cours_pdf/java/poo...Java transmet les informations Par valeurs pour les types primitifs Par références](https://reader031.vdocuments.fr/reader031/viewer/2022013100/61177217db6ac60ad31d84cd/html5/thumbnails/24.jpg)
Échange d’informations avec les
méthodes Permutation de deux points
◦ On utilisera la méthode permut (version 2)
public class Point {
private int x ; // abscisse
private int y ; // ordonnee
private String couleur ; // couleur
...
public void permut(MonPoint p) {
MonPoint tP = new MonPoint(couleur, x, y) ;
setX(p.getX());
setY(p.getY());
p.setX(tP.getX());
p.setY(tP.getY());
}
...
}
![Page 25: Java Les Classes et les Objets - univ-brest.frpagesperso.univ-brest.fr/~bounceur/cours_pdf/java/poo...Java transmet les informations Par valeurs pour les types primitifs Par références](https://reader031.vdocuments.fr/reader031/viewer/2022013100/61177217db6ac60ad31d84cd/html5/thumbnails/25.jpg)
Échange d’informations avec les
méthodes Permutation de deux points
◦ Test
public class TestPermut {
public static void main( String [] args ) {
MonPoint p1 = new MonPoint("rouge", 0, 1);
MonPoint p2 = new MonPoint("bleu " , 2, 3);
p1.afficher();
p2.afficher();
System.out.println("Permutation : ");
p1.permut(p2);
p1.afficher();
p2.afficher();
}
} Point rouge : 0 , 1
Point bleu : 2 , 3
Permutation :
Point rouge : 2 , 3
Point bleu : 0 , 1
![Page 26: Java Les Classes et les Objets - univ-brest.frpagesperso.univ-brest.fr/~bounceur/cours_pdf/java/poo...Java transmet les informations Par valeurs pour les types primitifs Par références](https://reader031.vdocuments.fr/reader031/viewer/2022013100/61177217db6ac60ad31d84cd/html5/thumbnails/26.jpg)
Échange d’informations avec les
méthodes Permutation de deux points :
◦ Dans ce dernier code, il n’y a pas eu une réelle
permutation de points, c’est juste une simulation
d’une permutation.
◦ Ce qui a été permuté, ce sont les valeurs des
attributs des points
![Page 27: Java Les Classes et les Objets - univ-brest.frpagesperso.univ-brest.fr/~bounceur/cours_pdf/java/poo...Java transmet les informations Par valeurs pour les types primitifs Par références](https://reader031.vdocuments.fr/reader031/viewer/2022013100/61177217db6ac60ad31d84cd/html5/thumbnails/27.jpg)
Échange d’informations avec les
méthodes Permutation de deux points :
◦ Illustration : avant la permutation
0
1 p1
x
y 2
3 p2
x
y
rouge bleu couleur couleur
![Page 28: Java Les Classes et les Objets - univ-brest.frpagesperso.univ-brest.fr/~bounceur/cours_pdf/java/poo...Java transmet les informations Par valeurs pour les types primitifs Par références](https://reader031.vdocuments.fr/reader031/viewer/2022013100/61177217db6ac60ad31d84cd/html5/thumbnails/28.jpg)
Échange d’informations avec les
méthodes Permutation de deux points :
◦ Illustration : avant la permutation
2
3 p1
x
y 0
1 p2
x
y
bleu rouge couleur couleur
![Page 29: Java Les Classes et les Objets - univ-brest.frpagesperso.univ-brest.fr/~bounceur/cours_pdf/java/poo...Java transmet les informations Par valeurs pour les types primitifs Par références](https://reader031.vdocuments.fr/reader031/viewer/2022013100/61177217db6ac60ad31d84cd/html5/thumbnails/29.jpg)
Échange d’informations avec les
méthodes Permutation de deux points
◦ On utilisera la méthode permut (version 3)
◦ On va utiliser une nouvelle classe Util pour
pouvoir utiliser une méthode static permut
public class Util {
public static void permut(MonPoint p1, MonPoint p2) {
MonPoint tP ;
tP = p1 ;
p1 = p2 ;
p2 = tP ;
p1.afficher();
p2.afficher();
}
}
![Page 30: Java Les Classes et les Objets - univ-brest.frpagesperso.univ-brest.fr/~bounceur/cours_pdf/java/poo...Java transmet les informations Par valeurs pour les types primitifs Par références](https://reader031.vdocuments.fr/reader031/viewer/2022013100/61177217db6ac60ad31d84cd/html5/thumbnails/30.jpg)
Échange d’informations avec les
méthodes Conclusion :
◦ Testez le dernier permut …
![Page 31: Java Les Classes et les Objets - univ-brest.frpagesperso.univ-brest.fr/~bounceur/cours_pdf/java/poo...Java transmet les informations Par valeurs pour les types primitifs Par références](https://reader031.vdocuments.fr/reader031/viewer/2022013100/61177217db6ac60ad31d84cd/html5/thumbnails/31.jpg)
Échange d’informations avec les
méthodes Permutation de deux points
◦ On utilisera la méthode permut (version 4)
public class Util {
public static void permut(MonPoint p1, MonPoint p2) {
MonPoint tP ;
tP = p1 ;
p1 = p2 ;
p2 = tP ;
p1.afficher();
p2.afficher();
}
}
![Page 32: Java Les Classes et les Objets - univ-brest.frpagesperso.univ-brest.fr/~bounceur/cours_pdf/java/poo...Java transmet les informations Par valeurs pour les types primitifs Par références](https://reader031.vdocuments.fr/reader031/viewer/2022013100/61177217db6ac60ad31d84cd/html5/thumbnails/32.jpg)
Échange d’informations avec les
méthodes Exercices :
◦ Écrire le code qui permet de comparer deux
points !
◦ Écrire le code qui permet de cloner un point :
ajouter la méthode cloner()
◦ Écrire le code qui permet de créer un point à
partir d’un autre : constructeur ayant comme
argument un point
![Page 33: Java Les Classes et les Objets - univ-brest.frpagesperso.univ-brest.fr/~bounceur/cours_pdf/java/poo...Java transmet les informations Par valeurs pour les types primitifs Par références](https://reader031.vdocuments.fr/reader031/viewer/2022013100/61177217db6ac60ad31d84cd/html5/thumbnails/33.jpg)
L’autoréférence : this
This permet de spécifier l’objet courant :
◦ Revenons à la classe Point public class Point {
private int x ; // abscisse
private int y ; // ordonnee
...
public Point(int abs, int ord) {
x = abs ;
y = ord ;
}
public void deplacer(int dx, int dy) {
x += dx ;
y += dy ;
}
public void deplacer(int dx) {
deplacer(dx, 0) ;
}
...
}
![Page 34: Java Les Classes et les Objets - univ-brest.frpagesperso.univ-brest.fr/~bounceur/cours_pdf/java/poo...Java transmet les informations Par valeurs pour les types primitifs Par références](https://reader031.vdocuments.fr/reader031/viewer/2022013100/61177217db6ac60ad31d84cd/html5/thumbnails/34.jpg)
L’autoréférence : this
La vraie forme de la classe Point
public class Point {
private int x ; // abscisse
private int y ; // ordonnee
...
public Point(int abs, int ord) {
this.x = abs ;
this.y = ord ;
}
public void deplacer(int dx, int dy) {
this.x += dx ;
this.y += dy ;
}
public void deplacer(int dx) {
this.deplacer(dx, 0) ;
}
...
}
![Page 35: Java Les Classes et les Objets - univ-brest.frpagesperso.univ-brest.fr/~bounceur/cours_pdf/java/poo...Java transmet les informations Par valeurs pour les types primitifs Par références](https://reader031.vdocuments.fr/reader031/viewer/2022013100/61177217db6ac60ad31d84cd/html5/thumbnails/35.jpg)
L’autoréférence : this
Un this obligatoire !!
public class Point {
private int x ; // abscisse
private int y ; // ordonnee
...
public Point(int x, int y) {
this.x = x ;
this.y = y ;
}
public void deplacer(int dx, int dy) {
this.x += dx ;
this.y += dy ;
}
public void deplacer(int dx) {
this.deplacer(dx, 0) ;
}
...
}
![Page 36: Java Les Classes et les Objets - univ-brest.frpagesperso.univ-brest.fr/~bounceur/cours_pdf/java/poo...Java transmet les informations Par valeurs pour les types primitifs Par références](https://reader031.vdocuments.fr/reader031/viewer/2022013100/61177217db6ac60ad31d84cd/html5/thumbnails/36.jpg)
L’autoréférence : this
this pour appeler un constructeur !
public class Point {
private int x ; // abscisse
private int y ; // ordonnee
...
public Point(int abs, int ord) {
this.x = abs ;
this.y = ord ;
}
public Point() {
this(0, 0); // x = 0; y = 0;
}
...
}
![Page 37: Java Les Classes et les Objets - univ-brest.frpagesperso.univ-brest.fr/~bounceur/cours_pdf/java/poo...Java transmet les informations Par valeurs pour les types primitifs Par références](https://reader031.vdocuments.fr/reader031/viewer/2022013100/61177217db6ac60ad31d84cd/html5/thumbnails/37.jpg)
L’autoréférence : this
this pour appeler un constructeur !
public class Point {
private int x ; // abscisse
private int y ; // ordonnee
...
public Point(int abs, int ord) {
this.x = abs ;
this.y = ord ;
}
public Point() {
... // l’appel d’un constructeur doit être
// fait en premier, donc, on ne peut
// rien mettre ici avant un this
this(0, 0); // x = 0; y = 0;
}
...
}
![Page 38: Java Les Classes et les Objets - univ-brest.frpagesperso.univ-brest.fr/~bounceur/cours_pdf/java/poo...Java transmet les informations Par valeurs pour les types primitifs Par références](https://reader031.vdocuments.fr/reader031/viewer/2022013100/61177217db6ac60ad31d84cd/html5/thumbnails/38.jpg)
Méthodes récursives
public class A {
public static long fact(long n) {
if (n > 1)
return (n * fact(n-1)) ;
else
return 1 ;
}
}
public class Test_A {
public static void main (String [] args) {
long x = A.fact(8) ;
System.out.println("Factorielle de 8 = "+x) ;
}
}
![Page 39: Java Les Classes et les Objets - univ-brest.frpagesperso.univ-brest.fr/~bounceur/cours_pdf/java/poo...Java transmet les informations Par valeurs pour les types primitifs Par références](https://reader031.vdocuments.fr/reader031/viewer/2022013100/61177217db6ac60ad31d84cd/html5/thumbnails/39.jpg)
Objets membres
On appelle objet membre un objet faisant
parti des attributs d’une classe
Ou bien, lorsqu’un attribut n’est pas un type
primitif mais un objet, ce dernier s’appellera
objet membre
![Page 40: Java Les Classes et les Objets - univ-brest.frpagesperso.univ-brest.fr/~bounceur/cours_pdf/java/poo...Java transmet les informations Par valeurs pour les types primitifs Par références](https://reader031.vdocuments.fr/reader031/viewer/2022013100/61177217db6ac60ad31d84cd/html5/thumbnails/40.jpg)
Objets membres
Exemple :
◦ Soit l’objet Cercle ayant comme attribut, le
rayon r, de type float et le centre de type Point.
◦ Nous allons essayer d’écrire la méthode
deplacer() qui permet de déplacer le cercle.
![Page 41: Java Les Classes et les Objets - univ-brest.frpagesperso.univ-brest.fr/~bounceur/cours_pdf/java/poo...Java transmet les informations Par valeurs pour les types primitifs Par références](https://reader031.vdocuments.fr/reader031/viewer/2022013100/61177217db6ac60ad31d84cd/html5/thumbnails/41.jpg)
Objets membres
Exemple :
◦ On rappellera la classe Point
public class Point {
private int x ; private int y ;
public Point(int x, int y) {
this.x = x ; this.y = y ;
}
public void getX() {return x ;}
public void getY() {return y ;}
public int setX(int x) {this.x = x ; }
public int setY(int y) {this.y = y ; }
public void deplacer(int dx, int dy) {
x += dx ; y += dy ;
}
public void afficher() {
System.out.println("Point ("+x+", "+y+")");
}
}
![Page 42: Java Les Classes et les Objets - univ-brest.frpagesperso.univ-brest.fr/~bounceur/cours_pdf/java/poo...Java transmet les informations Par valeurs pour les types primitifs Par références](https://reader031.vdocuments.fr/reader031/viewer/2022013100/61177217db6ac60ad31d84cd/html5/thumbnails/42.jpg)
Objets membres
Exemple :
◦ La forme de la classe Cercle
public class Cercle {
private float r ;
private Point c ;
public Cercle(int x, int y, float r) {...}
public Cercle(Point c, float r) {...}
public void afficher() {...}
public void deplacer() {...}
}
![Page 43: Java Les Classes et les Objets - univ-brest.frpagesperso.univ-brest.fr/~bounceur/cours_pdf/java/poo...Java transmet les informations Par valeurs pour les types primitifs Par références](https://reader031.vdocuments.fr/reader031/viewer/2022013100/61177217db6ac60ad31d84cd/html5/thumbnails/43.jpg)
Objets membres
Exemple :
◦ Constructeur 1
public class Cercle {
private float r ;
private Point c ;
public Cercle(int x, int y, float r) {
c = new Point(x, y) ;
this.r = r ;
}
...
}
![Page 44: Java Les Classes et les Objets - univ-brest.frpagesperso.univ-brest.fr/~bounceur/cours_pdf/java/poo...Java transmet les informations Par valeurs pour les types primitifs Par références](https://reader031.vdocuments.fr/reader031/viewer/2022013100/61177217db6ac60ad31d84cd/html5/thumbnails/44.jpg)
Objets membres
Exemple :
◦ Constructeur 2
public class Cercle {
private float r ;
private Point c ;
...
public Cercle(Point c, float r) {
this.c = c ;
this.r = r ;
}
...
}
![Page 45: Java Les Classes et les Objets - univ-brest.frpagesperso.univ-brest.fr/~bounceur/cours_pdf/java/poo...Java transmet les informations Par valeurs pour les types primitifs Par références](https://reader031.vdocuments.fr/reader031/viewer/2022013100/61177217db6ac60ad31d84cd/html5/thumbnails/45.jpg)
Objets membres
Exemple :
◦ Lé méthode afficher : trouver l’intrus !
public class Cercle {
private float r ;
private Point c ;
...
public void afficher() {
System.out.print("Cercle ("+c) ;
System.out.println(", "+r+")") ;
}
...
}
Remarque : l’écriture println(c) peut être utilisée telle quelle,
à condition, que la méthode toString de la classe Point soit
définie. Ce n’est pas le but de ce cours. Donc, nous la
considérons ici comme erreur.
![Page 46: Java Les Classes et les Objets - univ-brest.frpagesperso.univ-brest.fr/~bounceur/cours_pdf/java/poo...Java transmet les informations Par valeurs pour les types primitifs Par références](https://reader031.vdocuments.fr/reader031/viewer/2022013100/61177217db6ac60ad31d84cd/html5/thumbnails/46.jpg)
Objets membres
Exemple :
◦ Lé méthode afficher : trouver l’intrus !
public class Cercle {
private float r ;
private Point c ;
...
public void afficher() {
System.out.print("Cercle ("+c.afficher()) ;
System.out.println(", "+r+")") ;
}
...
}
![Page 47: Java Les Classes et les Objets - univ-brest.frpagesperso.univ-brest.fr/~bounceur/cours_pdf/java/poo...Java transmet les informations Par valeurs pour les types primitifs Par références](https://reader031.vdocuments.fr/reader031/viewer/2022013100/61177217db6ac60ad31d84cd/html5/thumbnails/47.jpg)
Objets membres
Exemple :
◦ La méthode déplacer : trouver l’intrus !
public class Cercle {
private float r ;
private Point c ;
...
public void deplacer(int dx, int dy) {
(c.x)+= dx ;
(c.y)+= dy ;
}
}
![Page 48: Java Les Classes et les Objets - univ-brest.frpagesperso.univ-brest.fr/~bounceur/cours_pdf/java/poo...Java transmet les informations Par valeurs pour les types primitifs Par références](https://reader031.vdocuments.fr/reader031/viewer/2022013100/61177217db6ac60ad31d84cd/html5/thumbnails/48.jpg)
Objets membres
Exemple :
◦ La méthode déplacer : trouver l’intrus !
public class Cercle {
private float r ;
private Point c ;
...
public void deplacer(int dx, int dy) {
(c.x)+= dx ;
(c.y)+= dy ;
}
}
![Page 49: Java Les Classes et les Objets - univ-brest.frpagesperso.univ-brest.fr/~bounceur/cours_pdf/java/poo...Java transmet les informations Par valeurs pour les types primitifs Par références](https://reader031.vdocuments.fr/reader031/viewer/2022013100/61177217db6ac60ad31d84cd/html5/thumbnails/49.jpg)
Objets membres
Exemple :
◦ La méthode déplacer : solution 1
public class Cercle {
private float r ;
private Point c ;
...
public void deplacer(int dx, int dy) {
c.setX(c.getX()+dx) ;
c.setY(c.getY()+dy) ;
}
}
![Page 50: Java Les Classes et les Objets - univ-brest.frpagesperso.univ-brest.fr/~bounceur/cours_pdf/java/poo...Java transmet les informations Par valeurs pour les types primitifs Par références](https://reader031.vdocuments.fr/reader031/viewer/2022013100/61177217db6ac60ad31d84cd/html5/thumbnails/50.jpg)
Objets membres
Exemple :
◦ La méthode déplacer : solution 2
public class Cercle {
private float r ;
private Point c ;
...
public void deplacer(int dx, int dy) {
c.deplacer(dx, dy) ;
}
}
![Page 51: Java Les Classes et les Objets - univ-brest.frpagesperso.univ-brest.fr/~bounceur/cours_pdf/java/poo...Java transmet les informations Par valeurs pour les types primitifs Par références](https://reader031.vdocuments.fr/reader031/viewer/2022013100/61177217db6ac60ad31d84cd/html5/thumbnails/51.jpg)
Classes internes
Introduite par la version java 1.1
Principalement pour simplifier l’écriture du
code de la programmation événementielle
public class C { // classe usuelle ou externe
...
class I1 { // classe interne
...
}
class I2 { // classe interne
...
}
...
}
![Page 52: Java Les Classes et les Objets - univ-brest.frpagesperso.univ-brest.fr/~bounceur/cours_pdf/java/poo...Java transmet les informations Par valeurs pour les types primitifs Par références](https://reader031.vdocuments.fr/reader031/viewer/2022013100/61177217db6ac60ad31d84cd/html5/thumbnails/52.jpg)
Classes internes
On peut écrire :
public class C { // classe usuelle ou externe
public void f() {
I i = new I() ;
}
class I { // classe interne
...
}
...
}
![Page 53: Java Les Classes et les Objets - univ-brest.frpagesperso.univ-brest.fr/~bounceur/cours_pdf/java/poo...Java transmet les informations Par valeurs pour les types primitifs Par références](https://reader031.vdocuments.fr/reader031/viewer/2022013100/61177217db6ac60ad31d84cd/html5/thumbnails/53.jpg)
Classes internes
On peut écrire :
public class C { // classe usuelle ou externe
private I i1 ;
private I i2 ;
...
class I { // classe interne
...
}
...
}
![Page 54: Java Les Classes et les Objets - univ-brest.frpagesperso.univ-brest.fr/~bounceur/cours_pdf/java/poo...Java transmet les informations Par valeurs pour les types primitifs Par références](https://reader031.vdocuments.fr/reader031/viewer/2022013100/61177217db6ac60ad31d84cd/html5/thumbnails/54.jpg)
Classes internes locales
public class C { // classe usuelle ou externe
...
public void f() {
int x ;
class I { // classe interne
...
}
I i1 = new I() ;
}
...
}
![Page 55: Java Les Classes et les Objets - univ-brest.frpagesperso.univ-brest.fr/~bounceur/cours_pdf/java/poo...Java transmet les informations Par valeurs pour les types primitifs Par références](https://reader031.vdocuments.fr/reader031/viewer/2022013100/61177217db6ac60ad31d84cd/html5/thumbnails/55.jpg)
Classes internes statiques (static)
public class C { // classe usuelle ou externe
...
public static class I { // classe interne
...
}
...
}
C.I c1 = new C.I() ;
![Page 56: Java Les Classes et les Objets - univ-brest.frpagesperso.univ-brest.fr/~bounceur/cours_pdf/java/poo...Java transmet les informations Par valeurs pour les types primitifs Par références](https://reader031.vdocuments.fr/reader031/viewer/2022013100/61177217db6ac60ad31d84cd/html5/thumbnails/56.jpg)
Les paquetages (package)
La notion de paquetage correspond à une regroupement logique sous un identificateur commun d’un ensemble de classes.
Las paquetages sont caractérisés par un nom (simple identificateur ou suite d’identificateurs suivis d’un point)
◦ Exemples :
MesClasses
Utilitaires.Mathematiques
Utilitaires.Physiques
![Page 57: Java Les Classes et les Objets - univ-brest.frpagesperso.univ-brest.fr/~bounceur/cours_pdf/java/poo...Java transmet les informations Par valeurs pour les types primitifs Par références](https://reader031.vdocuments.fr/reader031/viewer/2022013100/61177217db6ac60ad31d84cd/html5/thumbnails/57.jpg)
Les paquetages (package)
La notion de paquetage est une notion
logique. Elle a un seul rapport partiel avec la
localisation effective des classes ou des
fichiers au sein de répertoires
![Page 58: Java Les Classes et les Objets - univ-brest.frpagesperso.univ-brest.fr/~bounceur/cours_pdf/java/poo...Java transmet les informations Par valeurs pour les types primitifs Par références](https://reader031.vdocuments.fr/reader031/viewer/2022013100/61177217db6ac60ad31d84cd/html5/thumbnails/58.jpg)
Les paquetages (package)
Exemple de deux classes C1 et C2 qui font
partie d’un paquetage Utilitaire
package Utilitaire ;
public class C1 {
...
public void m() {...}
...
}
package Utilitaire ;
public class C2 {
...
public void m() {...}
...
}
![Page 59: Java Les Classes et les Objets - univ-brest.frpagesperso.univ-brest.fr/~bounceur/cours_pdf/java/poo...Java transmet les informations Par valeurs pour les types primitifs Par références](https://reader031.vdocuments.fr/reader031/viewer/2022013100/61177217db6ac60ad31d84cd/html5/thumbnails/59.jpg)
Les paquetages (package)
Comment utiliser la classe C1 du paquetage
Utilitaire ? Solution 1
package Utilitaire ;
public class C1 {
...
public void m() {...}
...
}
public class Test { // solution 1
public static void main (String [] args ) {
Utilitaire.C1 c = new Utilitaire.C1() ;
c.m() ;
}
}
![Page 60: Java Les Classes et les Objets - univ-brest.frpagesperso.univ-brest.fr/~bounceur/cours_pdf/java/poo...Java transmet les informations Par valeurs pour les types primitifs Par références](https://reader031.vdocuments.fr/reader031/viewer/2022013100/61177217db6ac60ad31d84cd/html5/thumbnails/60.jpg)
Les paquetages (package)
Comment utiliser la classe C1 du paquetage
Utilitaire ? Solution 2
package Utilitaire ;
public class C1 {
...
public void m() {...}
...
}
import Utilitaire.C1 ;
public class Test { // solution 2
public static void main (String [] args ) {
C1 c = new C1() ;
c.m() ;
}
}
![Page 61: Java Les Classes et les Objets - univ-brest.frpagesperso.univ-brest.fr/~bounceur/cours_pdf/java/poo...Java transmet les informations Par valeurs pour les types primitifs Par références](https://reader031.vdocuments.fr/reader031/viewer/2022013100/61177217db6ac60ad31d84cd/html5/thumbnails/61.jpg)
Les paquetages (package)
Comment utiliser toutes les classes du
paquetage Utilitaire ?
import Utilitaire.* ;
public class Test {
public static void main (String [] args ) {
C1 c1 = new C1() ;
C2 c2 = new C2() ;
c1.m() ;
c2.m() ;
}
}
![Page 62: Java Les Classes et les Objets - univ-brest.frpagesperso.univ-brest.fr/~bounceur/cours_pdf/java/poo...Java transmet les informations Par valeurs pour les types primitifs Par références](https://reader031.vdocuments.fr/reader031/viewer/2022013100/61177217db6ac60ad31d84cd/html5/thumbnails/62.jpg)
Conclusion importante
int x
float y
char c
… // Les attributs
m1() m2()
m3()
m4()
m5() m6()
…
m7()
int x
float y
char c
… // Les attributs
m1() m2()
m3()
m4()
m5() m6()
…
m7()
messages
objet
objet
méthodes méthodes
![Page 63: Java Les Classes et les Objets - univ-brest.frpagesperso.univ-brest.fr/~bounceur/cours_pdf/java/poo...Java transmet les informations Par valeurs pour les types primitifs Par références](https://reader031.vdocuments.fr/reader031/viewer/2022013100/61177217db6ac60ad31d84cd/html5/thumbnails/63.jpg)
Merci de votre attention