java - par Jacques LAFORGUE

publicité
Présentation du langage JAVA
Cours "Réseaux et systèmes répartis" NFP 214 par Jacques LAFORGUE ([email protected])
version du 27/11/2014
slide numéro 1
JAVA est un vrai langage
JAVA est un langage de programmation à part entière
L’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 incontournable
A 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 licence
Sept. 95
: JDK 1.0 b1
Mai 96
: JDK 1.0.2, première version réellement utilisable
Fin 96
: RMI, JDBC, JavaBeans, ...
Fév. 97
: JDK 1.1
Déc. 98
: Java 2 SDK 1.2, apparition du terme Plate-forme Java
1999 : Forte orientation de Sun vers le coté serveur
plate-forme J2EE : Servlets, JSP et serveurs d ’application.
2000 : Java 2 SDK 1.3
2001 : Java 2 SDK 1.4
2006 Java 2 EE (SDK 1.5)
2007 Java 2 EE (SDK 1.6)
Cours "Systèmes et réseaux répartis" NFP 214 par Jacques LAFORGUE ([email protected])
version du 27/11/2014
slide numéro 3
JAVA est :
simple,
orienté objet,
familier,
distribué,
robuste,
sûre,
portable,
dynamique
et multithread
JAVA est plus qu'un langage
Cours "Systèmes et réseaux répartis" NFP 214 par Jacques LAFORGUE ([email protected])
version du 27/11/2014
slide numéro 4
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).
Seules les conversions sûres sont automatiques.
Contrôle des cast à l'execution
Cours "Systèmes et réseaux répartis" NFP 214 par Jacques LAFORGUE ([email protected])
version du 27/11/2014
slide numéro 5
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 Library
C'est un ensemble de tags personnalisés développé sous la JSR 052 qui
propose des fonctionnalités souvent rencontrées dans les JSP :
Tag de structure (itération, conditionnement ...)
Internationalisation
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.
Cours "Systèmes et réseaux répartis" NFP 214 par Jacques LAFORGUE ([email protected])
version du 27/11/2014
slide numéro 7
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 tableaux
Toutes les classes dérivent de java.lang.Object
Héritage simple pour les classes
Une classe peut implémenter plusieurs interfaces : héritage multiple des
méthodes.
Les objets se manipulent via des références
Une API objet standard est fournie
La syntaxe est proche de celle de C
Cours "Systèmes et réseaux répartis" NFP 214 par Jacques LAFORGUE ([email protected])
version du 27/11/2014
slide numéro 9
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 commun
Tout programme Java est interprété
soit c'est une classe contenant une méthode main
soit c'est un package qui contient une classe qui contient une méthode main
soit 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 abstraites
Depuis 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
hé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.
Cours "Systèmes et réseaux répartis" NFP 214 par Jacques LAFORGUE ([email protected])
version du 27/11/2014
slide numéro 12
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;
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);
}
.....
}
Cours "Systèmes et réseaux répartis" NFP 214 par Jacques LAFORGUE ([email protected])
version du 27/11/2014
slide numéro 13
Les phases de génération
Fichiers sources .java de type texte
appartenant ou non à un package
contenant 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
associé.
Il n’existe plus de .h !!!
Compilation des fichiers sources en .class
La compilation d'un fichier .java génère autant de fichier .class que de classes
définies dans le fichier.
Cela impose que toutes les classes Java doivent être de nom différent, dans
un même package
Nous 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, ...).
Cours "Systèmes et réseaux répartis" NFP 214 par Jacques LAFORGUE ([email protected])
version du 27/11/2014
slide numéro 14
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 autonome
un AppletViewer
qui visualise un applet
un 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.
Cours "Systèmes et réseaux répartis" NFP 214 par Jacques LAFORGUE ([email protected])
version du 27/11/2014
slide numéro 15
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
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)
dans sa classe d'appartenance.
Deux familles de type :
les types primitifs
les types d'objet (classes, interfaces)
L'interface joue un grand rôle dans la programmation en Java
contrat, abstraction, généricité, polymorphisme, délégation
Cours "Systèmes et réseaux répartis" NFP 214 par Jacques LAFORGUE ([email protected])
version du 27/11/2014
slide numéro 19
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).
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.
Cours "Systèmes et réseaux répartis" NFP 214 par Jacques LAFORGUE ([email protected])
version du 27/11/2014
slide numéro 20
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.
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és
Les tableaux contiennent soit des types primitifs, soit des références
Les tableaux sont des objets au sens LOO
Cours "Systèmes et réseaux répartis" NFP 214 par Jacques LAFORGUE ([email protected])
version du 27/11/2014
slide numéro 21
Les mécanismes de JAVA (2/3)
Les exceptions
La 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.
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.
Cours "Systèmes et réseaux répartis" NFP 214 par Jacques LAFORGUE ([email protected])
version du 27/11/2014
slide numéro 22
Les mécanismes de JAVA (3/3)
La réflexivité du langage
exploration du contenu des classes et des interfaces
création dynamique de classe
invocation par nom des éléments du langage
Le chargement dynamique des classes
Les 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 valeur
La seule manière de retourner un résultat est de retourner cette valeur
par la valeur de la méthode
Les 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
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
Cours "Systèmes et réseaux répartis" NFP 214 par Jacques LAFORGUE ([email protected])
version du 27/11/2014
slide numéro 24
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-thread
Intégrés au langage et aux API :
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)
Cours "Systèmes et réseaux répartis" NFP 214 par Jacques LAFORGUE ([email protected])
version du 27/11/2014
slide numéro 28
Résumé des différences avec le C++ (1/2)
Pas de structures ni d’unions
Pas de typedef
Pas de préprocesseur
Pas de variables ni de fonctions en dehors des classes
Pas d'héritage multiple de classes
Pas de "template" (sauf depuis la 1.5)
Pas de surcharge d’opérateurs
Pas de passage par référence des paramètres
Pas de pointeurs, seulement des références
Exceptions : plus formels et plus étendues
Cours "Systèmes et réseaux répartis" NFP 214 par Jacques LAFORGUE ([email protected])
version du 27/11/2014
slide numéro 29
Résumé des différences avec le C++ (2/2)
Garbage-collector intégré: inutile de détruire les objets créés
Pas de « makefile »
Packages = répertoires
Archivages (.jar)
Les tableaux sont des objets
Les chaînes de caractères sont toutes des constantes
La syntaxe est celle du C++
Pas de .h
L'interface
Les commentaires sont ceux du C++ (// /*..*/)
Commentaires de documentation (/**..*/)
Pas de "dynamic-cast" : un cast unique
Java est un langage objet à liaison dynamique
A partir de la version 1.5, "auto-boxing" des types primitifs
Cours "Systèmes et réseaux répartis" NFP 214 par Jacques LAFORGUE ([email protected])
version du 27/11/2014
slide numéro 30
Les outils (1/2)
Développement et exécution
Environnements de développement :
Sun JDK 1.1.x (compilateur, JVM, appletviewer,...)
Sun Java 2 SDK 1.x (x > 2) (compilateur, JVM, appletviewer,...)
java-mode emacs
IDE : IBM Visual Age, Borland JBuilder, Sun Forte,
Symantec Visual Café, Metrowerks CodeWarrior, MS Visual J++, ...
Browsers :
Netscape Navigator
Internet Explorer
Sun HotJava
Machines virtuelles
Sun JRE
Autre JVM : IBM, ...
Autres
Convertisseur : c2j, j2c, Tabo...
Décompilateur/ 'obscurcisseur' : Mocha / Crema
Générateur de parseurs : JavaCC, JavaCUP
Profiler : Jprobe, Optimize It, Quantify, ...
Cours "Systèmes et réseaux répartis" NFP 214 par Jacques LAFORGUE ([email protected])
version du 27/11/2014
slide numéro 31
Les outils (2/2)
Java / Software Développement Kit
javac
: compilateur de sources java
java
: interpréteur de byte code
appletviewer
: interpréteur d'applet
javadoc
: générateur de documentation (HTML, MIF)
javah
: générateur de header pour l'appel de méthodes natives
javap
: désassembleur de byte code
jdb
: debugger
javakey
: générateur de clés pour la signature de code
rmic
: compilateur de stubs RMI
rmiregistry : "Object Request Broker" RMI
….
Cours "Systèmes et réseaux répartis" NFP 214 par Jacques LAFORGUE ([email protected])
version du 27/11/2014
slide numéro 32
Téléchargement