Sun déclare que : « Java est un langage simple, orienté objet.
Java n'est pas déroutant pour le programmeur C++,
mais en évite les écueils § . Java est robuste, sécurisé.
Il est indépendant de l'architecture, portable, il est
performant, distribué, multithread et dynamique ».
Le langage Java s'inspire de manière assez lâche du C++. En fait
le principal auteur de Java, James Gosling
reconnaît que de nombreux aspects du langage sont directement "tirés"
de versions C++ très répandues. L'une des
principales règles adoptée par les développeurs lors de la
conception de Java était de ne pas réinventer la roue
mais de reprendre les meilleurs points d'autres langages tels que C, FORTRAN,
Lisp et SmallTalk. Les
méthodologies et algorithmes utilisés dans Java sont donc déjà
d'une robustesse largement prouvée.
Java n'est pas radicalement nouveau, il s'inscrit dans la continuité et
hérite des concepts épurés de nombreux
langages plus anciens comme les langages statiques C, C++ et les langages interprétés
comme PERL. Nous allons
exposer les principales caractéristiques de ce langage.
(§ Ne voyez là bien sûr aucune allusion aux développeurs
de C (espace) plus plus ou encore aux allocations de mémoires qui
nont jamais rencontré leurs désallocations.)
2-1) Orienté objet
Un objet est une instance exécutable d'une classe, il encapsule ses propres
données qui ne sont normalement
accessibles et évaluées que par l'intermédiaire de ses méthodes.
Les objets communiquent entre eux à l'aide de
messages. Les messages sont évalués par les méthodes de l'objet.
Les messages induisent des modifications sur
l'état ou sur le comportement de l'objet. Les objets héritent du
comportement des classes dont ils dépendent et
peuvent spécialiser ce comportement.
Java respecte les quatre propriétés fondamentales de l'objet, que
sont l'encapsulation, la communication par
message, le polymorphisme et l'héritage. Java ne possède pas l'héritage
multiple mais supporte les interfaces qui
permettent d'implanter la plupart des avantages liées à l'héritage
multiple.
2-2) Java est simple
Java ressemble en plus simple à C++. Tous les concepts des langages de
haut niveau qui ne se révélèrent pas
indispensables ont été supprimés. En effet, Java ne dispose
pas des pointeurs, de la surcharge d'opérateur et de
l'héritage multiple comme vu précédemment.
En fait, le C++ n'est pas un langage purement orienté objet, dans la mesure
où beaucoup de compilateurs C++
acceptent des programmes ou morceaux de programme écrits en C. En Java,
pratiquement tout est classe,
méthode ou objet, donc moins de confusions...
Java reprend la syntaxe du C, ce qui fera plaisir aux programmeurs qui connaissent
ce langage. Par contre, tout ce
qui faisait la difficulté du C, c'est à dire les pointeurs, préprocesseurs,
unions, structures, la gestion de la
mémoire, et la conversion implicite de types, a disparu :
_La gestion de la mémoire est effectuée automatiquement par le Runtime
Java, qui réserve des
blocs de mémoire lorsque le programme crie famine et les libère
lorsqu'ils ne sont plus nécessaires.
_Les variables sont toutes typées en Java, et les conversions de type ne
sont pas implicites,
contrairement au C/C++. Par exemple, si vous avez déclaré :
int Entier, Resultat;
float Reel;
Vous devrez écrire en Java : Resultat = (int)(Entier*Reel); pour mettre
dans Resultat la partie
entière du calcul effectué Cela peut aider un programmeur
à détecter des bugs plus facilement...
2-3) Distribué
Les appels aux fonctions daccès réseau (sockets) et les protocoles
Internet les plus utilisés tels HTTP, FTP, sont
intégrés dans Java (TCP/IP, UDP ). On peut écrire très
simplement une architecture client/serveur sous Java et
utiliser des fichiers sur des systèmes distants comme sils se trouvaient
sur un disque dur local.
2-4) Portable, indépendant de l'architecture
Java veut garantir une probabilité sur n'importe quelle machine physique.
De ce fait, il respecte de nombreux
standards tels que celui de l'Unicode pour la définition du jeu de caractères
sur 16 bits. Dans Java, les types sont
identiques quel que soit limplémentation et le matériel. Java
définit explicitement dans « The Langage
Specification » de Sun, quun int est toujours un entier de 32 bits
(cf. Tableau 2 : les types primitifs de Java).
Le compilateur Java ne génère pas d'instructions machines spécifiques
mais un programme de bytecode, qui
peut alors être exécuté par un interpréteur (émulateur
de processeur virtuel) : la Machine Virtuelle Java.
2-5) Robuste
Java insiste beaucoup sur le contrôle de type, tant à la compilation
qu'à l'exécution. Chaque structure de données
doit être explicitement définie et typée. En pratique par
conséquent, le programmeur devra être plus rigoureux
lors de sa conception initiale. Java offre aussi un modèle de pointeur
totalement différent de celui du C et du C++
qui empêche à une application d'écraser une zone de mémoire
et d'altérer des données. Il est impossible, par
exemple, de convertir (par casting) un entier arbitraire en pointeur. C'est une
approche souvent utilisée par les
virus et autres programmes indésirables pour accéder à l'espace
mémoire d'une autre application.
Java vérifie les erreurs de typage des conversions explicites à
la compilation. Il utilise des algorithmes de
nettoyage et de compactage de la mémoire (garbage collector ou ramasse-miettes),
de ce fait cette gestion n'est
plus à la charge du programmeur.
Ce dernier point est extrêmement important, et va plus loin qu'une facilité
par rapport aux langages comme C ou
C++. En effet, il n'est pas rare dans les programmes de taille importante écrits
en C ou C++, de voir des
développeurs dont la seule fonction est tracer les pertes de mémoire
et de corriger les problèmes source. Ces
métiers là n'existent plus avec Java !
2-6) Performant
L'interpréteur de Java est relativement rapide puisqu'il exécute
un programme compilé et optimisé. L'interpréteur
aidé d'un traducteur dynamique (Just In Time Compiler) conserve un journal
d'instructions machine
correspondant au bytecode tout en l'optimisant par à-coups. Linterpréteur
est bien plus quun interpréteur, il
fait tourner un programme généré par un compilateur optimisé
sur une machine virtuelle. On n'atteint pas les
performances du C ou C++ mais lécart est de plus en plus réduit
avec les nouvelles techniques doptimisation et
les JIT.
Cependant en terme de performances, il faut peut-être maintenant distinguer
deux type d'exécution. L'exécution
coté client qui s'améliore de jour en jour comme il est expliqué
dans le paragraphe ci-dessus et l'exécution coté
serveur. C'est là que l'on attendait pas du tout Java (tout du moins au
début). Il s'avère que l'amélioration des
JVM et de la recompilation du code en mémoire avec le temps (fonction de
l'utilisation et d'autres paramètres)
font de Java un langage de choix pour tous les serveurs applicatifs. Ce n'est
pas par hasard qu'IBM, Netscape,
BEA, Oracle ( ) ont massivement modifié leurs AS respectifs (Websphere,
NAS, Weblogic et OAS) pour
supporter Java, voire même ne supporter que lui !!!
2-7) Multi-threading
Java intègre la notion de thread. Cela signifie qu'un programme multi-threading
permet des exécutions
concurrentes, ce qui allège considérablement la conception des programmes.
Java contient un jeu de primitives
de synchronisation, permettant ainsi une implémentation facilitée
de différents processus par le programmeur. Le
Just In Time compiler améliore encore la rapidité d'exécution.
2-8) Sécurisé
Nous allons nous attarder sur une caractéristique importante qu'est la
sécurité en Java. Effectivement les
environnements distribués peuvent impliquer entre autres, virus, risques
de non-confidentialité (divulgation non
autorisée de l'information) ou de non-intégrité (modification
non autorisée). L'architecture en Java comprend
quatre niveaux de sécurité :
_les concepts du langage et son compilateur prennent en charge la manipulation
involontaire de la
mémoire ;
_le verifier, vérificateur de byte code, qui s'assure des « bonnes
» propriétés et du format du
code ;
_le class loader, chargeur de classes qui, durant l'exécution du code,
vérifie les références des
classes à charger.
_le security manager, qui permet à l'utilisateur de définir des
droits concernant l'accès aux
fichiers locaux et aux ressources de communication.
Comme l'a souligné J. C. Collet de Sun Microsystems : « Ces trois
éléments (langage, API et le JVM), font de
Java, une vraie plate-forme de développement qu'il convient de regarder
dans son ensemble pour évaluer ses
potentiels. »
2-9) Petit
Bien dans ses dernières versions pour plate-forme win32 le JDK dépasse
largement es 15 Mo, linterpréteur de
base tient dans 40 Ko (auquel il convient dajouter 175 Ko pour obtenir le
support du multi-threading) ce qui en
fait un langage de prédilection pour les applications embarquées.
2-10) La pile dexecution (Java Stack)
Ladressage de dans la Machine Virtuelle Java se fait sur 32 bits ce qui
permet laccès à 4 Gb de mémoire. Un
registre dans la machine virtuelle peut contenir une adresse de 32 bits. Chaque
méthode est limitée à 32Kb.