• 15 heures
  • Facile

Ce cours est visible gratuitement en ligne.

course.header.alt.is_video

course.header.alt.is_certifying

J'ai tout compris !

Mis à jour le 19/05/2021

Écrivez une fonction principale propre

Connectez-vous ou inscrivez-vous gratuitement pour bénéficier de toutes les fonctionnalités de ce cours !

Dites « bonjour » au monde entier

Comme vous l'avez vu dans la vidéo, une fonction peut être considérée comme un bloc de code avec un nom, qui exécute un service. Quand il s'agit d'une fonction  main, le service effectué est en fait le programme lui-même ! Plutôt cool, non ?

Lorsqu'une fonction est située à l'intérieur d'une classe, elle s'appelle une méthode. Puisque tout le code est situé à l'intérieur de classes, vous pouvez utiliser les deux termes (fonctions et méthodes) de manière interchangeable. 😎

Maintenant que vous connaissez les fonctions  main  et que vous savez comment lancer un programme, il est temps d'écrire votre premier programme ! Traditionnellement, lorsque l'on apprend un langage pour écrire son premier programme, on cherche à afficher la chaîne de caractères Hello World! (Bonjour le monde, en français)

Voici le code Java qui rend honneur à cette tradition :

package hello;
/** Ceci est une implémentation du message traditionnel "Hello world!"
* @author L'équipe Education d'OpenClassrooms
*/
public class HelloWorld {
/** Le programme commence ici */
public static void main(String[] args) {
System.out.println("Hello World!");
}
}

Décryptons ce code :

  • la première instruction,  package hello;, est une déclaration de package. Ne tenez pas compte de cette ligne pour le moment, sachez seulement qu'elle permet d'utiliser Hello ;

  • la déclaration   public class HelloWorld  définit le nom de la classe comme étant  HelloWorld. En Java, l'ensemble du code doit se trouver à l'intérieur d'une classe. 

  • les classes servant de modèle pour les objets( ici HelloWorld). Nous y reviendrons dans la partie suivante. Ces classes définissent l'état de l'objet avec les champs, et le comportement de l'objet avec les méthodes,

  • une instruction avec une classe utilitaire nommée  System. Ce genre de classe n'a pas besoin d'être instanciée pour être utilisée ;

  • à l'intérieur d’une classe, vous trouverez la déclaration de fonction  public static void main(String[] args). C'est le morceau de code que l'interpréteur Java recherche lorsque vous démarrez un programme ;

  • à l'intérieur de la méthode principale, vous trouverez l'instruction  System.out.println("Hello World !");  qui affiche le message attendu.

Mais, à quoi servent les lignes dans les caractères  /**  et  */  ?

Ce sont des commentaires de documentation. Cela crée un Javadoc ou, en d'autres termes, une page web HTML contenant la documentation pour votre code. Il contient généralement une liste de classes, de méthodes et de variables, ainsi que des commentaires. Cela permet à d'autres développeurs d'utiliser votre code sans avoir à passer par votre code Java actuel. 

En résumé, le code de démarrage d'un programme Java est contenu dans une fonction  main  (ou méthode). Cette fonction  main  est elle-même contenue dans une classe. Enfin, cette classe elle-même appartient à un package.

Maintenant que vous savez écrire du code, il est temps de l'exécuter !

Exécutez le programme à partir du terminal

En Java, il y a une correspondance directe entre :

  • les packages et les dossiers ;

  • les classes et les fichiers.

En effet, pour exécuter le programme sur votre ordinateur, vous devrez créer des dossiers qui correspondent à vos packages et des fichiers qui correspondent à vos classes ! Pour le moment, nous avons écrit notre code Hello World! dans la méthode principale d'une classe HelloWorld. Cette méthode principale se trouvant dans un package  hello . Voyons maintenant ce que vous devez faire pour faire correspondre cela avec quelques fichiers et dossiers.

Voici les étapes principales :

  1. Tout d'abord, vous devez créer un dossier dans lequel vous allez mettre tout votre code. C'est ce qu'on appelle généralement le dossier root (racine).

  2. À l'intérieur de ce dossier racine, vous pouvez créer un dossier "hello" correspondant au nom de votre package.

  3. Ensuite, créez un fichier HelloWorld.java dans le dossier Hello, correspondant au nom de votre classe.

Vous voyez comment tout cela s'organise ? Package vers dossier, classe vers fichier. ✅ Une fois le fichier HelloWorld.java créé, vous pouvez saisir votre code Java. Utilisons le code de la section précédente :

package hello;
/** Ceci est une implémentation du message traditionnel "Hello world!"
* @author L'équipe Education d'OpenClassrooms
*/
public class HelloWorld {
/** Le programme commence ici */
public static void main(String[] args) {
System.out.println("Hello World!");
}
}

Lorsque tout le code est à l'intérieur du fichier, vous devez convertir ce code Java en code exécutable par une machine que l'ordinateur peut comprendre.

Exécutable ? Mais qu'est ce que ça veut dire ? 🧐

Quel que soit le langage de programmation que vous utilisez pour écrire votre code, il doit être traduit en un ensemble d'instructions qu'un ordinateur peut exécuter. C'est ce qu'on appelle le code machine.

Mais alors, pourquoi ne pas écrire des programmes directement en code machine ?

Même si le code machine est parfaitement lisible pour les ordinateurs, il serait très difficile à utiliser pour les êtres humains. Pensez à du code un peu comme à une recette de cuisine. Vous pouvez utiliser un langage de tous les jours pour décrire les ingrédients et les étapes à suivre, ou vous pouvez utiliser leur composition chimique et un vocabulaire spécialisé pour décrire les différentes étapes. Cette dernière option pourrait être comprise par certains, mais la plupart d'entre nous ne pourrait pas cuisiner avec de telles instructions. Et même pour ceux qui comprennent, le processus serait très long ! Vous êtes d'accord, n'est-ce pas ?

Le langage dans lequel le code Java doit être transformé est appelé Bytecode. Pour transformer le code Java en Bytecode, il est nécessaire d'utiliser le compilateur javac.

Et c'est à ce moment-là que les dossiers commencent à être utiles ! En utilisant Terminal, naviguez jusqu'au dossier racine  root  de votre programme et exécutez la commande suivante :

$ javac hello∖HelloWorld.java

La commande javac est en fait elle-même un programme. Si vous êtes sous Windows, elle sera nommée javac.exe.

Cette commande crée un fichier HelloWorld.class dans le dossier Hello. Ce fichier est un fichier binaire (vous ne pouvez pas l'ouvrir dans un éditeur de texte). Vous pouvez maintenant exécuter le programme avec la commande java (ou java.exe sous Windows) :

$ Java hello.HelloWorld
Hello World!

Si vous souhaitez vous entraîner sur votre machine, vous pouvez être freiné par la prise en main du terminal de ligne de commande. Pas de panique, cette vidéo de démonstration vous guidera pas à pas :

Bravo ! ✌️ Dans le reste de ce chapitre, nous allons nous concentrer sur la façon d'organiser votre code afin que votre fonction  main  reste aussi petite que possible.

Organisez votre code de manière à ce qu'il soit le plus compact possible

Le but de votre fonction  main  est de démarrer votre programme. En fait, c'est votre programme. Si vous deviez écrire toute la logique de votre programme à l'intérieur du  main, cela pourrait donner une trop grande quantité de code à un seul endroit. Ce serait difficilement compréhensible pour nous, les humains, et compliquerait le maintien de votre programme. C'est la raison pour laquelle vous devez organiser votre code en classes.

Comme nous l'avons dit au début de ce chapitre, il existe deux types de classes que vous pouvez écrire et utiliser.

Utilisez des classes en tant que modèles

Vous pouvez définir des types complexes qui regroupent différents attributs représentant un concept nommé. Ce sont des classes de modèles. Vous les écrivez souvent pour modéliser le domaine de votre application : ce pour quoi vous écrivez votre programme.

Un exemple d'une telle classe est la classe  String  que vous utilisez pour stocker et manipuler les chaînes de caractères dans votre programme. Cette classe est disponible dans le package  java.lang, qui est disponible depuis n'importe quelle partie de votre code.

Comment se fait-il que  String  soit une classe et non un type primitif tel que  int  ou  double  ?

String  est une classe non seulement parce que son nom commence par une lettre majuscule, mais aussi parce qu'il définit un état et un comportement :

  1. Son état est la chaîne de caractères que vous stockez. La valeur réelle est définie pour chaque objet lorsque vous l'instanciez.

  2. Son comportement est l'ensemble des méthodes que la classe  String  définit et qui vous permettent d'opérer sur la chaîne que vous stockez.

Voyons cela en action :

package stringDemo;
public class StringDemo {
public static void main(String[] args) {
// Déclarez et créez une chaîne de caractères
String shockingSentence="The Java String type actually is a class, not a simple type!";
// Faites-le savoir
System.out.println(shockingSentence.toUpperCase());
// Inversez-le
System.out.println(shockingSentence.replace("simple","primitive"));
}
}

Compilons et exécutons ce programme :

$ javac stringDemo.StringDemo.java
$ java stringDemo.StringDemo
THE JAVA STRING TYPE ACTUALLY IS A CLASS, NOT A SIMPLE TYPE! 
The Java String type actually is a class, not a primitive type!

Comme vous pouvez le constater, la classe  String  vous donne accès à des comportements prédéfinis. Vous pouvez simplement les utiliser pour manipuler String comme bon vous semble.

Comment savoir quels comportements sont réellement disponibles ?

Vous vous souvenez de la Javadoc ? Chaque fois que vous écrivez une classe, vous êtes censé la documenter dans les marqueurs  /**  et  */. Cela permet de générer automatiquement une page de documentation HTML. Les développeurs Java ont fait cette page pour vous et l'ont rendue disponible sur le site officiel. Cette documentation va vous permettre de trouver les fonctionnalités disponibles rapidement ! Pratique, non ?

Jetez un coup d'œil à la Page Javadoc sur les StringPouvez-vous trouver les méthodes  toUpperCase()  et  contain() ?

Entraînez-vous à trouver des méthodes dans la page Javadoc et faites en sorte que l'utilisation du site web Javadoc devienne un réflexe pour vous ! Cela vous permettra de gagner du temps par la suite. 🙂

Voyons maintenant le deuxième type de classes que vous allez définir et utiliser : les classes utilitaires.

Nettoyez votre fonction main 

Pour compléter ce chapitre, voyons comment appliquer un concept fondamental pour rendre votre code compréhensible et maintenable : ne rien garder dans votre fonction main qui puisse être extrait vers une fonction. Même si votre implémentation actuelle consiste en une seule instruction, vous devriez la remplacer par un appel à une méthode réelle et efficace. Si vous décidez d'ajouter de la complexité, elle sera déplacée vers d'autres méthodes, en conservant une fonction  main  propre et nette.

Dans certains cas, vous n'aurez même pas accès à la fonction  main ! Cela peut se produire si vous utilisez des frameworks, comme le kit de développement d'Android pour le développement mobile ou le Spring Framework pour le développement web. Les frameworks sont des outils qui fournissent aux développeurs les fonctionnalités de base sur lesquelles ils peuvent s'appuyer, généralement sous la forme d'un ensemble de classes.

Penchons-nous maintenant sur votre fonction main  et prenons-en le contrôle. Nous allons la rendre aussi propre et nette que possible. Voici une implémentation « propre et nette » de notre programme HelloWorld :

package cleanHello;
/** Ceci est une implémentation du message traditionnel "Hello world!"
* @author L'équipe Education d'OpenClassrooms
*/
public class CleanWorld {
/** Le programme commence ici */
public static void main(String[] args) {
sayHelloTo("world");
}
/** affiche le message "hello" au destinataire fourni
*
* @param recipient
*/
private static void sayHelloTo(String recipient) {
System.out.println("Hello " + recipient);
}
}

Comme vous pouvez le voir, la classe  CleanWorld  définit deux méthodes :

  1. main  est le point de départ du programme. Son seul job, c'est de transmettre le travail à la méthode sayHello avec l'argument dont elle a besoin. Dans notre cas, c'est le destinataire prédéfini de notre hello: the world!

  2. La méthode  sayHello  imprime la chaîne « Hello » et ajoute la valeur fournie à la variable destinataire  recipient  lorsqu'elle est appelée par la méthode main.

En termes de fonctionnalités, rien n'a changé. Cependant, vous pouvez maintenant ajouter plus de logique au message que vous allez afficher en changeant la méthode  sayHello  et en personnalisant le nom du destinataire.

Nous allons ajouter des fonctionnalités dans les chapitres suivants ! Pour cela, vous devez ajouter plus de logique à votre boîte à outils de programmation Java. Le chapitre suivant traite de ce premier outil : les conditions !

À vous de jouer !

Console de code
Houston... ?
Il semblerait que votre ordinateur ne soit pas connecté à Internet.
Vous n'êtes pas connecté

Connectez-vous pour accéder aux exercices de codes et testez vos nouvelles compétences.

Pensez à vous entraîner avant de terminer ce chapitre.

 

En résumé

Dans ce chapitre, vous avez vu que :

  • les programmes Java sont structurés en packages et en classes ;

  • aucun code n'est écrit en dehors d'une classe, ce qui signifie que toutes les fonctions sont des méthodes en Java ;

  • les packages sont mappés dans des dossiers et les classes dans des fichiers ;

  • la commande javac convertit le code Java en Bytecode ;

  • la commande java exécute le programme actuel en exécutant la fonction  main  dans la classe fournie ;

  • Il existe deux types de classes :

    1. les classes modèles qui sont utilisées comme modèles pour l'instanciation des objets,

    2. les classes utilitaires qui contiennent des méthodes statiques qui peuvent être appelées directement sur la classe ;

  • vous pouvez accompagner vos classes et méthodes avec des commentaires de documentation, écrits entre /**  et  */, pour générer une page HTML avec toute la documentation de la classe, appelée un Javadoc. La méthode  main  peut vous être masquée si vous utilisez un framework ;

  • les principes du code propre exigent qu'aucune logique ne soit écrite à l'intérieur de la méthode  main. Tout le travail devrait être délégué à des fonctions bien nommées.

Dans le prochain chapitre, nous aborderons la portée des variables en Java. Certaines peuvent être localisées dans une méthode ou une section de code, alors que d'autres ont une portée plus globale.

Que pensez-vous de ce cours ? Donnez-nous votre avis ici

Exemple de certificat de réussite
Exemple de certificat de réussite