Introduction et historique

Accès rapide :
   Comment en est on arrivé à Java ?
   Principales caractéristiques du langage Java
   Mode de distribution du langage Java
   Autre solution équivalente du marché

Comment en est on arrivé à Java ?

La fantastique histoire du langage de programmation Java commence en 1991. A cette époque, la société Sun Microsystems chercher à proposer un nouveau langage de programmation (bien que fortement inspiré de langage existant, et notamment C++) permettant le développement d'applications portable 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 en 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 point les plus important réside dans le fait que la taille les types de données est maintenant imposée : ce point permettant de rendre les programmes plus portable afin de simplifier leur intégration dans n'importe que type de matériel (processeur 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 du 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 est était 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és (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 prends ainsi le contrôle des technologies de Sun et notamment de Java. James Gosling finira par quitter Oracle en 2010, mais Java continu 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 des 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 autres 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 à 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'émulateurs. 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 était adjoint à l'environnement d'exécution. Vous allouer, 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é faite), ...

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. Vous pouvez même télécharger l'atelier de développement Java de Sun Microsystems : NetBeans.

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 sur le site http://openjdk.java.net/.

Plusieurs distributions de Java sont disponibles en téléchargement. Voici quelques informations complémentaires sur les noms de distributions les plus couramment utilisés :

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 : http://msdn.microsoft.com. Il s'agit d'un site réservé aux développeurs Microsoft. Son accès est libre et gratuit.