Documente Academic
Documente Profesional
Documente Cultură
Classes et objets
Les elements de base en java sont des objets. On peut avoir differents types
dobjets en Java. Le type dun objet est appele sa classe. Chaque fichier java
decrit une classe. Une classe dobjets decrit en particulier quels sont les differents
elements qui caracterisent un objet de cette classe (attributs) et quelles sont les
fonctions (methodes) qui permettent de le manipuler.
Par exemple, les objets de type Robot (TP 2 et 5) etaient decrits par leurs
positions (x et y, deux entiers) et leurs noms (une chane de caract`ere). On
pouvait les manipuler en leur demandant de monter, descendre aller a` gauche
ou a` droite. La classe Robot est decrite de la mani`ere suivante :
class Robot {
int x;
int y;
String nom;
Robot(int X, int Y, int NOM)
this.x = X;
this.y = Y;
this.nom = NOM;
}
void
void
void
void
haut()
bas()
gauche()
droite()
{
{
{
{
this.y
this.y
this.x
this.x
=
=
=
=
this.y-1;
this.y+1;
this.x-1;
this.x+1;
}
}
}
}
}
Une methode particuli`ere est ici le constructeur. Cest une fonction qui na
pas de type de retour et qui a le meme nom que la classe (ici Robot(int X,
int Y, String NOM) ). Elle est appelee lorsquun objet de type Robot est cree.
Elle sert a` initialiser les attributs du robot.
Notez que le mot clef this, utilise dans une classe est une reference a` lobjet
courant : comprendre this comme moi. Par exemple quand un robot va a`
droite, son x augmente (this.x = this.x+1).
Cr
eation et utilisation dun objet
On cree ici deux objets de types Robot (r1 et r2), ils disposeront alors tous
deux dun attribut x, dun attribut y, dun nom, et des methodes haut, bas,
gauche et droite. Par exemple, le code suivant permet de demander au robot r1
de monter et au robot r2 de descendre. :
r1.haut();
r2.bas();
Private/Public
Les attributs et les methodes peuvent etre declares private ou public. Un attribut ou une methode publique est accessible de partout. Un attribut ou une
methode privee ne peut etre modifie que dans le fichier de la classe. Par exemple,
dans le fichier Machin.java :
Class Machin {
...
public int a1;
private int a2;
...
public int f1() {
...
return a2; /* autoris
e */
}
private void f2() {
...
a1 = 0; /* autoris
e */
a2 = 1; /* autoris
e */
...
}
}
Dans le fichier Truc.java :
Class Truc {
...
public void bidule()
{
Machin m;
...
m.a1 = 0; /* autoris
e */
m.a2 = 1; /* interdit ! a2 est priv
e */
m.f1(); /* autoris
e */
m.f2(); /* interdit ! f2() est priv
e */
}
...
}
2
Le mot clef private sert surtout pour proteger certains attributs dun
objet.
static
Par defaut, les attributs et methodes dun objet lui sont propres. On parle
dattributs et de methodes dinstance : chaque instance de la classe (chaque
objet) a son propre jeu dattributs et son propre jeu de methodes (dans lexemple
plus haut r1.bas() et r2.bas() sont deux methodes distinctes). On peut desirer
avoir des attributs ou des methodes qui concernent la classe dans son entier.
On parle dattribut ou de methode de classes et on prec`ede leur definition. Par
exemple :
class Robot {
static private int nb_robots;
...
static int combien_de_robots() {
...
}
return nb_robots;
Le nombre de robots nest pas une caracteristique dun robot particulier mais
de lensemble des robots, cest donc un attribut de classe ce qui justifie lemploi
du mot clef static. Meme chose pour une fonction qui permet de connatre le
nombre de robots.
Pour acceder a` ces attributs ou methodes, on doit les preceder du nom de la
classe (Robot.nb robots; ou Robot.combien de robots() dans lexemple).
Notons que la methode main est toujours une methode statique : elle indique
le classe peut etre executee (on peut faire un run).
h
eritage
La classe Robot2 herite de la classe Robot. Elle recup`ere tous les attributs et
toutes les methodes de Robot (`
a lexception du constructeur quil faut recrire).
3
Interface
Une interface peut etre utilisee comme type dans les param`etres dune methode.
Par exemple :
public void bouge(Lutin l) {
...
}
Cette fonction prend en entree un objet l quelconque dont on sait juste quil respecte linterface (ici, cela signifie quil poss`ede les fonctions getX() et avance()).
Ce peut etre un objet dont la classe est Robot3 ou nimporte quelle classe
qui implemente linterface Lutin. On notera par ailleurs quune classe peut
implementer plusieurs interfaces.
Javadoc