LA GALAXIE JAVA La galaxie Java 1 of 30 La galaxie JAVA • Les lignes de force • Les raisons d’un succès • JAVA dans le système d’information • Comment ça marche? (et est-ce que ça marche?) • L’Objet selon Java La galaxie Java [email protected] 2 of 30 Les lignes de force code réseau APPLET données La galaxie Java [email protected] 3 of 30 Les lignes de force • code multi-plateformes • code dynamique • organisation/modularité • sécurité • multi-tâches La galaxie Java [email protected] 4 of 30 programmer en Java? • formulations élégantes • souci constant de génie logiciel • dispositifs de sécurité ore d j’a A.Faucillon • compromis bien dosés La galaxie Java [email protected] 5 of 30 techniques complémentaires • composants “beans” • e.j.b. • servlets • distribution (RMI, JINI) réseau La galaxie Java [email protected] 6 of 30 librairies utilitaires programmation calculs E/S, E/S objets internationalisation réseau I.H.M. portables, graphique objets distants composants dynamiques accès B.D.D. sécurité La galaxie Java [email protected] 7 of 30 extensions utilitaires devt. système, deploiement graphique, 3D, multimedia b.d.d, transactions réseau, services répartis, annuaires embarqué composants d’entreprise échanges sécurisés JavaCard,.... La galaxie Java [email protected] 8 of 30 Java dans le système d’information pte o ’ad A.Faucillon j de nouvelles applications pour de nouvelles architectures La galaxie Java [email protected] 9 of 30 client léger sur Web serveur HTTP Servlets HTML “navigateur” XML, ... Applet La galaxie Java [email protected] 10 of 30 client “lourd” serveur déploiement contr ôle application serveur applicatif -net intra/extra La galaxie Java [email protected] 11 of 30 nota: Java comme langage d’extension réseau,E/S J.N.I enchassement CORBA Application non JAVA La galaxie Java [email protected] 12 of 30 serveurs d’application appl.B appl.A appl.C persistance RESSOURCES La galaxie Java [email protected] 13 of 30 serveurs hiérarchisés ce n na te m t/ en ain em oi pl dé ifs t ica pl p sa ge n ha éc La galaxie Java [email protected] 14 of 30 services “spontanés” La galaxie Java [email protected] 15 of 30 Comment ça marche ? fichier binaire (pseudo-code) conforme aux spécifications JVM plate-forme de type A JVM (interpréteur spécifique) OS plate-forme de type B librairies java système de fenêtrage JVM (interpréteur spécifique) OS librairies java système de fenêtrage La galaxie Java [email protected] 16 of 30 techniques d’exécution 152 invokestatic #66 <Method java.lang.String valueOf(char)> 155 astore_3 156 goto 203 159 aload_0 160 getfield #56 <Field char lastOp> 163 bipush 61 165 if_icmpne 194 168 aload_0 169 aconst_null 170 putfield #58 <Field java.math.BigDecimal result> 173 aload_0 174 bipush 43 176 putfield #56 <Field char lastOp> lit, exécute lit, exécute .... COMPILATEUR A LA VOLEE (JIT) compile le fichier en codes natifs et les exécute codes natifs en mémoire HOTSPOT interprétation en back-up INTERPRETE compilation optimisée La galaxie Java [email protected] 17 of 30 sécurité • chargeurs de classes • vérificateur de pseudo-code • espaces d’exécution sécurisés : * politique par défaut (“sandbox”) * politiques personnalisées (codes authentifiés + autorisations spécifiques) La galaxie Java [email protected] 18 of 30 dans la soute .... • gestion automatique de la mémoire (glaneur de mémoire + réorganisation dynamique du tas) • gestion de processus légers (ordonnanceur intégré ou threads natifs du système) La galaxie Java [email protected] 19 of 30 L’Objet selon JAVA • ça ressemble à du C++ • ça n’a pas le “goût” du C++ • ce n’est absolument pas du C++ ! La galaxie Java [email protected] 20 of 30 La définition de classe import fr.emse.medialab.util.* ; public class UneClasse extends SuperClasse { //membres public final String oid ; private Chose obj ;..... public void setChose(Chose arg) {// mutateur obj=arg ; } public static class Comparator extends Chose.Comparator {// classe membre! int compare(Object o1, Object o2){ return super.compare( ((Unclasse)o1).obj, ((UneClasse)o2).obj) ; } } // pas de surcharge d’opérateur // non membres public UneClasse(Truc truc, Chose obj){//constructeur super(truc); oid = truc.toString() ;...... }//pas de destructeur (ou presque) } // RIEN EN DEHORS DE LA CLASSE! La galaxie Java [email protected] 21 of 30 rien hors de la classe • pas de variables ou de fonctions “globales” double ix = Math.sin( iy * Math.PI) ; double iz = StrictMath.sin(valeur) ; • pas de fichier “include” les contrôles de types fonctionnent par introspection du binaire des classes La galaxie Java [email protected] 22 of 30 encapsulation Les classes sont regroupées dans des “packages” fr.emse.medialab.graphics edu.mit.medialab.graphics L’encapsulation se considère: • au niveau de la classe (private), • au niveau du package (par défaut), • au niveau d’une relation d’héritage (protected) La galaxie Java [email protected] 23 of 30 types type variable != classe de l’ instance! • aspect conceptuel Manager leSousChef; // extends Salarie .... Manager lePatron = new PDG(...); // extends Manager Salarie[] employés = { leLampiste, leSousChef, lePatron} • aspect “physique” PDG chef = new PDG(..); Manager reChef = chef ; chef // tout est “référence” reChef • aspect évaluation (méthodes d’instance virtuelles) La galaxie Java [email protected] 24 of 30 polymorphisme: héritage • on n’hérite que d’une seule classe • on ne peut aggraver le “contrat” * pas d’encapsulation aggravée * pas “plus” d’exception le type des exceptions propagées fait partie de la spécification des méthodes * par contre possibilité de surcharger des méthodes de la super-classe • on peut bloquer toute tentative de redéfinition (modificateur final) La galaxie Java [email protected] 25 of 30 types abstraits purs public class Client { ..... Messager messager ; ..... public interface Messager { public void envoiMessage(String message); } public class Fax extends Telephone implements Messager { public void envoiMessage(String message) { ... public class EMail extends AgentReseau implements Messager { public void envoiMessage(String message) { ... Client dupond, durand ; .... dupond.messager = new Fax(“0141331733”) ; durand.messager = new EMail(“[email protected]”) ; .... for (int ct= 0 ; ct < tableauClient.length; ct++){ tableauClient[ct].messager.envoiMessage( “Tout va bien!”); } La galaxie Java [email protected] 26 of 30 accès/ réseau . IHM Base de Données requêtes texte R serveur intermédiaire EU RV CE A RF TE SE pseudo-base (tests) IN La galaxie Java [email protected] 27 of 30 Classes membres public class Pile { private Object[] tableExtensible ; private int sommetDePile ; ... private class ParcoursPile implements java.util.Enumeration { int index = sommetDePile ; public boolean hasMoreElements(){ return index >= 0; } public Object nextElement(){ return tableExtensible[index--]; } }// fin parcoursPile public java.util.Enumeration elements() { return new ParcoursPile(); } ... } La galaxie Java [email protected] 28 of 30 Autres caractéristiques • gestion exceptions • processus et concurrence d’accès • prise en compte de la répartition sur réseau • documentation intégrée La galaxie Java [email protected] 29 of 30 des savoir-faires en devenir • idiomes, “patterns”, bonnes pratiques • relations conception/réalisation La galaxie Java [email protected] 30 of 30