17
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

Chap 03 poo en java partie2

Embed Size (px)

Citation preview

Page 1: Chap 03 poo en java partie2

VI. Champs et méthodes de classe1. 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éclarationsClasseTest 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.nobjA1.y

objet objA1

objA2.nobjA2.y

objet objA2

Page 2: Chap 03 poo en java partie2

Certains attributs peuvent être partagés par toutes lesinstances d’une classe. C’est-à-dire ils peuvent être définisindé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 declasse. 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 sontdé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

Page 3: Chap 03 poo en java partie2

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.nobjA1.y

objet objA1objA2.y

objet objA2

objA2.n ou ClasseTest.n

Page 4: Chap 03 poo en java partie2

4

Champs de classe (variable de classe)

Page 5: Chap 03 poo en java partie2

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

Page 6: Chap 03 poo en java partie2

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

Page 7: Chap 03 poo en java partie2

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 =1nom ="jamil"

: Employécode =2nom ="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 : intnom : StringnbEmployés : static int

Page 8: Chap 03 poo en java partie2

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 lavariable x par tous les objets.

Après exécution :obj1.x = 101obj1.y = 100obj2.x = 101obj2.y = 20obj3.x = 101obj3.y = 20AppliStatic.x = 99

Page 9: Chap 03 poo en java partie2

Variables de classe

Variable de classepublic class UneClasse{

public static int compteur = 0;public UneClasse (){

compteur++;}

}

class AutreClasse{public void uneMethode(){

int i = UneClasse.compteur;}

}

Utilisation de la variable de classecompteur dans le constructeur dela classe

Utilisation de la variable de classecompteur dans une autre classe

9

Page 10: Chap 03 poo en java partie2

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 1Main 2Main 3++ creation objet Obj ; il y en a maintenant 2++ creation objet Obj ; il y en a maintenant 3Main 4

Exemple 1 d’utilisation d’un champ de classe

10

Page 11: Chap 03 poo en java partie2

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’uneinstance particulière de la classe.

� La déclaration d’une méthode de classe se fait à l’aide dumot clé static.

� L’appel d’une telle méthode ne nécessite que le nom de laclasse correspondante.

� Une méthode de classe ne peut utiliser que des variables de classe et jamais des variables d'instance. Par contre, une méthoded'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

Page 12: Chap 03 poo en java partie2

Exempleclass Test{

…private static int n; // champs de classeprivate 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 Testobj.f() ; // reste autorisé, mais déconseillé

public static void f() { // méthode de classe

12

Page 13: Chap 03 poo en java partie2

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 1Main 2 : nb objets = 1Main 3 : nb objets = 1++ creation objet Obj ; il y en a maintenant 2++ creation objet Obj ; il y en a maintenant 3Main 4 : nb objets = 3

Exemple d’utilisation d’une méthode de classe

13

Page 14: Chap 03 poo en java partie2

VII. Le mot clé finalL’attribut final indique que la valeur de la variable ne peut êtremodifiée : on pourra lui donner une valeur une seule fois dansle 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 à sadéclaration mais elle doit avoir une valeur à la sortie de tousles constructeurs

14

Page 15: Chap 03 poo en java partie2

Constantes de classe• Usage

––––

Ce sont des variables de classes déclarées avec le mot-clé finalCe sont des constantes liées à une classeElles sont écrites en MAJUSCULES

Pour y accéder, il faut utiliser non pas un identificateur d’objetmais le nom de la classe

Exemple:public class Galerie {

public static final int MASSE_MAX = 150;}

if (maVoiture.getWeightLimite() <= Galerie.MASSE_MAX){...}

15

Page 16: Chap 03 poo en java partie2

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

Page 17: Chap 03 poo en java partie2

Classe java typeUne classe java types contient trois grands types de membres :

toujours déclarer les constructeurs après les attributs etavant les autres méthodes.

Les constructeurs sont des méthodes particulières, vous devez

public class Rectangle {// ( 1 ) A ttributsprivate double L , l ;// ( 2 ) Constructeurspublic Rectangle (double L , double l ) { . . . }// ( 3 ) Méthodespublic double surface (double L , double l) { . . . }

}Remarque

17