Programmer en java 1. présentation 1.1. S’assurer que l’ordinateur possède un interpréteur Java Panneau de configuration java 1.2. Se procurer un compilateur Java Runtime environment (JRE) version 6 update 21 http://www.oracle.com/technetwork/java/javase/downloads/index. html 1.3. Se procurer environnement de développement Java development Kit (JDK de Oracle Netbeans JBuilder X de Borland BlueJ http://www.bluej.org/download/download.html Eclipse http://www.eclipse.org/downloads/ 1.4. Principe du Java/historique 1991 rappel : langage interprétés vs langages compilés langage précompilé : source pseudo-langage (bytes code) machine virtuelle (VM) le langage est devenu universel (il suffit d’avoir la machine virtuelle appropriée) Programmer en java page 1/13 java inclus dans les navigateurs 1.5. Programmation orienté objet objet = données + méthodes méthodes ressemblent à procédures appel = envoi d’un message à l’objet les données sont encapsulées on peut modifier un objet seulement class = ensemble d’objets possédant les mêmes méthodes et une structure de données commune Héritage : utilisation de classe existantes réutilisation à plusieurs niveaux 1.6. Environnement interface console : apprentissage, mise au point interface graphique : GUI (graphical user interface) programmation événementielle applications « vraies » : indépendantes du web applets : liées 1.7. portabilité Programmer en java page 2/13 2. Premiers programmes 2.1. Le programme : public class PremProg //genes\PremProg.java { public static void main (String[] args) { System.out.println ("Mon premier programme Java") ; } } 2.2. Avec la console Edition : notepad = Premprog.java console : dos compilation : c :>javac Premprog.java (création de Premprog.class) interprétaion (exécution) : c :> java Premprog on peut devoir écrire un path : path = c:\Program Files\Java\jdk1.6.0_21\bin 2.3. Avec l’environnement Eclipse 2.3.1. Démarrer Eclipse Select a workspace = choix 2.3.2. Créer un projet File New Java Project Name = PremierProgramme Finish En fait, ça crée un répertoire PremierProgramme dans le workspace choisi. 2.3.3. Créer une classe File New Class Source folder = Premierprogramme/src Name = PremierProgramme (extension = .java) Programmer en java page 3/13 Cocher public static void main(String [] args) 2.3.4. Exécuter en mode console Run run 2.3.5. Le fichier .java est dans le repertoire src le fichier .class est dans le répertoire bin 2.3.6. Rouvrir le programme File open file /src Premierprogramme.java 2.4. Deuxième programme public class Exemple { public static void main (String[] args) { int n ; double x ; n = 5 ; x = 2*n + 1.5 ; System.out.println ("n = " + n) ; System.out.println ("x = " + x) ; double y ; y = n * x + 12 ; System.out.println ("y = " + y) ; System.out.println ("y = " + x + y) ; System.out.println ("y = " +( x + y) ; } } 3. Les bases du langage 3.1. Types primitifs 3.1.1. Entiers Byte = 8 bits {-128..+127} Short = 16 bits Int = 32 bits Long = 64 bits Écriture : +34 0x23 -32 3.1.2. Flottants Programmer en java Float : 4 bytes, 7 chiffres significatifs, e-44 à e37 page 4/13 Double : 8 bytes, 15 chiffres significatifs, e-323 à e307 Écriture : 4.2e4 -0.035 -3.2e-12 3.1.3. Caractères Unicode (16 bits) ’A’= 0x0041 ’\t’ = 09 tabulation ’\n’ = 10 Line Feed ’\r’ = 13 Carriage Return 3.1.4. Booléens boolean x; x = (a ==b); valeurs true et false 3.1.5. Constantes final int NB = 320; final interdit la modification On a le droit de déclarer final une valeur obtenue pendant l’exécution (valeur inconnue au départ) int x, y, z; … … final int VALEUR = 2 * (x + y – z); VALEUR++; // interdit On peut même différer l’affectation : int x, y, z; final int VALEUR; … … VALEUR = 2 * (x + y – z); // ok (première) VALEUR++; // interdit Programmer en java page 5/13 3.2. Opérateurs et expressions 3.2.1. 3.3. Instructions de contrôle 4. Les classes et les objets 4.1. Une classe par fichier source Avec Eclipse, placer les fichiers source (.java) dans le même répertoire src. 4.2. La classe Point possède 3 méthodes et 2 données : public class Point // La classe point comporte 3 méthodes: initialise, deplace et // affiche et deux données: x et y { public void initialise (int abs, int ord) { x = abs ; y = ord ; } public void deplace (int dx, int dy) { x += dx ; y += dy ; } public void affiche () { System.out.println ("Il y a un point de coordonnees: abcisse " + x + " ordonnée " + y) ; } private int x ; // abscisse private int y ; // ordonnee } 4.3. La classe TestPoint utilise la classe Point Elle possède une méthode main(). public class TestPoint // La classe TestPoint utilise la classe Point // elle crée 2 objets de type point: p_un et p_deux // { public static void main (String args[]) { Point p_un = new Point() ; // on instancie un objet p_un //de type point() : // il possède les 3 méthodes // et les 2 données de la // classe Point p_un.initialise(3, 5) ; // utilisation de la méthode // initialise du type point en l'appliquant à l'objet p_un Programmer en java page 6/13 // transmission des arguments 3 et 5 // 3 --> dans le champ x de l'objet p_un // 5 --> dans le champ y de l'objet p_un p_un.affiche() ; // utilisation de la méthode affiche du // type point à l'objet p_un p_un.deplace(2, 4) ; p_un.affiche() ; Point p_deux = new Point() ; p_deux.initialise (6, 8) ; p_deux.affiche() ; p_un.deplace(-2, -4) ; p_un.affiche(); } } 4.4. Une classe par fichier source On peut placer plusieurs classes dans un même fichier source Une seule classe peut être publique La méthode main() est dans la classe publique Une classe sans attribut (class Point de notre exemple) demeure accessible aux autres classes. public class TestPoint2 { public static void main (String args[]) { Point p_un ; p_un = new Point() ; p_un.initialise(3, 5) ; p_un.affiche() ; p_un.deplace(2, 0) ; p_un.affiche() ; Point p_deux = new Point() ; p_deux.initialise (6, 8) ; p_deux.affiche() ; } } class Point { public void initialise (int abs, int ord) { x = abs ; y = ord ; } public void deplace (int dx, int dy) { x += dx ; y += dy ; } public void affiche () { System.out.println ("Point de coordonnees " + x + " " + y) ; } private int x ; // abscisse private int y ; // ordonnee } 4.5. Classe clavier Programmer en java page 7/13 Permet de lire au clavier import java.io.*; public class Clavier{ public static String lireString(){//lecture d'une chaine String ligne_lue=null; try{ InputStreamReader lecteur=new InputStreamReader(System.in); BufferedReader entree=new BufferedReader(lecteur); ligne_lue=entree.readLine(); } catch(IOException err){ System.exit(0); } return ligne_lue; } ////////////////************************************** public static float lireFloat(){//lecture d'un float float x=0; //valeur ? lire try{ String ligne_lue=lireString(); x=Float.parseFloat(ligne_lue); } catch(NumberFormatException err){ System.out.println("***Erreur de données Réel attendu***"); System.exit(0); } return x; } ///////////////********************************************* public static double lireDouble(){//lecture d'un double double x=0; //valeur ? lire try{ String ligne_lue=lireString(); x=Double.parseDouble(ligne_lue); } catch(NumberFormatException err){ System.out.println("***Erreur de données Double attendu***"); System.exit(0); } return x; } ///////////******************************************* public static int lireInt(){//lecture d'un double int x=0; //valeur ? lire try{ String ligne_lue=lireString(); x=Integer.parseInt(ligne_lue); } catch(NumberFormatException err){ System.out.println("***Erreur de données Entier attendu***"); System.exit(0); } return x; } Programmer en java page 8/13 } Utilisation : // Calcule la somme et le produit // La classe SommeProduit utilise la classe Clavier public class SommeProduit { public static void main (String[] args) { int i ; int x , y, somme, produit; System.out.println ("Bonjour...") ; System.out.println ("Je vais vous calculer " + 5 + " sommes et produits") ; for (i=0 ; i< 5 ; i++) { System.out.print ("Donnez un nombre : ") ; x = Clavier.lireInt () ; System.out.print ("Donnez un autre nombre : ") ; y = Clavier.lireInt () ; somme = x + y; produit = x * y; System.out.println ("somme = "+somme+" produit = "+produit) ; } System.out.println ("Travail termine - Au revoir") ; } } 4.6. Les constructeurs Permettent de passer des paramètres ( = des valeurs) à une classe au moment de la création des objets ( = initialiser l’objet) Exemple : public class Point // La classe point est un constructeur // comporte 2 méthodes: deplace et affiche // et deux données: x et y { public Point (int abs, int ord) // constructeur (même nom que la classe) { x = abs ; y = ord ; } public void deplace (int dx, int dy) { x += dx ; y += dy ; } public void affiche () { System.out.println ("Il y a un point de coordonnees: abcisse " + x + " ordonnée " + y) ; Programmer en java page 9/13 } private int x ; private int y ; // abscisse // ordonnee } La classe TestPoint utilise la classe avec constructeur public class TestPoint3 { public static void main (String args[]) { Point p_un = new Point(3, 5) ; // Point est un constructeur // les arguments sont fournis à // la création de l'objet p_un.affiche() ; p_un.deplace(2, 0) ; p_un.affiche() ; Point p_deux = new Point(6, 8) ;// pareil... p_deux.affiche() ; } } 4.7. Implémentation de classe 5. La gestion des exceptions 5.1. 6. Les threads 6.1. Principe Exécution multitâche Thread = fil (textile) = une tâche parmi les autres 6.2. Exemple avec « extends Thread » public class TestThreadUn // Ce programme permet de tester les threads { public static void main (String args[]) { Ecrit e1 = new Ecrit ("Un ", 3, 10) ; Ecrit e2 = new Ecrit ("Deux ", 3, 10) ; Ecrit e3 = new Ecrit ("Trois ", 3, 10) ; Ecrit e4 = new Ecrit ("\n", 3, 20) ; e1.start() ; // Méthode start du langage. Démarre le Thread e2.start() ; e3.start() ; e4.start() ; System.out.print("test "); } } // La classe Ecrit comprend 2 méthodes class Ecrit extends Thread Programmer en java page 10/13 // La méthode Ecrit porte le même nom que la classe: c'est le constructeur { public Ecrit (String texte, int nb, long attente) { this.texte = texte ; // "this" permet de manipuler des données dans 3 threads // sans avoir à définir e1.texte e2.texte et e3.texte this.nb = nb ; this.attente = attente ; } // La méthode run est obligatoire public void run () { try { for (int i=0 ; i<nb ; i++) { System.out.print (texte) ; sleep (attente) ; // le thread est "arrêté" pour // permettre aux autres de s'exécuter // temps en millisecondes } } catch (InterruptedException e) {} // impose par sleep } private String texte ; private int nb ; private long attente ; } Un test Trois Deux Un Trois Deux Un Trois Deux On voit que le programme comprend 5 Threads; les 4 définis et le main(); 6.3. Exemple avec « implement Runnable » public class TestThreadDeux // Ce programme teste les { public static void main (String args[]) // On définit d'abord des objets de type Ecrit { Ecrit ecrit1 = new Ecrit ("Môt ", 10, 5) ; Ecrit ecrit2 = new Ecrit ("Hai ", 12, 10) ; Ecrit ecrit3 = new Ecrit ("Ba ", 12, 10) ; Ecrit ecrit4 = new Ecrit ("\n", 5, 15) ; // On définit ensuite des objets de type Thread Thread t1 = new Thread (ecrit1) ; Thread t2 = new Thread (ecrit2) ; Thread t3 = new Thread (ecrit3) ; Thread t4 = new Thread (ecrit4) ; t1.start() ; t2.start() ; t3.start() ; t4.start() ; } } class Ecrit implements Runnable // La classe Ecrit comprend 2 méthodes Programmer en java page 11/13 { public Ecrit (String texte, int nb, long attente) // la méthode Ecrit est un constructeur { this.texte = texte ; this.nb = nb ; this.attente = attente ; } public void run () // La méthode run définit l'exécution des threads { try { for (int i=0 ; i<nb ; i++) { System.out.print (texte) ; Thread.sleep (attente) ; // attention Thread.sleep } } catch (InterruptedException e) {} // impose par sleep } private String texte ; private int nb ; private long attente ; } Ba Môt Hai Môt Ba Môt Hai Ba Ba Hai Môt Môt Hai Ba Hai Ba Hai Hai Môt Môt Môt Môt Ba Hai Môt Ba Ba Hai Ba Hai Ba Hai Ba Hai Programmer en java page 12/13 Annexe : références UKO (.be) http://www.ukonline.be/programmation/java/ Didacticiel (J. M. Doudoux) http://www.jmdoudoux.fr/accueil_java.htm Programmer en java page 13/13