You are on page 1of 79

AA – MC5

« Apprendre Autrement » la programmation avec Java

27/02/2008

AA-MC5

1

AA – MC5
COURS 1 Présentation de MC5
27/02/2008 AA-MC5 2

Objectif
La programmation est enseignée dans I1 et I2 avec le langage C Le module MC5 est un module AA « Apprendre Autrement » : objectif revoir pour mieux comprendre et aller un peu plus loin… Intérêt de Java :
Même syntaxe que le C Orientation objet Interfaces graphiques

27/02/2008

AA-MC5

3

1 gr) C. Zarzoso (1 gr + Malaisiens + Apprentis) 27/02/2008 AA-MC5 4 .le programme et équipe Programme COURS : 5 + 1 préparation au DS TD : 8 TP : 3 DS : 1 Equipe JP. Dalban (responsable module. Hamel (1 gr) V. Barat (1 gr) T.

La pédagogie Le cours : les concepts importants Présence indispensable… Les TD : acquisition du savoir Travail en binôme sur machine Les textes des TD indiquent la marche à suivre Le cahier personnel ou classeur est obligatoire en TD et TP Les TP : mise en œuvre du savoir Travail en solo sur machine Les textes de TP indiquent le travail à réaliser Le DS : contrôle du savoir Travail personnel sur papier Le cahier ou classeur. les polycopiés de cours et TD/TP sont les seuls documents à être autorisé en DS 27/02/2008 AA-MC5 5 .

Le cahier OBLIGATOIRE en TD et TP AUTORISE en DS 27/02/2008 AA-MC5 6 .

Documents… OBLIGATOIRES en TD et TP AUTORISE en DS 27/02/2008 AA-MC5 7 .

L’atelier logiciel Java Notre outil pour programmer en Java : Borland Jbuilder 2005 La version Jbuilder 2005 foundation est gratuite ainsi que Eclipse 27/02/2008 AA-MC5 8 .

AA – MC5 COURS 1 (suite) Introduction à Java Programmation classique Rappels… 27/02/2008 AA-MC5 9 .

Présentation de Java Proche du C classique Orienté objet comme l’ancien C++ Un concurrent Microsoft : C# Nombreuses possibilités de Java : Interfaces graphiques Communication réseau Multi-tâches Informatique industrielle Tous types de systèmes (machine virtuelle) Applet dans des pages web Ne pas confondre Java avec JavaScript 27/02/2008 AA-MC5 10 .

Premier programme en Java (Création du projet) Création du projet test sous JBuilder 2005 Notre programme principal se trouve dans la classe Test.java Un package est un répertoire pouvant accueillir plusieurs classes 11 27/02/2008 AA-MC5 .

il est nécessaire de créer une configuration d'exécution 27/02/2008 AA-MC5 12 .Premier programme en Java (Configuration d'exécution) Programme principal (main) Pour exécuter la classe Test.

il est possible de lancer le programme Il est aussi possible de l'application Test.Premier programme en Java (Exécution et test) Une fois la configuration d'exécution créée. 27/02/2008 AA-MC5 13 .class package test en ligne de (fenêtre DOS ou Démarrer lancer dans le commande Exécuter).

jpx Les sources Les codes compilés classes paquet paquet test test 2 DEVELOPPEMENT DU PROGRAMME Test.class COMPILATION 27/02/2008 AA-MC5 EXECUTION 14 .java 3 4 VM Test.Récapitulatif des fichiers créés par JBuilder test Répertoire de projet 1 Configuration du projet CREATION PROJET src test.

} } Un programme source en C est compilé et devient un fichier exécutable xxx.ib=3.println(i). System. ic=ia+ib.exe par le processeur de la machine.Compilation en C et en java (bytecode et JVM) T.ib=3. ic=ia+ib.class Bytecode 27/02/2008 AA-MC5 15 .ic).exe T. compilation T.ic.c void main (void) { int ia=2. printf("%d".ic. } compilation T.out.java public class T { public static void main (String [] args) { int ia=2. Un programme source en java est compilé et devient un fichier lisible par la machine virtuelle java (JVM).

ib=3. static int ia.println(ia + " plus " + ib + " vaut " + ic). ic=ia+ib.ib.println(s3).out. } } A la différence avec le langage C. s3 = s1 + " " + s2. ia=2.out.ic. s2. s3. System. La concaténation de 2 chaînes de caractères peut se faire avec l'opérateur +. public static void main (String [] args) { s1 = "Victor".Deuxième Programme public class DeuxiemeProgramme { static String s1. 27/02/2008 AA-MC5 16 . System. s2 = "Hugo". une chaîne de caractère se définit comme le "type" String.

short (16 bits).Les types simples Les objets seront vus plus tard En attendant. Unicode au lieu d’ASCII) Valeurs logiques boolean 27/02/2008 AA-MC5 17 . on créé des variables avec les types simple (existent en C) Entiers signés : byte (8 bits). double (64 bits) Caractères : char (16 bits. int (32 bits). long (64 bits). Réels : float (32 bits).

Go = Gb 27/02/2008 AA-MC5 18 . en anglais octet = byte Ko = Kb. Mo = Mb.Parenthèse sur l'information Bit : valeur 0 ou 1 Octet : 8 bits exemple : 00110101 Comptage 0 à 255 Mémoire de nombreux octets Ko = 1024 octets (kilo millier) Mo = 1024x1024 octets (mega million) Go = 1024x 1024x1024 octets (giga milliard) Attention.

27/02/2008 AA-MC5 19 . double dMoy = (da+ib)/2 . int ib=3 .4039846e-45 à 3.40282347e+38 (pour les valeurs positives) de 4.Les types simples numériques type byte short int long float double domaine de valeurs -128 à 127 -32768 à 32767 -2 147 483 648 à 2 147 483 647 -9 223 372 036 854 775 808 à 9 223 372 036 854 775 807 de 1.940656e-324 à 1.98.79779e+308 (pour les valeurs positives) Octets 1 2 4 8 4 entiers flottants 8 On choisit le type en fonction de l’usage que l’on a… double da=2.

Les types char et booléan caractères : Ce n’est plus le code ASCII (8 bits). 27/02/2008 La variable c a la valeur 'A' La variable bTest a la valeur « VRAI » AA-MC5 20 . mais le code l’ UNICODE (16 bits) pour gérer les caractères nationaux du monde. boolean bTest = true . false (faux) Octets 2 boolean 1 char c = 'A' . booléens : Ce n’est plus 0 et 1 mais false et true type char domaine de valeurs De \u0000 à \uFFFF étendue complète On peut noter ‘A’. etc… ( ‘A’ équivaut à \u0041 ) true (vrai). ‘B’.

y=x<<2. i1 = n&2. y=x&2. int i1. y=x|2. z=x/3. Pour les décalages. AA-MC5 Résultats i1 vaut 2 i2 vaut 24 21 . y=x%3. ic = ia * ib. i2. i2 = n<<3. y=x>>4. se limiter à des entiers positifs à cause du signe int ia=3. Résultat c vaut 15 27/02/2008 int n=3.Les opérateurs arithmétiques Opérateurs Addition Opérateurs Arithmétiques (entiers et flottants) Soustraction Multiplication Division Modulo ET Opérateurs sur les bits (entiers seulement) OU OU exclusif Décalage à droite Décalage à gauche Symbole + * / % & | ^ >> << Exemples z=x+y. ib=5. z=x*y. int ic. y=x^2. z=x-y.

Il y a une hiérarchie des opérateurs (pareil qu’en math). fx vaut 17 et fy vaut 25 L’affectation (=) sert à ranger une valeur dans une variable. float fx = 2+3*5 .Les expressions et l’affectation Les opérateurs servent à combiner des valeurs. En cas d’incertitude. utiliser des parenthèses. ! * PRIORITE / % != = + == 27/02/2008 AA-MC5 22 . float fy = (2+3)*5 .

c pour le langage C) A la différences avec le langage C toute fonction est forcément dans une classe (mot clé Class).Structure d'un programme MaClasse.java (.java /* Structure programme Java commentaires multi-lignes */ // commentaires simple ligne public class MaClasse { // Ici des variables globales // Ici des fonctions public static void main (String [] args) { // Ici des variables locales // Ici des instructions } } Un programme source en java porte l'extension . on retrouve à l'intérieur de la classe la même structure du programme : •Des variables globales ou locales à la classe •Des fonctions et une fonction principale "main" 27/02/2008 AA-MC5 23 . Par contre.

out.println("PHT = " + dpht). dpttc = prixTTC(dpht) .dpttc.Un exemple de programme ConvPrix. System. return dPrixHT + dTaxe.6.out. } public static void main (String [] args) { double dpht. System.println("avec TVA = " + dTVA). } } 27/02/2008 AA-MC5 24 . static double prixTTC (double dPrixHT) { double dTaxe .out. System. dTaxe = dPrixHT * dTVA / 100 .println("PTCC = " + dpttc). dpht = 100.java public class ConvPrix { static double dTVA = 19.

A op B int REGLE 0 int REGLE 0 : REGLE 1 : REGLE 2 : ATTENTION Même type : Pas de conversion Promotion de byte et short en int Promotion au plus grand type : byte<short<int<long<float<double : Constante entière = int. n = la + by . byte by = 2.Conversions automatiques int n. constante réelle = double ? int A byte int op B short int A int long op B long A int double op B A float double op B double double int REGLE 1 27/02/2008 long REGLE 2 AA-MC5 double REGLE 2 double 25 . long la = 10.

iz. ix=4.5 * by . Exemple ci-dessus: Les règles appliquées sont : by > double la > double Résultat double : dx vaut 17 int ix.0)*3.iy. double dx. iy = (ix/3)*3. ix=4. Exemple ci-dessus: 3. iy = (ix/3.0 est un double ix > double 3 > double Résultat double 27/02/2008 AA-MC5 26 . byte by = 2.Exemple de conversion OK OK long la = 10.iy. dx = la + 3.iz. Exemple ci-dessus: AUCUNE CONVERSION Résultat int : y vaut 3… Erreur ! int ix.

99. Java ne permet pas une conversion de type dégradante (grand type vers petit type) Chaque conversion de type dégradante doit être castée ! Erreur ! Pour forcer un type : Indiquer le type entre parenthèses devant la valeur à forcer. erreur de compilation float fx = 0. ib = da.Conversions forcées double da = 1. 27/02/2008 AA-MC5 OUI 27 . double db = 3. ic . int ib. float fx = (float) 0.5 ic vaut 5 après forçage NON.99f. ia+db vaut 5.5 .5. int ia=2. ic = (int)(ia + db).99 . float fx = 0. ? A la différence avec le langage C.

else System.println("temp OK"). boolean bTemp = (t>=20)&&(t<=30).5. if (bTemp) … Idem en utilisant une variable booléenne 27/02/2008 AA-MC5 28 .Tableau des opérateurs booléens Opérateurs Egal Différent Opérateurs de comparaison (résultat booléen) Supérieur Inférieur Supérieur ou égal Inférieur ou égal Opérateur logiques (opérations sur des booléens) ET OU Symbole == != > < >= <= && || Exemples If (a==2) … If (a!=2) … If (a>2) … If (a<2) … If (a>=2) … If (a<=2) … If ( (a==2) && (b!=0) ) … If ( (a==2) || (a==3) ) … float fTemp=24. if ((fTemp>=20)&&(fTemp<=30)) System.out.5.out. float fTemp=24.println("temp hors limite").

AA – MC5 COURS 2 Rappel sur les structures de contrôle 27/02/2008 AA-MC5 29 .

Séquence Sauf indication. { Instruction 1 Instruction 2 Instruction 3 Instruction 4 Instruction 5 } SEQUENCE 27/02/2008 AA-MC5 30 . un programme va « tout droit » : les instructions sont exécutées en séquence (à la suite les unes des autres) Un séquence est une suite d'instruction groupées dans un bloc délimité par des { }.

Les structures de contrôle Mais l'intelligence n'est pas d'aller toujours tout droit… Le programme doit pouvoir faire des alternatives et des boucles : Boucle = répéter des instructions tant qu’une condition est vraie Alternative = faire çà ou çà en fonction d’une condition NON cond NON OUI cond OUI instructions instructions instructions ALTERNATIVE 27/02/2008 AA-MC5 BOUCLE 31 .

out.out. NON Je vais au ciné iT>=20 et iT<=30 OUI Je vais à la mer Je me baigne 27/02/2008 AA-MC5 32 .out. Noter le rôle des accolades pour délimiter des blocs d’instructions if ((iT>=20)&&(iT<=30) ) { System. } else System.println("Alarme!").println("Je vais à la mer").println("Je me baigne").println("Je vais au ciné"). if ( iT > 100 ) System. System.Le IF pour les alternatives Le IF teste une condition iT>100 OUI NON Alarme! int iT=10.out.

out.out.println(«DEUX»). System.out.println(«AUCUN!»). 27/02/2008 AA-MC5 33 .println(«CINQ»).println(«TREIZE»). break. break.out. break. System. Attention : ne pas oublier de clôturer chaque cas par un « break ».Le SWITCH pour les choix OUI iT==2 NON OUI iT==5 NON OUI iT==13 NON AUCUN ! TREIZE CINQ DEUX Le switch permet de prendre en compte des valeurs d’une même variable entière switch( iT { case 2 : case 5 : case 13: default: } ) System. System.

i=i+2.out. i=i+2. while (i<10) { System. } while (i<10). do { System. } AA-MC5 34 . 27/02/2008 int i=3.println(i).Le WHILE pour les boucles Deux formes possibles… i=3 Affiche : 3 5 7 9 dans les deux cas NON i=3 affiche i i = i+ 2 OUI i < 10 OUI i < 10 NON affiche i i= i+ 2 int i=3.out.println(i).

out.println(i). condition de bouclage et incrémentation.println(i). i=3 Valeur initiale Il suffit d’écrire : for( i=3 . } NON i< 10 OUI Condition de bouclage Afficher i i = i+ 2 Au lieu de : i=3. } Incrémentation 27/02/2008 AA-MC5 35 . i<10 .Le FOR pour la simplicité Le FOR est un WHILE où l’on précise valeur initiale. i=i+2 ) { System.out. i=i+2. while (i<10) { System.

La gestion des erreurs en Java Une exception est une erreur détectée par la programme.out. ic=ia/ib.ic.ib. Exemples : Diviser par zéro Ouvrir un fichier inexistant int ia.println("résultat="+ic). System. ib = 0 . Une exception a été générée par le programme et la machine virtuelle java arrête le programme ! 27/02/2008 AA-MC5 36 . ia = 145 .

il faut gérer les exceptions.println("résultat="+ic). On teste AVANT que l'erreur if (ib!=0) { ne se produise.out.Gestion des exceptions Pour éviter d'un programme ne plante à cause d'une exception.println("Calcul de ic impossible").out. } AA-MC5 37 La prévention n'est pas toujours possible… 27/02/2008 . } else { System. } catch (Exception e) { System.out. Deux techniques Prévention (IF) Traitement (TRY) … PREVENTION : ib = 0 . comme en C ic=ia/ib.out.println("résultat="+ic). System. } … TRAITEMENT : ib = 0 . System.println("Calcul de ic impossible"). On capture l'erreur si elle se try { produit… ic=ia/ib.

AA – MC5 COURS 2 (suite) Exemples de petits programmes classiques en java 27/02/2008 AA-MC5 38 .

else System. boolean bCSisOK = dSal>=5 && dSal<=7.out.out.java public class Aquarium1 { static double dTemp = 32.println("Problème"). } } 27/02/2008 AA-MC5 39 .println("OK"). public static void main (String [] args) { boolean bTisOK = dTemp>=28 && dTemp<=31. static double dSal = 6.5. if (bTisOK && bCSisOK) System.Programme Aquarium1 Usage de variables booléennes Aquarium1.2.

dy.dx. } else if (delta == 0) { dx = -db / (2*da). else { delta = db*db-4*da*dc.dc=1. dy=(-db+Math. } } } 27/02/2008 AA-MC5 40 .out. public static void main (String [] args) { if (da==0) System.sqrt(delta))/(2*da).db=3. static double delta.Programme Trinome public class Trinome { static double da=2.out. System. System.out.out. if (delta >0) { dx=(-db-Math. } else System.println("Ce n'est pas une equation de degré 2").println("Deux solutions " + dx + " et " + dy).println("Une solution " + dx).sqrt(delta))/(2*da).println("Pas de solution").

else System.out. }else System.out. } } 27/02/2008 AA-MC5 41 .println("Voyelle").Programme Voyelles1 Voyelles1. public static void main (String [] args) { c = 'p'.println("Consonne"). if ( c>='a' & c<='z') { if ( (c=='a')|(c=='e')|(c=='i')| (c=='o')|(c=='u')|(c=='y')) System.out.java public class Voyelles1 { static char c.println("Ce n'est pas une lettre").

} } } 27/02/2008 AA-MC5 42 . break.java public class Voyelles2 static char c. default : System.println("Consonne").println("Voyelle").out.out. switch(c) { case 'a': case 'e': case 'i': case 'o': case 'u': case 'y': System. { public static void main (String [] args) { c = 'p'.Programme Voyelles2 Voyelles2.

io pour lire la chaîne de caractères } public static void main (String [] args) { int i.io. Lecture d'un entier: utilisation de la System.print("entrer un nombre entier >"). i<100.java public class TableASCII { public static String getString(){ try{ return new java. lecture entier TableASCII.out. i++ ) { System.IOException e) {return "".in)).} for (i=iDeb. classe Integer try { iDeb= Integer. } catch (NumberFormatException e) {System. } utilisation de java.out.io.parseInt(getString()).InputStreamReader(System.println("erreur"+e).readLine().io.BufferedReader(new java.Programme TableASCII.print(" "+i). } } } 27/02/2008 AA-MC5 43 . }catch(java.out. iDeb=0.

println("PERDU").iNombreSecret.println("Tirage de "+iTirage). n++.out.println("GAGNE").Programme TirageAuHasard1 public class TirageAuHasard1 { Tirer 10 entiers de 0 à 9 et s'arrêter quand le nombre secret est trouvé public static void main (String [] args) { int iTirage. n=1. iNombreSecret = 5. } while (iTirage!=iNombreSecret && n<=10). if (iTirage == iNombreSecret ) System.out.out. } } 27/02/2008 AA-MC5 44 . do { iTirage = (int)(Math.random()*10).n. else System. System.

27/02/2008 AA-MC5 45 .n<=10. } } Modifier le programme permettant de tirer le nombre secret au hasard et Ensuite de lire le nombre entier donné par l'utilisateur jusqu'à ce que celui-ci trouve le nombre secret.println("Tirage de "+x).out. iNombreSecret=5. System.iNombreSecret. if (iTirage==nombreSecret) { System.println("GAGNE"). } } if (n>10) System. break.println("PERDU").Programme TirageAuHasard2 public class TirageAuHasard2 { public static void main (String [] args) { int iTirage.n++) { iTirage = (int)(Math.out.random()*10).out.n. for (n=1.

AA – MC5 COURS 3 Programmation Objet 27/02/2008 AA-MC5 46 .

} En C. z3. b.0 . printf(….im =-3. b.re = z1.re+z2.re.2 . a. double im } complex. a.re = 0 . c = addition(a. c. b. return z3.im = z2. complex addition(complex z1.im = 4. complex z2) { complex z3. une structure ne contient que des données… 27/02/2008 AA-MC5 47 .im = z1. un objet est réalisé avec une structure… Inconvénient.re = 1.Les Objets en C typedef struct { double re.im. z3. } void main(String arg[ ]){ complex a.b).0 .).

a.0 . } } AA-MC5 48 La classe principale contient une méthode d'addition statique que main() appelle… 27/02/2008 . b. Test.re+z2.out.Les Objets en java (premier essai) Complex.im = z2."+c.java public class Complex { double re. double im.im =-3. Complex z2) { Complex z3 = new Complex().im = 4.2 . a. return z3.java public static class Test { public static Complex addition(Complex z1.re = 0 . c = addition(a.re.im+"]"). Complex b = new Complex().println("c=["+c. } public static void main (String arg[ ]){ Complex a = new Complex().re+".re = z1.re = 1.b).im = z1. Complex c .0 . z3. System. b.im. } Java peut aussi faire des objets ne contenant que des données… Les opérations comme addition sont comme en C des fonctions statiques. z3.

return z2.0 .re.re b. b. a. c = a.re = re+z1.re a.println("c=["+c.im+"]"). b. } } La méthode addition "rentre" dans la classe. a.im c c. z2. double im. System."+c.re = 1.addition(b).im =-3.im = 4. } } a a. public Complex addition(Complex z1) { Complex z2.Les objets en java (mieux) Complex.im 49 27/02/2008 .out.java public class Complex { double re.im.0 . Elle n'est plus statique car elle s'applique à un objet…. z2.re c. Complex b = new Complex(). Complex c .re = 0 .im AA-MC5 b b.java public class Test { public static void main(String arg[ ]) { Complex a = new Complex().2 .im = im = z1.re+". Noter la manière d'appeler la méthode! Test.

re. return z2. 27/02/2008 AA-MC5 50 Test.2).java public class Test { void main (String arg[ ]){ Complex a = new Complex(1. } // constructeur de la classe Complex public Complex(double x.im.4.re+". System.out. c = a.0).-3).re = re+z1.java public class Complex { private double re. public Complex addition(Complex z1) { Complex z2 = new Complex(0. } } . private double im. z2."+c. Complex b = new Complex(0. z2. } } On ajoute dans la classe Complex une methode d'initialisation… On la nomme constructeur.im = im+z1. double y) { re = x. Complex c .addition(b). im = y.Les objets en java (le must) Complex.println("c=["+c.im+"]").

nom = "Jean". c1. c1.solde=25. Compte c2 = new Compte ().solde=10. c1.5.id = 2. c2.On reprend : le plus simple public class MonProgramme { public static void main(String arg[ ]){ Compte c1 = new Compte ().nom = "Isa". double solde. c2. int id.50 solde 25. } } c1 nom id Jean 1 c2 nom id Isa 2 La classe est un simple conteneur. } solde 10.00 27/02/2008 AA-MC5 51 . Deux instances sont créées par new… public class Compte { String nom.id = 1. c2.

5).10. public Compte(String n.1. id = i. double solde. solde = s. } } 27/02/2008 AA-MC5 52 .2. int id.25). double s) { nom = n. Compte c2 = new Compte ("Isa". } } Constructeur explicite avec paramètres public class Compte { String nom.On reprend : constructeur La classe explicite un constructeur qui initialise l'objet créé par new… public class MonProgramme { public static void main(String arg[]){ Compte c1 = new Compte ("Jean". int i.

double solde. c1. } } public Compte(String n. c2. public class MonProgramme { public static void main(String arg[]){ Compte c1 = new Compte ("Jean".On reprend : méthodes Des méthodes sont ajoutées pour opérer sur un objet… public class Compte { String nom.retirer(12).5). int id. id = i.2. } public void retirer(double somme) { solde = solde – somme. } public void deposer(double somme) {solde = solde + somme.25). solde = s. } } 27/02/2008 AA-MC5 53 .10. double s) { nom = n.deposer(5). int i.1. Compte c2 = new Compte ("Isa".

c’est le modèle à partir duquel on créé les objets (new) On manipule les variables et méthodes avec la notation pointée 27/02/2008 AA-MC5 54 . les méthodes qui s'appliquent à lui. Une classe.Définition Un objet ce sont : les données personnelles de l'objet.

int i. c'est un outil de conception et de documentation 27/02/2008 AA-MC5 55 .UML pour décrire une classe Compte ------------------------------------------String nom int id double solde -----------------------------------------Compte(String n. double s) public void retirer(double somme) public void deposer(double somme) Nom de classe UML = Uniform Modeling Langage Variable Méthodes UML est utilisé pour décrire ce que contient une classe.

3) } r1 longueur largeur 12 3 r3 r2 longueur largeur 5 3 56 7 7 } longueur 27/02/2008 AA-MC5 largeur .7) Rectangle r3 = new Rectangle(5. int long) double surface() double perimetre() Nom de classe Variable Méthodes public class Programme { public static void main(String arg[]){ Rectangle r1 = new Rectangle(12.Synthèse : Rectangle Programme -------------------------------------------------static void main(String a[]) -------------------------- Rectangle ------------------------double longeur double largeur -------------------------Rectangle(int larg.3) Rectangle r2 = new Rectangle(7.

Classe Rectangle Classe principale (main statique) 27/02/2008 AA-MC5 57 .Classe Rectangle Les deux classes sont dans un même paquet.

AA – MC5 COURS 3 (suite) Interfaces graphiques Comment elle fonctionne 27/02/2008 AA-MC5 58 .

Valeur = 137 JFrame JTextField JButton 27/02/2008 AA-MC5 59 .println( " valeur=" + x).Interface graphique Les programmes anciens communiquent à travers une simple fenêtre nommée "console" System.out. des boutons… Les interfaces graphiques et leurs composants sont des objets qui appartiennent à des classes prédéfinies. Les programmes modernes communiquent à travers une fenêtre dans laquelle on dispose de composants graphiques comme des zones de texte.

• Un événement provoque l'exécution d'une méthode. 27/02/2008 AA-MC5 60 . Un JFrame Un JPanel Deux JButton • L’utilisateur produit des événements auxquels les composants réagissent.Le principe L'interface graphique est composée de composants contenus dans un JFrame.

import javax. this.JFrame. La classe principale public class MonProgramme { public static void main(String[] args) { MonInterfaceGraphique i = new MonInterfaceGraphique(). } } package boutonsrb. import java. this. } } private void jbInit() throws Exception { this.getContentPane().setDefaultCloseOperation(DISPOSE_ON_CLOSE).setLayout(null). } } 27/02/2008 AA-MC5 61 . La classe graphique public class MonInterfaceGraphique extends JFrame { public MonInterfaceGraphique() throws HeadlessException { try { jbInit().Etape 1 : Projet et classes package boutonsrb. } catch(Exception e) { Constructeur e.printStackTrace().swing.setVisible(true).*.awt.

jPanel1. jButton2.setText("Bleu"). jPanel1. 110.setDefaultCloseOperation(DISPOSE_ON_CLOSE). 40)).setVisible(true). généré automatiquement des objets 2. this. this.Etape 2 : Composants public class MonInterfaceGraphique extends JFrame { JPanel jPanel1 = new JPanel(). jButton1. Initilisé ces objets comme souhaité public MonInterfaceGraphique() throws HeadlessException { try { jbInit(). 96)).getContentPane().yellow). null).setLayout(null). 132.setText("Rouge").setBackground(Color.add(jButton1.getContentPane(). 110. 40)). 131. JButton jButton1 = new JButton(). this. null). 279. this. JButton jButton2 = new JButton(). jButton1.setBounds(new Rectangle(33.getContentPane(). jButton2.setBounds(new Rectangle(33. } } AA-MC5 62 27/02/2008 .add(jPanel1. Le RAD a 1.setBounds(new Rectangle(200. this. } } private void jbInit() throws Exception { this. 22.add(jButton2.printStackTrace().getContentPane(). null). } catch(Exception e) { e.

setText("Bleu"). } private void jbInit() throws Exception { … jButton1.Etape 3 : Interactions public class MonInterfaceGraphique extends JFrame { JPanel jPanel1 = new JPanel().awt. JButton jButton1 = new JButton(). ….blue).addActionListener(new MonInterfaceGraphique_jButton1_actionAdapter(this)). L'écouteur jButton1. } } class MonInterfaceGraphique_jButton1_actionAdapter implements java. … } void jButton1_actionPerformed(ActionEvent e) { jPanel1. public MonInterfaceGraphique() throws HeadlessException { try { jbInit().setBackground(Color. this. JButton jButton2 = new JButton().ActionListener { ….setVisible(true).event. } La classe de l'écouteur 27/02/2008 AA-MC5 63 CLICK ! La méthode associée .

setText(jTextField1. } } 27/02/2008 AA-MC5 64 .Création Application graphique public void jButton1_actionPerformed(ActionEvent e) { jLabel1.getText()).

Création Applet

public void jButton1_actionPerformed(ActionEvent e) { jLabel1.setText(jTextField1.getText()); } }

27/02/2008

AA-MC5

65

AA – MC5
COURS 4 Programmation statique ou objet

27/02/2008

AA-MC5

66

Une démonstration
On va comparer deux façons de programmer :
La programmation classique, sans objet : on dit statique La programmation objet

L'exemple consiste à calculer la surface d'un cercle et d'un carré avec ces deux approches…
27/02/2008 AA-MC5 67

} } import MesFormules. surface = MesFormules.println("Surface = "+surface).surfaceCercle(rayon). public static surfaceCercle(double r) { return PI*r*r. } public static surfaceCarre(double c) { return c*c. System. double surface.14159.out. public class Programme { public static void main(String arg[]) { double rayon=10. } } 27/02/2008 AA-MC5 68 .Programmation statique public class MesFormules { public static double PI = 3.

} } 27/02/2008 AA-MC5 69 public class Carre { double cote. double surface = unCercle.Programmation objet public class Cercle { double rayon. } public double surface() { return cote*cote. public class Programme { public static void main(String arg[]) { Carre unCarre = new Carre(3).surface(). public Carre(double c) { cote = c . Cercle unCercle = new Cercle(2). } public double surface() { return Math. } } import Carre.PI*rayon*rayon. } } . Cercle.println("Surface = "+surface).out. public Cercle(double r) { rayon = r . System.

AA – MC5 COURS 4 (suite) Les API de Java 27/02/2008 AA-MC5 70 .

Math. Thread… Java.io FileReader. String.lang Integer. Double.util Collection.Classes prédéfinies dans Java Très nombreuses.text DecimalFormat… Java.swing Composants graphiques 27/02/2008 AA-MC5 71 . System. FileWriter… Java. Voir documentation très bien faite… Java. classée en packages. StringTockenizer Javax. Vector.

random().La classe Math (statique) Exemples d'utilisation double double double double double double Double Double d1 d2 d3 d4 d5 d6 d7 d8 = = = = = = = = Math.exp(d2). Math.pow(d1.4.log(d3).max(d2. Math. 10)).sin(45). Noter le prefixe Math qui est le nom de la classe et non un objet… 27/02/2008 AA-MC5 72 . Math.tan(PI/4). Math. Math. Math.PI. Math. 23.

char c = s1.equals("hello")) … length() substring(…) replace(…) charAt() indexOf(…) equals() donne la longueur d'une chaîne extrait une sous-chaîne remplace un caractère Récupère un caractère donné donne la position d'un caractère Compare deux chaines 27/02/2008 AA-MC5 73 . String s2 = s1 + s2.substring(9.charAt(2). String s1 = new String("hello").indexOf('l'). Concaténation Méthodes courantes int N = s1.La classe String (objet) Création String s1 = "hello". int i = s2.length().12). if ( s1. String s3 = s2. La première forme est une abréviation de la seconde Opérateur + String s2 = " le CNAM".

AA – MC5 COURS 4 (suite) Développement et exécution 27/02/2008 AA-MC5 74 .

Documentation API Paquets standards Description de la classe Classes 27/02/2008 AA-MC5 75 .

La classe principale contient une fonction main() qui sera lancée au démarrage import Votre paquet Main() Votre projet 27/02/2008 AA-MC5 76 .swing import Vos classes en construction dans votre paquet.lang Des paquets de classes prédéfinies String JButton javax.Projet et paquet java.

17.particle.kth.htm http://www.se/~lindsey/JavaCo urse/Book/index.42:8082/JavaCourse/BMPL oader.com/java/guide/ furn/furn.Bibliographie http://richardbowles.html 27/02/2008 AA-MC5 77 .86.html http://72.tripod.

hexadécimal. binaire.Les projets Logiciel de conversion entier. Affichage de formes via ligne de commande Gestion base de données de personnes. visualisation par led. Loto 27/02/2008 AA-MC5 78 .

rond (classes et gestion graphique) Jeu applet tennis calculatrice 27/02/2008 AA-MC5 79 .Les projets costauds Horloge (thread) Lecture bmp et traitement image (lecture fichier et tableaux) Logiciel dessin carre.