Alexandre Allauzen (Université Paris-Sud / LIMSI-CNRS)

Slides:



Advertisements
Présentations similaires
La programmation orientée objet avec Java L3-MIAGE Plan
Advertisements

Réaliser en Java un programme client d’une Base de Données
Formation universitaire à .NET: Introduction à C#
Conception de Site Webs dynamiques Cours 5
Programmation par Objets 1 Module IN504 Animé par : Marianne Huchard Marie-Laure Mugnier Khalil Ben Mohamed
A propos de java Sun, fin 1995 C++ nettoyé semi-interprété
Au programme du jour …. Ce que vous navez pas encore vu Constantes et variables de classe Main et Tests Utilisation de lAPI Existence des packages Existence.
SI3 MAM3 Hydro Nathan Cohen Igor Litovsky Christophe Papazian
Introduction à la Programmation Orientée Objet Retour sur les principaux concepts SI3 MAM3 Hydro Nathan Cohen
La classe String Attention ce n’est pas un type de base. Il s'agit d'une classe défini dans l’API Java (Dans le package java.lang) String s="aaa"; // s.
Exposé de Système - Informatique et Réseau
Page 1 Les applets Jacques Lonchamp. Page 2 Présentation Une applet est téléchargée à partir dune machine distante qui fournit le code. Ce chargement.
Paquetages: Définitions Les classes Java sont regroupées en paquetages (packages en anglais) Ils correspondent aux « bibliothèques » des autres langages.
(Classes prédéfinies – API Java)
Introduction à Java - les paquetages -
Cours 6 : XML et les architectures N-tiers – Tier Applicatif
Programmer en JAVA par Tama
MIKHAYLOVA Vera Exposé Java principe de fonctionnement Lundi 17 mai 2004 DEUG 1ère année Science du langage Paris III.
LICENCE MIAGE Introduction Programmation Orientée Objet JAVA philippe
TD 1 IJA Introduction Objet, méthode, attribut Classe, instance
IJA - TD 2 Bases du langage
CURSUS DE FORMATION AUX NOUVELLES TECHNOLOGIES DE DEVELOPPEMENT UV EJB Entité Module Java Expert.
TP 3-4 BD21.
Servlet JAVA.
LOG 02 Bases de Données Avancées Rappels sur JSP / Servlet
Outils de tests, logs et documentation Frédéric Moalannée 2010/2011 POO.
Etude des Technologies du Web services
XML-Family Web Services Description Language W.S.D.L.
Les méthodes en java Une méthode est un regroupement d’instructions ayant pour but de faire un traitement bien précis. Une méthode pour être utilisée.
Les instructions PHP pour l'accès à une base de données MySql
Laboratoire d'Informatique de l’Université de Franche-Comté
Principes de programmation (suite)
Introduction à la programmation (Java)
Langage Oriente Objet Cours 2.
Master 1 SIGLIS Java Lecteur Stéphane Tallard Chapitre 5 – Héritage, Interfaces et Listes génériques.
Introduction à la programmation objet Langage Java
Programmation concurrente
Formation JAVA. Par: SILMI.S
IFT 6800 Atelier en Technologies d’information
1 IFT 6800 Atelier en Technologies dinformation Le langage de programmation Java chapitre 1 : Introduction.
LIFI-Java 2004 Séance du Jeudi 9 sept. Cours 1. La notion de langage Décrire une tâche à effectuer –programme Écrire à un haut niveau –facile pour lutilisateur.
COURS DE PROGRAMMATION ORIENTEE OBJET :
Document élaboré à Centrale Paris par Pascal Morenton LES TECHNOLOGIES DU WEB 1. LES PHASES D UN DEPLOIEMENT DE RESEAUX 2. LE LANGAGE HTML 3. LE LANGAGE.
J2EE vs .NET Réaliser par : SEIF ENNACER BADRA && CHETOUI RIM.
JEE 5 F.Pfister 2 institut eerie JEE – Une plateforme serveur  Développement et exécution d'applications réparties.
PHP 1° PARTIE : LES BASES © BTS IRIS 2002 [tv] Présentation Historique
PHP & My SQL.
APPLETS. Applets : généralités Applet : application s'exécutant dans une page HTML Le ByteCode (fichiers.class) est téléchargé depuis un serveur. L'exécution.
JavaScript Nécessaire Web.
4 Introduction des objets. Les chaînes et tableaux
Introduction à la programmation objet avec java
11/04/ L'héritage Cours 7 Cours 7.
Premiers pas dans le langage Java 2012/ Premiers pas dans le langage Java TI3.4 Responsable : M lle Sana Ezzedine
Master 1 SIGLIS Java Lecteur Stéphane Tallard Les erreurs communes en Java.
420-B63 Programmation Web Avancée Auteur : Frédéric Thériault 1.
Tutorat en bio-informatique
5ième Classe (Mercredi, 19 octobre) Prog CSI2572.
Programmation Système et Réseau
Les sockets.
1 École des Mines de Saint-Etienne. 158, cours Fauriel Saint-Etienne Cedex 2. Tél Fax Jean-Jacques Girardot
IUT du Limousin L.U.P Michel Vergnaud Programmation Objet - Java.
Introduction à JAVA Sylvie Billot
Introduction au langage JAVA
Initiation au JavaScript
Master 1 SIGLIS Java Lecteur Stéphane Tallard Chapitre 2 – Java Premiers pas Master 1 SIGLIS1 Java Lecteur - Chapitre 2 - Java Premiers Pas.
22 Concepts de base du langage Java. 2-2 Objectifs A la fin de ce cours, vous serez capables de : Identifier les éléments essentiels de Java Identifier.
Programme de baccalauréat en informatique Structures de données IFT Abder Alikacem TP4 Département d’informatique et de génie logiciel Édition septembre.
pour les programmeurs en C++ Java 2 Part 1 3 Histoire de Java Projet de connexion des machines: 1991 Le nom Java a été introduit dans un café Développé.
Initiation aux bases de données et à la programmation événementielle
Java Réalisé par: Mouna POKORA. PLAN: Définition : Historique: Caractéristiques: un langage orienté objet: un langage interprété : un langage portable:
Transcription de la présentation:

Alexandre Allauzen (Université Paris-Sud / LIMSI-CNRS) Programmation Objet en JAVA : Remise à niveau 1ère partie : Introduction à la P.O.O. en Java Alexandre Allauzen (Université Paris-Sud / LIMSI-CNRS) allauzen@limsi.fr Ce cours reprend en grande partie le matériel pédagogique mis au point par Claude Barras et Frédéric Vernier et s'inspire du cours de Philippe Genoud (INRIA)

Programmation Orientée Objet (POO) Trouver une solution logicielle passe par la description du problème à l'aide d'un langage donné (analyse, décomposition, modélisation, ...) : Assembleur, Procédural (C ou Fortran), Objet, naturel. La progression de l'abstraction L'unité est l'objet. La POO permet de décrire le problème à l'aide de termes liés au problème et non à la machine : En Créant des objets et en les faisant interagir. mov ax,500 ; mov bx,0x20 ; add ax,bx ; int x = 500; int y = 32; x+=y; licence.setNombreEtudiants(500); licence.ajoutEtudiant(32); Opposition entre langage de haut niveau et efficacité. Quel est le compromis ? : C++ et Java !

Les langages Objets Langages objets : 1969 (Alan Kay) et Simula (Ole Dahl et Kristen Nygaard) Smalltalk C → Objective C, C++ Pascal : Pascal Objet, Delphi (Borland) Basic : VBA (Microsoft) Java C# (Microsoft) Python (script) Simula : premier langage Objet : doit permettre de simuler le monde réel pour les machines. Il doit donc à la fois permettre de décrire un univers complexe et être compréhensible par la machine : langage de description et de programmation. Smalltalk etait à la base un langage de com entre « robots » Java vient de Oak, crée dans le début des années 90 pour faire communiquer entre eux différentes machines très différentes. L'application était le Video-on-demand. Java vs C++ : proximité et contrôle de la mémoire, prise en compte de l'architecture. Java permet un dévelopement rapide et portable. Plus efficace que du script, moins que le C, C++ ...

Origine de Java En 1993, le NCSA crée le premier navigateur internet (protocole http, langage html) Annonce officielle de la naissance de Java par Sun en 1995 (issu de Oak) Initiateur : James Gosling Programmation simple Utilisation pour Internet Portable Sur la plupart des plates-formes (Archi + OS) Gratuit (téléchargeable sur java.sun.com) Logo (tasse à café), Mascotte (Duke) National center of Super Computing; Le premier navigateur etait mosaic.

Java c'est quoi ? Java est un environnement de programmation objet développé par Sun, adapté à la distribution d'applications sur Internet. 4 éléments : Java est un langage de programmation objet Une machine virtuelle Des bibliothèques de classes ou des packages : API Application Programming Interface (2500 classes dans Java 1.4) Ensemble d'outils : java, javac, jdb javadoc, jar, ... Java est un langage de programmation Syntaxe, mots-clés, etc. ORIENTÉ OBJET Java est un environnement de programmation Outils de compilation, de paquetage, de tests, etc. Java est un standard Sun (premier), mais aussi IBM, Microsoft (C#) Père fondateur : James Gosling Java propose un ensemble de bibliothèque standard execution compilation debugger documentation archivage

Java : principe fondateur de sa portabilité Il y a un intermédiare de plus entre le source et la machine : la JVM.

Un exemple simple : la montre Objectif : une fenêtre s'ouvre pour donner l'heure et la date scénario (use case) : A partir d'un objectif Décrire le problème lister les objets necessaires, préciser leurs nteractions. Programmer en objet, c'est créer des objets et les faire communiquer entre eux. L'unité objet correspond à des données qui forment un tout homogène et à un comportement. Un objet peut servir à d'autres objectifs, d'autres applications -> réutilisation du code.

Qu'est-ce qu'un objet ? Un objet modélise toute entité identifiable manipulée par l'application logicielle qu'elle soit tangible ou conceptuelle (ville, étudiant, fenêtre vs date, emploi du temps), générique ou spécifique (pile LIFO vs catalogue de disquaire, un formulaire de déclaration d'impôts). Il réagit aux messages qu’il reçoit en fonction de son état : modification de son état et/ou envoi d’un message. Un objet possède : une identité unique un état interne défini par ses attributs un comportement défini par ses méthodes. Une interface imposant sa communication avec l’extérieur. Liste des objets : fenêtre zone de texte montre calendrier

Objet et encapsulation Un objet = structure de données (attributs) + algorithmes (méthodes) Principe d'encapsulation L'accès aux données (privées) ou l'état d'un objet ne peut se faire que par l'intermédiaire de son interface (méthodes publiques) Les modifications des structures de données n'affectent pas les programmes utilisant l'objet l'interface d'un objet définit les messages qui lui sont «envoyable». maMontre Le point de vue client / fournisseur user / programmeur Le programmeur veut pouvoir faire évoluer son code sans perturber l'utilisateur d Réutilisation du code + sécurité Sécurité voir  ensuite avec la partie privée

La classe : la matrice / le moule Un objet a un type : il est l'instance d'une classe (class) la classe d'un objet = le schéma, le moule, la matrice, le type. Une classe décrit, définit, implémente : la partie publique (public) : l'interface avec les noms et paramètres des méthodes,les modes d’interaction partie privée (private) : structure de données internes (les attributs) + les méthodes ou algorithmes internes. Une classe définit un type d'objet, ce n'est pas un objet. Un programme objet = la création d'un ensemble d'objets et la mise en scène de leur interaction. L'implémentation peut être cachée à l'utilisateur d'une classe -> sécurité,car maîtrise du comportement de l'objet vu de l'exterieur.

La classe Montre, un peu de syntaxe class UnNomdeClasse { /* le corps */ } class indique la définition d'une classe nommée Montre. Un nom de classe commence par une majuscule Le mot-clé public indique que la classe est utilisable de « l'extérieur ». Les attributs sont typés (int) : <Type> nomAttribut = valeurInit; La syntaxe générale pour définir une méthode : <Type retour> nomMethode (<listeparamètres>) Les noms de méthodes et attributs commencent par une minuscule, la frontière des mot est marquée par une majuscule. Tout ce qui est entre /* et */ est un commentaire (pouvant aller sur plusieurs lignes). // commentaire jusqu'à la fin de la ligne public class Montre { /*Définissons les attributs*/ private int heure , minute ; /* Définissons les méthodes*/ public int getHeure() { return heure; } public int getMinute() { return minute; public void setMinute(int m) { minute = m; public void setHeure(int h) { heure = h;

Un peu de syntaxe : construction et communication avec un objet Montre m = new Montre(<params>); Type réf allocation dynamique Constructeur, renvoie l’adresse. Communication m.setMinute(12); réf de la cible type du message/ params. du message commande/requête (si c’était 78 ?) int min = m.getMinute( ); l’objet peut répondre au message pas de params.

Syntaxe de Java Reprend celle du C/C++ Le ; marque la fin d'instruction Un bloc d'instructions est délimité par {} Les identificateurs sont comme en C (if, while, switch, etc.) et utilisés tels quels Les caractères sont codés en UNICODE 16 bits au lieu de 8 : accents dans le code! Les commentaires en mauvais anglais sont préférables à un français impeccable. Les commentaires pertinents sont obligatoires.

Types de programmes Java Application Programme autonome (stand-alone) L'application doit posséder une classe principale ayant une méthode signature : public static void main(String[]args) C'est la méthode interprétée lors de l'exécution, le point d'entrée. Elle est static : ne nécessite pas de création d'objet pour être invoquable (les méthodes statiques sont également nommées méthodes de classe). Applet Programme exécuté dans l'environnement d'un navigateur. Le byte code est sur un serveur http, il est chargé via une page html. Pas de méthode main(),mais les méthodes obligatoires : init(),start(),stop(),paint(),destroy

Exemple de la montre : conception Création d'un programme Java : Identifier les objets nécessaires et leurs relations Spécifier leurs types / leurs classes (données, comportement) Chercher dans l'API Java si des classes peuvent répondre aux besoins (tout ou en partie) Création des classes nécessaires (en s'appuyant sur l'API) Programmer en Java, c'est aussi savoir chercher dans l'API Java.

Exemple de la montre : scénario

Manipulation des objets En Java, les objets sont manipulés exclusivement avec des références. Une référence est un pointeur. Il est à l'objet ce que la télécommande est à la TV. Création d'une référence sur un objet de type Integer : Integer s; La création d'une référence n'implique pas la création d'un objet. Les objets doivent être créés : s = new Integer(); Ainsi est créé un objet de type Integer. On y accède via la référence s. Integer()est une méthode particulière de la classe Integer : le constructeur. Cette méthode peut avoir des arguments indiquant comment construire l'objet : Integer s = new Integer(5); Plusieurs références peuvent pointer sur le même objet : Integer s2 = s; Il y a toujours qu'un seul objet, mais on a deux références.

Le fichier source d'une application Lorsqu'on utilise une classe pré-définie, il faut indiquer au compilateur où est le code correspondant : import. On peut importer une classe (Date) ou toutes les classes d'une collection. Lors de la création d'une application, une des classes public doit porter le même nom que le fichier et comporter une méthode main. Les commentaires commençant par /** sont destinés à javadoc. Les commandes javadoc commence par « @ ». Il est possible d'utiliser également du html. Tout programme, toutes les classes, les attributs et méthodes sont à commenter afin de générer une documentation via javadoc. Fichier ExempleMontre.java import java.util.Date; import javax.swing.*; /** Le premier programme Java * Application donnant heure et date * @author John Doe * @version 0 */ public class ExempleMontre{ /* Ici sont définis les attributs et * méthodes, en finissant par le main . public static void main(String[] args) { /* corps de la méthode main */ }

Le source complet d’une application import java.util.*; import javax.swing.*; /* Descriptif de la classe. */ public class ExempleMontre{ public static void main(String[] args) { /* Création de la date */ Date date = new Date(2004, 9, 23, 5, 30); /* zones de texte : création et écriture des textes */ JTextArea textHeure = new JTextArea(); JTextArea textDate = new JTextArea(); textHeure.setText(date.getHours()+"h"+ date.getMinutes()+" "); textDate.setText("le "+date.getDate() +"/"+date.getMonth()+"/" + date.getYear()); /* Creation de la zone d'affichage et remplissage */ JPanel monPanel = new JPanel(); monPanel.add(textHeure); monPanel.add(textDate); /* Creation de la fenetre, reglage et remplissage */ JFrame fenetre = new JFrame("ma fenetre"); /* reglage dimension et inclusion de la zone d'affichage */ fenetre.setBounds(100, 100, 160, 60); fenetre.getContentPane().add(monPanel); /* afficher */ fenetre.setVisible(true); } Les « import » sont les premières lignes non commentées. Les commentaires sont indispensables pour comprendre le code ainsi que sa structure. Cette application ne fait que créer des objets et leurs envoyer des messages.

Conventions de Codage Attention aux petits détails : Les développeurs écrivent du code que d’autres lisent et utilisent Java est apprécié pour sa lisibilité Sun PROPOSE une façon d’écrire le code Conventions de codage: java.sun.com/docs/codeconv/ Aide au déboguage de Java ( communauté open source ) Re-formateur de code sinon… (JavaStyle, Jalopy, etc. class Sample extends Object { int ivar1; int ivar2; Sample(int i, int j) { ivar1 = i; ivar2 = j; } int emptyMethod() {} ... Attention aux petits détails : Nom de classe avec majuscule Nom de méthode avec minuscule Indentation

Compilation, exécution, ... La compilation va créer un fichier .class, le pseudo-code : javac ExempleMontre.java La compilation crée un fichier .class de bytecode : ExempleMontre.class Essayer l'option -verbose et surtout-help L'exécution se fait en appelant la machine virtuelle (JVM) : java ExempleMontre Création de la page html de documentation ExempleMontre.html javadoc ExempleMontre.java

Hello World public class Bonjour { public static void main (String[] arguments) { System.out.println("Hello World"); } La fonction main est une méthode static → indépendante de l'instance → commune à toute les instances, main peut être appelée sans qu’aucune instance soit créée : Bonjour.main(); System est une classe avec des attributs static (toujours pas besoin d’instance) out est une instance static de quelque chose (PrintStream) qui se trouve être une donnée de l’objet System (voir doc. de System). System.out référe donc un objet auquel on peut envoyer des messages. println est une méthode public de l'objet out.

Hello World - 2 public class Bonjour2 { public static void main (String[] arguments) { System.out.println("bonjour, voici vos arguments : "); for (int i=0; i<arguments.length;i++) System.out.println(i + " : " + arguments[i]); } }// Fin class Bonjour2 Compilation : > javac Bonjour2.java Exécution : > java Bonjour2 1 deux 3.14 bonjour, voici vos arguments : 0 : 1 1 : deux 2 : 3.14 Pas besoin d’une variable (argc) pour connaître la taille d’un tableau Boucle for = comme en C Construction de la chaîne de caractère avec le signe +

Exécution 1/2 Qui exécute le programme tapé et compilé ? Le processeur directement ? instruction par instruction ? A quoi servirait le système d’exploitation alors ? A quoi servirait la machine virtuelle alors ? Le système d’exploitation alloue un processus à la machine virtuelle : qui partage le CPU avec les autres processeurs, qui utilise un espace de mémoire virtuelle. la machine virtuelle alloue ensuite ses “threads”.

Exécution 2/2 La machine virtuelle JAVA alloue des Threads (fils d’exécution) aux programmes JAVA : 1 pour l’initialisation 1 pour appeler les méthodes « callback » 1 par Thread que vous créez vous-même Les Threads sont gérés par l’OS. La machine virtuelle termine lorsque le dernier thread du dernier programme se termine. Tout l’espace mémoire est alors libéré (y compris la JVM) Ou bien appel direct à System.exit(0);

La pile (stack), RAM mais stack pointer Le « tas » (heap), en RAM Espaces mémoires Registres La pile (stack), RAM mais stack pointer Le « tas » (heap), en RAM Stockage statique Stockage constant Stockage hors de la RAM Les registres : situé dans le processeur, limité en taille. La mémoire est allouée par le compilateur. Le programmeur n'y a pas accès. La pile : dans la RAM, le processeur y accède via le stack pointer. Accès et gestion très rapide via un pointeur. MAIS l'allocation doit se faire lors de la compilation, car c'est à la compilation qu'est généré le code pour le stack pointer. C'est encore le compilateur qui y a accès, pas le programmeur (en C++ si !) Le tas (le segment) dans la RAM aussi où sont stockés les objets. Accès et gestion dynamique (pas comme la pile) : new Statique : dans la RAM, données dispo durant toute lm'exec du programme Constantes : inserer dirctement dans le code ! Rapidité Capacité

Documentation Format : Les commentaires dans le fichier .java doivent commencer par /**, finir par */ et chaque ligne doit commencer par une * .Il existe des étiquettes de champs telles que le nom d'auteur qui sont utilisées pour générer une API. Exemple : import java.util.* ; //Import ici, avant le commentaire javadoc /** * Une classe énumérant ses arguments. * Par exemple: * <pre> * java Bonjour2 un * bonjour * 0 : un * </pre> * * @author Marc Martin * @version %I%, %G% */ public class Bonjour2 ... Génération : Pour générer la page Bonjour2.html, faire : > javadoc Bonjour2.java

Exemple de documentation HTML  

javadoc (suite)

Inconvénients de Java ? Interprété : inefficacité du code. La lenteur. Nécessite une JVM pour fonctionner. La gestion de la mémoire est inefficace dans la plupart des cas. Difficultés face aux applications gourmandes en mémoire. Moins de mécanismes objet que C++ pourtant plus ancien (héritage multiple et “templates”)

Avantages de Java ? Ecrire une fois, exécuter partout ! Sécurité. Exécution dans un navigateur Web (Applet). Gestion automatique de la mémoire (garbage collector) Programmation modulaire et dynamique et objet. Lisibilité du code. Code compact (beaucoup est dans la JVM). L'API. Réseaux, interfaces, son, pont avec les bases de données en natif.

API Java Plus qu'un langage de programmation, l'environnement Java propose une API (Application Programmer's Interface) L'API est structurée en package Package : regroupement de classes ayant un lien logique entre elles pour les utiliser dans d'autres classes pour les « spécialiser » Pour programmer efficacement, une bonne connaissance de ces packages est indispensable. Ne pas refaire ce qui a déjà été fait (d'ailleurs sûrement en mieux)

API Java : classes standard java.lang : classes essentielles objet, types de base, processus java.util : structures de données (collections) listes, ensembles, hash tables, arbres, itérateurs java.awt : interface graphique (Abstract Window Toolkit) fenêtres, boutons, événements... java.io : entrées / sorties flot de données provenant de fichier, buffer, ou pipe java.net : réseau URL, sockets java.rmi : objets distribués (Remote Method Invocation) java.sql : JDBC (Java Data Base Connectivity) connexion à une base de données relationnelle envoi de requêtes SQL, récupération des résultats java.beans : composants logiciels Pièces logicielles autonomes pouvant être contrôlées dynamiquement et assemblées pour former des applications javax.swings : interface graphique composants d'interface de plus haut niveau que ceux de awt look and feel indépendant de l'OS exploitation du modèle MVC (Model View Controler)

Versions Java 1.0.2 (1996) : le JDK : Java Development Kit , 212 classes, 8 paquetages version minimale des browsers web. Java 1.1.5 (1997) : 504 classes, 23 paquetages amélioration interface utilisateur (AWT), gestion des erreurs, cohérence du langage Java 1.2 (Java 2 en 1998) : 1520 classes, 59 paquetages Swing, Drag and drop, amélioration audio Java 1.3 (2001) J2SDK (nouveau nom) pour J2EE (Entreprise, serveur), J2ME (PDA) amélioration de la gestion mémoire, rapidité Java 1.4 (2002) : 2757 classes, 135 paquetages J2SDK → J2SE (nouveau nom), XML, expressions régulières, nouvelles E/S, accès à la mémoire vidéo (VolatileImage) pour l’accélération Java 1.5 : 3278 classes, 165 paquetages

Outils du JDK Téléchargeable sur le site java.sun.com Outils java : JVM, interpréteur pour les programmes java javac : Compilateur Java appletviewer : JVM pour l'exécution des applets jar : Création et manipulation d 'archive java javadoc : Générateur de documentation Java au format HTML javap : désassembleur de classes Java compilées jdb : débogueur Java en ligne de commande javah : génère le header C ou C++ pour créer un pont compatible entre java et C/C++ Documentation en ligne : http://java.sun.com/docs/ Téléchargeable pour installation en local

IDE (Integrated Development Environment) jEdit www.jedit.org Eclipse http://www.eclipse.org Emacs (avec JDEE) http://www.gnu.org/software/emacs/ http://jdee.sunsite.dk/

Références Bien sûr le site officiel de Sun http://java.sun.com avec JDK, Tutorials, Documentations, spécifications, ... Le magazine électronique http://www.javaworld.com Les sites dédiés http://www.jguru.com, et http://www.alphaworks.ibm.com/java En français : www.developpez.com des FAQ, des ressources Le formidable « Thinking in Java » de Bruce Eckel en version livre (édition Prentice-Hall) ou électronique et gratuite (www.BruceEckel.com ou www.penserenjava.free) Et le site de Philippe Genoud consacré à l'enseignement de Java : www.inrialpes.fr/helix/people/genoud/ENSJAVA/M2CCI/index.html