SlideShare une entreprise Scribd logo
1  sur  32
Télécharger pour lire hors ligne
POO avec JAVA
Chapitre 2
Définition D’OBJET et DE CLASSE
 La notion de classe généralise la notion
de type déjà vu et elle comporte des
champs et des méthodes.
 Celle d’objet généralise la notion de
variable déjà vu en P.S
 Un type classe permet d’instancier un ou
+sieurs objets de ce type, chaque objet
ayant ses propres données.
NOTION DE CLASSE (4)
public class Point {
private int x ; // abscisse
private int y ; // ordonnée
public void initialise (int abs, int ord) {
x = abs ;
y = ord ;
}
public void deplace (int dx, int dy) {
x = x + dx ;
y = y + dy ;
}
public double distance () {
double d ;
d = Math.sqrt (x*x + y*y) ;
return d ;
}
public void affiche (){
System.out.println ("Je suis un point de coordonnees (" + x + "," + y +")") ;
}
}
De la classe à l’objet/instance
 Syntaxe générale:
De la classe à l’objet/instance (2)
public classTstPoint {
public static void main (String [] args) {
Point a;
a = new Point() ;
a.initialise(3, 5) ; a.affiche() ;
a.deplace(2, 0) ; a.affiche() ;
System.out.println ("distance=" + a.distance() ) ;
Point b = new Point() ;
b.initialise (6, 8) ; b.affiche() ;
System.out.println ("distance=" + b.distance() ) ;
}
}
Notion de Constructeur
 Un constructeur n’est rien d’autre qu’une
méthode, sans valeur de retour, portant le
même nom que la classe. Il peut disposer d’un
nombre quelconque d’arguments (ou aucun).
 la notion de constructeur nous permet
d’automatiser le mécanisme d’initialisation d’un
objet. En outre, cette initialisation ne sera pas
limitée à la mise en place de valeurs initiales ;
 Dans son en-tête, aucun type ne doit figurer
devant son nom. Même la présence (logique) de
void est une erreur
Classe avec constructeur
public class Point {
private int x ; // abscisse
private int y ; // ordonnée
public Point (int abs, int ord) {
x = abs ; // constructeur
y = ord ;
}
……………………………………….
……………………………………….
classTruc {
.....
public voidTruc ( ) // erreur de compilation : void interdit ici
{ .....
}
}
Classe avec constructeur
•Cette fois, une instruction telle que :
Point a = new Point () ; ne convient plus : elle
serait refusée par le compilateur.
•Si une classe dispose d’un constructeur, il n’est plus
possible de créer un objet sans l’appeler.
•Celui-ci a besoin de deux arguments. Ceux-ci
doivent obligatoirement être fournis lors de la
création, par exemple :
•Point a = new Point (3, 5) ;
Adaptation du programme Test
public class TstPoint2 {
public static void main (String [] args) {
Point a;
a = new Point(3, 5);
a.affiche() ;
a.deplace(2, 0) ; a.affiche() ;
Point b = new Point(6, 8) ;
b.affiche() ;
System.out.println ("distance=" + b.distance() ) ;
}
}
Création d’un Objet
La création d’un objet entraine
successivement les opérations suivantes :
 Initialisation par défaut de tous les
champs de l’objet,
 Initialisation explicite lors de la
déclaration du champ,
 Exécution des instructions du corps du
constructeur.
Initialisation par défaut
Initialisation explicite
 Une variable locale peut être initialisée lors de sa
déclaration. C’est la même chose pour un champ.
class A {
private int n = 10 ;
private int p ;
public A (...) { ..... } // Constructeur de A
.....
}
A a = new A (...) ;//entraîne les 3 opérations de création
d’un objet
Appel du constructeur
class A {
private int n = 20, p = 10 ;
private int np ;
public A( ){ // ici, n vaut 20, p vaut 10 et np vaut 0
np = n * p ;
n = 5 ;
}
public void affiche( ){
System.out.println ("n = " + n + ", p = " + p + ", np = " + np) ;
}
}
/*----------------------------------------------------------------------------------------------*/
public class Init{
public static void main (String [] args){
A a = new A() ; // ici a.n vaut 5, a.p vaut 10, mais a.np vaut 200
a.affiche() ;
}
}
Autoréférence : le mot clé this
public Point(int abs, int ord){
x = abs ;
y = ord ;
}
public Point(int x, int y) {
this.x = x ; // notez les noms des arguments muets ici
this.y = y ; // ici x designe le premier argument de Point
// le champ x de l’objet courant est masque ; mais
// on peut le nommer this.x
}
Peut être aussi écrit ainsi :
SURDÉFINITION DE MÉTHODES
 C’est lorsqu’un même symbole possède
plusieurs significations différentes entre
lesquelles on choisit en fonction du contexte.
 En Java, cette possibilité de surdéfinition (ou
surcharge) s’applique aux méthodes d’une
classe, y compris aux méthodes statiques.
 Plusieurs méthodes peuvent porter le même
nom, pour peu que le nombre et le type de
leurs arguments permettent au compilateur
d’effectuer son choix.
SURDÉFINITION DE MÉTHODES
class Point{
private int x, y ;
public Point (int abs, int ord) {// constructeur
x = abs ; y = ord ;
}
public void deplace (int dx, int dy) {// deplace (int, int)
x =x + dx ;
y = y + dy ;
}
public void deplace (int dx) {// deplace (int)
x =x + dx ;
}
public void deplace (short dx) {// deplace (short)
x = x + dx ; }}
SURDÉFINITION DE MÉTHODES
public class Surdef1{
public static void main (String [] args){
Point a = new Point (1, 2);
a.deplace (1, 3) ; // appelle deplace (int, int)
a.deplace (2) ; // appelle deplace (int)
short p = 3 ;
a.deplace (p) ; // appelle deplace (short)
byte b = 2 ;
a.deplace (b) ; // appelle deplace (short) après conversion de
b en short
}
}
SURDÉFINITION DE MÉTHODES
(En cas d’ambiguïté du choix)
public void deplace (int dx, byte dy) { // deplace (int, byte)
x = x + dx ; y = y + dy ;
}
public void deplace (byte dx, int dy) { // deplace (byte, int)
x = x + dx ;}
Considérons ces instructions :
Point a = ...
int n ; byte b ;
a.deplace (n, b) ; // OK : appel de deplace (int, byte)
a.deplace (b, n) ; // OK : appel de deplace (byte, int)
a.deplace (b, b) ; // erreur : ambiguite
SURDÉFINITION DE MÉTHODES
(règles générales de recherche)
À la rencontre d’un appel donné, le compilateur
recherche toutes les méthodes acceptables et il
choisit la meilleure si elle existe. Pour qu’une méthode
soit acceptable, il faut :
 qu’elle dispose du nombre d’arguments voulus,
 que le type de chaque argument effectif soit
compatible par affectation avec le type de l’argument
muet correspondant,
 qu’elle soit accessible (méthode privée non
accessible depuis l’extérieur)
 Si aucune méthode n’est acceptable (erreur de
compilation)
 Si +sieurs méthodes sont acceptables, alors la
meilleur est utilisée.
SURDÉFINITION DE MÉTHODES
(quelques remarques)
 Le type de la valeur de retour d’une méthode
n’intervient pas dans le choix d’une méthode
surdéfinie.
 Possibilité de surcharge des méthodes de
classe, comme des méthodes usuelles.
 Aucun incidence des arguments déclarés final
SURDÉFINITION DE CONSTRUCTEURS
(exemple de classe Point)
class Point {
private int x, y ;
public Point (){// constructeur 1 (sans argument)
x = 0 ; y = 0 ;
}
public Point (int abs) {// constructeur 2 (un argument)
x = y = abs ;
}
public Point (int abs, int ord ) {// const.3(avec 2 arguments)
x = abs ; y = ord ;
}
public void affiche (){
System.out.println ("Coordonnees : " + x + " " + y) ; }}
SURDÉFINITION DE CONSTRUCTEURS
(exemple de classe Surdef2)
public class Surdef2{
public static void main (String args[]){
Point a = new Point () ; // appelle constructeur 1
a.affiche() ;
Point b = new Point (5) ; // appelle constructeur 2
b.affiche() ;
Point c = new Point (3, 9) ; // appelle constructeur 3
c.affiche() ;
}
}
Résultat :
Coordonnees : 0 0
Coordonnees : 5 5
Coordonnees : 3 9
SURDÉFINITION DE CONSTRUCTEURS
(remarque)
 Possibilité à une méthode de posséder des arguments
de type de classe.
 Possibilité à un constructeur d’avoir des args de type
classe, comme cet exemple:
public Point (Point a) { // constructeur par copie d’un autre point
x = a.x ; y = a.y ;
}
//ce constructeur réalise le clonage d’un point
//utilisation de la classe
Point a = new Point (1, 3) ; // construction usuelle
Point d = new Point (a) ; // appel du constructeur par copie d’un
point
Champs et méthodes de classe
 En Java, on peut définir des champs qui
n’existent qu’en un seul exemplaire pour
toutes les instances d’une même classe.
 Il s’agit des données globales partagées par
toutes instances d’une même classe.
 Ce sont les champs de classe ou champs
statiques,
 Il est possible aussi de définir des méthodes
de classes (ou statiques) pouvant être
appelées indépendamment de tout objet de
la classe (exp:main).
Champs de Classe (exemple)
class Etudiant {
private String nom;
private static int nbre_etudiants=0;
public Etudiant ( String nom) { // constructeur
System.out.print ("++ création objet de type Etudiant ; ") ;
this.nom=nom;
nbre_etudiants++;
System.out.println ("il y en a maintenant " + nbre_etudiants) ;
}
}
Champs de Classe (exemple)
public classTstEtudiant {
public static void main (String []
args){
Etudiant e1 ;
System.out.println ("Main 1") ;
e1 = new Etudiant("osman") ;
System.out.println ("Main 2") ;
Etudiant e2 ;
System.out.println ("Main 3") ;
e2 = new Etudiant("hassan");
Etudiant e3 = new Etudiant("aicha");
System.out.println ("Main 4") ;
}
}
//résultat de l’éxecution du code
Main 1
++ creation objet de type Etudiant ; il y en
a maintenant 1
Main 2
Main 3
++ creation objet de type Etudiant ; il y en
a maintenant 2
++ creation objet de type Etudiant ; il y en
a maintenant 3
Main 4
Méthodes de Classe (Statiques)
 Certaines méthodes d’une classe ont un
rôle indépendant d’un quelconque objet.
 Ces méthodes utilisent et agissent que
sur les champs de classe.
 Elles sont définies avec le mot clé static
 L’appel de ces méthodes ne nécessite que
le nom de la classe.
 Elles ne peuvent en aucun cas agir sur des
champs usuels (non statiques)
Méthodes de Classe (exemple 1)
class A{
.....
private float x ; // champ usuel
private static int n ; // champ de classe
.....
public static void f(){ // méthode de classe
..... // ici, on ne peut pas accéder a x, champ usuel,
..... // mais on peut accéder au champ de classe n
}
}
.....
public classTstA {
public static void main (String [] args){
A a = …. ;
A.f() ; // appelle la méthode de classe f de la classe A
a.f() ; // reste autorise, mais déconseille
}
}
Méthodes de Classe (class Etudiant)
class Etudiant {
private String nom;
private static int nbre_etudiants=0;
public Etudiant ( String nom) { // constructeur
System.out.print ("++ création objet de type Etudiant ; ") ;
this.nom=nom;
nbre_etudiants++;
System.out.println ("il y en a maintenant " + nbre_etudiants) ;
}
public static int donner_nbre_etudiants (){
return nbre_etudiants ;
}
public static void afficher_nbre_etudiants(){
System.out.println("nbre_etudiants = " + nbre_etudiants); }
}
Méthodes de Classe
public classTstEtudiant {
public static void main (String [] args){
Etudiant e1 ;
System.out.println ("Main 1 : nb etudiants = " + Etudiant.donner_nbre_etudiants() ) ;
e1 = new Etudiant("osman") ;
System.out.println ("Main 2 : nb etudiants = " + Etudiant.donner_nbre_etudiants() ) ;
Etudiant e2 ;
System.out.println ("Main 3 : nb etudiants = " + Etudiant.donner_nbre_etudiants() ) ;
e2 = new Etudiant("hassan");
Etudiant e3 = new Etudiant("aicha");
System.out.print ("Main 4 : nb etudiants = " + Etudiant.afficher_nbre_etudiants()); }
}
Main 1 : nb etudiants = 0
++ création objet type Etudiant ; il y en a maintenant 1
Main 2 : nb etudiants = 1
Main 3 : nb etudiants = 1
++ création objet type Etudiant ; il y en a maintenant 2
++ création objet type Etudiant ; il y en a maintenant 3
Main 4 : nb etudiants = 3
Autres utilisations des méthodes de classe
 Ces méthodes peuvent fournir des services n’ayant de
signification que pour la classe même. Exemple du cas
d’une méthode fournissant l’identification d’une classe
(nom de classe, numéro d’identification, nom de
l’auteur...).
 Elles peuvent être utilisées pour regrouper au sein
d’une classe des fonctionnalités ayant un point
commun et n’étant pas liées à un quelconque objet.
C’est le cas de la classe Math qui contient des
fonctions de classe telles que sqrt, sin, cos.
 C’est le seul moyen dont on dispose en Java pour
retrouver la notion de fonction indépendante
présente dans les autres langages (objet ou non).
A SUIVRE …

Contenu connexe

Similaire à Chap 2--POO avec JAVA.pdf

Correction md2 fabien orienté object
Correction md2 fabien orienté objectCorrection md2 fabien orienté object
Correction md2 fabien orienté object
yahyaoui hamdi
 
Td serie a-abstract-cast-heritage
Td serie a-abstract-cast-heritageTd serie a-abstract-cast-heritage
Td serie a-abstract-cast-heritage
Amel Morchdi
 

Similaire à Chap 2--POO avec JAVA.pdf (20)

Pensez objets avec java
Pensez objets avec javaPensez objets avec java
Pensez objets avec java
 
Ch10
Ch10Ch10
Ch10
 
Change mind about JS
Change mind about JSChange mind about JS
Change mind about JS
 
Chapitre5: Classes et objets
Chapitre5: Classes et objetsChapitre5: Classes et objets
Chapitre5: Classes et objets
 
Cours de C++ / Tronc commun deuxième année ISIMA
Cours de C++ / Tronc commun deuxième année ISIMACours de C++ / Tronc commun deuxième année ISIMA
Cours de C++ / Tronc commun deuxième année ISIMA
 
Ch06
Ch06Ch06
Ch06
 
De java à swift en 2 temps trois mouvements
De java à swift en 2 temps trois mouvementsDe java à swift en 2 temps trois mouvements
De java à swift en 2 temps trois mouvements
 
Part1
Part1Part1
Part1
 
Correction md2 fabien orienté object
Correction md2 fabien orienté objectCorrection md2 fabien orienté object
Correction md2 fabien orienté object
 
System c eniso_jan_fev_07
System c eniso_jan_fev_07System c eniso_jan_fev_07
System c eniso_jan_fev_07
 
Chap 03 poo en java partie2
Chap 03 poo en java partie2Chap 03 poo en java partie2
Chap 03 poo en java partie2
 
Td serie a-abstract-cast-heritage
Td serie a-abstract-cast-heritageTd serie a-abstract-cast-heritage
Td serie a-abstract-cast-heritage
 
Chapitre 4 heritage et polymorphisme
Chapitre 4 heritage et polymorphismeChapitre 4 heritage et polymorphisme
Chapitre 4 heritage et polymorphisme
 
Corrigé langage c
Corrigé langage cCorrigé langage c
Corrigé langage c
 
Corrigés exercices langage C
Corrigés exercices langage CCorrigés exercices langage C
Corrigés exercices langage C
 
POO-JAVA-partie-1.pdf
POO-JAVA-partie-1.pdfPOO-JAVA-partie-1.pdf
POO-JAVA-partie-1.pdf
 
22-reflection.pdf
22-reflection.pdf22-reflection.pdf
22-reflection.pdf
 
C++ Metaprogramming : multidimensional typelist
C++ Metaprogramming : multidimensional typelistC++ Metaprogramming : multidimensional typelist
C++ Metaprogramming : multidimensional typelist
 
POO-JAVA-partie3.pdf
POO-JAVA-partie3.pdfPOO-JAVA-partie3.pdf
POO-JAVA-partie3.pdf
 
Ch09
Ch09Ch09
Ch09
 

Chap 2--POO avec JAVA.pdf

  • 2. Définition D’OBJET et DE CLASSE  La notion de classe généralise la notion de type déjà vu et elle comporte des champs et des méthodes.  Celle d’objet généralise la notion de variable déjà vu en P.S  Un type classe permet d’instancier un ou +sieurs objets de ce type, chaque objet ayant ses propres données.
  • 3. NOTION DE CLASSE (4) public class Point { private int x ; // abscisse private int y ; // ordonnée public void initialise (int abs, int ord) { x = abs ; y = ord ; } public void deplace (int dx, int dy) { x = x + dx ; y = y + dy ; } public double distance () { double d ; d = Math.sqrt (x*x + y*y) ; return d ; } public void affiche (){ System.out.println ("Je suis un point de coordonnees (" + x + "," + y +")") ; } }
  • 4. De la classe à l’objet/instance  Syntaxe générale:
  • 5. De la classe à l’objet/instance (2) public classTstPoint { public static void main (String [] args) { Point a; a = new Point() ; a.initialise(3, 5) ; a.affiche() ; a.deplace(2, 0) ; a.affiche() ; System.out.println ("distance=" + a.distance() ) ; Point b = new Point() ; b.initialise (6, 8) ; b.affiche() ; System.out.println ("distance=" + b.distance() ) ; } }
  • 6. Notion de Constructeur  Un constructeur n’est rien d’autre qu’une méthode, sans valeur de retour, portant le même nom que la classe. Il peut disposer d’un nombre quelconque d’arguments (ou aucun).  la notion de constructeur nous permet d’automatiser le mécanisme d’initialisation d’un objet. En outre, cette initialisation ne sera pas limitée à la mise en place de valeurs initiales ;  Dans son en-tête, aucun type ne doit figurer devant son nom. Même la présence (logique) de void est une erreur
  • 7. Classe avec constructeur public class Point { private int x ; // abscisse private int y ; // ordonnée public Point (int abs, int ord) { x = abs ; // constructeur y = ord ; } ………………………………………. ………………………………………. classTruc { ..... public voidTruc ( ) // erreur de compilation : void interdit ici { ..... } }
  • 8. Classe avec constructeur •Cette fois, une instruction telle que : Point a = new Point () ; ne convient plus : elle serait refusée par le compilateur. •Si une classe dispose d’un constructeur, il n’est plus possible de créer un objet sans l’appeler. •Celui-ci a besoin de deux arguments. Ceux-ci doivent obligatoirement être fournis lors de la création, par exemple : •Point a = new Point (3, 5) ;
  • 9. Adaptation du programme Test public class TstPoint2 { public static void main (String [] args) { Point a; a = new Point(3, 5); a.affiche() ; a.deplace(2, 0) ; a.affiche() ; Point b = new Point(6, 8) ; b.affiche() ; System.out.println ("distance=" + b.distance() ) ; } }
  • 10. Création d’un Objet La création d’un objet entraine successivement les opérations suivantes :  Initialisation par défaut de tous les champs de l’objet,  Initialisation explicite lors de la déclaration du champ,  Exécution des instructions du corps du constructeur.
  • 12. Initialisation explicite  Une variable locale peut être initialisée lors de sa déclaration. C’est la même chose pour un champ. class A { private int n = 10 ; private int p ; public A (...) { ..... } // Constructeur de A ..... } A a = new A (...) ;//entraîne les 3 opérations de création d’un objet
  • 13. Appel du constructeur class A { private int n = 20, p = 10 ; private int np ; public A( ){ // ici, n vaut 20, p vaut 10 et np vaut 0 np = n * p ; n = 5 ; } public void affiche( ){ System.out.println ("n = " + n + ", p = " + p + ", np = " + np) ; } } /*----------------------------------------------------------------------------------------------*/ public class Init{ public static void main (String [] args){ A a = new A() ; // ici a.n vaut 5, a.p vaut 10, mais a.np vaut 200 a.affiche() ; } }
  • 14. Autoréférence : le mot clé this public Point(int abs, int ord){ x = abs ; y = ord ; } public Point(int x, int y) { this.x = x ; // notez les noms des arguments muets ici this.y = y ; // ici x designe le premier argument de Point // le champ x de l’objet courant est masque ; mais // on peut le nommer this.x } Peut être aussi écrit ainsi :
  • 15. SURDÉFINITION DE MÉTHODES  C’est lorsqu’un même symbole possède plusieurs significations différentes entre lesquelles on choisit en fonction du contexte.  En Java, cette possibilité de surdéfinition (ou surcharge) s’applique aux méthodes d’une classe, y compris aux méthodes statiques.  Plusieurs méthodes peuvent porter le même nom, pour peu que le nombre et le type de leurs arguments permettent au compilateur d’effectuer son choix.
  • 16. SURDÉFINITION DE MÉTHODES class Point{ private int x, y ; public Point (int abs, int ord) {// constructeur x = abs ; y = ord ; } public void deplace (int dx, int dy) {// deplace (int, int) x =x + dx ; y = y + dy ; } public void deplace (int dx) {// deplace (int) x =x + dx ; } public void deplace (short dx) {// deplace (short) x = x + dx ; }}
  • 17. SURDÉFINITION DE MÉTHODES public class Surdef1{ public static void main (String [] args){ Point a = new Point (1, 2); a.deplace (1, 3) ; // appelle deplace (int, int) a.deplace (2) ; // appelle deplace (int) short p = 3 ; a.deplace (p) ; // appelle deplace (short) byte b = 2 ; a.deplace (b) ; // appelle deplace (short) après conversion de b en short } }
  • 18. SURDÉFINITION DE MÉTHODES (En cas d’ambiguïté du choix) public void deplace (int dx, byte dy) { // deplace (int, byte) x = x + dx ; y = y + dy ; } public void deplace (byte dx, int dy) { // deplace (byte, int) x = x + dx ;} Considérons ces instructions : Point a = ... int n ; byte b ; a.deplace (n, b) ; // OK : appel de deplace (int, byte) a.deplace (b, n) ; // OK : appel de deplace (byte, int) a.deplace (b, b) ; // erreur : ambiguite
  • 19. SURDÉFINITION DE MÉTHODES (règles générales de recherche) À la rencontre d’un appel donné, le compilateur recherche toutes les méthodes acceptables et il choisit la meilleure si elle existe. Pour qu’une méthode soit acceptable, il faut :  qu’elle dispose du nombre d’arguments voulus,  que le type de chaque argument effectif soit compatible par affectation avec le type de l’argument muet correspondant,  qu’elle soit accessible (méthode privée non accessible depuis l’extérieur)  Si aucune méthode n’est acceptable (erreur de compilation)  Si +sieurs méthodes sont acceptables, alors la meilleur est utilisée.
  • 20. SURDÉFINITION DE MÉTHODES (quelques remarques)  Le type de la valeur de retour d’une méthode n’intervient pas dans le choix d’une méthode surdéfinie.  Possibilité de surcharge des méthodes de classe, comme des méthodes usuelles.  Aucun incidence des arguments déclarés final
  • 21. SURDÉFINITION DE CONSTRUCTEURS (exemple de classe Point) class Point { private int x, y ; public Point (){// constructeur 1 (sans argument) x = 0 ; y = 0 ; } public Point (int abs) {// constructeur 2 (un argument) x = y = abs ; } public Point (int abs, int ord ) {// const.3(avec 2 arguments) x = abs ; y = ord ; } public void affiche (){ System.out.println ("Coordonnees : " + x + " " + y) ; }}
  • 22. SURDÉFINITION DE CONSTRUCTEURS (exemple de classe Surdef2) public class Surdef2{ public static void main (String args[]){ Point a = new Point () ; // appelle constructeur 1 a.affiche() ; Point b = new Point (5) ; // appelle constructeur 2 b.affiche() ; Point c = new Point (3, 9) ; // appelle constructeur 3 c.affiche() ; } } Résultat : Coordonnees : 0 0 Coordonnees : 5 5 Coordonnees : 3 9
  • 23. SURDÉFINITION DE CONSTRUCTEURS (remarque)  Possibilité à une méthode de posséder des arguments de type de classe.  Possibilité à un constructeur d’avoir des args de type classe, comme cet exemple: public Point (Point a) { // constructeur par copie d’un autre point x = a.x ; y = a.y ; } //ce constructeur réalise le clonage d’un point //utilisation de la classe Point a = new Point (1, 3) ; // construction usuelle Point d = new Point (a) ; // appel du constructeur par copie d’un point
  • 24. Champs et méthodes de classe  En Java, on peut définir des champs qui n’existent qu’en un seul exemplaire pour toutes les instances d’une même classe.  Il s’agit des données globales partagées par toutes instances d’une même classe.  Ce sont les champs de classe ou champs statiques,  Il est possible aussi de définir des méthodes de classes (ou statiques) pouvant être appelées indépendamment de tout objet de la classe (exp:main).
  • 25. Champs de Classe (exemple) class Etudiant { private String nom; private static int nbre_etudiants=0; public Etudiant ( String nom) { // constructeur System.out.print ("++ création objet de type Etudiant ; ") ; this.nom=nom; nbre_etudiants++; System.out.println ("il y en a maintenant " + nbre_etudiants) ; } }
  • 26. Champs de Classe (exemple) public classTstEtudiant { public static void main (String [] args){ Etudiant e1 ; System.out.println ("Main 1") ; e1 = new Etudiant("osman") ; System.out.println ("Main 2") ; Etudiant e2 ; System.out.println ("Main 3") ; e2 = new Etudiant("hassan"); Etudiant e3 = new Etudiant("aicha"); System.out.println ("Main 4") ; } } //résultat de l’éxecution du code Main 1 ++ creation objet de type Etudiant ; il y en a maintenant 1 Main 2 Main 3 ++ creation objet de type Etudiant ; il y en a maintenant 2 ++ creation objet de type Etudiant ; il y en a maintenant 3 Main 4
  • 27. Méthodes de Classe (Statiques)  Certaines méthodes d’une classe ont un rôle indépendant d’un quelconque objet.  Ces méthodes utilisent et agissent que sur les champs de classe.  Elles sont définies avec le mot clé static  L’appel de ces méthodes ne nécessite que le nom de la classe.  Elles ne peuvent en aucun cas agir sur des champs usuels (non statiques)
  • 28. Méthodes de Classe (exemple 1) class A{ ..... private float x ; // champ usuel private static int n ; // champ de classe ..... public static void f(){ // méthode de classe ..... // ici, on ne peut pas accéder a x, champ usuel, ..... // mais on peut accéder au champ de classe n } } ..... public classTstA { public static void main (String [] args){ A a = …. ; A.f() ; // appelle la méthode de classe f de la classe A a.f() ; // reste autorise, mais déconseille } }
  • 29. Méthodes de Classe (class Etudiant) class Etudiant { private String nom; private static int nbre_etudiants=0; public Etudiant ( String nom) { // constructeur System.out.print ("++ création objet de type Etudiant ; ") ; this.nom=nom; nbre_etudiants++; System.out.println ("il y en a maintenant " + nbre_etudiants) ; } public static int donner_nbre_etudiants (){ return nbre_etudiants ; } public static void afficher_nbre_etudiants(){ System.out.println("nbre_etudiants = " + nbre_etudiants); } }
  • 30. Méthodes de Classe public classTstEtudiant { public static void main (String [] args){ Etudiant e1 ; System.out.println ("Main 1 : nb etudiants = " + Etudiant.donner_nbre_etudiants() ) ; e1 = new Etudiant("osman") ; System.out.println ("Main 2 : nb etudiants = " + Etudiant.donner_nbre_etudiants() ) ; Etudiant e2 ; System.out.println ("Main 3 : nb etudiants = " + Etudiant.donner_nbre_etudiants() ) ; e2 = new Etudiant("hassan"); Etudiant e3 = new Etudiant("aicha"); System.out.print ("Main 4 : nb etudiants = " + Etudiant.afficher_nbre_etudiants()); } } Main 1 : nb etudiants = 0 ++ création objet type Etudiant ; il y en a maintenant 1 Main 2 : nb etudiants = 1 Main 3 : nb etudiants = 1 ++ création objet type Etudiant ; il y en a maintenant 2 ++ création objet type Etudiant ; il y en a maintenant 3 Main 4 : nb etudiants = 3
  • 31. Autres utilisations des méthodes de classe  Ces méthodes peuvent fournir des services n’ayant de signification que pour la classe même. Exemple du cas d’une méthode fournissant l’identification d’une classe (nom de classe, numéro d’identification, nom de l’auteur...).  Elles peuvent être utilisées pour regrouper au sein d’une classe des fonctionnalités ayant un point commun et n’étant pas liées à un quelconque objet. C’est le cas de la classe Math qui contient des fonctions de classe telles que sqrt, sin, cos.  C’est le seul moyen dont on dispose en Java pour retrouver la notion de fonction indépendante présente dans les autres langages (objet ou non).