63
Java Les Classes et les Objets Ahcène Bounceur

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

  • Upload
    others

  • View
    4

  • Download
    0

Embed Size (px)

Citation preview

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

É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

É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

É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

É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

É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

É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

É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

É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

É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

É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

É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

É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

É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

É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

É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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Merci de votre attention