Java, survol historique et technologique Sébastien Jean IUT de Valence Département Informatique v11.2, 22 janvier 2017 Introduction à Java Historique Un peu d’histoire. . . 1991 → 1992 : Green Project (Sun Microsystems) Idée : Portage et déploiement simplifié d’applications vers des équipements électroniques hétérogènes La technologie est au point, mais elle ne trouve pas son marché → fail ! Fail ? → First Attempt In Learning Sébastien Jean (IUT Valence) M2103, Introduction v11.2, 22 janvier 2017 1 / 16 Introduction à Java Historique Un peu d’histoire. . . 1991 → 1997 : Le Web émerge et se développe à grande vitesse Très rapidement de nouveaux besoins se font sentir, tout particulièrement la possibilité de déporter du code chez le client Le Green Project trouve enfin sa place → naissance de Java ! En 1997, Java s’invite dans la carte à puce JavaCard Sébastien Jean (IUT Valence) M2103, Introduction v11.2, 22 janvier 2017 2 / 16 Introduction à Java Historique Un peu d’histoire. . . A partir de 1998, le Web devient support du commerce électronique Java se sépare en deux versions Standard Edition (SE), pour les applications clientes Enterprise Edition (EE), pour les architectures serveurs N-Tiers Web Sébastien Jean (IUT Valence) M2103, Introduction v11.2, 22 janvier 2017 3 / 16 Introduction à Java Historique Un peu d’histoire. . . En 2000, Java envahit les PDAs, smartphones et autres équipements embarqués communicants Une 3e branche voit le jour : Micro Edition (ME) Sébastien Jean (IUT Valence) M2103, Introduction v11.2, 22 janvier 2017 4 / 16 Introduction à Java Historique Un peu d’histoire. . . En 2007, la technologie Java est versée dans l’open source En 2009, Oracle rachète Sun MicroSystems Sébastien Jean (IUT Valence) M2103, Introduction v11.2, 22 janvier 2017 5 / 16 Introduction à Java Historique Un peu d’histoire. . . En 2009, Google lance une alternative à JavaME : Android Aujourd’hui, Java est partout Sébastien Jean (IUT Valence) M2103, Introduction v11.2, 22 janvier 2017 6 / 16 Introduction à Java Historique Maturité de Java Langage le plus utilisé actuellement (source : Tiobe, 01/2017) 17.5% des développements sont réalisés en Java La communauté compte une dizaine de millions de développeurs Roadmap jusqu’en 2020, spécifications très cadrées Sébastien Jean (IUT Valence) M2103, Introduction v11.2, 22 janvier 2017 7 / 16 Introduction à Java Qu’est-ce que Java ? Java, portrait robot Interprété, à bytecode Langage orienté objet Fortement typé Permettant un certain niveau de meta-programmation Sébastien Jean (IUT Valence) M2103, Introduction v11.2, 22 janvier 2017 8 / 16 Introduction à Java Compilation et interprétation Langages compilés : du code source à l’exécution Exemple simplifié du langage C Exécution du fichier (code natif) en ligne de commande sous Linux-x86 Fichier exécutable sur Linux-x86 Code source C .c .out Préprocesseur C Editeur de lien Linux-x86 Exécution du fichier (code natif) en ligne de commande sous none-arm Résolution des liaisons statiques Inclusions conditionnelles Remplacement des alias Expansion des macros .O .c .o Code objet Compilateur C Linux-x86 .s Assembleur x86 Analyse syntaxique Traduction en assembleur x86 (+ respect du modèle d'exécution Linux) Code assembleur Traduction en code natif x86 + table de symboles Sébastien Jean (IUT Valence) M2103, Introduction v11.2, 22 janvier 2017 9 / 16 Introduction à Java Compilation et interprétation Langages de scripts : du code source à l’exécution Exemple simplifié du langage JavaScript Interprétation par l'interpréteur JavaScript embarqué dans Safari sous MacOsX Code source Javascript .js JS Interprétation par l'interpréteur JavaScript embarqué dans Firefox sous Linux-x86 JS Interprétation par l'interpréteur JavaScript embarqué dans Chrome sous Android-x86 JS Analyse syntaxique et édition de liens incrémentales Traduction vers du code natif Sébastien Jean (IUT Valence) M2103, Introduction v11.2, 22 janvier 2017 10 / 16 Introduction à Java Compilation et interprétation Langages à bytecode : du code source à l’exécution Exemple du langage Java Code source Java .java Exécution de l'application Java par exécution de la JVM (interpréteur Java) en ligne de commande sous Windows-x86 .class Executable Java Compilateur Java .class Analyse syntaxique, Vérification des types, Traduction en bytecode Java Exécution de l'application Java par exécution de la JVM (interpréteur Java) en ligne de commande sous Linux-arm .class Chargement de code et édition de liens dynamiques Traduction du bytecode en code natif Sébastien Jean (IUT Valence) M2103, Introduction v11.2, 22 janvier 2017 11 / 16 Introduction à Java Java(s) Eléments caractéristiques d’une distribution Java JVM (Java Virtual Machine) Spécification unique (bytecodes, types de données), mais pouvant être contrainte selon la classe d’équipement Eléments de langage Spécifications successives, pouvant également être adaptées Framework Ensemble de bibliothèques spécifiques à la classe d’équipement ou au domaine d’application Cadre contraignant la conception des applications Remarque : JVM + Framework = Runtime Sébastien Jean (IUT Valence) M2103, Introduction v11.2, 22 janvier 2017 12 / 16 Introduction à Java Java(s) La famille Java officielle Java SE (standard edition) → postes de travail, embarqué puissant JVM standard + tous éléments de langage + framework standard Java EE (entreprise edition) → architectures logicielles N-Tiers JVM standard + tous éléments de langage + framework étendu Java ME (micro edition) → embarqué contraint JVM standard ou spécifique (CVM, KVM) + éléments de langage réduits (1.3) + framework spécifique (profil) JavaCard → cartes à puce JVM spécifique (JCVM) + éléments de langage spécifiques + framework spécifique Sébastien Jean (IUT Valence) M2103, Introduction v11.2, 22 janvier 2017 13 / 16 Introduction à Java Java(s) La famille Java non officielle Distributions Java spécifiques dans le domaine de l’embarqué Tini, JStamp, LeJOS (Lego NXT), SunSpot, VirtualSense, MicroEJ Android Machine virtuelle ad’hoc (Dalvik/ART) Outils de génération de code supplémentaires Framework spécifique, centré sur l’IHM (activités) Sébastien Jean (IUT Valence) M2103, Introduction v11.2, 22 janvier 2017 14 / 16 Introduction à Java Java(s) Bibliothèques standards (très court extrait) JDBC (Java DataBase Connectivity) Interaction avec des bases de données relationnelles (mySQL, . . . ) AWT / Swing, JavaFX Création d’interfaces graphiques Java2D, JAI (Java Advanced Imaging) Manipulation et traitement d’images Java3D, JMF (Java Media Framework) 3D, multimédia Java Security, JCE (Java Cryptography Extension) Authentification, contrôle d’accès, chiffrement, . . . JNI (Java Native Interface) Interaction avec des programmes natifs Sébastien Jean (IUT Valence) M2103, Introduction v11.2, 22 janvier 2017 15 / 16 Introduction à Java Java(s) Fin ! Sébastien Jean (IUT Valence) M2103, Introduction v11.2, 22 janvier 2017 16 / 16