Bas de page
Page précédente Sommaire Page suivante
Bas de page

II) INTRODUCTION A JAVA

2) Les caractéristiques de java

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
n’ont 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 d’accè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 s’ils 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 l’implémentation et le matériel. Java définit explicitement dans « The Langage
Specification » de Sun, qu’un 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. L’interpréteur est bien plus qu’un 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 d’optimisation 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, l’interpréteur de
base tient dans 40 Ko (auquel il convient d’ajouter 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 d’execution (Java Stack)

L’adressage de dans la Machine Virtuelle Java se fait sur 32 bits ce qui permet l’accè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.

Haut de page
Page précédente Sommaire Page suivante
Haut de page
Contactez-nous
Conditions d'utilisation
Qui sommes nous?
© 2001 IsepFAQtory Tous droits réservés