Annexe B : Le langage java B. Le Langage JAVA 1. PRESENTATION DU LANGAGE Java est un langage orienté objet, simple et compact, très proche du C++, mais avec une certaine simplification de quelques mécanismes ( comme la gestion automatique de la mémoire et l’absence des pointeurs …). Ses caractéristiques sont à l’origine de son sucée comme langage privilégie sur le Web. Simple, ne veut pas dire que c’est un langage aisé à maître en œuvre, mais qu’il supprime quelques difficultés rencontrées en C++, comme sa surcharge d’opérateurs, l’héritage multiple de la gestion de la mémoire . Java est composé de 3 éléments : - Un langage de programmation. - Une machine virtuelle ( JVM ). - Un ensemble de classes standard réparties dans différentes API. 2. PRINCIPALES CARACTERISTIQUES DE JAVA 2.1. Java est orienté objet Au–delà des concepts qu’il met en œuvre ( notions de classe, d’instance, de méthode, d’héritage ), il permet de développer des applications professionnelles robustes et maintenables. 2.2. Java est orienté réseau Il permet d’accéder à des ressources distribuées, n’importe où sur l’Internet ou l’Intranet, via des URL, aussi aisément qu’un accès à des fichiers locaux. 2.3. Java est portable Il s’appuie sur un ensemble de bibliothèques ( le code est indépendant de la plate –forme matérielle). Du fait que le programme source est compilé en pseudo code, toute machine possède à l’intérieur un interpréteur Java pourra l’interpréter. De plus, l’implémentation physique des différents types de données est indépendante de la machine d’accueil contrairement à C et C++. Annexe B : 2.4. Le langage java Java est sûr -Au niveau du langage La gestion de la mémoire et l’absence des pointeurs assurent un certain niveau de sécurité. -Au niveau de l’environnement Un gestionnaire de sécurité, qui teste la qualité et le format du pseudo-code, est inclus dans le compilateur. En fin, l’accès aux fichiers externes du client est sévèrement limité ( même interdit par certains navigateur ), mais peut être explicitement étendu en fonction de besoins ponctuels. Le compilateur Java génère un byte code exécutable par la JVM. Grâce à ce mécanisme un programme Java est exécutable dans n'importe quel environnement disposant d'une JVM. Cela permet aussi de faire du chargement dynamique de classes. Le chargement des classes est géré par un classloader redéfinissable et permettant, par exemple, de télécharger le byte code d'une classe par HTTP. Une fois la classe chargée dans la JVM, il est possible de créer des instances ou de faire de l'introspection. Annexe B : Le langage java 3. LES API DE JAVA Java est accompagné d'une librairie standard composée, actuellement, de 500 classes réparties en plus de 20API dont : JDK API : java.util : classes utilitaires (gestion des dates, tableaux dynamiques, piles, ...) java.io : manipulation des entrées/sorties sous forme de flux. java.net : accès réseaux via les sockets TPC, les datagrammes UDP, le multicast et les URL. java.awt et javax.swing : classes permettant de construire une interface graphique (reposant sur le système de fenêtrage de la plateforme). Java entreprise API jdbc : accès homogène aux bases de données. rmi : invocation de méthodes sur des objets distribués. javaIDL : mapping Java pour CORBA. jndi* : interface d'accès unifiés aux service d'annuaires. jts : accès aux services transactionnel. Java Beans API : architecture de composants logiciels Java Security API : signature digitale, cryptage et authentification Java Server API : classe pour le développement de serveurs extensibles grâce au concept de Servlets Java Commerce API* : classes pour le commerce électronique Java Media API* : classes pour le multimédia (java Media Framework, java 2D, java 3D, java Animation, java Telephony, java Speech, ...) Java Management API : classes pour l'administration réseau (*) En cours d'élaboration. 4. NOTIONS DE BASES 4.1. Les Objets de Java Alors dans une programmation dite structurée, les données et instructions sont dissociées au niveau du code(La partie données décrit les structures de données et la partie procédures manipule ses données ). La programmation objet s’acharne à les rassembler, données et procédures sont en capsulées, C’est à dire regroupées dans une entité : L’Objet. 4.2. Les classes java Une classe est la description d’une famille d’objets ayant la même structure et le même comportement. Elle regroupe un ensemble de données et de procédures ou des méthodes. Chaque classe possède deux types deux composants : - La partie statique : les données qui sont des champs nommées pouvant recevoir une valeur. Annexe B : - Le langage java La partie dynamique : les procédures ou les méthodes qui représentent le comportement de l’objet. 4.3. La notion d’héritage L’héritage donne à tout objet la possibilité d’utiliser les propriétés et les méthodes appliquées à un objet dont il dérive. Un modèle qui hérite, peut évidemment décrire en plus des variables et méthodes qui peuvent à leurs tours être héritées d’ un autre modèle. 4.4. Le polymorphisme Le polymorphisme est une technologie qui permet d’envoyer un même message à des objets issus de classes différentes. Les objets acquièrent ainsi la capacité de répondre à la requête suivant des règles de comportement propre à leur classe. 4.5. L’encapsulation Un programme contient deux composants indissociables : les données et le code. En programmation structurée classique, le développeur découpe son application en fonctions et utilise un nombre irréductible de variables et constantes. Il se concentre alors sur le développement de ces routines au détriment des données. Souvent alors l’ajout de nouveau pointeurs n’est pas automatiquement pris en compte par le code déjà existant. Face à ces problèmes coûteux en maintenance, la programmation objet fourni une solution avec le concept d’encapsulation : données et procédure sont regroupées dans un élément : la classe. 4.6. Les applications Une application java est un programme général écrit dans le langage java et qui ne nécessite aucun navigateur ou une interaction obligatoire avec un serveur Web pour son exécution. Par exemple le programme SUN Hotjava est une application java. L’application se rapproche de la notion habituelle de programme, hormis le fait qu’elle est interprétée au fur et à mesure par l’interpréteur java. Une application est un fichier local présent sur le client ( et non télécharger de puis un serveur ). L’application correspond à la définition d’une nouvelle classe, qui doit posséder un point d’entrée : la méthode main(). On exécutera cette application à partir du système d’exploitation, en faisant appel à l’interpréteur et en lui passant le nom du fichier .class en paramètre d’entrée . Annexe B : 4.7. Le langage java Les applets L’applet java est une application particulière, stockée dans un serveur Web et télécharger par le navigateur, puis exécutée et interprétée par le client. L’applet est exécutée automatiquement, sans qu’il faille cliquer ou déclencher un avènement particulier, dés le téléchargement de la page HTML. Les résultats ne sont pas envoyer à la sortie standard comme pour l’application, mais à l’intérieur de la page d’appel, selon des méthode d’affichage particulières. Une applet est une classe Java compilée. Cette classe hérite d'une classe mère (java.applet.Applet) qui lui donne une certaine interface (init(), start(), paint(), stop()). L'applet spécifie son comportement en redéfinissant les méthodes de cette interface. Les applets sont véhiculées dans les pages HTML. Lorsqu'un browser, compatible Java (i.e. : possèdant une JVM), reçoit une page HTML contenant l'URL d'une applet, il télécharge (par HTTP) le code de cette classe, crée une nouvelle instance, lui alloue une zone dans la page HTML et enchaîne l'invocation des méthodes propre à l'applet (init(), start(), ...). C'est alors une véritable application qui s'exécute dans la page HTML, qui peut construire et gérer une interface graphique, créer de nouveaux threads, ouvrir des connections réseau, etc. Néanmoins, pour des raisons évidentes de sécurité, l'applet est soumise au Security Manager du browser qui peut lui interdire (c'est le cas pour Netscape Navigator et Internet Explorer) l'accès en lecture et en écriture au disque du client, les connections réseau sur une autre machine que celle d'où elle provient, le lancement de processus, le chargement d'une libraire partagée, etc. Grâce aux applets on peut envisager de nouvelle perspective pour le Web en diffusant : - Des applets affichants des ressources, éventuellement interactives, que ne savent pas gérer les browsers (documents structurés, images 3D, animations, ….). - Des applications traditionnelles (outils bureautiques, applications pédagogiques , jeux ) - Des client d'applications distribuées(accès aux bases de données, forum de discutions, jeux multi-joueurs, ...) La transformation d'une application Java (possèdant une interface graphique) en applet ne nécessite que quelques lignes de code en plus. Ceci permet, pour un coût unique, de développer une application qui pourra être exécutée localement ou bien diffusée sur le Web. Annexe B : Le langage java Figure : Les étapes d’exécution d’une applet 5. QU’EST CE QU’APPORTE JAVA ? Java offre un environnement complet et homogène de développement d'applications généralistes. Il permet des conceptions élégantes et souples (interfaces, exceptions, threads, ...) et des implémentations rapides (nombreuses API), portables (byte code), robustes (exceptions) et réutilisables (pacakges et Java Beans). L'engouement pour Java d'une grande partie de la communauté informatique (constructeurs, éditeurs, développeur, chercheurs et enseignants) lui assure un certain dynamisme. La portabilité et la réutilisabilité du code Java permettent au programmeur de voir ses développements diffusés à grande échelle. Du point de vue de la distribution, l'apport essentiel de Java est la possibilité de télécharger dynamiquement des classes et de faire de l'introspection sur ces classes (renseignements sur les attributs et les méthodes, instanciation, invocation de méthodes connues seulement à l'exécution, ...). Ces mécanismes, ajoutés aux classes de sérialisation (i.e. : la possibilité de convertir une instance en une suite d'octets et vice-versa) sont les couches de base pour le développement de mécanismes de plus haut niveau tel que RMI, JavaSpace ou les aglets. Tout ceci permet la mise en place de systèmes distribués à moindre coût et avec une grande portabilité. Annexe B : Le langage java 6. QUE MANQUE-T-IL A JAVA ? Dans ce suit on site quelques points noirs : La lenteur est le principal point faible de Java. Les techniques de compilation à la volée (JIT) devrait permettre d'atteindre des vitesses proches de celle d'un code compilé. Plusieurs JVM intégrant ce concept sont en cours de développement. De son coté, Sun a annoncé à la conférence JavaOne qu'une nouvelle architecture de JVM était à l'étude et qu'elle devrait apporter des performances équivalentes à un programme binaire sans recourir à un JIT. Certaines API du JDK , sont encore en cours de spécifications et de nouvelles API sont présentées tous les mois. D'autre part, le client doit être équipé d’un browser compatible à la version de java utilisée sinon on doit développer les applets en 1.0.2 et donc à se priver des apports de la 1.1 et 1.2 ….(RMI, sérialisation, beans, ...).Ce qui a poussé Netscape et Microsoft ont annoncé une mise à niveau de leur browser . Des API mieux conçues. Certaines API sont très décevantes ou incomplètes (e.g. : la classe String est pauvre, on ne peut pas faire de select sur les sockets, ...). Des outils de développement. Le debugger Java est rudimentaire et ne possède pas d'interface graphique, des profilers viennent juste d'apparaître et il n'existe pas de générateur d'interfaces graphiques simple d'emploi. Une JVM supportant la migration d'objets. La migration se décompose en 3 parties : la migration du comportement (ce que permet le téléchargement de classes), la migration de l'état (ce que permet la sérialisation) et la migration du contexte d'exécution, pour laquelle Java n'offre pas de solutions. Ceci n'est nécessaire que lorsque l'objet est géré dans un thread indépendant (sinon l'objet est dans un état stable). Bien que l'on puisse suspendre puis redémarrer un thread, il n'est pas possible de faire migrer une thread entre deux JVM car Java n'offre aucune solution pour connaître et gérer le contexte d'exécution d'un thread. Les systèmes d'agents mobiles (Aglet, Mole , JAT,….), pour lesquels la migration est fondamentale, contourne le problème en avertissant l'objet avant sa migration afin qu'il se met dans un état stable, puis en informant l'objet, après sa migration, qu'il peut reprendre son exécution. Annexe B : Le langage java 7. CONCLUSION En moins de deux ans, Java s'est imposé sur le Web et est de plus en plus reconnu en tant que langage de développement. Java est devenu primordial pour Sun car c'est le cheval de Troie qui va lui permettre de pénétrer le marché juteux de l'Intranet et d'imposer sa technologie dans les architectures des Network Computeur. Pour renforcer la crédibilité de Java, Sun passe de nombreux accords de développement avec les grands noms du marché, fait un gros effort sur les API et a entamé une procédure de standardisation de Java. Java a intégré l'informatique répartie, fournit plusieurs API dans ce sens et offre les couches de bases pour le développement rapide d'application distribuées. Peut-on échapper à Java ? Non ! Java va devenir incontournable pour car : a) il intègre beaucoup d'innovations attendues par les développeurs. b) Sun se donne les moyens de ses ambitions. c) il offre une alternative à Microsoft. Pour ce dernier point, il va attirer tous les éditeurs qui ne veulent plus être liés aux API Windows pour diffuser leurs produits (Corel et Applix vont dans ce sens), tous ce qui ne veulent pas voir Microsoft dominer le marché de l'intranet (Netscape, Lotus, Novell, Apple) et ceux qui veulent imposer les NC (Sun, IBM et Oracle).