java - Free
Transcription
java - Free
Présentation de Java Olivier de Pertat IT GROUP Qu'est-ce que Java ? Un langage de programmation orienté objets Une architecture de Virtual Machine Un ensemble d'API variées Un ensemble d'outils : le Java Runtime Enviromnent le Java SDK Standard Edition le Java SDK Entreprise Edition Historique 1991 : Sun "Green Projet" (informatisation de l’électronique grand public) 1993 : projet Oak (langage embarqué indépendant CPU) 1994 : recentrage sur Internet, réalisation d’un browser en Oak 1995 : Mai 95 : Java (23 mai). WebRunner -> HotJava Mai 95 : Netscape prend la licence Sept. 95 : JDK 1.0 b1 (200 Classes) Déc. 95 : Microsoft se dit intéressé Début des API spécialisées (multimédia, commerce) et JavaComputing (JavaOS… ) Historique 1996 : Java 1.0 - 200 Classes Janv. 96 : JDK 1.0.1 Eté 96 : Java Study Group ISO/IEC JTC 1/SC22 Fin 96 : RMI, JDBC, JavaBeans, ... 1997 : JDK 1.1 – nouveaux services quelques modifications du langage. 1998 : Plateforme Java 2 - JDK 1.2 - 1250 classes – consolidation vers maturité 2000 : Plateforme Java 2 – version 1.3 : amélioration des performances, incorporation d’extensions dans le noyau 2002 : Plateforme Java 2 – version 1.4.1 Principe de compilation C Principe de compilation Java Principe : Code Source $ cat Hello.java public class Hello { public static void main(String [] args) { System.out.println("Hello World !"); } } Principe : Byte Code $ od -x Hello.class 0000000 0000020 0000040 0000060 0000100 0000120 0000140 0000160 0000200 0000220 0000240 feca 1000 1600 0156 6d75 016e 532f 6372 616a 0119 0007 beba 1100 0001 0400 6562 1600 7274 4665 6176 0c00 0c1a 0000 0008 3c06 6f43 5472 5b28 6e69 6c69 000c 6548 1b00 2e00 0a12 6e69 6564 6261 6a4c 3b67 0165 0007 6c6c 1c00 1d00 1300 7469 0001 656c 7661 5629 0a00 0708 5720 0001 000a 1400 013e 4c0f 0001 2f61 0001 6548 1700 726f 4805 0006 090f 0007 0715 0300 2928 6e69 4e65 6d04 6961 616c 676e 530a 756f 6c6c 2e6f 000c 0018 646c 2120 [………EOF…] Les points faibles de Java Les JVM sont beaucoup plus lentes que du code C compilé ; Java est très gourmand en mémoire ; Certaines constructions du langage sont décevantes ; Certaines API sont décevantes ; Java est extrêmement vaste ; Java est tributaire de son évolution rapide. Les caractéristiques du langage Java Orienté objets Interprété Portable Simple Robuste Sécurisé Multi-threads Distribué Un langage orienté objets 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 Il respecte : l’encapsulation, communication par message, polymorphisme et hérite Les objets se manipulent via des références Une API objet standard est fournie La syntaxe est proche de celle de C 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, 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. 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. 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. Difficultés pour la mise au point et le portage. Java est distribué API réseau (java.net.Socket, java.net.URL, ...). Chargement / génération de code dynamique. Applet. Servlet. Protocole / Content handler. Remote Method Invocation. JavaIDL (CORBA). Les performances Actuellement le byte code est interprété. Plusieurs types de génération de code machine : Compilation en code machine à la volée (JIT, HotSpot) ; Machine Virtuelle spécifiques aux Application Servers commerciaux ; Conversion statique en C (j2c, Tabo, ...) ; Conversion statique en code natif. Les différences avec C++ Pas de structures ni d’unions Pas de types énumérés Pas de typedef Pas de préprocesseur Pas de variables ni de fonctions en dehors des classes Pas de fonctions à nombre variable d’arguments Pas d'héritage multiple de classes Pas de types paramétriques (template) Pas de surcharge d’opérateurs Pas de passage par copie pour les objets Pas de pointeurs, seulement des références Les fausses rumeurs sur Java Java n'a rien de commun avec HTML Java n'est pas un langage de script (type Perl ou TCL) Le JavaScript n’est pas du Java ! Java est un langage généraliste type C++ Java != C++ (c'est un langage purement objet, de plus haut niveau, plus proche de SmallTalk) Les outils Environnements de développement : Java 2 standard edition SDK 1.4.x Editeur de texte : VIM, java-mode emacs, Ultra Edit, JEdit Environnements de compilation : ANT, make Outils de test : JUnit IDE : Forte, JBuilder, Visual Age, WebGain, CodeWarrior Atelier UML : Together, Rational Rose Décompileur de byte-code : jad Browsers : Sun HotJava Netscape Navigator 4 et 6 Internet Explorer 4 et 5 (plus pour la prochaine version) Java-Plug-in (tous les browsers) Java 2 Standard Edition SDK 1.4 javac : compilateur de sources java java : interpréteur de byte code (JVM) appletviewer : interpréteur d'applet jar : fabrique les fichier distribuables (bin & lib) jarsigner : signatures numérique des fichiers JAR 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 keytool : gestion des clefs et des certificats orbd :ORB Corba rmic : compilateur de stubs RMI rmiregistry : "Object Request Broker" RMI servertool : Outil d’administration du bus CORBA Les options de la JVM C:\>java Usage: java [-options] class [args...] (to execute a class) or java -jar [-options] jarfile [args...] (to execute a jar file) where options include: -client to select the "client" VM -server to select the "server" VM -hotspot is a synonym for the "client" VM The default VM is client. [deprecated] -cp -classpath <directories and zip/jar files separated by ;> set search path for application classes and resources -D<name>=<value> set a system property -verbose[:class|gc|jni] enable verbose output -version print product version and exit -showversion print product version and continue -? -help print this help message -X print help on non-standard options -ea[:<packagename>...|:<classname>] -enableassertions[:<packagename>...|:<classname>] enable assertions -da[:<packagename>...|:<classname>] -disableassertions[:<packagename>...|:<classname>] disable assertions -esa | -enablesystemassertions enable system assertions -dsa | -disablesystemassertions disable system assertions C:\>java -X -Xmixed mixed mode execution (default) -Xint interpreted mode execution only -Xbootclasspath:<directories and zip/jar files separated by ;> set search path for bootstrap classes and resources -Xbootclasspath/a:<directories and zip/jar files separated by ;> append to end of bootstrap class path -Xbootclasspath/p:<directories and zip/jar files separated by ;> prepend in front of bootstrap class path -Xnoclassgc disable class garbage collection -Xincgc enable incremental garbage collection -Xloggc:<file> log GC status to a file with time stamps -Xbatch disable background compilation -Xms<size> set initial Java heap size -Xmx<size> set maximum Java heap size -Xss<size> set java thread stack size -Xprof output cpu profiling data -Xrunhprof[:help]|[:<option>=<value>, ...] perform JVMPI heap, cpu, or monitor profiling -Xdebug enable remote debugging -Xfuture enable strictest checks, anticipating future default -Xrs reduce use of OS signals by Java/VM (see documentation) -Xcheck:jni perform additional checks for JNI functions Intégration Windows Intégration Internet Explorer Exécutables Java Applications autonomes classiques (Stand Alone applications) Applications sont directement exécutées depuis le système hôte. Possèdent une méthode main Signature : public static void main(String [] args) Composants : Programme hébergé par une autre application. Respecte un protocole défini au préalable (Interfaces). Applets : application Java s’éxecutant au sein d’une page WEB dans un navigateur Internet (Internet Explorer, Mozilla, Netscape… ) ; Servlets : application Java traitant des requêtes client dans un serveur d’application. But généraliste, mais le plus traite des requêtes HTTP. EJB (Entreprise Java Bean) : Application Java Distribuée reflétant l’état d’une session utilisateur (Session Bean), d’une donnée (Entity Bean) ou d’un message (Message Driven Bean). Composant géré par uniquement par des Serveurs d’application Java. Peuvent être transactionnels Application Autonome Programme Java : Exemple : class HelloWorld { public static void main(String args) { System.out.println("Hello World !"); } } Invocation classique : $ java -classpath . HelloWorld Hello World ! Exécutables Java (2/2) Applet : exécution dans un Navigateur Internet public class HelloWorldApplet extends Applet { public void paint(Graphics g) { g.drawString("Hello World !", 50, 20); } } Servlet : exécution dans un serveur d’application (Web Container) public class HelloWorldExample extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { out.println("<html>Hello world !</html>"); } } JAR Invocation depuis une Archive JAR : $ cat MANIFEST.MF Manifest-Version: 1.0 Main-Class: HelloWorld $ jar cfm MyHelloPack.jar MANIFEST.MF HelloWorld.class $ jar –i MyHelloPack.jar $ java -jar MyHelloPack.jar Hello World ! Rendre exécutable les JAR FICHIER JARFile.reg : Windows Registry Editor Version 5.00 [HKEY_CLASSES_ROOT\.JAR] @="JARFile" [HKEY_CLASSES_ROOT\JARFile] "EditFlags"=dword:00000000 "BrowserFlags"=dword:00000008 @="Fichier Java ARchive (exécutables)" [HKEY_CLASSES_ROOT\JARFile\DefaultIcon] @="C:\\Program Files\\Java\\j2re1.4.1\\bin\\jinstall.exe,0" [HKEY_CLASSES_ROOT\JARFile\shell] @="open" [HKEY_CLASSES_ROOT\JARFile\shell\open] [HKEY_CLASSES_ROOT\JARFile\shell\open\command] @="\"C:\\WINDOWS\\System32\\javaw.exe\" -jar \"%1\""