Les fondements du langage Java
Chapitre 2
Langage Java, histoire et base
Pr. Mohammed OUANAN
-1-
Naissance des langages de programmation
♦ Réduire la complexité d’interaction avec les composantes hardware
par la création des interfaces de translation au langage machine
(les premiers étaient Fortran (FORmula TRANslator) et Cobol
(COmmon Business Oriented Language)
♦ Ces premiers langages étaient très coûteux en terme de
maintenance et d’adaptabilité. Impossibilité de réutilisation des
sources pour plusieurs types de problèmes (écriture dans un
fichier, envoi de messages à d’autres systèmes …etc)
♦ Le programmeur doit penser au niveau le plus bas du système pour
une résolution procédural du problème (logique linéaire)
-2-
Définition d’un langage de programmation
♦ Plusieurs langages de programmations comme il existe plusieurs
langues
♦ Critères du choix d’un langage de programmation:
• Degré de connaissance du langage
• Outils disponible pour développer l’application avec un langage donné
• Caractéristiques hardware du système
• Type de problème à résoudre
-3-
Différences entre les langages
♦ La manière par laquelle un code source d’un programme se transforme
pour son exécution au langage binaire reconnu par la machine
détermine le type du langage: compilé ou interprété
♦ Langage compilé:
Code source code binaire spécifique à la machine exécution du
code native (fichier exec) (ex: C/C++)
♦ Langage interprété:
Exécution du code source via sa conversion interactif par l’interpréteur
du langage au code machine,(ex: VBscript, HTML) (↑ portabilité, ↓
performance)
-4-
Introduction au langage Java
Java est un langage orienté objet: l'entité de base de tout code Java est
la classe.
Créé en 1995 par Sun Microsystems
Sa syntaxe est proche du langage C/C++
Il est fourni avec le JDK (Java Developpment Kit)
Outils de développement
Ensemble de paquetages très riches et très variés
Multi-tâches (threads)
Portable grâce à l’exécution par une machine virtuelle
En 1996, son succès se confirme avec l’expansion de Internet
(Netscape Browser est basé sur Java).
Aujourd’hui Java est très populaire pour le développement des
applications business, comme celles qui ont besoin d’accéder a des
données sur des machines différentes du réseau Internet.
-5-
Avantages de programmer en Java
♦ Langage facile à apprendre, librairie riche de classes (API) disponible
gratuitement (Sun, open source. Java 2: 60 packages, 1781 classes et
interfaces, 15060 méthodes)
♦ Existence d’outils permettant un développement efficace et rapide
d’application complexes
♦ Une application en java peut tourner sur presque n’importe quel type de
platform (hardware)
♦ Presque n’importe quel problème scientifique ou d’entreprise peut être
résolue en Java
-6-
Code source d’un programme Java
♦ Tous les langages se basent sur 5 éléments principaux:
• Vocabulaire (ensemble de mots clés utilisés par le langage)
• Identificateurs (noms utilisés pour référencer les données stockées en mémoire)
• Ponctuation (symboles utilisés par le langage)
• Opérateurs (symboles ou commandes pour traiter les données)
• Syntaxe (grammaire et critères d’utilisation des 4 éléments cités ci-dessus)
♦ Un programme java doit contenir:
• Commentaires clarifiant ce que le programme est supposé de faire
• Définition d’au moins une class (template d’un objet). Chaque class a un
nom unique, le code source d’une class particulière doit être stockés dans un
fichier source avec un nom identique à celui de la classe
• Une classe contient aussi bien des données (nombres, textes ou autres
objets) que des méthodes (partie du code spécifiant ce que l’objet doit faire avec
ses données)
-7-
Code source d’un programme Java
Un programme Java est constitué de classes:
● Les classes ont un nom qui commence par une majuscule.
● Une seule classe contient une méthode main : c'est la fonction qui
sert de programme principal (point de départ de l'exécution)
● Les instructions se terminent par le caractère « ; »
En Java, tout se trouve dans une classe. Il ne peut y avoir de déclarations ou
de code en dehors du corps d'une classe.
• La classe elle même ne contient pas directement du code.
– Elle contient des attributs.
– et des méthodes (équivalents à des fonctions).
• Le code se trouve exclusivement dans le corps des méthodes, mais ces
dernières peuvent aussi contenir des déclarations de variables locales
(visibles uniquement dans le corps de la méthode).
-8-
Environnement de Programmation: Compilation
• La compilation d’un programme Java ne traduit pas directement le
code source en fichier exécutable. Elle traduit d’abord le code source
en un code intermédiaire appelé «bytecode».
• C’est le bytecode qui sera ensuite exécuté par une machine virtuelle
(JVM ; Java Virtual Machine). Ceci permet de rendre le code
indépendant de la machine qui va exécuter le programme.
• Sun fournit le compilateur javac avec le JDK. Par exemple,
javac [Link]
compile la classe MonPremProg dont le code source est situé dans le
fichier [Link]
-9-
Environnement de Programmation: Compilation
Si le fichier [Link] fait référence, par exemple, à des classes
situées dans les répertoires /prog/exemple et /cours, alors la compilation se
fait de la façon suivante:
sous windows:
javac –classpath \prog\exemple ; \cours [Link]
sous Linux:
javac -classpath /prog/exemple : /cours [Link]
On peut désigner le fichier à compiler par un chemin absolu ou relatif
javac home/user2/[Link]
Cette compilation crée un fichier nommé «[Link]» qui
contient le bytecode
Si un système possède une JVM il peut exécuter tous les bytecodes
(fichiers .class) compilés sur n’importe quel autre système.
- 10 -
Exécution du bytecode
Le bytecode doit être exécuté par une JVM. Cette JVM n'existe pas;
elle est simulée par un programme qui:
– lit les instructions (en bytecode) du programme .class,
– les traduit dans le langage machine relatif à la machine sur laquelle
il sera exécuté.
– Lance leur exécution
Pour exécuter, Sun fournit le programme java qui simule une JVM. Il
suffira d’utiliser la commande:
java MonPremProg
Si des classes d’autres répertoires sont nécessaires, alors il faut
utiliser l’option –classpath de la même façon que la compilation:
sous windows: java -classpath /prog/exemple ; /cours MonPremProg
sous Linux: java -classpath /prog/exemple : /cours MonPremProg
- 11 -
Java Development Kit(JDK)
Le Java Development Kit (JDK) désigne un ensemble de bibliothèques
logicielles de base du langage de programmation Java, ainsi que les outils
avec lesquels le code Java peut être compilé, transformé en bytecode
destiné à la machine virtuelle Java.
Il existe plusieurs éditions de JDK, selon la plate-forme Java1considérée (et
bien évidemment la version de Java ciblée) :
JSE: pour la Java 2 Standard Edition également désignée J2SE ;
JEE: sigle de Java Enterprise Edition également désignée J2EE ;
JME: 'Micro Edition', destinée au marché mobiles ;
etc…
À chacune de ces plateformes correspond une base commune de
Développement Kits, plus des bibliothèques additionnelles spécifiques
selon la plate-forme Java que le JDK cible, mais le terme de JDK est
appliqué indistinctement à n'importe laquelle de ces plates-formes.
- 12 -
Contenu du Java Development Toolkit (JDK)
- 13 -
Mon premier programme en Java
Considérons le code source suivant:
public class MonPremProg {
public static void main(String args[]) {
[Link](" Bonjour: mon premier programme Java " );
}
}
Important:
[Link] code doit être sauvegarder obligatoirement dans le Fichier source
nommé « [Link] »
2. Une classe exécutable doit posséder une méthode ayant la signature
public static void main(String[] args).
- 14 -
La méthode main()
De manière générale, dans tout programme autonome destiné à être
exécuté doit contenir une méthode particulière nommée main() définie de la
manière suivante:
public static void main(String args[]) {
/* corps de la méthode */
}
• Le paramètre args de la méthode main() est un tableau d’objets de type
String. Il n’est pas utilisé mais, il est exigé par le compilateur Java.
• La classe contenant la méthode main() doit obligatoirement être public
afin que la machine virtuelle y accès.
Dans l’exemple, le contenu de la classe MonPremProg est réduit à la
définition d’une méthode main().
Un fichier source peut contenir plusieurs classes mais une seule doit être
public (ici PremProg).
• Le nom du fichier source est identique au nom de la classe publique
qu'il contient, suivi du suffixe .java, dans l’exemple [Link]
- 15 -
Exemple de création et d’exécution d’un programme Java
[Link] 1. Création du code source avec extension « .java »
[Link] 2. Génération du code byte avec extension « .class »
3. Interprétation du code byte « .class » et exécution
- 16 -
Les messages d’erreur
♦ IL a 3 types d’erreurs de programmation:
• Erreurs de compilations empêchant le compilateur de créer le fichier
class du code source
• Erreurs lors de l’exécution (aussi nommé « exceptions ») souvent
résultant dans la terminaison du processus (un des avantages du java
c’est qu’il permet de gérer les exceptions)
• Erreurs de logique non détectable par le compilateur. Le programme
fonctionne mais ne produit pas les résultats désirés. Nécessite un
debugging
- 17 -
Présentation d’un IDE (Integrated Development Environement)
♦ Une application Java peut contenir une centaine d’objets, et donc une
centaine de fichiers source java. La création, édition et gestion de
ces fichiers peut s’avérer très lourde.
♦ Des outils ont été crée pour assister le programmeur java a gérer,
maintenir et créer du code source java, ce sont les IDEs. Ces IDEs
peuvent intégrer:
• un processeur Word
• un kit de développement de software (SDK)
• une fenêtre pour la visualisation des résultas
• des outils pour créer des GUIs
♦ Des IDEs permettent de faire le design de l’application (diagramme
de classes) et par après la génération automatique du code (UML)
- 18 -
Les packages
♦ En Java, à chaque classe est attribué un identificateur nom d’espace (par
défaut le nom de la classe même). L’interpréteur Java utilise ce nom
d’espace pour localiser et charger les classes et leurs méthodes
♦ Les packages sont des collections de classes et d’interfaces regroupées
par thème. La commande package en Java permet à ces collections de
classes d’être identifiés comme étant liés
♦ La commande import permet à l’interpréteur de localiser les classes
référencés. Elle déclare l’unique nom d’espace pour ses classes
♦ Le package des classes permet de renforcer un contexte au-dessus du
niveau de la classe. Une classe n’a aucun accès au package, à moins si
l’instruction import est utilisé pour l’importer
- 19 -
Les variables d’environnement
♦ En Java, 2 variables d’environnement permettant l’accès aux classes et aux
packages doivent être définies: PATH et CLASSPATH
♦ La variable CLASSPATH peut contenir le chemin à plusieurs répertoires qui
contiennent des packages (le répertoire standard JDK n’a pas besoin d’être définie dans la
variable CLASSPATH)
- 20 -
Le chargement des classes, Comment ça marche?
♦ Comment l’interpréteur Java trouve, charge et interprète les classes utilisés par un
programme?
Les étapes suivantes sont exécutés:
1. Cherche les fichiers dans les répertoires standard de JDK
2. Cherche tous les fichiers dans le package par défaut. La référence utilisée pour les
packages par défaut est la référence au répertoire courant (symbole « . » dans les OS)
3. utilise les chemins de répertoires définis dans la variable CLASSPATH pour trouver les
fichiers. Ces répertoires de CLASSPATH sont aussi considérés comme des packages par
défaut.
4. Cherche les fichiers dans les packages déclarés dans l’instruction package de la
classe. La recherche de ces packages se fait uniquement via les répertoires identifiés
dans la variable CLASSPATH
♦ La redéfinition de la variable CLASSPATH est possible lors de la compilation ou de l’exécution
de l’interpréteur
javac –classpath . [Link]
java –cp . File
- 21 -
Packages de base Java
♦ Exemple de packages de base Java qu’on peut importer:
[Link] Principales classes du langage Java
[Link] E/S vers différents périphériques
[Link] Utilitaires (vecteur, hashtables, …)
[Link] Support du réseau (socket, URL, …)
[Link] Interface graphique
[Link] Classes de base pour la réalisation d'une applet
- 22 -
Localisation des packages
♦ La localisation des classes dans un programme peut se faire de deux manières. La
première utilise l’instruction import, la seconde consiste à ajouter explicitement
l’identificateur du nom du package à chaque fois que la classe est utilisée
- 23 -
Appellation unique pour le nom des packages
♦ En Java, les programmes peuvent être accéder
sur internent, ou l’application peut être
délivré sur une autre machine, ce qui peut
causer des conflits avec le nom des
répertoires et des packages. Pour éviter des
conflits, il faut s’assurer que le nom attribué
au nouveau package est unique
♦ La figure montre un exemple de création de
package dans une structure de répertoires.
Dans cet exemple l’identificateur du
package sera:
[Link]
♦ La collection de classes qui ont été packagés se
trouvent dans le répertoire Banking. Pour le
distinguer de toute autre package banking,
on a inclut le répertoire parent dans la
définition du nom du package
- 24 -
Le processus du package des classes
1. Pour qu’une classe soit identifié comme membre du package, il faut inclure l’instruction
package <packagename> tout au début du fichier source. Ainsi le compilateur inclura la
référence au package dans la version bytecode de la classe
Première
instruction
dans le code
2. Créer les répertoires où les classes vont être sauvegardés
(/edu/state/district/studentname/banking)
3. Placer le code source dans un répertoire séparé
4. En utilisant l’option -d avec la commande javac, les fichiers classes vont être crées et placés
dans le répertoire package
5. Définir la variable classpath pour pointer à la racine de l’identificateur du package
([Link])
- 25 -
L’utilitaire jar
♦ En utilisant l’utilitaire jar (acronyme de Java Archive), tous les fichiers d’un package
peuvent être combiné dans un seul fichier compressé. Ce fichier est connu sous le
nom du fichier archive (peut être signé)
♦ Le fichier Jar améliore de manière significative la gestion et la délivrance des classes. Il a
été développé initialement pour les Applets afin d’accélérer le temps de leur
téléchargement. Le compilateur java et l’interpréteur peuvent accéder directement aux
classes archivées dans un fichier jar (en utilisant l’instruction import et en ajoutant le
chemin au fichier jar à la variable classpath)
♦ Un fichier jar peut être créé avec la commande jar du JDK; la syntaxe est inspirée de la
commande tar d'Unix. Par exemple:
- Créer un fichier jar jar cvf [Link] *.class
- Visualiser le contenu d’un fichier jar jar tvf [Link]
- Extraction des classes du fichier jar jar xvf [Link]
- 26 -