Connexion




Programmer Orienté Objet en Java

Par Arthur Martineau


<-- Introduction Utilisation de deux classes Accesseurs et mutateurs -->


Utilisation de deux classes


Si vous avez regardé le cours sur les bases du Java, vous avez jusqu'à maintenant toujours travaillé sur une unique classe.

Le principe de l'orienté objet est fondé sur l'utilisation de plusieurs classes, en créant ce que l'on appelle des objets.

Créer un nouveau projet, et une nouvelle classe en y ajoutant une classe main.

Il est possible de le faire automatiquement en cochant cette case :

Créons tout de suite notre seconde classe, le processus est le même que pour la première. Hormis qu'il ne faut pas que la deuxième classe contienne de méthode main (une unique méthode main par programme).

Nommez là "Voiture" afin d'obtenir ceci. Attention, n'oubliez pas la majuscule liée à la convention de nommage.

Vous pouvez voir que nous avons une nouvelle fois le mot clef public, ce mot que je n'ai pas voulu vous expliquer dans le cours sur les bases du Java.

 

Et bien il va être temps de vous expliquer ce qu'il signifie et quelles sont les autres possibilités.

Ce mot clef représente la portée de notre méthode. Il détermine qui va pouvoir faire un appel de notre méthode. Public comme vous avez pu vous en douter, rend la méthode publique, elle est donc accessible par l'ensemble des objets de votre programme.

 

Il existe deux autres mots clefs qui sont private et protected. Le premier permet de rendre les méthodes accessibles uniquement dans la classe dans laquelle elles sont définies. Alors qu'avec le second, elles ne sont accessibles que par les classes filles et les classes du même package (non, non, il n'est pas encore temps de vous expliquer ce qu'est un package).

Il est possible de ne pas mettre de champs de portée, dans ce cas-là, les méthodes seront accessibles par les classes appartenant au même package.

 

De plus, il faut savoir que la portée permet de définir des méthodes, mais aussi des classes et des variables. Rassurez-vous, les mêmes mots clefs offrent le même accès qu'il soit associé à une classe, une méthode ou une variable. Il y a une seule différence pour les variables, c'est que lorsqu'on ne renseigne pas la portée, elles sont par défaut à la portée public.

Plus tard dans cette partie, je mettrai en évidence le fonctionnement de la portée public et private. Mais pour cela, il faut avant tout créer notre première voiture, et pour ça, nous avons besoin d'utiliser les constructeurs.

 

Avant tout de chose, il faut déterminer les données que l'on va associer à notre objet Voiture.

Une voiture possèdera :

  • un identifiant ;
  • un nom ;
  • une marque ;
  • une date de création.

 

Il faut donc créer une variable pour chacun de ces éléments avec le type adéquat.

Vous remarquerez que pour que le type Date soit reconnu, il ne faut pas oublier d'importer la classe native dans laquelle il est contenu.

Maintenant que nous avons préparer les variables qui caractériseront notre objet, on peut le créer. C'est maintenant que nous allons faire appel aux constructeurs.

 

Le constructeur est une méthode qui à pour fonction de créer un objet et d'initialiser ses variables.

Nous allons commencer par réaliser le constructeur par défaut. C'est un constructeur qui instancie l'objet, sans prendre de paramètres, les variables d'instances prendront une valeur par défaut.

Créez cette méthode :

Notez bien, que le constructeur est une méthode qui comme vous pouvez le voir ci-dessous, porte le même nom que la classe à laquelle il appartient et qui n'a aucun type de retour.

 

Maintenant que notre constructeur est en place, retournons à notre classe main afin de créer une instance de Voiture. La méthode est simple, de la même manière que pour le type String, ou le type Date que l'on vient tout juste d'utiliser :

Avec cette ligne, on va créer un objet de type Ville, exactement de la même façon que lorsqu'on crée un objet de type String.

 

En exécutant le code, vous obtenez ceci : 

On a donc bien réussi à utiliser les deux classes ensemble.

Mais maintenant nous souhaitons apporter des paramètres à notre objet Voiture. Il faut que lorsqu'on déclare l'objet dans notre main, on puisse y renseigner les données de Voiture.

Il faut donc retourner sur notre classe Voiture afin d'adapter notre constructeur.

 

Pour faire cela, nous allons surcharger la méthode.

Afin que les variables en paramètres soit facilement identifiables, il peut être utile de les repérer de la façon ci-dessus, en ajoutant un p (pour paramètres) au début du nom.

 

Il est donc maintenant possible de déclarer un objet Voiture tout en passant des paramètres, mais il faudra tenir compte de la structure de Voiture. En effet, l'ordre dans lequel vous avez défini les paramètres d'entrées de votre méthode Voiture, doit être le même que celui qui sert à créer votre objet Voiture.

Il faut donc créer notre objet en s'assurant de préciser les paramètres dans le bon ordre. Ensuite vous pouvez demander au programme d'afficher les valeurs de l'objet de cette façon :

Vous obtiendrez alors quelque chose de semblable.

 

Maintenant que vous savez créer un objet, nous allons voir comment utiliser le mot clef private. Car ce que nous avons créé pose un problème.

Essayez de mettre ce code dans votre main :

Vous obtenez un résultat ressemblant à ca :

 

Il est possible de modifier les valeurs des variables d'instances de Voiture directement dans la classe de notre main. Or ce n'est pas ce qu'on veut. Car de cette façon, le code n'est pas protégé d'un code extérieur (puisque celui-ci aurait aussi accès de cette manière). De plus on ne pourrait pas ajouter d'action qui serait executée lors d'une modification.

Pour cela, nous allons modifier la déclaration de nos variables dans notre méthode Ville en ajoutant private à nos variables.

Après avoir effectué cette modification, si vous compilez le main précédent, il ne va pas réussir à compiler et renvoyer une erreur. Ce qui montre bien que nos variables ne sont plus modifiables depuis l'extérieur. Cela veut aussi dire qu'il faut trouver une autre façon d'accéder à nos données.

Pour cela on utilise les accesseurs et les mutateurs.



<-- Introduction Utilisation de deux classes Accesseurs et mutateurs -->