Cours "Réseaux et systèmes répartis" NFP 214 par Jacques LAFORGUE ([email protected]) version du 27/11/2014 slide numéro 1
Présentation du langage JAVA
JAVA est un vrai langage
JAVA est un langage de programmation à part entièreL’objectif premier de ce langage était de définir un langage de programmation portable sur toutes les plates-formes existantes (1990). Il est devenu un langage moderne et incontournableA ne pas confondre avec Javascript
Cours "Systèmes et réseaux répartis" NFP 214 par Jacques LAFORGUE ([email protected]) version du 27/11/2014 slide numéro 2
Historique de Java
1993 : projet Oak(langage pour l'électronique grand public)
Mai 95 : Netscape prend la licenceSept. 95 : JDK 1.0 b1Mai 96 : JDK 1.0.2, première version réellement utilisableFin 96 : RMI, JDBC, JavaBeans, ...Fév. 97 : JDK 1.1Déc. 98 : Java 2 SDK 1.2, apparition du terme Plate-forme Java
Cours "Systèmes et réseaux répartis" NFP 214 par Jacques LAFORGUE ([email protected]) version du 27/11/2014 slide numéro 3
Déc. 98 : Java 2 SDK 1.2, apparition du terme Plate-forme Java1999 : Forte orientation de Sun vers le coté serveur
plate-forme J2EE : Servlets, JSP et serveurs d ’application.2000 : Java 2 SDK 1.32001 : Java 2 SDK 1.42006 Java 2 EE (SDK 1.5)2007 Java 2 EE (SDK 1.6)
JAVA est :
simple,orienté objet, familier, distribué, robuste, sûre, portable, dynamique
Cours "Systèmes et réseaux répartis" NFP 214 par Jacques LAFORGUE ([email protected]) version du 27/11/2014 slide numéro 4
dynamique et multithread
JAVA est plus qu'un langage
JAVA est robuste
A l’origine, c'est un langage pour les applications embarquées.Gestion de la mémoire par un garbage collector.Pas d’accès direct à la mémoire.Mécanisme d'exception.Accès à une référence null exception.compilateur contraignant (erreur si exception non gérée, si utilisation d’une variable non affectée, ...).Tableaux = objets (taille connue, débordement exception).
Cours "Systèmes et réseaux répartis" NFP 214 par Jacques LAFORGUE ([email protected]) version du 27/11/2014 slide numéro 5
Tableaux = objets (taille connue, débordement exception).Seules les conversions sûres sont automatiques.Contrôle des cast à l'execution
L'architecture de JAVA (1/3)
Cours "Systèmes et réseaux répartis" NFP 214 par Jacques LAFORGUE ([email protected]) version du 27/11/2014 slide numéro 6
L'architecture de JAVA (2/3)
Les Java SDK (Software Development Kit)J2SE (Java 2 Platform, Standard Edition)J2EE (Java 2 Platform Enterprise Edition)
JSTL : Java server page Standard Tag LibraryC'est un ensemble de tags personnalisés développé s ous la JSR 052 qui propose des fonctionnalités souvent rencontrées dan s les JSP :Tag de structure (itération, conditionnement ...) Internationalisation Exécution de requête SQL
Cours "Systèmes et réseaux répartis" NFP 214 par Jacques LAFORGUE ([email protected]) version du 27/11/2014 slide numéro 7
Exécution de requête SQL Utilisation de document XML
AVK permet d'évaluer le niveau de portabilité d'une application (après tout si on a choisi Java et J2EE c'est au moins en partie pour ses qualités de portabilité). Ce kit propose des outils pour vérifier de manière statique et dynamique (exécution de l'application) tout code J2EE 1.2, 1.3 ou 1.4.
L'architecture de JAVA (3/3)
JSF simplifie le développement d'interface utilisateur Web. Rendre indépendant la logique de présentation et ses rendus JSF permet de représenter des composants IHM et gérer leurs états, gérer leurs événements, valider les saisies, définir la navigation des pages, supporter l'internationalisation et accessibilité.
Cours "Systèmes et réseaux répartis" NFP 214 par Jacques LAFORGUE ([email protected]) version du 27/11/2014 slide numéro 8
JAVA est un LOO
JAVA est un langage orienté objet :Tout est classe (pas de fonctions) sauf les types primitifs (int, float, double, ...) et les tableauxToutes les classes dérivent de java.lang.ObjectHéritage simple pour les classesUne classe peut implémenter plusieurs interfaces : héritage multiple des méthodes.Les objets se manipulent via des référencesUne API objet standard est fournie
Cours "Systèmes et réseaux répartis" NFP 214 par Jacques LAFORGUE ([email protected]) version du 27/11/2014 slide numéro 9
Une API objet standard est fournieLa syntaxe est proche de celle de C
JAVA est portable
JAVA est portable :Le compilateur Java génère du byte code.La Java Virtual Machine (JVM) est présente sur Unix, Win32, Mac, OS/2, Linux, Netscape, IE, ...Le langage a une sémantique très précise.La taille des types primitifs est indépendante de la plate-forme.Java supporte un code source écrit en Unicode. Java est accompagné d'une librairie standard.
Cours "Systèmes et réseaux répartis" NFP 214 par Jacques LAFORGUE ([email protected]) version du 27/11/2014 slide numéro 10
Les "exécutables" de JAVA
Il n'y a pas vraiment d'exécutable au sens communTout programme Java est interprété
soit c'est une classe contenant une méthode mainsoit c'est un package qui contient une classe qui contient une méthode mainsoit c'est un applet qui s'exécute dans un AppletViewer ou un navigateur
Cours "Systèmes et réseaux répartis" NFP 214 par Jacques LAFORGUE ([email protected]) version du 27/11/2014 slide numéro 11
La classe JAVA
La création de classe est la base de l'architecture logicielle d'un programme JAVA. Elle représente le seul composant logiciel du langage. Il est impossible d'écrire un programme JAVA sans créer au moins une classe.Il est possible de créer des classes publiques, privées, ou abstraitesDepuis la version 1.2 de JDK, il est possible d'imbriquer les classes.Quelle que soit sa nature, une classe :
est constituée d' attributs (private, public, protected, final, static) et de méthodes
Cours "Systèmes et réseaux répartis" NFP 214 par Jacques LAFORGUE ([email protected]) version du 27/11/2014 slide numéro 12
méthodeshérite d'une autre classe (par défaut hérite de la classe Object)appartient ou non à un package
Le type "Record" n'existe pas dans le langage JAVA. La seule manière de créer une structure de données est de créer une classe dont chaque attribut est un élément de la structure de donnée. Cette contrainte oblige le programmeur de toujours créer des classes pour ses données.
Exemple d'un fichier JAVA
class Individu{
public String nom;public String prenom;public int age;public String toString(){
return(nom+" "+prenom+" ("+age+"ans)");}
}.....public class Couple{
Individu mari;
Cours "Systèmes et réseaux répartis" NFP 214 par Jacques LAFORGUE ([email protected]) version du 27/11/2014 slide numéro 13
Individu mari;Individu femme;Individu enfants[];public void afficher(){
int i;System.out.println(mari.toString+" marié à "+femme.toString());String s=new String();for(i=0;i<enfants.length;i++)
s=s+enfants[i].toString()+" ";System.out.println("Enfants: "+s);
}.....
}
Les phases de génération
Fichiers sources .java de type texteappartenant ou non à un packagecontenant une ou plusieurs classes mais une seule classe publique
La classe publique contenue dans le fichier doit être de même nom que celui du fichier.Les classes non publiques ne sont pas visibles par les autres classes des autres fichiers. On appelle ces classes des classes locales de l'unité de programmation (à ne pas confondre avec les classes imbriquées).
Il n’existe pas de séparation entre l’interface et l’implémentation d’une classe, comme cela peut être le cas en C++ ou en ADA. Cela est inutile en JAVA. Tout le code nécessaire à l’écriture d’une classe est dans son fichier .java
Cours "Systèmes et réseaux répartis" NFP 214 par Jacques LAFORGUE ([email protected]) version du 27/11/2014 slide numéro 14
Tout le code nécessaire à l’écriture d’une classe est dans son fichier .java associé.Il n’existe plus de .h !!!
Compilation des fichiers sources en .classLa compilation d'un fichier .java génère autant de fichier .class que de classesdéfinies dans le fichier. Cela impose que toutes les classes Java doivent être de nom différent, dans un même packageNous verrons que l'utilisation des ces fichiers générés peut devenir complexe (ordre de l'appel en fonction de CLASSPATH, chargement dynamique, transfert à travers le réseau, ...).
La machine virtuelle de JAVA
La phase de compilation ne génère pas du code directement exécutable mais un code appelé P-CODE qui est un code intermédiaire. Ce code est ensuite interprété durant la phase d’exécution. Ceci confère à JAVA deux propriétés très importantes :
le langage JAVA est un langage à liaison dynamique,le code est portable immédiatement sur des plates-formes différentes
Les trois machine virtuelles les plus connues sont :java la commande d'exécution de programme autonomeun AppletViewer qui visualise un applet
Cours "Systèmes et réseaux répartis" NFP 214 par Jacques LAFORGUE ([email protected]) version du 27/11/2014 slide numéro 15
un AppletViewer qui visualise un appletun navigateur (Netscape,InternetExplorer, ...)
Ce principe d'interprétation de pseudo-code permet une portabilité de toutes les classes JAVA sur toute plate-forme qui possède un navigateur. Cela explique la généralisation de la création d'applets.De plus, un certain nombre de contrôle peut être réalisés durant l'interprétation afin d'interdire certaines instructions dans certains cas de figure. Comme par exemple: un applet Java ne peut pas exécuter des instructions systèmes.
Compilation et règles de dépendance
Il n'existe plus de "makefile". Compiler une classe ou un programme Java consiste à faire la compilation de la classe "principale". Le compilateur compilera les autres classes Java automatiquement si elles ont évoluées. La recherche de ces classes se fait en fonction du "classpath"
Cours "Systèmes et réseaux répartis" NFP 214 par Jacques LAFORGUE ([email protected]) version du 27/11/2014 slide numéro 16
L'exécution d'un programme JAVA (1/2)
Le langage Java est dynamique et s’adapte à l’évolution du système sur lequel il s’exécute. Les classes sont chargées au fur et à mesure des besoins, à travers le réseau s’il le faut. On peut parler de distribution des classes avant celle des objets.La sécurité est un point fort de Java. Des principes et des classes spécifiques permettent de contrôler l’exécution du code Java sur une machine. Le code java s’exécutant sur une client ne peut pas faire n’importe quoi, comme par exemple gérer les fichiers du système cible.
Cours "Systèmes et réseaux répartis" NFP 214 par Jacques LAFORGUE ([email protected]) version du 27/11/2014 slide numéro 17
comme par exemple gérer les fichiers du système cible.
L'exécution d'un programme JAVA (2/2)
Cours "Systèmes et réseaux répartis" NFP 214 par Jacques LAFORGUE ([email protected]) version du 27/11/2014 slide numéro 18
Le typage
JAVA est un langage fortement typé. Toute donnée utilisée appartient à un type de classe (ou interface) bien précis. Par contre le mécanisme d'héritage et d'abstraction inhérent à tout langage objet permet de "caster" un objet en un autre type de donnée que sa déclaration.Ce fort typage est essentiel afin d'assurer la robustesse du code développé à travers les nombreux contrôles de compilation de JAVA.Toute entité d'un langage JAVA doit être déclarée, puis initialiser avant son utilisation. L'initialisation d'un objet est assurée par le(s) constructeur(s) définit(s)
Cours "Systèmes et réseaux répartis" NFP 214 par Jacques LAFORGUE ([email protected]) version du 27/11/2014 slide numéro 19
L'initialisation d'un objet est assurée par le(s) constructeur(s) définit(s) dans sa classe d'appartenance. Deux familles de type :
les types primitifsles types d'objet (classes, interfaces)
L'interface joue un grand rôle dans la programmation en Javacontrat, abstraction, généricité, polymorphisme, délégation
La syntaxe du langage
La syntaxe du langage JAVA est très rigoureuse et grâce à son fort typage la majorité des erreurs de développement est détectée durant la phase de compilation.
Par contre, cela implique une certaine habitude à utiliser les mécanismes de conversion de type (casting).
On peut résumé la situation en disant qu’il ne faut pas confondre “ fortement ” avec “ souplesse ”. Bien que JAVA type toutes ces données et qu’il soit rigoureux sur ses contrôles, de part la nature objet de ces données, JAVA rend compatible la plupart des types entre eux (dans la mesure où ces types appartiennent même de loin à une autre classe).
Cours "Systèmes et réseaux répartis" NFP 214 par Jacques LAFORGUE ([email protected]) version du 27/11/2014 slide numéro 20
mesure où ces types appartiennent même de loin à une autre classe).La syntaxe générale du langage JAVA est celle du langage C et C++.
On peut résumer la situation en disant que JAVA a pris ce qu'il y avait de bon dans le C/C++ et éliminer ce qui était mauvais ou peu recommandable à utiliser dans un vrai langage objet.
On retrouve notamment toutes les structures de contrôles du langage C et la forme générale de déclaration d'une classe du C++. Il y a eu notamment une grande simplification pour la déclaration des méthodes et la façon de passer les paramètres.
Les mécanismes de JAVA (1/3)
Allocation et désallocation dynamique et transparente des objets Ainsi, la notion de "destructeur" disparaît complètement du langage Il existe des cas exceptionnels pour lesquels il est nécessaire de définir un destructeur. Ce sont les cas où des allocations de ressources ne sont pas assurées par le langage (programmation système, utilisation du langage C, …) L'activation du garbage-collector se fait durant l'exécution du programme. Pour des raisons de performances, il peut être utile de maîtriser son activation. Pour cela, la classe System contient la méthode gc() permettant d'activer le garbage-collector.
Cours "Systèmes et réseaux répartis" NFP 214 par Jacques LAFORGUE ([email protected]) version du 27/11/2014 slide numéro 21
d'activer le garbage-collector. Plus de pointeurs
La notion de pointeur en tant qu'élément du langage disparaît complètement.
Ainsi, la grande majorité des erreurs désastreuses de pointeurs mal initialisés, confondus, ... n'existent plus en JAVA.Les objets sont référencésLes tableaux contiennent soit des types primitifs, soit des référencesLes tableaux sont des objets au sens LOO
Les mécanismes de JAVA (2/3)
Les exceptionsLa gestion des exceptions est le seul moyen moderne et robuste de gérer les cas d'erreur d'un programme. Les exceptions en JAVA sont de véritables objets et héritent toutes de la classe prédéfinies Exception. Il est ainsi possible de créer ses propres "familles" d'exception sous forme de sous-classes et de particulariser les traitements d'erreur.Un grand nombre d'exceptions prédéfinies existent. Chacune d'entre elles est liée à une classe bien précise.
Cours "Systèmes et réseaux répartis" NFP 214 par Jacques LAFORGUE ([email protected]) version du 27/11/2014 slide numéro 22
Chacune d'entre elles est liée à une classe bien précise.Toutes les erreurs d'exécution sont récupérées par ces dernières et peuvent être traitées par le programmeur. La pile des appels successifs des méthodes qui a entraîné l'erreur est accessible et permet de situer très facilement le problème. La difficulté réside dans la connaissance de toutes ces exceptions qui sont très nombreuses. Chaque package défini ses exceptions.
Les mécanismes de JAVA (3/3)
La réflexivité du langageexploration du contenu des classes et des interfacescréation dynamique de classeinvocation par nom des éléments du langage
Le chargement dynamique des classesLes mutex sont intégrés dans les classes du langage
Cours "Systèmes et réseaux répartis" NFP 214 par Jacques LAFORGUE ([email protected]) version du 27/11/2014 slide numéro 23
Le passage de paramètre
L'unique forme de passage des paramètres à une méthode est le passage par valeurLa seule manière de retourner un résultat est de retourner cette valeur par la valeur de la méthodeLes méthodes Java peuvent retourner un objet, un type primitif ou un void
L'objet retourné est unique Cela impose de formaliser sous forme d'objet les valeurs retournées (ce qui n'est pas plus mal en programmation objet).
Pour changer le contenu d'un objet le passage par valeur est suffisant
Cours "Systèmes et réseaux répartis" NFP 214 par Jacques LAFORGUE ([email protected]) version du 27/11/2014 slide numéro 24
Pour changer le contenu d'un objet le passage par valeur est suffisant puisque c'est la référence à l'objet qui est passée en paramètre
Mais attention à cette pratique: elle est contraire à tous les usages d'une programmation objet
Les API de JAVA (1/3)
Cours "Systèmes et réseaux répartis" NFP 214 par Jacques LAFORGUE ([email protected]) version du 27/11/2014 slide numéro 25
Les API de JAVA (2/3)
Cours "Systèmes et réseaux répartis" NFP 214 par Jacques LAFORGUE ([email protected]) version du 27/11/2014 slide numéro 26
Les API de JAVA (3/3)
Cours "Systèmes et réseaux répartis" NFP 214 par Jacques LAFORGUE ([email protected]) version du 27/11/2014 slide numéro 27
Propriétés avancées
Java est sécuriséIndispensable avec le code mobile.Pris en charge dans l'interpréteur.Trois couches de sécurité :
Verifier : vérifie le byte code.Class Loader : responsable du chargement des classes.Security Manager : accès aux ressources.
Code certifié par une clé.
Java est multi-threadIntégrés au langage et aux API :
synchronized
Cours "Systèmes et réseaux répartis" NFP 214 par Jacques LAFORGUE ([email protected]) version du 27/11/2014 slide numéro 28
synchronized garbage collector dans un thread de basse prioritéjava.lang.Thread, java.lang.Runnable
Accès concurrents à objet gérés par un monitor.Implémentation propre à chaque JVM.
Java est distribuéAPI réseau (java.net.Socket, java.net.URL, ...).Chargement de code dynamique.Applet.Servlet.Remote Method Invocation.JavaIDL (CORBA)
Résumé des différences avec le C++ (1/2)
Pas de structures ni d’unionsPas de typedefPas de préprocesseurPas de variables ni de fonctions en dehors des classesPas d'héritage multiple de classesPas de "template" (sauf depuis la 1.5)Pas de surcharge d’opérateursPas de passage par référence des paramètres
Cours "Systèmes et réseaux répartis" NFP 214 par Jacques LAFORGUE ([email protected]) version du 27/11/2014 slide numéro 29
Pas de passage par référence des paramètresPas de pointeurs, seulement des référencesExceptions : plus formels et plus étendues
Résumé des différences avec le C++ (2/2)
Garbage-collector intégré: inutile de détruire les objets créésPas de « makefile »Packages = répertoiresArchivages (.jar)Les tableaux sont des objetsLes chaînes de caractères sont toutes des constantesLa syntaxe est celle du C++Pas de .h
Cours "Systèmes et réseaux répartis" NFP 214 par Jacques LAFORGUE ([email protected]) version du 27/11/2014 slide numéro 30
Pas de .hL'interfaceLes commentaires sont ceux du C++ (// /*..*/)Commentaires de documentation (/**..*/)Pas de "dynamic-cast" : un cast uniqueJava est un langage objet à liaison dynamiqueA partir de la version 1.5, "auto-boxing" des types primitifs
Les outils (1/2)
Développement et exécutionEnvironnements de développement :
Sun JDK 1.1.x (compilateur, JVM, appletviewer,...)Sun Java 2 SDK 1.x (x > 2) (compilateur, JVM, appletviewer,...)java-mode emacsIDE : IBM Visual Age, Borland JBuilder, Sun Forte,Symantec Visual Café, Metrowerks CodeWarrior, MS Visual J++, ...
Browsers :Netscape NavigatorInternet Explorer
Cours "Systèmes et réseaux répartis" NFP 214 par Jacques LAFORGUE ([email protected]) version du 27/11/2014 slide numéro 31
Internet ExplorerSun HotJava
Machines virtuellesSun JREAutre JVM : IBM, ...
AutresConvertisseur : c2j, j2c, Tabo...Décompilateur/ 'obscurcisseur' : Mocha / CremaGénérateur de parseurs : JavaCC, JavaCUPProfiler : Jprobe, Optimize It, Quantify, ...
Les outils (2/2)
Java / Software Développement Kitjavac : compilateur de sources javajava : interpréteur de byte codeappletviewer : interpréteur d'appletjavadoc : générateur de documentation (HTML, MIF)javah : générateur de header pour l'appel de méthodes nativesjavap : désassembleur de byte codejdb : debuggerjavakey : générateur de clés pour la signature de code
Cours "Systèmes et réseaux répartis" NFP 214 par Jacques LAFORGUE ([email protected]) version du 27/11/2014 slide numéro 32
javakey : générateur de clés pour la signature de codermic : compilateur de stubs RMIrmiregistry : "Object Request Broker" RMI….