|
Généralités
Java est un langage de programmation
orienté
objet. Préalablement nommé Oak,
il a été créé par James
Gosling et Patrick
Naughton chez Sun Microsystems avec
le soutien de Bill
Joy.
Concepts de Base
Quatre buts primaires présidaient la création du langage
Java. Il devait :
Orienté objet
La première caractéristique, l'orienté objet, réfère à
une méthode moderne de programmation et de conception de
langage. Son but est de rendre les grands projets logiciels
plus facile à gèrer, à améliorer la qualité et à réduire
le nombre d'échecs de projet.
Indépendance face à la plate-forme
La seconde caractéristique du langage, l'indépendance vis
à vis de la plate-forme, signifie que les programmes écrits
en Java doivent fonctionner sur plusieurs types de matériel
informatique. Un programmeur doit pouvoir écrire un
programme une seule fois et, le faire fonctionner dans n'importe
quel ordinateur. Ceci est permis en compilant
le code source
d'un programme Java dans un pseudo-code intermédiaire
appelé bytecode
Java -- des instructions machine qui se conforment à
un standard établi. Le code est par la suite exécuté par
une machine virtuelle
(MV), un programme écrit en code
natif sur le matériel cible qui traduit le pseudo-code
Java en code utilisable pour le matériel concerné. De plus,
des bibliothèques
sont offertes pour fournir l'accès à des fonctionnalités
propres à la machine cible -- comme les graphiques ou le
réseau -- d'une manière unifiée. Le langage Java offre aussi
le support des programmes avec plusieurs fils d'exécution
-- une nécessité pour plusieurs programmes de réseau.
La première implémentation du langage utilisait une machine
virtuelle pour offrir la portabilité, et plusieurs implémentations
le font encore. Ces dernières produisent des programmes
qui fonctionnent plus lentement que les programmes compilés
nativements, comme ceux écrit en C.
Cette situation a conféré une réputation de lenteur aux
programmes Java. Toutefois, des implémentations plus récentes
de la machine virtuelle Java produisent des programmes qui
s'exécutent beaucoup plus vite grâce à l'utilisation de
diverses techniques.
La première technique est de simplement compiler directement
en code natif comme les compilateurs traditionnels, sans
passer par le pseudo-code. Cette méthode permet une meilleure
performance, mais au prix de la portabilité (cf. GCJ). Une autre technique, la compilation
à la volée (just-in-time ou JIT),
compile le pseudo-code Java en code natif à l'exécution
du programme. Les MV plus sophistiquées utilisent même la
recompilation dynamique, lors de laquelle la machine
analyse le comportement du programme et recompile et optimise
les parties critiques. Ces deux techniques permettent à
l'application de prendre avantage de la vitesse d'exécution
du code natif en ne perdant pas la portabilité.
La portabilité est un but techniquement difficile à atteindre,
et le succès de Java à ce but est sujet à controverse. Même
s'il est en effet possible d'écrire des programmes pour
les machines virtuelles Java qui se comportent
de façon cohérente sur différentes plates-formes, le grand
nombre de plates-formes avec des petites erreurs ou incohérences
a mené à une parodie du slogan de Sun Write once, run
anywhere (écrire une fois, exécuter n'importe où) en
Write once, debug everywhere (écrire une fois,
déboguer partout).
Les machines virtuelles développées sous licence par Microsoft
ne sont pas étrangères à cette réputation. En effet l'éditeur
de Redmond avait singulièrement 'adapté' ses VM à ses
besoins propre. Il a été condamné à cesser l'exploitation
de la licence et à retirer ses VM non conformes de ses produits.
Exécution sécurisée de code distant
La plate-forme Java fut l'un des premiers systèmes à offrir
le support de l'exécution du code à partir de sources distantes.
Une applet peut fonctionner dans le
navigateur
Web d'un utilisateur, exécutant du code téléchargé d'un
serveur HTTP. Le code fonctionne dans un
espace très restrictif, ce qui protège l'utilisateur des
codes erronés ou mal intentionnés. Les éditeurs d'applet
peuvent alors demander un certificat pour leur permettre
de signer
numériquement une applet comme sécuritaire, leur donnant
ainsi la permission de sortir de l'espace restrictif et
d'accéder au système de fichier de l'utilisateur et au réseau.
Évaluation
Selon la plupart des gens, la technologie Java atteint
raisonnablement bien ces buts. Le langage n'est pas, par
contre, sans problèmes. Quelques fonctionnalités du C++ que
Java n'offre pas, comme des types de données spécifiques
au matériel hôte, les pointeurs vers des espaces mémoire
arbitraires et des techniques de programmation comme la
surcharge d'opérateurs, peuvent être mal utilisées ou abusées
par des programmeurs mais constituent aussi des outils très
puissants. (Par contre, la technologie Java offre le Java
Native Interface (interface natif Java ou JNI),
une méthode permettant d'appeler du code natif à partir
de code Java.) Quelques programmeurs se plaignent aussi
du manque d'héritage
multiple, une fonctionnalité puissante du C++ et d'autres
langages orientés objet. Le langage Java sépare l'héritage
et l'implémentation, permettant l'héritage multiple via
les interfaces, mais seulement un héritage via une hiérarchie
de classes. Ceci offre la plupart des avantages de l'héritage
multiple tout en évitant la plupart de ses dangers. De plus,
grâce à l'utilisation de classes concrètes, de classes abstraites
et d'interfaces, un programmeur Java a le choix de faire
une implémentation complète, partielle ou nulle d'un type
d'objet qu'il définit, assurant un maximum de flexibilité
dans la conception d'applications.
Certaines personnes pensent par contre que, pour certains
projets, la conception orientée objet rend plus difficile
plutôt que plus facile la programmation. Cette critique,
infondée dès qu'un projet prend de l'ampleur, n'est pas
spécifique au langage Java, mais s'applique à tous les langages
de programmation orientés objet.
Une opinion répandue est que Java combine l'efficacité
du Smalltalk à l'élégance du C++, bien que le contraire
eût sans doute été préféré de bien des programmeurs.
Le langage
Voici un exemple d'un programme Hello world typique écrit
en Java :
public class HelloWorld {
public static void main(String[] args) {
System.out.println("Hello world!");
}
}
Structures de contrôle
Boucles
Structure tant que :
while (<expression booléenne>) {
instruction(s)
}
Structure faire tant que :
do {
instruction(s)
} while (<expression booléenne>);
Structure pour :
for (<initialisation> ; <condition de poursuite> ; <expression d'incrémentation>) {
instruction(s)
}
Structures conditionnelles
Structure si simple :
if (<expression booléenne>) {
instruction(s)
}
Structure si... sinon :
if (<expression booléenne>) {
instruction(s)
} else {
instruction(s)
}
Avec else if, des constructions si...
sinon arbitrairement complexes peuvent être construites.
if (<expression booléenne>) {
instruction(s)
} else if (<expression booléenne>) {
instruction(s)
} else if (<expression booléenne>) {
instruction(s)
} else {
instruction(s)
}
Structure cas de ... : Un valeur discrète est
un type que l'on peut énumerer (exemple : 1,2,3.. ou 'a','b','c'...)
switch (<expression discrète>) {
case <expression discrète constante>:
instruction(s)
break;
[...]
default:
instruction(s)
break;
}
La commande break sort immédiatement la boucle
en cours (for, while, do), et permet de sortir d'une clause
contenue dans un switch.
Une expression continue termine l'itération en
cours et continue à la prochaine. Elle s'écrit comme suit
: continue
L'énoncé return termine une méthode.
Avec return uneValeur, uneValeur
sera renvoyée à la méthode appelante.
try {
instruction(s)
} catch (<type d'exception> <variable>) {
instruction(s)
}
[...]
finally {
instruction(s)
}
Versions
Java est une marque de déposée de Sun Microsystems. Kits
de développement Java (Java development kit ou
JDK) publiés par Sun, utilisables gratuitement
:
- JDK 1.0, 1996
- JDK 1.1, 1997
- JDK 1.2, 1998 dite Java 2
- JDK 1.3, 2000
- JDK 1.4, 2002
- JDK 1.5, 2004 dite Java 5.0
Le langage est stable depuis le JDK 1.0; les bibliothèques
de classes fournies se sont agrandies et ont changé en partie.
À partir de la version 1.2, les JDK ont été renommés en
J2SDK (Java 2 Software Development Kit, kit de
développement de logiciels Java 2) et on appelle souvent
ces versions Java 2.
Frameworks et API
Sun fournit un grand nombre de frameworks et d'API afin
de permettre l'utilisation de Java pour des usages très
diversifiés. On distingue essentiellement 4 grands frameworks
:
- J2SE
: Ce framework est destiné aux applications pour poste
de travail.
- J2EE
: Ce framework est spécialisé dans les applications serveurs.
Il contient pour ce faire un grand nombre d'API et d'extensions.
- J2ME
: Ce framework est spécialisé dans les applications mobiles.
- JavaCard
: Ce framework est spécialisé dans les applications liées
aux cartes à puces et autres SmartCards
On trouve toutefois de nombreuses autres technologies,
API et extensions optionnelles pour Java :
Version interprétée
Il y a une version interprétée de Java appelée beanshell,
qui peut être utilisée comme un langage de script shell.
L'interpréteur peut aussi être embarqué dans une application
Java pour la rendre scriptable.
Voir aussi
Liens externes
|