Vous êtes sur la page 1sur 79

AA MC5

Apprendre Autrement la programmation avec Java

27/02/2008

AA-MC5

AA MC5
COURS 1 Prsentation de MC5
27/02/2008 AA-MC5 2

Objectif
La programmation est enseigne 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 Intrt de Java :
Mme syntaxe que le C Orientation objet Interfaces graphiques

27/02/2008

AA-MC5

le programme et quipe
Programme
COURS : 5 + 1 prparation au DS TD : 8 TP : 3 DS : 1

Equipe
JP. Dalban (responsable module, 1 gr) C. Barat (1 gr) T. Hamel (1 gr) V. Zarzoso (1 gr + Malaisiens + Apprentis)

27/02/2008

AA-MC5

La pdagogie
Le cours : les concepts importants
Prsence indispensable

Les TD : acquisition du savoir


Travail en binme 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 raliser

Le DS : contrle du savoir
Travail personnel sur papier Le cahier ou classeur, les polycopis 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

Documents

OBLIGATOIRES en TD et TP AUTORISE en DS

27/02/2008

AA-MC5

Latelier 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

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

Prsentation de Java
Proche du C classique Orient objet comme lancien C++ Un concurrent Microsoft : C# Nombreuses possibilits de Java :
Interfaces graphiques Communication rseau Multi-tches Informatique industrielle Tous types de systmes (machine virtuelle) Applet dans des pages web

Ne pas confondre Java avec JavaScript


27/02/2008 AA-MC5 10

Premier programme en Java (Cration du projet)


Cration du projet test sous JBuilder 2005

Notre programme principal se trouve dans la classe Test.java

Un package est un rpertoire pouvant accueillir plusieurs classes


11

27/02/2008

AA-MC5

Premier programme en Java (Configuration d'excution)


Programme principal (main)

Pour excuter la classe Test, il est ncessaire de crer une configuration d'excution

27/02/2008

AA-MC5

12

Premier programme en Java (Excution et test)


Une fois la configuration d'excution cre, il est possible de lancer le programme

Il est aussi possible de l'application Test.class package test en ligne de (fentre DOS ou Dmarrer

lancer dans le commande Excuter).

27/02/2008

AA-MC5

13

Rcapitulatif des fichiers crs par JBuilder


test Rpertoire de projet

1
Configuration du projet CREATION PROJET src test.jpx

Les sources

Les codes compils

classes paquet paquet

test

test

2
DEVELOPPEMENT DU PROGRAMME Test.java

4 VM
Test.class

COMPILATION
27/02/2008 AA-MC5

EXECUTION
14

Compilation en C et en java (bytecode et JVM)


T.c
void main (void) { int ia=2,ib=3,ic; ic=ia+ib; printf("%d",ic); }

compilation

T.exe

T.java
public class T { public static void main (String [] args) { int ia=2,ib=3,ic; ic=ia+ib; System.out.println(i); } }

Un programme source en C est compil et devient un fichier excutable xxx.exe par le processeur de la machine. Un programme source en java est compil et devient un fichier lisible par la machine virtuelle java (JVM).

compilation T.class
Bytecode
27/02/2008 AA-MC5 15

Deuxime Programme
public class DeuxiemeProgramme { static String s1, s2, s3; static int ia,ib,ic; public static void main (String [] args) { s1 = "Victor"; s2 = "Hugo"; s3 = s1 + " " + s2; System.out.println(s3); ia=2; ib=3; ic=ia+ib; System.out.println(ia + " plus " + ib + " vaut " + ic); } }

A la diffrence avec le langage C, une chane de caractre se dfinit comme le "type" String. La concatnation de 2 chanes de caractres peut se faire avec l'oprateur +.
27/02/2008 AA-MC5 16

Les types simples


Les objets seront vus plus tard En attendant, on cr des variables avec les types simple (existent en C)
Entiers signs :
byte (8 bits), short (16 bits), int (32 bits), long (64 bits).

Rels :
float (32 bits), double (64 bits)

Caractres :
char (16 bits, Unicode au lieu dASCII)

Valeurs logiques
boolean

27/02/2008

AA-MC5

17

Parenthse sur l'information


Bit : valeur 0 ou 1 Octet : 8 bits exemple : 00110101
Comptage 0 255 Mmoire de nombreux octets
Ko = 1024 octets (kilo millier) Mo = 1024x1024 octets (mega million) Go = 1024x 1024x1024 octets (giga milliard)

Attention, en anglais octet = byte


Ko = Kb, Mo = Mb, Go = Gb

27/02/2008

AA-MC5

18

Les types simples numriques


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,4039846e-45 3,40282347e+38 (pour les valeurs positives) de 4,940656e-324 1,79779e+308 (pour les valeurs positives) Octets 1 2 4 8 4

entiers

flottants
8

On choisit le type en fonction de lusage que lon a


double da=2.98; int ib=3 ; double dMoy = (da+ib)/2 ;

27/02/2008

AA-MC5

19

Les types char et boolan


caractres :
Ce nest plus le code ASCII (8 bits), mais le code l UNICODE (16 bits) pour grer les caractres nationaux du monde.

boolens :
Ce nest plus 0 et 1 mais false et true
type char domaine de valeurs De \u0000 \uFFFF tendue complte On peut noter A, B, etc ( A quivaut \u0041 ) true (vrai), false (faux) Octets 2

boolean

char c = 'A' ; boolean bTest = true ;


27/02/2008

La variable c a la valeur 'A' La variable bTest a la valeur VRAI


AA-MC5 20

Les oprateurs arithmtiques


Oprateurs Addition Oprateurs Arithmtiques (entiers et flottants) Soustraction Multiplication Division Modulo ET Oprateurs sur les bits (entiers seulement) OU OU exclusif Dcalage droite Dcalage gauche Symbole + * / % & | ^ >> << Exemples z=x+y; z=x-y; z=x*y; z=x/3; y=x%3; y=x&2; y=x|2; y=x^2; y=x>>4; y=x<<2;

Pour les dcalages, se limiter des entiers positifs cause du signe

int ia=3, ib=5; int ic; ic = ia * ib;


Rsultat c vaut 15
27/02/2008

int n=3; int i1, i2; i1 = n&2; i2 = n<<3;


AA-MC5

Rsultats i1 vaut 2 i2 vaut 24

21

Les expressions et laffectation


Les oprateurs servent combiner des valeurs. Il y a une hirarchie des oprateurs (pareil quen math). En cas dincertitude, utiliser des parenthses.
float fx = 2+3*5 ; float fy = (2+3)*5 ;
fx vaut 17 et fy vaut 25

Laffectation (=) sert ranger une valeur dans une variable.

! *
PRIORITE

/ % != =

+ ==

27/02/2008

AA-MC5

22

Structure d'un programme


MaClasse.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 .java (.c pour le langage C)

A la diffrences avec le langage C toute fonction est forcment dans une classe (mot cl Class). Par contre, on retrouve l'intrieur de la classe la mme structure du programme : Des variables globales ou locales la classe Des fonctions et une fonction principale "main"

27/02/2008

AA-MC5

23

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

Conversions automatiques
int n; long la = 10; byte by = 2; n = la + by ; A op B
int REGLE 0 int REGLE 0 : REGLE 1 : REGLE 2 : ATTENTION Mme type : Pas de conversion Promotion de byte et short en int Promotion au plus grand type : byte<short<int<long<float<double : Constante entire = int, constante relle = double

int

A
byte int

op

B
short int

A
int long

op

B
long

A
int double

op

A
float double

op

B
double

double

int REGLE 1
27/02/2008

long REGLE 2
AA-MC5

double REGLE 2

double

25

Exemple de conversion
OK OK
long la = 10; byte by = 2; double dx; dx = la + 3.5 * by ;
Exemple ci-dessus: Les rgles appliques sont : by > double la > double Rsultat double : dx vaut 17

int ix,iy,iz; ix=4; iy = (ix/3)*3;


Exemple ci-dessus: AUCUNE CONVERSION Rsultat int : y vaut 3

Erreur !
int ix,iy,iz; ix=4; iy = (ix/3.0)*3;
Exemple ci-dessus: 3.0 est un double ix > double 3 > double Rsultat double

27/02/2008

AA-MC5

26

Conversions forces
double da = 1.5; int ib; ib = da;

A la diffrence avec le langage C, Java ne permet pas une conversion de type dgradante (grand type vers petit type) Chaque conversion de type dgradante doit tre caste !

Erreur !
Pour forcer un type : Indiquer le type entre parenthses devant la valeur forcer.

int ia=2, ic ; double db = 3.5 ; ic = (int)(ia + db);

ia+db vaut 5.5 ic vaut 5 aprs forage

NON, erreur de compilation

float fx = 0.99 ; float fx = (float) 0.99; float fx = 0.99f;


27/02/2008 AA-MC5

OUI

27

Tableau des oprateurs boolens


Oprateurs Egal Diffrent Oprateurs de comparaison (rsultat boolen) Suprieur Infrieur Suprieur ou gal Infrieur ou gal Oprateur logiques (oprations sur des boolens) 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.5; if ((fTemp>=20)&&(fTemp<=30)) System.out.println("temp OK"); else


System.out.println("temp hors limite");

float fTemp=24.5; boolean bTemp = (t>=20)&&(t<=30); if (bTemp)

Idem en utilisant une variable boolenne


27/02/2008 AA-MC5 28

AA MC5
COURS 2 Rappel sur les structures de contrle
27/02/2008 AA-MC5 29

Squence
Sauf indication, un programme va tout droit : les instructions sont excutes en squence ( la suite les unes des autres) Un squence est une suite d'instruction groupes dans un bloc dlimit par des { }.

{
Instruction 1 Instruction 2 Instruction 3 Instruction 4 Instruction 5

}
SEQUENCE

27/02/2008

AA-MC5

30

Les structures de contrle


Mais l'intelligence n'est pas d'aller toujours tout droit Le programme doit pouvoir faire des alternatives et des boucles :
Boucle = rpter des instructions tant quune condition est vraie Alternative = faire ou en fonction dune condition

NON

cond
NON OUI

cond
OUI

instructions

instructions

instructions

ALTERNATIVE
27/02/2008 AA-MC5

BOUCLE
31

Le IF pour les alternatives


Le IF teste une condition
iT>100 OUI NON Alarme!

int iT=10; if ( iT > 100 ) System.out.println("Alarme!"); Noter le rle des accolades pour dlimiter des blocs dinstructions if ((iT>=20)&&(iT<=30) ) { System.out.println("Je vais la mer"); System.out.println("Je me baigne"); } else System.out.println("Je vais au cin");

NON Je vais au cin

iT>=20 et iT<=30

OUI

Je vais la mer Je me baigne

27/02/2008

AA-MC5

32

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 dune mme variable entire

switch( iT { case 2 : case 5 : case 13: default: }

) System.out.println(DEUX); break; System.out.println(CINQ); break; System.out.println(TREIZE); break; System.out.println(AUCUN!);

Attention : ne pas oublier de clturer chaque cas par un break .

27/02/2008

AA-MC5

33

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; do { System.out.println(i); i=i+2; } while (i<10);


27/02/2008

int i=3; while (i<10) { System.out.println(i); i=i+2; }


AA-MC5 34

Le FOR pour la simplicit


Le FOR est un WHILE o lon prcise valeur initiale, condition de bouclage et incrmentation.
i=3

Valeur initiale

Il suffit dcrire : for( i=3 ; i<10 ; i=i+2 ) { System.out.println(i); }

NON

i< 10
OUI

Condition de bouclage

Afficher i i = i+ 2

Au lieu de : i=3; while (i<10) { System.out.println(i); i=i+2; }

Incrmentation

27/02/2008

AA-MC5

35

La gestion des erreurs en Java


Une exception est une erreur dtecte par la programme. Exemples :
Diviser par zro Ouvrir un fichier inexistant

int ia,ib,ic; ia = 145 ; ib = 0 ; ic=ia/ib; System.out.println("rsultat="+ic);

Une exception a t gnre par le programme et la machine virtuelle java arrte le programme !

27/02/2008

AA-MC5

36

Gestion des exceptions


Pour viter d'un programme ne plante cause d'une exception, il faut grer les exceptions. Deux techniques
Prvention (IF) Traitement (TRY)
PREVENTION : ib = 0 ; On teste AVANT que l'erreur if (ib!=0) { ne se produise, comme en C ic=ia/ib; System.out.println("rsultat="+ic); } else { System.out.println("Calcul de ic impossible"); } TRAITEMENT : ib = 0 ; On capture l'erreur si elle se try { produit ic=ia/ib; System.out.println("rsultat="+ic); } catch (Exception e) { System.out.println("Calcul de ic impossible"); }
AA-MC5 37

La prvention n'est pas toujours possible

27/02/2008

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

Programme Aquarium1
Usage de variables boolennes

Aquarium1.java
public class Aquarium1 { static double dTemp = 32.5; static double dSal = 6.2; public static void main (String [] args) { boolean bTisOK = dTemp>=28 && dTemp<=31; boolean bCSisOK = dSal>=5 && dSal<=7; if (bTisOK && bCSisOK) System.out.println("OK"); else System.out.println("Problme"); } }

27/02/2008

AA-MC5

39

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

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

Programme Voyelles2
Voyelles2.java
public class Voyelles2 static char c; {

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

Programme TableASCII, lecture entier


TableASCII.java
public class TableASCII { public static String getString(){ try{
return new java.io.BufferedReader(new java.io.InputStreamReader(System.in)).readLine();

}catch(java.io.IOException e) {return ""; }

utilisation de java.io pour lire la chane de caractres

} public static void main (String [] args) { int i, iDeb=0; Lecture d'un entier: utilisation de la System.out.print("entrer un nombre entier >"); classe Integer try { iDeb= Integer.parseInt(getString()); } catch (NumberFormatException e) {System.out.println("erreur"+e);} for (i=iDeb; i<100; i++ ) { System.out.print(" "+i); } } }
27/02/2008 AA-MC5 43

Programme TirageAuHasard1
public class TirageAuHasard1 {
Tirer 10 entiers de 0 9 et s'arrter quand le nombre secret est trouv

public static void main (String [] args) { int iTirage,n,iNombreSecret; iNombreSecret = 5; n=1; do {

iTirage = (int)(Math.random()*10); System.out.println("Tirage de "+iTirage); n++; } while (iTirage!=iNombreSecret && n<=10); if (iTirage == iNombreSecret ) System.out.println("GAGNE"); else System.out.println("PERDU"); } }
27/02/2008 AA-MC5 44

Programme TirageAuHasard2
public class TirageAuHasard2 { public static void main (String [] args) { int iTirage,n,iNombreSecret; iNombreSecret=5; for (n=1;n<=10;n++) { iTirage = (int)(Math.random()*10); System.out.println("Tirage de "+x); if (iTirage==nombreSecret) { System.out.println("GAGNE"); break; } } if (n>10) System.out.println("PERDU"); } } 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.
27/02/2008 AA-MC5

45

AA MC5
COURS 3 Programmation Objet

27/02/2008

AA-MC5

46

Les Objets en C
typedef struct { double re, double im } complex; complex addition(complex z1, complex z2) { complex z3; z3.re = z1.re+z2.re; z3.im = z1.im = z2.im; return z3; } void main(String arg[ ]){ complex a, b, c; a.re = 1.0 ; a.im = 4.2 ; b.re = 0 ; b.im =-3.0 ; c = addition(a,b); printf(.); }

En C, un objet est ralis avec une structure Inconvnient, une structure ne contient que des donnes

27/02/2008

AA-MC5

47

Les Objets en java (premier essai)


Complex.java
public class Complex { double re; double im; }
Java peut aussi faire des objets ne contenant que des donnes Les oprations comme addition sont comme en C des fonctions statiques.

Test.java
public static class Test { public static Complex addition(Complex z1, Complex z2) { Complex z3 = new Complex(); z3.re = z1.re+z2.re; z3.im = z1.im = z2.im; return z3; } public static void main (String arg[ ]){ Complex a = new Complex(); Complex b = new Complex(); Complex c ; a.re = 1.0 ; a.im = 4.2 ; b.re = 0 ; b.im =-3.0 ; c = addition(a,b); System.out.println("c=["+c.re+","+c.im+"]"); } }
AA-MC5 48

La classe principale contient une mthode d'addition statique que main() appelle
27/02/2008

Les objets en java (mieux)


Complex.java
public class Complex { double re; double im; public Complex addition(Complex z1) { Complex z2; z2.re = re+z1.re; z2.im = im = z1.im; return z2; } }
La mthode addition "rentre" dans la classe. Elle n'est plus statique car elle s'applique un objet. Noter la manire d'appeler la mthode!

Test.java
public class Test { public static void main(String arg[ ]) { Complex a = new Complex(); Complex b = new Complex(); Complex c ; a.re = 1.0 ; a.im = 4.2 ; b.re = 0 ; b.im =-3.0 ; c = a.addition(b); System.out.println("c=["+c.re+","+c.im+"]"); } }

a a.re a.im
AA-MC5

b b.re b.im

c c.re c.im
49

27/02/2008

Les objets en java (le must)


Complex.java
public class Complex { private double re; private double im; public Complex addition(Complex z1) { Complex z2 = new Complex(0,0); z2.re = re+z1.re; z2.im = im+z1.im; return z2; } // constructeur de la classe Complex public Complex(double x, double y) { re = x; im = y; } }
On ajoute dans la classe Complex une methode d'initialisation On la nomme constructeur.
27/02/2008 AA-MC5 50

Test.java
public class Test { void main (String arg[ ]){ Complex a = new Complex(1,4.2); Complex b = new Complex(0,-3); Complex c ; c = a.addition(b); System.out.println("c=["+c.re+","+c.im+"]"); } }

On reprend : le plus simple


public class MonProgramme { public static void main(String arg[ ]){ Compte c1 = new Compte (); Compte c2 = new Compte (); c1.nom = "Jean"; c1.id = 1; c1.solde=10.5; c2.nom = "Isa"; c2.id = 2; c2.solde=25; } } c1 nom id Jean 1 c2 nom id Isa 2 La classe est un simple conteneur. Deux instances sont cres par new

public class Compte { String nom; int id; double solde; }

solde 10.50

solde 25.00

27/02/2008

AA-MC5

51

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",1,10.5); Compte c2 = new Compte ("Isa",2,25); } } Constructeur explicite avec paramtres

public class Compte { String nom; int id; double solde;

public Compte(String n, int i, double s) { nom = n, id = i; solde = s; } }


27/02/2008 AA-MC5 52

On reprend : mthodes
Des mthodes sont ajoutes pour oprer sur un objet public class Compte { String nom; int id; double solde; public class MonProgramme { public static void main(String arg[]){ Compte c1 = new Compte ("Jean",1,10.5); Compte c2 = new Compte ("Isa",2,25); c1.retirer(12); c2.deposer(5); } }

public Compte(String n, int i, double s) { nom = n, id = i; solde = s; } public void retirer(double somme) { solde = solde somme; } public void deposer(double somme) {solde = solde + somme; } }
27/02/2008 AA-MC5 53

Dfinition
Un objet ce sont :
les donnes personnelles de l'objet, les mthodes qui s'appliquent lui.

Une classe, cest le modle partir duquel on cr les objets (new) On manipule les variables et mthodes avec la notation pointe

27/02/2008

AA-MC5

54

UML pour dcrire une classe


Compte ------------------------------------------String nom int id double solde -----------------------------------------Compte(String n, int i, double s) public void retirer(double somme) public void deposer(double somme)
Nom de classe UML = Uniform Modeling Langage

Variable

Mthodes

UML est utilis pour dcrire ce que contient une classe, c'est un outil de conception et de documentation
27/02/2008 AA-MC5 55

Synthse : Rectangle
Programme
-------------------------------------------------static void main(String a[]) --------------------------

Rectangle
------------------------double longeur double largeur -------------------------Rectangle(int larg, int long) double surface() double perimetre()

Nom de classe

Variable

Mthodes

public class Programme { public static void main(String arg[]){


Rectangle r1 = new Rectangle(12,3) Rectangle r2 = new Rectangle(7,7) Rectangle r3 = new Rectangle(5,3) }

r1 longueur largeur 12 3 r3

r2 longueur largeur 5 3
56

7 7

longueur
27/02/2008 AA-MC5

largeur

Classe Rectangle
Les deux classes sont dans un mme paquet.

Classe Rectangle

Classe principale (main statique)


27/02/2008 AA-MC5 57

AA MC5
COURS 3 (suite) Interfaces graphiques
Comment elle fonctionne

27/02/2008

AA-MC5

58

Interface graphique
Les programmes anciens communiquent travers une simple fentre nomme "console" System.out.println( " valeur=" + x); Les programmes modernes communiquent travers une fentre dans laquelle on dispose de composants graphiques comme des zones de texte, des boutons
Les interfaces graphiques et leurs composants sont des objets qui appartiennent des classes prdfinies.

Valeur = 137

JFrame

JTextField

JButton

27/02/2008

AA-MC5

59

Le principe
L'interface graphique est compose de composants contenus dans un JFrame.
Un JFrame

Un JPanel

Deux JButton

Lutilisateur produit des vnements auxquels les composants ragissent. Un vnement provoque l'excution d'une mthode.
27/02/2008 AA-MC5 60

Etape 1 : Projet et classes


package boutonsrb; import javax.swing.JFrame; import java.awt.*;

La classe graphique

public class MonInterfaceGraphique extends JFrame { public MonInterfaceGraphique() throws HeadlessException { try { jbInit(); this.setVisible(true); } catch(Exception e) { Constructeur e.printStackTrace(); } } private void jbInit() throws Exception { this.setDefaultCloseOperation(DISPOSE_ON_CLOSE); this.getContentPane().setLayout(null); } } package boutonsrb;

La classe principale

public class MonProgramme { public static void main(String[] args) { MonInterfaceGraphique i = new MonInterfaceGraphique(); } } 27/02/2008 AA-MC5 61

Etape 2 : Composants
public class MonInterfaceGraphique extends JFrame { JPanel jPanel1 = new JPanel(); JButton jButton1 = new JButton(); JButton jButton2 = new JButton();

Le RAD a 1. gnr automatiquement des objets 2. Initilis ces objets comme souhait

public MonInterfaceGraphique() throws HeadlessException { try { jbInit(); this.setVisible(true); } catch(Exception e) { e.printStackTrace(); } } private void jbInit() throws Exception { this.setDefaultCloseOperation(DISPOSE_ON_CLOSE); this.getContentPane().setLayout(null); jPanel1.setBackground(Color.yellow); jPanel1.setBounds(new Rectangle(33, 22, 279, 96)); jButton1.setBounds(new Rectangle(33, 131, 110, 40)); jButton1.setText("Bleu"); jButton2.setBounds(new Rectangle(200, 132, 110, 40)); jButton2.setText("Rouge"); this.getContentPane().add(jPanel1, null); this.getContentPane().add(jButton1, null); this.getContentPane().add(jButton2, null); } } AA-MC5 62

27/02/2008

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

CLICK !

La mthode associe

Cration Application graphique

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

27/02/2008

AA-MC5

64

Cration 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 dmonstration
On va comparer deux faons 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

Programmation statique
public class MesFormules { public static double PI = 3.14159; public static surfaceCercle(double r) { return PI*r*r; } public static surfaceCarre(double c) { return c*c; } }

import MesFormules; public class Programme {

public static void main(String arg[]) { double rayon=10; double surface; surface = MesFormules.surfaceCercle(rayon); System.out.println("Surface = "+surface); } }
27/02/2008 AA-MC5 68

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

public class Carre { double cote; public Carre(double c) { cote = c ; } public double surface() { return cote*cote; } }

AA MC5
COURS 4 (suite) Les API de Java

27/02/2008

AA-MC5

70

Classes prdfinies dans Java


Trs nombreuses, classe en packages. Voir documentation trs bien faite

Java.lang
Integer, Double, Math, String, System, Thread

Java.io
FileReader, FileWriter

Java.text
DecimalFormat

Java.util
Collection, Vector, StringTockenizer

Javax.swing
Composants graphiques
27/02/2008 AA-MC5 71

La classe Math (statique)


Exemples d'utilisation
double double double double double double Double Double d1 d2 d3 d4 d5 d6 d7 d8 = = = = = = = = Math.sin(45); 23.4; Math.exp(d2); Math.log(d3); Math.max(d2, Math.pow(d1, 10)); Math.PI; Math.tan(PI/4); Math.random();

Noter le prefixe Math qui est le nom de la classe et non un objet

27/02/2008

AA-MC5

72

La classe String (objet)


Cration String s1 = "hello"; String s1 = new String("hello"); La premire forme est une abrviation de la seconde

Oprateur + String s2 = " le CNAM"; String s2 = s1 + s2; Concatnation

Mthodes courantes int N = s1.length(); char c = s1.charAt(2); String s3 = s2.substring(9,12); int i = s2.indexOf('l'); if ( s1.equals("hello"))

length() substring() replace() charAt() indexOf() equals()

donne la longueur d'une chane extrait une sous-chane remplace un caractre Rcupre un caractre donn donne la position d'un caractre Compare deux chaines

27/02/2008

AA-MC5

73

AA MC5
COURS 4 (suite) Dveloppement et excution

27/02/2008

AA-MC5

74

Documentation API
Paquets standards

Description de la classe

Classes

27/02/2008

AA-MC5

75

Projet et paquet
java.lang Des paquets de classes prdfinies
String JButton

javax.swing

import Vos classes en construction dans votre paquet. La classe principale contient une fonction main() qui sera lance au dmarrage

import

Votre paquet
Main()

Votre projet

27/02/2008

AA-MC5

76

Bibliographie
http://richardbowles.tripod.com/java/guide/ furn/furn.htm http://www.particle.kth.se/~lindsey/JavaCo urse/Book/index.html http://72.86.17.42:8082/JavaCourse/BMPL oader.html

27/02/2008

AA-MC5

77

Les projets

Logiciel de conversion entier, binaire, hexadcimal, visualisation par led. Affichage de formes via ligne de commande Gestion base de donnes de personnes. Loto

27/02/2008

AA-MC5

78

Les projets costauds Horloge (thread) Lecture bmp et traitement image (lecture fichier et tableaux) Logiciel dessin carre, rond (classes et gestion graphique) Jeu applet tennis calculatrice

27/02/2008

AA-MC5

79