Deuxime Partie
Mohamed Youssfi
med@youssfi.net
Rappels
Les performances:
Une application est cre pour rpondre , tout dabord, aux besoins
fonctionnels des entreprises.
La maintenance:
Scurit
Portabilit
Cot du logiciel
med@youssfi.net | ENSET Universit
Hassan II Mohammedia
Architectures
dune application
App Java
RMI, JMS
CORBA,SOAP
SGBD
SWING
Couche DAO
JPA, Hibernate
Smart Phone
SOAP (HTTP+XML)
Application .Net
SOAP (HTTP+XML)
ou CORBA
Aplication PHP
SOAP (HTTP+XML)
Serveur Messagerie
Couche mtier
Couche Service
Couche web
MiddleWares :
- Struts
- Spring
- JSF
- RMI
- CORBA
- EJB Session
- SOAP (Web Sevices)
- JMS
-Java Mail
-SMSLib
SMS
Client SMS
HTTP
Client HTTP
med@youssfi.net | ENSET Universit
Hassan II Mohammedia
Programme
Java?
Programmation oriente Objet Java
Objet et Classe
Hritage et accessibilit
Polymorphisme
Collections
Exceptions
Entres Sorties
Application de synthse COO (UML) et POO (JAVA).
Interfaces graphique AWT et SWING
Accs aux bases de donnes
Notions de Design Patterns
Threads
Sockets
Mapping objet relationnel avec Hibernate
Applications distribues avec RMI
med@youssfi.net | ENSET Universit
Hassan II Mohammedia
Par M.youssfi
Exceptions
Des erreurs produites par lapplication dans des cas exceptionnels que le
programmeur devrait prvoir et traiter dans son application. Ce genre derreur
sont de type Exception
Des erreurs qui peuvent tre gnre au niveau de la JVM et que le
programmeur ne peut prvoir dans sont application. Ce type derreurs sont de
type Error.
10
Les Exceptions
En Java, on peut classer les exceptions en deux
catgories :
11
Un premier exemple:
import java.util.Scanner;
public class App1 {
public static int calcul(int a,int b){
int c=a/b;
return c;
}
public static void main(String[] args) {
Scanner clavier=new Scanner(System.in);
System.out.print("Donner a:");int a=clavier.nextInt();
System.out.print("Donner b:");int b=clavier.nextInt();
int resultat=calcul(a, b);
System.out.println("Resultat="+resultat);
}
}
med@youssfi.net | ENSET Universit
Hassan II Mohammedia
12
Excution
13
JVM
Exception
main
Exception
calcul
14
Traiter lexception
import java.util.Scanner;
public class App1 {
public static int calcul(int a,int b){
int c=a/b;
return c;
}
public static void main(String[] args) {
Scanner clavier=new Scanner(System.in);
System.out.print("Donner a:");int a=clavier.nextInt();
System.out.print("Donner b:");int b=clavier.nextInt();
int resultat=0;
try{
resultat=calcul(a, b);
}
catch (ArithmeticException e) {
System.out.println("Divisio par zero");
}
System.out.println("Resultat="+resultat);
}
med@youssfi.net | ENSET Universit
}
Hassan II Mohammedia
Scnario 1
Donner a:12
Donner b:6
Resultat=2
Scnario 2
Donner a:12
Donner b:0
Divisio par zero
Resultat=0
15
System.out.println(e.toString());
Rstat affich : java.lang.ArithmeticException: / by zero
e.printStackTrace();
Rstat affich :
java.lang.ArithmeticException: / by zero
at App1.calcul(App1.java:4)
at App1.main(App1.java:13)
med@youssfi.net | ENSET Universit
Hassan II Mohammedia
16
Considrons le cas dun compte qui est dfini par un code et un solde et sur
lequel, on peut verser un montant, retirer un montant et consulter le solde.
package metier;
public class Compte {
private int code;
private float solde;
public void verser(float mt){
solde=solde+mt;
}
public void retirer(float mt)throws Exception{
if(mt>solde) throw new Exception("Solde Insuffisant");
solde=solde-mt;
}
public float getSolde(){
return solde;
}
}
med@youssfi.net | ENSET Universit
Hassan II Mohammedia
17
package pres;
import java.util.Scanner;
import metier.Compte;
public class Application {
public static void main(String[] args) {
Compte cp=new Compte();
Scanner clavier=new Scanner(System.in);
System.out.print("Montant verser:");
float mt1=clavier.nextFloat();
cp.verser(mt1);
System.out.println("Solde Actuel:"+cp.getSolde());
System.out.print("Montant retirer:");
float mt2=clavier.nextFloat();
cp.retirer(mt2); // Le comilateur signe lException
}
}
med@youssfi.net | ENSET Universit
Hassan II Mohammedia
18
Traiter lexception
Deux solutions :
Soit utiliser le bloc try catch
try {
cp.retirer(mt2);
} catch (Exception e) {
System.out.println(e.getMessage());
}
Ou dclarer que cette exception est ignore dans la mthode main et
dans ce cas l, elle remonte vers le niveau suprieur. Dans notre cas la
JVM.
public static void main(String[] args) throws Exception {
19
Excution de lexemple
package pres;
import java.util.Scanner;
import metier.Compte;
public class Application {
public static void main(String[] args) {
Compte cp=new Compte();
Scanner clavier=new Scanner(System.in);
System.out.print("Montant verser:");
float mt1=clavier.nextFloat();
cp.verser(mt1);
System.out.println("Solde Actuel:"+cp.getSolde());
System.out.print("Montant retirer:");
float mt2=clavier.nextFloat();
try {
cp.retirer(mt2);
} catch (Exception e) {
System.out.println(e.getMessage());
}
System.out.println("Solde Final="+cp.getSolde());
}
}
med@youssfi.net | ENSET Universit
Hassan II Mohammedia
Scnario 1
Montant verser:5000
Solde Actuel:5000.0
Montant retirer:2000
Solde Final=3000.0
Scnario 2
Montant verser:5000
Solde Actuel:5000.0
Montant retirer:7000
Solde Insuffisant
Solde Final=5000.0
20
package metier;
public class Compte {
private int code;
private float solde;
public void verser(float mt){
solde=solde+mt;
}
public void retirer(float mt){
if(mt>solde) throw new RuntimeException("Solde Insuffisant");
solde=solde-mt;
}
public float getSolde(){
return solde;
}
}
med@youssfi.net | ENSET Universit
Hassan II Mohammedia
21
package pres;
import java.util.Scanner;
import metier.Compte;
public class Application {
public static void main(String[] args) {
Compte cp=new Compte();
Scanner clavier=new Scanner(System.in);
System.out.print("Montant verser:");
float mt1=clavier.nextFloat();
cp.verser(mt1);
System.out.println("Solde Actuel:"+cp.getSolde());
System.out.print("Montant retirer:");
float mt2=clavier.nextFloat();
cp.retirer(mt2); // Le comilateur ne signale rien
}
}
med@youssfi.net | ENSET Universit
Hassan II Mohammedia
22
package metier;
public class SoldeInsuffisantException extends Exception {
public SoldeInsuffisantException(String message) {
super(message);
}
}
23
24
Application
Scnario 1
package pres;
import java.util.Scanner;
import metier.Compte;
import metier.SoldeInsuffisantException;
public class Application {
public static void main(String[] args) {
Compte cp=new Compte();
Scanner clavier=new Scanner(System.in);
System.out.print("Montant verser:");
float mt1=clavier.nextFloat();
cp.verser(mt1);
System.out.println("Solde Actuel:"+cp.getSolde());
System.out.print("Montant retirer:");
float mt2=clavier.nextFloat();
try {
cp.retirer(mt2);
} catch (SoldeInsuffisantException e) {
System.out.println(e.getMessage());
}
System.out.println("Solde Final="+cp.getSolde());
}
med@youssfi.net | ENSET Universit
}
Hassan II Mohammedia
Montant verser:5000
Solde Actuel:5000.0
Montant retirer:2000
Solde Final=3000.0
Scnario 2
Montant verser:5000
Solde Actuel:5000.0
Montant retirer:7000
Solde Insuffisant
Solde Final=5000.0
Scnario 3
Montant verser:azerty
Exception in thread "main"
java.util.InputMismatchException
at java.util.Scanner.throwFor(Scanner.java:840)
at java.util.Scanner.next(Scanner.java:1461)
at
java.util.Scanner.nextFloat(Scanner.java:2319)
at pres.Application.main(Application.java:9)
25
Amliorer lapplication
26
Application
package pres;
import java.util.InputMismatchException;import java.util.Scanner;
import metier.Compte;import metier.SoldeInsuffisantException;
public class Application {
public static void main(String[] args) {
Compte cp=new Compte();
try {
Scanner clavier=new Scanner(System.in);
System.out.print("Montant verser:");
float mt1=clavier.nextFloat();
cp.verser(mt1);
System.out.println("Solde Actuel:"+cp.getSolde());
System.out.print("Montant retirer:");
float mt2=clavier.nextFloat();
cp.retirer(mt2);
}
catch (SoldeInsuffisantException e) {
System.out.println(e.getMessage());
}
catch (InputMismatchException e) {
System.out.println("Problme de saisie");
}
System.out.println("Solde Final="+cp.getSolde());
med@youssfi.net | ENSET Universit
Hassan II Mohammedia
}
}
27
28
Le cas MontantNegatifEception
Lexception mtier MontantNegatifException
package metier;
public class MontantNegatifException extends Exception {
public MontantNegatifException(String message) {
super(message);
}
}
29
Montant verser:5000
Solde Actuel:5000.0
Montant retirer:2000
Solde Final=3000.0
Scnario 2
Montant verser:5000
Solde Actuel:5000.0
Montant retirer:7000
Solde Insuffisant
Solde Final=5000.0
Scnario 3
Montant verser:5000
Solde Actuel:5000.0
Montant retirer:-2000
Montant -2000.0 ngatif
Solde Final=5000.0
Scnario 4
Montant verser:azerty
Problme de saisie
Solde Final=0.0
30
Le bloc finaly
31
Entrs Sorties
M.Youssfi
32
Entres Sorties
Modem3G
Modem3G
Programme
Fichier
Clavier
Ficher
Streams
dentre
Streams
de sortie
Imprimante
Un autre Programme
Moniteur
Streams
De sortie
Streams
Dentre
33
34
Streams
Streams
Communication
Binaires
InputStream
E.B
Traitement
Caractres
OutputStream
S.B
Reader
E.C
Writer
S.C
IS
OS
E.B
S.B
E.C
S.C
35
La classe File
36
String getPath();
String getAbsolutePath();
String getParent();
boolean exists() ;
boolean canRead();
boolean canWrite();
boolean isDirectory();
boolean isFile();
long length();
boolean delete();
boolean mkdir();
String[] list();
37
import java.io.File;
public class Application1 {
public static void main(String[] args) {
String rep="c:/"; File f=new File(rep);
if(f.exists()){
String[] contenu=f.list();
for(int i=0;i<contenu.length;i++){
File f2=new File(rep,contenu[i]);
if(f2.isDirectory())
System.out.println("REP:"+contenu[i]);
else
System.out.println("Fichier :"+contenu[i]+"
Size:"+contenu[i].length());
}
}
else{
System.out.println(rep+" n'existe pas");
}
}}
med@youssfi.net | ENSET Universit
Hassan II Mohammedia
38
Exercice 1
39
f1:File
Fichier1.txt
read():int
fw:FileWriter
f2:File
Fichier2.txt
write(int c):void
40
le numro de lopration,
le numro de compte,
la date dopration,
le type dopration (Versement ou Retrait)
et le montant de lopration.
41
42
fis:FileInputStream
f1:File
image1.jpg
read():int
fos:FileOutputStream
f2:File
image2.jpg
write(int c ):void
43
Lire et crire sur un fichier texte ligne par ligne : Streams de traitement :
BufferedReader et BufferedWriter
br:BufferedReader
fr:FileReader
f1:File
Fichier1.txt
readLine():String
bw:BufferedWriter
write(String s):void
newLine():void
read():int
fw:FileWriter
f2:File
Fichier2.txt
write(int c):void
44
45
bis:BufferedInputStream
fis:FileInputStream
f1:File
Fichier.doc
read():int
zos:ZipOutputStream
write():void
setMethod():void
putNextEntry():void
bos:BufferedOutputStream
write(int c):void
read():int
fos:FileOutputStream
read():int
f2:File
Fichier.zip
46
bis:BufferedInputStream
fis:FileInputStream
f1:File
read():int
getNextEntry()
Fichier.zip
read():int
bos:BufferedOutputStream
write(int c):void
read():int
fos:FileOutputStream
read():int
f2:File
Fichier.doc
48
49
Exercice 2
50
La srialisation
51
package metier;
import java.io.Serializable;
import java.util.Date;
public class Operation implements Serializable {
private int numeroOperation;
private transient Date dateOperation;
private String numeroCompte;
private String typeOperation;
private double montant;
public Operation() { }
public Operation(int numOp, Date dateOp, String numC,String to, double mt) {
this.numeroOperation = numOp;this.dateOperation = dateOp;
this.numeroCompte = numC;this.typeOperation = to;
this.montant = mt;
}
// Getters et Setters
}
med@youssfi.net | ENSET Universit
Hassan II Mohammedia
52
Srialisation
oos:ObjectOutputStream
fos:FileOutputStream
f:File
banque.txt
writeObject(Object o):void
write(int c)
53
DSrialisation
ois:ObjectInputStream
fis:FileInputStream
f:File
banque.txt
readObject():Object
read():int
import java.io.*;
import metier.Operation;
public class Deserialisation {
public static void main(String[] args) throws Exception {
File f=new File("banque.txt");
FileInputStream fis=new FileInputStream(f);
ObjectInputStream ois=new ObjectInputStream(fis);
Operation op1=(Operation) ois.readObject();
Operation op2=(Operation) ois.readObject();
System.out.println("Num:"+op1.getNumeroOperation());
System.out.println("Date:"+op1.getDateOperation());
System.out.println("Compte:"+op1.getNumeroCompte());
System.out.println("Type:"+op1.getTypeOperation());
System.out.println("Montant:"+op1.getMontant());
}
}
med@youssfi.net | ENSET Universit
Hassan II Mohammedia
54
Exercice 3
Crer une application java qui permet
de srialiser les objets de la classe
oprations dans un fichier compress
au format zip.
Crer une application qui permet de
d srialiser ces objets du fichier
compress.
55
Par M.youssfi
56
Interfaces graphiques
Application
57
Composants AWT
Nous avons notre disposition
principalement trois types d'objets :
58
import javax.swing.*;
import java.awt.FlowLayout;
public class AppSWING {
public static void main(String[] args){
JFrame f=new JFrame("Titre");
JTextField t=new JTextField(12);
JButton b=new JButton("OK");
f.setLayout(new FlowLayout());
f.add(t); f.add(b);
f.setBounds(10,10,500,500);
f.setVisible(true);
}
}
AWT
SWING
med@youssfi.net | ENSET Universit
Hassan II Mohammedia
59
60
61
62
Gestion des
vnements
: ActionListener
actionPerformed()
63
h: ActionListener
public void actionPerformed(ActionEvent e)
64
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class TestEvent extends Frame{
Label l=new Label("Votre Nom:");
TextField t=new TextField(12);
Button b=new Button("Ajouter");
List liste=new List();
Button b2=new Button("Quitter");
public TestEvent() {
this.setLayout(new FlowLayout());
this.add(l);this.add(t);this.add(b);
this.add(b2);this.add(liste);
this.setBounds(10,10, 400, 400);
// Si on clique le bouton b1
b.addActionListener(
new ActionListener(){
public void actionPerformed(ActionEvent e) {
String s=t.getText();
liste.add(s);
}
}
);
// Si on clique le bouton b2
b2.addActionListener(
new ActionListener(){
public void actionPerformed(ActionEvent e) {
System.exit(0);
}
}
);
// Si on clique le bouton fermer de la fentre
this.addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
this.setVisible(true);
}
public static void main(String[] args) {
new TestEvent();
}}
: ActionListener
public void actionPerformed(ActionEvent e)
: WindowListener
public void windowClosing(WindowEvent e)
65
66
67
68
69
Application
On souhaite crer une application java qui permet grer une socit de
transport de cargaisons transportant des marchandises. La socit gre un
ensemble de cargaisons. Chaque cargaison contient plusieurs marchandises.
Chaque marchandise est dfinie par son numro, son poids et son volume.
Il existe deux types de cargaisons : Routire et Arienne. Chaque cargaison est
dfinie par sa rfrence et sa distance de parcours. Le cout de transport dune
cargaison est calcul en fonction du type de la cargaison.
Une cargaison arienne est une cargaison dont le cout est calcul selon la
formule suivante :
cout=10 x distance x poids total des marchandises si le volume total est infrieur 80000
cout=12 x distance x poids total des marchandises si le volume total est suprieur ou gal 80000
Une cargaison routire est une cargaison dont le cout est calcul selon la
formule suivante :
70
Application
71
Questions :
1.
2.
3.
4.
5.
72
Questions :
7.
8.
9.
73
74
Pilotes JDBC
75
Java et JDBC
Application Java
JDBC
Oracle
MySQL
SQL Server
ODBC
Excel
Access
76
77
Connection
Statement
getConnection()
createStatement()
executeQuery()
Lien
SQL
ResultSet
ResultSetMetaData
getResultSetMetaData()
Donnes
Structure
Pilote JDBC
Base de Donnes
78
Dmarche JDBC
79
Pour crer une connexion une base de donnes, il faut utiliser la mthode
statique getConnection() de la classe DriverManager. Cette mthode fait appel
aux pilotes JDBC pour tablir une connexion avec le SGBDR, en utilisant les
sockets.
Connection conn=DriverManager.getConnection("jdbc:mysql://localhost:3306/DB", "user", "pass" );
Connection conn=DriverManager.getConnection("jdbc:odbc:dsnSCO", "user", "pass" );
80
81
Objet PreparedStatement
Pour excuter une requte SQL de type select, on peut utiliser la mthode
executeQuery() de lobjet Statement. Cette mthode excute la requte et
stocke le rsultat de la requte dans lobjet ResultSet:
ResultSet rs=ps.executeQuery();
Pour excuter une requte SQL de type insert, update et delete on peut
utiliser la mthode executeUpdate() de lobjet Statement :
ps.executeUpdate();
82
while(rs.next()){
System.out.ptintln(rs.getInt(1));
System.out.ptintln(rs.getString("NOM_PROD"));
System.out.ptintln(rs.getDouble("PRIX"));
}
83
ResultSetMetaData rsmd=rs.getMetaData();
// Parcourir toutes les colonnes
for(int i=0;i<rsmd.getColumnCount();i++){
// afficher le nom de la colonne numro i
System.out.println(rsmd.getColumnName(i));
// afficher le type de la colonne numro i
System.out.println(rsmd.getColumnTypeName(i));
// afficher la taille de la colonne numro i
System.out.println(rsmd.getColumnDisplaySize(i));
}
// Afficher tous les enregistrements du ResultSet rs
while (rs.next()){
for(int i=0;i<rsmd.getColumnCount();i++){
System.out.println(rs.getString(i));
}
}
med@youssfi.net | ENSET Universit
Hassan II Mohammedia
84
La couche Mtier:
La couche prsentation:
85
BD
4
5
Vue
Couche DAO
Contrleur
1
Couche Mtier
Modle
Mtier
DAO
SGBD
86
87
:Cotation
numCot = 1
dateCot=
valAction=
codeSoc=SGMB
:Cotation
numCot = 2
dateCot=
valAction=
codeSoc=SGMB
:Cotation
numCot = 3
dateCot=
valAction=
codeSoc=SGMB
88
Application
89
Application
La classe Scolarite.java :
90
Application
Travail faire :
Couche donnes :
Crer une application de test qui permet de saisir au clavier le mot cl et qui
affiche les tudiants dont le nom contient ce mot cl.
91
package metier;
public class Etudiant {
private Long idEtudiant;
private String nom,prenom,email;
// Getters etStters
}
92
93
94
95
96
97
Lapplicaion SWING
package pres;
import java.awt.*;import java.awt.event.*;import javax.swing.*;
import metier.*;
public class EtudiantFrame extends JFrame {
private JScrollPane jsp;
private JLabel jLMC=new JLabel("Mot Cl:");
private JTextField jTFMC=new JTextField(12);
private JButton jBValider=new JButton("Valider");
private JTable jTableEtudiants;
private JPanel jpN=new JPanel();
private Scolarite metier
=new Scolarite();
private EtudiantModele model;
98