Classe en Java : Comprendre les bases

Qu’est ce qu’une Classe Java ?

En Java, les classes sont les composants de base des programmes. Lorsque vous définissez une classe, vous décrivez toutes les parties et caractéristiques d’un de ces composants. Dans les chapitres suivants, vous verrez d’autres éléments de base comme les interfaces, les records et les enums.

Pour utiliser la plupart des classes, vous devez créer des objets. Un objet est une instance d’une classe en mémoire lors de l’exécution du programme. On fait souvent référence à un objet comme une instance car il représente une seule représentation de la classe. Tous les différents objets des diverses classes représentent l’état de votre programme. Une référence est une variable qui pointe vers un objet.

Note Perso

Bon, ça en fait des mots compliqué et c’est pas évident pour un débutant de comprendre le sens exact.
OK, prenons l’exemple des voitures pour clarifier les concepts de classe et d’objet.

Imaginez que “Voiture” est une classe. Elle définit les caractéristiques et les fonctionnalités générales de toutes les voitures, comme :

  • ce qu’elle est : nombre de roues, couleur, marque…
  • ce qu’elle fait : démarrer, accélérer, freiner…

Maintenant, votre voiture spécifique “Titine” est un objet de la classe Voiture. Titine a ses propres valeurs d’attributs (4 roues, rouge, Renault), mais suit la structure générale définie dans la classe Voiture.

Donc quand on dit “Titine est une Voiture”, on veut dire que Titine est un objet spécifique qui suit le modèle général de la classe Voiture.

En résumé :

  • Une classe est un plan ou un modèle qui définit un type d’objet
  • Un objet est une instance concrète de cette classe, avec ses propres caractéristiques

Gardez à l’esprit cette distinction fondamentale entre classe (concept général) et objet (exemple spécifique), et la programmation orientée objet deviendra beaucoup plus claire !

Champs et Méthodes

Les classes Java possèdent deux éléments principaux : les méthodes (souvent appelées fonctions ou procédures dans d’autres langages) et les champs, plus généralement appelés variables. Ensemble, on les appelle les membres de la classe. Les variables conservent l’état du programme et les méthodes opèrent sur cet état. Si un changement important doit être conservé, une variable le stocke. C’est essentiellement ce que font les classes. Il appartient au programmeur de créer et d’organiser ces éléments de manière à ce que le code obtenu soit utile et, idéalement, facile à comprendre pour d’autres développeurs.

La classe Java la plus simple que vous puissiez écrire ressemble à ceci :

public class Animal {
}

Java désigne un mot ayant une signification spéciale comme un mot-clé, ce que nous avons mis en gras dans l’extrait précédent. Tout au long de ce livre, nous mettons souvent en gras certaines parties du code pour attirer l’attention. La première ligne inclut le mot-clé public, qui permet à d’autres classes de l’utiliser. Le mot-clé class indique que vous définissez une classe. « Animal » est le nom de la classe. Certes, ce n’est pas une classe très intéressante, alors ajoutons votre premier champ.

public class Animal {
    String nom;
}

À la ligne indiquée, nous définissons une variable nommée nom. Nous déclarons également que le type de cette variable est String. Une String est une valeur dans laquelle nous pouvons placer du texte, par exemple “Ceci est un texte.”. String est aussi une classe fournie avec Java. Passons maintenant aux méthodes.

public class Animal {
    String nom;

    public String getNom() {
        return nom;
    }

    public void setNom(String nouveauNom) {
        nom = nouveauNom;
    }
}

Dans les lignes correspondant à getNom(), nous définissons une méthode. Une méthode est une opération qui peut être appelée. Ici, public indique que cette méthode peut être appelée depuis d’autres classes. Vient ensuite le type de retour — dans ce cas, la méthode retourne une String.

Dans la méthode setNom(), le type de retour est void, ce qui signifie qu’aucune valeur n’est renvoyée. Cette méthode nécessite que des informations lui soient fournies par la méthode appelante ; ces informations s’appellent des paramètres (ou arguments). La méthode setNom() possède un paramètre nommé nouveauNom, de type String. Cela signifie que l’appelant doit fournir un paramètre de type String et ne rien attendre en retour.

Le nom de la méthode et les types de ses paramètres constituent la signature de la méthode. Dans cet exemple, pouvez-vous identifier le nom de la méthode et ses paramètres ?

public int nombreVisiteurs(int mois) {
    return 10;
}

Le nom de la méthode est nombreVisiteurs. Il y a un paramètre nommé mois, de type int (un type numérique). Par conséquent, la signature de la méthode est :
nombreVisiteurs(int)

Les Commentaires

Une autre partie courante du code s’appelle un commentaire. Comme les commentaires ne sont pas du code exécutable, vous pouvez les placer à divers endroits. Ils rendent votre code plus lisible.

Note Perso

Essayer de rendre votre code lisible en priorité avec des noms de variables et de methodes claire. Souvent les commentaires ne sont pas nécessaire si le naming que vous utiliser est suffisant. autrement, on se retrouve dans cette situation:

Il existe trois types de commentaires en Java. Le premier est le commentaire sur une seule ligne :

// commentaire jusqu'à la fin de la ligne

Un commentaire sur une seule ligne commence par deux barres obliques. Le compilateur ignore tout ce qui suit sur la même ligne. Ensuite, il y a le commentaire sur plusieurs lignes :

/* Commentaire
sur plusieurs lignes
*/

Un commentaire sur plusieurs lignes (aussi appelé commentaire multi-lignes) englobe tout ce qui se trouve entre le symbole /* et le symbole */. On ajoute souvent un astérisque (*) au début de chaque ligne pour faciliter la lecture, mais ce n’est pas obligatoire. Enfin, il y a le commentaire Javadoc :

/**
 * Commentaire Javadoc sur plusieurs lignes
 *
 * @author Jeanne et Scott
 */

Ce commentaire est similaire à un commentaire multi-lignes, sauf qu’il commence par /**. Cette syntaxe spéciale indique à l’outil Javadoc de prendre en compte le commentaire. Les commentaires Javadoc possèdent une structure spécifique que l’outil Javadoc sait interpréter. Vous ne verrez probablement pas de commentaire Javadoc lors de l’examen. Retenez simplement qu’ils existent afin de pouvoir vous renseigner en ligne lorsque vous commencerez à écrire des programmes destinés à d’autres.

Exercez-vous

Pour vous exercer un peu, pouvez-vous identifier le type de commentaire associé aux six exemples suivants ? S’agit-il d’un commentaire sur une seule ligne ou d’un commentaire multi-lignes ?

/*
* // tamanoir
*/

// ours

// // chat

// /* chien */

/* éléphant */

/*
* /* furet */ 
*/

Avez-vous regardé attentivement ? Certains de ces exemples sont subtils, il est bon de s’exercer à lire le code avec attention.

Passons maintenant aux réponses.

  • Le commentaire contenant « tamanoir » se trouve dans un commentaire multi-lignes. Tout ce qui se situe entre /* et */ fait partie d’un commentaire multi-lignes, même s’il contient un commentaire sur une seule ligne à l’intérieur !
  • Le commentaire contenant « ours » est un commentaire simple sur une seule ligne.
  • Les commentaires contenant « chat » et « chien » sont également des commentaires sur une seule ligne. Tout ce qui suit // jusqu’à la fin de la ligne fait partie du commentaire, même s’il s’agit d’un autre type de commentaire.
  • Le commentaire contenant « éléphant » est un commentaire multi-lignes de base, même s’il tient sur une seule ligne.
  • La ligne avec « furet » est intéressante car elle ne compile pas. Tout ce qui se trouve du premier /* jusqu’au premier */ fait partie du commentaire, ce qui signifie que le compilateur voit quelque chose comme ceci: /* */ */ Nous avons un problème. Il y a un */ en trop. Ce n’est pas une syntaxe valide — ce que le compilateur vous indiquera volontiers.

Classe Java et Fichier Source

La plupart du temps, chaque classe Java est définie dans son propre fichier .java. Dans ce chapitre, le seul type de premier niveau (top level en anglais) est la classe. Un type de premier niveau est une structure de données qui peut être définie de manière indépendante dans un fichier source. Pour la majeure partie de la formation, nous travaillons avec les classes comme type de haut niveau. Nous verrons plus tard les types imbriqués.

Une classe Java de haut niveau est souvent déclarée public, ce qui signifie que n’importe quel code peut l’utiliser. Fait intéressant, Java n’exige pas que le type soit public. Par exemple, cette classe est parfaitement valide :

class Animal {
    String nom;
}

Vous pouvez même placer deux types dans le même fichier. Dans ce cas, un seul des types de haut niveau peut être public. Cela signifie qu’un fichier contenant ce qui suit est également acceptable :

public class Animal {
    private String nom;
}
class Animal2 {}

Si vous déclarez un type public, son nom doit correspondre au nom du fichier. La déclaration « public class Animal2 » ne compilerait pas dans un fichier nommé Animal.java. Nous aborderons plus tard les différentes options d’accès autres que public.

Voilà, la structure d’une classe Java n’a plus de secret pour vous !