126
La programmation orient´ ee objets et le langage Java Master BBSG 2 Laurent Tichit epartement Informatique et Interactions, Facult´ e des Sciences de Luminy Cours 2: L’encapsulation c L. Tichit, 2015-2016 POO et Java 1/1

Cours 2: L’encapsulationtichit/java/cours/JavaBBSG2-02.pdfCours 2: L’encapsulation c L. Tichit, 2015-2016 POO et Java 1 / 1 L’encapsulation La programmation orient ee objets

  • Upload
    others

  • View
    8

  • Download
    1

Embed Size (px)

Citation preview

Page 1: Cours 2: L’encapsulationtichit/java/cours/JavaBBSG2-02.pdfCours 2: L’encapsulation c L. Tichit, 2015-2016 POO et Java 1 / 1 L’encapsulation La programmation orient ee objets

La programmation orientee objetset le langage Java

Master BBSG 2Laurent Tichit

Departement Informatique et Interactions, Faculte des Sciences de Luminy

Cours 2: L’encapsulation

c©L. Tichit, 2015-2016 POO et Java 1 / 1

Page 2: Cours 2: L’encapsulationtichit/java/cours/JavaBBSG2-02.pdfCours 2: L’encapsulation c L. Tichit, 2015-2016 POO et Java 1 / 1 L’encapsulation La programmation orient ee objets

L’encapsulation

La programmation orientee objets

Concepts apparus a partir des annees 60

premiers langages : Simula (simulation), Smalltalk (IA, IHM, etc.)

convergence de deux courants de recherche

courant genie logiciel :lutter contre la complexite des gros programmesproblematique : correction, robustesse, reutilisabilite, etc.courant representation des connaissances :problematique : representer

– les concepts : � cette table est une Table �,– l’abstraction : � toute table est une sorte de meuble �

principales notions

encapsulationheritagepolymorphisme, redefinition des methodes, exceptions, genericite, etc.

c©L. Tichit, 2015-2016 POO et Java 2 / 1

Page 3: Cours 2: L’encapsulationtichit/java/cours/JavaBBSG2-02.pdfCours 2: L’encapsulation c L. Tichit, 2015-2016 POO et Java 1 / 1 L’encapsulation La programmation orient ee objets

L’encapsulation

La programmation orientee objets

Concepts apparus a partir des annees 60

premiers langages : Simula (simulation), Smalltalk (IA, IHM, etc.)

convergence de deux courants de recherche

courant genie logiciel :lutter contre la complexite des gros programmesproblematique : correction, robustesse, reutilisabilite, etc.

courant representation des connaissances :problematique : representer

– les concepts : � cette table est une Table �,– l’abstraction : � toute table est une sorte de meuble �

principales notions

encapsulationheritagepolymorphisme, redefinition des methodes, exceptions, genericite, etc.

c©L. Tichit, 2015-2016 POO et Java 2 / 1

Page 4: Cours 2: L’encapsulationtichit/java/cours/JavaBBSG2-02.pdfCours 2: L’encapsulation c L. Tichit, 2015-2016 POO et Java 1 / 1 L’encapsulation La programmation orient ee objets

L’encapsulation

La programmation orientee objets

Concepts apparus a partir des annees 60

premiers langages : Simula (simulation), Smalltalk (IA, IHM, etc.)

convergence de deux courants de recherche

courant genie logiciel :lutter contre la complexite des gros programmesproblematique : correction, robustesse, reutilisabilite, etc.courant representation des connaissances :problematique : representer

– les concepts : � cette table est une Table �,– l’abstraction : � toute table est une sorte de meuble �

principales notions

encapsulationheritagepolymorphisme, redefinition des methodes, exceptions, genericite, etc.

c©L. Tichit, 2015-2016 POO et Java 2 / 1

Page 5: Cours 2: L’encapsulationtichit/java/cours/JavaBBSG2-02.pdfCours 2: L’encapsulation c L. Tichit, 2015-2016 POO et Java 1 / 1 L’encapsulation La programmation orient ee objets

L’encapsulation

La programmation orientee objets

Concepts apparus a partir des annees 60

premiers langages : Simula (simulation), Smalltalk (IA, IHM, etc.)

convergence de deux courants de recherche

courant genie logiciel :lutter contre la complexite des gros programmesproblematique : correction, robustesse, reutilisabilite, etc.courant representation des connaissances :problematique : representer

– les concepts : � cette table est une Table �,– l’abstraction : � toute table est une sorte de meuble �

principales notions

encapsulationheritagepolymorphisme, redefinition des methodes, exceptions, genericite, etc.

c©L. Tichit, 2015-2016 POO et Java 2 / 1

Page 6: Cours 2: L’encapsulationtichit/java/cours/JavaBBSG2-02.pdfCours 2: L’encapsulation c L. Tichit, 2015-2016 POO et Java 1 / 1 L’encapsulation La programmation orient ee objets

L’encapsulation

Encapsulation : objets et messages

Un programme est un ensemble d’objets opaques, autonomes, interagissant entreeux par envoi de messages.

Chaque objet a un etat prive, cache a l’interieur, et un comportement public,l’ensemble des messages auxquels l’objet reagit.

distance(p)

toString()

sePlacer(a,b)

y()

x()

c©L. Tichit, 2015-2016 POO et Java 3 / 1

Page 7: Cours 2: L’encapsulationtichit/java/cours/JavaBBSG2-02.pdfCours 2: L’encapsulation c L. Tichit, 2015-2016 POO et Java 1 / 1 L’encapsulation La programmation orient ee objets

L’encapsulation

Encapsulation : objets et messages

Un programme est un ensemble d’objets opaques, autonomes, interagissant entreeux par envoi de messages.

Chaque objet a un etat prive, cache a l’interieur, et un comportement public,l’ensemble des messages auxquels l’objet reagit.

distance(p)

toString()

sePlacer(a,b)

y()

x()

c©L. Tichit, 2015-2016 POO et Java 3 / 1

Page 8: Cours 2: L’encapsulationtichit/java/cours/JavaBBSG2-02.pdfCours 2: L’encapsulation c L. Tichit, 2015-2016 POO et Java 1 / 1 L’encapsulation La programmation orient ee objets

L’encapsulation

Encapsulation : objets et messages

Un programme est un ensemble d’objets opaques, autonomes, interagissant entreeux par envoi de messages.

Chaque objet a un etat prive, cache a l’interieur, et un comportement public,l’ensemble des messages auxquels l’objet reagit.

distance(p)

toString()

sePlacer(a,b)

y()

x()

c©L. Tichit, 2015-2016 POO et Java 3 / 1

Page 9: Cours 2: L’encapsulationtichit/java/cours/JavaBBSG2-02.pdfCours 2: L’encapsulation c L. Tichit, 2015-2016 POO et Java 1 / 1 L’encapsulation La programmation orient ee objets

L’encapsulation

Encapsulation : objets et messages

Un programme est un ensemble d’objets opaques, autonomes, interagissant entreeux par envoi de messages.

Chaque objet a un etat prive, cache a l’interieur, et un comportement public,l’ensemble des messages auxquels l’objet reagit.

Tout message a un destinataire. Le message dit quoi faire, mais non comment :c’est au destinataire de connaıtre les details pratiques de l’action que le messageprovoque chez lui.

Par exemple : � distance(p,q) � devient � p.distance(q) �.Consequence : au lieu d’une (unique) definition de distance, chaque classed’objets peut avoir la sienne.

Les objets sont reutilisables

composition : un objet est compose d’autres objetsheritage : un objet est defini comme specialisation d’un autre

c©L. Tichit, 2015-2016 POO et Java 4 / 1

Page 10: Cours 2: L’encapsulationtichit/java/cours/JavaBBSG2-02.pdfCours 2: L’encapsulation c L. Tichit, 2015-2016 POO et Java 1 / 1 L’encapsulation La programmation orient ee objets

L’encapsulation

Encapsulation : objets et messages

Un programme est un ensemble d’objets opaques, autonomes, interagissant entreeux par envoi de messages.

Chaque objet a un etat prive, cache a l’interieur, et un comportement public,l’ensemble des messages auxquels l’objet reagit.

Tout message a un destinataire. Le message dit quoi faire, mais non comment :c’est au destinataire de connaıtre les details pratiques de l’action que le messageprovoque chez lui.

Par exemple : � distance(p,q) � devient � p.distance(q) �.

Consequence : au lieu d’une (unique) definition de distance, chaque classed’objets peut avoir la sienne.

Les objets sont reutilisables

composition : un objet est compose d’autres objetsheritage : un objet est defini comme specialisation d’un autre

c©L. Tichit, 2015-2016 POO et Java 4 / 1

Page 11: Cours 2: L’encapsulationtichit/java/cours/JavaBBSG2-02.pdfCours 2: L’encapsulation c L. Tichit, 2015-2016 POO et Java 1 / 1 L’encapsulation La programmation orient ee objets

L’encapsulation

Encapsulation : objets et messages

Un programme est un ensemble d’objets opaques, autonomes, interagissant entreeux par envoi de messages.

Chaque objet a un etat prive, cache a l’interieur, et un comportement public,l’ensemble des messages auxquels l’objet reagit.

Tout message a un destinataire. Le message dit quoi faire, mais non comment :c’est au destinataire de connaıtre les details pratiques de l’action que le messageprovoque chez lui.

Par exemple : � distance(p,q) � devient � p.distance(q) �.Consequence : au lieu d’une (unique) definition de distance, chaque classed’objets peut avoir la sienne.

Les objets sont reutilisables

composition : un objet est compose d’autres objetsheritage : un objet est defini comme specialisation d’un autre

c©L. Tichit, 2015-2016 POO et Java 4 / 1

Page 12: Cours 2: L’encapsulationtichit/java/cours/JavaBBSG2-02.pdfCours 2: L’encapsulation c L. Tichit, 2015-2016 POO et Java 1 / 1 L’encapsulation La programmation orient ee objets

L’encapsulation

Encapsulation : objets et messages

Un programme est un ensemble d’objets opaques, autonomes, interagissant entreeux par envoi de messages.

Chaque objet a un etat prive, cache a l’interieur, et un comportement public,l’ensemble des messages auxquels l’objet reagit.

Tout message a un destinataire. Le message dit quoi faire, mais non comment :c’est au destinataire de connaıtre les details pratiques de l’action que le messageprovoque chez lui.

Par exemple : � distance(p,q) � devient � p.distance(q) �.Consequence : au lieu d’une (unique) definition de distance, chaque classed’objets peut avoir la sienne.

Les objets sont reutilisables

composition : un objet est compose d’autres objetsheritage : un objet est defini comme specialisation d’un autre

c©L. Tichit, 2015-2016 POO et Java 4 / 1

Page 13: Cours 2: L’encapsulationtichit/java/cours/JavaBBSG2-02.pdfCours 2: L’encapsulation c L. Tichit, 2015-2016 POO et Java 1 / 1 L’encapsulation La programmation orient ee objets

L’encapsulation

Attributs : variables et methodes

Un objet est fait de

une certaine quantite de memoire, organisee en champs, variables d’instance,donnees membres, etc.un certain nombre de fonctions, appelee methodes, fonctions membres, etc.,qu’on ne peut appeler qu’en s’adressant a cet objet.

Variables et methodes sont les attributs des objets. Ils peuvent etre

publics, c’est-a-dire utilisables dans n’importe quel endroit du programme,prives, c’est-a-dire accessible uniquement dans l’objet auquel ils appartiennent.

Encapsulation : dans l’ideal

seules sont publiques certaines methodes, robustes et documentees, quiconstituent l’interface de l’objet ;les variables et les autres methodes sont privees ; elles constituentl’implementation de l’objet et sont inutilisables depuis l’exterieur.

Benefices majeurs :

correction : on peut garantir que l’etat d’un objet est toujours coherent,independance : on peut changer l’implementation (details internes) d’un objetsans invalider les programmes qui l’emploient.

c©L. Tichit, 2015-2016 POO et Java 5 / 1

Page 14: Cours 2: L’encapsulationtichit/java/cours/JavaBBSG2-02.pdfCours 2: L’encapsulation c L. Tichit, 2015-2016 POO et Java 1 / 1 L’encapsulation La programmation orient ee objets

L’encapsulation

Attributs : variables et methodes

Un objet est fait de

une certaine quantite de memoire, organisee en champs, variables d’instance,donnees membres, etc.un certain nombre de fonctions, appelee methodes, fonctions membres, etc.,qu’on ne peut appeler qu’en s’adressant a cet objet.

Variables et methodes sont les attributs des objets. Ils peuvent etre

publics, c’est-a-dire utilisables dans n’importe quel endroit du programme,prives, c’est-a-dire accessible uniquement dans l’objet auquel ils appartiennent.

Encapsulation : dans l’ideal

seules sont publiques certaines methodes, robustes et documentees, quiconstituent l’interface de l’objet ;les variables et les autres methodes sont privees ; elles constituentl’implementation de l’objet et sont inutilisables depuis l’exterieur.

Benefices majeurs :

correction : on peut garantir que l’etat d’un objet est toujours coherent,independance : on peut changer l’implementation (details internes) d’un objetsans invalider les programmes qui l’emploient.

c©L. Tichit, 2015-2016 POO et Java 5 / 1

Page 15: Cours 2: L’encapsulationtichit/java/cours/JavaBBSG2-02.pdfCours 2: L’encapsulation c L. Tichit, 2015-2016 POO et Java 1 / 1 L’encapsulation La programmation orient ee objets

L’encapsulation

Attributs : variables et methodes

Un objet est fait de

une certaine quantite de memoire, organisee en champs, variables d’instance,donnees membres, etc.un certain nombre de fonctions, appelee methodes, fonctions membres, etc.,qu’on ne peut appeler qu’en s’adressant a cet objet.

Variables et methodes sont les attributs des objets. Ils peuvent etre

publics, c’est-a-dire utilisables dans n’importe quel endroit du programme,prives, c’est-a-dire accessible uniquement dans l’objet auquel ils appartiennent.

Encapsulation : dans l’ideal

seules sont publiques certaines methodes, robustes et documentees, quiconstituent l’interface de l’objet ;les variables et les autres methodes sont privees ; elles constituentl’implementation de l’objet et sont inutilisables depuis l’exterieur.

Benefices majeurs :

correction : on peut garantir que l’etat d’un objet est toujours coherent,independance : on peut changer l’implementation (details internes) d’un objetsans invalider les programmes qui l’emploient.

c©L. Tichit, 2015-2016 POO et Java 5 / 1

Page 16: Cours 2: L’encapsulationtichit/java/cours/JavaBBSG2-02.pdfCours 2: L’encapsulation c L. Tichit, 2015-2016 POO et Java 1 / 1 L’encapsulation La programmation orient ee objets

L’encapsulation

Attributs : variables et methodes

Un objet est fait de

une certaine quantite de memoire, organisee en champs, variables d’instance,donnees membres, etc.un certain nombre de fonctions, appelee methodes, fonctions membres, etc.,qu’on ne peut appeler qu’en s’adressant a cet objet.

Variables et methodes sont les attributs des objets. Ils peuvent etre

publics, c’est-a-dire utilisables dans n’importe quel endroit du programme,prives, c’est-a-dire accessible uniquement dans l’objet auquel ils appartiennent.

Encapsulation : dans l’ideal

seules sont publiques certaines methodes, robustes et documentees, quiconstituent l’interface de l’objet ;les variables et les autres methodes sont privees ; elles constituentl’implementation de l’objet et sont inutilisables depuis l’exterieur.

Benefices majeurs :

correction : on peut garantir que l’etat d’un objet est toujours coherent,independance : on peut changer l’implementation (details internes) d’un objetsans invalider les programmes qui l’emploient.

c©L. Tichit, 2015-2016 POO et Java 5 / 1

Page 17: Cours 2: L’encapsulationtichit/java/cours/JavaBBSG2-02.pdfCours 2: L’encapsulation c L. Tichit, 2015-2016 POO et Java 1 / 1 L’encapsulation La programmation orient ee objets

L’encapsulation

Objets et messages en Java

Comment cela se presente en Java ?

objets : des structures contenant des variables et du code

etat : des variables, appelees champs ou variables d’instance

comportement : des fonctions, appelees methodes (d’instance)

envoi de message : appel de methode, sous la forme

p.distance(q) ou p.toString()

destinataire message arguments

au lieu de : distance(p, q) ou toString(p)

Exemple : une classe Point pour representer les points du plan

c©L. Tichit, 2015-2016 POO et Java 6 / 1

Page 18: Cours 2: L’encapsulationtichit/java/cours/JavaBBSG2-02.pdfCours 2: L’encapsulation c L. Tichit, 2015-2016 POO et Java 1 / 1 L’encapsulation La programmation orient ee objets

L’encapsulation

Objets et messages en Java

Comment cela se presente en Java ?

objets : des structures contenant des variables et du code

etat : des variables, appelees champs ou variables d’instance

comportement : des fonctions, appelees methodes (d’instance)

envoi de message : appel de methode, sous la forme

p.distance(q) ou p.toString()

destinataire message arguments

au lieu de : distance(p, q) ou toString(p)

Exemple : une classe Point pour representer les points du plan

c©L. Tichit, 2015-2016 POO et Java 6 / 1

Page 19: Cours 2: L’encapsulationtichit/java/cours/JavaBBSG2-02.pdfCours 2: L’encapsulation c L. Tichit, 2015-2016 POO et Java 1 / 1 L’encapsulation La programmation orient ee objets

L’encapsulation

Objets et messages en Java

Comment cela se presente en Java ?

objets : des structures contenant des variables et du code

etat : des variables, appelees champs ou variables d’instance

comportement : des fonctions, appelees methodes (d’instance)

envoi de message : appel de methode, sous la forme

p.distance(q) ou p.toString()

destinataire message arguments

au lieu de : distance(p, q) ou toString(p)

Exemple : une classe Point pour representer les points du plan

c©L. Tichit, 2015-2016 POO et Java 6 / 1

Page 20: Cours 2: L’encapsulationtichit/java/cours/JavaBBSG2-02.pdfCours 2: L’encapsulation c L. Tichit, 2015-2016 POO et Java 1 / 1 L’encapsulation La programmation orient ee objets

L’encapsulation

Objets et messages en Java

Comment cela se presente en Java ?

objets : des structures contenant des variables et du code

etat : des variables, appelees champs ou variables d’instance

comportement : des fonctions, appelees methodes (d’instance)

envoi de message : appel de methode, sous la forme

p.distance(q) ou p.toString()

destinataire message arguments

au lieu de : distance(p, q) ou toString(p)

Exemple : une classe Point pour representer les points du plan

c©L. Tichit, 2015-2016 POO et Java 6 / 1

Page 21: Cours 2: L’encapsulationtichit/java/cours/JavaBBSG2-02.pdfCours 2: L’encapsulation c L. Tichit, 2015-2016 POO et Java 1 / 1 L’encapsulation La programmation orient ee objets

L’encapsulation

Objets et messages en Java

Comment cela se presente en Java ?

objets : des structures contenant des variables et du code

etat : des variables, appelees champs ou variables d’instance

comportement : des fonctions, appelees methodes (d’instance)

envoi de message : appel de methode, sous la forme

p.distance(q) ou p.toString()

destinataire message arguments

au lieu de : distance(p, q) ou toString(p)

Exemple : une classe Point pour representer les points du plan

c©L. Tichit, 2015-2016 POO et Java 6 / 1

Page 22: Cours 2: L’encapsulationtichit/java/cours/JavaBBSG2-02.pdfCours 2: L’encapsulation c L. Tichit, 2015-2016 POO et Java 1 / 1 L’encapsulation La programmation orient ee objets

L’encapsulation

Objets et messages en Java

Comment cela se presente en Java ?

objets : des structures contenant des variables et du code

etat : des variables, appelees champs ou variables d’instance

comportement : des fonctions, appelees methodes (d’instance)

envoi de message : appel de methode, sous la forme

p.distance(q) ou p.toString()

destinataire message arguments

au lieu de : distance(p, q) ou toString(p)

Exemple : une classe Point pour representer les points du plan

c©L. Tichit, 2015-2016 POO et Java 6 / 1

Page 23: Cours 2: L’encapsulationtichit/java/cours/JavaBBSG2-02.pdfCours 2: L’encapsulation c L. Tichit, 2015-2016 POO et Java 1 / 1 L’encapsulation La programmation orient ee objets

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 + ")";}...

}

distance(p)

toString()

sePlacer(a,b)xy

module()

Noter que le qualifieur statica disparu.

c©L. Tichit, 2015-2016 POO et Java 7 / 1

Page 24: Cours 2: L’encapsulationtichit/java/cours/JavaBBSG2-02.pdfCours 2: L’encapsulation c L. Tichit, 2015-2016 POO et Java 1 / 1 L’encapsulation La programmation orient ee objets

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 + ")";}...

}

distance(p)

toString()

sePlacer(a,b)xy

module()

Noter que le qualifieur statica disparu.

c©L. Tichit, 2015-2016 POO et Java 7 / 1

Page 25: Cours 2: L’encapsulationtichit/java/cours/JavaBBSG2-02.pdfCours 2: L’encapsulation c L. Tichit, 2015-2016 POO et Java 1 / 1 L’encapsulation La programmation orient ee objets

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 + ")";}...

}

distance(p)

toString()

sePlacer(a,b)xy

module()

Noter que le qualifieur statica disparu.

c©L. Tichit, 2015-2016 POO et Java 7 / 1

Page 26: Cours 2: L’encapsulationtichit/java/cours/JavaBBSG2-02.pdfCours 2: L’encapsulation c L. Tichit, 2015-2016 POO et Java 1 / 1 L’encapsulation La programmation orient ee objets

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 + ")";

}...

}

distance(p)

toString()

sePlacer(a,b)xy

module()

Noter que le qualifieur statica disparu.

c©L. Tichit, 2015-2016 POO et Java 7 / 1

Page 27: Cours 2: L’encapsulationtichit/java/cours/JavaBBSG2-02.pdfCours 2: L’encapsulation c L. Tichit, 2015-2016 POO et Java 1 / 1 L’encapsulation La programmation orient ee objets

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 + ")";}...

}

distance(p)

toString()

sePlacer(a,b)xy

module()

Noter que le qualifieur statica disparu.

c©L. Tichit, 2015-2016 POO et Java 7 / 1

Page 28: Cours 2: L’encapsulationtichit/java/cours/JavaBBSG2-02.pdfCours 2: L’encapsulation c L. Tichit, 2015-2016 POO et Java 1 / 1 L’encapsulation La programmation orient ee objets

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 + ")";}...

}

distance(p)

toString()

sePlacer(a,b)xy

module()

Noter que le qualifieur statica disparu.

c©L. Tichit, 2015-2016 POO et Java 7 / 1

Page 29: Cours 2: L’encapsulationtichit/java/cours/JavaBBSG2-02.pdfCours 2: L’encapsulation c L. Tichit, 2015-2016 POO et Java 1 / 1 L’encapsulation La programmation orient ee objets

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 + ")";}...

}

distance(p)

toString()

sePlacer(a,b)xy

module()

Noter que le qualifieur statica disparu.

c©L. Tichit, 2015-2016 POO et Java 7 / 1

Page 30: Cours 2: L’encapsulationtichit/java/cours/JavaBBSG2-02.pdfCours 2: L’encapsulation c L. Tichit, 2015-2016 POO et Java 1 / 1 L’encapsulation La programmation orient ee objets

L’encapsulation

Test de la classe Point

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);

}}

10 0

a

13 4

b

Execution :10.05.0(10, 0)(13, 4)

c©L. Tichit, 2015-2016 POO et Java 8 / 1

Page 31: Cours 2: L’encapsulationtichit/java/cours/JavaBBSG2-02.pdfCours 2: L’encapsulation c L. Tichit, 2015-2016 POO et Java 1 / 1 L’encapsulation La programmation orient ee objets

L’encapsulation

Test de la classe Point

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);

}}

10 0

a

13 4

b

Execution :10.05.0(10, 0)(13, 4)

c©L. Tichit, 2015-2016 POO et Java 8 / 1

Page 32: Cours 2: L’encapsulationtichit/java/cours/JavaBBSG2-02.pdfCours 2: L’encapsulation c L. Tichit, 2015-2016 POO et Java 1 / 1 L’encapsulation La programmation orient ee objets

L’encapsulation

Test de la classe Point

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);

}}

10 0

a

13 4

b

Execution :10.05.0(10, 0)(13, 4)

c©L. Tichit, 2015-2016 POO et Java 8 / 1

Page 33: Cours 2: L’encapsulationtichit/java/cours/JavaBBSG2-02.pdfCours 2: L’encapsulation c L. Tichit, 2015-2016 POO et Java 1 / 1 L’encapsulation La programmation orient ee objets

L’encapsulation

Test de la classe Point

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);

}}

10 0

a

13 4

b

Execution :10.05.0(10, 0)(13, 4)

c©L. Tichit, 2015-2016 POO et Java 8 / 1

Page 34: Cours 2: L’encapsulationtichit/java/cours/JavaBBSG2-02.pdfCours 2: L’encapsulation c L. Tichit, 2015-2016 POO et Java 1 / 1 L’encapsulation La programmation orient ee objets

L’encapsulation

Test de la classe Point

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);

}}

10 0

a

13 4

b

Execution :10.05.0(10, 0)(13, 4)

c©L. Tichit, 2015-2016 POO et Java 8 / 1

Page 35: Cours 2: L’encapsulationtichit/java/cours/JavaBBSG2-02.pdfCours 2: L’encapsulation c L. Tichit, 2015-2016 POO et Java 1 / 1 L’encapsulation La programmation orient ee objets

L’encapsulation

Test de la classe Point

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);

}}

10 0

a

13 4

b

Execution :10.05.0(10, 0)(13, 4)

c©L. Tichit, 2015-2016 POO et Java 8 / 1

Page 36: Cours 2: L’encapsulationtichit/java/cours/JavaBBSG2-02.pdfCours 2: L’encapsulation c L. Tichit, 2015-2016 POO et Java 1 / 1 L’encapsulation La programmation orient ee objets

L’encapsulation

Faut-il dire objet ou bien classe ?

class Point { int x, y; void sePlacer(int a, int b) {...} double longueur() {...} ...}...Point a = new Point();Point b = new Point();...

la classe

des objets

classe : aspect descriptif, statique, unique

objet : aspect existentiel, dynamique, multiple

le bien parler :

[la valeur de] a est un [objet] Point[la valeur de] a est une instance de la classe Point

new est l’operation d’instanciation ( = creation d’un objet)

c©L. Tichit, 2015-2016 POO et Java 9 / 1

Page 37: Cours 2: L’encapsulationtichit/java/cours/JavaBBSG2-02.pdfCours 2: L’encapsulation c L. Tichit, 2015-2016 POO et Java 1 / 1 L’encapsulation La programmation orient ee objets

L’encapsulation

Faut-il dire objet ou bien classe ?

class Point { int x, y; void sePlacer(int a, int b) {...} double longueur() {...} ...}...Point a = new Point();Point b = new Point();...

la classe

des objets

classe : aspect descriptif, statique, unique

objet : aspect existentiel, dynamique, multiple

le bien parler :

[la valeur de] a est un [objet] Point[la valeur de] a est une instance de la classe Point

new est l’operation d’instanciation ( = creation d’un objet)

c©L. Tichit, 2015-2016 POO et Java 9 / 1

Page 38: Cours 2: L’encapsulationtichit/java/cours/JavaBBSG2-02.pdfCours 2: L’encapsulation c L. Tichit, 2015-2016 POO et Java 1 / 1 L’encapsulation La programmation orient ee objets

L’encapsulation

Faut-il dire objet ou bien classe ?

class Point { int x, y; void sePlacer(int a, int b) {...} double longueur() {...} ...}...Point a = new Point();Point b = new Point();...

la classe

des objets

classe : aspect descriptif, statique, unique

objet : aspect existentiel, dynamique, multiple

le bien parler :

[la valeur de] a est un [objet] Point

[la valeur de] a est une instance de la classe Point

new est l’operation d’instanciation ( = creation d’un objet)

c©L. Tichit, 2015-2016 POO et Java 9 / 1

Page 39: Cours 2: L’encapsulationtichit/java/cours/JavaBBSG2-02.pdfCours 2: L’encapsulation c L. Tichit, 2015-2016 POO et Java 1 / 1 L’encapsulation La programmation orient ee objets

L’encapsulation

Faut-il dire objet ou bien classe ?

class Point { int x, y; void sePlacer(int a, int b) {...} double longueur() {...} ...}...Point a = new Point();Point b = new Point();...

la classe

des objets

classe : aspect descriptif, statique, unique

objet : aspect existentiel, dynamique, multiple

le bien parler :

[la valeur de] a est un [objet] Point[la valeur de] a est une instance de la classe Point

new est l’operation d’instanciation ( = creation d’un objet)

c©L. Tichit, 2015-2016 POO et Java 9 / 1

Page 40: Cours 2: L’encapsulationtichit/java/cours/JavaBBSG2-02.pdfCours 2: L’encapsulation c L. Tichit, 2015-2016 POO et Java 1 / 1 L’encapsulation La programmation orient ee objets

L’encapsulation

Faut-il dire objet ou bien classe ?

class Point { int x, y; void sePlacer(int a, int b) {...} double longueur() {...} ...}...Point a = new Point();Point b = new Point();...

la classe

des objets

classe : aspect descriptif, statique, unique

objet : aspect existentiel, dynamique, multiple

le bien parler :

[la valeur de] a est un [objet] Point[la valeur de] a est une instance de la classe Point

new est l’operation d’instanciation ( = creation d’un objet)

c©L. Tichit, 2015-2016 POO et Java 9 / 1

Page 41: Cours 2: L’encapsulationtichit/java/cours/JavaBBSG2-02.pdfCours 2: L’encapsulation c L. Tichit, 2015-2016 POO et Java 1 / 1 L’encapsulation La programmation orient ee objets

L’encapsulation

Acces a un membre d’instance, notation

Pour acceder a un membre d’instance on doit mentionner l’instance visee :� unObjet.unMembre �

Appel de methode : la version Java du concept envoi de message :a.module() envoi du message module a l’objet a

a l’interieur d’une methode, l’objet destinataire du message est implicite :class Point {

int x, y;...double module() {

return Math.sqrt(x * x + y * y);}

}

qui sont ces x et y qui apparaissent dans la methode module ?reponse : les variables x et y de l’objet a travers lequel on aura appele la methodeSi on a

Point a = new Point();...

double r = a.module();

alors le corps de la fonction equivaut areturn Math.sqrt(a.x * a.x + a.y * a.y);

c©L. Tichit, 2015-2016 POO et Java 10 / 1

Page 42: Cours 2: L’encapsulationtichit/java/cours/JavaBBSG2-02.pdfCours 2: L’encapsulation c L. Tichit, 2015-2016 POO et Java 1 / 1 L’encapsulation La programmation orient ee objets

L’encapsulation

Acces a un membre d’instance, notation

Pour acceder a un membre d’instance on doit mentionner l’instance visee :� unObjet.unMembre �

Appel de methode : la version Java du concept envoi de message :a.module() envoi du message module a l’objet a

a l’interieur d’une methode, l’objet destinataire du message est implicite :class Point {

int x, y;...double module() {

return Math.sqrt(x * x + y * y);}

}

qui sont ces x et y qui apparaissent dans la methode module ?reponse : les variables x et y de l’objet a travers lequel on aura appele la methodeSi on a

Point a = new Point();...

double r = a.module();

alors le corps de la fonction equivaut areturn Math.sqrt(a.x * a.x + a.y * a.y);

c©L. Tichit, 2015-2016 POO et Java 10 / 1

Page 43: Cours 2: L’encapsulationtichit/java/cours/JavaBBSG2-02.pdfCours 2: L’encapsulation c L. Tichit, 2015-2016 POO et Java 1 / 1 L’encapsulation La programmation orient ee objets

L’encapsulation

Acces a un membre d’instance, notation

Pour acceder a un membre d’instance on doit mentionner l’instance visee :� unObjet.unMembre �

Appel de methode : la version Java du concept envoi de message :a.module() envoi du message module a l’objet a

a l’interieur d’une methode, l’objet destinataire du message est implicite :class Point {

int x, y;...double module() {

return Math.sqrt(x * x + y * y);}

}

qui sont ces x et y qui apparaissent dans la methode module ?

reponse : les variables x et y de l’objet a travers lequel on aura appele la methodeSi on a

Point a = new Point();...

double r = a.module();

alors le corps de la fonction equivaut areturn Math.sqrt(a.x * a.x + a.y * a.y);

c©L. Tichit, 2015-2016 POO et Java 10 / 1

Page 44: Cours 2: L’encapsulationtichit/java/cours/JavaBBSG2-02.pdfCours 2: L’encapsulation c L. Tichit, 2015-2016 POO et Java 1 / 1 L’encapsulation La programmation orient ee objets

L’encapsulation

Acces a un membre d’instance, notation

Pour acceder a un membre d’instance on doit mentionner l’instance visee :� unObjet.unMembre �

Appel de methode : la version Java du concept envoi de message :a.module() envoi du message module a l’objet a

a l’interieur d’une methode, l’objet destinataire du message est implicite :class Point {

int x, y;...double module() {

return Math.sqrt(x * x + y * y);}

}

qui sont ces x et y qui apparaissent dans la methode module ?reponse : les variables x et y de l’objet a travers lequel on aura appele la methode

Si on aPoint a = new Point();...

double r = a.module();

alors le corps de la fonction equivaut areturn Math.sqrt(a.x * a.x + a.y * a.y);

c©L. Tichit, 2015-2016 POO et Java 10 / 1

Page 45: Cours 2: L’encapsulationtichit/java/cours/JavaBBSG2-02.pdfCours 2: L’encapsulation c L. Tichit, 2015-2016 POO et Java 1 / 1 L’encapsulation La programmation orient ee objets

L’encapsulation

Acces a un membre d’instance, notation

Pour acceder a un membre d’instance on doit mentionner l’instance visee :� unObjet.unMembre �

Appel de methode : la version Java du concept envoi de message :a.module() envoi du message module a l’objet a

a l’interieur d’une methode, l’objet destinataire du message est implicite :class Point {

int x, y;...double module() {

return Math.sqrt(x * x + y * y);}

}

qui sont ces x et y qui apparaissent dans la methode module ?reponse : les variables x et y de l’objet a travers lequel on aura appele la methodeSi on a

Point a = new Point();...

double r = a.module();

alors le corps de la fonction equivaut areturn Math.sqrt(a.x * a.x + a.y * a.y);

c©L. Tichit, 2015-2016 POO et Java 10 / 1

Page 46: Cours 2: L’encapsulationtichit/java/cours/JavaBBSG2-02.pdfCours 2: L’encapsulation c L. Tichit, 2015-2016 POO et Java 1 / 1 L’encapsulation La programmation orient ee objets

L’encapsulation

Membres d’instance et membres de classe

membres : les variables (ou champs) et les methodes

les membres d’instance sont attaches aux instances :

variable d’instance : chaque objet possede son propre exemplaire(creer un objet c’est allouer ces variables ; new fait cela)methode d’instance : on doit l’appeler a travers un objet(le destinataire de l’envoi de message) : a.module()

les membres de classe ne sont pas attaches aux instances :ils n’appartiennent qu’a la classe :

ils sont signales par le qualifieur staticvariable de classe : il y en a un exemplaire unique, accessible partous les objets de la classemethode de classe : on peut l’appeler seule, comme une fonction C(mais il faudra preciser la classe)

c©L. Tichit, 2015-2016 POO et Java 11 / 1

Page 47: Cours 2: L’encapsulationtichit/java/cours/JavaBBSG2-02.pdfCours 2: L’encapsulation c L. Tichit, 2015-2016 POO et Java 1 / 1 L’encapsulation La programmation orient ee objets

L’encapsulation

Membres d’instance et membres de classe

membres : les variables (ou champs) et les methodes

les membres d’instance sont attaches aux instances :

variable d’instance : chaque objet possede son propre exemplaire(creer un objet c’est allouer ces variables ; new fait cela)

methode d’instance : on doit l’appeler a travers un objet(le destinataire de l’envoi de message) : a.module()

les membres de classe ne sont pas attaches aux instances :ils n’appartiennent qu’a la classe :

ils sont signales par le qualifieur staticvariable de classe : il y en a un exemplaire unique, accessible partous les objets de la classemethode de classe : on peut l’appeler seule, comme une fonction C(mais il faudra preciser la classe)

c©L. Tichit, 2015-2016 POO et Java 11 / 1

Page 48: Cours 2: L’encapsulationtichit/java/cours/JavaBBSG2-02.pdfCours 2: L’encapsulation c L. Tichit, 2015-2016 POO et Java 1 / 1 L’encapsulation La programmation orient ee objets

L’encapsulation

Membres d’instance et membres de classe

membres : les variables (ou champs) et les methodes

les membres d’instance sont attaches aux instances :

variable d’instance : chaque objet possede son propre exemplaire(creer un objet c’est allouer ces variables ; new fait cela)methode d’instance : on doit l’appeler a travers un objet(le destinataire de l’envoi de message) : a.module()

les membres de classe ne sont pas attaches aux instances :ils n’appartiennent qu’a la classe :

ils sont signales par le qualifieur staticvariable de classe : il y en a un exemplaire unique, accessible partous les objets de la classemethode de classe : on peut l’appeler seule, comme une fonction C(mais il faudra preciser la classe)

c©L. Tichit, 2015-2016 POO et Java 11 / 1

Page 49: Cours 2: L’encapsulationtichit/java/cours/JavaBBSG2-02.pdfCours 2: L’encapsulation c L. Tichit, 2015-2016 POO et Java 1 / 1 L’encapsulation La programmation orient ee objets

L’encapsulation

Membres d’instance et membres de classe

membres : les variables (ou champs) et les methodes

les membres d’instance sont attaches aux instances :

variable d’instance : chaque objet possede son propre exemplaire(creer un objet c’est allouer ces variables ; new fait cela)methode d’instance : on doit l’appeler a travers un objet(le destinataire de l’envoi de message) : a.module()

les membres de classe ne sont pas attaches aux instances :ils n’appartiennent qu’a la classe :

ils sont signales par le qualifieur static

variable de classe : il y en a un exemplaire unique, accessible partous les objets de la classemethode de classe : on peut l’appeler seule, comme une fonction C(mais il faudra preciser la classe)

c©L. Tichit, 2015-2016 POO et Java 11 / 1

Page 50: Cours 2: L’encapsulationtichit/java/cours/JavaBBSG2-02.pdfCours 2: L’encapsulation c L. Tichit, 2015-2016 POO et Java 1 / 1 L’encapsulation La programmation orient ee objets

L’encapsulation

Membres d’instance et membres de classe

membres : les variables (ou champs) et les methodes

les membres d’instance sont attaches aux instances :

variable d’instance : chaque objet possede son propre exemplaire(creer un objet c’est allouer ces variables ; new fait cela)methode d’instance : on doit l’appeler a travers un objet(le destinataire de l’envoi de message) : a.module()

les membres de classe ne sont pas attaches aux instances :ils n’appartiennent qu’a la classe :

ils sont signales par le qualifieur staticvariable de classe : il y en a un exemplaire unique, accessible partous les objets de la classe

methode de classe : on peut l’appeler seule, comme une fonction C(mais il faudra preciser la classe)

c©L. Tichit, 2015-2016 POO et Java 11 / 1

Page 51: Cours 2: L’encapsulationtichit/java/cours/JavaBBSG2-02.pdfCours 2: L’encapsulation c L. Tichit, 2015-2016 POO et Java 1 / 1 L’encapsulation La programmation orient ee objets

L’encapsulation

Membres d’instance et membres de classe

membres : les variables (ou champs) et les methodes

les membres d’instance sont attaches aux instances :

variable d’instance : chaque objet possede son propre exemplaire(creer un objet c’est allouer ces variables ; new fait cela)methode d’instance : on doit l’appeler a travers un objet(le destinataire de l’envoi de message) : a.module()

les membres de classe ne sont pas attaches aux instances :ils n’appartiennent qu’a la classe :

ils sont signales par le qualifieur staticvariable de classe : il y en a un exemplaire unique, accessible partous les objets de la classemethode de classe : on peut l’appeler seule, comme une fonction C(mais il faudra preciser la classe)

c©L. Tichit, 2015-2016 POO et Java 11 / 1

Page 52: Cours 2: L’encapsulationtichit/java/cours/JavaBBSG2-02.pdfCours 2: L’encapsulation c L. Tichit, 2015-2016 POO et Java 1 / 1 L’encapsulation La programmation orient ee objets

L’encapsulation

Membres d’instance et membres de classe

Un exercice de style

Fichier Point.java

class Point {int x, y;...double distance(Point p) { // methode 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) { // methode de classe

int dx = u.x - v.x;int dy = u.y - v.y;return Math.sqrt(dx * dx + dy * dy);

}}

Emploi (dans une autre classe) :Point a, b;...r = a.distance(b); // appel de la methode d’instancer = Point.distance(a, b); // appel de la methode de classe

c©L. Tichit, 2015-2016 POO et Java 12 / 1

Page 53: Cours 2: L’encapsulationtichit/java/cours/JavaBBSG2-02.pdfCours 2: L’encapsulation c L. Tichit, 2015-2016 POO et Java 1 / 1 L’encapsulation La programmation orient ee objets

L’encapsulation

Membres d’instance et membres de classe

Un exercice de style

Fichier Point.java

class Point {int x, y;...double distance(Point p) { // methode 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) { // methode de classe

int dx = u.x - v.x;int dy = u.y - v.y;return Math.sqrt(dx * dx + dy * dy);

}}

Emploi (dans une autre classe) :Point a, b;...r = a.distance(b); // appel de la methode d’instancer = Point.distance(a, b); // appel de la methode de classe

c©L. Tichit, 2015-2016 POO et Java 12 / 1

Page 54: Cours 2: L’encapsulationtichit/java/cours/JavaBBSG2-02.pdfCours 2: L’encapsulation c L. Tichit, 2015-2016 POO et Java 1 / 1 L’encapsulation La programmation orient ee objets

L’encapsulation

Acces a ses propres membres, acces � a soi-meme �

dans une methode d’instance, l’objet a travers lequel on appelle la methode est designeimplicitement :

double distance(Point p) {int dx = x - p.x;

int dy = y - p.y;

return Math.sqrt(dx * dx + dy * dy);

}

il existe aussi une designation explicite : this

double distance(Point p) {int dx = this.x - p.x;

int dy = this.y - p.y;

return Math.sqrt(dx * dx + dy * dy);

}

dans un appel tel que a.distance(b) on aura this ≡ a (et p ≡ b)

c©L. Tichit, 2015-2016 POO et Java 13 / 1

Page 55: Cours 2: L’encapsulationtichit/java/cours/JavaBBSG2-02.pdfCours 2: L’encapsulation c L. Tichit, 2015-2016 POO et Java 1 / 1 L’encapsulation La programmation orient ee objets

L’encapsulation

Acces a ses propres membres, acces � a soi-meme �

dans une methode d’instance, l’objet a travers lequel on appelle la methode est designeimplicitement :

double distance(Point p) {int dx = x - p.x;

int dy = y - p.y;

return Math.sqrt(dx * dx + dy * dy);

}

il existe aussi une designation explicite : this

double distance(Point p) {int dx = this.x - p.x;

int dy = this.y - p.y;

return Math.sqrt(dx * dx + dy * dy);

}

dans un appel tel que a.distance(b) on aura this ≡ a (et p ≡ b)

c©L. Tichit, 2015-2016 POO et Java 13 / 1

Page 56: Cours 2: L’encapsulationtichit/java/cours/JavaBBSG2-02.pdfCours 2: L’encapsulation c L. Tichit, 2015-2016 POO et Java 1 / 1 L’encapsulation La programmation orient ee objets

L’encapsulation

Acces a ses propres membres, acces � a soi-meme �

dans une methode d’instance, l’objet a travers lequel on appelle la methode est designeimplicitement :

double distance(Point p) {int dx = x - p.x;

int dy = y - p.y;

return Math.sqrt(dx * dx + dy * dy);

}

il existe aussi une designation explicite : this

double distance(Point p) {int dx = this.x - p.x;

int dy = this.y - p.y;

return Math.sqrt(dx * dx + dy * dy);

}

dans un appel tel que a.distance(b) on aura this ≡ a (et p ≡ b)

c©L. Tichit, 2015-2016 POO et Java 13 / 1

Page 57: Cours 2: L’encapsulationtichit/java/cours/JavaBBSG2-02.pdfCours 2: L’encapsulation c L. Tichit, 2015-2016 POO et Java 1 / 1 L’encapsulation La programmation orient ee objets

L’encapsulation

Acces a ses propres membres, acces � a soi-meme �

Exercice de style 2. Ecrire la methode de classe en utilisant la methode d’instance :

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);}

Exercice de style 3. Ecrire la methode d’instance en utilisant la methode de classe :

static double distance(Point p, Point q) {int dx = p.x - q.x;int dy = p.y - q.y;return Math.sqrt(dx * dx + dy * dy);

}double distance(Point p) {

return distance(this, p);}

c©L. Tichit, 2015-2016 POO et Java 14 / 1

Page 58: Cours 2: L’encapsulationtichit/java/cours/JavaBBSG2-02.pdfCours 2: L’encapsulation c L. Tichit, 2015-2016 POO et Java 1 / 1 L’encapsulation La programmation orient ee objets

L’encapsulation

Acces a ses propres membres, acces � a soi-meme �

Exercice de style 2. Ecrire la methode de classe en utilisant la methode d’instance :

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);}

Exercice de style 3. Ecrire la methode d’instance en utilisant la methode de classe :

static double distance(Point p, Point q) {int dx = p.x - q.x;int dy = p.y - q.y;return Math.sqrt(dx * dx + dy * dy);

}double distance(Point p) {

return distance(this, p);}

c©L. Tichit, 2015-2016 POO et Java 14 / 1

Page 59: Cours 2: L’encapsulationtichit/java/cours/JavaBBSG2-02.pdfCours 2: L’encapsulation c L. Tichit, 2015-2016 POO et Java 1 / 1 L’encapsulation La programmation orient ee objets

L’encapsulation

Constructeurs

Constructeurs : methodes ayant

meme nom que la classe

pas de type de retour ni d’instruction return expression

leur role : initialiser l’espace qui vient d’etre alloue pour l’objetclass Point {

int x, y;Point(int a, int b) {

� validation de a et b �

x = a;y = b;

}...

}

emploi (p etant une variable de type Point) :p = new Point(10, 20);

s’emploie souvent associe a une declaration :Point p = new Point(10, 20);

c©L. Tichit, 2015-2016 POO et Java 15 / 1

Page 60: Cours 2: L’encapsulationtichit/java/cours/JavaBBSG2-02.pdfCours 2: L’encapsulation c L. Tichit, 2015-2016 POO et Java 1 / 1 L’encapsulation La programmation orient ee objets

L’encapsulation

Constructeurs

Constructeurs : methodes ayant

meme nom que la classe

pas de type de retour ni d’instruction return expression

leur role : initialiser l’espace qui vient d’etre alloue pour l’objetclass Point {

int x, y;Point(int a, int b) {

� validation de a et b �

x = a;y = b;

}...

}

emploi (p etant une variable de type Point) :p = new Point(10, 20);

s’emploie souvent associe a une declaration :Point p = new Point(10, 20);

c©L. Tichit, 2015-2016 POO et Java 15 / 1

Page 61: Cours 2: L’encapsulationtichit/java/cours/JavaBBSG2-02.pdfCours 2: L’encapsulation c L. Tichit, 2015-2016 POO et Java 1 / 1 L’encapsulation La programmation orient ee objets

L’encapsulation

Constructeurs

Constructeurs : methodes ayant

meme nom que la classe

pas de type de retour ni d’instruction return expression

leur role : initialiser l’espace qui vient d’etre alloue pour l’objetclass Point {

int x, y;Point(int a, int b) {

� validation de a et b �

x = a;y = b;

}...

}

emploi (p etant une variable de type Point) :p = new Point(10, 20);

s’emploie souvent associe a une declaration :Point p = new Point(10, 20);

c©L. Tichit, 2015-2016 POO et Java 15 / 1

Page 62: Cours 2: L’encapsulationtichit/java/cours/JavaBBSG2-02.pdfCours 2: L’encapsulation c L. Tichit, 2015-2016 POO et Java 1 / 1 L’encapsulation La programmation orient ee objets

L’encapsulation

Constructeurs

Constructeurs : methodes ayant

meme nom que la classe

pas de type de retour ni d’instruction return expression

leur role : initialiser l’espace qui vient d’etre alloue pour l’objetclass Point {

int x, y;Point(int a, int b) {

� validation de a et b �

x = a;y = b;

}...

}

emploi (p etant une variable de type Point) :p = new Point(10, 20);

s’emploie souvent associe a une declaration :Point p = new Point(10, 20);

c©L. Tichit, 2015-2016 POO et Java 15 / 1

Page 63: Cours 2: L’encapsulationtichit/java/cours/JavaBBSG2-02.pdfCours 2: L’encapsulation c L. Tichit, 2015-2016 POO et Java 1 / 1 L’encapsulation La programmation orient ee objets

L’encapsulation

Surcharge des constructeurs

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;

}...

}

Emplois respectifs :

Point p = new Point(u, v);

...

Point q = new Point(w);

...

Point r = new Point();

A retenir : la creation d’un objetse fait toujours

par l’operateur new

associe a l’appel d’un constructeur

c©L. Tichit, 2015-2016 POO et Java 16 / 1

Page 64: Cours 2: L’encapsulationtichit/java/cours/JavaBBSG2-02.pdfCours 2: L’encapsulation c L. Tichit, 2015-2016 POO et Java 1 / 1 L’encapsulation La programmation orient ee objets

L’encapsulation

Surcharge des constructeurs

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;

}...

}

Emplois respectifs :

Point p = new Point(u, v);

...

Point q = new Point(w);

...

Point r = new Point();

A retenir : la creation d’un objetse fait toujours

par l’operateur new

associe a l’appel d’un constructeur

c©L. Tichit, 2015-2016 POO et Java 16 / 1

Page 65: Cours 2: L’encapsulationtichit/java/cours/JavaBBSG2-02.pdfCours 2: L’encapsulation c L. Tichit, 2015-2016 POO et Java 1 / 1 L’encapsulation La programmation orient ee objets

L’encapsulation

Surcharge des constructeurs

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;

}...

}

Emplois respectifs :

Point p = new Point(u, v);

...

Point q = new Point(w);

...

Point r = new Point();

A retenir : la creation d’un objetse fait toujours

par l’operateur new

associe a l’appel d’un constructeur

c©L. Tichit, 2015-2016 POO et Java 16 / 1

Page 66: Cours 2: L’encapsulationtichit/java/cours/JavaBBSG2-02.pdfCours 2: L’encapsulation c L. Tichit, 2015-2016 POO et Java 1 / 1 L’encapsulation La programmation orient ee objets

L’encapsulation

Ramener un constructeur a un autre

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) {

this(a, 0);

}Point() {

this(0, 0);

}...

}

Emplois respectifs :

Point p = new Point(u, v);

...

Point q = new Point(w);

...

Point r = new Point();

Attention :� this(arguments); � doit etre lapremiere instruction d’un constructeur

c©L. Tichit, 2015-2016 POO et Java 17 / 1

Page 67: Cours 2: L’encapsulationtichit/java/cours/JavaBBSG2-02.pdfCours 2: L’encapsulation c L. Tichit, 2015-2016 POO et Java 1 / 1 L’encapsulation La programmation orient ee objets

L’encapsulation

Le constructeur offert par la maison

� la construction d’un objet implique toujours l’appel d’un constructeur �

pourtant notre premiere classe fonctionnait. Comment ?

si le programmeur n’a ecrit aucun constructeur alors le compilateurfournit un constructeur

sans argumentsentierement fait d’initialisations par defaut

par exemple :

la classe

public class Point {int x, y;

}

equivaut a la classe

public class Point {int x, y;Point() {

x = y = 0;}

}

ce � cadeau � cesse des qu’un constructeur quelconque est explicite

c©L. Tichit, 2015-2016 POO et Java 18 / 1

Page 68: Cours 2: L’encapsulationtichit/java/cours/JavaBBSG2-02.pdfCours 2: L’encapsulation c L. Tichit, 2015-2016 POO et Java 1 / 1 L’encapsulation La programmation orient ee objets

L’encapsulation

Le constructeur offert par la maison

� la construction d’un objet implique toujours l’appel d’un constructeur �

pourtant notre premiere classe fonctionnait. Comment ?

si le programmeur n’a ecrit aucun constructeur alors le compilateurfournit un constructeur

sans argumentsentierement fait d’initialisations par defaut

par exemple :

la classe

public class Point {int x, y;

}

equivaut a la classe

public class Point {int x, y;Point() {

x = y = 0;}

}

ce � cadeau � cesse des qu’un constructeur quelconque est explicite

c©L. Tichit, 2015-2016 POO et Java 18 / 1

Page 69: Cours 2: L’encapsulationtichit/java/cours/JavaBBSG2-02.pdfCours 2: L’encapsulation c L. Tichit, 2015-2016 POO et Java 1 / 1 L’encapsulation La programmation orient ee objets

L’encapsulation

Le constructeur offert par la maison

� la construction d’un objet implique toujours l’appel d’un constructeur �

pourtant notre premiere classe fonctionnait. Comment ?

si le programmeur n’a ecrit aucun constructeur alors le compilateurfournit un constructeur

sans argumentsentierement fait d’initialisations par defaut

par exemple :

la classe

public class Point {int x, y;

}

equivaut a la classe

public class Point {int x, y;Point() {

x = y = 0;}

}

ce � cadeau � cesse des qu’un constructeur quelconque est explicite

c©L. Tichit, 2015-2016 POO et Java 18 / 1

Page 70: Cours 2: L’encapsulationtichit/java/cours/JavaBBSG2-02.pdfCours 2: L’encapsulation c L. Tichit, 2015-2016 POO et Java 1 / 1 L’encapsulation La programmation orient ee objets

L’encapsulation

Le constructeur offert par la maison

� la construction d’un objet implique toujours l’appel d’un constructeur �

pourtant notre premiere classe fonctionnait. Comment ?

si le programmeur n’a ecrit aucun constructeur alors le compilateurfournit un constructeur

sans argumentsentierement fait d’initialisations par defaut

par exemple :

la classe

public class Point {int x, y;

}

equivaut a la classe

public class Point {int x, y;Point() {

x = y = 0;}

}

ce � cadeau � cesse des qu’un constructeur quelconque est explicite

c©L. Tichit, 2015-2016 POO et Java 18 / 1

Page 71: Cours 2: L’encapsulationtichit/java/cours/JavaBBSG2-02.pdfCours 2: L’encapsulation c L. Tichit, 2015-2016 POO et Java 1 / 1 L’encapsulation La programmation orient ee objets

L’encapsulation

Initialisation des variables d’instance : recapitulation

Fichier Recipient.java

class Recipient {float hauteur;float largeur = 40;float niveau;...Recipient(float niveau) {

this.niveau = niveau;}...

}

Emploi :

Recipient rec

= new Recipient(25);

040

rec

25

hauteurlargeurniveau

c©L. Tichit, 2015-2016 POO et Java 19 / 1

Page 72: Cours 2: L’encapsulationtichit/java/cours/JavaBBSG2-02.pdfCours 2: L’encapsulation c L. Tichit, 2015-2016 POO et Java 1 / 1 L’encapsulation La programmation orient ee objets

L’encapsulation

Objets contenant d’autres objets

Les objets peuvent avoir (ont souvent) pour membresd’autres objets

Exemple : un objet Rectangle est defini par deuxobjets Point

(a,b)

(c,d)Bonne nouvelle : il n’y a pas de probleme particulier pour l’initialisation :

Fichier Rectangle.java

class Rectangle {Point coinNO, coinSE;

Rectangle(int a, int b, int c, int d) {coinNO = new Point(a, b);

coinSE = new Point(c, d);

}...

}

c©L. Tichit, 2015-2016 POO et Java 20 / 1

Page 73: Cours 2: L’encapsulationtichit/java/cours/JavaBBSG2-02.pdfCours 2: L’encapsulation c L. Tichit, 2015-2016 POO et Java 1 / 1 L’encapsulation La programmation orient ee objets

L’encapsulation

Objets contenant d’autres objets

Les objets peuvent avoir (ont souvent) pour membresd’autres objets

Exemple : un objet Rectangle est defini par deuxobjets Point

(a,b)

(c,d)

Bonne nouvelle : il n’y a pas de probleme particulier pour l’initialisation :

Fichier Rectangle.java

class Rectangle {Point coinNO, coinSE;

Rectangle(int a, int b, int c, int d) {coinNO = new Point(a, b);

coinSE = new Point(c, d);

}...

}

c©L. Tichit, 2015-2016 POO et Java 20 / 1

Page 74: Cours 2: L’encapsulationtichit/java/cours/JavaBBSG2-02.pdfCours 2: L’encapsulation c L. Tichit, 2015-2016 POO et Java 1 / 1 L’encapsulation La programmation orient ee objets

L’encapsulation

Objets contenant d’autres objets

Les objets peuvent avoir (ont souvent) pour membresd’autres objets

Exemple : un objet Rectangle est defini par deuxobjets Point

(a,b)

(c,d)Bonne nouvelle : il n’y a pas de probleme particulier pour l’initialisation :

Fichier Rectangle.java

class Rectangle {Point coinNO, coinSE;

Rectangle(int a, int b, int c, int d) {coinNO = new Point(a, b);

coinSE = new Point(c, d);

}...

}

c©L. Tichit, 2015-2016 POO et Java 20 / 1

Page 75: Cours 2: L’encapsulationtichit/java/cours/JavaBBSG2-02.pdfCours 2: L’encapsulation c L. Tichit, 2015-2016 POO et Java 1 / 1 L’encapsulation La programmation orient ee objets

L’encapsulation

Objets contenant d’autres objets

Les objets peuvent avoir (ont souvent) pour membresd’autres objets

Exemple : un objet Rectangle est defini par deuxobjets Point

(a,b)

(c,d)Bonne nouvelle : il n’y a pas de probleme particulier pour l’initialisation :

Fichier Rectangle.java

class Rectangle {Point coinNO, coinSE;

Rectangle(int a, int b, int c, int d) {coinNO = new Point(a, b);

coinSE = new Point(c, d);

}...

}

c©L. Tichit, 2015-2016 POO et Java 20 / 1

Page 76: Cours 2: L’encapsulationtichit/java/cours/JavaBBSG2-02.pdfCours 2: L’encapsulation c L. Tichit, 2015-2016 POO et Java 1 / 1 L’encapsulation La programmation orient ee objets

L’encapsulation

(a propos...)

Mise en garde sur une erreur grave que le compilateur ne peut pas deceler

Fichier Rectangle.java

class Rectangle {Point coinNO, coinSE;

Rectangle(int a, int b, int c, int d) {Point coinNO = new Point(a, b);Point coinSE = new Point(c, d);

}...

public static void main(String[] args) {Rectangle r = new Rectangle(1, 2, 3, 4);System.out.println(r.coinNO + ":" + r.coinSE);

}}

On obtient invariablement (0,0):(0,0)

c©L. Tichit, 2015-2016 POO et Java 21 / 1

Page 77: Cours 2: L’encapsulationtichit/java/cours/JavaBBSG2-02.pdfCours 2: L’encapsulation c L. Tichit, 2015-2016 POO et Java 1 / 1 L’encapsulation La programmation orient ee objets

L’encapsulation

(a propos...)

Mise en garde sur une erreur grave que le compilateur ne peut pas deceler

Fichier Rectangle.java

class Rectangle {Point coinNO, coinSE;

Rectangle(int a, int b, int c, int d) {Point coinNO = new Point(a, b);Point coinSE = new Point(c, d);

}...public static void main(String[] args) {

Rectangle r = new Rectangle(1, 2, 3, 4);System.out.println(r.coinNO + ":" + r.coinSE);

}}

On obtient invariablement (0,0):(0,0)

c©L. Tichit, 2015-2016 POO et Java 21 / 1

Page 78: Cours 2: L’encapsulationtichit/java/cours/JavaBBSG2-02.pdfCours 2: L’encapsulation c L. Tichit, 2015-2016 POO et Java 1 / 1 L’encapsulation La programmation orient ee objets

L’encapsulation

(a propos...)

Mise en garde sur une erreur grave que le compilateur ne peut pas deceler

Fichier Rectangle.java

class Rectangle {Point coinNO, coinSE;

Rectangle(int a, int b, int c, int d) {Point coinNO = new Point(a, b);Point coinSE = new Point(c, d);

}...public static void main(String[] args) {

Rectangle r = new Rectangle(1, 2, 3, 4);System.out.println(r.coinNO + ":" + r.coinSE);

}}

On obtient invariablement (0,0):(0,0)

c©L. Tichit, 2015-2016 POO et Java 21 / 1

Page 79: Cours 2: L’encapsulationtichit/java/cours/JavaBBSG2-02.pdfCours 2: L’encapsulation c L. Tichit, 2015-2016 POO et Java 1 / 1 L’encapsulation La programmation orient ee objets

L’encapsulation

(a propos...)

Mise en garde sur une erreur grave que le compilateur ne peut pas deceler

Fichier Rectangle.java

class Rectangle {Point coinNO, coinSE;

Rectangle(int a, int b, int c, int d) {Point coinNO = new Point(a, b);Point coinSE = new Point(c, d);

}...public static void main(String[] args) {

Rectangle r = new Rectangle(1, 2, 3, 4);System.out.println(r.coinNO + ":" + r.coinSE);

}}

On obtient invariablement (0,0):(0,0)

c©L. Tichit, 2015-2016 POO et Java 21 / 1

Page 80: Cours 2: L’encapsulationtichit/java/cours/JavaBBSG2-02.pdfCours 2: L’encapsulation c L. Tichit, 2015-2016 POO et Java 1 / 1 L’encapsulation La programmation orient ee objets

L’encapsulation

Initialisation des variables de classe

creees lors de la creation des objets (new), les variables d’instance peuvent etre initialiseesdans les constructeurs

les variables de classe sont creees au lancement du programme ; comment les initialiser ?

autant que possible, utiliser des affectations

public class Recipient {static int n = 64;

static String[] jours = { "lundi", "mardi", ... "dimanche" };...

mais comment faire ceci ?

static long[] puis2 =

{ 1, 2, 4, 8, 16, 32, 64, 128, ... 18446744073709551616};... (il y a n valeurs, n defini plus haut)

c©L. Tichit, 2015-2016 POO et Java 22 / 1

Page 81: Cours 2: L’encapsulationtichit/java/cours/JavaBBSG2-02.pdfCours 2: L’encapsulation c L. Tichit, 2015-2016 POO et Java 1 / 1 L’encapsulation La programmation orient ee objets

L’encapsulation

Initialisation des variables de classe

creees lors de la creation des objets (new), les variables d’instance peuvent etre initialiseesdans les constructeurs

les variables de classe sont creees au lancement du programme ; comment les initialiser ?

autant que possible, utiliser des affectations

public class Recipient {static int n = 64;

static String[] jours = { "lundi", "mardi", ... "dimanche" };...

mais comment faire ceci ?

static long[] puis2 =

{ 1, 2, 4, 8, 16, 32, 64, 128, ... 18446744073709551616};... (il y a n valeurs, n defini plus haut)

c©L. Tichit, 2015-2016 POO et Java 22 / 1

Page 82: Cours 2: L’encapsulationtichit/java/cours/JavaBBSG2-02.pdfCours 2: L’encapsulation c L. Tichit, 2015-2016 POO et Java 1 / 1 L’encapsulation La programmation orient ee objets

L’encapsulation

Initialisation des variables de classe

creees lors de la creation des objets (new), les variables d’instance peuvent etre initialiseesdans les constructeurs

les variables de classe sont creees au lancement du programme ; comment les initialiser ?

autant que possible, utiliser des affectations

public class Recipient {static int n = 64;

static String[] jours = { "lundi", "mardi", ... "dimanche" };...

mais comment faire ceci ?

static long[] puis2 =

{ 1, 2, 4, 8, 16, 32, 64, 128, ... 18446744073709551616};... (il y a n valeurs, n defini plus haut)

c©L. Tichit, 2015-2016 POO et Java 22 / 1

Page 83: Cours 2: L’encapsulationtichit/java/cours/JavaBBSG2-02.pdfCours 2: L’encapsulation c L. Tichit, 2015-2016 POO et Java 1 / 1 L’encapsulation La programmation orient ee objets

L’encapsulation

Initialisation des variables de classe

creees lors de la creation des objets (new), les variables d’instance peuvent etre initialiseesdans les constructeurs

les variables de classe sont creees au lancement du programme ; comment les initialiser ?

autant que possible, utiliser des affectations

public class Recipient {static int n = 64;

static String[] jours = { "lundi", "mardi", ... "dimanche" };...

mais comment faire ceci ?

static long[] puis2 =

{ 1, 2, 4, 8, 16, 32, 64, 128, ... 18446744073709551616};... (il y a n valeurs, n defini plus haut)

c©L. Tichit, 2015-2016 POO et Java 22 / 1

Page 84: Cours 2: L’encapsulationtichit/java/cours/JavaBBSG2-02.pdfCours 2: L’encapsulation c L. Tichit, 2015-2016 POO et Java 1 / 1 L’encapsulation La programmation orient ee objets

L’encapsulation

Initialisation des variables de classe

� bloc statique � : morceau de code a executer lors du chargement de la classe

public class Recipient {static int n = 64;

static String[] jours = { "lundi", "mardi", ... "dimanche" };...

static long[] puis2 = new long[n];

static {puis2[0] = 1;

for (int i = 1; i < n; i++)

puis2[i] = 2 * puis2[i - 1];

}...

}

c©L. Tichit, 2015-2016 POO et Java 23 / 1

Page 85: Cours 2: L’encapsulationtichit/java/cours/JavaBBSG2-02.pdfCours 2: L’encapsulation c L. Tichit, 2015-2016 POO et Java 1 / 1 L’encapsulation La programmation orient ee objets

L’encapsulation

Droits d’acces aux membres des classes

Question : quels membres d’un objet a-t-on le droit de mentionner ?

il s’agit d’un droit relatif : la question se pose lors de l’ecriture d’une methode, ilfaut savoir dans quelle classe cela se fait

un membre (variable ou methode, d’instance ou de classe) peut etre qualifie

ils est alors accessibleprivate depuis les methodes de la meme classe...(rien) ...et les methodes des classes du meme paquet...protected ...et les methodes des sous-classes (cf. cours 3)...public ...et les methodes de toutes les classes

cela n’a rien a voir

avec la notation : le membre x de l’objet p s’ecrit p.xqu’on ait ou non le droit d’y accederavec la directive import

(qui ne concerne que la maniere de nommer les classes)

c©L. Tichit, 2015-2016 POO et Java 24 / 1

Page 86: Cours 2: L’encapsulationtichit/java/cours/JavaBBSG2-02.pdfCours 2: L’encapsulation c L. Tichit, 2015-2016 POO et Java 1 / 1 L’encapsulation La programmation orient ee objets

L’encapsulation

Droits d’acces aux membres des classes

Question : quels membres d’un objet a-t-on le droit de mentionner ?

il s’agit d’un droit relatif : la question se pose lors de l’ecriture d’une methode, ilfaut savoir dans quelle classe cela se fait

un membre (variable ou methode, d’instance ou de classe) peut etre qualifie

ils est alors accessibleprivate depuis les methodes de la meme classe...(rien) ...et les methodes des classes du meme paquet...protected ...et les methodes des sous-classes (cf. cours 3)...public ...et les methodes de toutes les classes

cela n’a rien a voir

avec la notation : le membre x de l’objet p s’ecrit p.xqu’on ait ou non le droit d’y accederavec la directive import

(qui ne concerne que la maniere de nommer les classes)

c©L. Tichit, 2015-2016 POO et Java 24 / 1

Page 87: Cours 2: L’encapsulationtichit/java/cours/JavaBBSG2-02.pdfCours 2: L’encapsulation c L. Tichit, 2015-2016 POO et Java 1 / 1 L’encapsulation La programmation orient ee objets

L’encapsulation

Droits d’acces aux membres des classes

Question : quels membres d’un objet a-t-on le droit de mentionner ?

il s’agit d’un droit relatif : la question se pose lors de l’ecriture d’une methode, ilfaut savoir dans quelle classe cela se fait

un membre (variable ou methode, d’instance ou de classe) peut etre qualifie

ils est alors accessibleprivate depuis les methodes de la meme classe...

(rien) ...et les methodes des classes du meme paquet...protected ...et les methodes des sous-classes (cf. cours 3)...public ...et les methodes de toutes les classes

cela n’a rien a voir

avec la notation : le membre x de l’objet p s’ecrit p.xqu’on ait ou non le droit d’y accederavec la directive import

(qui ne concerne que la maniere de nommer les classes)

c©L. Tichit, 2015-2016 POO et Java 24 / 1

Page 88: Cours 2: L’encapsulationtichit/java/cours/JavaBBSG2-02.pdfCours 2: L’encapsulation c L. Tichit, 2015-2016 POO et Java 1 / 1 L’encapsulation La programmation orient ee objets

L’encapsulation

Droits d’acces aux membres des classes

Question : quels membres d’un objet a-t-on le droit de mentionner ?

il s’agit d’un droit relatif : la question se pose lors de l’ecriture d’une methode, ilfaut savoir dans quelle classe cela se fait

un membre (variable ou methode, d’instance ou de classe) peut etre qualifie

ils est alors accessibleprivate depuis les methodes de la meme classe...(rien) ...et les methodes des classes du meme paquet...

protected ...et les methodes des sous-classes (cf. cours 3)...public ...et les methodes de toutes les classes

cela n’a rien a voir

avec la notation : le membre x de l’objet p s’ecrit p.xqu’on ait ou non le droit d’y accederavec la directive import

(qui ne concerne que la maniere de nommer les classes)

c©L. Tichit, 2015-2016 POO et Java 24 / 1

Page 89: Cours 2: L’encapsulationtichit/java/cours/JavaBBSG2-02.pdfCours 2: L’encapsulation c L. Tichit, 2015-2016 POO et Java 1 / 1 L’encapsulation La programmation orient ee objets

L’encapsulation

Droits d’acces aux membres des classes

Question : quels membres d’un objet a-t-on le droit de mentionner ?

il s’agit d’un droit relatif : la question se pose lors de l’ecriture d’une methode, ilfaut savoir dans quelle classe cela se fait

un membre (variable ou methode, d’instance ou de classe) peut etre qualifie

ils est alors accessibleprivate depuis les methodes de la meme classe...(rien) ...et les methodes des classes du meme paquet...protected ...et les methodes des sous-classes (cf. cours 3)...

public ...et les methodes de toutes les classes

cela n’a rien a voir

avec la notation : le membre x de l’objet p s’ecrit p.xqu’on ait ou non le droit d’y accederavec la directive import

(qui ne concerne que la maniere de nommer les classes)

c©L. Tichit, 2015-2016 POO et Java 24 / 1

Page 90: Cours 2: L’encapsulationtichit/java/cours/JavaBBSG2-02.pdfCours 2: L’encapsulation c L. Tichit, 2015-2016 POO et Java 1 / 1 L’encapsulation La programmation orient ee objets

L’encapsulation

Droits d’acces aux membres des classes

Question : quels membres d’un objet a-t-on le droit de mentionner ?

il s’agit d’un droit relatif : la question se pose lors de l’ecriture d’une methode, ilfaut savoir dans quelle classe cela se fait

un membre (variable ou methode, d’instance ou de classe) peut etre qualifie

ils est alors accessibleprivate depuis les methodes de la meme classe...(rien) ...et les methodes des classes du meme paquet...protected ...et les methodes des sous-classes (cf. cours 3)...public ...et les methodes de toutes les classes

cela n’a rien a voir

avec la notation : le membre x de l’objet p s’ecrit p.xqu’on ait ou non le droit d’y accederavec la directive import

(qui ne concerne que la maniere de nommer les classes)

c©L. Tichit, 2015-2016 POO et Java 24 / 1

Page 91: Cours 2: L’encapsulationtichit/java/cours/JavaBBSG2-02.pdfCours 2: L’encapsulation c L. Tichit, 2015-2016 POO et Java 1 / 1 L’encapsulation La programmation orient ee objets

L’encapsulation

Droits d’acces aux membres des classes

Question : quels membres d’un objet a-t-on le droit de mentionner ?

il s’agit d’un droit relatif : la question se pose lors de l’ecriture d’une methode, ilfaut savoir dans quelle classe cela se fait

un membre (variable ou methode, d’instance ou de classe) peut etre qualifie

ils est alors accessibleprivate depuis les methodes de la meme classe...(rien) ...et les methodes des classes du meme paquet...protected ...et les methodes des sous-classes (cf. cours 3)...public ...et les methodes de toutes les classes

cela n’a rien a voir

avec la notation : le membre x de l’objet p s’ecrit p.xqu’on ait ou non le droit d’y acceder

avec la directive import

(qui ne concerne que la maniere de nommer les classes)

c©L. Tichit, 2015-2016 POO et Java 24 / 1

Page 92: Cours 2: L’encapsulationtichit/java/cours/JavaBBSG2-02.pdfCours 2: L’encapsulation c L. Tichit, 2015-2016 POO et Java 1 / 1 L’encapsulation La programmation orient ee objets

L’encapsulation

Droits d’acces aux membres des classes

Question : quels membres d’un objet a-t-on le droit de mentionner ?

il s’agit d’un droit relatif : la question se pose lors de l’ecriture d’une methode, ilfaut savoir dans quelle classe cela se fait

un membre (variable ou methode, d’instance ou de classe) peut etre qualifie

ils est alors accessibleprivate depuis les methodes de la meme classe...(rien) ...et les methodes des classes du meme paquet...protected ...et les methodes des sous-classes (cf. cours 3)...public ...et les methodes de toutes les classes

cela n’a rien a voir

avec la notation : le membre x de l’objet p s’ecrit p.xqu’on ait ou non le droit d’y accederavec la directive import

(qui ne concerne que la maniere de nommer les classes)

c©L. Tichit, 2015-2016 POO et Java 24 / 1

Page 93: Cours 2: L’encapsulationtichit/java/cours/JavaBBSG2-02.pdfCours 2: L’encapsulation c L. Tichit, 2015-2016 POO et Java 1 / 1 L’encapsulation La programmation orient ee objets

L’encapsulation

Droits d’acces, exemple

Fichier Point.java

class Point {private int x, y;

public void placer(int x, int y) {� validation de x et y �

this.x = x;this.y = y;

}public Point(int x, int y) {

placer(x, y);}public int getX() {

return x;}public int getY() {

return y;}...

}

Benefice retire

un point ne peut etreconstruit que parnew Point(a,b)

il ne peut etre modifie quepar p.placer(a,b)

donc on peut garantir quetout point estconstamment valide

c©L. Tichit, 2015-2016 POO et Java 25 / 1

Page 94: Cours 2: L’encapsulationtichit/java/cours/JavaBBSG2-02.pdfCours 2: L’encapsulation c L. Tichit, 2015-2016 POO et Java 1 / 1 L’encapsulation La programmation orient ee objets

L’encapsulation

Droits d’acces, exemple

Fichier Point.java

class Point {private int x, y;

public void placer(int x, int y) {� validation de x et y �

this.x = x;this.y = y;

}

public Point(int x, int y) {placer(x, y);

}public int getX() {

return x;}public int getY() {

return y;}...

}

Benefice retire

un point ne peut etreconstruit que parnew Point(a,b)

il ne peut etre modifie quepar p.placer(a,b)

donc on peut garantir quetout point estconstamment valide

c©L. Tichit, 2015-2016 POO et Java 25 / 1

Page 95: Cours 2: L’encapsulationtichit/java/cours/JavaBBSG2-02.pdfCours 2: L’encapsulation c L. Tichit, 2015-2016 POO et Java 1 / 1 L’encapsulation La programmation orient ee objets

L’encapsulation

Droits d’acces, exemple

Fichier Point.java

class Point {private int x, y;

public void placer(int x, int y) {� validation de x et y �

this.x = x;this.y = y;

}public Point(int x, int y) {

placer(x, y);}

public int getX() {return x;

}public int getY() {

return y;}...

}

Benefice retire

un point ne peut etreconstruit que parnew Point(a,b)

il ne peut etre modifie quepar p.placer(a,b)

donc on peut garantir quetout point estconstamment valide

c©L. Tichit, 2015-2016 POO et Java 25 / 1

Page 96: Cours 2: L’encapsulationtichit/java/cours/JavaBBSG2-02.pdfCours 2: L’encapsulation c L. Tichit, 2015-2016 POO et Java 1 / 1 L’encapsulation La programmation orient ee objets

L’encapsulation

Droits d’acces, exemple

Fichier Point.java

class Point {private int x, y;

public void placer(int x, int y) {� validation de x et y �

this.x = x;this.y = y;

}public Point(int x, int y) {

placer(x, y);}public int getX() {

return x;}public int getY() {

return y;}...

}

Benefice retire

un point ne peut etreconstruit que parnew Point(a,b)

il ne peut etre modifie quepar p.placer(a,b)

donc on peut garantir quetout point estconstamment valide

c©L. Tichit, 2015-2016 POO et Java 25 / 1

Page 97: Cours 2: L’encapsulationtichit/java/cours/JavaBBSG2-02.pdfCours 2: L’encapsulation c L. Tichit, 2015-2016 POO et Java 1 / 1 L’encapsulation La programmation orient ee objets

L’encapsulation

Droits d’acces, exemple

Fichier Point.java

class Point {private int x, y;

public void placer(int x, int y) {� validation de x et y �

this.x = x;this.y = y;

}public Point(int x, int y) {

placer(x, y);}public int getX() {

return x;}public int getY() {

return y;}...

}

Benefice retire

un point ne peut etreconstruit que parnew Point(a,b)

il ne peut etre modifie quepar p.placer(a,b)

donc on peut garantir quetout point estconstamment valide

c©L. Tichit, 2015-2016 POO et Java 25 / 1

Page 98: Cours 2: L’encapsulationtichit/java/cours/JavaBBSG2-02.pdfCours 2: L’encapsulation c L. Tichit, 2015-2016 POO et Java 1 / 1 L’encapsulation La programmation orient ee objets

L’encapsulation

Droits d’acces, exemple

Fichier Point.java

class Point {private int x, y;

public void placer(int x, int y) {� validation de x et y �

this.x = x;this.y = y;

}public Point(int x, int y) {

placer(x, y);}public int getX() {

return x;}public int getY() {

return y;}...

}

Benefice retire

un point ne peut etreconstruit que parnew Point(a,b)

il ne peut etre modifie quepar p.placer(a,b)

donc on peut garantir quetout point estconstamment valide

c©L. Tichit, 2015-2016 POO et Java 25 / 1

Page 99: Cours 2: L’encapsulationtichit/java/cours/JavaBBSG2-02.pdfCours 2: L’encapsulation c L. Tichit, 2015-2016 POO et Java 1 / 1 L’encapsulation La programmation orient ee objets

L’encapsulation

Droits d’acces, exemple

Fichier Point.java

class Point {private int x, y;

public void placer(int x, int y) {� validation de x et y �

this.x = x;this.y = y;

}public Point(int x, int y) {

placer(x, y);}public int getX() {

return x;}public int getY() {

return y;}...

}

Benefice retire

un point ne peut etreconstruit que parnew Point(a,b)

il ne peut etre modifie quepar p.placer(a,b)

donc on peut garantir quetout point estconstamment valide

c©L. Tichit, 2015-2016 POO et Java 25 / 1

Page 100: Cours 2: L’encapsulationtichit/java/cours/JavaBBSG2-02.pdfCours 2: L’encapsulation c L. Tichit, 2015-2016 POO et Java 1 / 1 L’encapsulation La programmation orient ee objets

L’encapsulation

A propos d’accesseurs

En quoi la configuration

Fichier Point.java

class Point {private int x, y;

public int getX() {return x;

}public int getY() {

return y;

}...

}

est-elle meilleure que

Fichier Point.java

class Point {public int x, y;

...

}

la consultation de x et y depuis l’exterieur de la classe Point est renduepossible dans les deux cas

dans le premier cas la modification de x ou y est impossible

c©L. Tichit, 2015-2016 POO et Java 26 / 1

Page 101: Cours 2: L’encapsulationtichit/java/cours/JavaBBSG2-02.pdfCours 2: L’encapsulation c L. Tichit, 2015-2016 POO et Java 1 / 1 L’encapsulation La programmation orient ee objets

L’encapsulation

A propos d’accesseurs

En quoi la configuration

Fichier Point.java

class Point {private int x, y;

public int getX() {return x;

}public int getY() {

return y;

}...

}

est-elle meilleure que

Fichier Point.java

class Point {public int x, y;

...

}

la consultation de x et y depuis l’exterieur de la classe Point est renduepossible dans les deux cas

dans le premier cas la modification de x ou y est impossible

c©L. Tichit, 2015-2016 POO et Java 26 / 1

Page 102: Cours 2: L’encapsulationtichit/java/cours/JavaBBSG2-02.pdfCours 2: L’encapsulation c L. Tichit, 2015-2016 POO et Java 1 / 1 L’encapsulation La programmation orient ee objets

L’encapsulation

La vue publique d’une classe

Ce que les utilisateurs ont besoin de savoir (ailleurs on dit � interface �)

L’interface (au sens de face publique) de la classe Point :

class Point {/* creation d’un point de coordonnees x et y */

public Point(int x, int y);/* modification des coordonnees d’un point */

public void placer(int x, int y);/* abscisse du point */

public int getX();/* ordonnee du point */

public int getY();...

}

Encapsuler : cacher les details internes, pour

garantir la correction des objetsgarantir qu’aucune application ne s’appuie sur ces detailsqui peuvent donc etre changes sans provoquer d’erreur

c©L. Tichit, 2015-2016 POO et Java 27 / 1

Page 103: Cours 2: L’encapsulationtichit/java/cours/JavaBBSG2-02.pdfCours 2: L’encapsulation c L. Tichit, 2015-2016 POO et Java 1 / 1 L’encapsulation La programmation orient ee objets

L’encapsulation

La vue publique d’une classe

Ce que les utilisateurs ont besoin de savoir (ailleurs on dit � interface �)

L’interface (au sens de face publique) de la classe Point :

class Point {/* creation d’un point de coordonnees x et y */

public Point(int x, int y);/* modification des coordonnees d’un point */

public void placer(int x, int y);/* abscisse du point */

public int getX();/* ordonnee du point */

public int getY();...

}

Encapsuler : cacher les details internes, pour

garantir la correction des objets

garantir qu’aucune application ne s’appuie sur ces detailsqui peuvent donc etre changes sans provoquer d’erreur

c©L. Tichit, 2015-2016 POO et Java 27 / 1

Page 104: Cours 2: L’encapsulationtichit/java/cours/JavaBBSG2-02.pdfCours 2: L’encapsulation c L. Tichit, 2015-2016 POO et Java 1 / 1 L’encapsulation La programmation orient ee objets

L’encapsulation

La vue publique d’une classe

Ce que les utilisateurs ont besoin de savoir (ailleurs on dit � interface �)

L’interface (au sens de face publique) de la classe Point :

class Point {/* creation d’un point de coordonnees x et y */

public Point(int x, int y);/* modification des coordonnees d’un point */

public void placer(int x, int y);/* abscisse du point */

public int getX();/* ordonnee du point */

public int getY();...

}

Encapsuler : cacher les details internes, pour

garantir la correction des objetsgarantir qu’aucune application ne s’appuie sur ces detailsqui peuvent donc etre changes sans provoquer d’erreur

c©L. Tichit, 2015-2016 POO et Java 27 / 1

Page 105: Cours 2: L’encapsulationtichit/java/cours/JavaBBSG2-02.pdfCours 2: L’encapsulation c L. Tichit, 2015-2016 POO et Java 1 / 1 L’encapsulation La programmation orient ee objets

L’encapsulation

Encapsulation

Un gros benefice : independance de l’implementation

Fichier Point.java

class Point {private int r, t;

public void placer(int x, int y) {r = Math.sqrt(x * x + y * y);t = Math.atan2(y, x);

}public Point(int x, int y) {

placer(x, y);}public int getX() {

return r * Math.cos(t);}public int getY() {

return r * Math.sin(t);}...

}

x

yr

t

P

Aucune application utilisantla precedente version dePoint n’est devenue obsolete

c©L. Tichit, 2015-2016 POO et Java 28 / 1

Page 106: Cours 2: L’encapsulationtichit/java/cours/JavaBBSG2-02.pdfCours 2: L’encapsulation c L. Tichit, 2015-2016 POO et Java 1 / 1 L’encapsulation La programmation orient ee objets

L’encapsulation

Encapsulation

Un gros benefice : independance de l’implementation

Fichier Point.java

class Point {private int r, t;

public void placer(int x, int y) {r = Math.sqrt(x * x + y * y);t = Math.atan2(y, x);

}public Point(int x, int y) {

placer(x, y);}public int getX() {

return r * Math.cos(t);}public int getY() {

return r * Math.sin(t);}...

}

x

yr

t

P

Aucune application utilisantla precedente version dePoint n’est devenue obsolete

c©L. Tichit, 2015-2016 POO et Java 28 / 1

Page 107: Cours 2: L’encapsulationtichit/java/cours/JavaBBSG2-02.pdfCours 2: L’encapsulation c L. Tichit, 2015-2016 POO et Java 1 / 1 L’encapsulation La programmation orient ee objets

L’encapsulation

Classes publiques et � par defaut �

les classes avec visibilite par defaut (i.e. non qualifiees public) sont accessiblesuniquement depuis les classes de leur propre paquetage

package mesAffaires.outils;class Machin {

...}

les classes qualifiees public sont accessibles depuis les classes de tous lespaquetages

package mesAffaires.outils;public class Truc {

...}

les classes public imposent le � chemin � du fichier qui les contient :

la classe Truc doit se trouver dans un fichier nomme Truc.java

place dans le dossier ./mesAffaires/outils

c©L. Tichit, 2015-2016 POO et Java 29 / 1

Page 108: Cours 2: L’encapsulationtichit/java/cours/JavaBBSG2-02.pdfCours 2: L’encapsulation c L. Tichit, 2015-2016 POO et Java 1 / 1 L’encapsulation La programmation orient ee objets

L’encapsulation

Classes publiques et � par defaut �

les classes avec visibilite par defaut (i.e. non qualifiees public) sont accessiblesuniquement depuis les classes de leur propre paquetage

package mesAffaires.outils;class Machin {

...}

les classes qualifiees public sont accessibles depuis les classes de tous lespaquetages

package mesAffaires.outils;public class Truc {

...}

les classes public imposent le � chemin � du fichier qui les contient :

la classe Truc doit se trouver dans un fichier nomme Truc.java

place dans le dossier ./mesAffaires/outils

c©L. Tichit, 2015-2016 POO et Java 29 / 1

Page 109: Cours 2: L’encapsulationtichit/java/cours/JavaBBSG2-02.pdfCours 2: L’encapsulation c L. Tichit, 2015-2016 POO et Java 1 / 1 L’encapsulation La programmation orient ee objets

L’encapsulation

Classes publiques et � par defaut �

les classes avec visibilite par defaut (i.e. non qualifiees public) sont accessiblesuniquement depuis les classes de leur propre paquetage

package mesAffaires.outils;class Machin {

...}

les classes qualifiees public sont accessibles depuis les classes de tous lespaquetages

package mesAffaires.outils;public class Truc {

...}

les classes public imposent le � chemin � du fichier qui les contient :

la classe Truc doit se trouver dans un fichier nomme Truc.java

place dans le dossier ./mesAffaires/outils

c©L. Tichit, 2015-2016 POO et Java 29 / 1

Page 110: Cours 2: L’encapsulationtichit/java/cours/JavaBBSG2-02.pdfCours 2: L’encapsulation c L. Tichit, 2015-2016 POO et Java 1 / 1 L’encapsulation La programmation orient ee objets

L’encapsulation

Variables finales

Une variable (d’instance ou de classe) qualifiee final ne doit pas changer de valeur

variable d’instance : recoit une valeur a 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;

public Point(int x, int y) {if (nombreDePoints > MAX POINTS)

signaler une erreur � trop de points �

this.x = x;this.y = y;rang = nombreDePoints;nombreDePoints++;

}...

}

c©L. Tichit, 2015-2016 POO et Java 30 / 1

Page 111: Cours 2: L’encapsulationtichit/java/cours/JavaBBSG2-02.pdfCours 2: L’encapsulation c L. Tichit, 2015-2016 POO et Java 1 / 1 L’encapsulation La programmation orient ee objets

L’encapsulation

Variables finales

Une variable (d’instance ou de classe) qualifiee final ne doit pas changer de valeur

variable d’instance : recoit une valeur a 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;

public Point(int x, int y) {if (nombreDePoints > MAX POINTS)

signaler une erreur � trop de points �

this.x = x;this.y = y;rang = nombreDePoints;nombreDePoints++;

}...

}

c©L. Tichit, 2015-2016 POO et Java 30 / 1

Page 112: Cours 2: L’encapsulationtichit/java/cours/JavaBBSG2-02.pdfCours 2: L’encapsulation c L. Tichit, 2015-2016 POO et Java 1 / 1 L’encapsulation La programmation orient ee objets

L’encapsulation

Variables finales

Une variable (d’instance ou de classe) qualifiee final ne doit pas changer de valeur

variable d’instance : recoit une valeur a 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;

public Point(int x, int y) {if (nombreDePoints > MAX POINTS)

signaler une erreur � trop de points �

this.x = x;this.y = y;rang = nombreDePoints;nombreDePoints++;

}...

}

c©L. Tichit, 2015-2016 POO et Java 30 / 1

Page 113: Cours 2: L’encapsulationtichit/java/cours/JavaBBSG2-02.pdfCours 2: L’encapsulation c L. Tichit, 2015-2016 POO et Java 1 / 1 L’encapsulation La programmation orient ee objets

L’encapsulation

Variables finales

Une variable (d’instance ou de classe) qualifiee final ne doit pas changer de valeur

variable d’instance : recoit une valeur a 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;

public Point(int x, int y) {if (nombreDePoints > MAX POINTS)

signaler une erreur � trop de points �

this.x = x;this.y = y;rang = nombreDePoints;nombreDePoints++;

}...

}

c©L. Tichit, 2015-2016 POO et Java 30 / 1

Page 114: Cours 2: L’encapsulationtichit/java/cours/JavaBBSG2-02.pdfCours 2: L’encapsulation c L. Tichit, 2015-2016 POO et Java 1 / 1 L’encapsulation La programmation orient ee objets

L’encapsulation

Variables finales

Une variable (d’instance ou de classe) qualifiee final ne doit pas changer de valeur

variable d’instance : recoit une valeur a 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;

public Point(int x, int y) {if (nombreDePoints > MAX POINTS)

signaler une erreur � trop de points �

this.x = x;this.y = y;rang = nombreDePoints;nombreDePoints++;

}...

}

c©L. Tichit, 2015-2016 POO et Java 30 / 1

Page 115: Cours 2: L’encapsulationtichit/java/cours/JavaBBSG2-02.pdfCours 2: L’encapsulation c L. Tichit, 2015-2016 POO et Java 1 / 1 L’encapsulation La programmation orient ee objets

L’encapsulation

Variables finales

Une variable (d’instance ou de classe) qualifiee final ne doit pas changer de valeur

variable d’instance : recoit une valeur a 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;

public Point(int x, int y) {if (nombreDePoints > MAX POINTS)

signaler une erreur � trop de points �

this.x = x;this.y = y;rang = nombreDePoints;nombreDePoints++;

}...

}

c©L. Tichit, 2015-2016 POO et Java 30 / 1

Page 116: Cours 2: L’encapsulationtichit/java/cours/JavaBBSG2-02.pdfCours 2: L’encapsulation c L. Tichit, 2015-2016 POO et Java 1 / 1 L’encapsulation La programmation orient ee objets

L’encapsulation

Acces par reference aux objets

Les objets sont toujours designes par reference

la declaration d’une variable de type objet ne donne qu’un pointeur null :

Point p;

pnull

l’objet n’existe qu’a partir de l’operation new qui le cree :

p = new Point(2, 3);

x y

p

2 3

c©L. Tichit, 2015-2016 POO et Java 31 / 1

Page 117: Cours 2: L’encapsulationtichit/java/cours/JavaBBSG2-02.pdfCours 2: L’encapsulation c L. Tichit, 2015-2016 POO et Java 1 / 1 L’encapsulation La programmation orient ee objets

L’encapsulation

Acces par reference aux objets

Les objets sont toujours designes par reference

la declaration d’une variable de type objet ne donne qu’un pointeur null :

Point p;

pnull

l’objet n’existe qu’a partir de l’operation new qui le cree :

p = new Point(2, 3);

x y

p

2 3

c©L. Tichit, 2015-2016 POO et Java 31 / 1

Page 118: Cours 2: L’encapsulationtichit/java/cours/JavaBBSG2-02.pdfCours 2: L’encapsulation c L. Tichit, 2015-2016 POO et Java 1 / 1 L’encapsulation La programmation orient ee objets

L’encapsulation

Acces par reference aux objets

Consequence sur la � duplication � des objets

Point p = new Point(2, 3);

...

Point q = p;

par la suite, p et q se revelent etrangement lies.

La raison :

p

2 3

q

pour dupliquer effectivement un objet :

q = (Point) p.clone();

p

2 3

q

2 3

c©L. Tichit, 2015-2016 POO et Java 32 / 1

Page 119: Cours 2: L’encapsulationtichit/java/cours/JavaBBSG2-02.pdfCours 2: L’encapsulation c L. Tichit, 2015-2016 POO et Java 1 / 1 L’encapsulation La programmation orient ee objets

L’encapsulation

Acces par reference aux objets

Consequence sur la � duplication � des objets

Point p = new Point(2, 3);

...

Point q = p;

par la suite, p et q se revelent etrangement lies. La raison :

p

2 3

q

pour dupliquer effectivement un objet :

q = (Point) p.clone();

p

2 3

q

2 3

c©L. Tichit, 2015-2016 POO et Java 32 / 1

Page 120: Cours 2: L’encapsulationtichit/java/cours/JavaBBSG2-02.pdfCours 2: L’encapsulation c L. Tichit, 2015-2016 POO et Java 1 / 1 L’encapsulation La programmation orient ee objets

L’encapsulation

Acces par reference aux objets

Consequence sur la � duplication � des objets

Point p = new Point(2, 3);

...

Point q = p;

par la suite, p et q se revelent etrangement lies. La raison :

p

2 3

q

pour dupliquer effectivement un objet :

q = (Point) p.clone();

p

2 3

q

2 3

c©L. Tichit, 2015-2016 POO et Java 32 / 1

Page 121: Cours 2: L’encapsulationtichit/java/cours/JavaBBSG2-02.pdfCours 2: L’encapsulation c L. Tichit, 2015-2016 POO et Java 1 / 1 L’encapsulation La programmation orient ee objets

L’encapsulation

Acces par reference aux objets

Consequence sur la comparaison des objets

Point p = new Point(2, 3);

Point q = new Point(2, 3);

...

if ( p == q )

System.out.println("egaux");

...

le test se revele faux.

La raison :

p

2 3

q

2 3

la bonne comparaison

if ( p.equals(q) )

System.out.println("egaux");

...

c©L. Tichit, 2015-2016 POO et Java 33 / 1

Page 122: Cours 2: L’encapsulationtichit/java/cours/JavaBBSG2-02.pdfCours 2: L’encapsulation c L. Tichit, 2015-2016 POO et Java 1 / 1 L’encapsulation La programmation orient ee objets

L’encapsulation

Acces par reference aux objets

Consequence sur la comparaison des objets

Point p = new Point(2, 3);

Point q = new Point(2, 3);

...

if ( p == q )

System.out.println("egaux");

...

le test se revele faux. La raison :

p

2 3

q

2 3

la bonne comparaison

if ( p.equals(q) )

System.out.println("egaux");

...

c©L. Tichit, 2015-2016 POO et Java 33 / 1

Page 123: Cours 2: L’encapsulationtichit/java/cours/JavaBBSG2-02.pdfCours 2: L’encapsulation c L. Tichit, 2015-2016 POO et Java 1 / 1 L’encapsulation La programmation orient ee objets

L’encapsulation

Acces par reference aux objets

Consequence sur la comparaison des objets

Point p = new Point(2, 3);

Point q = new Point(2, 3);

...

if ( p == q )

System.out.println("egaux");

...

le test se revele faux. La raison :

p

2 3

q

2 3

la bonne comparaison

if ( p.equals(q) )

System.out.println("egaux");

...

c©L. Tichit, 2015-2016 POO et Java 33 / 1

Page 124: Cours 2: L’encapsulationtichit/java/cours/JavaBBSG2-02.pdfCours 2: L’encapsulation c L. Tichit, 2015-2016 POO et Java 1 / 1 L’encapsulation La programmation orient ee objets

L’encapsulation

A propos d’� oriente objets �

Programmation traditionnelle (ou � orientee actions �) :

debut de la reflexion, les actions : � qu’est-ce qu’on va faire �

plus tard apparaissent les donnees : � sur quoi ces actions portent ? �

les objets sont a l’interieur des actions(ils en sont les parametres, les resultats, etc.)

La programmation orientee objets inverse les termes :

le debut de la reflexion concerne les objetsles actions apparaissent comme attributs (le comportement) des objetsles actions sont a l’interieur des objets

tres adaptee aux problemes avec de nombreuses structures de donnees (exemple :les interfaces graphiques)

tous les probleme ne tirent pas forcement profit de la POO(exemple : deguiser de purs algorithmes en objets est un peu futile)

c©L. Tichit, 2015-2016 POO et Java 34 / 1

Page 125: Cours 2: L’encapsulationtichit/java/cours/JavaBBSG2-02.pdfCours 2: L’encapsulation c L. Tichit, 2015-2016 POO et Java 1 / 1 L’encapsulation La programmation orient ee objets

L’encapsulation

A propos d’� oriente objets �

Programmation traditionnelle (ou � orientee actions �) :

debut de la reflexion, les actions : � qu’est-ce qu’on va faire �

plus tard apparaissent les donnees : � sur quoi ces actions portent ? �

les objets sont a l’interieur des actions(ils en sont les parametres, les resultats, etc.)

La programmation orientee objets inverse les termes :

le debut de la reflexion concerne les objetsles actions apparaissent comme attributs (le comportement) des objetsles actions sont a l’interieur des objets

tres adaptee aux problemes avec de nombreuses structures de donnees (exemple :les interfaces graphiques)

tous les probleme ne tirent pas forcement profit de la POO(exemple : deguiser de purs algorithmes en objets est un peu futile)

c©L. Tichit, 2015-2016 POO et Java 34 / 1

Page 126: Cours 2: L’encapsulationtichit/java/cours/JavaBBSG2-02.pdfCours 2: L’encapsulation c L. Tichit, 2015-2016 POO et Java 1 / 1 L’encapsulation La programmation orient ee objets

L’encapsulation

A propos d’� oriente objets �

Programmation traditionnelle (ou � orientee actions �) :

debut de la reflexion, les actions : � qu’est-ce qu’on va faire �

plus tard apparaissent les donnees : � sur quoi ces actions portent ? �

les objets sont a l’interieur des actions(ils en sont les parametres, les resultats, etc.)

La programmation orientee objets inverse les termes :

le debut de la reflexion concerne les objetsles actions apparaissent comme attributs (le comportement) des objetsles actions sont a l’interieur des objets

tres adaptee aux problemes avec de nombreuses structures de donnees (exemple :les interfaces graphiques)

tous les probleme ne tirent pas forcement profit de la POO(exemple : deguiser de purs algorithmes en objets est un peu futile)

c©L. Tichit, 2015-2016 POO et Java 34 / 1