Академический Документы
Профессиональный Документы
Культура Документы
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
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
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
27/02/2008
AA-MC5
Pour excuter la classe Test, il est ncessaire de crer une configuration d'excution
27/02/2008
AA-MC5
12
Il est aussi possible de l'application Test.class package test en ligne de (fentre DOS ou Dmarrer
27/02/2008
AA-MC5
13
1
Configuration du projet CREATION PROJET src test.jpx
Les sources
test
test
2
DEVELOPPEMENT DU PROGRAMME Test.java
4 VM
Test.class
COMPILATION
27/02/2008 AA-MC5
EXECUTION
14
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
Rels :
float (32 bits), double (64 bits)
Caractres :
char (16 bits, Unicode au lieu dASCII)
Valeurs logiques
boolean
27/02/2008
AA-MC5
17
27/02/2008
AA-MC5
18
entiers
flottants
8
27/02/2008
AA-MC5
19
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
21
! *
PRIORITE
/ % != =
+ ==
27/02/2008
AA-MC5
22
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
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.
OUI
27
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
NON
cond
NON OUI
cond
OUI
instructions
instructions
instructions
ALTERNATIVE
27/02/2008 AA-MC5
BOUCLE
31
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");
iT>=20 et iT<=30
OUI
27/02/2008
AA-MC5
32
Le switch permet de prendre en compte des valeurs dune mme variable entire
27/02/2008
AA-MC5
33
i=3
affiche i i = i+ 2
OUI
i < 10
OUI
i < 10
NON
affiche i i= i+ 2
Valeur initiale
NON
i< 10
OUI
Condition de bouclage
Afficher i i = i+ 2
Incrmentation
27/02/2008
AA-MC5
35
Une exception a t gnre par le programme et la machine virtuelle java arrte le programme !
27/02/2008
AA-MC5
36
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
} 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
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
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
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+"]"); } }
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
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
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
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
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
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
27/02/2008
AA-MC5
64
Cration Applet
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; } }
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
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
27/02/2008
AA-MC5
72
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"))
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