Barry Burd

Java

Java pour les Nuls, 5e édition

Titre de l’édition originale : Beginning Programming with Java For Dummies, 5th Edition

Pour les Nuls est une marque déposée de Wiley Publishing, Inc.

For Dummies est une marque déposée de Wiley Publishing, Inc.

© Éditions First, un département d’Édi8, Paris, 2021. Publié en accord avec Wiley Publishing, Inc.

Éditions First, un département d’Édi8

92 avenue de France

75013 Paris

Tél. : 01 44 16 09 00

Fax : 01 44 16 09 01

Courriel : firstinfo@efirst.com

Site Internet : www.pourlesnuls.fr

ISBN : 9782412071090

Dépôt légal : mars 2021

Imprimé en France par Epac

Traduction de l’anglais : Olivier Engler

Mise en page : Enredos e Legendas Unip. Lda

Cette œuvre est protégée par le droit d’auteur et strictement réservée à l’usage privé du client. Toute reproduction ou diffusion au profit de tiers, à titre gratuit ou onéreux, de tout ou partie de cette oeuvre est strictement interdite et constitue une contrefaçon prévue par les articles L 335-2 et suivants du Code de la propriété intellectuelle. L’éditeur se réserve le droit de poursuivre toute atteinte à ses droits de propriété intellectuelle devant les juridictions civiles ou pénales.

Ce livre numérique a été converti initialement au format EPUB par Isako www.isako.com à partir de l'édition papier du même ouvrage.

Introduction

Quelle est votre histoire ?

• Êtes-vous un travailleur acharné, intéressé à en apprendre toujours plus sur la manière dont les ordinateurs de votre entreprise fonctionnent ?

• Êtes-vous un étudiant qui a besoin de faire d’autres lectures pour ne pas manquer son examen de fin de cycle ?

• Êtes-vous un utilisateur qui a déjà épuisé les joies du traitement de texte et qui voudrait faire quelque chose de plus intéressant avec son ordinateur ?

• Êtes-vous à la recherche d’emploi et avez-vous besoin d’améliorer votre CV en

y ajoutant une ligne « expérience de programmation en Java » ?

Bien. Si vous voulez ou devez écrire des programmes informatiques, ce livre est fait pour vous. Loin des formules prétentieuses, il vous prend tel que vous êtes et il vous suivra jusqu’où vous voudrez bien aller.

À propos de ce livre

Ce livre vous parle de Java, un langage de programmation puissant et généraliste. Mais son objet n’est pas de vous faire entrer dans les arcanes, les subtilités et autres astuces pour briller dans les soirées mondaines. Non. Ce livre s’appuie sur un processus : celui qui consiste à créer des instructions qu’un ordinateur doit exécuter. Il existe de nombreux ouvrages qui décrivent les mécanismes de ce type de processus et qui alignent règles, conventions et formalismes divers et variés. Mais ces autres livres ne sont pas écrits pour les vraies gens. Ils ne vous prennent pas là où vous êtes pour vous amener là où vous voulez aller.

Dans tout ce qui va suivre, je fais très peu de suppositions sur votre expérience dans le domaine des ordinateurs. En lisant chaque section, vous allez voir ce qui se passe dans ma tête. Vous découvrirez les problèmes et leurs solutions en même temps que moi. Je me souviens avoir affronté certains de ces problèmes lorsque je débutais. Et d’autres continuent à me travailler maintenant que je suis devenu un expert (du moins, au dire de mes étudiants qui cherchent évidemment à se faire bien voir). Je vais vous aider à comprendre, à visualiser, et à créer vos propres solutions. Et je vous raconterai même quelques histoires au passage.

Comment utiliser ce livre

J’aimerais pouvoir vous dire : « Ouvrez le livre au hasard et commencez à écrire du code Java. Contentez-vous de remplir les lignes vides et ne regardez pas en arrière. » Dans un sens, c’est vrai. Vous ne pouvez rien endommager en écrivant du code Java, et vous avez donc à chaque instant une totale liberté pour tenter vos propres expériences.

Mais je me dois d’être honnête avec vous. Si vous ne comprenez pas les idées générales, écrire un programme est difficile. Et c’est vrai pour n’importe quel langage de programmation, pas simplement Java. Si vous tapez du code sans savoir exactement ce que vous faites, et si ce code ne se comporte pas comme vous l’espériez, vous risquez fort de rester en panne sèche.

C’est pourquoi j’ai divisé dans ce livre les notions que vous devez connaître en petites parties bien plus gérables. Chacune de ces « parties » correspond (plus ou moins) à un chapitre. Vous pouvez sauter là où vous vous voulez – au Chapitre 5, au Chapitre 10 ou ailleurs. Vous pouvez même commencer par le milieu d’un chapitre. J’ai essayé de vous proposer des exemples concrets, et si possible intéressants, sans que l’un d’entre eux ne vous oblige à avaler tout ce qui le précède. Et si je me sers d’une idée importante qui a été déjà développée ailleurs, je vous en informe pour vous aider à la retrouver.

Ma philosophie est somme toute plutôt simple :

• Ne perdez pas votre temps à lire ou relire ce que vous savez déjà.

• Si vous êtes du genre curieux, n’hésitez pas à foncer vers l’avant. Vous pourrez toujours reprendre un chapitre antérieur lorsque vous en aurez besoin.

• Mais ne vous précipitez tout de même pas tout de suite sur la dernière page du livre : je n’y donne pas le nom de l’assassin. C’est à vous d’écrire le programme qui vous le révélera…

Conventions utilisées dans ce livre

Pratiquement n’importe quel ouvrage technique débute par quelques explications sur les conventions typographiques qu’il utilise. Celui-ci n’échappe donc pas à la règle, même si celle-ci est au final très simple :

• Les nouveaux termes sont mis en italique.

• Si je veux que vous tapiez quelque chose de court, ou que vous exécutiez une certaine étape, je l’indique avec des caractères gras.

• Pour bien distinguer le code Java, les noms de fichiers, les messages ou encore les adresses de pages Web, j’utilise cette police de caractères. C’est aussi le cas si je vous demande de taper quelque chose d’assez long.

• Parfois, je vous indique que vous pouvez saisir un nom à votre convenance. Dans ce cas, j’utilise une expression générique, par exemple :

class Nomquelconque

Cela signifie que vous devriez taper le mot class, puis un nom que vous choisissez comme vous l’entendez.

Ce que vous n’avez pas à lire

Prenez le premier chapitre ou la première section où vous trouverez des notions que vous ne connaissez pas encore, et commencez à lire. Bien entendu, il se peut que vous haïssiez ce genre de décision. Dans ce cas, suivez ces quelques conseils :

• Si vous savez déjà ce que veut dire écrire un programme informatique, passez la première moitié du Chapitre 1.

• Si on vous impose un environnement de développement autre qu’Eclipse, vous pouvez passer le Chapitre 2.

La plupart des exemples de ce livre réclament une version 8.0 ou ultérieure de Java. Mais la dernière version en date, la 15.0, est celle que vous devriez installer sur votre système. Si c’est déjà fait, passez au Chapitre 3.

• Si vous avez quelques notions de programmation, vous pouvez survoler les Chapitres 6 à 8. En revanche, lisez attentivement le Chapitre 9. Si vous ne vous sentez pas très à l’aise avec ce qu’il vous explique, relisez les Chapitres 6, 7 et 8.

• Si vous avez une solide expérience d’utilisation d’un langage de programmation autre que Java, il n’est pas certain que ce livre soit écrit pour vous. Conservez-le à des fins de référence, et voyez ce que les Éditions First vous proposent de plus avancé dans ce domaine.

Il y a aussi les encadrés et les notes en marge. Si vous en avez envie, lisez-les. Sinon, vous pouvez également ranger ce livre sur un rayon de votre bibliothèque sans même l’ouvrir. Après tout, c’est votre problème, non ?

Quelques suppositions stupides

Dans ce livre, il faut bien que je fasse quelques suppositions sur vous, ami lecteur. Si une ou deux d’entre elles sont fausses, ce n’est pas bien grave. Et si j’ai faux partout… Bon. Achetez quand même ce livre. Vous me ferez plaisir.

• Je suppose que vous avez accès à un ordinateur. Bonne nouvelle. Vous pouvez exécuter le code présenté dans ce livre sur pratiquement n’importe quel ordinateur. Enfin, sur une machine qui a moins de sept ou huit ans d’âge. Ou quelque chose de ce genre. Pour faire court, la dernière version de Java fonctionne sur pratiquement tous les ordinateurs sous Windows, Macintosh ou Linux.

• Je suppose que vous savez naviguer dans les menus et les boîtes de dialogue les plus courants sur votre ordinateur. Vous n’avez pas besoin d’être un super-utilisateur de Windows, Mac ou Linux. Par contre, vous devez savoir ce que veut dire exécuter un programme, placer un fichier dans un certain dossier, enfin ce genre de trucs. La plupart du temps, dans ce livre, je vous demanderai de taper quelque chose sur votre clavier, pas de pointer et de cliquer avec votre souris.

Dans de rares occasions, lorsqu’il faudra faire glisser et déposer, couper et coller, et ainsi de suite, je vous guiderai pour réaliser ces étapes. Mais il existe des milliards de manières de configurer un ordinateur, et je ne peux pas tout savoir sur tout. Si certaines étapes sont spécifiques à un ordinateur en particulier, lisez la description que je vous donne. Si cela n’est pas suffisant, consultez l’aide qui accompagne votre ordinateur ou allumez quelques rangées de bougies.

• Je suppose que vous êtes capable de raisonner logiquement. Quand on veut écrire des programmes pour ordinateur, c’est un prérequis indispensable. Si vous pouvez raisonner logiquement, vous avez gagné. Et si vous croyez que vous n’en êtes pas capable, lisez ce qui va suivre. Vous allez être agréablement surpris de vos compétences.

• Je suppose que vos connaissances sur la programmation des ordinateurs sont très limitées. Ce n’est pas un livre du genre « tout savoir pour tout le monde ». Je ne flatte pas plus le novice que je n’encense l’expert. Même si le premier (celui qui n’a jamais programmé ou qui ne s’est jamais senti particulièrement à l’aise avec un ordinateur) est le premier visé. Cher novice, bienvenue. Et les autres aussi !

• Je suppose enfin que vous avez quelques connaissances en anglais. Oui, tous les langages de programmation sont basés sur des mots anglais. Comme les noms des classes ou des variables utilisés dans ce livre. Mais je ne vous demande pas de fournir une copie de vos diplômes de troisième cycle. Votre vocabulaire de base suffira certainement, et une traduction sera fournie lorsqu’elle sera nécessaire.

Comment ce livre est organisé

Ce livre est découpé en chapitres, eux-mêmes partagés en sections, elles-mêmes découpées en sous-sections lorsque c’est nécessaire. Et mon tout est formé de cinq parties. Voyons cela de plus près.

Première partie : Vos premiers pas en Java

Les chapitres de cette partie vous préparent à votre nouvelle expérience de programmeur Java. Vous allez vous y familiariser avec les notions de programmation, et préparer votre ordinateur pour l’écriture et la vérification de vos futurs programmes.

Deuxième partie : Écrire vos propres programmes Java

Dans cette partie, vous allez découvrir les blocs de construction de vos programmes, autrement dit les éléments du langage Java, comme de tout langage comparable. Vous y apprendrez à présenter vos données, et à obtenir de nouvelles valeurs à partir de valeurs existantes. Les exemples de programmes proposés ici sont courts, mais sympathiques.

Troisième partie : Contrôler les flux

Cette partie contient quelques-uns de mes chapitres préférés. Dans ces chapitres, vous faites naviguer votre ordinateur d’une partie de votre programme vers une autre. Imaginez que votre programme est comme un grand château, avec un ordinateur qui se déplace de pièce en pièce. Il doit parfois choisir le couloir qu’il doit prendre, ou repasser dans une pièce qu’il a déjà visitée. En tant que programmeur, votre rôle consiste à planifier le trajet de l’ordinateur dans le château. Amusant, n’est-ce pas ?

Quatrième partie : Classes et objets

Vous avez certainement déjà eu à résoudre un gros problème en le décomposant en petites unités, plus faciles à gérer. C’est exactement ce que vous allez faire dans cette partie. Comme réinventer la roue n’est pas la tasse de thé des programmeurs, vous y verrez aussi comment utiliser des solutions déjà trouvées par d’autres personnes. Voilà qui pourrait ressembler à du vol, mais ce n’en est pas.

Cette partie contient également un chapitre concernant la programmation de fenêtres, de boutons et autres objets graphiques. Si votre souris se sent délaissée par les exemples de ce livre, offrez-lui le Chapitre 20.

Cinquième partie : Les Dix Commandements

C’est la cerise sur le gâteau. Vous y trouverez des ressources utiles et des informations à creuser sur l’API de Java.

Icônes utilisées dans ce livre

Si vous pouviez me voir assis devant mon ordinateur, en train d’écrire ce livre, vous seriez surpris de me voir parler autant. En fait, je me parle à moi-même en répétant chaque phrase à voix haute. Oui, je sais, c’est un peu bizarre. De temps en temps, j’ai un petit sursaut en me disant que tel ou tel point, tel ou tel sujet, mérite une mention spéciale. Je hoche la tête, et j’ajoute une icône dans la marge. Bien entendu, vous ne me voyez pas hocher la tête. C’est pourquoi je vous signale tout de suite les icônes que vous allez retrouver dans ce livre :

C’est une information supplémentaire, quelque chose d’utile que les autres livres pourraient oublier de vous dire, ou encore une astuce susceptible de vous faire gagner du temps.

De temps à autre, j’attire votre attention sur un point dont vous devez absolument vous souvenir. Rassurez-vous, il n’y en a pas tant que cela. C’est pourquoi cette icône est si importante.

Tout le monde fait des erreurs. Pour ma part, j’en ai fait des tas dans ma vie de programmeur. C’est pourquoi, quand je sais par expérience qu’une peau de banane pourrait bien se glisser sous les touches de votre clavier, je vous en préviens à l’avance avec cette icône.

Il faut bien dans un livre comme celui-ci insérer quelques explications plutôt techniques, par exemple pour vous aider à mieux comprendre ce que les types qui ont développé Java avaient dans la tête. Vous n’êtes pas forcé de lire ces notes. Mais cela pourra vous servir un jour, disons si l’envie vous prenait de lire un autre ouvrage sur Java.

(N. d. T.) Lorsque la langue française le réclame, le traducteur ajoute un commentaire approprié précédé de (N. d. T.) pour « note du traducteur ».

Au sujet de la nouvelle édition française

Le langage Java est devenu mature au cours des quelques années écoulées depuis sa version 8. Les nouveautés concernent pour l’essentiel le soubassement technique, par exemple le mécanisme de nettoyage mémoire appelé recycleur (ou ramasse-miettes, de l’anglais garbage collector).

Dans la version 15 de Java, les nouveautés qui intéressent les programmeurs qui font leurs premiers pas dans Java sont donc rares. Nous en décrivons trois :

• Les nouvelles possibilités de switch : Les blocs switch peuvent dorénavant être utilisés comme des expressions qui renvoient une valeur. En outre, les cas de switch peuvent être écrits de façon plus compacte (Chapitre 11).

• Les blocs de texte : Un bloc de texte permet de faire respecter la mise en page d’une série de lignes de texte et de laisser tels quels la plupart des caractères ayant un effet particulier dans les chaînes Java classiques. Un bloc de texte est délimité par une série de trois guillemets avant et trois après (Chapitre 18).

• Les classes de données record : Le nouveau mot-clé record permet de s’épargner plusieurs dizaines de lignes de code source pour définir une classe destinée à stocker des données (Chapitre 19).

En cas de confit de version

Si vous faites face à une erreur étrange dans vos projets Eclipse, allez d’abord vérifier ce qui est défini dans les préférences au niveau de la version de Java. Cherchez dans les préférences la catégorie Compilateur et vérifiez quelle version est déclarée. Vérifiez aussi la version de la librairie d’exécution dans les options de la boîte Ajout d’un JRE (Bibliothèques système JRE).

Et maintenant ?

Il ne vous reste plus qu’à plonger dans le grand bain. Pendant quelques centaines de pages, je vais vous servir de guide, d’hôte ou encore d’assistant, comme vous préférez. Je me suis efforcé en permanence de rendre les choses si possible intéressantes, ou du moins compréhensibles.

Bonne lecture, et surtout bonne programmation !

Au fait…

Je me suis dit que vous n’aimeriez pas du tout retaper les programmes que je vous propose dans ce livre. J’ai donc décidé de vous faciliter le travail. Vous pouvez télécharger ces programmes sur le site de l’éditeur. Le Chapitre 2 vous dit tout à ce sujet.

Le Chapitre 2 vous dit tout au sujet du téléchargement des programmes développés dans ce livre.

Si vous ne lisez pas le paragraphe précédent, vous risquez de vous en mordre les doigts !

Première partie Vos premiers pas en Java

Dans cette partie…

• Se préparer à devenir un développeur Java

• Installer le logiciel

• Exécuter quelques exemples de programmes

DANS CE CHAPITRE :

Réaliser ce qu’est la programmation sur ordinateur

•

Comprendre le logiciel qui vous permet d’écrire des programmes

•

Se préparer à utiliser un environnement de développement intégré

Chapitre 1 Pour bien débuter

Programmer sur un ordinateur ? Qu’est-ce que ça veut dire ? C’est un truc technique ? C’est dangereux ? Et pourquoi quelqu’un voudrait-il faire ce genre de chose ? Moi, vous croyez ? Est-ce que je peux apprendre à le faire ?

De quoi allons-nous parler ?

Vous avez très probablement déjà utilisé un ordinateur pour faire du traitement de texte. Par exemple pour taper une lettre, l’imprimer et l’envoyer à quelqu’un que vous aimez. Et si vous pouvez facilement accéder à un ordinateur, vous avez tout aussi probablement surfé sur le Web. Vous savez donc comment visiter une page, cliquer sur un lien pour passer à une autre page, et ainsi de suite. Facile, non ?

Mais pourquoi est-ce facile ? Parce que quelqu’un d’autre que vous a indiqué à l’ordinateur ce qu’il devait faire exactement. Si vous prenez un ordinateur tout juste sorti des chaînes de fabrication et que personne ne fournisse d’instructions à la machine, elle sera incapable de faire du traitement de texte, de surfer sur le Web, et tout le reste. Ce n’est qu’un objet inanimé dépourvu d’âme. Tout ce qu’un ordinateur est capable de faire, c’est de suivre les instructions que des types extrêmement compétents lui donnent (et je ne parle pas là de vous ni de moi).

Imaginons maintenant que vous utilisiez Microsoft Word pour écrire le prochain prix Goncourt. Vous arrivez à la fin d’une ligne (pas d’une phrase, juste d’une ligne). Vous continuez à saisir le prochain mot, et, instantanément, le curseur du traitement de texte passe automatiquement à la ligne suivante en affichant la suite de votre futur chef-d’œuvre. Que s’est-il donc passé ?

En fait, quelqu’un a écrit un programme d’ordinateur (ou un programme informatique, au choix), c’est-à-dire une série d’instructions qui explique à l’ordinateur comment il doit se comporter. Les gros programmes, on les appelle généralement des logiciels (les petits aussi, d’ailleurs). Mais il y a aussi un autre nom pour désigner un programme, ou simplement un morceau de programme : le code. Le Listing 1.1 vous montre à quoi peut ressembler un morceau du code qui permet à Microsoft Word de vous accompagner dans la rédaction de votre prochain roman.

Listing 1.1 Quelques lignes de code dans un programme.

if (numColonne > 60) {
  wrapToNextLine();
} else {
  continueSameLine();
}

En programmation, la langue de base, c’est l’anglais. Impossible d’y échapper. Mais rassurez-vous : même si vous n’êtes pas capable de lire Shakespeare dans le texte, connaître un peu de vocabulaire anglo-saxon devrait suffire pour vous y retrouver. Essayons de traduire ces quelques lignes de code dans un français plus à notre portée :

Si le numéro de la colonne est plus grand que 60,
alors passer à la ligne suivante.
Sinon (donc le numéro de la colonne est 60 ou moins),
alors continuer sur la même ligne.

Eh oui, pour que votre texte se poursuive gentiment sur la ligne suivante, quelqu’un a écrit un code du même genre que celui montré sur le Listing 1.1. Et ce code, parmi des millions d’autres lignes de code, donne un programme, un logiciel, appelé Microsoft Word. Incroyable, n’est-ce pas ?

Et pour surfer sur le Web ? Vous cliquez par exemple sur un lien qui est censé vous amener directement sur le site de Microsoft. Derrière la scène, quelqu’un a écrit du code qui pourrait ressembler à cela :

Visitez le site de <a href="http://www.microsoft.com">Microsoft</a>

En réalité, les types de chez Microsoft ont fait en sorte que cette ligne se traduise plutôt par ceci ;

https://www.microsoft.com/fr-fr/

Pourquoi ? Tout simplement parce qu’ils sont tellement intelligents qu’ils savent que vous parlez français (d’où le /fr-fr/), et que, en plus, ils ont compris que vous vouliez naviguer d’une manière sécurisée (d’où également le s dans https).

En résumé, d’une manière ou d’une autre, un ordinateur ne sert à quelque chose que si quelqu’un a écrit un programme. Et ce quelqu’un est appelé un programmeur, un développeur ou un codeur.

Expliquer à un ordinateur ce qu’il doit faire

Tout ce que vous faites avec un ordinateur est basé sur de gigantesques quantités de code. Par exemple, un jeu n’est rien d’autre qu’un gros (en fait, très gros) tas de code. Quelque part dans ce code, il y a par exemple les lignes (ou instructions) suivantes :

if (person.touches(goldenRing)) {
  person.getPoints(10);
}

Essayons de réviser nos souvenirs d’anglais pour mieux comprendre ce qui se passe :

Si le joueur (appelé person) touche l’anneau en or,
alors il obtient 10 points.

Sans aucun doute, une personne qui écrit des programmes a des compétences remarquables. En fait, les programmeurs doivent posséder deux qualités importantes :

• Ils savent comment décomposer de grands problèmes en plus petites procédures fonctionnant étape par étape.

• Ils peuvent transcrire ces étapes dans un langage spécial.

Ce genre de langage est appelé un langage de programmation (ou infolangage). Java fait justement partie de cette grande famille des langages. Ainsi, l’exemple du Listing 1.1 est écrit dans le langage de programmation Java (pour faire plus simple, nous dirons qu’il est écrit en Java).

Choisir votre poison

Ce livre ne traite pas des différences entre les langages de programmation, mais vous devriez tout de même vous faire une petite idée de la manière dont se présente un code dans divers langages de manière à vous familiariser avec ce monde. Prenons comme exemple Visual Basic. Dans cet autre langage de programmation classique, notre Listing 1.1 pourrait s’y écrire ainsi :

If numColonne > 60 Then
    Call wrapToNextLine
Else
    Call continueSameLine
End If

Désolé, c’est tout aussi anglo-saxon que Java. Mais, encore une fois, vous n’y échapperez pas. Et que penser du même code, mais écrit cette fois dans le langage COBOL :

IF NUMCOLONNE IS GREATER THAN 60 THEN
    PERFORM WRAP-TO-NEXT-LINE
ELSE
    PERFORM CONTINUE-SAME-LINE
END-IF.

À l’autre bout du spectre, vous trouvez des langages comme le moins connu Haskell. En voici une bribe :

median aList =
    [ x | x <- aList,
     length([y | y <- aList, y < x]) ==
     length([y | y <- aList, y > x])]
*Main> median [4,7,2,1,0,9,6]

Vous n’auriez sans doute pas deviné que ce code Haskell calcule la moyenne entière des sept chiffres de la liste qui figure sur la dernière ligne, ce qui donne comme résultat 4.

Les langages de programmation peuvent paraître très différents les uns des autres, mais, sur certains aspects, ce sont tous les mêmes. Si vous savez par exemple écrire IF NUMCOLONNE IS GREATER THAN 60 (si le numéro de la colonne courante est supérieur à 60, si vous préférez), vous ne devriez avoir aucun problème à employer cette autre forme : if (numColonne > 60). Il suffit juste d’effectuer une substitution mentale pour passer d’un jeu de symboles à un autre. Et, au fil du temps, écrire quelque chose comme if (numColonne > 60) devient comme une seconde nature.

Le grand voyage de l’esprit

Ce grand voyage, c’est celui qui conduit de votre cerveau au processeur de l’ordinateur. Toute création de programme part d’une pensée qui va se traduire au final par un code exécutable par un ordinateur. Cette démarche est un processus plus ou moins complexe, et qui comporte un nombre plus ou moins grand d’étapes. Au cours de ce processus, trois outils sont indispensables :

• Compilateur : Son rôle est de traduire votre code, écrit dans un langage plus ou moins humain, en instructions compréhensibles par l’ordinateur (mais pas par vous ou moi).

• Machine virtuelle : Elle sert à exécuter les instructions produites par le compilateur.

(N. d. T.) Seuls certains langages, dont Java, utilisent une machine virtuelle d’exécution.

• API : Cet acronyme signifie Application Programming Interface (interface de programmation d’application). Disons qu’il s’agit d’un réservoir de code déjà écrit très utile pour vous éviter une masse de travail.

Ces trois outils sont décrits plus en détail dans les sections qui suivent.

Traduire votre code

Vous avez sans doute déjà entendu dire que les ordinateurs ne savent que combiner des zéros et des un. C’est vrai, mais qu’est-ce que cela signifie ? Disons que les circuits électroniques qui peuplent les ordinateurs ne connaissent rien aux lettres de l’alphabet. Si vous voyez par exemple le mot Start écrit sur l’écran de votre ordinateur, il est en fait enregistré dans un recoin quelconque de sa mémoire sous la forme 01010011 01110100 01100001 01110010 01110100. Le fait que vous arriviez à lire un mot n’est rien d’autre que l’interprétation que vous faites des pixels qui sont affichés sur l’écran, et c’est tout. Les ordinateurs décomposent absolument tout en séquences de zéros et de un, puis ils remettent tout cela dans le bon ordre de manière à ce que les êtres humains que nous sommes puissent en tirer quelque chose.

Lorsque vous écrivez un programme d’ordinateur, ce programme doit donc à un moment ou à un autre être transcrit sous la forme de zéros et de un. Le nom officiel de cette traduction est compilation. Sans cette compilation, aucun ordinateur au monde ne pourrait exécuter votre programme.

La bouillie compilée qu’illustre la Figure 1.1 peut prendre différents noms :

• La plupart des programmeurs Java l’appellent bytecode.

(N. d. T.) En français, on remplace progressivement bytecode par octocode.

• Je l’appelle souvent un fichier .class. En effet, en Java, l’octocode est enregistré dans des fichiers d’extension .class (comme dans UneCertaineChose.class).

• Pour mettre en évidence la différence, les programmes Java appellent ce que montre le Listing 1.1 du code source, et la suite de zéros et de un illustrée sur la Figure 1.1 du code binaire.

(N. d. T.) Le code binaire est encore parfois désigné en tant que code objet, mais l’apparition de la programmation orientée objet crée une confusion désagréable. Nous parlerons donc de code binaire pour ce qui est exploitable par un microprocesseur.

Figure 1.1 Mon ordinateur comprend ces zéros et ces un, pas moi.

Pour visualiser les relations entre le code source et le code binaire, regardez la Figure 1.2. Vous écrivez le code source, et vous demandez ensuite à ce qu’il soit converti en code binaire. Pour y arriver, l’ordinateur se sert d’un logiciel spécial appelé un compilateur.

Figure 1.2 L’ordinateur compile le code source pour créer le code binaire.

Le disque dur de votre ordinateur peut contenir un fichier appelé javac ou encore javac.exe. Ce fichier, c’est justement ce logiciel spécial, le compilateur (d’où le c à la fin du nom). En tant que programmeur Java, vous allez souvent demander à votre ordinateur de fabriquer du nouveau code objet. L’ordinateur répond à votre souhait en toute discrétion (c’est-à-dire en travaillant en arrière-plan), et il exécute pour cela les instructions du fichier javac.

Exécuter du code

Il y a plusieurs années de cela, j’ai passé une semaine à Copenhague. J’étais avec un ami qui parlait couramment l’anglais et le danois. Pendant que nous bavardions dans un parc, j’avais vaguement remarqué que des gamins tournaient autour de nous. Comme je ne parle pas un mot de danois, je supposais qu’ils discutaient de choses de leur âge.

Puis mon ami me dit que ces jeunes ne parlaient pas danois. En fait, ils prononçaient des syllabes sans aucun sens, mais ils s’efforçaient de répéter phonétiquement mes propres paroles.

Revenons au temps présent. Si je regarde à nouveau la Figure 1.1, je me rappelle ces enfants de Copenhague. Tous ces zéros et ces un ne veulent rien dire pour moi. Par contre, ils ont un sens précis pour mon ordinateur. Lorsque ces chiffres traversent les circuits électroniques de l’ordinateur, celui-ci « pense » comme sur l’illustration de la Figure 1.3 (enfin, c’est ce que je crois).

Figure 1.3 Ce que l’ordinateur glane à partir d’un fichier d’octocode.

Tout le monde sait bien qu’un ordinateur ne pense pas… En revanche, il est capable de déchiffrer les instructions de la Figure 1.3. Avec la plupart des langages de programmation (comme le C++ ou le COBOL, par exemple), les choses se passent exactement comme je les décris ici. Un ordinateur engloutit un grand plat de code objet, et il exécute ce que ce code objet lui dit de faire.

Par contre, en Java, la démarche se présente différemment (même si le résultat est identique). Elle est illustrée sur la Figure 1.4.

Les instructions de la Figure 1.4 indiquent à l’ordinateur comment il doit suivre les autres instructions. Au lieu de commencer par quelque chose comme Lire numColonne en mémoire, la première instruction donnée à l’ordinateur est « Fais ce qui est spécifié dans le fichier d’octocode » (bien entendu, dans le fichier d’octocode, la première instruction est justement Lire numColonne en mémoire).

Là encore, c’est un logiciel spécial qui se charge d’exécuter les instructions de la Figure 1.4. Ce logiciel spécial est appelé JVM (pour Java Virtual Machine, ou Machine Virtuelle Java). Lorsque vous exécutez un programme Java, votre ordinateur lance en fait ce JVM. C’est lui qui examine votre octocode, zéro après zéro, un après un, et exécute les instructions qu’il y trouve.

Figure 1.4 Comment un ordinateur exécute un programme Java.

La machine virtuelle Java est une sorte d’interpréteur de code machine. Dans tous les cas, vous vous trouvez dans la situation illustrée sur la Figure 1.5. Le côté (a) représente ce qui se passe avec la plupart des langages de programmation : l’ordinateur exécute un certain code objet, pardon binaire. Le côté (b) illustre l’approche Java : l’ordinateur lance la JVM, et c’est elle qui exécute les instructions trouvées dans l’octocode pour générer le code binaire.

Figure 1.5 Deux manières d’exécuter un programme informatique.

Sur votre ordinateur, vous devriez trouver deux fichiers, l’un appelé javac et l’autre java (ou encore javac.exe et java.exe). Le second contient les instructions illustrées plus haut sur la Figure 1.4, autrement dit c’est la machine virtuelle Java. En tant que programmeur Java, vous allez souvent demander à votre ordinateur d’exécuter un programme Java. L’ordinateur exauce votre souhait en lançant les instructions contenues dans le fichier java.

C’est quoi finalement, l’octocode (bytecode) ?

Regardez le Listing 1.1, et sa traduction en octocode illustrée sur la Figure 1.1. Vous pourriez être tenté de penser qu’un fichier d’octocode est juste un cryptogramme dans lequel les lettres, les mots et les chiffres du listing sont remplacés par des zéros et des un. Mais c’est totalement faux. La partie la plus importante de l’octocode est l’encodage de la logique du programme.

Tous ces zéros et ces un décrivent le flux des données entre deux parties de votre ordinateur. La figure qui suit illustre ce flux. Mais ce n’est évidemment qu’une image à l’usage des humains. Votre ordinateur ne se sert pas de cette image pour faire son travail, ni même d’ailleurs de rien de semblable. Il lit de longues séries de zéros et de un pour décider ce qui va se passer ensuite. Point.

N’essayez pas d’absorber les détails de ce que j’ai tenté de représenter sur la figure. Cela n’en vaudrait pas le temps que vous y passeriez. Tout ce que vous devez retenir, c’est que l’octocode (le contenu du fichier .class) contient une description complète des opérations que l’ordinateur doit effectuer. Lorsque vous écrivez un programme informatique, votre code source décrit une stratégie d’action. Et l’octocode compilé transforme cette stratégie globale en des centaines et des centaines de petits détails (des instructions) qui permettent de l’exécuter pas à pas. Lorsque la machine virtuelle Java « exécute votre programme », elle examine en réalité cet octocode et alimente le processeur de votre ordinateur avec des instructions qui correspondent à chacun de ces petits ordres successifs.

Écrire une fois, exécuter partout

Lorsque Java est apparu sur la scène techno (je parle de technologie, pas de musique, bien sûr), en 1995, ce langage est devenu presque immédiatement populaire. Ce succès était en partie dû à la présence de la machine virtuelle Java, la fameuse JVM. La JVM, c’est un peu comme un interprète (là encore, je ne parle pas de musique, mais de la personne qui vous aide à vous faire comprendre dans un pays étranger). Elle transforme l’octocode Java dans la langue native d’un processeur (par exemple, Intel, AMD ou ARM). Si, par exemple, je lance sur mon ordinateur sous Windows un fichier d’octocode Java, la JVM interprète son contenu en fonction de cet environnement. Et si je donne ce même fichier d’octocode Java à un collègue qui travaille sur Mac, sa propre JVM interprétera ce code pour cet autre environnement.

Regardez à nouveau la Figure 1.5. Sans machine virtuelle, il faudrait produire et installer un code binaire différent pour chaque système d’exploitation. Avec la JVM, le même octocode Java fonctionne aussi bien sous Windows ou sous Unix que sur Mac, etc. Cela s’appelle de la portabilité, chose extrêmement précieuse dans le monde de la programmation. Songez à tous les gens qui se servent d’un ordinateur pour naviguer sur Internet. Ils n’utilisent pas tous Microsoft Windows, mais tous ont sans le savoir un interpréteur d’octocode Java approprié à leur machine, et donc leur propre JVM.

Les types du marketing chez Oracle emploient la formule « Écrire une fois, exécuter partout » ou Write once, run anywhere (WORA). Pour moi, c’est d’abord une excellente manière de créer des programmes, des applications ou des logiciels.

Du code réutilisable

Autrefois, de nombreux programmeurs passaient le plus clair de leur temps à réécrire sans cesse pratiquement le même code, sans cesse, sans cesse et sans cesse. Le mari de ma cousine, Chris, travaillait dans les années 1980 pour une société qui produisait du logiciel sur mesure. Il m’a raconté des tas de fois l’histoire : « J’ai commencé par écrire un programme de recherche et de remplacement. Ensuite, j’ai écrit un correcteur orthographique. Et puis un autre programme de recherche et de remplacement. Et puis un autre correcteur orthographique. Après, j’ai développé un programme de recherche et de remplacement plus performant. Et ainsi de suite. »

Comment Chris pouvait-il continuer à s’intéresser à son travail, alors qu’il devait réinventer la roue pratiquement chaque mois ? Cette façon de faire était inefficace. Pire, terriblement ennuyeuse.

Pendant des années, les professionnels de l’informatique sont partis à la quête du Graal : une manière d’écrire du code qui serait facile à réutiliser. Ne plus écrire et réécrire des programmes de recherche et de remplacement. Juste partager le travail en tâches simples. Une tâche pour rechercher un seul caractère, une autre pour chercher des espaces, tandis qu’une troisième servirait à remplacer une lettre par une autre… Une fois toutes les pièces construites, il suffirait de les assembler pour construire le programme de recherche et de remplacement voulu. Le jour où votre traitement de texte aurait besoin d’une nouvelle fonctionnalité, il suffirait d’ajouter une pièce, puis de réassembler le tout d’une manière légèrement différente. Voilà une façon de faire plus efficace, bien moins coûteuse, et aussi bien plus amusante.

Dès la fin des années 1980 et au début des années 1990, le développement logiciel a connu des avancées sensibles, et de nombreux projets importants ont été écrits à partir de composants préfabriqués réunis dans des librairies. Java est arrivé en 1995, et il était naturel pour ses concepteurs de créer une librairie (ou bibliothèque) de code réutilisable. Cette librairie contenait environ 250 programmes, avec y compris du code pour gérer les fichiers sur disque, du code pour créer des fenêtres graphiques, ou encore pour transférer des informations sur Internet. Depuis cette époque, la librairie Java a pris de l’ampleur pour inclure de nos jours largement plus de 4 000 programmes. Cette librairie est appelée API (pour Application Programming Interface, ou interface de programmation d’application).

Chaque programme Java, même le plus petit, repose sur du code qui se trouve dans cette API. Celle-ci est à la fois utile et formidable. Elle est utile parce qu’elle vous permet de faire des tas et des tas de choses. Elle est formidable parce qu’elle est extrêmement extensible. Personne ne s’amuse à mémoriser toutes les fonctions qui sont disponibles dans l’API Java. Les programmeurs retiennent seulement ce qu’ils utilisent couramment, et ils font des recherches pour trouver des informations selon leurs besoins du moment. Ces informations sont disponibles dans une documentation en ligne appelée API spécification (mais les programmeurs préfèrent utiliser le mot Javadoc).

Cette documentation est écrite en anglais, et vous la trouvez via l’adresse Internet https://docs.oracle.com/en/java/javase/15/docs/api. Elle décrit les milliers de fonctions de l’API Java. En tant que programmeur Java, sachez que vous allez certainement la consulter chaque jour. Vous pouvez enregistrer les pages qui vous sont les plus utiles dans vos favoris.

La boîte à outils du programmeur Java

Pour écrire des programmes Java, vous avez besoin des outils décrits dans les sections qui précèdent :

• Un compilateur Java (voir la section « Traduire votre code »).

• Une machine virtuelle Java (voir la section « Exécuter du code »).

• L’API Java (voir la section « Du code réutilisable »).

• Un accès à la documentation de l’API Java (voyez également la section « Du code réutilisable »).

Il vous faut également quelques outils plus communs :

• Un éditeur pour rédiger et modifier le code source de vos programmes Java. Le Listing 1.1 montre un morceau de programme Java pour ordinateur. Pour ce qui vous concerne, un tel programme se présente finalement sous la forme d’un texte plus ou moins copieux. Pour l’écrire, vous avez besoin d’un éditeur, autrement dit d’une sorte de traitement de texte allégé.

Un éditeur, c’est un peu comme le logiciel Microsoft Word, sauf qu’un éditeur de code n’ajoute aucun formatage à votre texte : ici, pas de caractères gras, pas d’italique, pas de polices variées, et ainsi de suite. Rien de tout cela. Un programme, c’est du texte pur, des chiffres, et des caractères particuliers disponibles sur votre clavier.

(N. d. T.) De plus, les francophones doivent respecter une règle importante : pas de lettres accentuées, ni de symboles exotiques dans les noms des éléments qu’ils définissent, comme les variables et les méthodes.

Lorsque vous éditez un programme, il se peut que vous voyiez du texte en gras, du texte en italique, ou encore du texte affiché dans différentes couleurs. Mais ce n’est pas du formatage. Cela signifie simplement que votre éditeur reconnaît le langage Java et qu’il met en évidence (ou en surbrillance) les mots de ce langage. Croyez-moi, c’est une aide précieuse pour éviter ou corriger bien des erreurs de saisie. Ces enrichissements visuels ne sont pas stockés avec le code source dans le fichier qui est soumis au compilateur.

• Vous avez besoin d’une méthode pour exécuter des commandes. Il faut évidemment que vous soyez à même de dire des choses comme « compile ce programme » et « exécute le JVM ». D’accord, il est possible d’y arriver en faisant un double-clic sur une icône ou en tapant une certaine commande dans une boîte de dialogue du genre Exécuter. Mais, avec nos ordinateurs modernes, vous avez l’habitude de passer d’une fenêtre à une autre. Vous ouvrez une fenêtre pour consulter la documentation de Java, une autre pour éditer votre programme, et une troisième encore pour exécuter le compilateur Java. Ce processus peut être assez délicat.

Dans le meilleur des mondes possibles, tout cela devrait se passer au sein d’une seule et même fenêtre. Ce genre d’interface existe évidemment. On l’appelle un environnement de développement intégré (ou IDE, pour Integrated Development Environment).

Un environnement de développement intégré typique divise votre écran de travail en plusieurs portions, des panneaux. Il y en a un pour éditer les programmes, un autre pour lister les noms des programmes d’un projet, et d’autres encore pour vous aider à créer et tester vos programmes. Vous pouvez redisposer tout cela à votre guise selon vos méthodes de travail. Mieux encore, si vous changez quelque chose dans un volet, tous les autres sont automatiquement mis à jour.

Un tel environnement vous aide à passer plus facilement d’une tâche à une autre. De plus, vous n’avez pas à basculer en permanence entre édition, compilation et exécution. C’est un souci de moins. De cette manière, vous pouvez plus facilement vous concentrer sur l’essentiel, c’est-à-dire sur la logique de vos programmes (d’accord, c’est un autre genre de souci).

C’était déjà sur votre disque dur ?

Il est très possible que vous ayez déjà sur votre ordinateur certains outils utilisés pour la création de programmes Java. Mais il est aussi possible que ceux-ci soient obsolètes. La plupart des exemples de ce livre fonctionnent avec toutes les versions de Java. Mais certains réclament au moins la version 5. Et d’autres aussi ne s’exécuteront qu’en présence de Java 15.

Le mieux à faire, c’est de télécharger les outils les plus récents sur le site Web d’Oracle. Le Chapitre 2 explique tout cela en détail.

Eclipse

Les programmes de ce livre fonctionnent avec n’importe quel environnement de développement intégré compatible avec Java. Il peut par exemple s’agir de Net-Beans, IntelliJ IDEA, JDeveloper, JCreator, et ainsi de suite. Vous pouvez même exécuter ces programmes sans aucun outil IDE. Mais, pour illustrer mon propos, j’ai choisi le logiciel Eclipse, et cela pour plusieurs raisons :

• Eclipse est gratuit.

• Parmi tous les environnements de développement intégrés dédiés à Java, Eclipse est celui qui est le plus couramment utilisé par les programmeurs professionnels.

• Eclipse a de nombreuses fonctionnalités, mais vous pouvez parfaitement ignorer la plupart d’entre elles pour apprendre à composer et exécuter des séquences d’instructions simples. Lorsque vous aurez travaillé plusieurs fois avec Eclipse, votre cerveau sera capable de dérouler automatiquement ces séquences. Vous pourrez alors arrêter de paniquer devant Eclipse pour vous concentrer sur la programmation en Java.