Support POO Java
Support POO Java
Support POO Java
Langage Machine Langage Assembleur Langages structurs: - Pascal, C Langages Orients Objet - C++, Java .
Homme
Langage humains
Pour crer une application java, il faut installer un kit de dveloppement java
JSDK : Java Standard Developpement Kit, pour dvelopper les application DeskTop JME : Java Mobile Edition, pour dvelopper les applications pour les tlphones potables JEE : Java Entreprise Edition, pour dvelopper les applications qui vont sexcuter dans un serveur dapplication JEE (Web Sphere Web Logic, JBoss). JCA : Java Card Editon, pour dvelopper les applications qui vont sxcuter dans des cartes puces.
Natif
Code source Compilation Langage Machine Edition de lien Programme.Exe
Byte Code
Code source Compilation Byte Code Interprtation par La JVM en mode byte code (Traduit en code machine et excute instruction par Instruction )
JIT
Code source Compilation Byte Code Interprtation par La JVM en mode JIT (Traduit tout le programme Byte Code en programme machine puis lexcute )
5
Installation de java
Le Kit de dveloppement java JDK peut tre tlcharg gratuitement partir du site de Sun Microsystem son diteur principal (www.java.sun.com). Le JDK contient 3 trois pacquages :
J2Sdk1.6.exe : Kit de dveloppement proprement dit Jre1.6.exe : Machine virtuelle java jdk15-doc.zip : Documentation java Excuter jdk-6u13-windows-i586-p.exe . Le JDK sera install
dans le rpertoire c:\program files\java et installe galement jre1.6 dans le mme dossier.
Configuration de l environnement
La configuration de l'environnement comporte deux aspects : - Dfinir la variable denvironnement path qui indique le chemin d'accs aux programmes excutables : Cette variable path devrait contenir le chemin du JDK utilis:
-
Quand elle excute une application java, la JVM consulte la variable denvironnement classpath qui contient le chemin daccs aux classes java utilises par cette application.
-
10
11
12
c:\exojava>javac PremierProgramme.java
Corriger les Erreurs de compilation Excuter le programme sur ligne de commande
c:\exojava>java PremierProgramme
13
Premire Applet
import java.applet.Applet; import java.awt.*; public class FirstApplet extends Applet{ public void init(){ add(new Label("Nom:")); add(new TextField(12)); add(new List()); add(new Button("OK")); } public void paint(Graphics g) { g.drawRect(2, 2, 400, 300); } }
Rdiger le programme source. Enregistrer le fichier sous le nom FirstApplet.java Compiler le programme source et corriger les erreurs. Crer un page HTML qui affiche l applet sur un navigateur web:
<html> <body> <applet code= FirstApplet.class" width="500" height="500"></applet> </body> </html>
17
Les primitives
Java dispose des primitives suivantes :
Primitive
char byte short int long float double boolean void
tendue
0 65 535 -128 +127 -32 768 +32 767 -2 147 483 648 + 2 147 483 647 de 1.4E-45 3.40282347E38 true ou false -
Taille
16 bits 8 bits 16 bits 32 bits 64 bits 32 bits 64 bits 1 bit 0 bit
19
10
21
22
11
23
12
Rsultat:
a=5 b=5 c=5 V1=5.5 V2=5
25
Oprateurs
Oprateur d affectation:
26
13
Oprateurs
Les oprateurs arithmtiques deux oprandes
(Les raccourcis)
x = x + 4; ou x+=4; z = z * y; ou Z*=y; v = v % w; ou v%=w;
: quivalent : plus petit que : plus grand que : plus petit ou gal : plus grand ou gal : non quivalent
dincrmentations
et
de
27
Oprateurs
Les oprateurs logiques
&& Et (deux oprandes) || Ou (deux oprandes ) ! Non (un seul oprande)
28
14
Structures de contrle
L'instruction conditionnelle if
La syntaxe de l'instruction if peut tre dcrite de la faon suivante:
if (expression) instruction; ou : if (expression) { instruction1; instruction2; }
29
Structures de contrle
Les instructions conditionnelles imbriques
Java permet d'crire ce type de structure sous la forme :
if (expression1) { bloc1; } else if (expression2) { bloc2; } else if (expression3) { bloc3; } else { bloc5; }
30
15
Structures de contrle:
L'instruction switch
Syntaxe : switch( variable) { case valeur1: instr1;break; case valeur2: instr2;break; case valeurN: instrN;break; default: instr;break; }
Exemple:
import java.util.Scanner; public class Test { public static void main(String[] args) { System.out.print("Donner un nombre:"); Scanner clavier=new Scanner(System.in); int nb=clavier.nextInt(); switch(nb){ case 1 : System.out.println("Lundi");break; case 2 : System.out.println("Mardi");break; case 3 : System.out.println("Mercredi");break; default :System.out.println("Autrement");break; }}}
31
Structures de contrle
La boucle for
La boucle for est une structure employe pour excuter un bloc d'instructions un nombre de fois en principe connu l'avance. Elle utilise la syntaxe suivante : for (initialisation;test;incrmentation) { instructions; } Exemple : for (int i = 2; i < 10;i++) { System.out.println("I="+i); }
32
16
Structures de contrle
Sortie d'une boucle par return
int[] tab=new int[]{4,6,5,8}; for (int i = 0; i < tab.length; i++) { if (tab[i] == 5) { return i; }
continue:
for (int i = 0; i < 10; i++) { if (i == 5) continue; System.out.println(i); }
33
Structures de contrle
L instruction While
while (condition){ BlocInstructions; }
Exemple :
int s=0;int i=0; while (i<10){ s+=i; i++; } System.out.println("Somme="+s);
L instruction do .. while
do{ BlocInstructions; } while (condition);
Exemple : int s=0;int i=0; do{ s+=i; i++; }while (i<10); System.out.println("Somme="+s);
34
17
35
Objet
Un objet est une structure informatique dfinie par un tat et un comportement Objet=tat + comportement
Ltat regroupe les valeurs instantanes de tous les attributs de lobjet. Le comportement regroupe toutes les comptences et dcrit les actions et les ractions de lobjet. Autrement dit le comportement est dfini par les oprations que lobjet peut effectuer.
Ltat dun objet peut changer dans le temps. Gnralement, cest le comportement qui modifie ltat de lobjet Exemples:
v1:Voiture
Couleur="rouge" Carburant=20 Puissance=120 demarrer() accelerer() Freiner()
:Fenetre
titre="WinWord"
tat de lobjet
Comportement
agrandir() fermer()
36
18
37
Classes
Les objets qui ont des caractristiques communes sont regroups dans une entit appel classe. La classe dcrit le domaine de dfinition dun ensemble dobjets. Chaque objet appartient une classe Les gnralits sont contenues dans les classe et les particularits dans les objets. Les objets informatique sont construits partir de leur classe par un processus qui sappelle linstanciation. Tout objet est une instance dune classe.
38
19
Exemples:
Compte
code : int solde : float Compte(float soldeInitial) verser(float mt):void retirer(float mt):void getSolde():float
40
20
Nom du paquetage
41
public (+) : accs partir de toute entit interne ou externe la classe Autorisation par dfaut : dans java, en labsence des trois autorisations prcdentes, lautorisation par dfaut est package. Cette autorisation indique que uniquement les classes du mme package ont lautorisation daccs.
42
21
Exemple dimplmentation dune classe package metier; avec Java public class Compte {
metier
Compte
- code : int # solde : float + Compte(int code, float solde) + verser(float mt):void + retirer(float mt):void + toString():String
// Attributs private int code; protected float solde; // Constructeur public Compte(int c,float s){ code=c; solde=s; } // Mthode pour verser un montant public void verser(float mt){ solde+=mt; } // Mthode pour retirer un montant public void retirer(float mt){ solde-=mt; } // Une mthode qui retourne l'tat du compte public String toString(){ return(" Code="+code+" Solde="+solde); } } 43
c1:Compte
code=1 Code=1 solde=6000 Solde=8000 Solde=5000 verser(float mt) retirer(float mt) toString()
c2:Compte
code=2 solde=6000 verser(float mt)
22
45
Getters et Setters
Les attributs privs dune classe ne sont accessibles qu lintrieur de la classe. Pour donner la possibilit dautres classes daccder aux membres privs, il faut dfinir dans la classes des mthodes publiques qui permettent de :
lire la variables privs. Ce genre de mthodes sappellent les accesseurs ou Getters modifier les variables privs. Ce genre de mthodes sappellent les mutateurs ou Setters
Les getters sont des mthodes qui commencent toujours par le mot get et finissent par le nom de lattribut en crivant en majuscule la lettre qui vient juste aprs le get. Les getters retourne toujours le mme type que lattribut correspondant.
Par exemple, dans la classe CompteSimple, nous avons dfini un attribut priv : private String nom; Le getter de cette variable est :
public String getNom( ){ return nom; }
Les setters sont des mthodes qui commencent toujours par le mot set et finissent par le nom de lattribut en crivant en majuscule la lettre qui vient juste aprs le set. Les setters sont toujours de type void et reoivent un paramtre qui est de meme type que la variable:
Exemple:
public void setNom( String n ){ this.nom=n; }
46
23
Encapsulation
public class Application { public static void main(String[] args) { Personne p=new Personne(); p.setNom("AZER"); System.out.println(p.getNom()); } }
:Application Comportement Etat p.getNom() p:Personne Comportement Etat
tCo de
Diagramme de squence :
:Application crer() p1:Personne setNom("AZER") getNom()
g e tN om()
Code = 1 nom=AZER
in
ma
p.seNom("AZER")
setNom()
Gnralement, ltat dun objet est priv ou protg et son comportement est publique Quand ltat de lobjet est priv Seules les mthode de ses qui ont le droit dy accder Quand ltat de lobjet est protg, les mthodes des classes drives et les classes appartenant au mme package peuvent galement y accder
47
ge
Retourne AZER
()
48
24
Exemple:
Supposant nous voulions ajouter la classe Compte une variable qui permet de stocker le nombre le comptes crs. Comme la valeur de variable nbComptes est la mme pour tous les objets, celle-ci sera dclare statique. Si non, elle sera duplique dans chaque nouveau objet cr. La valeur de nbComptes est au dpart initialise 0, et pendant la cration dune nouvelle instance (au niveau du constructeur), nbCompte est incrmente et on profite de la valeur de nbComptes pour initialiser le code du compte.
Compte
- code : int # solde : float - nbComptes:int + Compte(float solde) + verser(float mt):void + retirer(float mt):void + toString():String + getNbComptes():int
package metier; public class Compte { // Variables dinstances private int code; private float solde; // Variable de classe ou statique private static int nbComptes; public Compte(float solde){ this.code=++nbComptes; this.solde=solde; } // Mthode pour verser un montant public void verser(float mt){ solde+=mt; } // Mthode pour retirer un montant public void retirer(float mt){ solde-=mt; } // retourne l'tat du compte public String toString(){ return(" Code="+code+" Solde="+solde); } // retourne la valeur de nbComptes public static int getNbComptes(){ return(nbComptes); } }
49
Application de test
package test; import metier.Compte; public class Application { public static void main(String[] args) {
Classe Compte
nbCompte=0 nbCompte=2 nbCompte=1
getNbComptes()
c1:Compte
code=1 Code=1 solde=6000 Solde=8000 Solde=5000 verser(float mt) retirer(float mt) toString()
c2:Compte
code=2 solde=6000 verser(float mt) retirer(float mt) toString()
System.out.println(Compte.nbComptes) System.out.println(c1.nbComptes)
} }
50
25
On souhaite crer une application qui permet de manipuler des segments. Un segment est dfini par la valeur de ses deux extrmits extr1 et extr2. Pour crer un segment, il faut prciser les valeurs de extr1 et extr2. Les oprations que lon souhaite excuter sur le segment sont :
ordonne() : mthode qui permet dordonner extr1 et extr2 si extr1 est suprieur extr2 getLongueur() : mthode qui retourne la longueur du segment. appartient(int x) : retourne si x appartient au segment ou non. toString() : retourne une chane de caractres de type SEGMENT[extr1,extr2]
Faire une reprsentation UML de la classe Segment. Implmenter en java la classe Segment Crer une application TestSegment qui permet de :
Crer objet de la classe Segment avec les valeurs extr1=24 et extr2=12. Afficher ltat de cet objet en utilisant la mthode toString(). Afficher la longueur de ce segment. Afficher si le point x=15, appartient ce segment. Changer les valeurs des deux extrmits de ce segment. Afficher nouveau la longueur du segment.
52
26
Diagramme de classes
Segment
+ extr1 : int + extr2 : int + Segment (int e1,int e2) + ordonne() + getLongueur() : int + appartient(int x) : boolean + toString() : String + main(String[] args):void
TestSegment
53
Solution : Segment.java
package fig; public class Segment { public int extr1; public int extr2; // Constructeur public Segment(int a,int b){ extr1=a;extr2=b;ordonne(); } public void ordonne(){ if(extr1>extr2){ int z=extr1; extr1=extr2; extr2=z; } } public int getLongueur(){ return(extr2-extr1); } public boolean appartient(int x){ if((x>extr1)&&(x<extr2)) return true; else return false; } public String toString(){ return ("segment["+extr1+","+extr2+"]"); } }
54
27
Application
package test; import java.util.Scanner; import fig.Segment; public class Application { public static void main(String[] args) { Scanner clavier=new Scanner(System.in); System.out.print("Donner Extr1:");int e1=clavier.nextInt(); System.out.print("Donner Extr2:");int e2=clavier.nextInt(); Segment s=new Segment(e1, e2); System.out.println("Longueur du"+s.toString()+" est :"+ s.getLongueur()); System.out.print("Donner X:");int x=clavier.nextInt(); if(s.appartient(x)==true) System.out.println(x+" Appartient au "+s); else System.out.println(x+" N'appartien pas au "+s); } }
55
Donner Extr1:67 Donner Extr2:13 Longueur dusegment[13,67] est :54 Donner X:7 7 N'appartient pas au segment[13,67]
Donner Extr1:67 Donner Extr2:13 Longueur dusegment[13,67] est :54 Donner X:7 7 N'appartient pas au segment[13,67]
56
28
Exercice 2
P(x,y)
3. 4.
Crer un cercle dfini par le centre c(100,100) et un point p(200,200) Crer un cercle dfini par le centre c(130,100) et de rayon r=40 Afficher le primtre et le rayon des deux cercles. Afficher si le point p(120,100) appartient lintersection des deux cercles ou non.
57
Hritage et accessibilit
M.Youssfi
29
Hritage
Dans la programmation oriente objet, lhritage offre un moyen trs efficace qui permet la rutilisation du code. En effet une classe peut hriter dune autre classe des attributs et des mthodes. Lhritage, quand il peut tre exploit, fait gagner beaucoup de temps en terme de dveloppement et en terme de maintenance des applications. La rutilisation du code fut un argument dterminant pour venter les mthodes orientes objets.
59
Exemple de problme
Supposons que nous souhaitions crer une application qui permet de manipuler diffrents types de comptes bancaires: les compte simple, les comptes pargnes et les comptes payants. Tous les types de comptes sont caractriser par:
Un code et un solde Lors de la cration dun compte, son code qui est dfini automatiquement en fonction du nombre de comptes crs; Un compte peut subir les oprations de versement et de retrait. Pour ces deux oprations, il faut connatre le montant de lopration. Pour consulter un compte on peut faire appel sa mthode toString()
Un compte simple est un compte qui possde un dcouvert. Ce qui signifie que ce compte peut tre dbiteur jusqu la valeur du dcouvert. Un compte Epargne est un compte bancaire qui possde en plus un champ tauxIntert et une mthode calculIntrt() qui permet de mettre jour le solde en tenant compte des interts. Un ComptePayant est un compte bancaire pour lequel chaque opration de retrait et de versement est payante et vaut 5 % du montant de lopration.
60
30
Diagramme de classes
Compte
- code : int # solde : float - nbComptes : int + Compte ( ) + verser (float mt) : void + retirer (float mt) : void + toString() : String
CompteSimple
- decouvert : float + CompteSimple (float dec) + retirer (float mt) : void + toString() : String
CompteEpargne
- taux : float + CompteEparge (float taux) + catculInterets () : void + toString() : String
ComptePayant
+ ComptePayant ( ) + verser (float mt) : void + retirer (float mt) : void + toString() : String
61
31
Hritage : extends
La classe CompteSimple est une classe qui hrite de la classe Compte. Pour dsigner lhritage dans java, on utilise le mot extends public class CompteSimple extends Compte { } La classe CompteSimple hrite de la classe CompteBancaire tout ses membres sauf le constructeur. Dans java une classe hrite toujours dune seule classe. Si une classe nhrite pas explicitement dune autre classe, elle hrite implicitement de la classe Object. La classe Compte hrite de la classe Object. La classe CompteSimple hrite directement de la classe Compte et indirectement de la classe Object.
63
//constructeur
public CompteSimple(float decouvert){ super(); this.decouvert=decouvert; } }
64
32
65
// Redfinition de la mthode toString public String toString() { return("Compte Simple "+super.toString()+" Dcouvert="+decouvert); } }
66
33
Lors de linstanciation, lhritage entre les classes est traduit par une composition entre un objet de la classe instancie et dun objet de la classe parente qui est cr implicitement.
cs : CompteSimple
- decouvert=5000 - super = + retirer() + toString()
67
Surcharge
Dans une classe, on peut dfinir plusieurs constructeurs. Chacun ayant une signature diffrentes (paramtres diffrents) On dit que le constructeur est surcharg On peut galement surcharger une mthode. Cela peut dire quon peut dfinir, dans la mme classe plusieurs mthodes qui ont le mme nom et des signatures diffrentes; La signature dune mthode dsigne la liste des arguments avec leurs types. Dans la classe CompteSimple, par exemple, on peut ajouter un autre constructeur sans paramtre Un constructeur peut appeler un autre constructeur de la mme classe en utilisant le mot this() avec des paramtres ventuels
68
34
Surcharge de constructeurs
public class CompteSimple extends Compte { private float decouvert;
//Premier constructeur
public CompteSimple(float decouvert){ super(); this.decouvert=decouvert; }
//Deuxime constructeur
public CompteSimple(){ this(0); } }
On peut crer une instance de la classe CompteSimple en faisant appel lun des deux constructeur :
CompteSimple cs1=new CompteSimple(5000); CompteSimple cs2=new CompteSimple();
69
Accessibilit
70
35
Accessibilit
Les trois critres permettant d'utiliser une classe sont Qui, Quoi, O. Il faut donc :
Que l'utilisateur soit autoris (Qui). Que le type d'utilisation souhait soit autoris (Quoi). Que l'adresse de la classe soit connue (O).
72
36
73
Linstruction package:
Si vous souhaitez qu'une classe que vous avez cre appartienne un package particulier, vous devez le spcifier explicitement au moyen de l'instruction package, suivie du nom du package. Cette instruction doit tre la premire du fichier. Elle concerne toutes les classes dfinies dans ce fichier.
Linstruction import
Pour utiliser une classe, il faut
Soit crire le nom de la classe prcde par son package. Soit importer cette classe en la dclarant dans la clause import. Et dans ce cas l, seul le nom de la classe suffit pour lutiliser.
74
37
package test; import a.b.c.Client; public class Application { public static void main(String[] args) { Client c=new Client(2,"Salih"); System.out.println("Nom="+c.getNom()); } }
75
Les fichiers .jar sont des fichiers compresss comme les fichiers .zip selon un algorithme particulier devenu un standard. Ils sont parfois appels fichiers d'archives ou, plus simplement, archives. Ces fichiers sont produits par des outils de compression tels que Pkzip (sous DOS) ou Winzip (sous Windows), ou encore par jar.exe. Les fichiers .jar peuvent contenir une multitude de fichiers compresss avec l'indication de leur chemin d'accs. Les packages standard de Java sont organiss de cette manire, dans un fichier nomm rt.jar plac dans le sous-rpertoire lib du rpertoire o est install le JDK. Dans le cas d'une installation standard de Java 6 sur le disque C:, le chemin d'accs complet la classe System est donc : c:\jdk1.6\jre\lib\rt.jar\java\lang\System
Cration de vos propres fichiers .jar ou .zip Vous pouvez utiliser le programme jar.exe du jdk pour crer les fichiers .jar Syntaxe : jar [options] nomarchive.jar fichiers Exemple qui permet darchive le contenu du dossier a :
76
38
Les diffrents modificateurs qui permettent dapporter des restrictions lutilisation dune classe sont:
abstract, final, static, synchronized et native
77
Classe abstraite
Une classe abstraite est une classe qui ne peut pas tre instancie. La classe Compte de notre modle peut tre dclare abstract pour indiquer au compilateur que cette classe ne peut pas tre instanci. Une classe abstraite est gnralement cre pour en faire driver de nouvelle classe par hritage. public abstract class Compte { private int code; protected float solde; private static int nbComptes; // Constructeurs // Mthodes }
78
39
40
Interfaces
Une interface est une sorte de classe abstraite qui ne contient que des mthodes abstraites. Dans java une classe hrite dune seule classe et peut hriter en mme temps de plusieurs interface. On dit quune classe implmente une ou plusieurs interface. Une interface peut hriter de plusieurs interfaces. Exemple dinterface: public interface Solvable { public void solver(); public double getSole(); } Pour indiquer que la classe CompteSimple implmente cette insterface on peut crire: public class CompteSimple extends Compte implements Solvable { private float decouvert; public void afficher() { System.out.println("Solde="+solde+" Dcouvert="+decouvert); } public double getSole() { return solde; } public void solver() { this.solde=0; 81 }}
82
41
Une mthode final est une mthode qui ne peut pas tre redfinie dans les classes drives.
Exemple : La mthode verser de la classe suivante ne peut pas tre redfinie dans les classes drives car elle est dclare final
public class Compte { private int code; protected float solde; private static int nbComptes; public final void verser(float mt){ solde+=mt; } public void retirer(float mt){ if(mt<solde) solde-=mt; } }
83
Ici nous avons fait appel la mthode sqrt de la classe Math sans crer aucune instance. Ceci est possible car la mthode sqrt est statique. Si cette mthode ntait pas statique, il faut tout dabord crer un objet de la classe Math avant de faire appel cette mthode:
Math m=new Math(); double d=m.sqrt(9);
Les seuls membres dune classe, qui sont accessibles, sans instanciation sont les membres statiques.
84
42
public:
Un membre public dune classe peut tre utilis par nimporte quelle autres classe. En UML le membres public sont indiqus par le signe +
protected:
Les membres d'une classe peuvent tre dclars protected. Dans ce cas, l'accs en est rserv aux mthodes des classes appartenant
au mme package aux classes drives de ces classes, ainsi qu'aux classes appartenant aux mmes packages que les classes drives.
Rsum: Hritage
Une classe peut hriter dune autre classe en utilisant le mot extends. Une classe Hrite dune autre tout ses membres sauf le constructeur. Il faut toujours dfinir le constructeur de la nouvelle classe drive. Le constructeur de la classe drive peut appeler le constructeur de la classe parente en utilisant le mot super(), avec la liste des paramtres. Quand une classe hrite dune autre classe, elle a le droit de redfinir les mthodes hrites. Dans une mthode redfinie, on peut appeler la mthode de la classe parente en crivant le mot super suivi dun point et du nom de la mthode parente. (super.mthode()). Un constructeur peut appeler un autre constructeur de la mme classe en utilisant le mot this() avec des paramtres du constructeur.
86
43
Rsum: Accessibilt
Pour utiliser une classe il faut connaitre:
O trouver la classe (package) Quels sont les droits daccs cette classe (Quoi?) Quelles sont les classes qui ont le droit daccder aux membres de cette classe (Qui?)
O?
Pour utiliser une classe il faut importer son package en utilisant linstruction import Pour dclarer le package dappartenance dune classe on utilise linstruction package La variable denvironnement classpath permet de dclarer les chemins ou la JVM trouvera les classes dune application
87
Rsum: Accessibilt
Quoi?
abstract :
Une classe abstraite est une classe qui ne peut pas tre instancie. Une mthode abstraite est une mthode qui peut tre dfinie lintrieur dune classe abstraite. Cest une mthode qui na pas de dfinition. Par consquent, elle doit tre redfinie dans les classes drives. Une interface est une sorte de classe abstraite qui ne contient que des mthodes abstraites. Dans java une classe hrite toujours dune seule classe et peut implmenter plusieurs interfaces.
final:
Une classe final est une classe qui ne peut pas tre drive. Une mthode final est une mthode qui ne peut pas tre redfinie dans les classes drives. Une variable final est une variable don la valeur ne peut pas changer On utilise final pour deux raisons: une raison de scurit et une raison doptimisation
static:
Les membres statiques dune classe appartiennent la classe et partags par toutes ses objets Les membres statiques sont accessible en utilisant directement le nom de la classe Les membres statiques sont accessible sans avoir besoin de crer une instance de la classe qui les contient Les membres statiques sont galement accessible via les instances de la classe qui les contient
88
44
Rsum: Accessibilt
Qui?
Java dispose de 4 niveaux dautorisations: private : protected: public: package (Autorisation par dfaut)
89
Travail faire
Implmenter la classe Compte Implmenter la classe CompteSimple Implmenter la classe CompteEpargne Implmenter la classe ComptePayant Crer une application pour tester les diffrentes classes.
90
45
Compte.java
package metier; public abstract class Compte { private int code; protected float solde; private static int nbComptes; public Compte(float s){ code=++nbComptes; this.solde=s; } public void retirer(float mt){ if(mt<solde) solde-=mt; } public void verser(float mt){ solde+=mt; } public String toString(){ return("Code="+code+" Solde="+solde); }
// Getters et Setters public int getCode() { return code; } public float getSolde() { return solde; } public static int getNbComptes() { return nbComptes; } }
91
CompteSimple.java
package metier; public final class CompteSimple extends Compte { private float decouvert; // Constructeurs public CompteSimple(float s,float d){ super(s); this.decouvert=d; } public CompteSimple(){ super(); } public void retirer(float mt) { if(solde+decouvert>mt) solde-=mt; } public String toString() { return "Compte Simple "+super.toString()+" Solde="+solde; } //Getters et Setters public float getDecouvert() { return decouvert; } public void setDecouvert(float decouvert) { this.decouvert = decouvert; } }
92
46
CompteEpargne.java
package metier; public class CompteEpargne extends Compte { private float taux; //Constructeurs public CompteEpargne() { this(0,6); } public CompteEpargne(float solde,float taux) { super(solde); this.taux=taux; } public void calculInterets(){ solde=solde*(1+taux/100); } public String toString() { return "Compte Epargne "+super.toString()+" Taux="+taux; } // Getters et Setters public float getTaux() { return taux; } public void setTaux(float taux) { this.taux = taux; } }
93
ComptePayant.java
package metier; public class ComptePayant extends Compte { // Constructeur public ComptePayant(float solde) { super(solde); } public void verser(float mt) { super.verser(mt); super.retirer(mt*5/100); } public void retirer(float mt) { super.retirer(mt); super.retirer(mt*5/100); } public String toString() { return super.toString(); } }
94
47
Application TestCompte.java
package test; import metier.*; public class TestCompte { public static void main(String[] args) { // Tester la classe Compte Simple CompteSimple c1=new CompteSimple(8000,4000); System.out.println(c1.toString()); c1.verser(3000); c1.retirer(5000); c1.setDecouvert(5500); System.out.println(c1.toString()); // Tester la classe Compte Epargne CompteEpargne c2=new CompteEpargne(50000,5); System.out.println(c2.toString()); c2.verser(30000); c2.retirer(6000); c2.calculInterets(); System.out.println(c2.toString()); c2.setTaux(6); c2.calculInterets(); System.out.println(c2); // Test de ComptePayant ComptePayant c3=new ComptePayant(5000); System.out.println(c3); c3.verser(6000); c3.retirer(4000); System.out.println(c3); } }
95
Polymorphisme
96
48
Polymorphisme
Le polymorphisme offre aux objets la possibilit d appartenir plusieurs catgories la fois. En effet, nous avons certainement tous appris l'cole qu'il tait impossible d'additionner des pommes et des oranges Mais, on peut crire l expression suivante: 3 pommes + 5 oranges = 8 fruits
97
Polymorphisme
Le sur-casting des objets:
Une faon de dcrire l'exemple consistant additionner des pommes et des oranges serait d'imaginer que nous disons pommes et oranges mais que nous manipulons en fait des fruits. Nous pourrions crire alors la formule correcte : 3 (fruits) pommes + 5 (fruits) oranges --------------------------------------------= 8 fruits Cette faon de voir les choses implique que les pommes et les oranges soient "transforms" en fruits pralablement l'tablissement du problme. Cette transformation est appele sur-casting
98
49
Instanciation et hritage
Considrons lexemple suivant:
Fruit poids:int Fruit() affiche():void
Pomme
Orange
99
Instanciation et hritage
public abstract class Fruit{ int poids; public Fruit(){ System.out.println("Cration d'un fruit"); } public void affiche(){ System.out.println("c'est un fruit"); } } public class Pomme extends Fruit{ public Pomme(int p){ poids=p; System.out.println("cration d'une pomme de "+ poids+" grammes "); } public void affiche(){ System.out.println("C'est une pomme"); } public void affichePoids(){ System.out.println("le poids de la pomme est:"+poids+" grammes"); } } public class Orange extends Fruit{ public Orange(int p){ poids=p; System.out.println("cration d'une Orange de "+ poids+" grammes "); } public void affiche(){ System.out.println("C'est une Orange"); } public void affichePoids(){ System.out.println("le poids de la Orange est:"+poids+" grammes"); } }
public class Polymorphisme{ public static void main(String[] args){ Pomme p=new Pomme(72); Orange o=new Orange(80); } }
100
50
Instanciation et hritage
Le rsultat affich par le programme est:
Cration Cration Cration cration d'un fruit d'une pomme de 72 grammes d'un fruit d'une orange de 80 grammes
Nous constatons qu'avant de crer une Pomme, le programme cre un Fruit, comme le montre l'excution du constructeur de cette classe. La mme chose se passe lorsque nous crons une Orange
101
102
51
Dans ce cas lobjet Pomme est converti automatiquement en Fruit. On dit que lobjet Pomme est sur-cast en Fruit. Dans java, le sur-casting peut se faire implicitement. Toutefois, on peut faire le sur-casting explicitement sans quil soit ncessaire. La casting explicit se fait en prcisant la classe vers laquelle on convertit lobjet entre parenthse. Exemple :
f2=(Fruit)new Orange(40);
103
symbol
104
52
Cette instruction indique que lobjet f1 , de type Fruit, est converti en Pomme, ensuite la mthode affichePoids() de lobjet Pomme est appel ce qui est correcte.
105
Late Binding
Dans la plupart des langages, lorsque le compilateur rencontre un appel de mthode, il doit tre mme de savoir exactement de quelle mthode il s'agit. Le lien entre l'appel et la mthode est alors tabli au moment de la compilation. Cette technique est appele early binding, que l'on pourrait traduire par liaison prcoce. Java utilise cette technique pour les appels de mthodes dclares final. Elle a l'avantage de permettre certaines optimisations. En revanche, pour les mthodes qui ne sont pas final, Java utilise la technique du late binding (liaison tardive). Dans ce cas, le compilateur n'tablit le lien entre l'appel et la mthode qu'au moment de l'excution du programme. Ce lien est tabli avec la version la plus spcifique de la mthode. Dans notre cas, nous la mthode affiche() possde 3 versions dfinies dans les classes Fruit, Pomme et Orange. Grce au late binding, java est capable de dterminer, au moment de lexcution, quelle version de mthode qui sera appele ce que nous pouvons vrifier par le programme suivant :
106
53
Late Binding
public class Polymorphisme4{ public static void main(String[] args){ Fruit f1; Fruit f2; f1=new Pomme(60); f2=new Orange(40); f1.affiche();//((Pomme)f1).affiche(); f2.affiche(); } } Lexcution de ce programme donne : Cration d'un fruit Cration d'une pomme de 60 grammes Cration d'un fruit Cration d'une orange de 40 grammes C'est une pomme C'est une Orange
107
Polymorphisme
Pour rsumer, un objet est une instance de :
sa classe, toutes les classes parentes de sa classe, toutes les interfaces qu'il implmente, toutes les interfaces parentes des interfaces qu'il implmente, toutes les interfaces qu'implmentent les classes parentes de sa classe, toutes les interfaces parentes des prcdentes.
108
54
Tableaux et Collections
109
Tableaux de primitives
Tableaux de primitives: Dclaration :
Exemple : Tableau de nombres entiers
int[] liste;
liste
5 12 23
0 1 2 3 4 5 6 7 8 9 10
Cration du tableau
liste = new int[11];
55
lesFruits
Tableaux dobjets
Dclaration :
Exemple : Tableau dobjets Fruit Fruit[] lesFruits;
:Pomme poids=60 affiche() affichePoids() :Orange poids=60 affiche() affichePoids() :Pomme poids=60 affiche() affichePoids()
Cration du tableau
lesFruits = new Fruit[5];
0 1 2 3 4
Collections
Une collection est un tableau dynamique dobjets de type Object. Une collection fournit un ensemble de mthodes qui permettent:
Dajouter un nouveau objet dans le tableau Supprimer un objet du tableau Rechercher des objets selon des critres Trier le tableau dobjets Contrler les objets du tableau Etc
Dans un problme, les tableaux peuvent tre utiliss quand la dimension du tableau est fixe. Dans le cas contraire, il faut utiliser les collections Java fournit plusieurs types de colections:
ArrayList Vector Iterator HashMap Etc
Dans cette partie du cours, nous allons prsenter uniquement comment utiliser les collections ArrayList, Vector, Iterator et HashMap Vous aurez loccasion de dcouvrir les autres collections dans les prochains cours
112
56
Collection ArrayList
ArrayList est une classe du package java.util, qui implmente linterface List. Dclaration dune collection de type List qui devrait stocker des objets de type Fruit:
List<Fruit> fruits;
113
57
Collection Vector
Vecor est une classe du package java.util qui fonctionne comme ArrayList Dclaration dun Vecteur qui devrait stocker des objets de type Fruit:
Vector<Fruit> fruits;
58
Parcourir lIterator:
while(it.hasNext()){ Fruit f=it.next(); f.affiche(); }
:Pomme
:Orange
59
*
gre
Client
1
possde
CompteSimple
CompteEpargne
119
La troisime rgne de gestion est une relation dhritage et non une association.
120
60
1
Agence lesClients:Vector
Compte
*
gre
Client monCompte:Compte
1
possde
CompteSimple
CompteEpargne
Agence a=new Agence(); Client cli=new Client(); CompteSimple c1=new CompteSimple(); cli.monCompte=c1; a.addClient(cli);
121
Agence a=new Agence(); Client cli=new Client(); CompteSimple c1=new CompteSimple(); cli.monCompte=c1; a.lesClients.addElement(cli);
cli: Client
monCompte
c1: CpteSimple
a: Agence
lesClients
: Client
monCompte
: CpteEpargne
addClient(Client c)
: Client
monCompte
: CpteSimple
122
61
Par M.youssfi
Les Exceptions
Throwable
JVM
Error
Application
Exception
Etc
Etc
ArithmenticException
IOExcption
Etc
Les exceptions sont des objets Erreur qui sont gnrs par un programme java, quon peut attraper et traiter. Par contre les objets Error ne peuvent tre ni traits ni prvus par le programmeur (exemple les erreurs qui sont provoques par la machine virtuelle java) .
124
62
Les Exceptions
Les deux types dexeptions de Java En Java, on peut classer les erreurs en deux catgories :
Les exeptions surveilles, Les exeptions non surveilles.
Java oblige le programmeur traiter les erreurs surveilles. Elles sont signales par le compilateur Les erreurs non surveilles peuvent tre traites ou non. Et ne sont pas signales par le compilateur
125
Les Exceptions
Exemple : considrons le programme suivant :
public class Erreur1 { public static void main( String[] args ) { int x = 10, y = 0, z = 0; z = x / y; System.out.println("aprs calcul");} }
126
63
Les Exceptions
Ce message indique quune erreur de division par zro se produit la ligne 4. java gnre automatiquement un objet de la classe ArithmeticException du package java.lang. Cet objet sappelle Exception . ce genre derreur nest pas signal par le compilateur, on dira que ArithmeticException est une exception non surveille . Cela veut dire que le programmeur nest pas oblig de prvoir le traitement de ce genre derreur. En revanche, il existe des Exceptions surveilles que le programmeur doit prvoir un code de traitement de ces exceptions exemple IOException due aux oprations dentres sorties. Lorsqu une exception, non surveilles et qui nest pas traite par le programmeur, se produit, linterprteur la traite en affichant un message et en provoquant larrt instantan du programme (Bug).
127
128
64
65
132
66
133
public class Test { public static void main(String[] args) { Compte c=new Compte(); try { c.retirer(5000); } catch (Exception e) { System.out.println(e.getMessage()); }}}
134
67
System.in read():byte
Clavier
135
136
68
137
138
69
Entrs Sorties
M.Youssfi
140
70
Entres Sorties
Programme
Donnes
Donnes
Imprimante
En Java, les moyens de communication sont reprsents par des objets particuliers appels (en anglais) stream. Ce mot, qui signifie courant, ou flot
142
71
Streams
Communication Binaires
InputStream
E.B
Streams Traitement
Caractres
Reader
E.C
B
IS
E.B
C
OS
S.B
OutputStream
S.B
Writer
S.C
R
E.C
W
S.C
Classe File
Cration dobjet de la classe File:
File f=new File("fichier.ext"); File f=new File ("c:\jdk"); File f=new File ("c:\", "autoexec.bat"); Mthodes de la classe File:
String getName(); String getPath(); String getAbsolutePath(); String getParent(); boolean renameTo(File newFile); boolean exists() ; boolean canRead(); boolean canWrite(); boolean isDirectory(); boolean isFile(); long length(); boolean delete(); boolean mkdir(); String[] list(); Retourne le nom du fichier. Retourne la localisation du fichier en relatif. Idem mais en absolu. Retourne le nom du rpertoire parent. Permet de renommer un fichier. Est-ce que le fichier existe ? Le fichier est t-il lisible ? Le fichier est t-il modifiable ? Permet de savoir si c'est un rpertoire. Permet de savoir si c'est un fichier. Quelle est sa longueur (en octets) ? Permet d'effacer le fichier. Permet de crer un rpertoire. On demande la liste des fichiers localiss dans le rpertoire.
Exemple : Afficher un repertoire File f=new File("c:\jdk"); if(f.exists()){ String[] contenu=f.list(); for(int i=0;i<contenu.lenght;i++){ File f2=new File("c:\jdk",contenu[i]); if(f2.isDirectory()) System.out.println("Rep:"+ contenu[i]); else System.out.println("File:"+ contenu[i]); } } else 144 System.out.print("Dossier introuvable");
72
fr:FileReader
read():int
f1:File Fichier1.txt
fw:FileWriter
write(int c):void
f2:File Fichier2.txt
File f1=new File("c:/Fichier1.txt"); FileReader fr=new FileReader(f1); File f2=new File("c:/Fichier2.txt"); FileWriter fw=new FileWriter(f2); int c; while((c=fr.read())!=-1){ fw.write(c); } fr.close();fw.close();
145
fis:FileInputStream
read():int
f1:File image1.jpg
fos:FileOutputStream
write(int c ):void
f2:File image2.jpg
File f1=new File("c:/image1.jpg"); FileInputStream fis=new FileInputStream(f1); File f2=new File("c:/image2.jpg"); FileOutputStream fos=new FileOutPutStream(f2); int c; while((c=fis.read())!=-1){ fos.write(c); } fis.close();fos.close();
146
73
Lire et crire sur un fichier texte ligne par ligne : Streams de traitement : BufferedReader et BufferedWriter
br:BufferedReader
readLine():String
fr:FileReader
read():int
f1:File Fichier1.txt
bw:BufferedWriter
write(String s):void newLine():void
fw:FileWriter
write(int c):void
f2:File Fichier2.txt
File f1=new File("c:/Fichier1.txt"); FileReader fr=new FileReader(f1); BufferedReader br=new BufferedReader(fr); File f2=new File("c:/Fichier2.txt"); FileWriter fw=new FileWriter(f2); BufferedWriter bw=new BufferedWriter(fw); String s; while((s=br.readLine())!=null){ bw.write(s);bw.newLine(); } br.close();bw.close();
147
bis:BufferedInputStream
fis:FileInputStream
f2:File Fichier.zip
write(int c):void
read():int
File f1=new File("c:/","Fichier.doc"); FileInputStream fis=new FileInputStream(f1); BufferedInputStream bis=new BufferedInputStream(fis); File f2=new File("Fichier.zip"); FileOutputStream fos=new FileOutputStream(f2); BufferedOutputStream bos=new BufferedOutputStream(fos); ZipOutputStream zos=new ZipOutputStream(bos); zos.setMethod(ZipOutputStream.DEFLATED); zos.putNextEntry(new ZipEntry(f1.getName())); int c; while ((c=bis.read())!=-1){ zos.write(c); } zos.close();bis.close();
148
74
bis:BufferedInputStream
fis:FileInputStream
f2:File Fichier.doc
write(int c):void
read():int
File f1=new File("Fichier.zip"); FileInputStream fis=new FileInputStream(f1); BufferedInputStream bis=new BufferedInputStream(fis); ZipInputStream zis=new ZipInputStream(bis); ZipEntry ze=zis.getNextEntry(); File f2=new File(ze.getName()); FileOutputStream fos=new FileOutputStream(f2); BufferedOutputStream bos=new BufferedOutputStream(fos); int c; while ((c=zis.read())!=-1){ bos.write(c); } zis.close();bos.close();
149
Srialisation
oos:ObjectOutputStream
fos:FileOutputStream
f:File Fichier.dat
writeObject(Object o):void
write(int c)
Voiture v1 = new Voiture("V6", "Cabriolet"); // Crer un objet de la classe Voiture Voiture v2 = new Voiture("V5", "peujeot"); v1.setCarburant(50); v2.setCarburant(100); File f=new File("Fichier.dat"); FileOutputStream fos= new FileOutputStream(f); ObjectOutputStream oos = new ObjectOutputStream(fos); oos.writeObject(v1); // Srialiser lobjet v1 oos.writeObject(v2); // Srialiser lobjet v2 oos.close();
150
75
Classes Srialiser
import java.io.Serializable; public class Voiture implements Serializable { private String moteur; private String carrosserie; private transient int essence; public Voiture (String m, String c) { moteur =m; carrosserie = c; } public String getMoteur() {return moteur;} public String getCarrosserie() {return carrosserie;} public void setCarburant(int e) {essence += e;} public int getCarburant() {return essence;} }
151
DSrialisation
ois:ObjectInputStream
fis:FileInputStream
f:File Fichier.dat
readObject():Object
read():int
File f=new File("Fichier.dat"); FileInputStream fis = new FileInputStream(f); ObjectInputStream ois = new ObjectInputStream(fis); Voiture v1 = (Voiture)ois.readObject(); Voiture v2 = (Voiture)ois.readObject(); ois.close(); System.out.println("Carrosserie : " + v1.getCarrosserie()); System.out.println("Moteur : " + v1.getMoteur()); System.out.println("Carburant : " + v1.getCarburant()); System.out.println("Carrosserie : " + v2.getCarrosserie()); System.out.println("Moteur : " + v2.getMoteur()); System.out.println("Carburant : " + v2.getCarburant());
152
76
Applications
153
F2<Nbui<23F3<Nbui<25F2<J ogp<23F3<Jogp<28
154
77
Traitement dun ficher texte Ligne par ligne: Afficher la moyenne des notes
import java.io.*; public class App2 { public static void main(String[] args) { try { File f1=new File("Notes.tct"); FileReader fr=new FileReader(f1); BufferedReader br=new BufferedReader(fr); String s; float somme=0;int nb=0; while((s=br.readLine())!=null){ ++nb; String[] tab=s.split(";"); int note=Integer.parseInt(tab[2]); somme=somme+note; } br.close(); System.out.println("Moyenne="+somme/nb); } catch (Exception e) { e.printStackTrace(); } } }
Fichier Notes.txt :
Moyenne=13.75
155
Srialisation
Classe srialisable Etudiant.java :
import java.io.Serializable; public class Etudiant implements Serializable{ private String code; private String matiere; private float note; public Etudiant(String code, String matiere, float note) { this.code = code; this.matiere = matiere; this.note = note; } public Etudiant() { } public String toString() { return "Etudiant [code=" + code + ", matiere=" + matiere + ", note="+ note + "]"; } // Getters et Setters }
Fichier Notes.txt :
156
78
Srialisation
Stocker les donnes de chaque ligne dans un objet de la classe Etudiant Fichier Notes.txt : Srialiser les objets tudiants dans un ficher E1;Math;12 import java.io.*; E2;Math;14 public class App3 { E1;Info;12 public static void main(String[] args) { E2;Info;17
try { File f1=new File("Notes.tct");FileReader fr=new FileReader(f1); BufferedReader br=new BufferedReader(fr); File f2=new File("Scolarite.txt"); FileOutputStream fos=new FileOutputStream(f2); ObjectOutputStream oos=new ObjectOutputStream(fos); String s; while((s=br.readLine())!=null){ String[] tab=s.split(";"); Etudiant et=new Etudiant(tab[0],tab[1],Float.parseFloat(tab[2])); System.out.println(et.toString()); oos.writeObject(et); } oos.close(); } catch (Exception e) { e.printStackTrace(); }} }
157
Dsrialisation
import java.io.*; public class App4 { public static void main(String[] args) { float somme=0;int nb=0; try { File f =new File("Scolarite.txt"); FileInputStream fis=new FileInputStream(f); ObjectInputStream ois=new ObjectInputStream(fis); Object o; while(true){ ++nb; Etudiant et=(Etudiant)ois.readObject(); somme=somme+et.getNote(); System.out.println(et.toString()); } } catch (Exception e) { } System.out.println("Moyenne="+somme/nb); } }
158
79
80
Par M.youssfi
161
Interfaces graphiques
En java, il existe deux types de composants graphiques:
Composants AWT (Abstract Window ToolKit): Composants qui font appel aux composants graphiques de lOS Composants SWING : Composants crit compltement avec java et sont indpendant de lOS
OS JVM Application
AWT : Composants lgers SWING : Composants lourds
162
81
Composants AWT
Nous avons notre disposition principalement trois types d'objets :
Les Components qui sont des composants graphiques. Exemple (Button, Label, TextField) Les Containers qui contiennent les Components. Exemple (Frame, Pannel, .) Les Layouts qui sont en fait des stratgies de placement de Components pour les Containers. Exemple (FlowLayout, BorderLayout, GridLayout)
163
AWT
SWING
164
82
165
166
83
Lvnement actionPerformed est produit quand on valide une action par un clique ou par la touche de validation du clavier. Pour grer cet vnement dans une application, il faut crer un classe implmentant linterface ActionListener et redfinir la rponse aux vnements utilisateur, produits dans linterface, dans la mthode actionPerformed. La classe implmentant cette interface sappelle un listener (couteur) ou un gestionnaire dvnements. Quand on clique, par exemple, sur un bouton qui est branch sur cet couteur, la mthode actionPerformed de lcouteur sexcute
167
import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; public class TestEvent extends Frame implements ActionListener { Label l=new Label("Votre Nom:"); TextField t=new TextField("******"); 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); b.addActionListener(this); b2.addActionListener(this); this.setVisible(true); } // Gestionaire des vnnements public void actionPerformed(ActionEvent e) { // Si la sourse de l'vnement est le bouton b if(e.getSource()==b){ // Lire le contenu de la zone de texte String s=t.getText(); // Ajouter la valeur de s la liste liste.add(s); } // Si la sourse de l'vnnement est b2 else if(e.getSource()==b2){ // Quitter l'application System.exit(0); } } public static void main(String[] args) { new TestEvent(); }
168
84
h: ActionListener
public void actionPerformed(ActionEvent e)
169
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)
170
85
171
172
86
173
87