Java en dix minutes.  
(21-04-1998)
 


 
JAVA est interprété
Un programme source JAVA est d'abord compilé en pseudo-code. Sur le plan de la structure, ce dernier se rapproche du langage machine ce qui lui donne une certaine rapidité. Une fois compilé, le programme en pseudo-code est exécuté par un interpréteur JAVA. Ce dernier fait généralement partie d'un programme de navigation (par exemple Netscape Navigator à partir de la version 2.0).
JAVA est indépendant de toute plate-ferme
Le code source JAVA est optimisé pour être neutre du point de vue de la plate-forme utilisée. Ceci veut dire qu'une applet (petite application Internet) programmée en JAVA fonctionnera sur la quasi-totalité des systèmes 32 bits usuels Il n'est plus nécessaire de procéder à une compilation spécifique à la plate-forme comme c'était le cas avec C++. La définition des variables est révélatrice à cet égard. Les variables entières de base (type int) occupent systématiquement 32 bits et les variables entières longues 64 bits.
JAVA fonctionne comme un système d'exploitation virtuel
Pour rester indépendantes du système d'exploitation, les applets JAVA utilisent une astuce. Elles ne sont exécutées que dans le cadre d'un programme de navigation compatible. Le programme de navigation prend en charge les fonctions d'un débogueur et fonctionne comme un système d'exploitation virtuel. Il établit le contact avec le système d'exploitation.
  
JAVA est orienté objet
Du point de vue de sa conception, JAVA se rapproche de différent langages évolués tels Eiftel, C+ +, Pascal et Modula 3. Mais contrairement au langage Basic, JAVA ne fonctionne pas de manière procédurale. Comme C++ JAVA organise un programme en unités logiques constituées de donnée (variables et constantes) et de méthodes (fonctions). Ces unités sont décrites sous forme de classes. Une classe est en quelque sorte un modèle d'algorithme. Un modèle de ce genre permet au programmeur de créer des objets. Les objets disposent des variables et constantes de leur classe et peuvent être remplis avec des données qui leur sont propres. Les méthodes de la classe décrivent ce qui peut arriver aux données et régissent la communication avec les autres objets.
JAVA est simple
Les inventeurs du langage ont voulu supprimer tout ce qui s'avérerai inutile. Les expériences tirées d'autres langages, notamment de C++, on montré la voie à suivre. C'est ainsi qu'ont été abandonnés les pointeurs (impossible de provoquer un incident en manipulant directement la mé moire), et la notion de polymorphisme (héritage multiple). Le polymorphisme permet à une classe d'hériter de plusieurs autres en même temps. Cette technique connue de C++ ouvre au programmeur des perspectives étourdissantes lorsqu'il construit des classes par modules. Mais, dans la pratique, il s'est avéré que la manipulation de telles hiérarchies de classes était dangereuse en raison de son manque de visibilité et qu'elle conduisait facilement à des programmes défectueux. L'adressage mémoire direct des données, tel qu'il est souvent pratiqué dans Cet C++, n'est pas non plus possible en JAVA. L'arithmétique des pointeurs ne fait pas partie de la syntaxe du langage. JAVA emploie différents mécanismes de sécurité pour interdire les accès mémoire abusifs et éviter ainsi le plantage des applications ou du système d'exploitation. Ce point sera approfondi ultérieurement. En plus des points cités, JAVA renonce aux fonctions d'un préprocesseur, aux structures (struct) et aux unions (union). La surcharge des opérateurs est également interdite.
Tout ceci peut laisser penser que la puissance de JAVA est relativement limitée par rapport à des langages comme C++ et Pascal. Mais tel n'est pas le cas. L'équipe de développement de Sun a simplement voulu supprimer les éléments mal compris ou mal exploités des autres langages. Vous allez vous rendre compte très vite que JAVA ne mettra pas votre imagination à l'étroit.
 
JAVA est orienté objet
Du point de vue de sa conception, JAVA se rapproche de différent langages évolués tels Eiftel, C+ +, Pascal et Modula 3. Mais contrairemer à Basic, JAVA ne fonctionne pas de manière procédurale. Comme C+ + JAVA organise un programme en unités logiques constituées de donnée (variables et constantes) et de méthodes (fonctions). Ces unités sor décrites sous forme de classes. Une classe est en quelque sorte un modèl d'algorithme. Un modèle de ce genre permet au programmeur de crée des objets. Les objets disposent des variables et constantes de leur classE et peuvent être remplis avec des données qui leur sont propres. Le.' méthodes de la classe décrivent ce qui peut arriver aux données e régissent la communication avec les autres objets.
JAVA est simple
Les inventeurs du langage ont voulu supprimer tout ce qui s'avérerai inutile. Les expériences tirées d'autres langages, notamment de C+ +, on montré la voie à suivre. C'est ainsi qu'ont été abandonnés les pointeur~ (impossible de provoquer un incident en manipulant directement la mé moire), et la notion de polymorphisme (héritage multiple). 

Le polymorphisme permet à une classe d'hériter de plusieurs autres er même temps. Cette technique connue de C++ ouvre au programmeui des perspectives étourdissantes lorsqu'il construit des classes par modules. Mais, dans la pratique, il s'est avéré que la manipulation de telles hiérarchies de classes était dangereuse en raison de son manque de visibilité et qu'elle conduisait facilement à des programmes défectueux. L'adressage mémoire direct des données, tel qu'il est souvent pratiqué dans Cet C++, n'est pas non plus possible en JAVA. L'arithmétique des pointeurs ne fait pas partie de la syntaxe du langage. JAVA emploie différents mécanismes de sécurité pour interdire les accès mémoire abusifs et évtter ainsi le plantage des applications ou du système d'exploitation. Ce point sera approfondi ultérieurement. 

En plus des points cités, JAVA renonce aux fonctions d'un préprocesseur, aux structures (struct) et aux unions (union). La surcharge des opérateurs est également interdite. 

Tout ceci peut laisser penser que la puissance de JAVA est relativement limitée par rapport à des langages comme C++ et Pascal. Mais tel n'est pas le cas. L'équipe de développement de Sun a simplement voulu supprimer les éléments mal compris ou mal exploités des autres langages. Vous allez vous rendre compte très vite que JAVA ne mettra pas votre imagination à l'étroit.

JJAVA est rigoureusement typé
JAVA traite les variables avec une grande sévérité et fait partie des langages rigoureusement typés. La conversion automatique de type n'est pas implémentée. 

Si le code source présente une initialisation ou une affectation erronées, la compilation détecte l'erreur, évitant ainsi la construction de programmes défectueux à un stade précoce du développement. 
 

  
JAVA organise la mémoire
Si vous avez quelque expérience dans la programmation en C ou C+t, vous connaissez bien ce problème. Au moment de leur création, les nouveaux objets demandent qu'on leur réserve de la mémoire. Jusqu'ici JAVA fonctionne de la même façon. Mais lorsque l'objet ainsi créé ne sert plus, les difficultés commencent. La libération de la mémoire accaparée est souvent délicate à gérer, et de ce fait, elle n'est pas toujours effectuée. 

Dans le cadre d'un projet complexe, beaucoup de programmeurs son dépassés par le problème. Il se produit ainsi une fuite de ressourcec jusqu'à ce que le système d'exploitation soit réinitialisé. 

Pour remédier à ce problème, JAVA dispose d'un excellent mécanisme La récupération automatique de mémoire (garbage collector), qui consti tue une fonction du système d'exécution du langage, restitue spontané. ment les zones de mémoire qui ne sont plus utilisées. La mémoire se trouvE ainsi constamment gérée de façon optimale, et l'exploitation des ressour ces ne bute plus sur leur limite. Les amateurs de C peuvent ainsi remisei aux oubliettes l'instruction delefe.

JAVA est sûr
Au cours du développement de JAVA, SUN a accordé une importancE particulière à la sécurité. Contrairement à beaucoup d'autres langagec évolués, les structures de sécurité font partie intégrante du systèmE d'exécution et du compilateur. 

Depuis Basic, la manière la plus répandue d'intercepter et de traiter dec erreurs est de prévoir des routines se situant à un niveau spécial. Dans CE cadre, on peut lire le code de l'erreur apparue et déclencher le traitemen qui s'impose. Mais souvent les erreurs sont Si graves qu'elles peuven conduire au plantage de l'ensemble du système d'exploitation. 

JAVA emprunte une autre voie dans ce domaine. Le programmeur écri une série de routines de traitement d'erreurs. Lorsqu'un événement impré. vu conduit à un dysfonctionnement du programme, JAVA détermine auto matiquement la routine la plus appropriée pour traiter l'erreur. Le~ différentes routines sont disposées dans un ordre séquentiel, la liste ains établie étant parcourue de bas en haut en cas de besoin. Lorsque lE programme a découvert une méthode qui convient, il l'exécute et essaiE ensuite de poursuivre. 

Mais il est clair que, même en JAVA, il peut se produire des erreun empêchant toute continuation du programme. L'incident le plus grav~ susceptible de se produire à cette occasion est une interruption prématurée du programme JAVA. A aucun moment le système d'exploitation n'est menacé. 

La sécurité passe aussi par la réglementation de l'accès à la mémoire disponible. Contrairement aux programmes C+ +,les programmes JAVA ne peuvent pas accéder à n'importe quelle zone de la mémoire. D'abord, un accès direct est par nature impossible et par ailleurs JAVA ne fait appel qu'à des blocs de mémoire non utilisés par le système d'exploitation ni par d'autres ressources importantes. 

Un autre facteur de sécurité primordial est la définition des droits d'accès au disque dur. Les programmes JAVA ne peuvent pas accéder sans précaution à un disque dur. Ce point est particulièrement important lorsqu'on programme des applets pour Internet. La première version bêta du k~t de développement JAVA posait quelques problèmes sur ce plan mais ils sont maintenant largement résolus. 
 

JAVA est rapide
Une applet développée en JAVA réunit deux technologies jusque là séparées. Comme nous l'avons mentionné, le code source d'un programme est d'abord compilé en pseudo-code JAVA. Puis l'applet ainsi créée est exécutée par un interpréteur intégré dans le programme de navigation. Les bibliothèques de classes requises par le projet ne sont liées qu'à l'exécution. L'avantage est de maintenir les applets à une taille relativement réduite. Cet aspect des choses ainsi qu'un pseudo-code proche du langage machine assurent aux applets JAVA une vitesse d'exécution élevée. Il est vrai que comparées aux programmes C+ +, les applets sont environ vingt fois plus lentes. Différentes sociétés, parmi lesquelles Microsoft et Borland, travaillent àla mise au point d'accélérateurs de code pour JAVA. Ils pourraient bientôt permettre à JAVA d'atteindre la vitesse d'exécution du C.
 
JAVA est économe
A l'origine JAVA n'était pas conçu pour les ordinateurs personnels. Le système d'exécution, I 'interpréteur indispensable au fonctionnement d'un programme, se montre de ce fait très économe des ressources disponibles. Seuls quelques centaines de kilo-octets sont mis à contribution. En théorie, JAVA peut fonctionner sur une plate-forme disposant de 4 Mo de mémoire de travail. Mais cette affirmation est naturellement à relativiser face aux exigences du système d'exécution mis en oeuvre. 

Si on les compare à des programmes écrits en C, les applets sont relativement petites. Cette taille réduite est essentiellement due à l'absence des bibliothèques de classes liées temporairement qu'en cours d'exécution. Les classes de base, comparables à la classe iostream mise en service par C, font partie du logiciel de navigation. Ainsi, les composants essentiels d'une applet JAVA n'ont pas besoin d'être chargées depuis le réseau à chaque appel.

JAVA autorise le multitîche
Le multitâche est une notion à la mode. Plus aucun système d'exploitation pour ordinateur personnel n'oserait faire sa publicité sans mentionner ses performances en la matière. Mais seuls de rares systèmes sont en mesure de pratiquer le véritable multitâche. On appelle ainsi l'exécution simultanée de plusieurs processus parallèles. En réalité, compte tenu de l'architecture des processeurs couramment utilisés, chaque opération nécessiterait en fait une CPU indépendante. Si les machines multiprocesseurs font déjà partie de la technologie existante, les systèmes d'exploitation et logiciels prévus pour ces plates-formes sont encore très rares : Windows NT de Microsoif supporte les systèmes multiprocesseurs, le multitâche authentique est donc possible, par contre, Windows 95 ne fonctionne qu'avec un seul processeur. 

Pour dissimuler cette faiblesse, l'industrie informatique a introduit le concept de multitâche préemptif. Dans ce cas, les opérations ne sont pas effectuées en parallèle mais le temps de travail du processeur est découpé en intervalles. Plusieurs opérations peuvent alors se partager les ressources de calcul d'un processeur unique. 

Pour permettre la description des algorithmes appropriés, JAVA met à la disposition du programmeur la syntaxe des threads. Un thread est une unité d'exécution isolée. Il est possible en théorie de définir un nombre illimité de threads. Pendant l'exécution du programme, les threads accèdent au processeur par un mécanisme d'interruption. A condition de disposer d'un processeur puissant, on peut ainsi simuler le multitâche jusqu'à un certain degré. 

L'implémentation des threads se révèle difficile dès que le programme comporte un branchement vers une séquence interactive. Les routines de traitement doivent alors harmoniser la communication et le comportement des threads. Pour résoudre ces problèmes, JAVÂ fournit au programmeur toute une série d'aides syntaxiques.

JAVA est dynamique
En développant Java, Sun a surtout mis l'accent sur la neutralité des programmes vis-à-vis des plates-formes matérielles. Les progrès dans le domaine électronique sont Si rapides que la compilation d'un code source perd tout intérêt Si elle est liée à un système particulier. L'équipe de développement de JAVA a donc décidé de ne lier les classes de base d'une manière dynamique, au moment de l'exécution du programme. Les modifications à apporter aux bibliothèques de classe pour assurer la compatibilité système peuvent donc être effectuées tardivement à n'importe quel moment. En tant que langage orienté objet, JAVA n'accède aux fonctions et paramètres de ces classes que par l'intermédiaire d'objets. Pour peu que l'identification des méthodes et des classes soit conservée, un code source écrit en JAVA peut être réutilisé à tout moment sans nouvelle compilation.
  
JAVA est un langage de programmation ouvert
La technologie des langages mélangés (mixed Ian gua ges) a connu une certaine faveur ces dernières années. La pratique consiste à écrire les modules d'un même programme en différents langages. On peut ainsi tirer profit des avantages de chacun d'eux; car chaque langage a ses points forts et ses points faibles. Pour desserrer les contraintes imposées par un langage, le programmeur recoure ainsi à un autre. Dans ce cadre, JAVA permet d'intégrer des modules étrangers. Pour ce qui est de la neutralité de la plate-forme et des considérations de sécurité, la technique pose cependant quelques problèmes.