VI. Champs et méthodes de classe
1. Champs de classe (variable de classe)
Considérons la définition simpliste suivante:
class ClasseTest {
int n;
double y;
}
Chaque objet de type ClasseTest possède ses propres champs n et y.
Par exemple avec les déclarations
ClasseTest objA1=new ClasseTest(), objA2= new ClasseTest();
objA1.n et objA2.n désignent deux données différentes.
objA1.y et objA2.y désignent aussi deux données différents.
1
objA1.n
objA1.y
objet objA1
objA2.n
objA2.y
objet objA2
Certains attributs peuvent être partagés par toutes les
instances d’une classe. C’est-à-dire ils peuvent être définis
indépendamment des instances (objets):
Par exemple le nombre d’étudiants = le nombre d’objets
étudiant créés.
Ces attributs sont nommés champs de classe ou variables de
classe. Ils sont comparables aux «variables globales ».
Ces variables n’existent qu’en un seul exemplaire,
quel que soit le nombre d’objets de la classe. Elles sont
définies comme les attributs mais précédés du mot-clé static.
2
Les attributs statiques ne sont pas instanciés dans les objets
Considérons la classe:
class ClasseTest {
double y;
}
Soient objA1 et objA2 deux instances différentes.
ClasseTest objA1=new ClasseTest(), objA2=new ClasseTest();
static int n; // la valeur de n est partagée par toutes les instances
ClasseTest.n // champs (statique) de la classe ClasseTest
objA1 et objA2 partagent la même variable n:
- Pour y accéder, on utilise le nom de la classe
objA1.n et objA2.n désignent la même donnée.
La valeur de l’attribut n est indépendante de l’instance (objet).
3
objA1.n ou ClasseTest.n
objA1.y
objet objA1
objA2.y
objet objA2
objA2.n ou ClasseTest.n
4
Champs de classe (variable de classe)
Exemple1:
class ClasseTest {
int n;
double y;
}
public class MethodeStatic{
public static void main(String[] args) {
ClasseTest objA1=new ClasseTest();
ClasseTest objA2=new ClasseTest();
// objA2.n = ?
}
}
objA1.n +=4; // objA1.n vaut 4 puisque n vaut 0
// initialisation par défaut des attributs
// objA2.n vaut 0 : initialisation par défauts des attributs.
5
Exemple2:
class ClasseTest {
float y;
}
public class MethodeStatic{
public static void main(String[] args) {
ClasseTest objA1=new ClasseTest();
ClasseTest objA2=new ClasseTest();
// objA2.n = ?
}
}
static int n; // la valeur de n est partagée par toutes les instances
objA1.n +=4; // objA1.n vaut 4
// objA2 vaut 4 car champs statique .
// équivalent à ClasseTest.n=4;
6
 La classe Employé caractérisée par les attributs
code, nom et nbEmployés
 Les attributs code et nom sont des caractéristiques
de chaque objet Employé contrairement au champ
nbEmployés qui est une caractéristique
commune à tous les objets (attribut statique)
 Chaque objet, instance d’une classe, donne des
valeurs particulières à tous les attributs définis dans
sa classe sauf les attributs statiques ce qui détermine
son état
Attributs de la classe Employé
7
Champs de classe (variable de classe)
: Employé
code =1
nom ="jamil"
: Employé
code =2
nom ="alami "
2 objets de la classe
Employé
Un attribut statique d’une classe est un attribut qui appartient à la classe
et qui est partagé par tous les objets de cette classe. Un attribut statique est
considéré comme étant une variable globale à tous les objets.
Les attributs statiques ne sont pas instanciés dans les objets.
Employé
code : int
nom : String
nbEmployés : static int
8
Une variable de classe (précédée du mot clef static) est partagée par tous les objets de la même classe.
Au début lors de la création des
3 objets chacun des champs x
vaut -58 et des champs y vaut
20,
l'affichage par
System.out.println(...) donne les
résultats suivants qui
démontrent le partage de la
variable x par tous les objets.
Après exécution :
obj1.x = 101
obj1.y = 100
obj2.x = 101
obj2.y = 20
obj3.x = 101
obj3.y = 20
AppliStatic.x = 99
Variables de classe
Variable de classe
public class UneClasse
{
public static int compteur = 0;
public UneClasse ()
{
compteur++;
}
}
class AutreClasse
{
public void uneMethode()
{
int i = UneClasse.compteur;
}
}
Utilisation de la variable de classe
compteur dans le constructeur de
la classe
Utilisation de la variable de classe
compteur dans une autre classe
9
Exécution ???
class Obj
{ private static long nb=0 ;
public Obj()
{ System.out.print ("++creation objet Obj ; ") ;
nb ++ ;
System.out.println ("il y en a maintenant " + nb) ;
}
}
public class TstObj
{ public static void main (String args[])
{ Obj a ;
System.out.println ("Main 1") ;
a = new Obj() ;
System.out.println ("Main 2") ;
Obj b ;
System.out.println ("Main 3") ;
b = new Obj() ;
Obj c = new Obj() ;
System.out.println ("Main 4") ;
}
}
Exécution
Main 1
++ creation objet Obj ; il y en a maintenant 1
Main 2
Main 3
++ creation objet Obj ; il y en a maintenant 2
++ creation objet Obj ; il y en a maintenant 3
Main 4
Exemple 1 d’utilisation d’un champ de classe
10
2. Méthodes de classe
Ce sont des méthodes qui ont un rôle indépendant d’un objet
spécifique. Elles exécutent une action indépendante d’une
instance particulière de la classe.
La déclaration d’une méthode de classe se fait à l’aide du
mot clé static.
L’appel d’une telle méthode ne nécessite que le nom de la
classe correspondante.
Une méthode de classe ne peut utiliser que des variables de
classe et jamais des variables d'instance. Par contre, une méthode
d'instance peut accéder aux deux catégories de variables.
Une méthode de classe ne peut avoir la même signature
qu’une méthode d’instance
11
Exemple
class Test{
…
private static int n; // champs de classe
private float x; // champs usuel
… //ici, on ne peut pas accéder au champs x car champs usuel
… // ici on peut accéder au champs statique n
}
}
………
Test obj ;
Test.f() ; // appel la méthode de classe f de la classe Test
obj.f() ; // reste autorisé, mais déconseillé
public static void f() { // méthode de classe
12
Exécution
class Obj
{ private static long nb=0 ;
public Obj()
{ System.out.print ("++ creation objet Obj ; ") ;
nb ++ ;
System.out.println ("il y en a maintenant " + nb) ;
}
public static long nbObj ()
{ return nb ;
}
}
public class TstObj2
{ public static void main (String args[])
{ Obj a ;
System.out.println ("Main 1 : nb objets = " + Obj.nbObj() ) ;
a = new Obj() ;
System.out.println ("Main 2 : nb objets = " + Obj.nbObj() ) ;
Obj b ;
System.out.println ("Main 3 : nb objets = " + Obj.nbObj() ) ;
b = new Obj() ;
Obj c = new Obj() ;
System.out.println ("Main 4 : nb objets = " + Obj.nbObj() ) ;
}
}
Exécution
Main 1 : nb objets = 0
++ creation objet Obj ; il y en a maintenant 1
Main 2 : nb objets = 1
Main 3 : nb objets = 1
++ creation objet Obj ; il y en a maintenant 2
++ creation objet Obj ; il y en a maintenant 3
Main 4 : nb objets = 3
Exemple d’utilisation d’une méthode de classe
13
VII. Le mot clé final
L’attribut final indique que la valeur de la variable ne peut être
modifiée : on pourra lui donner une valeur une seule fois dans
le programme.
Variable d’instance final
• Une variable d’instance final est une constante pour chaque
objet.
• Une variable d'instance final peut ne pas être initialisée à sa
déclaration mais elle doit avoir une valeur à la sortie de tous
les constructeurs
14
Constantes de classe
• Usage
–
–
–
–
Ce sont des variables de classes déclarées avec le mot-clé final
Ce sont des constantes liées à une classe
Elles sont écrites en MAJUSCULES
Pour y accéder, il faut utiliser non pas un identificateur d’objet
mais le nom de la classe
Exemple:
public class Galerie {
public static final int MASSE_MAX = 150;
}
if (maVoiture.getWeightLimite() <= Galerie.MASSE_MAX)
{...}
15
Le mot réservé final
 Une classe est déclarée final lorsqu'on ne souhaite pas
qu'elle puisse être sous-classée. Par conséquent, ses
méthodes ne peuvent pas être redéfinies.
 Une méthode est déclarée final lorsqu'on ne souhaite
pas qu'elle puisse être redéfinie dans les classes
dérivées.
 Une variable déclarée final est une constante.
16
Classe java type
Une classe java types contient trois grands types de membres :
toujours déclarer les constructeurs après les attributs et
avant les autres méthodes.
Les constructeurs sont des méthodes particulières, vous devez
public class Rectangle {
// ( 1 ) A ttributs
private double L , l ;
// ( 2 ) Constructeurs
public Rectangle (double L , double l ) { . . . }
// ( 3 ) Méthodes
public double surface (double L , double l) { . . . }
}
Remarque
17

Chap 03 poo en java partie2

  • 1.
    VI. Champs etméthodes de classe 1. Champs de classe (variable de classe) Considérons la définition simpliste suivante: class ClasseTest { int n; double y; } Chaque objet de type ClasseTest possède ses propres champs n et y. Par exemple avec les déclarations ClasseTest objA1=new ClasseTest(), objA2= new ClasseTest(); objA1.n et objA2.n désignent deux données différentes. objA1.y et objA2.y désignent aussi deux données différents. 1 objA1.n objA1.y objet objA1 objA2.n objA2.y objet objA2
  • 2.
    Certains attributs peuventêtre partagés par toutes les instances d’une classe. C’est-à-dire ils peuvent être définis indépendamment des instances (objets): Par exemple le nombre d’étudiants = le nombre d’objets étudiant créés. Ces attributs sont nommés champs de classe ou variables de classe. Ils sont comparables aux «variables globales ». Ces variables n’existent qu’en un seul exemplaire, quel que soit le nombre d’objets de la classe. Elles sont définies comme les attributs mais précédés du mot-clé static. 2 Les attributs statiques ne sont pas instanciés dans les objets
  • 3.
    Considérons la classe: classClasseTest { double y; } Soient objA1 et objA2 deux instances différentes. ClasseTest objA1=new ClasseTest(), objA2=new ClasseTest(); static int n; // la valeur de n est partagée par toutes les instances ClasseTest.n // champs (statique) de la classe ClasseTest objA1 et objA2 partagent la même variable n: - Pour y accéder, on utilise le nom de la classe objA1.n et objA2.n désignent la même donnée. La valeur de l’attribut n est indépendante de l’instance (objet). 3 objA1.n ou ClasseTest.n objA1.y objet objA1 objA2.y objet objA2 objA2.n ou ClasseTest.n
  • 4.
    4 Champs de classe(variable de classe)
  • 5.
    Exemple1: class ClasseTest { intn; double y; } public class MethodeStatic{ public static void main(String[] args) { ClasseTest objA1=new ClasseTest(); ClasseTest objA2=new ClasseTest(); // objA2.n = ? } } objA1.n +=4; // objA1.n vaut 4 puisque n vaut 0 // initialisation par défaut des attributs // objA2.n vaut 0 : initialisation par défauts des attributs. 5
  • 6.
    Exemple2: class ClasseTest { floaty; } public class MethodeStatic{ public static void main(String[] args) { ClasseTest objA1=new ClasseTest(); ClasseTest objA2=new ClasseTest(); // objA2.n = ? } } static int n; // la valeur de n est partagée par toutes les instances objA1.n +=4; // objA1.n vaut 4 // objA2 vaut 4 car champs statique . // équivalent à ClasseTest.n=4; 6
  • 7.
     La classeEmployé caractérisée par les attributs code, nom et nbEmployés  Les attributs code et nom sont des caractéristiques de chaque objet Employé contrairement au champ nbEmployés qui est une caractéristique commune à tous les objets (attribut statique)  Chaque objet, instance d’une classe, donne des valeurs particulières à tous les attributs définis dans sa classe sauf les attributs statiques ce qui détermine son état Attributs de la classe Employé 7 Champs de classe (variable de classe) : Employé code =1 nom ="jamil" : Employé code =2 nom ="alami " 2 objets de la classe Employé Un attribut statique d’une classe est un attribut qui appartient à la classe et qui est partagé par tous les objets de cette classe. Un attribut statique est considéré comme étant une variable globale à tous les objets. Les attributs statiques ne sont pas instanciés dans les objets. Employé code : int nom : String nbEmployés : static int
  • 8.
    8 Une variable declasse (précédée du mot clef static) est partagée par tous les objets de la même classe. Au début lors de la création des 3 objets chacun des champs x vaut -58 et des champs y vaut 20, l'affichage par System.out.println(...) donne les résultats suivants qui démontrent le partage de la variable x par tous les objets. Après exécution : obj1.x = 101 obj1.y = 100 obj2.x = 101 obj2.y = 20 obj3.x = 101 obj3.y = 20 AppliStatic.x = 99
  • 9.
    Variables de classe Variablede classe public class UneClasse { public static int compteur = 0; public UneClasse () { compteur++; } } class AutreClasse { public void uneMethode() { int i = UneClasse.compteur; } } Utilisation de la variable de classe compteur dans le constructeur de la classe Utilisation de la variable de classe compteur dans une autre classe 9
  • 10.
    Exécution ??? class Obj {private static long nb=0 ; public Obj() { System.out.print ("++creation objet Obj ; ") ; nb ++ ; System.out.println ("il y en a maintenant " + nb) ; } } public class TstObj { public static void main (String args[]) { Obj a ; System.out.println ("Main 1") ; a = new Obj() ; System.out.println ("Main 2") ; Obj b ; System.out.println ("Main 3") ; b = new Obj() ; Obj c = new Obj() ; System.out.println ("Main 4") ; } } Exécution Main 1 ++ creation objet Obj ; il y en a maintenant 1 Main 2 Main 3 ++ creation objet Obj ; il y en a maintenant 2 ++ creation objet Obj ; il y en a maintenant 3 Main 4 Exemple 1 d’utilisation d’un champ de classe 10
  • 11.
    2. Méthodes declasse Ce sont des méthodes qui ont un rôle indépendant d’un objet spécifique. Elles exécutent une action indépendante d’une instance particulière de la classe. La déclaration d’une méthode de classe se fait à l’aide du mot clé static. L’appel d’une telle méthode ne nécessite que le nom de la classe correspondante. Une méthode de classe ne peut utiliser que des variables de classe et jamais des variables d'instance. Par contre, une méthode d'instance peut accéder aux deux catégories de variables. Une méthode de classe ne peut avoir la même signature qu’une méthode d’instance 11
  • 12.
    Exemple class Test{ … private staticint n; // champs de classe private float x; // champs usuel … //ici, on ne peut pas accéder au champs x car champs usuel … // ici on peut accéder au champs statique n } } ……… Test obj ; Test.f() ; // appel la méthode de classe f de la classe Test obj.f() ; // reste autorisé, mais déconseillé public static void f() { // méthode de classe 12
  • 13.
    Exécution class Obj { privatestatic long nb=0 ; public Obj() { System.out.print ("++ creation objet Obj ; ") ; nb ++ ; System.out.println ("il y en a maintenant " + nb) ; } public static long nbObj () { return nb ; } } public class TstObj2 { public static void main (String args[]) { Obj a ; System.out.println ("Main 1 : nb objets = " + Obj.nbObj() ) ; a = new Obj() ; System.out.println ("Main 2 : nb objets = " + Obj.nbObj() ) ; Obj b ; System.out.println ("Main 3 : nb objets = " + Obj.nbObj() ) ; b = new Obj() ; Obj c = new Obj() ; System.out.println ("Main 4 : nb objets = " + Obj.nbObj() ) ; } } Exécution Main 1 : nb objets = 0 ++ creation objet Obj ; il y en a maintenant 1 Main 2 : nb objets = 1 Main 3 : nb objets = 1 ++ creation objet Obj ; il y en a maintenant 2 ++ creation objet Obj ; il y en a maintenant 3 Main 4 : nb objets = 3 Exemple d’utilisation d’une méthode de classe 13
  • 14.
    VII. Le motclé final L’attribut final indique que la valeur de la variable ne peut être modifiée : on pourra lui donner une valeur une seule fois dans le programme. Variable d’instance final • Une variable d’instance final est une constante pour chaque objet. • Une variable d'instance final peut ne pas être initialisée à sa déclaration mais elle doit avoir une valeur à la sortie de tous les constructeurs 14
  • 15.
    Constantes de classe •Usage – – – – Ce sont des variables de classes déclarées avec le mot-clé final Ce sont des constantes liées à une classe Elles sont écrites en MAJUSCULES Pour y accéder, il faut utiliser non pas un identificateur d’objet mais le nom de la classe Exemple: public class Galerie { public static final int MASSE_MAX = 150; } if (maVoiture.getWeightLimite() <= Galerie.MASSE_MAX) {...} 15
  • 16.
    Le mot réservéfinal  Une classe est déclarée final lorsqu'on ne souhaite pas qu'elle puisse être sous-classée. Par conséquent, ses méthodes ne peuvent pas être redéfinies.  Une méthode est déclarée final lorsqu'on ne souhaite pas qu'elle puisse être redéfinie dans les classes dérivées.  Une variable déclarée final est une constante. 16
  • 17.
    Classe java type Uneclasse java types contient trois grands types de membres : toujours déclarer les constructeurs après les attributs et avant les autres méthodes. Les constructeurs sont des méthodes particulières, vous devez public class Rectangle { // ( 1 ) A ttributs private double L , l ; // ( 2 ) Constructeurs public Rectangle (double L , double l ) { . . . } // ( 3 ) Méthodes public double surface (double L , double l) { . . . } } Remarque 17