Sommaire
Eh bien, prêts à plonger dans les entrailles de la programmation orientée objet en Java ? Les classes, les champs, les méthodes, les constructeurs et les objets sont les ingrédients de base de toute application Java digne de ce nom. Dans ce tutoriel, nous allons démystifier ces concepts et vous transformer en véritable chef pâtissier du code objet.
Les classes : le moule à objets
Une classe, c’est un peu comme la recette de cuisine d’un gâteau (sans les grains de sucre partout sur le plan de travail). C’est le modèle, la structure que vous allez utiliser pour créer vos objets. Imaginez une classe comme un plan pour construire une maison. Bon, ok, on sort un peu de la métaphore culinaire, mais vous avez saisi l’idée.
Pour déclarer une classe, vous utilisez le mot-clé class
suivi d’un identifiant pas tout à fait banal (comme MonSuperClasse
). Cette déclaration est encadrée par une paire d’accolades ouvrante et fermante ( {}
) qui délimitent le corps de la classe. Un peu comme les pages d’un livre de recettes, mais en code.
class MonSuperClasse {
// Le corps de la classe avec les ingrédients (champs, méthodes, constructeurs)
}
Par convention, le nom d’une classe commence par une majuscule (comme Employe
) et si le nom est composé de plusieurs mots, chaque mot commence par une majuscule (comme CompteEpargne
). Cette convention s’appelle le CamelCasing, ou la casse chameau en bon français. Rien à voir avec les vrais chameaux, promis.
Les champs : les ingrédients des objets
Les champs (ou attributs) d’une classe représentent l’état, les caractéristiques des objets que vous allez créer. C’est un peu comme les ingrédients d’une recette de gâteau. Par exemple, pour une voiture, on pourrait avoir un champ pour la couleur, et pour un compte bancaire, un champ pour le solde.
La déclaration d’un champ suit la syntaxe suivante :
[static] type identifiant [= expression];
Vous pouvez éventuellement ajouter le mot-clé static
pour indiquer qu’il s’agit d’un attribut de classe plutôt que d’instance. Ensuite, vous précisez le type (comme String
ou int
), un identifiant pour nommer le champ, et optionnellement une expression pour l’initialiser.
Voici un exemple avec deux champs pour une classe Livre
:
class Livre {
String titre;
int anneePublication; // L'année de publication
}
Ces champs stockent des valeurs spécifiques pour chaque instance de Livre
créée. Cependant, vous pouvez aussi avoir des champs de classe qui sont partagés par toutes les instances. Par exemple, pour compter le nombre total de livres créés :
class Livre {
// ...
static int compteur;
}
Le mot-clé static
indique qu’il n’y a qu’une seule copie de ce champ en mémoire, accessible par toutes les instances de Livre
.
Les méthodes : les recettes de gâteau en code
Si les champs représentent les ingrédients, les méthodes sont les instructions de la recette. Elles décrivent les comportements, les actions que vos objets peuvent effectuer. Un peu comme les étapes à suivre pour préparer votre gâteau au chocolat.
La déclaration d’une méthode suit cette syntaxe :
[static] typeRetour nomMethode(parametres) {
// Instructions de la méthode
}
Vous pouvez éventuellement ajouter le mot-clé static
pour indiquer qu’il s’agit d’une méthode de classe. Ensuite, vous précisez le type de retour (comme void
si la méthode ne retourne rien), un nom pour la méthode, et éventuellement des paramètres entre parenthèses. Le corps de la méthode est encadré par des accolades et contient les instructions à exécuter.
Voici un exemple de méthode pour calculer la surface d’un rectangle :
class Rectangle {
double calculerSurface(double longueur, double largeur) {
return longueur * largeur;
}
}
Cette méthode calculerSurface
prend deux paramètres ( longueur
et largeur
) et retourne leur produit, qui représente la surface du rectangle.
Les constructeurs : préparer le moule à objets
Avant de pouvoir créer des objets à partir d’une classe, vous devez initialiser leurs champs avec des valeurs appropriées. C’est là qu’interviennent les constructeurs, ces méthodes spéciales chargées de préparer le moule à objets.
La déclaration d’un constructeur ressemble à celle d’une méthode, mais avec quelques différences. Le nom du constructeur doit correspondre exactement au nom de la classe, et il n’a pas de type de retour (pas même void
).
NomClasse(parametres) {
// Instructions d'initialisation
}
Voici un exemple de constructeur pour la classe Livre
:
class Livre {
String titre;
int anneePublication;
Livre(String titreInitial, int annee) {
titre = titreInitial;
anneePublication = annee;
}
}
Ce constructeur prend deux paramètres ( titreInitial
et annee
) et les utilise pour initialiser les champs titre
et anneePublication
de chaque instance de Livre
créée.
Travailler avec des objets Java
Maintenant que vous maîtrisez les ingrédients de base (les classes, les champs, les méthodes et les constructeurs), il est temps de passer à la pratique et de créer vos propres objets. C’est un peu comme suivre la recette pour préparer un gâteau délicieux.
Pour créer un objet à partir d’une classe, vous utilisez le mot-clé new
suivi du nom de la classe et des paramètres du constructeur entre parenthèses.
NomClasse monObjet = new NomClasse(parametres);
Par exemple, pour créer une instance de Livre
:
Livre monLivre = new Livre("Les Misérables", 1862);
Une fois que vous avez créé un objet, vous pouvez accéder à ses champs et méthodes en utilisant la notation pointée.
monLivre.titre; // Accède au champ titre
monLivre.anneePublication; // Accède au champ anneePublication
// Appelez une méthode de la classe Livre ici
Et voilà, vous avez créé votre premier objet en Java ! Félicitations, vous êtes officiellement un pâtissier de l’orienté objet. (Bon, peut-être pas encore un chef étoilé, mais vous y arriverez avec un peu d’entraînement.)
Getters, setters et surcharge de méthodes
Maintenant que vous maîtrisez les bases, il est temps d’ajouter quelques épices à votre recette orientée objet. Premièrement, les getters et les setters, ces méthodes qui vous permettent d’accéder et de modifier les champs d’un objet de manière contrôlée.
Un getter (accesseur en français) est une méthode qui retourne la valeur d’un champ. Par convention, son nom commence par « get » suivi du nom du champ avec une majuscule.
class Livre {
// ...
String getTitre() {
return titre;
}
}
Un setter (mutateur) est une méthode qui permet de modifier la valeur d’un champ. Son nom commence généralement par « set » suivi du nom du champ avec une majuscule, et il prend un paramètre du même type que le champ.
class Livre {
// ...
void setTitre(String nouveauTitre) {
titre = nouveauTitre;
}
}
Ensuite, la surcharge de méthodes. C’est un peu comme avoir plusieurs recettes pour le même gâteau, mais avec des ingrédients légèrement différents. En Java, vous pouvez déclarer plusieurs méthodes avec le même nom, tant que leurs signatures (le nombre, les types et l’ordre des paramètres) sont différentes.
class MaClasse {
void faireQuelqueChose() {
// Instructions pour faire quelque chose
}
void faireQuelqueChose(int x) {
// Instructions pour faire quelque chose avec un entier
}
void faireQuelqueChose(double x, boolean y) {
// Instructions pour faire quelque chose avec un double et un booléen
}
}
Le compilateur Java déterminera quelle méthode appeler en fonction des arguments passés lors de l’appel.
Les niveaux d’accès : garder vos ingrédients secrets
Enfin, pour garder votre recette secrète (ou du moins, une partie), Java vous offre la possibilité de contrôler les niveaux d’accès pour vos champs, constructeurs et méthodes. C’est un peu comme décider qui peut voir ou modifier quoi dans votre cuisine.
Il existe quatre niveaux d’accès en Java :
-
public
: Accessible partout, même depuis d’autres classes. -
private
: Accessible uniquement depuis la classe dans laquelle l’élément est déclaré. -
protected
: Accessible depuis la classe, les sous-classes et les autres classes du même package. - (Par défaut) : Accessible depuis la classe et les autres classes du même package.
En général, vous déclarerez vos champs comme private
et utiliserez des getters et des setters public
pour y accéder et les modifier depuis d’autres classes. Cela vous permet de contrôler comment les données sont manipulées et de garantir l’intégrité de vos objets.
class Livre {
private String titre;
private int anneePublication;
public String getTitre() {
return titre;
}
public void setTitre(String nouveauTitre) {
titre = nouveauTitre;
}
// ...
}
Voilà, vous maîtrisez maintenant les bases de la programmation orientée objet en Java ! Vous êtes prêt à créer vos propres classes, à instancier des objets et à les manipuler comme un vrai chef. Bien sûr, il reste encore beaucoup à découvrir, comme l’héritage, le polymorphisme et les interfaces, mais c’est une autre histoire. Pour l’instant, concentrez-vous sur vos premières recettes OO et amusez-vous bien !
TL;DR : L’essentiel à retenir
- Une classe est le moule pour créer des objets, défini avec le mot-clé
class
. - Les champs (attributs) décrivent l’état d’un objet, tandis que les méthodes décrivent ses comportements.
- Les constructeurs permettent d’initialiser les champs lors de la création d’un objet.
- On crée un objet avec le mot-clé
new
suivi du nom de la classe et des paramètres du constructeur. - Les getters et setters permettent d’accéder et de modifier les champs d’un objet de manière contrôlée.
- La surcharge de méthodes permet d’avoir plusieurs méthodes avec le même nom mais des signatures différentes.
- Les niveaux d’accès (
public
,private
,protected
) contrôlent la visibilité des membres d’une classe.