Vous êtes sur la page 1sur 128

Conception et Programmation

Oriente Objet Java

M.Youssfi

med@youssfi.net | ENSET Universit


Hassan II Mohammedia 1
Introduction
Qualit logicielle

med@youssfi.net | ENSET Universit


Hassan II Mohammedia 2
Rappels :Qualit dun Logiciel
 La qualit dun logiciel se mesure par rapport
plusieurs critres :
 Rpondre aux spcifications fonctionnelles :
 Une application est cre pour rpondre , tout dabord, aux besoins
fonctionnels des entreprises.
 Les performances:
 La rapidit dexcution et Le temps de rponse
 Doit tre btie sur une architecture robuste.
 Eviter le problme de monte en charge
 La maintenance:
 Une application doit voluer dans le temps.
 Doit tre ferme la modification et ouverte lextension
 Une application qui nvolue pas meurt.
 Une application mal conue est difficile maintenir, par suite
elle finit un jour la poubelle.

med@youssfi.net | ENSET Universit


Hassan II Mohammedia 3
Qualit dun Logiciel
 La qualit dun logiciel se mesure par rapport plusieurs
critres : (Suite)
 Scurit
 Garantir lintgrit et la scurit des donnes
 Portabilit
 Doit tre capable de sexcuter dans diffrentes plateformes.
 Capacit de communiquer avec dautres applications distantes.
 Disponibilit et tolrance aux pannes
 Capacit de fournir le service diffrents type de clients :
 Client lourd : Interfaces graphiques SWING
 Interface Web : protocole Http
 Tlphone : SMS
 .
 Design des ses interfaces graphiques
 Charte graphique et charte de navigation
 Accs via diffrentes interfaces (Web, Tlphone, PDA, ,)
 Cot du logiciel

med@youssfi.net | ENSET Universit


Hassan II Mohammedia 4
Architecture J2EE
Serveur dapplication : TOMCAT
Couche WEB Couche Couche
Client Lger Mtier DAO
1
HTML Contrleur 2

CSS Servlet 3

Java Script 4
HTTP Modle DAO
XML 5 Mtier
Java Donnes
6
Ajax Beans
Vue
Hibernate
Flash JSP STRUTS
JSF Couche
Spring MVC service JDBC SGBD
Intgration avec Spring ou EJB
Client Lourd
AWT RMI/EJB/CORBA/SOAP
SWING
SWT

med@youssfi.net | ENSET Universit


Hassan II Mohammedia 5
Programmation Oriente Objet
Java

M.Youssfi

med@youssfi.net | ENSET Universit


Hassan II Mohammedia 6
Programme
 Java?
 Programmation oriente Objet Java
 Objet et Classe
 Hritage et accessibilit
 Polymorphisme
 Collections
 Notions de Design Patterns
 Exceptions et Entres Sorties
 Interfaces graphique AWT et SWING
 Accs aux bases de donnes
 Threads et Sockets

med@youssfi.net | ENSET Universit


Hassan II Mohammedia 7
Quest ce que java?

 Langage de programmation orient objet (Classe, Objet,


Hritage, Encapsulation et Polymorphisme)
 Avec java on peut crer des application
multiplateformes. Les applications java sont portables.
Cest--dire, on peut crer une application java dans une
plateforme donne et on peut lexcuter sur nimporte
quelle autre plateforme.
 Le principe de java est : Write Once Run Every Where
 Open source: On peut rcuprer le code source de java.
Ce qui permet aux dveloppeurs, en cas de besoin, de
dvelopper ou modifier des fonctionnalits de java.

med@youssfi.net | ENSET Universit


Hassan II Mohammedia 8
Quest ce que java?
 Java est utilis pour crer :
 Des applications Desktop
 Des applets java (applications java destines sexcuter dans une page web)
 Des applications pour les smart phones
 Des applications embarques dans des cartes puces
 Des application JEE (Java Entreprise Edition)
 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.

med@youssfi.net | ENSET Universit


Hassan II Mohammedia 9
Diffrents modes de compilation
Java est un langage compil et interprt
 Compilation en mode natif
 Compilation Byte Code
 Compilation en mode JIT(Just In Time)

Natif Byte Code JIT

Code source Code source Code source

Compilation Compilation Compilation

Langage Machine Byte Code Byte Code

Edition de lien Interprtation par Interprtation par


La JVM en mode byte code La JVM en mode JIT
(Traduit en code machine (Traduit tout le programme
Programme.Exe et excute instruction par Byte Code en programme
Instruction
med@youssfi.net ) Universit
| ENSET machine puis lexcute )
Hassan II Mohammedia 10
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.

med@youssfi.net | ENSET Universit


Hassan II Mohammedia 11
Ce que contient le JDK

med@youssfi.net | ENSET Universit


Hassan II Mohammedia 12
Kit de dveloppement java
 Les programmes ncessaire au dveloppement java sont
placs dans le rpertoire c:\jdk1.5\bin savoir:
 javac.exe : Compilateur java.
 java.exe : Interprteur du bytecode java.
 appletviewer.exe : Pour tester les applets java.
 Jdb.exe : Dbogueur java.
 Javap.exe : dsassembleur du bytecode.
 Javadoc.exe : Gnrer la documentation de vos programmes
java.
 Javah.exe : Permet de lier des programmes Java avec des
mthodes natives, crites dans un autre langage et dpendant
du systme.
 jar.exe : Permet de compresser les classes Java ainsi que tous
les fichiers ncessaires l'excution d'un programme
(graphiques, sons, etc.). Il permet en particulier d'optimiser le
chargement des applets sur Internet.
 jarsigner.exe : Un utilitaire permettant de signer les fichiers
archives produits par jar.exe.
med@youssfi.net | ENSET Universit
Hassan II Mohammedia 13
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:
- path= C:\Program Files\Java\jdk1.6.0_13\bin; ..
- 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.
- classpath= .; c:\monProjet\lib; c:\programmation

med@youssfi.net | ENSET Universit


Hassan II Mohammedia 14
Configurer la variable denvironnement path sous windows

med@youssfi.net | ENSET Universit


Hassan II Mohammedia 15
Outils de dveloppement java

 Un Editeur de texte ASCII: on peut utiliser un simple


diteur comme notepad de windows mais il est
prfrable d utiliser un diteur conu pour la
programmation java exemples: Ultraedit, JCreator, .
 Eclipse est lenvironnement de dveloppement java le
plus prfr pour les dveloppeur java. Il est gratuit et
cest un environnement ouvert.
 Autres IDE java :
 JDevlopper de Oracle.
 JBuilder de Borland.

med@youssfi.net | ENSET Universit


Hassan II Mohammedia 16
Premier programme java
Remarques:
 Le nom du fichier java doit tre le mme que celui de la classe
qui contient la fonction principale main.
 Pour compiler le programme source, il faut faire appel au
programme javac.exe qui se trouve dans le dossier c:\jdk1.2\bin.
 Pour rendre accessible ce programme depuis n importe quel
rpertoire, il faut ajouter la commande : path c:\jdk1.2\bin dans le
fichier autoexec.bat.
 Aprs compilation du programme PremierProgramme.java, il y a
gnration du fichier PremierProgramme.class qui reprsente le
ByteCode de programme.
 Pour excuter ce programme en byte code, il faut faire appel au
programme java.exe qui reprsente l interprter du bytecode.

med@youssfi.net | ENSET Universit


Hassan II Mohammedia 17
Premier programme java
public class PremierProgramme {
public static void main(String[] args) {
System.out.println("First Test");
}
}
 Lancer un diteur de texte ASCII et Ecrire le code source de ce programme.
 Enregistrer ce fichier dans un nouveau rpertoire c:\exojava sous le nom
PremierProgramme.java
 Compiler ce programme sur ligne de commande Dos :
c:\exojava>javac PremierProgramme.java
 Corriger les Erreurs de compilation
 Excuter le programme sur ligne de commande
c:\exojava>java PremierProgramme

med@youssfi.net | ENSET Universit


Hassan II Mohammedia 18
Premire Application
graphique
import javax.swing.*;
import java.awt.*;
public class FirstGraphicApp {
public static void main(String[] args) {
// Crer une nouvelle fentre
JFrame jf=new JFrame("Titre");
//Crer les composants graphiques
JLabel l=new JLabel("Nom:");
JTextField t=new JTextField(12);
JButton b=new JButton("OK");
//Dfinir une technique de mise en page
jf.setLayout(new FlowLayout());
//Ajouter les composants la fentre
jf.add(l);jf.add(t);jf.add(b);
//Dfinir les dimensions de la fentre
jf.setBounds(10, 10, 400, 400);
//Afficher la fentre
jf.setVisible(true);
}
} med@youssfi.net | ENSET Universit
Hassan II Mohammedia 19
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>
 Vous pouvez galement AppletViewer.exe pour tester l applet :
C:\exojava>appletviewer page.htm med@youssfi.net | ENSET Universit
Hassan II Mohammedia 20
Deuxime Applet avec Gestion des vnements
import java.applet.Applet;
import java.awt.*;
import java.awt.event.*;
public class DeuxiemeApplet extends Applet implements ActionListener {
// Dclarer etcrer les composants graphiques
Label lNom=new Label("Nom:"); TextField tNom=new TextField(12);
List listNoms=new List(); Button b=new Button("OK");
// Initialisation de l'applet
public void init() {
// Ajouter les composants l'applet
add(lNom);add(tNom);add(listNoms);add(b);
// En cliquant sur le bouton b le gestionnaire
// des vnnements actionPerformed s'excute
b.addActionListener(this);
}
//Mthode qui permet de grer les vnements
public void actionPerformed(ActionEvent e) {
if(e.getSource()==b){
// Lire le contenu de la zone de texte
String nom=tNom.getText();
// Ajouter ce contenu dans la liste
listNoms.add(nom);
}
}
}
med@youssfi.net | ENSET Universit
Hassan II Mohammedia 21
Structures fondamentales du
langage java

med@youssfi.net | ENSET Universit


Hassan II Mohammedia 22
Structure du langage java

 Au niveau syntaxe, Java est un langage de


programmation qui ressemble beaucoup au langage
c++
 Toute fois quelques simplifications ont t
apportes java pour des raisons de scurit et
doptimisation.
 Dans cette partie nous ferons une prsentation
succincte des types primitifs, les enveloppeurs,
dclarations des variables, le casting des primitives,
les oprateurs arithmtiques et logiques, les
structures de contrle (if, swich, for et while)

med@youssfi.net | ENSET Universit


Hassan II Mohammedia 23
Les primitives

Java dispose des primitives suivantes :


Primitive tendue Taille

char 0 65 535 16 bits


byte -128 +127 8 bits
short -32 768 +32 767 16 bits
int -2 147 483 648 + 2 147 483 647 32 bits
long 64 bits
float de 1.4E-45 3.40282347E38 32 bits
double 64 bits
boolean true ou false 1 bit
void - 0 bit

med@youssfi.net | ENSET Universit


Hassan II Mohammedia 24
Utilisation des primitives
 Les primitives sont utilises de faon trs simple. Elles
doivent tre dclares, tout comme les handles d'objets,
avec une syntaxe similaire, par exemple :
 int i;
 char c;

 boolean fini;

 Les primitives peuvent tre initialises en mme temps que


la dclaration.
 int i = 12;
 char c = 'a';
 boolean fini = true;

med@youssfi.net | ENSET Universit


Hassan II Mohammedia 25
Utilisation des primitives
 Comment choisir le nom dune variable:
 Pour respecter la typologie de java, les nom des
variables commencent toujours par un caractre en
minuscule et pour indiquer un sparateur de mots,on
utilise les majuscules. Exemples:
 int nbPersonnes;
 String nomPersonne;
 Valeurs par dfaut des primitives:
 Toutes les primitives de type numrique utilises
comme membres d'un objet sont initialises la
valeur 0. Le type boolean est initialis la valeur
false.

med@youssfi.net | ENSET Universit


Hassan II Mohammedia 26
Casting des primitives

 Le casting des primitives


 Le casting (mot anglais qui signifie moulage),
galement appel cast ou, parfois, transtypage,
consiste effectuer une conversion d'un type vers
un autre type.
 Le casting peut tre effectu dans deux conditions
diffrentes
 Vers un type plus gnral. On parle alors de sur-casting ou
de sur-typage.
 Vers un type plus particulier. On parle alors de sous-
casting ou de sous-typage.

med@youssfi.net | ENSET Universit


Hassan II Mohammedia 27
Casting des primitives
 Sur-casting : Le sur-casting peut se faire
implicitement ou explicitement.
 Exemples :
 int a=6; // le type int est cod sur 32 bits
 long b; // le type long est cod sur 64 bits
 Casting implicite :
 b=a;
 Casting explicite
 b=(long)a;
 Sous-Casting : Le sous-casting ne peut
se faire quexplicitement.
1: float a = (float)5.5;
2 : double c = (double)a;
4 : int d = 8;
5 : byte f = (byte)d;

med@youssfi.net | ENSET Universit


Hassan II Mohammedia 28
Les enveloppeurs (wearpers)
Les primitives sont enveloppes dans des objets appels
enveloppeurs (Wearpers ). Les enveloppeurs sont des classe
Classe Primitive
Character char
Byte byte
Short short
Integer int
Long long
Float float
Double double
Boolean boolean
Void -
BigInteger - -
BigDecimal -

med@youssfi.net | ENSET Universit


Hassan II Mohammedia 29
Utilisation des primitives et enveloppeurs
 Exemple:
 double v1=5.5; // v1 est une primitive
 Double v2=new Double(5.6); // v2 est un objet
 long a=5; // a est une primitive
 Long b=new Long(5); // b est un objet
 Long c= 5L; // c est un objet
 System.out.println("a="+a);
 System.out.println("b="+b.longValue());
 System.out.println("c="+c.byteValue());
 System.out.println("V1="+v1);
out
 System.out.println("V2="+v2.intValue());
 Rsultat:
 a=5

 b=5

 c=5

 V1=5.5

 V2=5

med@youssfi.net | ENSET Universit


Hassan II Mohammedia 30
Oprateurs
 Oprateur d affectation:
x=3; // x reoit 3
x=y=z=w+5; // z reoit w+5, y reoit z et x reoit y
 Les oprateurs arithmtiques deux oprandes:
+ : addition
- : soustraction
* : multiplication
/ : division
% : modulo (reste de la division euclidienne)

med@youssfi.net | ENSET Universit


Hassan II Mohammedia 31
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;
 Les oprateurs relationnels:
== : quivalent
< : plus petit que
> : plus grand que
<= : plus petit ou gal
>= : plus grand ou gal
!= : non quivalent
 Les oprateurs dincrmentations et de
dcrmentation:
 ++ : Pour incrmenter (i++ ou ++i)
 -- : Pour dcrmenter (i- ou --i)

med@youssfi.net | ENSET Universit


Hassan II Mohammedia 32
Oprateurs
 Les oprateurs logiques
 && Et (deux oprandes)
 || Ou (deux oprandes )
 ! Non (un seul oprande)
 L'oprateur trois oprandes ?:
 condition ? expression_si_vrai : expression_si_faux
 exemple : x = (y < 5) ? 4 * y : 2 * y;
Equivalent :
if (y < 5)
x = 4 * y;
else
x = 2 * y;

med@youssfi.net | ENSET Universit


Hassan II Mohammedia 33
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;
}
 L'instruction conditionnelle else
if (expression) {
instruction1;
}
else {
instruction2;
}

med@youssfi.net | ENSET Universit


Hassan II Mohammedia 34
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;
}

med@youssfi.net | ENSET Universit


Hassan II Mohammedia 35
Structures de contrle:  L'instruction switch
Syntaxe :
switch( variable) {
case valeur1: instr1;break;
case valeur2: instr2;break;
 Exemple: case valeurN: instrN;break;
import java.util.Scanner; default: instr;break;
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;
}}}
med@youssfi.net | ENSET Universit
Hassan II Mohammedia 36
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);
}

med@youssfi.net | ENSET Universit


Hassan II Mohammedia 37
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;
}
 Branchement au moyen des instructions break et continue
 break:
int x = 10;
for (int i = 0; i < 10; i++) {
x--;
if (x == 5) break;
}
System.out.println(x);
 continue:
for (int i = 0; i < 10; i++) {
if (i == 5) continue;
System.out.println(i);
}
med@youssfi.net | ENSET Universit
Hassan II Mohammedia 38
Structures de contrle
 L instruction While
while (condition){ Exemple :
int s=0;int i=0;
BlocInstructions; while (i<10){
} s+=i;
i++;
}
System.out.println("Somme="+s);
 L instruction do ..
while Exemple :
do{ int s=0;int i=0;
BlocInstructions; do{
s+=i;
}
i++;
while (condition); }while (i<10);
System.out.println("Somme="+s);

med@youssfi.net | ENSET Universit


Hassan II Mohammedia 39
Programmation oriente objet
avec JAVA

med@youssfi.net | ENSET Universit


Hassan II Mohammedia 40
Mthode oriente objet
 La mthode oriente objet permet de concevoir une application sous
la forme d'un ensemble d'objets relis entre eux par des relations
 Lorsque que l'on programme avec cette mthode, la premire
question que lon se pose plus souvent est :
 qu'est-ce que je manipule ? ,
 Au lieu de qu'est-ce que je fait ? .
 L'une des caractristiques de cette mthode permet de concevoir de
nouveaux objets partir d'objets existants.
 On peut donc rutiliser les objets dans plusieurs applications.
 La rutilisation du code fut un argument dterminant pour venter les
avantages des langages objets.
 Pour faire la programmation oriente objet il faut maitriser les
fondamentaux de lorient objet savoir:
 Objet et classe
 Hritage
 Encapsulation (Accessibilit)
 Polymorphisme

med@youssfi.net | ENSET Universit


Hassan II Mohammedia 41
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 :Fenetre
Couleur="rouge" titre="WinWord"

Carburant=20
tat de lobjet largeur=400

Puissance=120 hauteur=300

demarrer() Deplacer()

accelerer() Comportement agrandir()


med@youssfi.net | ENSET Universit
fermer()
Freiner() Hassan II Mohammedia 42
Identit dun objet

 En plus de son tat, un objet possde une identit


qui caractrise son existence propre.
 Cette identit sappelle galement rfrence ou
handle de lobjet
 En terme informatique de bas niveau, lidentit dun
objet reprsente son adresse mmoire.
 Deux objets ne peuvent pas avoir la mme identit:
cest--dire que deux objet ne peuvent pas avoir le
mme emplacement mmoire.

med@youssfi.net | ENSET Universit


Hassan II Mohammedia 43
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.
med@youssfi.net | ENSET Universit
Hassan II Mohammedia 44
Caractristique dune classe
 Une classe est dfinit par:
 Les attributs
 Les mthodes
 Les attributs permettent de dcrire ltat de des objets de cette classe.
 Chaque attribut est dfini par:
 Son nom
 Son type
 ventuellement sa valeur initiale
 Les mthodes permettent de dcrire le comportement des objets de
cette classe.
 Une mthode reprsente une procdure ou une fonction qui permet
dexcuter un certain nombre dinstructions.
 Parmi les mthode dune classe, existe deux mthodes particulires:
 Une mthode qui est appele au moment de la cration dun objet de
cette classe. Cette mthode est appele CONSTRUCTEUR
 Une mthode qui est appele au moment de la destruction dun objet.
Cette mthode sappelle le DESTRUCTEUR

med@youssfi.net | ENSET Universit


Hassan II Mohammedia 45
Reprsentation UML dune classe

 Une classe est reprsent par un rectangle 3


compartiments:
 Un compartiment qui contient le nom de la classe
 Un compartiment qui contient la dclaration des attributs
 Un compartiment qui contient les mthodes
 Exemples:
Compte Nom de la classe

code : int
Attributs
solde : float
Compte(float soldeInitial) Mthodes
verser(float mt):void Ou
Oprations
retirer(float mt):void
getSolde():float med@youssfi.net | ENSET Universit
Hassan II Mohammedia 46
Les classes sont stockes dans des packages

 Les packages offrent un mcanisme gnral pour la partition des


modles et le regroupement des lments de la modlisation
 Chaque package est reprsent graphiquement par un dossier
 Les packages divisent et organisent les modles de la mme
manire que les dossier organisent le systme de fichier

Nom
du paquetage

med@youssfi.net | ENSET Universit


Hassan II Mohammedia 47
Accessibilit au membres dune classe
 Dans java, il existe 4 niveaux de protection :
 private (-) : Un membre priv dune classe nest
accessible qu lintrieur de cette classe.
 protected (#) : un membre protg dune classe est
accessible :
 Lintrieur de cette classe
 Aux classes drives de cette classe.
 Aux classes du mme package.
 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.
med@youssfi.net | ENSET Universit
Hassan II Mohammedia 48
Exemple dimplmentation dune classe
avec Java package metier;
public class Compte {
// Attributs
metier private int code;
protected float solde;
Compte // Constructeur
- code : int public Compte(int c,float s){
code=c;
# solde : float
solde=s;
+ Compte(int code, float solde) }
+ verser(float mt):void // Mthode pour verser un montant
public void verser(float mt){
+ retirer(float mt):void
solde+=mt;
+ toString():String }
// 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);
}
med@youssfi.net | ENSET Universit
} Hassan II Mohammedia 49
Cration des objets dans java
 Dans java, pour crer un objet dune classe , On utilise la commande
new suivie du constructeur de la classe.
 La commande new Cre un objet dans lespace mmoire et retourne
ladresse mmoire de celui-ci.
 Cette adresse mmoire devrait tre affecte une variable qui
reprsente lidentit de lobjet. Cette rfrence est appele handle.
package test;
import metier.Compte; c1:Compte
public class Application { Code=1
code=1
public static void main(String[] args) { Solde=8000
solde=6000
Solde=5000

Compte c1=new Compte(1,5000); verser(float mt)


retirer(float mt)
Compte c2=new Compte(2,6000);
toString()
c1.verser(3000);
c2:Compte
c1.retirer(2000);
code=2
System.out.println(c1.toString()); solde=6000
} verser(float mt)

} Code=1 Solde= |6000 retirer(float mt)


med@youssfi.net ENSET Universit
Hassan II Mohammedia toString() 50
Constructeur par dfaut
 Quand on ne dfinit aucun constructeur pour une classe, le
compilateur cre le constructeur par dfaut.
 Le constructeur par dfaut na aucun paramtre et ne fait
aucune initialisation
Exemple de classe : Instanciation en utilisant le
public class Personne { constructeur par dfaut :
// Les Attributs
private int code; Personne p=new Personne();
private String nom; p.setNom("AZER");
// Les Mthodes System.out.println(p.getNom());
public void setNom(String n){
this.nom=n;
}
public String getNom(){
return nom;
} med@youssfi.net | ENSET Universit
} Hassan II Mohammedia 51
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;
} med@youssfi.net | ENSET Universit
Hassan II Mohammedia 52
Encapsulation Diagramme de squence :
public class Application {
public static void main(String[] args) { :Application
Personne p=new Personne();
crer()
p.setNom("AZER"); p1:Personne
System.out.println(p.getNom());
setNom("AZER")
}
} getNom()
p:Personne
:Application
Comportement
Comportement
Etat
Etat
Code = 1
p.getNom() nom=AZER

Retourne AZER
setNom()
p.seNom("AZER")

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
med@youssfi.net y accder
| ENSET Universit
Hassan II Mohammedia 53
Membres statiques dune classe.
 Dans lexemple de la classe Compte, chaque objet Compte
possde ses propres variables code et solde. Les variables code
et solde sont appeles variables dinstances.
 Les objets dune mme classe peuvent partager des mmes
variables qui sont stockes au niveau de la classe. Ce genre de
variables, sappellent les variables statiques ou variables de
classes.
 Un attribut statique dune classe est un attribut qui appartient la
classe et partag par tous les objets de cette classe.
 Comme un attribut une mthode peut tre dclare statique, ce
qui signifie quelle appartient la classe et partage par toutes
les instances de cette classe.
 Dans la notation UML, les membres statiques dune classe sont
souligns.

med@youssfi.net | ENSET Universit


Hassan II Mohammedia 54

Exemple:
Supposant nous voulions ajouter la
package metier;
public class Compte {
classe Compte une variable qui permet // Variables dinstances
de stocker le nombre le comptes crs. private int code;
 Comme la valeur de variable nbComptes private float solde;
est la mme pour tous les objets, celle-ci // Variable de classe ou statique
sera dclare statique. Si non, elle sera private static int nbComptes;
duplique dans chaque nouveau objet public Compte(float solde){
cr. this.code=++nbComptes;
this.solde=solde;
 La valeur de nbComptes est au dpart
}
initialise 0, et pendant la cration
// Mthode pour verser un montant
dune nouvelle instance (au niveau du
public void verser(float mt){
constructeur), nbCompte est incrmente
solde+=mt;
et on profite de la valeur de nbComptes
}
pour initialiser le code du compte.
// Mthode pour retirer un montant
Compte public void retirer(float mt){
solde-=mt;
- code : int
}
# solde : float // retourne l'tat du compte
public String toString(){
- nbComptes:int
return(" Code="+code+" Solde="+solde);
+ Compte(float solde) }
// retourne la valeur de nbComptes
+ verser(float mt):void
public static int getNbComptes(){
+ retirer(float mt):void return(nbComptes);
}
+ toString():String
}
med@youssfi.net | ENSET Universit
+ getNbComptes():int Hassan II Mohammedia 55
Application de test Classe Compte
nbCompte=0
nbCompte=2
nbCompte=1
package test;
import metier.Compte;
getNbComptes()
public class Application {
public static void main(String[] args) {

Compte c1=new Compte(5000); c1:Compte c2:Compte


Compte c2=new Compte(6000); Code=1
code=1 code=2
Solde=8000
solde=6000
Solde=5000 solde=6000
c1.verser(3000);
verser(float mt) verser(float mt)
c1.retirer(2000); retirer(float mt) retirer(float mt)
System.out.println(c1.toString()); toString() toString()

System.out.println(Compte.nbComptes)
System.out.println(c1.nbComptes)
}
}
Code=1 Solde= 6000
2 med@youssfi.net | ENSET Universit
2 Hassan II Mohammedia 56
Destruction des objets : Garbage Collector
 Dans certains langages de programmation, le
programmeur doit s occuper lui mme de dtruire les
objets inutilisables.
 Java dtruit automatiquement tous les objets
inutilisables en utilisant ce qu on appelle le garbage
collector (ramasseur d ordures). Qui s excute
automatiquement ds que la mmoire disponible est
infrieure un certain seuil.
 Tous les objets qui ne sont pas retenus par des
handles seront dtruits.
 Ce phnomne ralenti parfois le fonctionnement de
java.
 Pour signaler au garbage collector que vous vouler
dtruire un objet dune classe, vous pouvez faire appel
la mthode finalize() redfinie dans la classe.
med@youssfi.net | ENSET Universit
Hassan II Mohammedia 57
Exercice 1 : Modlisation dun segment
extr1 extr2
 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.
med@youssfi.net | ENSET Universit
Hassan II Mohammedia 58
Diagramme de classes
Segment TestSegment
+ extr1 : int
+ extr2 : int + main(String[] args):void
+ Segment (int e1,int e2)
+ ordonne()
+ getLongueur() : int
+ appartient(int x) : boolean
+ toString() : String

med@youssfi.net | ENSET Universit


Hassan II Mohammedia 59
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+"]");
med@youssfi.net | ENSET Universit
}
Hassan II Mohammedia 60
}
Donner Extr1:67
Application Donner Extr2:13
Longueur dusegment[13,67] est :54
Donner X:7
package test; 7 N'appartient pas au segment[13,67]
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);
}
}
med@youssfi.net | ENSET Universit
Hassan II Mohammedia 61
Excution de la classe TestSegment
 Pour excuter une application
(Classe qui contient la mthode
main) avec Eclipse, on clique
avec le bouton droit de la souris
sur la classe, puis on choisit
dans le menu contextuel, Run
As > Java Application

Donner Extr1:67
Donner Extr2:13
Longueur dusegment[13,67] est :54
Donner X:7
7 N'appartient pas au segment[13,67]

med@youssfi.net | ENSET Universit


Hassan II Mohammedia 62
Exercice 2
P(x,y)
 Une cercle est dfini par :
R
 Un point qui reprsente son centre : centre(x,y) et un rayon.
 On peut crer un cercle de deux manires :
 Soit en prcisant son centre et un point du cercle. C(x,y)

 Soit en prcisant son centre et son rayon


 Les oprations que lon souhaite excuter sur un cercle sont :
 getPerimetre() : retourne le primtre du cercle
 getSurface() : retourne la surface du cercle.
 appartient(Point p) : retourne si le point p appartient ou non lintrieur du cercle.
 toString() : retourne une chane de caractres de type CERCLE(x,y,R)
1. Etablir le diagramme de classes
2. Crer les classe Point dfinie par:
 Les attributs x et y de type int
 Un constructeur qui initialise les valeurs de x et y.
 Une mthode toString().
3. Crer la classe Cercle
4. Crer une application qui permet de :
a. Crer un cercle dfini par le centre c(100,100) et un point p(200,200)
b. Crer un cercle dfini par le centre c(130,100) et de rayon r=40
c. Afficher le primtre et le rayon des deux cercles.
d. Afficher si le point p(120,100) appartient lintersection des deux cercles ou non.
med@youssfi.net | ENSET Universit
Hassan II Mohammedia 63
Hritage et accessibilit

M.Youssfi

med@youssfi.net | ENSET Universit


Hassan II Mohammedia 64
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.

med@youssfi.net | ENSET Universit


Hassan II Mohammedia 65
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.

med@youssfi.net | ENSET Universit


Hassan II Mohammedia 66
Diagramme de classes
Compte
- code : int
# solde : float
- nbComptes : int

+ Compte ( )
+ verser (float mt) : void
+ retirer (float mt) : void
+ toString() : String

CompteSimple CompteEpargne ComptePayant


- decouvert : float - taux : float

+ CompteSimple (float dec) + CompteEparge (float taux) + ComptePayant ( )


+ retirer (float mt) : void + catculInterets () : void + verser (float mt) : void
+ toString() : String + toString() : String + retirer (float mt) : void
+ toString() : String

med@youssfi.net | ENSET Universit


Hassan II Mohammedia 67
Implmentation java de la classe Compte
public class Compte {
private int code;
protected float solde;
private static int nbComptes;

public Compte( ){
++nbComptes;
code=nbComptes;
this.solde=0;
}
public void verser(float mt){
solde+=mt;
}
public void retirer(float mt){
if(mt<solde) solde-=mt;
}
public String toString(){
return("Code="+code+" Solde="+solde);
}
}
med@youssfi.net | ENSET Universit
Hassan II Mohammedia 68
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.

med@youssfi.net | ENSET Universit


Hassan II Mohammedia 69
Dfinir les constructeur de la classe drive
 Le constructeur de la classe drive peut
faire appel au constructeur de la classe
parente en utilisant le mot super() suivi de
ses paramtres.
public class CompteSimple extends Compte {
private float decouvert;
//constructeur
public CompteSimple(float decouvert){
super();
this.decouvert=decouvert;
}
}

med@youssfi.net | ENSET Universit


Hassan II Mohammedia 70
Redfinition des mthodes
 Quand une classe hrite dune autre classe, elle peut redfinir
les mthodes hrites.
 Dans notre cas la classe CompteSimple hrite de la classe
Compte la mthode retirer(). nous avons besoin de redfinir
cette mthode pour prendre en considration la valeur du
dcouvert.
public class CompteSimple extends Compte {
private float decouvert;
// constructeur
public CompteSimple(float decouvert){
super();
this.decouvert=decouvert;
}
// Redfinition de la mthode retirer
public void retirer(float mt) {
if(mt-decouvert<=solde)
solde-=mt;
} med@youssfi.net | ENSET Universit
} Hassan II Mohammedia 71
Redfinition des mthodes
 Dans la mthode redfinie de la nouvelle classe drive, on peut
faire appel la mthode de la classe parente en utilisant le mot
super suivi dun point et du nom de la mthode
 Dans cette nouvelle classe drive, nous allons redfinir galement
la mthode toString().
public class CompteSimple extends Compte {
private float decouvert;

// constructeur
// Redfinition de la mthode retirer
public void retirer(float mt) {
if(mt+decouvert>solde)
solde-=mt;
}
// Redfinition de la mthode toString
public String toString() {
return("Compte Simple "+super.toString()+"
Dcouvert="+decouvert);
}
} med@youssfi.net | ENSET Universit
Hassan II Mohammedia 72
Hritage la loupe : Instanciation
: Compte
 Quand on cre une instance dune
- code=1
classe, la classe parente est
- solde=0
automatiquement instancie et lobjet
+ verser()
de la classe parente est associ + retirer()
lobjet cr travers la + toString()
rfrence super injecte par le
compilateur
CompteSimple cs=new CompteSimple(5000);
cs : CompteSimple
 Lors de linstanciation, lhritage entre - decouvert=5000
les classes est traduit par une - super =
composition entre un objet de la classe + retirer()
instancie et dun objet de la classe + toString()
parente qui est cr implicitement.

med@youssfi.net | ENSET Universit


Hassan II Mohammedia 73
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

med@youssfi.net | ENSET Universit


Hassan II Mohammedia 74
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();
med@youssfi.net | ENSET Universit
Hassan II Mohammedia 75
Accessibilit

med@youssfi.net | ENSET Universit


Hassan II Mohammedia 76
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).

 Pour utiliser donc une classe, il faut :


 Connaitre le package ou se trouve la classe (O)
 Importer la classe en spcifiant son package.
 Quest ce quon peut faire avec cette classe:
 Est-ce quon a le droit de linstancier
 Est-ce quon a le droit dexploiter les membres de ses instances
 Est-ce quon a le droit dhriter de cette classe.
 Est-ce quelle contient des membres statiques
 Connaitre qui a le droit daccder aux membres de cette
instance.

med@youssfi.net | ENSET Universit


Hassan II Mohammedia 77
Les packages (O)
 Nous avons souvent utilis la classe System pour
afficher un message : System.out.prinln() ,
 En consultant la documentation de java, nous allons
constater que le chemin d accs complet la classe
System est java.lang.System.
 La classe System tant stocke dans le sous dossier
lang du dossier java.
 java.lang.System est le chemin d accs qui prsente
la particularit d utiliser un point . comme
sparateur.
 Java.lang qui contient la classe System est appel
package

med@youssfi.net | ENSET Universit


Hassan II Mohammedia 78
Les packages (O)

med@youssfi.net | ENSET Universit


Hassan II Mohammedia 79
Les packages (O)
 Notion de package:
 Java dispose d'un mcanisme pour la recherche des classes.
 Au moment de lexcution, La JVM recherche les classes en priorit :
 Dans le rpertoire courant, c'est--dire celui o se trouve la classe
appelante, si la variable d'environnement CLASSPATH n'est pas
dfinie ;
 Dans les chemins spcifis par la variable d'environnement
CLASSPATH si celle-ci est dfinie.
 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.
med@youssfi.net | ENSET Universit
Hassan II Mohammedia 80
Les packages (O) package test;
import a.b.c.Client;
 Application: public class Application {
public static void main(String[] args) {
package a.b.c; Client c=new Client(2,"Salih");
public class Client { System.out.println("Nom="+c.getNom());
private int code;
private String nom; }
public Client(int code, String nom) { }
this.code = code;
this.nom = nom;
}
public String getNom(){
return(nom);
}
public int getCode(){
return code;
}
}
 Pour Compiler la classe Client.java sur ligne de commande:
 javac -d cheminbin Client.java
 cheminbin reprsente le dossier des fichiers .class.

med@youssfi.net | ENSET Universit


Hassan II Mohammedia 81
Les packages (O)
 Les fichiers .jar
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 :

 C:\AJ2\TP_ACC\bin> jar cf archive.jar a

med@youssfi.net | ENSET Universit


Hassan II Mohammedia 82
Ce qui peut tre fait(Quoi)
 Nous avons maintenant fait le tour de la question O ?
 Pour qu'une classe puisse tre utilise (directement ou par
l'intermdiaire d'un de ses membres), il faut non seulement tre
capable de la trouver, mais aussi qu'elle soit adapte l'usage
que l'on veut en faire.
 Une classe peut servir plusieurs choses :
 Crer des objets, en tant instancie.

 Crer de nouvelles classes, en tant tendue.

 On peut utiliser directement ses membres statiques (sans qu'elle


soit instancie.)
 On peut utiliser les membres de ses instances.

 Les diffrents modificateurs qui permettent dapporter des


restrictions lutilisation dune classe sont:
 abstract, final, static, synchronized et native

med@youssfi.net | ENSET Universit


Hassan II Mohammedia 83
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
} med@youssfi.net | ENSET Universit
Hassan II Mohammedia 84
Les mthodes abstraites
 Une mthode abstraite peut tre dclare
lintrieur dune classe abstraite.
 Une mthode abstraite est une mthode qui
na pas de dfinition.
 Une mthode abstraite est une mthode qui
doit tre redfinie dans las classes drives.
 Exemple :
 On peut ajouter la classe Compte une mthode
abstraite nomme afficher() pour indiquer que
tous les comptes doivent redfinir cette mthode.
med@youssfi.net | ENSET Universit
Hassan II Mohammedia 85
Les mthodes abstraites
public abstract class Compte {
// Membres

// Mthode abstraite
public abstract void afficher();

public class CompteSimple extends Compte {


// Membres

public void afficher(){


System.out.println("Solde="+solde+"
Dcouvert="+decouvert);
}
}
med@youssfi.net | ENSET Universit
Hassan II Mohammedia 86
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; med@youssfi.net | ENSET Universit
}} Hassan II Mohammedia 87
Classe de type final
 Une classe de type final est une classes qui ne peut pas tre
drive.
 Autrement dit, on ne peut pas hriter dune classe final.
 La classe CompteSimple peut tre dclare final en crivant:
public final class CompteSimple extends Compte {
private float decouvert;
public void afficher() {
System.out.println("Solde="+solde+"
Dcouvert="+decouvert);
}
}

med@youssfi.net | ENSET Universit


Hassan II Mohammedia 88
Variables et mthodes final
 Une variable final est une variable dont la valeur ne peut pas
changer. Autrement dit, cest une constante:
 Exemple : final double PI=3.14;

 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;
}
}

med@youssfi.net | ENSET Universit


Hassan II Mohammedia 89
Membres statiques dune classe
 Les membres (attributs ou mthodes) dune classes sont des membres
qui appartiennent la classe et sont partags par toutes les instances
de cette classe.
 Les membres statiques ne sont pas instancis lors de linstanciation de
la classe
 Les membres statiques sont accessible en utilisant directement le nom
de la classe qui les contient.
 Il nest donc pas ncessaire de crer une instance dune classe pour
utiliser les membres statiques.
 Les membre statiques sont galement accessible via les instances de
la classe qui les contient.
 Exemple dutilisation:
 double d=Math.sqrt(9);
 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.
med@youssfi.net | ENSET Universit
Hassan II Mohammedia 90
Qui peut le faire (Qui):
 private:
 L'autorisation private est la plus restrictive. Elle s'applique aux membres
d'une classe (variables, mthodes et classes internes).
 Les lments dclars private ne sont accessibles que depuis la classe qui
les contient.
 Ce type d'autorisation est souvent employ pour les variables qui ne doivent
tre modifies ou lues qu' l'aide d'un getter ou d'un setter.
 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.
 Autorisation par dfaut : package
 L'autorisation par dfaut, que nous appelons package, s'applique aux classes,
interfaces, variables et mthodes.
 Les lments qui disposent de cette autorisation sont accessibles toutes les
mthodes des classes du mme package.
med@youssfi.net | ENSET Universit
Hassan II Mohammedia 91
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.

med@youssfi.net | ENSET Universit


Hassan II Mohammedia 92
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

med@youssfi.net | ENSET Universit


Hassan II Mohammedia 93
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
med@youssfi.net | ENSET Universit
Hassan II Mohammedia 94
Rsum: Accessibilt
 Qui?
 Java dispose de 4 niveaux dautorisations:
 private :
 protected:
 public:
 package (Autorisation par dfaut)

med@youssfi.net | ENSET Universit


Hassan II Mohammedia 95
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.

med@youssfi.net | ENSET Universit


Hassan II Mohammedia 96
Compte.java
package metier; // Getters et Setters
public int getCode() {
public abstract class Compte { return code;
private int code; }
public float getSolde() {
protected float solde;
return solde;
private static int nbComptes; }
public static int getNbComptes() {
public Compte(float s){ return nbComptes;
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);
}

med@youssfi.net | ENSET Universit


Hassan II Mohammedia 97
CompteSimple.java
package metier; //Getters et Setters
public float getDecouvert() {
public final class CompteSimple return decouvert;
extends Compte { }
private float decouvert; public void setDecouvert(float
decouvert) {
// Constructeurs this.decouvert = decouvert;
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;
}

med@youssfi.net | ENSET Universit


Hassan II Mohammedia 98
CompteEpargne.java
package metier; // Getters et Setters
public float getTaux() {
public class CompteEpargne extends return taux;
Compte { }
private float taux; public void setTaux(float taux) {
//Constructeurs this.taux = taux;
}
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;
}

med@youssfi.net | ENSET Universit


Hassan II Mohammedia 99
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();
}
}

med@youssfi.net | ENSET Universit


Hassan II Mohammedia 100
Application TestCompte.java
package test; // Test de ComptePayant
ComptePayant c3=new
import metier.*; ComptePayant(5000);
public class TestCompte { System.out.println(c3);
public static void main(String[] args) { c3.verser(6000);
// Tester la classe Compte Simple c3.retirer(4000);
CompteSimple c1=new CompteSimple(8000,4000); System.out.println(c3);
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);

med@youssfi.net | ENSET Universit


Hassan II Mohammedia 101
Polymorphisme

med@youssfi.net | ENSET Universit


Hassan II Mohammedia 102
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

med@youssfi.net | ENSET Universit


Hassan II Mohammedia 103
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

med@youssfi.net | ENSET Universit


Hassan II Mohammedia 104
Instanciation et hritage

 Considrons lexemple suivant:

Fruit
poids:int
Fruit()
affiche():void

Pomme Orange

Pomme(int p) Orange(int p)
affiche():void affiche():void
affichePoids() affichePoids()

med@youssfi.net | ENSET Universit


Hassan II Mohammedia 105
Instanciation et hritage
public abstract class Fruit{ public class Orange extends Fruit{
int poids; public Orange(int p){
public Fruit(){ poids=p;
System.out.println("Cration d'un System.out.println("cration d'une
fruit"); Orange de "+ poids+" grammes ");
} }
public void affiche(){ public void affiche(){
System.out.println("c'est un fruit"); System.out.println("C'est une
} Orange");
} }
public void affichePoids(){
public class Pomme extends Fruit{ System.out.println("le poids de la
public Pomme(int p){ Orange est:"+poids+" grammes");
poids=p; }
System.out.println("cration d'une pomme }
de "+ poids+" grammes ");
}
public void affiche(){ public class Polymorphisme{
System.out.println("C'est une pomme"); public static void main(String[] args){
} Pomme p=new Pomme(72);
public void affichePoids(){ Orange o=new Orange(80);
System.out.println("le poids de la pomme }
est:"+poids+" grammes"); }
}
}
med@youssfi.net | ENSET Universit
Hassan II Mohammedia 106
Instanciation et hritage
 Le rsultat affich par le programme est:
Cration d'un fruit
Cration d'une pomme de 72 grammes
Cration d'un fruit
cration 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

med@youssfi.net | ENSET Universit


Hassan II Mohammedia 107
Sur-casting des objets

 Considrons lexemple suivant:


public class Polymorphisme2{
public static void main(String[] args){
// Sur-casting implicite
Fruit f1=new Orange(40);
// Sur-casting explicite
Fruit f2=(Fruit)new Pomme(60);
// Sur-casting implicite
f2=new Orange(40);
}
}

med@youssfi.net | ENSET Universit


Hassan II Mohammedia 108
Sur-casting des objets
 Un objet de type Pomme peut tre affect un handle de type
fruit sans aucun problme :
 Fruit f1;

 f1=new Pomme(60);

 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);

med@youssfi.net | ENSET Universit


Hassan II Mohammedia 109
Sous-Casting des objets

 Considrons lexemple suivant:


public class Polymorphisme3{
public static void main(String[] args){
Fruit f1;
Fruit f2;  Erreur de compilation:
f1=new Pomme(60); Polymorphisme3.java:5: cannot resolve symbol
f2=new Orange(40); symbol : method affichePoids ()
location: class Fruit
f1.affichePoids(); f1.affichePoids();
((Pomme)f1).affichePoids(); ^
} 1 error

 Solution : Sous-casting explicit

med@youssfi.net | ENSET Universit


Hassan II Mohammedia 110
Sous-casting des objets
 Ce message indique que lobjet f1 qui est de type Fruit ne possde pas
la mthode affichePoids().
 Cela est tout fait vrai car cette mthode est dfinie dans les classes
Pomme et Oranges et non dans la classe Fruit.
 En fait, mme si le handle f1 pointe un objet Pomme, le compilateur ne
tient pas en considration cette affectation, et pour lui f1 est un Fruit.
 Il faudra donc convertir explicitement lobjet f1 qui de type Fruit en
Pomme.
 Cette conversion sappelle Sous-casting qui indique la conversion dun
objet dune classe vers un autre objet dune classe drive.
 Dans ce cas de figure, le sous-casting doit se faire explicitement.
 Lerreur de compilation peut tre vit en crivant la syntaxe suivante :
 ((Pomme)f1).affichePoids();
 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.

med@youssfi.net | ENSET Universit


Hassan II Mohammedia 111
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 :

med@youssfi.net | ENSET Universit


Hassan II Mohammedia 112
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

med@youssfi.net | ENSET Universit


Hassan II Mohammedia 113
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.

med@youssfi.net | ENSET Universit


Hassan II Mohammedia 114
Tableaux et Collections

med@youssfi.net | ENSET Universit


Hassan II Mohammedia 115
Tableaux de primitives liste
5 0
12 1
23 2
3
4
5
 Tableaux de primitives: 6
 Dclaration : 7
8
 Exemple : Tableau de nombres entiers 9
 int[] liste; 10
 liste est un handle destin pointer vers un tableau dentier
 Cration du tableau
 liste = new int[11];

 Manipulation des lments du tableau:


 liste[0]=5; liste[1]=12; liste[3]=23;

 for(int i=0;i<liste.length;i++){

 System.out.println(liste[i]);
 }

med@youssfi.net | ENSET Universit


Hassan II Mohammedia 116
lesFruits

Tableaux dobjets
0
 Dclaration : :Pomme 1
 Exemple : Tableau dobjets Fruit poids=60 2
 Fruit[] lesFruits; affiche() 3
 Cration du tableau affichePoids() 4
 lesFruits = new Fruit[5];
:Orange
 Cration des objets:
 lesFruits[0]=new Pomme(60); poids=60

 lesFruits[1]=new Orange(100); affiche()


 lesFruits[2]=new Pomme(55); affichePoids()

 Manipulation des objets:


:Pomme
for(int i=0;i<lesFruits.length;i++){
poids=60
lesFruits[i].affiche();
if(lesFruits[i] instanceOf Pomme) affiche()

((Pomme)lesFruits[i]).affichePoids(); affichePoids()

else
((Orange)lesFruits[i]).affichePoids();
}
 Un tableau dobjets est un tableau de handles

med@youssfi.net | ENSET Universit


Hassan II Mohammedia 117
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 med@youssfi.net | ENSET Universit
Hassan II Mohammedia 118
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;
 Cration de la liste:
 fruits=new ArrayList<Fruit>();
 Ajouter deux objets de type Fruit la liste:
 fruits.add(new Pomme(30));
 fruits.add(new Orange(25));
 Faire appel la mthode affiche() de tous les objets de la liste:
 En utilisant la boucle classique for
for(int i=0;i<fruits.size();i++){
fruits.get(i).affiche();
}
 En utilisant la boucle for each
for(Fruit f:fruits)
f.affiche();
 Supprimer le deuxime Objet de la liste
 fruits.remove(1);

med@youssfi.net | ENSET Universit


Hassan II Mohammedia 119
Exemple dutilisation de ArrayList
import java.util.ArrayList;import java.util.List;
public class App1 {
public static void main(String[] args) {
// Dclaration dune liste de type Fruit
List<Fruit> fruits;
// Cration de la liste
fruits=new ArrayList<Fruit>();
// Ajout de 3 objets Pomme, Orange et Pomme la liste
fruits.add(new Pomme(30));
fruits.add(new Orange(25));
fruits.add(new Pomme(60));
// Parcourir tous les objets
for(int i=0;i<fruits.size();i++){
// Faire appel la mthode affiche() de chaque Fruit de la
liste
fruits.get(i).affiche();
}
// Une autre manire plus simple pour parcourir une liste
for(Fruit f:fruits) // Pour chaque Fruit de la liste
f.affiche(); // Faire appel la mthode affiche() du Fruit f
} med@youssfi.net | ENSET Universit
} Hassan II Mohammedia 120
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;
 Cration de la liste:
 fruits=new Vector<Fruit>();
 Ajouter deux objets de type Fruit la liste:
 fruits.add(new Pomme(30));
 fruits.add(new Orange(25));
 Faire appel la mthode affiche() de tous les objets de la liste:
 En utilisant la boucle classique for
for(int i=0;i<fruits.size();i++){
fruits.get(i).affiche();
}
 En utilisant la boucle for each
for(Fruit f:fruits)
f.affiche();
 Supprimer le deuxime Objet de la liste
 fruits.remove(1);
med@youssfi.net | ENSET Universit
Hassan II Mohammedia 121
Exemple dutilisation de Vector
import java.util.Vector;
public class App2 {
public static void main(String[] args) {
// Dclaration dun vecteur de type Fruit
Vector<Fruit> fruits;
// Cration du vecteur
fruits=new Vector<Fruit>();
// Ajout de 3 objets Pomme, Orange et Pomme au vecteur
fruits.add(new Pomme(30));
fruits.add(new Orange(25));
fruits.add(new Pomme(60));
// Parcourir tous les objets
for(int i=0;i<fruits.size();i++){
// Faire appel la mthode affiche() de chaque Fruit
fruits.get(i).affiche();
}
// Une autre manire plus simple pour parcourir un vecteur
for(Fruit f:fruits) // Pour chaque Fruit du veceur
f.affiche(); // Faire appel la mthode affiche() du Fruit f
}
} med@youssfi.net | ENSET Universit
Hassan II Mohammedia 122
Collection de type Iterator
 La collection de type Iterator du package java.util est souvent
utilise pour afficher les objets dune autre collection
 En effet il est possible dobtenir un iterator partir de chaque
collection.
 Exemple :
 Cration dun vecteur de Fruit.
Vector<Fruit> fruits=new Vector<Fruit>();
 Ajouter des fruits aux vecteur
fruits.add(new Pomme(30));
fruits.add(new Orange(25));
fruits.add(new Pomme(60));
 Cration dun Iterator partir de ce vecteur
Iterator<Fruit> it=fruits.iterator();
 Parcourir lIterator:
while(it.hasNext()){
Fruit f=it.next();
f.affiche();
}
 Notez bien que, aprs avoir parcouru un iterator, il devient vide
med@youssfi.net | ENSET Universit
Hassan II Mohammedia 123
Collection de type HashMap
 La collection HashMap est une classe qui implmente linterface Map. Cette
collection permet de crer un tableau dynamique dobjet de type Object qui
sont identifis par une cl.
 Dclaration et cration dune collection de type HashMap qui contient des
fruits identifis par une cl de type String :
 Map<String, Fruit> fruits=new HashMap<String, Fruit>();
 Ajouter deux objets de type Fruit la colelction fruits
:Pomme
 fruits.put("p1", new Pomme(40)); key value
 fruits.put("o1", new Orange(60)); p1
o1
 Rcuprer un objet ayant pour cl "p1 :Orange
 Fruit f=fruits.get("p1");
 f.affiche();
 Parcourir toute la collection:
Iterator<String> it=fruits.keySet().iterator();
while(it.hasNext()){
String key=it.next();
Fruit ff=fruits.get(key);
System.out.println(key);
ff.affiche();
}
med@youssfi.net | ENSET Universit
Hassan II Mohammedia 124
Associations entre classes

 Une agence gre plusieurs clients.


 Chaque client possde un seul compte
 Le compte peut tre soit un compteSimple ou un
compteEpargne.

1 Compte

Agence Client 1
1 * possde
gre

CompteSimple CompteEpargne

med@youssfi.net | ENSET Universit


Hassan II Mohammedia 125
Traduction des association
 La premire association gre de type ( 1---*) entre Agence et
Client se traduit par :
 Cration dun tableau dobjets Client ou dun vecteur comme
attribut de la classe Agence.
 Ce tableau ou ce vecteur sert rfrencer les clients de lagence.

 La deuxime association possde de type ( 1----1) se traduit par:


 Cration dun handle de type Compte dans la classe Client.

 Ce handle sert rfrencer lobjet Compte de ce client.

 La troisime rgne de gestion est une relation dhritage et non


une association.

med@youssfi.net | ENSET Universit


Hassan II Mohammedia 126
Traduction des association

1 Compte

Agence Client 1
1 * possde
lesClients:Vector monCompte:Compte
gre

CompteSimple CompteEpargne

Agence a=new Agence();


Client cli=new Client();
CompteSimple c1=new CompteSimple();
cli.monCompte=c1;
a.addClient(cli);

med@youssfi.net | ENSET Universit


Hassan II Mohammedia 127
Agence a=new Agence();
Client cli=new Client();
Exemple de diagramme CompteSimple c1=new CompteSimple();
dobjets cli.monCompte=c1;
a.lesClients.addElement(cli);

cli: Client c1: CpteSimple

monCompte

a: Agence
lesClients

: Client : CpteEpargne

monCompte

: Client : CpteSimple
addClient(Client c)
monCompte

med@youssfi.net | ENSET Universit


Hassan II Mohammedia 128