Chapitre 4
Autres membres d’une classe
Dans le modèle objet, toutes les variables et méthodes sont liées à un objet.
C’est-à-dire que pour accéder à une donnée ou déclencher un traitement, il faut
d’abord instancier une classe.
Cette nécessité de créer d’abord un objet est difficile à respecter dans certains
cas particuliers :
Déclenchement du point d’entrée du programme : la méthode .
Comment envoyer un message sans avoir à créer d’objets ?
Les flots d’entrée/sortie standards référencés par les variables constantes
doivent être définis d’une manière unique avant le début de l’exé-
cution.
Où définir ces variables et comment les positionner avant l’appel au point
d’entrée du programme ?
Les opérations mathématiques ( . . .) s’appliquent, en Java, à
des types de base.
Comment rendre disponible ces opérations qui ne s’appliquent pas à un objet ?
La construction classe va servir à contenir les données et traitements qui ne
ne sont pas liés à des objets. Une classe n’est plus seulement la description d’une
encapsulation mais devient utilisable à l’exécution.
Par défaut, une méthode ou une variable est attachée à un objet. Le mot-clé
permet d’attacher une méthode ou une variable à une classe. Comme pour
un objet, c’est la notation pointée qui est utilisé pour accéder à ces nouveaux mem-
bres. C’est un message envoyé à la classe et non à une instance de cette classe,
par exemple : , .
Remarque : En Java, il est autorisé d’utiliser les méthodes de classe et variables
de classe à travers une instance.
25
4.1 Variable de classe
Une variable de classe est partagée par toutes les instances de la classe. Sa
modification affecte toutes les instances. Une variable de classe existe avant toute
instanciation de la classe.
Même si une variable de classe n’est pas stockée dans la zone mémoire de
l’objet, elle fait partie de l’ensemble des attributs de chaque instance de cette
classe.
L’initialisation d’une variable de classe s’effectue au chargement de la classe.
Elle peut de faire dans un « bloc statique » déclaré à l’intérieur de la classe. La
machine virtuelle exécute le bloc statique au chargement de la classe.
Par exemple pour initialisation d’une variable de classe qui contient un tableau.
class Exemple {
static final private Porte [ ] portes = new Porte [ 1 0 ] ;
static private double [ ] mesReels = new double [ 2 0 ] ;
4
static {
for (int i = 0; i < mesIndicateurs . length ; i ++)
portes [ i ] = new PorteCoulissante ( i + 1)
9for (int i = 0; i < mesReels . length ; i ++)
mesReels [ i ] = Math .random ( ) ;
}
}
Boutez Vos Neurones : Pourquoi l’initialisation d’une variable de classe dans un
constructeur est-elle problématique ?
L’utilisation la plus fréquente est la définition d’une constante, par exemple
ou .
Un exemple d’utilisation de variables de classe constantes pour la mise en œuvre
d’une énumération représentant la couleur dans un jeux de cartes français 1.
public class Enseigne {
final public static Enseigne COEUR = new Enseigne ( , 2 ) ;
final public static Enseigne CARREAU = new Enseigne ( , 1 ) ;
5final public static Enseigne PIQUE = new Enseigne ( , 3 ) ;
final public static Enseigne TREFLE = new Enseigne ( , 0 ) ;
final private int ordre ;
final private String nom;
10
private Enseigne ( String nom, int ordre ) {
this .nom = nom;
this . ordre = ordre ;
}
1. Avant l’apparition de la classe dans l’A.P.I. Java .
26
15
public boolean estPlusFort ( Enseigne c ) {
return ordre > c . ordre ;
}
20 public boolean estMoinsFort ( Enseigne c ) {
return ordre < c . ordre ;
}
public String nom( ) {
25 return nom;
}
public static void main ( String . . . args ) {
Enseigne e = Enseigne .COEUR;
30 System . out . pr intln ( c . estMoinsFort (ENSEIGNE.TREFLE ) ) ;
System . out . p r i n tln ( c . non ( ) ) ;
}
}
4.2 Méthode de classe
Le code d’une méthode de classe a accès aux variables de classe et aux méth-
odes de classe définies dans la classe.
Par contre, la référence n’est pas définie (aucune instance n’est créée).
Il n’est donc pas possible d’utiliser directement les variables d’instance et les
méthodes d’instance. L’utilisation doit se faire à travers une instance de la
classe soit passée par paramètre, soit instanciée par le code de la méthode.
Une méthode de classe peut être surchargée.
Les méthodes de classe s’emploient couramment pour fabriquer des instances
(voir la classe ) ou contenir les traitements ne corre-
spondant à aucune encapsulation. (voir les classes et ).
Un exemple de méthode de fabrication d’instance.
import matos . onde . DentBleu ;
public class PorteCharniere {
5static PorteCharniere creerFerme ( ) {
PorteCharniere p = new PorteCharniere ( true ) ;
return p ;
}
10 static PorteCharniere creerOuvert ( ) {
return new PorteCharniere ( f alse ) ;
}
27
private boolean estFerme ;
15 private f i n al DentBleu maDent;
private PorteCharniere ( boolean estFerme ) {
maDent = new DentBleu ( ) ;
i f ( estFerme )
20 fermer ( ) ;
else
ouvrir ( ) ;
}
25 public boolean estFerme ( ) {
return estFerme ;
}
public void fermer ( ) {
30 maDent. connecter ( ) ;
maDent. envoyer ( ) ;
maDent. deconnecter ( ) ;
estFerme = true ;
}
35
public void ouvrir ( ) {
maDent. connecter ( ) ;
maDent. envoyer ( ) ;
maDent. envoyer ( ) ;
40 maDent. deconnecter ( ) ;
estFerme = fal se ;
}
public static void main( String . . . args ) {
45 PorteCharniere a = PorteCharniere . creerOuvert ( ) ;
PorteCharniere . creerOuvert ( ) . estFerme ( ) ;
}
}
Un exemple d’action sur toutes les instances :
1package matos . onde ;
public class DentBleu {
private static ja va . i o . Pr in tW ri te r s o r t i e ;
6static public void changerSortie ( java . io . Writer s ) {
s o r t i e = new java . io . PrintWriter ( s ) ;
}
static public void changerSortie ( ) {
11 s o r t i e = null ;
}
private void ecrireLog ( String ordre ) {
i f (null == s o r t i e )
16 return ;
s o r t i e . p r in t ln ( + System . identityHashCode ( this ) + + ordre + ) ;
s o r t i e . flush ( ) ;
}
28
21
public void connecter ( ) {
ecrireL og ( ) ;
}
26
public void envoyer ( String commande) {
ec rir eLo g (commande ) ;
}
31
public void deconnecter ( ) {
ecrireL og ( ) ;
}
36
void r e i n i t i a l i s e r ( ) {
ecrireL og ( ) ;
}
41 }
Pour simplifier l’écriture de l’appel à une variable de classe ou une méthode de
classe d’un autre paquetage, il est possible d’utiliser la déclaration
au début du fichier. Par exemple permet d’écrire di-
rectement dans le code (à la place de ).
4.3 Statut de la classe en Java
Avec l’introduction des variables de classe et des méthodes de classe, la classe
n’est plus seulement une construction syntaxique. Elle peut être assimilée à la
notion de module mais aussi à la notion d’objet.
Dans le modèle objet, les objets sont les seules entités d’exécution. Si les classes
sont utilisables à l’exécution (envoi de messages), ce sont forcément des objets.
La classe est donc la mise en œuvre d’une encapsulation particulière décrivant
le service commun aux classes. Ce service fournit les informations sur ces décla-
rations/définitions contenues dans une classe : variables, portée, méthodes, con-
structeurs, liste de paramètres...
C’est le choix du langage Java :
la description de l’encapsulation particulière est définie dans la classe
. Chaque classe Java est instance de ;
à l’exécution, une classe est représentée d’une manière unique par son fichier
2:
Il est possible de définir des variables du type .
void a f f i c h e ( Class c ) {
System . out . pr intln ( c ) ;
}
2. Ce fichier est chargé dynamiquement par la machine virtuelle Java et le compilateur
29
1 / 6 100%
La catégorie de ce document est-elle correcte?
Merci pour votre participation!

Faire une suggestion

Avez-vous trouvé des erreurs dans linterface ou les textes ? Ou savez-vous comment améliorer linterface utilisateur de StudyLib ? Nhésitez pas à envoyer vos suggestions. Cest très important pour nous !