Participer au site avec un Tip
Rechercher
 

Améliorations / Corrections

Vous avez des améliorations (ou des corrections) à proposer pour ce document : je vous remerçie par avance de m'en faire part, cela m'aide à améliorer le site.

Emplacement :

Description des améliorations :

Le tutoriel/cours sur le langage de programmation Java
Introduction et historique

Installation de Java



Accès rapide :
Prologue
Comment en est-on arrivé à Java ?
Principales caractéristiques du langage Java
Mode de distribution du langage Java
Les différentes versions du Java SE
Autre solution équivalente du marché

Prologue

Bienvenue dans mon cours/tutoriel sur le langage de programmation Java. Comme vous allez vite vous en rendre compte, celui-ci commence à être assez complet. Pour en arriver à ce résultat, il m'a fallu de nombreux mois de travail, mais j'ai aussi essayé de tenir compte de tous vos avis, remarques et corrections. Afin de continuer à faire progresser ce cours, je vous encourage à me communiquer toute information utile à son amélioration : vous trouverez mon adresse e-mail en bas de chaque page du site.

Je vous souhaite un très bon apprentissage de Java et merci de votre fidélité.

Dominique

Comment en est-on arrivé à Java ?

L'histoire du langage de programmation Java commence en 1991. A cette époque, la société Sun Microsystems cherchait à proposer un nouveau langage de programmation (bien que fortement inspiré de langages existants, et notamment C++) permettant le développement d'applications portables pour des systèmes embarqués (et plus précisément des appareils électroménagers) ainsi qu'un environnement d'exécution permettant l'exécution des programmes produits à partir de leur nouveau langage. La motivation de ce nouveau projet (Green Project) étant de pouvoir rendre les appareils électroménagers mieux contrôlables, plus interactifs mais aussi de permettre une communication entre ces appareils. Tous ces appareils devant être contrôlés par l'intermédiaire d'une télécommande universelle appelée *7 (prononcez Star 7). Cette télécommande reposait sur l'environnement d'exécution (un mini système d'exploitation) permettant l'exécution des programmes et la communication avec l'ensemble des appareils.

Comme nous venons de le dire, ce nouveau langage, initialement baptisé Oak (Oak signifiant chêne), s'inspirait notamment de C++. Néanmoins, celui-ci est relativement complexe et surtout peu portable (notamment à cause de la taille, non imposée, des types de données du langage). James Gosling, un des acteurs du projet (considéré désormais comme le père de Java) décida donc de créer un langage orienté objet reprenant les principales caractéristiques du langage C++, tout en modernisant son utilisation (suppression du pré-processeur, renforcement du contrôle de typage, ...). Un des points les plus importants réside dans le fait que la taille des types de données est maintenant imposée : ce point permettant de rendre les programmes plus portables afin de simplifier leur intégration dans n'importe quel type de matériel (processeurs 16 bits, 32 bits, ...). Une autre caractéristique de ce langage, et ce dès sa création, était qu'il permettait la génération d'un code machine pouvant être exécuté sur n'importe quel type de plates-formes : ce tour de force était possible grâce à l'incorporation d'un émulateur dans l'environnement d'exécution.

Malheureusement l'équipe de Sun Microsystems dû se résoudre à changer le nom de leur langage, le nom Oak étant déjà utilisé : le nouveau nom retenu sera ... Java, bien entendu. La "légende" Java veut que ce nom ait été choisi en l'honneur de la boisson préférée des programmeurs de l'équipe : à savoir un arabica de café en provenance de l'île de Java. Certains d'entre vous comprendront mieux certains logos et certaines terminologies relatifs à Java. Je pense notamment à la technologie Java Beans dont les icônes les plus souvent retenues sont des graines de café (au passage le mot anglais bean signifiant graine, de café bien entendu).

Le problème, c'est que ce projet ne connu pas le succès qu'il aurait du et, d'un certain point de vue, Java aurait pu disparaître. Néanmoins, à la même époque, le Web faisait son apparition. Le web permettait à des machines connectées via le réseau Internet, d'échanger des documents hypertextes via le protocole HTTP (HyperText Transfert Protocol) et le langage HTML (HyperText Markup Language). Or ces machines étaient (et le sont toujours) basées sur du matériel hétérogène et utilisaient de multiples systèmes d'exploitation. Comment enrichir le rendu des documents Web de l'époque étant donné cette diversité de système ? Java possédait bien entendu toutes les caractéristiques faisant de lui un langage idéal pour le Web. En 1994, Sun Microsystems développe le navigateur Web HotJava. Celui-ci intègre un environnement d'exécution Java permettant d'insérer dans les pages HTML des petites applications Java : les fameuses applets Java. Netscape intégra rapidement la technologie Java à leur navigateur et dès le milieu des années 90, Java eut le formidable essor que tout le monde lui connait aujourd'hui.

En 2009, Oracle Corporation rachète Sun Microsystems et prend ainsi le contrôle des technologies de Sun et notamment de Java. James Gosling finira par quitter Oracle en 2010, mais Java continue son développement.

Principales caractéristiques du langage Java

Ce langage est un vrai langage de programmation : il intègre quasiment tout ce que l'on sait faire de mieux en matière de langage de programmation, tout en y enlevant ce qui s'est avéré être sources d'erreurs ou de difficultés pour le développeur. Une première caractéristique du langage Java est qu'il est pleinement orienté objet : la brique de base du programme est donc l'objet, instance d'une classe (on expliquera tout cela en détail dans le chapitre concerné).

Une autre des caractéristiques principales de ce langage est que le code Java sera compilé pour une machine dite virtuelle : le code machine résultant est nommé "Byte Code". Lors de l'exécution, le code machine produit sera transformé en un code machine compréhensible par le microprocesseur que vous utilisez. La raison de ce choix est que Java se veut portable : le programmeur ne souhaite plus faire des adaptations pour que son programme puisse fonctionner sur telle ou telle machine. Si ce choix a des points avantageux, sachez qu'il y en a aussi un qui l'est beaucoup moins : convertir une instruction de la JVM (Java Virtual Machine) en une instruction compréhensible par la machine où s'exécute le programme prend du temps. Pour palier à ce problème, deux solutions ont été proposées. La première, c'est d'inclure dans le compilateur la possibilité de compiler du code natif (pour une machine spécifique) : mais cette solution n'est pas supportée par les technologies SUN. La seconde est plus complexe : la JVM inclut un JIT (Just In Time compiler). Le JIT est chargé de traduire le code machine intermédiaire (pour la JVM) directement en code natif (cela peut être fait dès la première utilisation de la classe). Cette phase de traduction prend certes un peu de temps, mais une fois celle-ci effectuée, et ce jusqu'à la fin de l'exécution du programme, plus aucune traduction de code (sur la classe considérée) ne sera refaite. Cette technique améliore considérablement la rapidité d'exécution des programmes codés en Java.

Notez aussi qu'il existe des processeurs Java. Ceux-ci exécutent directement un programme Java sans nécessiter d'émulateur. Bien que cette solution puisse sembler intéressante, elle est rarement mise en oeuvre. Les quelques cas d'utilisation d'un processeur Java sont souvent liés à des systèmes embarqués. Effectivement, hormis le temps nécessaire à la transformation du code intermédiaire en code machine native (mais cela est fait une fois par classe au chargement de cette dernière) un processeur Java n'apportera (aujourd'hui) rien de plus par rapport à un émulateur équipé d'un JIT.

La librairie Java est très riche : elle est constituée de plusieurs milliers de classes, elles-mêmes souvent constituées de plusieurs dizaines de méthodes (de fonctions si vous préférez). Nous reviendrons ultérieurement sur ces points de terminologies. Pour l'heure, notez seulement que l'on peut quasiment tout faire en Java : de l'accès aux bases de données, de la manipulation de fichiers XML, du graphisme, des applications distribuées, des applications Web, ...

La gestion de la mémoire n'est enfin plus à la charge du programmeur : en effet, des techniques de désallocation automatisée de la mémoire existent depuis de nombreuses années, elles sont très efficaces et seuls quelques langages les intègrent (du moins à l'époque). Un garbage collector (un ramasse miettes) a donc été adjoint à l'environnement d'exécution. Vous allouez, au fil du programme, la mémoire dont vous avez besoin. Mais vous ne la libérez pas : il n'y a pas d'équivalent à free (langage C) ou à delete (langage C++).

Il n'y a pas, dans Java, de mécanisme de macro-génération de code, comme c'est le cas en C ou en C++, ainsi que pour d'autres langages. La syntaxe, ainsi que quelques points de sémantique, sont inspirés de C++ et par conséquent, de C. Ce dernier point est à notre sens une bonne chose : ces langages sont désormais rodés, ils ont fait leurs preuves et comptent désormais de nombreux adeptes de leurs très célèbres opérateurs (variable++; par exemple). Mais cet avis n'est pas forcément partagé quand on découvre la syntaxe pour la première fois. Java est aussi multithreads, distribué, robuste et sûr (sur ce point beaucoup de choses ont été faites), ...

Mode de distribution du langage Java

Toutes les ressources nécessaires au développement d'applications Java sont accessibles à partir du site d'Oracle : http://www.oracle.com/technetwork/java/index.html. Vous trouverez sur ce site les environnements d'exécution Java (pour les principales plates-formes connues), les documentations sur l'API Java (la librairie de classes), les tutoriaux Java (en anglais), des forums de discussion, ... Le tout est téléchargeable gratuitement.

De plus, depuis 2007, Java est passé en "Open Source" : cela signifie que le code source de l'environnement d'exécution Java est disponible sur Internet et que vous pouvez contribuer (de différentes manières) au développement futur de Java. Pour de plus amples informations sur ce point je vous renvoie, notamment, sur le site http://openjdk.java.net/.

Plusieurs plates-formes de Java sont disponibles en téléchargement. Voici quelques informations complémentaires sur ces plates-formes :

Les différentes versions du Java SE

Il faut savoir que les versions de Java sont spécifiées par le JCP (Java Community Process). Bien que sous gouvernance Oracle, le JCP regroupe des personnes de différentes sociétés. Vous pouvez consulter ce lien pour obtenir la liste des membres actuels du JCP. Ces personnes rédigent des JSR (Java Specification Request) qui spécifient les différents aspects de la technologie Java.

Pour ce qui est du Java SE, l'ensemble des spécifications (JSR) de cette plate-forme sont reprises sur cette page : Les spécifications Java SE. Je vous invite fortement, quand vous aurez terminer ce tuto sur Java, à consulter ces documents qui sont très enrichissants.

Version du Java SE Date de sortie Nom de code JSR
(Java Specification Request)
Nombre de types
(proposé par l'API standard)
JDK 1.0 23 Janvier 1996 Oak   211
JDK 1.1 19 Février 1997     477
J2SE 1.2 9 Décembre 1998 Playground   1524
J2SE 1.3 8 Mai 2000 Kestrel JSR 58 1840
J2SE 1.4 6 Février 2002 Merlin JSR 59 2723
Java SE 5.0 30 Septembre 2004 Tiger JSR 176 3270
Java SE 6.0 11 Décembre 2006 Mustang JSR 270 3777
Java SE 7.0 7 Juillet 2011 Dolphin JSR 336 8000
Java SE 8.0 (LTS) Mars 2014 Spider JSR 337
Java SE 9.0 21 Septembre 2017 JSR 379
Java SE 10 20 Mars 2018 JSR 383
Java SE 11 (LTS) 26 Septembre 2018 JSR 384
Java SE 12 19 Mars 2019 JSR 386
Java SE 13 17 Septembre 2019 JSR 388
Java SE 14 17 Mars 2020 JSR 389
Java SE 15 15 Septembre 2020 JSR 390
Java SE 16 16 Mars 2021 JSR 391
Java SE 17 (LTS) 15 Septembre 2021 JSR 392
Java SE 18 22 Mars 2022 JSR 393
depuis Java SE 8.0, le terme de LTS (Long Time Support - Support à long terme) a été introduit: Les versions 8.0, 11.0 et 17.0 sont donc ainsi qualifiées. Les versions « non LTS » ne sont donc pas recommandées en production.

Autre solution équivalente du marché

Le principal concurrent de Java n'est autre que le framework .NET de la société Microsoft. En fait les deux solutions sont extrêmement proches. Vous pourrez vous procurer le framework et trouver de nombreuses informations complémentaires à partir de l'adresse internet suivante : https://dotnet.microsoft.com/.

Installation de Java