Derrière ce mot un peu barbare, se cache une notion toute bête. Vu que notre objectif dans ce chapitre est de construire un objet
Ville, il va falloir définir les données qu'on va lui attribuer.
Nous dirons qu'un objet
Ville a :
- un nom sous forme de chaîne de caractères,
- un nombre d'habitants sous la forme d'un entier,
- un pays apparenté sous la forme d'une chaîne de caractères.
Je suis bien d'accord ! Mais comment fait-on pour dire à notre programme que notre objet a tout ça ?
Tout simplement en mettant des variables (
dites d'instances) dans notre classe.
Celle-ci va contenir une variable dont le rôle sera de stocker le nom, une autre stockera le nombre d'habitants et la dernière se chargera du pays !

Voilà à quoi ressemble notre classe
Ville à présent :
Code : Java1
2
3
4
5
6
7 | public class Ville{
String nomVille;
String nomPays;
int nbreHabitant;
}
|
Rappelez-vous que, par défaut, les variables d'instances présentes dans une classe sont
public.
Pourquoi tu dis variables d'instances ?
Tout simplement parce que dans nos futures classes Java, qui définiront des objets, il y aura plusieurs types de variables dans celles-ci (nous approfondirons ceci dans ce chapitre).
Pour le moment, sachez qu'il y a trois grands types de variables dans une classe objet :
- les variables d'instances : ce sont elles qui définiront les caractéristiques de notre objet ;
- les variables de classes : celles-ci sont communes à toutes les instances de votre classe ;
- les variables locales : ce sont des variables que nous utiliserons pour travailler dans notre objet.
Dans l'immédiat, nous allons travailler avec des variables d'instances afin de créer des objets différents. Il nous reste plus qu'à créer notre premier objet mais pour ce faire, nous allons devoir créer ce qu'on appelle des
constructeurs.
Un constructeur est une méthode (ou méthode d'instance, vu qu'elle interagit avec une instance de votre classe) qui va se charger de créer un objet et, le cas échéant, d'initialiser ses variables de classe ! Cette méthode a pour rôle de dire à la
JVM de réserver de l'allocation mémoire pour notre futur objet et donc, par extension, d'en réserver pour toutes les variables d'instances et variables de classes de cette dernière !
Notre premier constructeur sera ce qu'on appelle communément
un constructeur par défaut.
C'est-à-dire qu'il ne prendra aucun paramètre mais permettra tout de même d'instancier un objet et vu que nous sommes perfectionnistes, nous allons initialiser nos variables d'instances.
Voici votre premier constructeur :
Code : Java 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26 | public class Ville{
/**
* Stocke le nom de notre ville
*/
String nomVille;
/**
* Stocke le nom du pays de notre ville
*/
String nomPays;
/**
* Stocke le nombre d'habitants de notre ville
*/
int nbreHabitant;
/**
* Constructeur par défaut
*/
public Ville(){
System.out.println("Création d'une ville !");
nomVille = "Inconnu";
nomPays = "Inconnu";
nbreHabitant = 0;
}
}
|
Vous avez remarqué que le constructeur est en fait une méthode qui n'a aucun type de retour (
void,
double...) et qui porte le même nom que notre classe !
Ceci est une règle immuable : le (les) constructeur(s) d'une classe doit (doivent) porter le même nom que la classe !
Une classe peut avoir plusieurs constructeurs ?
Bien sûr !
Il s'agit de la même méthode, mais surchargée ! Dans notre premier constructeur nous n'avons passé aucun paramètre, mais nous allons bientôt en mettre

.
Vous pouvez d'ores et déjà créer une instance de ville.
Mais tout d'abord, rappelez-vous qu'une instance d'objet se fait grâce au mot-clé
new. Comme lorsque vous créez une variable de type
String. Vous avez sûrement déjà dû faire ce genre de déclaration :
Code : Java1 | String mot = new String();
|
Maintenant, vu que nous allons créer des objets
Ville, nous allons procéder comme pour les
String.
Vérifions que l'instanciation se fait bien. Allez dans votre classe contenant la méthode
main et instancions un objet
Ville. Je suppose que vous avez deviné que le type de notre objet ne sera pas
double,
int ou
long mais bien
Ville !
Code : Java1
2
3
4
5
6
7
8
9 | public class Sdz1{
public static void main(String[] args){
Ville ville = new Ville();
}
}
|
Exécutez ce code, et voilà !
Je sais bien que, pour le moment, il ne sert à rien...
Mais vous devez passer par là afin de comprendre le principe de la
POO.
Maintenant, nous devons mettre des données dans notre objet, ceci afin de pouvoir commencer à travailler...
Le but final serait d'avoir une déclaration d'objet se faisant comme ceci :
Code : Java1 | Ville ville1 = new Ville("Marseille", 123456789, "France");
|
Vous avez remarqué qu'ici les paramètres sont renseignés : eh bien il suffit de faire une méthode qui récupère ces paramètres, et initialise les variables de notre objet. Notre constructeur d'initialisation sera créé.
Voici le constructeur de notre objet
ville, celui qui permet d'avoir des objets avec des paramètres différents. Comme je suis sympa, voici toute la classe telle qu'elle est maintenant :
Code : Java 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44 | public class Ville {
/**
* Stocke le nom de notre ville
*/
String nomVille;
/**
* Stocke le nom du pays de notre ville
*/
String nomPays;
/**
* Stocke le nombre d'habitants de notre ville
*/
int nbreHabitant;
/**
* Constructeur par défaut
*/
public Ville(){
System.out.println("Création d'une ville !");
nomVille = "Inconnu";
nomPays = "Inconnu";
nbreHabitant = 0;
}
/**
* Constructeur d'initialisation
* @param pNom
* Nom de la Ville
* @param pNbre
* Nombre d'habitants
* @param pPays
* Nom du pays
*/
public Ville(String pNom, int pNbre, String pPays)
{
System.out.println("Création d'une ville avec des paramètres !");
nomVille = pNom;
nomPays = pPays;
nbreHabitant = pNbre;
}
}
|
Dans ce cas, l'exemple de déclaration et d'initialisation d'un objet
ville que je vous ai montré un peu plus haut fonctionne sans aucun souci ! MAIS il vous faudra respecter scrupuleusement l'ordre des paramètres passés lors de l'initialisation de votre objet, sinon, c'est l'erreur de compilation à coup sûr !
Ainsi :
Code : Java1
2 | Ville ville1 = new Ville("marseille", 123456789, "France");//l'ordre est respecté => aucun souci
Ville ville2 = new Ville(12456, "France", "Lille");//Erreur dans l'ordre des paramètres => erreur de compilation au final
|
Testez ce code dans votre méthode
main :
Code : Java1
2 | Ville ville = new Ville();
Ville ville2 = new Ville("Marseille", 123456789, "France");
|
Voici le résultat :
Par contre, notre objet à un gros défaut...
Les variables d'instances qui le caractérisent sont accessibles dans votre classe contenant votre main !
Ceci veut dire que vous pouvez modifier les attributs d'une classe directement. Testez ce code et vous verrez :
Code : Java 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 | public class Sdz1 {
public static void main(String[] args)
{
Ville ville = new Ville();
System.out.println(ville.nomVille);
ville.nomVille = "la tête à toto ! ! ! !";
System.out.println(ville.nomVille);
Ville ville2 = new Ville("Marseille", 123456789, "France");
ville2.nomPays = "La tête à tutu ! ! ! ! ";
System.out.println(ville2.nomPays);
}
}
|
Et le résultat :
Vous voyez que nous pouvons accéder aux variables d'instances en utilisant le "
.". Comme lorsque vous appelez la méthode
subString() de l'objet
String.
C'est très risqué et la plupart des programmeurs Java vous le diront.
Pour la plupart des cas, nous allons contrôler les modifications des variables de classe de manière à ce qu'un code ne fasse pas n'importe quoi avec nos objets !
C'est pour cela que nous protégeons nos variables d'instances en les déclarant
private. Comme ceci :
Code : Java 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44 | public class Ville {
/**
* Stocke le nom de notre ville
*/
private String nomVille;
/**
* Stocke le nom du pays de notre ville
*/
private String nomPays;
/**
* Stocke le nombre d'habitants de notre ville
*/
private int nbreHabitant;
/**
* Constructeur par défaut
*/
public Ville(){
System.out.println("Création d'une ville !");
nomVille = "Inconnu";
nomPays = "Inconnu";
nbreHabitant = 0;
}
/**
* Constructeur d'initialisation
* @param pNom
* Nom de la Ville
* @param pNbre
* Nombre d'habitants
* @param pPays
* Nom du pays
*/
public Ville(String pNom, int pNbre, String pPays)
{
System.out.println("Création d'une ville avec des paramètres !");
nomVille = pNom;
nomPays = pPays;
nbreHabitant = pNbre;
}
}
|
Et, si vous n'avez pas effacé les lignes de code où nous avons modifié les attributs de nos objets
Ville, vous devez voir qu'Eclipse n'apprécie pas du tout que vous tentiez d'accéder à des variables de classe
privé !
Ces attributs ne sont plus accessibles en dehors de la classe où ils sont déclarés !
À partir de maintenant, ce ne sera plus le programme instanciant une classe qui ira voir ou modifier les attributs de notre objet, mais notre objet qui renverra les informations (ou les modifiera) lorsque le programme lui demandera !
Bon... Vous avez fait le plus dur ! Si, si, je vous assure !
Maintenant, il va falloir se servir de ces objets... Eh oui ! Le but est tout de même d'utiliser nos objets dans des programmes.
Pour pouvoir accéder aux données de nos objets, nous allons utiliser ce que l'on appelle des
ACCESSEURS et pour modifier les données, on appelle ça des
MUTATEURS. Donc que dire, si ce n'est :
"À l'abordage, moussaillons !

"