Introduction à JAVA
Transcription
Introduction à JAVA
Introduction à JAVA Philippe Roose (IUT Bayonne) Olivier Dedieu (INRIA) Mais JAVA…c ’est quoi ? ■ ■ ■ Langage OO Exécuté dans une Machine Virtuelle Possède un ensemble complet d ’API (réseau, graphique, sécurité, …) De OAK à JAVA ■ ■ ■ ■ ■ ■ ■ ■ ■ 1993 : Projet Oak (langage pour l'électronique grand public, l ’électroménager, …) Mai 95 : Netscape prend la licence Sept. 95 : JDK 1.0 b1 Déc. 95 : Microsoft se dit intéressé Janv. 96 : JDK 1.0.1 Fin 96 : RMI, JDBC, JavaBeans, ... Fév. 97 : JDK 1.1 JDK 1.2 JDK 1.3 Java n ’est pas... ■ ■ ■ ■ …du HTML, ni même une variante. …comparable à des langages de script à la TCL/Tk, Perl…et surtout pas à…JavaScript …n ’est pas aussi permissif que le C++, plus proche de SmallTalk dans la philosophie. …limité au Applet. Il est tout à fait envisageable de réaliser des applications complète, professionnelle (HotJava, NetBean, ELKAR (!), …). Java est…en bref... ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ Orienté objets Interprété Portable Simple Robuste Sécurisé Multi-threads Distribué Rapide (maintenant !) En évolution (ajout d ’API, exple : JXTA) Orienté objets ■ ■ ■ ■ ■ (presque) tout est une classe (pas de fonctions, uniquement des méthodes) sauf les types primitifs (int, float, double, ...) et les tableaux Toutes les classes dérivent de la classe de base java.lang.Object Héritage simple pour les classes (on peut tricher un peu !) Les objets se manipulent via des références (leur nom) La syntaxe est proche de celle de C/C++ Java est portable ■ Le compilateur Java génère du byte code (intermédiaire entre le code machine et le langage). ■ ■ L ’environnement d ’ exécution du byte code (JVM) est présent sur la plupart des machines actuelles (Amiga, PC, Mac, AS400, RS6000, Unix, …) Java supporte un code source écrit en Unicode (plus vaste que l ’ASCII). Java est robuste ■ ■ ■ ■ ■ ■ ■ A l’origine, c'est un langage pour les applications embarquées, plus rigoureuse que pour NOUS !!! Gestion de la mémoire par un garbage collector (inspiré du Lisp) Pas d’accès direct à la mémoire (pas d ’allocation dynamique pour les fans !) Mécanisme d'exception dans les cas critiques (accès aux ressources…) Accès à une référence nom conforme et/ou non existante → exception. compilateur contraignant (erreur si exception non gérée, si utilisation d’une variable non affectée, ...). Oblige à une programmation « propre » Tableaux = objets (taille connue, débordement → exception). Java est sécurisé ■ Pour permettre une sécurisation du code mobile. ■ 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 -> quelques problèmes. Difficultés pour la mise au point et le portage. Java est distribué ■ ■ ■ ■ API réseau (java.net.Socket, java.net.URL, ...). Applet. Servlet. Remote Method Invocation. Les performances ■ ■ ■ La plupart du temps, le byte code est interprété par la JVM. Possibilité de faire de la « compilation à la volée » et même de produire du code compilé (perte de la portabilité) Plusieurs types de génération de code machine : Les outils ■ Environnements de développement : – Sun JDK 1.1.x (compilateur, interpréteur, appletviewer,...) – java-mode emacs – IDE : Visual Age, Café,Java WorkShop, Jbuilder, Visual J++, ... ■ Browsers : – Sun HotJava 1.1 – Netscape Navigator 3 – Internet Explorer 3 Les outils (3) Java Development 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) jdb : debugger javakey : générateur de clés pour la signature de code rmic : compilateur de stubs RMI rmiregistry : "Object Request Broker" RMI Les core API 1.0 et 1.1 ■ ■ ■ ■ ■ ■ java.lang : Types de bases, Threads, ClassLoader, Exception, Math, ... java.util : Hashtable, Vector, Stack, Date, ... java.applet java.awt : Interface graphique portable java.io : accès aux i/o par flux java.net : Socket (UDP, TCP), URL, ... Les core API 1.1 ■ ■ ■ ■ ■ ■ java.lang.reflect : introspection sur les classes et les objets java.beans : composants logiciels java.sql (JDBC) : accès homogène aux bases de données java.security : signature, cryptographie, authentification java.serialisation : sérialisation d'objets java.rmi : Remote Method Invocation Les autres API ■ ■ ■ ■ Java Server : Servlets Java Commerce : JavaWallet Java Média : 2D, 3D, Animation, Telephony JXTA : Peer 2 Peer