Suivez-nous sur X
|
|
|
0,
A,
B,
C,
D,
E,
F,
G,
H,
I,
J,
K,
L,
M,
N,
O,
P,
Q,
R,
S,
T,
U,
V,
W,
X,
Y,
Z,
ALL
|
|
0,
A,
B,
C,
D,
E,
F,
G,
H,
I,
J,
K,
L,
M,
N,
O,
P,
Q,
R,
S,
T,
U,
V,
W,
X,
Y,
Z
|
|
0,
A,
B,
C,
D,
E,
F,
G,
H,
I,
J,
K,
L,
M,
N,
O,
P,
Q,
R,
S,
T,
U,
V,
W,
X,
Y,
Z
|
|
A propos d'Obligement
|
|
David Brunet
|
|
|
|
Programmation : Java - constructeur, destructeur, accesseur
(Article écrit par Jérôme Palaysi et extrait d'Amiga News - mars 1998)
|
|
Voilà une nouvelle année qui sera sans doute l'année de l'apparition de Java pour Amiga. Je ne cesserai de le répéter, ce
langage va modeler une informatique nouvelle, comme s'il s'agissait de l'acte majeur de cette fin de siècle.
Pour commencer, revenons à l'exemple du numéro de janvier.
Dans cet exemple, nous avions deux classes : l'une était celle de l'alien, l'autre celle de l'application. A ce propos,
je vous conseille de prendre connaissance de l'annexe "Applets et Applications" plus bas. Regardons la classe alien.
Elle comporte des attributs (age et taille) et une méthode (celle qui lui permet de se présenter).
Constructeurs et destructeurs
Réellement, il existe deux méthodes de plus que nous ne voyons pas dans le code et qui s'appellent "constructeur" et
"destructeur". Ces méthodes peuvent être explicitement décrites pas nous, mais pas nécessairement. Lorsqu'un objet est
créé, la méthode "constructeur" est automatiquement appelée. Lorsqu'un objet est détruit, la méthode appelée est "destructeur".
En réalité, la première devrait s'appeler "initialisateur" dans le sens où cette méthode est en général réservée à
l'initialisation des attributs de l'objet. La méthode constructeur porte le même nom que la classe. Dans notre cas, cette
méthode s'appelle "alien()". Vous pouvez la rajouter dans le code :
alien()
{
age=10;
taille=180;
}
|
...ou rajouter encore un autre type de constructeur. En effet, les constructeurs peuvent être surchargés. C'est-à-dire
que vous pouvez décrire une autre méthode "alien()" mais qui prend en entrée des paramètres :
alien(int age_desire,int taille_desiree)
{
age=age_desire;
taille=taille_desiree;
}
|
J'ai rajouté "_désiré" pour qu'il n'y ait pas de confusion avec le nom des attributs de la classe.
Ainsi, lors de la création d'un tel objet vous pourrez passer en paramètres les valeurs des attributs "désirés" :
pierre = new alien (22,208);
|
Accesseurs
Étudions l'exemple de la dernière fois ; il lit la valeur des attributs de mon alien directement :
System.out.printIn("J'ai "+
Pierre.age+
" ans et je mesure "+
Pierre.taille+
" centimetres.");
|
Parfois, je change leur valeur directement, également :
Pierre.age=22;
Pierre.taille=180;
|
Arrêtons ces pratiques ! En effet, la programmation objet doit permettre aux programmeurs d'échanger leur travail de façon
intense. Pour effacer des problèmes empiriques lors d'échanges de code, il faut cacher l'implémentation. Ce qui constitue
l'implémentation, ce sont les attributs, il faut donc qu'un utilisateur de votre classe n'ait pas accès à vos données directement.
Son seul moyen doit être l'utilisation de méthodes destinées à cet usage : les accesseurs.
Interdire l'accès à des données se fait avec le mot "private". Tout ce qui est privé ne sera utilisable qu'à l'intérieur de
votre classe. Depuis le corps de votre application, vous ne pourrez pas faire d'accès direct à ces données. Pour autoriser
un accès général, il faut utiliser le mot "public".
Mais, dans cet esprit, il faut envisager également l'écriture de méthodes publiques qui serviront à lire les données pertinentes
de la classe et des méthodes (que l'on pourrait appeler "modificateurs") publiques qui serviront à modifier les attributs.
Ainsi, depuis le corps de votre programme, vous demanderez à l'objet de faire lui-même ces opérations, ce qui cache en grande
partie l'implémentation et les problèmes qui pourraient découler, si le concepteur de la classe décidait de changer d'implémentation
par exemple...
Évidemment, je ne devrais certainement pas le promettre, mais j'espère pour une prochaine fois reprendre l'exemple du mois de
janvier et l'arranger dans les règles de l'art (tiens ? Je n'ai rien promis). Prochainement nous visiterons des sites fameux
comportant des "applets" (appliquettes), évoquerons une petite bibliographie et parlerons plus précisément des solutions Java pour Amiga...
Par contre, je ne reviendrai pas sur la polémique : "qui de Pierre ou de l'alien doit nous faire le plus peur ?". Je
voudrais seulement lancer un appel à tous ceux qui auraient mis la main sur un compilateur Java pour Amiga, ou un interpréteur,
ou encore un JIT. En effet, je n'ai pour l'instant rien de tout cela pour notre machine, mais des projets seraient en état de
marche... Les circonstances actuelles ne me permettent pas de tester les solutions dont j'ai pris connaissance.
A part ça, n'hésitez pas à me poser des questions. Pour cela, deux adresses : jpa-laysi@ufr.lirmm.fr pour les questions faciles
et fopaquicher@ufr.lirmm.fr pour les autres.
Annexe : applets et applications
Vous avez déjà entendu parler d'applets (appliquettes) à propos de Java, n'est-ce pas ? Une question légitime consiste à se demander ce qu'est
une applet. Une application Java est une application "normale" comme toutes celles que vous possédez ou toutes celles que vous
connaissez (TurboCalc, Scala...).
Une applet Java ressemble vraiment à une application. J'ai tendance à dire qu'il s'agit d'une application d'ailleurs, seulement,
ce sont des applications que vous rencontrerez sur Internet (exécutables dans votre navigateur). Ce sont les applets Java qui
ont rendu Java célèbre ! (...et qui constituent sa première force).
Pour l'utilisateur, une applet peut donc être un jeu proposé sur une page Web, une molécule chimique en 3D que l'on peut
faire tourner à volonté et tout un tas d'autres choses qui demandent souvent, soit trop de complexité, soit trop d'interactivité
pour être géré par une "implémentation HTML".
Pour le programmeur, une applet se programme presque comme une application. Seulement, il s'agit de classes différentes.
Il faudra donc un de ces jours que l'on regarde ensemble ces classes...
|