1 Programmation orientée objet II Programmation orientée objet II 2 e année S.I.L Sabeur ELKOSANTINI A. U. : 08-09 S. Elkosantini S. Elkosantini 1 Sabeur ELKOSANTINI [email protected]Bibliographie ) Livres Livres Michel Divay , « Java et la programmation orientée objet », Dunod eds, 2006. R d P lk J Phili R t illé Li l Sit i P ti Renaud Pawlak , Jean-Philippe Retaillé , Lionel Seinturier, « Programmation orientée aspect pour Java / J2EE », Eyrolles eds, 2004. Bruce Eckel, « Thinking in Java », 2nd revision, 2000 (Disponible sur internet). ) Autres supports de cours Autres supports de cours Cours de Jean-Michel DOUDOUX : A. U. : 09-10 S. Elkosantini S. Elkosantini 2 http://www.jmdoudoux.fr/java/dej/ Cours de Mickaël BARON : http://mbaron.ftp-developpez.com/javase/java.pdf Plan Chapitre 1 : Introduction Chapitre 2 : Les premiers pas en Java Chapitre 3 : POO avec Java A. U. : 09-10 S. Elkosantini S. Elkosantini 3 Plan Chapitre 1 : Introduction Chapitre 2 : Les premiers pas en Java Chapitre 3 : POO avec Java A. U. : 09-10 S. Elkosantini S. Elkosantini 4
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
1
Programmation orientée objet IIProgrammation orientée objet II
LivresLivresMichel Divay , « Java et la programmation orientée objet », Dunod eds, 2006.
R d P l k J Phili R t illé Li l S i t i P ti Renaud Pawlak , Jean-Philippe Retaillé , Lionel Seinturier, « Programmation
orientée aspect pour Java / J2EE », Eyrolles eds, 2004.
Bruce Eckel, « Thinking in Java », 2nd revision, 2000 (Disponible sur internet).
Autres supports de coursAutres supports de coursCours de Jean-Michel DOUDOUX :
A. U. : 09-10 S. ElkosantiniS. Elkosantini 2
http://www.jmdoudoux.fr/java/dej/
Cours de Mickaël BARON :http://mbaron.ftp-developpez.com/javase/java.pdf
Plan
Chapitre 1 : IntroductionChapitre 2 : Les premiers pas en JavaChapitre 3 : POO avec Java
A. U. : 09-10 S. ElkosantiniS. Elkosantini 3
Plan
Chapitre 1 : IntroductionChapitre 2 : Les premiers pas en JavaChapitre 3 : POO avec Java
A. U. : 09-10 S. ElkosantiniS. Elkosantini 4
2
Introduction
Historique de la POOHistorique de la POO
Les années 60 : le langage Simula 67 langage de simulation informatiqueLes années 60 : le langage Simula-67, langage de simulation informatique
Les premiers pas de la programmation orientée objet
Les années 70 : SmallTalk , apparition des concepts de base :
objet, encapsulation, polymorphisme, héritage , etc.
Les années 80 : La Montée en puissance de l’orienté objet
A. U. : 09-10 S. ElkosantiniS. Elkosantini 5
Les années 80 : La Montée en puissance de l orienté objetApparition de nouveaux langages : Objective C ,C++, Eiffel, Common Lisp Object
System
Introduction
Historique de la POOHistorique de la POO
L é 90 l’â d' d l' t i d l POO Les années 90 : l’âge d'or de l'extension de la POO :
Standardisation de C++
Apparition du langage de programmation Java
Depuis, évolution de l’orientée objet:
Analyse par objet (AOO).
A. U. : 09-10 S. ElkosantiniS. Elkosantini 6
La conception orientée objet COO
Les bases de données orientées objets (SGBDOO)
Introduction
Programmation procédurale Vs Programmation OOProgrammation procédurale Vs Programmation OOProgrammation procédurale (C, Cobol, Fortran, Pascal, etc.) :
P t t é éd t f tiProgrammes structurés en procédures et fonctions,
Des problèmes en cas de modification de la structures des données,
Chaque fonction ou procédure résout une partie du problème,
Programmation OO (Java, C++, C#, Delphi, etc.):
Unité logique : objet,
A. U. : 09-10 S. ElkosantiniS. Elkosantini 7
Programmation par « composants »,
Facilité de l’évolution du code,
Améliorer la conception et la maintenance des grands systèmes,
Introduction
Programmation par Objets ?Programmation par Objets ?
Unité logique : l’objet
Objet est défini par :
Une identité : permet de distinguer un objet d’un autre objet.
Un état : représenté par des attributs (variables) qui stockent des
valeurs.
Un comportement : défini par des méthodes (procédures) qui
A. U. : 09-10 S. ElkosantiniS. Elkosantini 8
modifient des états. Moto
Couleur : noirVitesse : 150 Km/h
Accélérer Freiner
3
Introduction
Le langage Java : historiqueLe langage Java : historique
1990 - Sté Sun Microsystems (James Gosling, Naughton, Sheridan) : projet de
langage petits systèmes
1991 : Introduction du langage « Oak »
1993 : Essor d’Internet : adapter Java au Web
1993 à 1995 : adaptation d’Oak pour le Web (Exécution d’applets)
A. U. : 09-10 S. ElkosantiniS. Elkosantini 9
1995 : présentation de Java TM par Sun et mise à disposition gratuite du JDK sur
le net
Introduction
Le langage JavaLe langage Java
Présente dans de très nombreux domaines d’application : des serveurs
d’applications aux téléphone portables et cartes à puces (JME)
Quelques chiffres (Java One 2005):
• 4,5 millions de développeurs Java
• 700 millions de PC équipés d'une JVM
• 708 millions de téléphones Java
A. U. : 09-10 S. ElkosantiniS. Elkosantini 10
• 600 millions de périphériques mobiles
• 1 milliard de Java Cards
Introduction
Qualités majeures de JavaQualités majeures de Java
Simple (comparé à C++)p ( p )Gère les débordements mémoire.
Gère lui-même la désallocation mémoire (ramasse-miettes).
Pas de manipulation explicite de pointeurs.
Pas de surcharge d’opérateurs.
Fondamentalement Orienté-Objet : pas de fonctions/procédures : que
A. U. : 09-10 S. ElkosantiniS. Elkosantini 11
des méthodes !
Portable : principe de machine virtuelle
Introduction
Le principe de la machine virtuelle Le principe de la machine virtuelle
A. U. : 09-10 S. ElkosantiniS. Elkosantini 12
4
Introduction
Le principe de la machine virtuelle Le principe de la machine virtuelle
A. U. : 09-10 S. ElkosantiniS. Elkosantini 13
Le byte-code est :
proche d'un langage machine
indépendant de la plateforme d'exécution (matériel + OS)
Introduction
Un programme Java, pour voir …Un programme Java, pour voir …
A. U. : 09-10 S. ElkosantiniS. Elkosantini 14
Source : cours de Genoud
Introduction
Un programme Java, pour voir …Un programme Java, pour voir …
// Exemple de programme minimal : Salut.javaÉdition du programme source :// p p g jimport java.io.*; //….
public class Salut {public static void main (String args[]) {
System.out.println("Salut tout le monde");}
}
Compilation C \T \ j S l j é é i d fi hi
A. U. : 09-10 S. ElkosantiniS. Elkosantini 15
Compilation : C:\Temp\> javac Salut.java génération du fichier …..
Exécution : D:\Temp\> java Salut
Introduction
Java Vs C++Java Vs C++
En C++:
// Exemple de programme minimal : Salut java
En Java:
// Exemple de programme minimal : Salut.cpp#include <stdio.h> //……
void main () {std::cout<<"Salut tout le monde";
}
A. U. : 09-10 S. ElkosantiniS. Elkosantini 16
// Exemple de programme minimal : Salut.javaimport java.io.*; //………….
public class Salut {public static void main (String args[]) {
System.out.println("Salut tout le monde");}
}
5
Introduction
Les différentes application JavaLes différentes application JavaLes applications indépendantes:
Les applets : Programmes exécutées dans l’environnement d’un navigateur Web
A. U. : 09-10 S. ElkosantiniS. Elkosantini 17
et chargés au travers de pages HTML
Introduction
Les différentes plateformes JavaLes différentes plateformes Java
Fourni les compilateurs, outils, runtimes, et APIs pour écrire, déployer, etFourni les compilateurs, outils, runtimes, et APIs pour écrire, déployer, et
exécuter des applets et applications dans la langage de programmation
Java
Destinée au développement d’applications « d’entreprise » («business
applications») robustes et interopérables. Simplifier le développement et
le déploiement d’applications distribuées et articulées autours du web.
A. U. : 09-10 S. ElkosantiniS. Elkosantini 18
Environnement d’exécution optimisé pour les dispositifs « légers » :
Plateforme définie par SUN pour le développement d’applications réparties
Basée sur un ensemble de technologies Java
• Servlets, JSP(Java Server Pages), JSF (Java Server Faces) : pages web
dynamiques
• EJB (Entreprise Java Beans) : objets métiers
• JDBC : API d'accès à des SGBD
• JNDI (Java Naming an Directory Interface) : API pour nommage des objets
A. U. : 09-10 S. ElkosantiniS. Elkosantini 20
JNDI (Java Naming an Directory Interface) : API pour nommage des objets
• JTA (Java Transaction API) ; API pour gestion des transactions
• JAAS (Java Authentication and Authorization Service)
• Et de nombreuses autres…
S'appuie sur un modèle d'architecture multi-tiers (multi-couches)
6
Plan
Chapitre 1 : IntroductionChapitre 2 : Les premiers pas en JavaChapitre 3 : POO avec Java
A. U. : 09-10 S. ElkosantiniS. Elkosantini 21
Les premiers pas en Java
PlanPlanPlanPlan
Les opérateurs mathématiques , logiques et de conversion
Les boucles et les structures de contrôles
Les tableaux
Les commentaires
A. U. : 09-10 S. ElkosantiniS. Elkosantini 22
Les commentaires
Les premiers pas en Java
La structure d’un programme JavaLa structure d’un programme Java
i t j i *…
import java.io.*;
public class Salut {
public static void main (String args[]) {
afficher (5);
}
public void afficher (int val ) {
System.out.println(‘’ le nombre à afficher est ‘’ +val);
…
……
A. U. : 09-10 S. ElkosantiniS. Elkosantini 23
System.out.println( le nombre à afficher est val);
}
}
Nom du fichier = nom de la classe
…
Les premiers pas en Java
Les types primitifsLes types primitifsNe pas confondre les types primitifs et les objets
Les types primitifs :
Entiers : byte (1 octet) - short (2 octets) - int (4 octets) - long (8 octets)
Flottants : float (4 octets) - double (8 octets)
Booléens : boolean (true ou false)
Caractères : char
Quelle est la différence ??
A. U. : 09-10 S. ElkosantiniS. Elkosantini 24
Déclaration en java :Int a, b, c ;float x;char chBooléens u, b;
Des erreurs ??!!
7
Les premiers pas en Java
Les valeurs flottantesLes valeurs flottantesUtilise la norme IEEE 754 pour représenter les valeurs à virgule flottanteUtilise la norme IEEE 754 pour représenter les valeurs à virgule flottante.
3.0 est un double (64bits), 3.0f (ou 3.0F) est un float (32 bits)
InfinityNaN-InfinityNaN
Résultat :
Les premiers pas en Java
Infini et Infini et NaNNaNLa norme IEEE 754 introduit trois valeurs particulieres par types de flottants
+Infinity est le résultat de i/0 avec i positif
-Infinity est le résultat de i/0 avec i négatif
NaN est le résultat de 0/0
A. U. : 09-10 S. ElkosantiniS. Elkosantini 26
x == x est faux si x vaut Double.NaN
On doit tester NaN avecFloat.isNaN() ou Double.isNaN()
Les premiers pas en Java
Les constantesLes constantesLe mot clé final permet de déclarer une constante: la valeur ne doit pas être Le mot clé final permet de déclarer une constante: la valeur ne doit pas être
modifiée pendant l’exécution du programme.
Déclaration en java : final int n=10, m ;n=n+1;
L é lt t d l’i t ti t
A. U. : 09-10 S. ElkosantiniS. Elkosantini 27
Le résultat de l’instruction est …….
Il est impossible de créer ou d'obtenir un tableau de valeurs constantes en Java !!
Les premiers pas en Java
Les opérateurs et l’affectationLes opérateurs et l’affectation
Les opérateurs mathématiques
Opérateur Exemple Equivalent à
= Note = 18 Note = 18
+= Note+ = 2 Note = Note + 2
-= Note- = 2 Note = Note - 2
*= Note* = 1.5 Note = Note * 1.5
/= Note/ = 2 Note = Note / 2
double nb1;float nb2;
nb1/nb2 = …..
Quel est le type du résultat de l’opération ?
float nb1;
A. U. : 09-10 S. ElkosantiniS. Elkosantini 28
%= Note% = 2 Note = Note % 2
^= Note^ = 2 Note = Note ^ 2
float nb1;int nb2;
nb1 + nb2 = …….
8
Les premiers pas en Java
Les opérateurs et l’affectationLes opérateurs et l’affectationPriorité
Les opérateurs et l’affectationLes opérateurs et l’affectationLes opérateurs de décalage :
M i l d bitManipules des bits,
Utilisables uniquement avec des types primitifs entiers,
Les opérateurs sont :
o Nb << n : décalage vers la gauche du nombre Nb de n bits
o Nb >> n : décalage vers la droite du nombre Nb de n bits
A. U. : 09-10 S. ElkosantiniS. Elkosantini 34
Exemple : N=10000101 N<< 2 donne ........
int N = 6; N>>1 donne .......
Les premiers pas en Java
Les boucles et les structures de contrôlesLes boucles et les structures de contrôlesif… else…
Syntaxe:if (condition logique)
Instructions exécutées si la condition logique est vraieelse
Instructions exécutées si la condition logique est fausse
Exemple 1:
A. U. : 09-10 S. ElkosantiniS. Elkosantini 35
Exemple 1: If (moyenne >= 10)
System.out.println(‘’ l’étudiant a réussi’’);else
System.out.println(‘’ l’étudiant doit repasser ses examens’’);
Les premiers pas en Java
Les boucles et les structures de contrôlesLes boucles et les structures de contrôlesif… else…
Exercice 1:Ecrire la partie du programme Java qui vérifie si un entier n est paire ou
impaire et affiche le résultat.
A. U. : 09-10 S. ElkosantiniS. Elkosantini 36
10
Les premiers pas en Java
Les boucles et les structures de contrôlesLes boucles et les structures de contrôles
switch case defaultswitch… case…default
Syntaxe:switch(expression)
{case constante_1: suite d’instructions; break;...
case constante_n: suite d’instructions; break;default : suite d’instruction;}
A. U. : 09-10 S. ElkosantiniS. Elkosantini 37
Les premiers pas en Java
Les boucles et les structures de contrôlesLes boucles et les structures de contrôlesswitch… case…default
Exercice 2:Exercice 2:Ecrire la partie du programme Java qui affiche: o « Très bien » si la note est ‘A’,o « Bien » si la note est ‘B’,o « Insuffisant » si la note est ‘C’,o un message d’erreur sinon
A. U. : 09-10 S. ElkosantiniS. Elkosantini 38
Les premiers pas en Java
Les boucles et les structures de contrôlesLes boucles et les structures de contrôles
L b l ité tiLes boucles itératives
while … :while ( condition logique) { ... // code a exécuter dans la boucle }
do … while :do {
A. U. : 09-10 S. ElkosantiniS. Elkosantini 39
do { Bloc d’instructions ; } while ( condition logique)
Les premiers pas en Java
Les boucles et les structures de contrôlesLes boucles et les structures de contrôles
Les boucles itératives
for… :for (initialisation du compteur ; condition ; modification) { ... // code a exécuter dans la boucle }
Exemple :
A. U. : 09-10 S. ElkosantiniS. Elkosantini 40
for (i = 0 ; i > 10; i++ ) {System.out.println (i);}
Quel est le résultat de la boucle ?
11
Les premiers pas en Java
Les boucles et les structures de contrôlesLes boucles et les structures de contrôles
Les boucles itératives
for… :for (decl/var :array/iterable) { ... // code a exécuter dans la boucle }
Exemple :
A. U. : 09-10 S. ElkosantiniS. Elkosantini 41
public static void main(String[] args) {for(String s:args)System.out.println(s);}
Les premiers pas en Java
Les boucles et le calcul flottantLes boucles et le calcul flottant
IEEE 754, pour chaque opération +, −, *, /
– On calcul le résultat précis infinie
– On arrondie au nombre représentable le plus proche
Attention à l'utilisation des flottants dans les boucles
A. U. : 09-10 S. ElkosantiniS. Elkosantini 42
for(double v=0.0;v!=1.0;v=v+1.0) {System.out.println(v);}// Boucle infinie// utilisé plutot '<'
Les premiers pas en Java
Les boucles et les structures de contrôlesLes boucles et les structures de contrôlesExercice :
La suite de Syracuse avec p > 1 est définie de la façon suivante : La suite de Syracusep avec p > 1 est définie de la façon suivante :
a0 = p
an+1 = an/2 si an est pair
an+1 = 3 × an + 1 si an est impair
Ecrire une méthode static int syracuse (int p, int n) qui calcule la valeur du nieme
terme de la suite Syracuse
A. U. : 09-10 S. ElkosantiniS. Elkosantini 43
terme de la suite Syracusep.
Les premiers pas en Java
Les boucles et les structures de contrôlesLes boucles et les structures de contrôles
break et continue
break : permet de sortir d’une boucle sans exécuter la suite des instructions
continue : arrête l'exécution de l'itération courante, et l'exécution reprend en
début de boucle avec l'itération suivante
A. U. : 09-10 S. ElkosantiniS. Elkosantini 44
12
Les premiers pas en Java
Les tableaux Les tableaux Tableau unidimensionnels
NULLDéclaration : int [] tab;ou int tab[];
NULLtab
Pas de dimensions dans la déclaration
Dimensionnement: int [] tab = new int [3] tab
. . .
A. U. : 09-10 S. ElkosantiniS. Elkosantini 45
Allocation dans la mémoire selon le type du tableau
Les tableaux Les tableaux Tableau multidimensionnels
NULLDéclaration : type [][] tab; NULLtab
Dimensionnement: tab = new type [2][3]; tab . . .
. . .
.
.ou aussi
A. U. : 09-10 S. ElkosantiniS. Elkosantini 46
tab = new type [2];tab [0] = new type[2];tab [1] = new type[3]
tab .
.
. .
. . .
Les premiers pas en Java
Les tableaux Les tableaux Exercice 3:
Soit T une matrice carrée de 3 lignes et 3 colonnes. Ecrire un algorithme qui affiche un
message informant si la matrice est symétrique ou pas.
A. U. : 09-10 S. ElkosantiniS. Elkosantini 47
Les premiers pas en Java
Les tableaux Les tableaux Exercice 4:
Ecrire un algorithme qui tri un tableau en utilisant la méthode de tri par insertion.
A. U. : 09-10 S. ElkosantiniS. Elkosantini 48
13
Les premiers pas en Java
Les vecteursLes vecteursLa classe vecteur permet de gérer des listes contenant plusieurs typesp g p yp
La taille du vecteur est dynamique, contrairement à celle d’un tableau.
Déclaration : Vector v = new Vector()Vector v = new Vector(5)
Quel est la différence ?
A. U. : 09-10 S. ElkosantiniS. Elkosantini 49
Ajout d’élément dans le vecteur :
v.addElement(new Integer(1)); // Ajouter un premier élément v.addElement(new Float(1.9999)); // Ajouter un autre élément for (int i=2; i<10; i++) { int lastInt = ((Number) v.lastElement()).intValue(); v.addElement(new Integer(i + lastInt)); } // Ajouter d’autres éléments
Les premiers pas en Java
Les commentairesLes commentairesImportance des commentaire
Clareté du code
Réutilisation facile du code
Génération automatique du javadoc ou le Help du programme développé
Deux types de commentaire
Commentaire classique /* …*/ ou // …
A. U. : 09-10 S. ElkosantiniS. Elkosantini 50
Génération d’un fichier (HTML) de documentation /** …*/
/** * Ceci est un commentaire pour Javadoc* @author Sabeur * @version 2.0 */
?
Plan
Chapitre 1 : IntroductionChapitre 1 : IntroductionChapitre 2 : Les premiers pas en JavaChapitre 3 : Le concept d’objetsChapitre 4 : POO avec JavaChapitre 5 : … et avec C++
A. U. : 09-10 S. ElkosantiniS. Elkosantini 51
POO avec Java
Les objets et les classes en JavaLes objets et les classes en Java
Moto
…
Moto
CouleurVitesse_limite
Accélérer Freiner
…
…L’implémentation de cette classe en Java est :
A. U. : 09-10 S. ElkosantiniS. Elkosantini 52
14
POO avec Java
La visibilité des variables et des attributsLa visibilité des variables et des attributs
A. U. : 09-10 S. ElkosantiniS. Elkosantini 53
Les paramètres sont aussi considérés comme des variables locales
POO avec Java
La visibilité des variables et des attributsLa visibilité des variables et des attributs
public class LocalVariable {private static double sum(double[] values) {double sum=0.0;for(double v:values) {sum+=v;} // v n'est plus accessiblereturn sum; // values et sum pas accessible}private static void test(int i) {for(int i=0;i<5;i++) // erreur
A. U. : 09-10 S. ElkosantiniS. Elkosantini 54
Une variable à pour portée le bloc dans lequel elle est définie
for(int i=0;i<5;i++) // erreurdoIt(i);}}
POO avec Java
Les méthodesLes méthodes
En Java, il est impossible de définir du code hors d'une méthode. Ja a, est poss b e de dé du code o s d u e ét ode.
Une méthode est séparée en 2 parties :
La signature (types des paramètres, type de retour).
Le code de la méthode.int valeur(){
int amortissement; amortissement = 0.05;
P i P i * i * A
A. U. : 09-10 S. ElkosantiniS. Elkosantini 55
Le code d'une méthode est constitué de différents blocs imbriqués. Chaque
bloc définit et utilise des variables locales.
return Prix – Prix * amortissement * Age;}
POO avec Java
… et le constructeur en Java… et le constructeur en Java
Chaque appel à un constructeur crée un nouvel objet (instance) qui obéit au C aque appe à u co st ucteu c ée u ou e objet ( sta ce) qu obé t au
patron défini par la classe :
• l’instance créée aura les attributs et le comportement définis dans la classe.
• réservation d’un espace mémoire pour la mémorisation de l’état.
Le constructeur est généralement l’occasion d’initialiser les attributs («
personnaliser » l’état de l’instance).
A. U. : 09-10 S. ElkosantiniS. Elkosantini 56
Il peut y avoir plusieurs constructeurs pour une même classe.
Plusieurs initialisations possibles.
15
POO avec Java
… et le constructeur en Java… et le constructeur en Java
L t ti JAVA La construction en JAVA :new + nom de la classe (paramètres)
C’est le constructeur
Produit p1 = new Produit (« Portable », 1) ;
A. U. : 09-10 S. ElkosantiniS. Elkosantini 57
p ( , ) ;Produit p2 = new Produit () ;
Comment programmer la classe Produit ??
POO avec Java
… et le constructeur en Java… et le constructeur en JavaMoto
Et si les paramètres du constructeur CouleurVitesse_limite
MotoAccélérer Freiner L’implémentation de cette classe en Java est :
Et si les paramètres du constructeur portent le même nom que les attributs ??
A. U. : 09-10 S. ElkosantiniS. Elkosantini 58
POO avec Java
L’instanciationL’instanciation
Moto
Le mot clef new est utilisépour créer une instance dynamique d'un objet à chaque fois qu'on en a
besoin.
Moto : Kawasaki Moto : Yamaha
C l
CouleurVitesse_limite
Accélérer Freiner
besoin.
A. U. : 09-10 S. ElkosantiniS. Elkosantini 59
Couleur : noirVitesse_limite : 200
Accélérer Freiner
Couleur : rougeVitesse_limite : 250
Accélérer Freiner
POO avec Java
Le cycle de vie d’un objetLe cycle de vie d’un objet
La création d’un objet ou, autrement dit, …..a c éat o d u objet ou, aut e e t d t, …..
Objet obj ; NULLobj
Cette opération déclare uniquement le nom et le type de l’objet. Les attributs et les
méthodes ne sont pas encore créer.
A. U. : 09-10 S. ElkosantiniS. Elkosantini 60
p
16
POO avec Java
Le cycle de vie d’un objetLe cycle de vie d’un objet
La création d’un objet ou, autrement dit, …..a c éat o d u objet ou, aut e e t d t, …..
Objet obj ; NULLobj
Objet obj = new Objet() ; Attribut 1Attribut 2
… Méthode 1
obj
A. U. : 09-10 S. ElkosantiniS. Elkosantini 61
…
C’est à ce moment que l’allocation mémoire est réalisée
POO avec Java
Les objets, les classes et l’instanciation en Java Les objets, les classes et l’instanciation en Java
Accès aux attributs et méthodes d’un objet à partir d’un autre objet .ccès aux att buts et ét odes d u objet à pa t d u aut e objet .
Nomobjet.Nommethode() ;Nomobjet.NomAttribut;
L’envoi de messages entre objets :
…….
Il ne faut pas oublié les paramètres dans les
A. U. : 09-10 S. ElkosantiniS. Elkosantini 62
Il ne faut pas oublié les paramètres dans les messages
Les cascades sont possibles : Magasin.produit.nom
POO avec Java
Les objets, les classes et l’instanciation en Java Les objets, les classes et l’instanciation en Java
Dans le traitement de l’une de ses méthodes, un objet peut avoir à s’envoyer a s e t a te e t de u e de ses ét odes, u objet peut a o à s e oye
un message (pour accéder à un de ses attributs ou invoquer une des ses
méthodes).
Utilisation de l’auto-référence, en java : this.
Exemple : on se place dans une méthode de la classe Moto :
• Lors du traitement, l’objet appelant la méthode est une instance de la classe
A. U. : 09-10 S. ElkosantiniS. Elkosantini 63
, j pp
Moto.
this.Freiner() signifie « envoyer à this (= moi-même) le message Freiner() »
POO avec Java
Les objets, les classes et l’instanciation en Java Les objets, les classes et l’instanciation en Java
L’appel à l’objet courant : utilisation du mot clé thisappe à objet cou a t : ut sat o du ot c é this
this.methode() ;this.attribut;
Exemple d’utilisation
public class Moto {int Vitesse;int Prix;
A. U. : 09-10 S. ElkosantiniS. Elkosantini 64
int Prix;
Moto( int Vitesse , int Prix){……
}
17
POO avec Java
Les objets, les classes et l’instanciation en Java Les objets, les classes et l’instanciation en Java
Si pas d’ambiguïté, le mot clé this peut être oublié : S pas d a b gu té, e ot c é t s peut êt e oub é :
this.Freiner () ; Freiner();this.Prix; Prix;
Exercice 5 :
Ecrire une classe Livre, caractérisée par les attributs titre, auteur et année et par les
méthodes suivantes :
A. U. : 09-10 S. ElkosantiniS. Elkosantini 65
méthodes suivantes :
- Une méthode affichant les caractéristiques d’un livre
- Une méthode qui prend en paramètre un livre et qui permet d’afficher les deux
livres et de le comparer le nom du livre passé en paramètre.
POO avec Java
Les objets, les classes et l’instanciation en Java Les objets, les classes et l’instanciation en Java Exercice 6 :
Créer une classe Segment qui est définie par ses extrémités (des points) et par sa g q p ( p ) p
couleur. Avec cette classe, on peut calculer la longueur d’un segment, le déplacer
et changer sa couleur.
A. U. : 09-10 S. ElkosantiniS. Elkosantini 66
POO avec Java
La surcharge La surcharge La surcharge de méthodes : un mécanisme donnant la possibilité d'appeler
plusieurs méthodes avec le même nom.
int somme( int p1, int p2){ return (p1 + p2); }
float somme( float p1 float p2){
Exemple : la surcharge de
la méthode somme
Des méthodes surchargées peuvent avoir des types de retour différents à condition qu’elles aient des arguments différents.
int somme( float p1, int p2){ return (int(p1) + p2); }
POO avec Java
La surchargeLa surchargeExercice 7:
1. Créez une classe avec un constructeur par défaut qui imprime un message.
2. Ajoutez à cette classe un constructeur surchargé qui prend un String en argument et
qui l'imprime avec votre message.
3. Créez, dans le programme principale, deux instances de cette objet pour tester les
deux constructeurs.
A. U. : 09-10 S. ElkosantiniS. Elkosantini 68
18
POO avec Java
La manipulation des objetsLa manipulation des objets
L’affectation et la comparaison :a ectat o et a co pa a so :
Objet a= new Objet ();Objet b= new Objet ();a = b ;
Quel est la différence entre les deux instances a et b ?
A. U. : 09-10 S. ElkosantiniS. Elkosantini 69
POO avec Java
La manipulation des objetsLa manipulation des objets
L’affectation et la comparaison :a ectat o et a co pa a so :
Objet a = new Objet ();Objet b = new Objet ();boolean rep = (a == b) ;
Que signifie cette comparaison ?
Vérifier si les deux objets ont la même référence.
A. U. : 09-10 S. ElkosantiniS. Elkosantini 70
POO avec Java
La manipulation des objetsLa manipulation des objets
L’affectation et la comparaison :Quel est le résultat de l’instruction
BMW==Mercedes ?a ectat o et a co pa a so :
Voiture : BMW
Puissance : 9Couleur: noir
Accélérer Freiner
Voiture : Mercedes
Puissance: 9Couleur : noir
Accélérer Freiner
A. U. : 09-10 S. ElkosantiniS. Elkosantini 71
Comment créer deux objets avec la même référence
Les deux objets ont les mêmes valeurs d’attributs mais la référence est différente.
POO avec Java
La destruction des objetsLa destruction des objets
Le destructeur de classe consiste en une méthode qui sera appelée lors de e dest ucteu de c asse co s ste e u e ét ode qu se a appe ée o s de
toute destruction d'un objet.
Avant que l'objet ne soit recyclé par le ramasse-miettes, le système appelle la
méthode finalize :
finalize est une méthode dans laquelle on pourra implémenter proprement la
fermeture éventuelle de fichiers/sockets ouverts ou tout autres opérations.
A. U. : 09-10 S. ElkosantiniS. Elkosantini 72
En Java, le ramasse-miettes (ou le garbage collector), est un mécanisme qui
s’occupe de la libération ou non d’une zone mémoire. C’est un mécanisme
automatique.
Le système essaye d'abord d'appeler l'objet finalize avant de jeter l'objet
19
POO avec Java
La destruction des objetsLa destruction des objets
class Moto{{
int vitesse;String couleur;
Moto(){
…..
System.out.println("L'objet a été créé");}
A. U. : 09-10 S. ElkosantiniS. Elkosantini 73
}
void finalize(){
System.out.println("Objet nettoyé de la mémoire");}
}
POO avec Java
Encapsulation Encapsulation en Javaen Java
Compte_BancaireIl existe trois niveaux de visibilité : - Num_RIB- Nom- Montant
+ Créditer()+ Débiter()
ex ste t o s eaux de s b té :
Privé : en Java, private
publique: en Java, public
protégé: en Java, protected
public String var1;public int methode1();
A. U. : 09-10 S. ElkosantiniS. Elkosantini 74
p ()
protected char var2;protected void methode2();
private int var3;private void methode3();
POO avec Java
Encapsulation Encapsulation en Javaen Java
L’idée de restreindre la visibilité des méthodes et des attributs : dée de est e d e a s b té des ét odes et des att buts :
• Rendre privé les attributs caractérisant l’état de l’objet et de fournir des méthodes
publiques permettant de modifier/accéder à l’attributs.
Des getters et des setters
A. U. : 09-10 S. ElkosantiniS. Elkosantini 75
Attribut Montant : getMontant () : le getter setMontant (…) : le setter
POO avec Java
Encapsulation Encapsulation en Javaen Java
Exemple : Application pour la gestion des comptes en banques. xe p e : pp cat o pou a gest o des co ptes e ba ques.
• La classe Banque ayant comme attribut solde.
• Dans un premier temps, l’attribut est déclaré comme publique.
Quel est l’inconvénient d’un tel programme ?
A. U. : 09-10 S. ElkosantiniS. Elkosantini 76
Quelle amélioration proposez-vous ?
20
POO avec Java
L’accès aux classes en JavaL’accès aux classes en Java
On ne peut pas rendre une classe privé ou protégé, parce que …….
Comment rendre une classe privé ou protégé en Java ?
On peut rendre une classe (d’une bibliothèque) publique.
La classe de la bibliothèque est accessible pour les utilisateurs.
A. U. : 09-10 S. ElkosantiniS. Elkosantini 77
Que se passe t-il si on ne mets rien avant le mot class ?
POO avec Java
Encapsulation Encapsulation en Javaen Java + Compte_Bancaire- Num_RIB- Nom- Montant
+ Créditer()+ Débiter()
Implémenter cette
classe en java
A. U. : 09-10 S. ElkosantiniS. Elkosantini 78
POO avec Java
Le mot clé Le mot clé staticstatic
A éth d i tt ib t ’ t ibl t l’i t i ti d l Aucune méthodes ni attributs n’est accessible avant l’instanciation de la
classe en utilisant le mot clé … .
La zone mémoire n’est pas encore allouée.
Les méthodes et les attributs sont alors associés à l’objet et non à la classe.
A. U. : 09-10 S. ElkosantiniS. Elkosantini 79
… et si on veut que la donnée ou la méthode n'est pas spécifiquement
rattachée à un objet instance d’une classe ?
Utilisation du mot clé static
POO avec Java
Le mot clé Le mot clé staticstatic
class StaticTest {{static int i = 47;}
StaticTest st1 = new StaticTest();StaticTest st2 = new StaticTest();
Et dans une autre classe:
A. U. : 09-10 S. ElkosantiniS. Elkosantini 80
Comment incrémenter l’attribut i ?
21
POO avec Java
L’héritageL’héritageForme
Rectangle Triangle CercleEn Java, en utilisant le mot clé extends
class Forme{
// ….{
class Rectangle extends Forme
Et le mot clé protected ?
A. U. : 09-10 S. ElkosantiniS. Elkosantini 81
g{
// ….{
class Triangle extends Forme{
// ….{
C’est quoi une méthode finald’une classe mère?
POO avec Java
L’héritageL’héritageForme
dessiner ()effacer()
deplacer()t l ()
L’implémentation en Java de la classe Trianglegetcouleur()setcouleur()
Carre TriangleRetournerHor()RetournerVer()
Cercle
A. U. : 09-10 S. ElkosantiniS. Elkosantini 82
POO avec Java
L’héritage : le polymorphismeL’héritage : le polymorphismeForme
dessiner ()effacer()
deplacer()getcouleur()
L’implémentation en Java de la classe Trianglegetcouleur()setcouleur()
Carredessiner()effacer()
Triangledessiner()effacer()
Cercledessiner()effacer()
A. U. : 09-10 S. ElkosantiniS. Elkosantini 83
POO avec Java
L’héritage à plusieurs niveauxL’héritage à plusieurs niveauxForme
dessiner ()effacer()
deplacer()getcouleur()
L’implémentation en Java de la classe Triangle rectanglegetcouleur()setcouleur()
Carredessiner()effacer()
Triangledessiner()effacer()
Cercledessiner()effacer()
A. U. : 09-10 S. ElkosantiniS. Elkosantini 84
Triangle isocèle
Triangle rectangle
22
POO avec Java
L’héritage : la redéfinition et le polymorphismeL’héritage : la redéfinition et le polymorphisme
L défi iti défi i d éth d hé ité d l lLa redéfinition : redéfinir des méthodes héritées de la super-classe.
La sous-classe doit impérativement conserver la déclaration de la méthode
parent (même type et nombre de paramètres et valeur de retour)
Le polymorphisme : ajoute des méthodes dans la sous-classe.
Exemple : Touts les classes de Java héritent de la classe Object. Il héritent
ainsi des méthodes telles que getClass() clone() toString() Forme
A. U. : 09-10 S. ElkosantiniS. Elkosantini 85
ainsi des méthodes telles que getClass(), clone(), toString().dessiner ()effacer()
Triangledessiner()
dessiner(int p)Redéfinition
Polymorphisme
POO avec Java
L’héritage : l’accès aux méthodes de la super classeL’héritage : l’accès aux méthodes de la super classe
Pour invoquer une méthode d'une classe parent, il suffit d'indiquer la
méthode préfixée par super.
class Forme{
void effacer (){{ System.out.println(‘’la forme est effacée’’);}}
class Rectangle extends Forme
A. U. : 09-10 S. ElkosantiniS. Elkosantini 86
class Rectangle extends Forme{
void effacer (){{
System.out.println(‘’le rectangle est effacé’’);super.effacer();
}}
Quel est le résultat ?
POO avec Java
L’héritage : l’accès au constructeur de la super classeL’héritage : l’accès au constructeur de la super classePour appeler le constructeur de la classe parent il suffit d'écrire
super(paramètres) avec les paramètres adéquats.
class Moto{
Moto (){this(0,100) ;}
class Quad extends Moto{int nb-roues;
Quad (int k int p){
Il est obligatoire dans un constructeur d'une classe fille de faire appel
explicitement ou implicitement au constructeur de la classe mère.
A. U. : 09-10 S. ElkosantiniS. Elkosantini 87
Moto (int km){this(km,100) ;}
Moto (int km, int prix){this.km = km ;this.prix=prix;} }
Quad (int k, int p){super(k, p);nb_roues = 4; }
}
Et s’il n’y a pas de constructeur dans la classe mère ?
POO avec Java
L’héritage : le transtypageL’héritage : le transtypageLe transtypage : Traiter un type dérivé comme s'il était son type de base.
Appelé aussi transtypage ascendant, surtypage ou pcasting.
Changer un type vers son type de base revient à remonter dans le
diagramme d'héritage : c’est le transtypage « ascendant ».
Créer trois objets de type cercle, carré et triangle. Ecrire dans la classe principale les méthodes permettant d’afficher la couleur de chaque instance.
A. U. : 09-10 S. ElkosantiniS. Elkosantini 88
23
POO avec Java
L’héritage : le transtypageL’héritage : le transtypageLe transtypage en java :
Forme f = new Triangle () ;
On créé un objet Triangle appelé f et qui est assignée au type Forme, ce
qui semblerait être une erreur (assigner un type à un autre).
Formedessiner ()effacer()Selon le diagramme suivant, quelle
méthode dessiner () va être exécuter ?
A. U. : 09-10 S. ElkosantiniS. Elkosantini 89
Carredessiner()effacer()
Triangledessiner()effacer()
Cercledessiner()effacer()
méthode dessiner () va être exécuter ?
f.dessiner() ;
POO avec Java
L’héritage : le transtypageL’héritage : le transtypageLa classe mère Forme établit l'interface commune pour toutes les classes
filles .
toutes les formes peuvent être dessinées et effacées.
Les classes dérivées redéfinissent ces méthodes pour fournir un
comportement unique pour chaque type de forme spécifique.
Forme f = new Triangle () ;L’i t f
A. U. : 09-10 S. ElkosantiniS. Elkosantini 90
Implémentation
Interface
Classe Forme
Implémentation
InterfaceClasse Triangle L’instance f
Interface
Implémentation
POO avec Java
L’héritage : le transtypageL’héritage : le transtypagePour l’exemple suivant :
Formedessiner ()effacer()
getcouleur()
Implémentation
InterfaceClasse Forme Carre
dessiner()effacer()
Triangledessiner()effacer()
Cercledessiner()effacer()
Forme f = new Trianglerectangle () ;
I lé t ti
InterfaceClasse Trianglerectangle
A. U. : 09-10 S. ElkosantiniS. Elkosantini 91
L’instance f Interface
Implémentation
Triangle isocèle
Triangle rectangle
Implémentation
Selon le diagramme suivant, quel est le résultat de l’instruction f.dessiner() ?
POO avec Java
L’héritage : le transtypageL’héritage : le transtypageRécapitulation : Dans quel cas le transtypage et le polymorphisme sont
utilisés ?
………………….class Emloye {String nom;int id, salaire;
public Emloye(String n) {nom=n;
class magasinier extends Employe {public magasinier(String n) {
super (n);salaire = 250;
}void affiche ()
{
A. U. : 09-10 S. ElkosantiniS. Elkosantini 92
}{
System.out.println("Je suis un magasinier");}
Dans le programme principal, créer un magasinier en utilisant le transtypage et exécuter la méthode affiche de l’objet créer. Quel est le résultat ?
24
POO avec Java
L’héritageL’héritage
Exercice 8: Créer une hiérarchie d'héritage de Rongeur: Souris, Gerbille, et
Hamster. Dans la classe de base, fournir des méthodes qui sont communes à tous
les Rongeurs, et les redéfinir dans les classes dérivées pour exécuter des
comportements différents dépendant du type spécifique du Rongeur. Créer un
tableau de Rongeur, le remplir avec différent types spécifiques de Rongeurs, et
appeler vos méthodes de la classe de base pour voir ce qui arrive.
A. U. : 09-10 S. ElkosantiniS. Elkosantini 93
POO avec Java
L’héritageL’héritageExercice 9:
Ecrivez les classes nécessaires au fonctionnement du programme suivant. Donnez uniquement le nom des classes et les méthodes (sans détailler le contenu).
bli l T tB ti t { public class TestBatiments { public static void main(String args[]){
Batiments[] B=new Batiments[3] ;B [0] = new Appartement(‘’Atef’’) ;B [1] = new Villa(‘’Walid’’) ;B [2] = new Studio(‘’Anis’’) ;For (int i = 0; i<3 ; i++)
B [i].affiche() ; }
A. U. : 09-10 S. ElkosantiniS. Elkosantini 94
}}
Le résultat de ce programme est :L’appartement appartient à AtefLa villa appartient à WalidLe studio appartient à Anis
POO avec Java
Classes abstraitesClasses abstraites
Formepérimètre ()périmètre ()
Carrepérimètre ()
Trianglepérimètre ()
Cerclepérimètre ()
A. U. : 09-10 S. ElkosantiniS. Elkosantini 95
Comment implémenter la méthode périmètre () de la classe Forme ?
La méthode périmètre () ne peut pas être implémenté dans la déclaration de la classe Forme, car on ne sait pas comment calculer le périmètre d'une
forme quelconque
POO avec Java
Classes abstraitesClasses abstraites
Il faut donner la signature de la méthode périmètre () mais pas son g p () pimplémentation dans la classe Forme
C’est une méthode abstraite
S t b t t bli d bl é i èt ( )
A. U. : 09-10 S. ElkosantiniS. Elkosantini 96
Syntaxe : abstract public double périmètre ( ) ;
• L’implémentation de la méthode sera dans les classes filles permettant ainsi de
spécifier un comportement différent pour chacune des classes
25
POO avec Java
Classes abstraitesClasses abstraites
• Une classe abstraite est une classe contenant au moins une méthode abstraite
Exemple:
est appelée une classe abstraite
abstract public class Forme {private String nom;public Forme (Forme nom) { this.nom=nom; }
A. U. : 09-10 S. ElkosantiniS. Elkosantini 97
p ( ) { }abstract public double perimetre( ) ;public void dessiner ( ){System.out.println ( " Je suis " + this . nom) ; }}
POO avec Java
Classes abstraitesClasses abstraites L’implémentation des classes filles :
public class Cercle extends Forme{private double rayon ;private double rayon ;public Cercle ( double rayon ){super ( " cercle " ) ; this . rayon = rayon ; }public double perimetre ( ){ return 2 * Double.PI * this.rayon ; } }
public class Rectangle extends Forme{pr ivate double l a r g e u r ;pr ivate double l o n g u e u r ;
A. U. : 09-10 S. ElkosantiniS. Elkosantini 98
pr ivate double l o n g u e u r ;public Rectangle ( double l a r g e u r , double l o n g u e u r ){super ( " rectange " ) ; this . l a r g e u r = l a r g e u r ;this . l o n g u e u r = l o n g u e u r ; }public double perimetre( ){ return (this . l a r g e u r + this . l o n g u e u r)/2 ; } }
POO avec Java
Classes abstraitesClasses abstraites
La présence d’une méthode virtuelle pure dans une classe a 3 conséquences:
La classe ne peut plus être instanciée,
Une classe abstraite n'existe que pour être héritée,
Toute classe fille de cette classe doit redéfinir la méthode en question,
Une classe fille héritant d'une classe mère abstraite doit implémenter
A. U. : 09-10 S. ElkosantiniS. Elkosantini 99
p
toutes ses méthodes abstraites, sinon elle est aussi une classe abstraite.
Une méthode static ne peut être abstraite car on ne peut redéfinir une méthode static)?
POO avec Java
Classes abstraitesClasses abstraitesExemple 2 :
bli b t t l C t I f B { Méth d b t it public abstract class CentreInfoBourse {private URL[] urlsCentre;. . .abstract protected String lireDonnees(String[] titres);
public String calcule(String[] titres) {. . .donnees = lireDonnees(titres);
Méthode non abstraite malgré qu’elle utilise une méthode abstraite
Méthode abstraite
A. U. : 09-10 S. ElkosantiniS. Elkosantini 100
donnees = lireDonnees(titres);// Traitement effectué sur donnees// indépendant du site boursier
. . .
26
POO avec Java
Classes abstraitesClasses abstraitesExemple 2 :
public class LesEchos extends CentreInfoBourse {. . .public String lireDonnees(String[] titres) {// Implantation pour le site des Echos. . .
}Implémentation de la méthode abstraite
La classe mère définit la structure globale de la classe.
A. U. : 09-10 S. ElkosantiniS. Elkosantini 101
Elle laisse aux classes filles le soin de définir des méthodes (méthode
lireDonnees).
POO avec Java
Classes interfacesClasses interfaces
Une interface est une « classe » purement abstraite dont toutes les méthodes
sont abstraites et publiques.
Une interface est un prototype de classe. Elle définit la signature des méthodes qui doivent être implémentées dans les classes construites à
partir de ce prototype
A. U. : 09-10 S. ElkosantiniS. Elkosantini 102
Une interface est une classe purement abstraite dont toutes les méthodes sont abstraites et publiques et sans attributs (les mots-clés abstract et
public sont optionnels).
Syntaxe : inter face NomInterface { . . . }
POO avec Java
Classes interfacesClasses interfaces
public interface Figure {p blic abstract oid dessiner ()public abstract void dessiner ();public abstract void deplacer(int x, int y);public abstract Position getPosition();
}public interface Comparable {/** renvoie vrai si this est plus grand que o */boolean plusGrand(Object o);
}
A. U. : 09-10 S. ElkosantiniS. Elkosantini 103
Les mots-clés abstract et public sont optionnels
POO avec Java
Classes interfacesClasses interfaces
Comment implémenter les méthodes d’une pinterface?
Une classe implémente une interface A si elle déclare « implements A » dans
son en-tête.
S t l Cl i l t I t f { }
A. U. : 09-10 S. ElkosantiniS. Elkosantini 104
Syntaxe : class Classe implements Interface{ . . . }
La classe doit implémenter toutes les méthodes de l'interface, sinon elle doit être déclarée abstract
27
POO avec Java
Classes interfacesClasses interfaces
Une classe peut implémenter plusieurs interfaces .
Syntaxe : class A implements Inter1, Inter2,...{ . . . }
Une classe peut hériter d'une autre classe et implémenter une ou plusieurs
interfaces.
A. U. : 09-10 S. ElkosantiniS. Elkosantini 105
Syntaxe : class A extends B implements Inter1, Inter2 ,...{ . . . }
POO avec Java
Classes interfacesClasses interfaces
Une interface peut remplacer une classe pour déclarer une variable, un
paramètre, une valeur de retour, etc.
Exemple Figure f;
f contiendra des objets dont la classe implémentera l'interface Comparable.
A. U. : 09-10 S. ElkosantiniS. Elkosantini 106
Exemple Figure f=new Cercle();
POO avec Java
Classes interfacesClasses interfaces
Une interface ne possède pas de d'attribut. Les interfaces ne sont pas instanciables
(comme les classes abstraites).
Une interface n'a pas de constructeurs.
Une interface peut définir des constantes, c'est-à-dire définir des variables
déclarées publiques, statiques et finale et ayant une valeur constante d'affectation.
Exemple : public static final float PI = 3.14f;
A. U. : 09-10 S. ElkosantiniS. Elkosantini 107
On ne donne que la signature des méthodes qui sont nécessairement des
méthodes d'instance publiques et abstraites : abstract public int f();
Une interface peut hériter d'une autre interface : inter face interface1 extends
interface2 { . . .}.
POO avec Java
Classes interfacesClasses interfaces
A quoi sert les interfaces en Java ?
Pour palier le manque d’héritage multiple en Java.
Pour offrir la possibilité d’avoir un comportement unique pour certaines
classes. Exemple : véhicule et voiture et camion.
Dissimuler l’implémentation des méthodes
Favoriser la réutilisation : si le type d'un paramètre d'une méthode est une
A. U. : 09-10 S. ElkosantiniS. Elkosantini 108
interface, cette méthode peut s'appliquer à toutes les classes qui
implémentent l'interface, et pas seulement à toutes les sous-classes d'une
certaine classe
28
Plan
Chapitre 1 : IntroductionChapitre 2 : Les premiers pas en JavaChapitre 3 : POO avec JavaChapitre 4 : Autres notions JavaChapitre 5 : Connexion aux bases de donnéesChapitre 5 Interfaces graphiq es a ec Ja a
A. U. : 09-10 S. ElkosantiniS. Elkosantini 109
Chapitre 5 : Interfaces graphiques avec Java
Autres notions Java
instanceofinstanceof
L’ é t i t f t d i à ll l ti t L’opérateur instanceof permet de savoir à quelle classe appartient une
instance
Si x est une instance d’une sous-classe B de A :
« x instanceof A » renvoie true
P t t i bj t t d l ê l l’ bj t t il f t
A. U. : 09-10 S. ElkosantiniS. Elkosantini 110
Pour tester si un objet o est de la même classe que l’objet courant, il ne faut
donc pas utiliser instanceof mais le code suivant :
if (o != null && o.getClass() == this.getClass())
Autres notions Java
instanceofinstanceofclass B{ …} class D extends B{ }class D extends B{…} class C {…}
B b = new B(); D d = new D(); C c = new C(); b instanceof B // …b instanceof D // …d instanceof B // …d instanceof D // …
A. U. : 09-10 S. ElkosantiniS. Elkosantini 111
b = d; b instanceof B // …b instanceof D // …c instanceof B // … :
// …
Autres notions Java
L’objet StringL’objet String
C’ t l idé é t i lC’est une classe considérée comme type simple.
Ce n’est pas un type primitif.
Initialisation : String txt= « c’est un texte »;
Longueur : txt.length();
A. U. : 09-10 S. ElkosantiniS. Elkosantini 112
Comparaison : txt .equals (« Hello!! »);
Accès aux caractères : txt.charAt(5);
Concaténation : String mot= « en français »;
String txt2 = txt+mot;
29
Autres notions Java
L’objet StringL’objet String
Exercice 8: Exercice 8:
Ecrire un programme qui permet d’afficher les mots d’une phrase. Les mots de la
phrases sont séparés par un espace puis « ; ».
A. U. : 09-10 S. ElkosantiniS. Elkosantini 113
Autres notions Java
Les packagesLes packages
U k t bl d l i i t ê Un package est un ensemble de classes voisines, couvrant me même
domaine et associées à une fonctionnalité.
Définition d’un package : package nom du package;
Les classes doivent être sauvegarder dans le même répertoire.
A. U. : 09-10 S. ElkosantiniS. Elkosantini 114
Définition d un package : package nom_du_package;
Cette instruction est la première ligne dans les classes concernées.
Autres notions Java
Les packagesLes packages
Exemple de package Java :
java.lang
javax.swing
java.net
Pour utiliser les packages dans une classe :
Le package par défaut: java.lang
A. U. : 09-10 S. ElkosantiniS. Elkosantini 115
p g p j g
Pour les autres, il faut le signaler en utilisant le mot clé import
import monpackage.*; //ou
import monpackage.nomclasse;
import TP1.Ex1.*;
Autres notions Java
Les exceptionsLes exceptions
Les exceptions représentent le mécanisme de gestion des erreurs intégré au
langage java.
Une exception est un signal qui indique que quelque chose d’exceptionnel
(comme une erreur) s’est produit. Elle interrompt le flot d’exécution normal du
programme.
class Forme{ Quel est le résultat ?
A. U. : 09-10 S. ElkosantiniS. Elkosantini 116
{Public static void main (String arg[])
{ int a=3,b=0;System.out.println( a/b);}}
Que est e ésu tat ?
Exception in thread "main" java.lang.ArithmeticException: /by zeroat Forme.main(Forme.java:4)
30
Autres notions Java
Les exceptionsLes exceptions
Il existe 3 trois types d'exceptions organisés comme ceci :
A. U. : 09-10 S. ElkosantiniS. Elkosantini 117
Autres notions Java
Les exceptionsLes exceptions
Les Error correspondent à des exceptions qu'il est rare d'attraper.
Les RuntimeException que l'on peut rattraper mais que l'on n'est pas
obligé.
A. U. : 09-10 S. ElkosantiniS. Elkosantini 118
Les Exception que l'on est obligé d'attraper (try/catch) ou de dire
que la méthode appelante devra s'en occuper (throws).
Les exceptions : capturer et attraperLes exceptions : capturer et attraper
Si un bloc de programme ou une méthode génère une exception elle doit
supposer qu'elle sera intercepté et levée.
Un bloc d’instruction peut être surveillé.
On peut attraper une exception avec l’instruction try.
try {// bloc d’instruction
A. U. : 09-10 S. ElkosantiniS. Elkosantini 120
Mais, quoi faire avec cette exception détectée ?
La gestion des exceptions avec l’instruction catch.
31
Autres notions Java
Les exceptions : capturer et attraperLes exceptions : capturer et attraper
try {// bloc d’instruction} catch (Type1 id1){ //instruction à faire en cas d’erreur de type 1 }
A. U. : 09-10 S. ElkosantiniS. Elkosantini 121
Autres notions Java
Les exceptions : capturer et attraperLes exceptions : capturer et attraper
public class Forme{public static void main(String[] args) {int a = 3;int b = 0;try {System.out.println("résultat = " + (i / j));}catch (ArithmeticException e) {
l ( h )
A. U. : 09-10 S. ElkosantiniS. Elkosantini 122
System.out.println (« erreur arithmétique »);}}}
Autres notions Java
Les exceptions : capturer et attraperLes exceptions : capturer et attraper
S’il y a plusieurs types d’exceptions à intercepter, il faut définir autant de
catch que de type d’exceptions.
try {// bloc d’instruction} catch (Type1 id1){ //instruction à faire en cas d’erreur de type 1 }catch (Type2 id2){ //i t ti à f i d’ d t 2 }
A. U. : 09-10 S. ElkosantiniS. Elkosantini 123
{ //instruction à faire en cas d’erreur de type 2 }catch (Type3 id3){ //instruction à faire en cas d’erreur de type 3 }
Un type d'exception donné ne doit pas venir après un type d'une exception d'une
super classe.
Autres notions Java
Les exceptions : Mais, c’est quoi une exception ?Les exceptions : Mais, c’est quoi une exception ?
En Java, les exception sont des objets ayant des méthodes et attributs.
A. U. : 09-10 S. ElkosantiniS. Elkosantini 124
Source : cours de M. Baron
32
Autres notions Java
Les exceptions : capturer et attraperLes exceptions : capturer et attraper
public class Forme{public static void main(String[] args) {int a = 3;int b = 0;try {System.out.println("résultat = " + (i / j));}catch (Exception e) {}
Les flux de caractèresLes flux de caractèresExemple : lecture à partir d’un fichier et écriture dans un autre :
class Test {class Test {public static void main(String[] argv) {try {FileInputStream = new FileInputStream("a_lire.txt");FileOutStream out = new FileOutStream("a_ecrire.txt");
int c;while ((c = in.read()) != -1) {
out.write(c);} Quelle est la différence entre ce programme
A. U. : 09-10 S. ElkosantiniS. Elkosantini 140
}in.close();
out.close();} catch (Exception e) {
System.out.println("Intercepté : " + e);}
}}
Quelle est la différence entre ce programme et le programme précédent ?
36
Autres notions Java
Les fichiersLes fichiersLa classe File permet de gérer l’accès aux fichiers et aux répertoires.
Un répertoire est géré aussi comme un fichier.
La classe File appartient au package java.io.
File monFichier = new File("Note.txt");Déclaration :
Il s’agit de la création de l’objet File et non du fichier physique.
A. U. : 09-10 S. ElkosantiniS. Elkosantini 141
du fichier physique.
monFichier.createNewFile();
Création du fichier portant le nom Note.txt.
Autres notions Java
Les fichiersLes fichiersQuelques méthodes :
boolean canRead() : vérifie si le fichier peut être lu
boolean canWrite() : vérifie si le fichier peut modifié
boolean delete() : supprime le fichier ou le répertoire
String getPath() : renvoie le chemin du fichier ou du répertoire
String[] list() : renvoie la liste des fichiers et des répertoires contenu dans le
A. U. : 09-10 S. ElkosantiniS. Elkosantini 142
réportoire
Il ne faut pas confondre les classes FileReader et FileInputStream et la classe
chemin vers le répertoire père : getParent()/getParentFile()
isDirectory() teste si un fichier est un répertoire
Plan
Chapitre 1 : IntroductionChapitre 2 : Les premiers pas en JavaChapitre 3 : POO avec JavaChapitre 4 : Autres notions Java Chapitre 5 : Connexion aux bases de donnéesChapitre 6 Interfaces graphiq es a ec Ja a
A. U. : 09-10 S. ElkosantiniS. Elkosantini 144
Chapitre 6 : Interfaces graphiques avec Java
37
Connexion aux bases de données
IntroductionIntroduction
Utilisation de l ’API JDBC pour les bases de données : p
JDBC pour Java DataBase Connectivity
API permet à des applications Java d'accéder à des bases de
données relationnelles quelconques
L ’API Fournit un ensemble de classes et d ’interfaces permettant
l’utilisation sur le réseau d’un ou plusieurs SGBD à partir d’un
A. U. : 09-10 S. ElkosantiniS. Elkosantini 145
l utilisation sur le réseau d un ou plusieurs SGBD à partir d un
programme Java.
Connexion aux bases de données
Le piloteLe pilote
BDJDBC
OracleMysqlSQLServerSybaseInformixDB2
Driver spécifique pour chaque
SGBD
C i l l é i i
A. U. : 09-10 S. ElkosantiniS. Elkosantini 146
Contient toutes les classes nécessaire pour communiquer avec
une base de données
Tous les drivers :
http://developers.sun.com/product/jdbc/drivers
Connexion aux bases de données
Architecture JDBCArchitecture JDBC
A. U. : 09-10 S. ElkosantiniS. Elkosantini 147
Connexion aux bases de données
Les étapes principalesLes étapes principales
Importer le package
java.sql
Charger le driver JDBC
Etablir la connexion à la
base de données
Créer une zone de description d’une requête
A. U. : 09-10 S. ElkosantiniS. Elkosantini 148
Exécuter la requête
Traiter les données
retournées
Fermer les différents
connexions
38
Connexion aux bases de données
JDBCJDBC
Charger le driver JDBC :
Importer le package
java sql
charger le driver JDBCCharger le driver JDBC :
Utilisation de la méthode forName de la classe Class• Oracle :
Class.forName("oracle.jdbc.driver.OracleDriver");• SQL Server 2000:
Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver");• Pont ODBC-JDBC
Class forName("sun jdbc odbc JdbcOdbcDriver");
java.sql
A. U. : 09-10 S. ElkosantiniS. Elkosantini 149
Class.forName( sun.jdbc.odbc.JdbcOdbcDriver );
Connexion aux bases de données
JDBCJDBC
Charger le driver JDBC :
Importer le package
java sql
charger le driver JDBCCharger le driver JDBC :
Utilisation de la méthode forName de la classe Class
Quand une classe Driver est chargée, elle doit créer une instance
d ’elle même et s ’enregistrer auprès du DriverManager
Certains compilateurs refusent cette notation et demande plutôt :
java.sql
A. U. : 09-10 S. ElkosantiniS. Elkosantini 150
try{
Class.forName (" driver_name ").newInstance();}
catch (ClassNotFoundException a) {System.out.println ("Driver non trouve");}
Connexion aux bases de données
JDBCJDBC
Etablir la connexion à la base de données :
Importer le package
java.sql
Charger le driver JDBC
Etablir la connexion à la
base de données
Etablir la connexion à la base de données :
Pour établir la connexion avec un SGBD, il faut préciser :
l ’URL de la base de données : jdbc:<sous-protocole>:<nom-BD>
Ch catch (ClassNotFoundException a) { System.out.println ("Driver non trouve"); }catch (Exception b) { System.out.println ("Probleme sur chargement de driver JDBC"); }
try{conn = DriverManager.getConnection ("jdbc:mysql://127.0.0.1/cbr", "root", "mysql");stmt = conn.createStatement(); }catch (SQLException c) { System.out.println ("Connexion refuse ou base inconnu "+c); }catch (Exception d) { System.out.println ("Probleme sur connexion");}
try{String req= "SELECT nom FROM Etudiant ";
Charger le pilote
Connexion
A. U. : 09-10 S. ElkosantiniS. Elkosantini 161
try{String req= SELECT nom FROM Etudiant ;ResultSet rs = stmt .executeQuery(req);while(rs.next()) {
System .out.println(rs.getString(" nom"));}catch (SQLException c) { System.out.println (« problème SQL"+c); }
rs.close(); stmt .close(); conn.close();
Préparer, exécuter et traiter la requête
Fermer la connexion
Plan
Chapitre 1 : IntroductionChapitre 2 : Les premiers pas en JavaChapitre 3 : POO avec JavaChapitre 4 : Autres notions Java Chapitre 5 : Connexion aux bases de donnéesChapitre 6 Interfaces graphiq es a ec Ja a
A. U. : 09-10 S. ElkosantiniS. Elkosantini 162
Chapitre 6 : Interfaces graphiques avec Java
Interfaces graphiques avec Java
IntroductionIntroductionJava gère aussi les interfaces graphiques,
Fenêtres graphiques : menu, barre d’outils, boutons, zone texte, etc.
Gestion de la souris
Gestion du clavier
Java offre deux bibliothèques principales pour les interfaces
graphiques :
A. U. : 09-10 S. ElkosantiniS. Elkosantini 163
La bibliothèque java.awt : le début du graphique avec Java. Disponible
depuis Java 1.1
La bibliothèque javax.swing : plus léger que awt et donc moins de
ressource mémoire. Disponible depuis Java 2, améliore et étend les
possibilités de AWT.
Interfaces graphiques avec Java
ExempleExempleJMenubar
JTabbedPaneJTree JFrame
A. U. : 09-10 S. ElkosantiniS. Elkosantini 164
JScrollPane JFileChooser
42
Interfaces graphiques avec Java
Architecture d’un objet swingArchitecture d’un objet swing
Un objet swing est constitué principalement de :
Un composant mère, appelé aussi le composant top-level.
Des composants conteneurs intermédiaires,
Des composants élémentaires,
Que veut dire un composant en Java ?
A. U. : 09-10 S. ElkosantiniS. Elkosantini 165
JComponentgetBorder()
getGraphics()print()
repaint()setVisible()
…
Interfaces graphiques avec Java
La classe La classe JComponentJComponent
C’est la classe de base de tout composants swing sauf le composant
top-level :
Tous les composants Swing héritent de la classe Jcomponent.
Les composants ont des Tool Tips.
Les composants ont des bordures.JComponent
A. U. : 09-10 S. ElkosantiniS. Elkosantini 166
JMenuBar JProgressBar JScrollPane
Interfaces graphiques avec Java
… et pour le composant top… et pour le composant top--levellevel
Les composants top-level ne sont pas des classes JComponant.
La bibliothèque swing propose trois composants top level :
JFrame, JDialog et JApplet
Les composants top-level possèdent un « content pane » qui contient
tous les composants visibles d’un top-level.
U t t l l t t i b d
A. U. : 09-10 S. ElkosantiniS. Elkosantini 167
Un composant top-level peut contenir une barre de menu
Interfaces graphiques avec Java
Un exemple :Un exemple : JFrame
JMenuBar
Top-level
Composant conteneurfe
nêtr
e
JLabel
conteneur
s co
mpo
sant
s de
la f
A. U. : 09-10 S. ElkosantiniS. Elkosantini 168
ContentPane
JProgressBar Composants élémentairesLes
diff
éren
ts
43
Interfaces graphiques avec Java
Les composants topLes composants top--levellevel : : JFrameJFrame
Un composant graphique de type JFrame est une fenêtre contenant
une barre de titre, une bordure, trois boutons (minimiser, agrandir
et fermer) et le content pane qui contiendra tout les composants
élémentaires.
A. U. : 09-10 S. ElkosantiniS. Elkosantini 169
JFramesetTitle()
getMenuBar()getContainPane()
setJMenuBar(JMenuBar m)remove()
…
Un aperçu de la classe JFrame :
Interfaces graphiques avec Java
Les composants topLes composants top--levellevel : : JFrameJFrame
Code Java :
JFrame fenetre = new JFrame ();fenetre.setTitle("Comopsant JFrame");fenetre.setSize(250,150);fenetre.setVisible(true);
J
Ou aussi :
A. U. : 09-10 S. ElkosantiniS. Elkosantini 170
JFrame fenetre = new JFrame ("Comopsant JFrame");
Interfaces graphiques avec Java
Les composants topLes composants top--levellevel : : JFrameJFrame
ou aussi créer une classe qui hérite de la classe JFrame:
public class Fenetre extends JFrame {Fenetre() {
this.setTitle("Composant JFrame version 2");this.setVisible(true);
}
}D l i t l l’i t i l l F t t
A. U. : 09-10 S. ElkosantiniS. Elkosantini 171
Dans le main, on peut par exemple, l’instancier la classe Fenetre et changer sa taille :
public static void main(String[] args) {……..
}
Interfaces graphiques avec Java
Les composants topLes composants top--levellevel : : JFrameJFrame
Changement de l’icône de la fenêtre
ImageIcon image = new ImageIcon(« image.gif");fenetre.setIconImage(image.getImage());
Position de la fenêtre dans l’écran
fenetre.setLocation (20,50);
x
y
A. U. : 09-10 S. ElkosantiniS. Elkosantini 172
yCentrer la fenêtre dans l’écran
Dimension dim = Toolkit.getDefaultToolkit().getScreenSize();fenetre.setLocation(dim.width/2 - f.getWidth()/2, dim.height/2 - f.getHeight()/2);
44
Interfaces graphiques avec Java
Les composants topLes composants top--levellevel : : JDialogJDialog
C’est la classe principale permettant de créer des boites de
dialogues.
Utilisable pour créer des boites de dialogues personnalisées ou pour
utiliser celles qui sont déjà définies en utilisant la classe
JOptionPane.
Comme JFrame JDialog contient un conteneur principale (content
A. U. : 09-10 S. ElkosantiniS. Elkosantini 173
Comme JFrame, JDialog contient un conteneur principale (content
pane) qui doit regrouper tout les autres composant élémentaires.
Boite de dialogue prédéfinie avec la classe JOptionPane
Interfaces graphiques avec Java
Les composants topLes composants top--levellevel : : JDialogJDialog
Code Java :
JDialog dialogue = new JDialog();dialogue.setTitle("Ceci est une boite de dialogue");dialogue.setSize(250,150);dialogue.setVisible(true);
J
ou aussi créer une classe qui hérite de la classe :
A. U. : 09-10 S. ElkosantiniS. Elkosantini 174
ou aussi créer une classe qui hérite de la classe … :
……….…….
Interfaces graphiques avec Java
Les composants topLes composants top--levellevel : : JAppletJApplet
Une applet est un programme Java s'exécutant sur une page WEB.
Le recours aux applets est l’un des moyens de dynamiser le HTML.
Les applets sont créées à partir d'une classe Java JAppelet.
Contrairement au JFrame et Jdialog, le composant top-level Japplet
est destiné pour créer des interfaces graphiques dans les pages web.
A. U. : 09-10 S. ElkosantiniS. Elkosantini 175
Une fois l’applet est créer en Java et compilée, elle doit être insérée
dans une page HTML.Exemple
Interfaces graphiques avec Java
Les composants topLes composants top--levellevel : : JAppletJApplet
Code Java :
public class Exemple extends JApplet{JLabel helloLabel = new JLabel ("Bonjour, vous me voyez ?");JButton b= new JButton ("OK");
// Méthode appelée par le navigateur lorsque l'applet est chargée public void init (){