Vous êtes sur la page 1sur 225

Module

Leçon 4.1. : Génie


n°1: Concepts Logiciel par
de la Programmation Objet
Objets

4.1.1. Concept et Développement Objet

Concept et
Développement Objet
en Java

Programmation Objet en Java  Prof A. El Faker - 2009


Leçon n°1: Concepts de la Programmation par Objets

Objectifs du cours

 Du procédural à l’objet
 Conception par Objet des applications

 Programmation Objet en Java

 Nous aborderons
 Étude des principaux Outils de la plateforme J2SE
 Bibliothèques de classes

 Mais pas de développement Web J2EE

Programmation Objet en Java  Prof A. El Faker - 2009


Leçon n°1: Concepts de la Programmation par Objets

Plan de la leçon

 Paradigmes de programmation

 Concepts Objets

Programmation Objet en Java  Prof A. El Faker - 2009


Leçon n°1: Concepts de la Programmation par Objets

Paradigmes
de
programmation

Programmation Objet en Java  Prof A. El Faker - 2009


Leçon n°1: Concepts de la Programmation par Objets

Programmation structurée
 Fortran, Cobol
 Maintenance très difficile

Besoin de structurer
 Pascal, C (Equation de Niclauss Wirth )

Exactitude /à la spécification
Modifiabilité

Programmation Objet en Java  Prof A. El Faker - 2009


Leçon n°1: Concepts de la Programmation par Objets

Programmation modulaire
Module : Données (privées)+ Procédures
premier dernier
v
servir() File d’attente arriver()

Module/Fichier
static client v[100]; //privée (locale)
static int premier, dernier;

void arriver(client
arriver x){
if(! filePleine()) { dernier++; v[dernier]=x;}
}
int servir(){/*
servir … */}

Programmation Objet en Java  Prof A. El Faker - 2009


Leçon n°1: Concepts de la Programmation par Objets

Programmation modulaire
Accès à travers une interface

Représentation en liste chaînée ?


premier dernier

/
nouv
static client * premier, dernier;

void arriver(client
arriver * nouv){
nouv -> suivant = dernier;
dernier = nouveau;
}
Programmation Objet en Java  Prof A. El Faker - 2009
Leçon n°1: Concepts de la Programmation par Objets

Abstraction des données


On passe du module au Type

FileAttente
- premier Propriétés
- dernier

+ arriver()
+ servir()
+ filePleine() Méthodes

Programmation Objet en Java  Prof A. El Faker - 2009


Leçon n°1: Concepts de la Programmation par Objets

Abstraction des données


Exemple (TDA : Figure)
enum Nature {cercle,triangle,rectangle}
class Figure {
private : Point centre;
Couleur coul;
Nature nat; Figure
public : - centre
Point position() { - coul
- nat
return centre;
} + position()
+ afficher()
void afficher(int);
+ surface()
float surface();
}
Programmation Objet en Java  Prof A. El Faker - 2009
Leçon n°1: Concepts de la Programmation par Objets

Abstraction des données

Type utilisateur (moule)


Boite noire
Il faut "connaître" la nature
float surface() {
switch ( nat ) { Figure
case Cercle : - centre
/* code spécifique */ - coul
case Triangle : - nat
/* code spécifique */ + position()
case Rectangle: + afficher()
/* code spécifique */ + surface()
}
}
Programmation Objet en Java  Prof A. El Faker - 2009
Leçon n°1: Concepts de la Programmation par Objets

Paradigme Objet
On ajoute la notion d’héritage

 D’abord Propriétés générales


abstract class Figure { Figure
private Point centre; - centre
private Couleur couleur; - coul
public Point position() { + position()
+ afficher()
return centre; }
+ surface()

public abstract void afficher();


public abstract float surface();
}
Programmation Objet en Java  Prof A. El Faker - 2009
Leçon n°1: Concepts de la Programmation par Objets

Paradigme Objet
On ajoute la notion d’héritage

 Ensuite propriétés particulières


class Rectangle extends Figure {
private int longueur, largeur;
float surface() {
return longueur*largeur;}
}
Figure

Rectangle Cercle Triangle

Programmation Objet en Java  Prof A. El Faker - 2009


Leçon n°1: Concepts de la Programmation par Objets

Paradigme Objet

Résumé
 Décider quelles Procédures :
Meilleurs algorithmes
 Décider quels Modules :
Masquer les données

 Décider quels Types :


Ensemble complet d’opérations

 Décider quelles Classes :


Expliciter les propriétés communes à
de l'héritage
Programmation Objet en Java  Prof A. El Faker - 2009
Leçon n°1: Concepts de la Programmation par Objets

Paradigme Objet

Intérêt

 Réduction du coût de développement


Par Réutilisation du Code

 Réduction du coût de maintenance


Réduction des dépendances entre
classes

Programmation Objet en Java  Prof A. El Faker - 2009


Leçon n°1: Concepts de la Programmation par Objets

Démarche
Objet

Programmation Objet en Java  Prof A. El Faker - 2009


Leçon n°1: Concepts de la Programmation par Objets

Démarche Objet

1 De quoi parle-
parle-t-on ?
 Simuler un carrefour
 Rues, Feux
 Véhicules, Piétons, Accidents
 Embouteillages, Manifestations

2 Que veut-
veut-on faire ?

 Ouvrir() une porte


 La porte s’ouvre (être vivant)
 Porte d’Ali Baba :
Double battants
Coulissante, à relever
Programmation Objet en Java  Prof A. El Faker - 2009
Leçon n°1: Concepts de la Programmation par Objets

Démarche Objet

Application Procédurale Application Objet

Données

procédure 1
procédure 2
procédure n

Programmation Objet en Java  Prof A. El Faker - 2009


Leçon n°1: Concepts de la Programmation par Objets

Concepts Objet

Concepts de base Application Objet

Classe
Objet
Instanciation
Envoi de messages
Héritage
Polymorphisme
Liaison dynamique
Programmation Objet en Java  Prof A. El Faker - 2009
Leçon n°1: Concepts de la Programmation par Objets

Classes et Objets

Compte Agence
Champs Classe Champs
débit,crédit comptes
Méthodes
Description Méthodes
déposer() ouvrir()
retirer() déposer()
avoirSolde() retirer()
avoirSolde()
Instanciation

cl1 cl2 agHass


4500 7500 Objet cl1
8200 1200 cl2
Représentation
Programmation Objet en Java  Prof A. El Faker - 2009
Leçon n°1: Concepts de la Programmation par Objets

Héritage
Article
Simple référence, désignation
prixHT, quantité
Super classe
prixTransport()
prixTTC()
Sous classe Classe dérivée

Luxe Fragile Vétement


Coloris, taille
prixTTC() prixTransport()
Chemise
typeCol,
typemanche
Programmation Objet en Java  Prof A. El Faker - 2009
Leçon n°1: Concepts de la Programmation par Objets

Héritage

Multiple Article

Perissable Fragile
prixTransport() prixTransport()

Problème 1
Oeufs
Conflit de nommage
 Quel est le prix de transport des œufs ?
Programmation Objet en Java  Prof A. El Faker - 2009
Leçon n°1: Concepts de la Programmation par Objets

Héritage

Multiple Article
prixHT, quantité

Perissable Fragile
prixTransport() prixTransport()

Problème 2

Redondance de données Oeufs


prixHT,quantité
 Deux prixHT, quantité prixHT,quantité

Programmation Objet en Java  Prof A. El Faker - 2009


Leçon n°1: Concepts de la Programmation par Objets

Héritage
Composition Avion
Bibliothèque

Aile
Document Association
Chat

posséder
Livre
? Genre
Chat noir
Héritage

Programmation Objet en Java  Prof A. El Faker - 2009


Leçon n°1: Concepts de la Programmation par Objets

Association
 Relation quelconque entre 2 objets
Guichet Automatique de Banque

GAB CompteBancaire
Uses >

0..* 1

Cardinalité
 Pour un Compte bancaire, il peut avoir
zéro ou plusieurs GAB (concurrents)

Programmation Objet en Java  Prof A. El Faker - 2009


Leçon n°1: Concepts de la Programmation par Objets

Agrégation (simple)
 Association avec relation de possession
« is part of »

Société Département

 Clarifie si une partie peut exister sans l’ensemble


 Aide à identifier le créateur de l’objet
 Meilleur encapsulation (partie dans l’ensemble)

Programmation Objet en Java  Prof A. El Faker - 2009


Leçon n°1: Concepts de la Programmation par Objets

Composition
 Agrégation mais avec une relation plus
forte

 Les parties vivent et meurent avec l’ensemble

Moteur Piston

Polygone Point
1 1..*

Programmation Objet en Java  Prof A. El Faker - 2009


Leçon n°1: Concepts de la Programmation par Objets

Associations
 Les 3 en même temps

GAB CompteBancaire
Uses >

Association

Société Département

Agrégation
Polygone Point
1 1..*

Composition
Programmation Objet en Java  Prof A. El Faker - 2009
Leçon n°1: Concepts de la Programmation par Objets

Polymorphisme
Polymorphisme d’héritage
Figure
centre, couleur
position()
périmètre()
afficher()

Rectangle Cercle Triangle

périmètre() périmètre() périmètre()

Programmation Objet en Java  Prof A. El Faker - 2009


Leçon n°1: Concepts de la Programmation par Objets

Polymorphisme
Exemple Figure
centre, couleur
position()
périmètre()
afficher()

Rectangle Cercle Triangle

périmètre() périmètre() périmètre()

tab class tag length 0 1 2 3 4 5


Figure[]
6

Programmation Objet en Java  Prof A. El Faker - 2009


Leçon n°1: Concepts de la Programmation par Objets

Polymorphisme
Exemple
Périmètre
class Périmètre {
float périmètre( Figure tab[]) {
for(i=0; i<tab.length; i++)
s = s+ tab[i].périmètre() ;
return s;
}
}
tab class tag length 0 1 2 3 4 5
Figure[]
6

Programmation Objet en Java  Prof A. El Faker - 2009


Leçon n°1: Concepts de la Programmation par Objets

Liaison dynamique

 Mise en œuvre du polymorphisme

Code lié à la méthode à l’exécution

 Méthodes virtuelles

C++, Eiffel, Java

Programmation Objet en Java  Prof A. El Faker - 2009


Leçon n°1: Concepts de la Programmation par Objets

Les langages à objet


LOO

Langage Statique Langage Dynamique

Typage= fort Typage= faible


Liaison statique= oui Liaison statique= non
Liaison dynamique= méthodes Liaison dynamique= oui
virtuelles Usage = prototypage, simulation
Usage = applications finies graphisme

Simula Eiffel C++ Java SmallTalk CLOS LOOPS


1960 1980 1983 1995 1980 1980 1983

Programmation Objet en Java  Prof A. El Faker - 2009


Module
Leçon 4.1. : Génie
n°1: Concepts Logiciel par
de la Programmation Objet
Objets

4.1.1. Concept et Développement Objet

Concept et
Développement Objet
en Java

Programmation Objet en Java  Prof A. El Faker - 2009


Module Leçon
4.1. :n°Génie
2 ClassesLogiciel
et objets Objet

4.1.1. Concept et Développement Objet

Concept et
Développement Objet
en Java

Programmation Objet en Java  Prof A. El Faker - 2008


Leçon n°2 Classes et objets

Plan de la leçon

 Historique

 Plate-forme Java

 Classes Java

 Objets Java

 Méthodes Java

Programmation Objet en Java  Prof A. El Faker - 2008


Leçon n°2 Classes et objets

Historique

Programmation Objet en Java  Prof A. El Faker - 2008


Leçon n°2 Classes et objets

Historique

1995 Essor de Java

Internet assure la promotion


 Programmes peu encombrants
 Téléchargement rapide

 Programmes portables
 Windows, Macintosh, Unix

Programmation Objet en Java  Prof A. El Faker - 2008


Leçon n°2 Classes et objets

Historique

2007 Essor de Java

Premier langage enseigné

 Richesse fonctionnelle + Rigueur

Programmation Objet en Java  Prof A. El Faker - 2008


Leçon n°2 Classes et objets

Plate--forme Java
Plate

Programmation Objet en Java  Prof A. El Faker - 2008


Leçon n°2 Classes et objets

Plate-forme Java

Développer une application consiste à bien


choisir les classes/packages à utiliser
Programmation Objet en Java  Prof A. El Faker - 2008
Leçon n°2 Classes et objets

Plate-forme Java

La machine virtuelle pour la portabilité

 La JVM génère du byte-code

_______ Pentium
_______
_____ _____ 0111011010101
javac _______ java
_______ ______
______ PowerPC PowerPC

Code source Byte-code


Sparc
Programmation Objet en Java  Prof A. El Faker - 2008
Leçon n°2 Classes et objets

Plate-forme Java

La machine virtuelle s’occupe du :


 Chargement des bytes-codes
 Analyse et contrôle le code chargé
(pas de violation d’accès)
 Sécurité (pointeurs, interdit l’accès
aux périphériques pour les applets)

 Gestion de la mémoire

JRE
Programmation Objet en Java  Prof A. El Faker - 2008
Leçon n°2 Classes et objets

Classes Java

Programmation Objet en Java  Prof A. El Faker - 2008


Leçon n°2 Classes et objets

Classes Java

Package  Regroupement logique


des classes et interfaces
Compte.java
package ma.ensias.banque;
Relation d’amitié
import java.util.Date; entre classes
public class Compte {
private int code; import java.util.*

private String nom;


private double solde;
private Date ouvert;
}
Programmation Objet en Java  Prof A. El Faker - 2008
Leçon n°2 Classes et objets

Classes Java

Tout est classe


Test.java
import java.util.Random;
public class Test {
public static void main(String[] args) {
for (int i = 0; i < 20; i++) {
Random r = new Random();
System.out.print(r.nextInt(100)+" ");
}
return;
}
}

Programmation Objet en Java  Prof A. El Faker - 2008


Leçon n°2 Classes et objets

Classes Java

Tout est classe A part les types primitifs

int double


java.lang.Integer java.lang.Double

Wrappers
Classes d’emballage

Integer obj = new Integer (10);


int i = obj.intValue();

Programmation Objet en Java  Prof A. El Faker - 2008


Leçon n°2 Classes et objets

Classes Java
Compte.java
public class Compte {
private int code; Conventions de Nommage
private String nom;
private double solde;
public int getSolde(){return solde; }
public void deposer(double montant) {
solde += montant;
} Compte
Champs/Variables
public : Accessible par tout le monde
} abstract : Ne peut être instanciée code,nom,solde
Méthodes
final : Ne peut être héritée deposer()
<défaut> Accessible par les classes retirer()
du package getSolde()

Programmation Objet en Java  Prof A. El Faker - 2008


Leçon n°2 Classes et objets

Classes Java
Compte.java
public class Compte { public: visible partout
private int code; private: classe
private String nom; protected: sous-classes/package
private double solde; final : Ne peut être modifié
public int getSolde(){return solde; }
public void deposer(double montant) {
solde += montant;
}
}
public class Test {
void access_methode(){
Compte compte = new Compte();
compte.code = 1289; // illegal
}
}
Programmation Objet en Java  Prof A. El Faker - 2008
Leçon n°2 Classes et objets

Classes Java

Classe ou Méthode Variable Variable Classe


interface membre membre locale interne
Abstract X X X
final X X X X X
native X
private X X X
protected X X X
public X X X X
static X X X
synchronized X
transient X
volatile X
Programmation Objet en Java  Prof A. El Faker - 2008
Leçon n°2 Classes et objets

Programmation Objet en Java  Prof A. El Faker - 2008


Leçon n°2 Classes et objets

Objets Java
Instanciation  Appel d’un constructeur
Compte obj = new Compte (“Rochdi”);

Compte.java
public class Compte {
private int code;
private String nom;
private double solde;
public Compte(String nom){
this.nom = nom; this.solde=0.0;
}
Allocation mémoire
...
Initialisations
}
Programmation Objet en Java  Prof A. El Faker - 2008
Leçon n°2 Classes et objets

Objets Java
Instanciation  en 3 temps
Compte obj = new Compte (“Rochdi”);

1. Déclarer l’objet obj

2. Créer l’instance
Opérateur new appliqué à un
constructeur de la classe
3. Affecter la référence

Le constructeur est appelé au moment de


la création et pas ailleurs
Programmation Objet en Java  Prof A. El Faker - 2008
Leçon n°2 Classes et objets

Objets Java

Instanciation  Plusieurs constructeurs possibles


Compte.java
public class Compte {
private int code; Objet receveur du
message !!
private String nom;
private double solde;
public Compte(){
this.nom = null; this.solde=0.0;}
public Compte(String nom){
this.nom = nom; this.solde=0.0;}
} A partir du moment ou vous déclarez un
constructeur, celui par défaut n’existe plus
Programmation Objet en Java  Prof A. El Faker - 2008
Leçon n°2 Classes et objets

Objets Java

Instanciation  this is not this()


Compte.java
public class Compte {
private int code; Constructeur de la
private String nom; classe en cours
private double solde;
public Compte(String nom, double soldeI){
this(nom);this.solde = soldeI;}
public Compte(){
this.nom = null; this.solde=0.0;}
public Compte(String nom){
this.nom = nom; this.solde=0.0;}
}
Programmation Objet en Java  Prof A. El Faker - 2008
Leçon n°2 Classes et objets

Objets Java

Instanciation  Conséquence Affectation

1 x et y de type primitif
!= == ???

x 10 y=x
x 10 y

2 a et b des objets
a b=a
a a b

Programmation Objet en Java  Prof A. El Faker - 2008


Leçon n°2 Classes et objets

Objets Java

Instanciation  Conséquence Affectation

a b Clonage
xxxxxxx xxxxxxx
b=a.clone()

A.java
public class A implements Cloneable {
private int xy;

// clone peut generer une exception CloneNotSupportedException


public Object clone() throws CloneNotSupportedException{
return super.clone(); // à modifier
}
}
Programmation Objet en Java  Prof A. El Faker - 2008
Leçon n°2 Classes et objets

Objets Java
Variables d’instance
Chaque objet à ses propres valeurs
Compte.java
public class Compte {
private int code;
private String nom;
private double solde;
// ...
}
c1
code = 213
nom = "Rochdi"
solde = 2500.0

Programmation Objet en Java  Prof A. El Faker - 2008


Leçon n°2 Classes et objets

Objets Java
Variables de classe
Chaque objet possède la même référence
Compte.java
public class Compte {
private int code;
private String nom;
private double solde;
static private int nbComptes;
// ...
} c1 c2
code = 213 code = 214
nom = "Rochdi" nom = "Rochdi"
solde = 2500.0 solde = 2500.0
nbComptes= nbComptes=
215
Programmation Objet en Java  Prof A. El Faker - 2008
Leçon n°2 Classes et objets

Méthodes en Java

Programmation Objet en Java  Prof A. El Faker - 2008


Leçon n°2 Classes et objets

Méthodes d’accès

Contrôler l’accès aux variables

 getPropriété()
Accéder en lecture seule

 setPropriété()
Contrôler la validité de la valeur affectée

Programmation Objet en Java  Prof A. El Faker - 2008


Leçon n°2 Classes et objets

Méthodes d’accès
public class Person {
String nom;
private int age ;
public int getAge(){ return age; }
public void setAge(int a) throws Exception {
if (a < 0 || a > 120)
throw new Exception( "Age " + a + " est invalide ");
age = a ;
}
public static void main(String args[]){
Person p = new Person(); Age = 130
//
p.age = 130 ;
System.out.println(" Age = "+ p.age);
Age = 130
//
Age 140 est invalide
try {
Age = 130
p.setAge(140);
} catch(Exception e){ System.out.println(e.getMessage());}
System.out.println(" Age = " + p.age );
}
}Programmation Objet en Java  Prof A. El Faker - 2008
Leçon n°2 Classes et objets

Affichage
public class Person {
private String nom; private int age;
private boolean marié;
Person obj=new Person(“Abbadi”,35);
private int nbEnfants;

System.out.println(obj);
/**
* Conversion en chaine de caracteres pour l'affichage.
* @return Person converti en chaine de caracteres
*/
public String toString() {
String s = "\"" + nom + "\" " + age ;
if (marié)
s += "(marié " + nbEnfants + " enfants ") ;
return s;
}
}
Programmation Objet en Java  Prof A. El Faker - 2008
Leçon n°2 Classes et objets

Egalité entre objets


Person.java
public class Person {
public String nom; private int age;

public boolean equals(Person p) {


return (this.nom.equals(p.nom)
&&
age == p.age
);
}
} this p

nom nom

Programmation Objet en Java  Prof A. El Faker - 2008


Leçon n°2 Classes et objets

Egalité entre objets


Person.java
public class Person {
public String nom; private int age;
public boolean equals(Object obj) {
if (obj == null) return false;
if (this == obj) return true;
if(!(obj instanceof Person)) return false;

Person p = (Person) obj;


return (nom.equals(p.nom) && age == p.age);
}
} this obj
Person
nom
Employee
nom

Programmation Objet en Java  Prof A. El Faker - 2008


Leçon n°2 Classes et objets

Méthodes statiques

public class Compte {


static private int nbComptes =0;
private int code;
Color.RED
private String nom;
private double solde;
Math.random()
public Compte(String nom){
this.nom = nom; this.solde=0.0;
code = nbComptes++;
}
public static void main(String args[]){
for(int i=0; i<10 ; i++){
Compte obj = new Compte();
System.out.println(obj.nbComptes + “Comptes créés”;
}
System.out.println(Compte.nbComptes + “instances” );
}
Pas nécessaire d’instancier
}
Programmation Objet en Java  Prof A. El Faker - 2008
Leçon n°2 Classes et objets

Passage de paramètres

 Par valeur
int, float, …

 Par référence
Objets

Programmation Objet en Java  Prof A. El Faker - 2008


Leçon n°2 Classes et objets

Passage de paramètres
public class Increment {
private static void incr(int v) { v+=2; }
private static void incr(int t[]) {
for(int i=0; i<t.length ; i++) t[i]+=2; }

public static void main(String args[]){


int [] tab = new int[2]; int val=0;

incr(val);
System.out.println(“val=“ + val); val=0
incr(tab);
System.out.println("tab ="); tab=
for(int i=0; i<tab.length ; i++) 2
System.out.println(tab[i]); 2
}}

Programmation Objet en Java  Prof A. El Faker - 2008


Leçon n°2 Classes et objets

Programmation
Objet en java

Programmation Objet en Java  Prof A. El Faker - 2008


Leçon n°3: Héritage et spécialisation

Programmation
Objet en java

Programmation Objet en Java  Prof A. El Faker - 2010


Leçon n°3: Héritage et spécialisation

Plan de la leçon

 Héritage en Java
 Héritage et polymorphisme

 Interfaces en Java
 Associations en Java

Programmation Objet en Java  Prof A. El Faker - 2010


Leçon n°3: Héritage et spécialisation

Héritage en Java

Réutilisation de code et Sous-typage

Programmation Objet en Java  Prof A. El Faker - 2010


Leçon n°3: Héritage et spécialisation

Héritage (rappel)

 Définir une classe D à partir d’une


B
classe existante B
 D est une sous-classe de B
 Evite la redondance (codes de D1 et D2 D
se répètent)
 Permet d’obtenir des classes qui
correspondent à 100% aux besoins

 D peut comprendre plus de messages que B


 D peut définir ses propres versions des méthodes
qui sont définies dans B

Programmation Objet en Java  Prof A. El Faker - 2010


Leçon n°3: Héritage et spécialisation

Réutiliser le code

 Méthode héritée B
méthode1()--réutilisée + variables
+ methode1()
+ methode2()
 Méthode redéfinie
méthode2() --adaptée
Polymorphisme d’héritage

 Attention : D
Méthode surchargée
+ autresVariables

méthode3() + methode2()
+ methode3(int)
Polymorphisme paramétrique + methode3(int, String)

Programmation Objet en Java  Prof A. El Faker - 2010


Leçon n°3: Héritage et spécialisation

Réutiliser le code

 Toute classe hérite directement Object


ou indirectement de Object
+ equals()
 Les objets peuvent invoquer les + getClass()
+ notify()
méthodes privées ou protégées + wait()
+ toString()
de la classe Object
 Héritage : Outil important
 de réutilisation de code et de Compte
+ solde
l’expérience
+ getSolde()
 de développement + déposer(double)
+ retirer(double)
+ toString()
Programmation Objet en Java  Prof A. El Faker - 2010
Leçon n°3: Héritage et spécialisation

Réutiliser le code
 Les sous-classes partagent : Compte
 Infos sur le compte + solde, nom, code

solde, nom, code + getSolde()


+ déposer()
 Méthodes communes + retirer()
+ toString()
getSolde()
toString()
Méthodes redéfinies:
déposer()
CompteCourant CompteEpargne
retirer() + découvertAutorisé + tauxIntérêt
+ retirer() + déposer()
+ setDécouAut(double) + setTaux (double)

Programmation Objet en Java  Prof A. El Faker - 2010


Leçon n°3: Héritage et spécialisation
public class Compte{ Compte
String nom; int code; double solde; + solde, nom
+ code

public void deposer (final double montant){ ++ getSolde()déposer()


this.solde += montant; + retirer()
+ toString()
}
public
public boolean
class retirer (double
CompteCourant extendsmontant){
Compte{
if(solde > montant){ solde -= montant; CompteCourant
solde, nom et code sont définies implicitement
return(true); + découvertAutorisé
}
double découvertAutorisé;
else{ return(false);} + retirer()
+ setDécouAut(double)
getSolde(), déposer() implicitement définies
}
public boolean retirer (double montant){
} double s = getSolde()+ découvertAutorisé;
if(s > montant){
setSolde(solde – montant);
return(true);
}
else{ return(false);}
}
}
Programmation Objet en Java  Prof A. El Faker - 2010
Leçon n°3: Héritage et spécialisation
public class Compte{ Compte
String nom; int code; double solde; + solde, nom
+ code
+ getSolde()
public Compte(String nom) { + déposer()
this(nom,0.0); + retirer()
+ toString()
}
public Compte(String nom, double solde){
this.solde = solde; this.nom = nom; CompteCourant
} + découvertAutorisé

} Les constructeurs ne sont pas hérités


 + retirer()
+ setDécouAut(double)

public class CompteCourant extends Compte{


double découvertAutorisé;

public CompteCourant(double découvertAutorisé) {


super(null, 0.0);
this.découvertAutorisé=découvertAutorisé;
}

 On invoque le constructeur de la super-classe Pourquoi ?


Programmation Objet en Java  Prof A. El Faker - 2010
Leçon n°3: Héritage et spécialisation
public class Compte{ Compte
String nom; int code; double solde; + solde, nom
+ code
+ getSolde()
public Compte(String nom) { + déposer()
this(nom,0.0); + retirer()
+ toString()
}
public Compte(String nom, double solde){
this.solde = solde; this.nom = nom; CompteCourant
} + découvertAutorisé
super() sans paramètres n'existe pas ! + retirer()
}
+ setDécouAut(double)

public class CompteCourant extends Compte{


double découvertAutorisé;

public CompteCourant(double découvertAutorisé) {


super(null, 0.0); super()
this.découvertAutorisé=découvertAutorisé;
}
Rajouté si vous ne mettez rien
Programmation Objet en Java  Prof A. El Faker - 2010
Leçon n°3: Héritage et spécialisation

Polymorphisme d’héritage
class Personne {
Personne
void passerVacances() {
System.out.println("à la maison"); ++ }age
nom : String
: int
}
class Employé extends Personne { + seDéplacer()
+ passerVacances()
void passerVacances() {
System.out.println("à l’auberge"); }
}
class Manager extends Personne {
void passerVacances() {
System.out.println("à l’hôtel"); }
} Manager Employé
+ Personne[] groupe + salaire: double

+ ajouterMembre() + travailler()
+ passerVacances() + passerVacances()

Programmation Objet en Java  Prof A. El Faker - 2010


Leçon n°3: Héritage et spécialisation

Polymorphisme d’héritage

Référencer des objets sans connaître leur


Intérêt ? classe véritable au moment de la compilation

Personne p ; // une référence à une Personne;


Voulez vous créer un employé (1) ou un manager (2)?
lire (reponse)
si reponse == 1 alors
p = new Employé();
si reponse == 2 alors
p = new Manager();
afficher Il passe ses vacances… p.passerVacances();

Ne dépend pas de la référence p à l’objet mais de


la classe de l'objet référencé
Programmation Objet en Java  Prof A. El Faker - 2010
Leçon n°3: Héritage et spécialisation

Polymorphisme d’héritage
p
personne

employé manager

Exécution :
Voulez vous créer un employé (1) ou un manager (2)?
1
Il passe ses vacances... à l’auberge

Voulez vous créer un employé (1) ou un manager (2)?


2
Il passe ses vacances... à l’hôtel
Programmation Objet en Java  Prof A. El Faker - 2010
Leçon n°3: Héritage et spécialisation

Héritage multiple

Pose des problèmes !

Redondance
Nommage
de données

Comment Exprimer un
comportement
commun à plusieurs classes ?

Programmation Objet en Java  Prof A. El Faker - 2010


Leçon n°3: Héritage et spécialisation

Interfaces en Java

Programmation Objet en Java  Prof A. El Faker - 2010


Leçon n°3: Héritage et spécialisation

Interfaces en Java

Héritage : Hiérarchie familiale


Réutiliser du code

Package : Amitié
Partager des connaissances

Interface : Relations dans la société

Partager la spécification d'un


comportement, et pas son
implémentation
Programmation Objet en Java  Prof A. El Faker - 2010
Leçon n°3: Héritage et spécialisation

Interfaces en Java
<<Interface>>
Cloneable Object

+ clone() + ...

implements extends

Autorisation à être cloné


public class Personne implements
Cloneable{
String nom; int age ; Personne
+ nom : String
Personne(String nom){ + age : int
this.nom = nom;
+ seDéplacer()
} + passerVacances()
void clone(){ //Code ici } + clone()
}

Programmation Objet en Java  Prof A. El Faker - 2010


Leçon n°3: Héritage et spécialisation

Interfaces en Java
<<Interface>>
MouseListener <<Interface>> MouseListener
public void mouseReleased(MouseEvent e);
+ mouseReleased()
public void mouseClicked(MouseEvent e); + mouseClicked()
public void mouseEntered(MouseEvent e); + mouseEntered()
public void mouseExited(MouseEvent e) ;
public void mouseMoved(MouseEvent e) ;

implements
Redéfinir toutes les méthodes
même si une seule vous intéresse
GestEvt
+
+ mouseReleased()
+ mouseClicked()
+ mouseEntered()

Programmation Objet en Java  Prof A. El Faker - 2010


Leçon n°3: Héritage et spécialisation

Interfaces en Java

La bibliothèque Java est truffée d'interfaces

 Runnable

Scénario d’un objet qu'on veut rendre


actif en lui attachant son propre flot
d'exécution (Thread)

 Serialisable

Sauvegarder ses objets sur disque

Programmation Objet en Java  Prof A. El Faker - 2010


Leçon n°3: Héritage et spécialisation

Interfaces en Java
Classes ne possédant que des constantes et des
définitions de méthodes abstraites
interface Tracable {
static final int DIM_MAX = 500;
void dessine(java.awt.Graphics g);
}
Les méthodes sont par défaut publiques et abstraites
Carre.java
class Carre implements Tracable {
int x,y; int cote; Color couleur ;
public void dessine(java.awt.Graphics g) {
if (cote < DIM_MAX) {
g.setColor(couleur); g.drawPolygon(carre);}
}
}
Programmation Objet en Java  Prof A. El Faker - 2010
Leçon n°3: Héritage et spécialisation

Interfaces en Java
Ce n’est pas une classe abstraite

Classe qui contient au Vehicule


moins une +vitesse
méthode déclarée +couleur : Color

abstraite +accelerer() : void


+freiner():void
+afficherVitesse():int

Voiture Bateau
+nbPortes : int +longueur
+nom
+accelerer() : void
+freiner():void +accoster() : void

Programmation Objet en Java  Prof A. El Faker - 2010


Leçon n°3: Héritage et spécialisation

Associations en Java

Programmation Objet en Java  Prof A. El Faker - 2010


Leçon n°3: Héritage et spécialisation

Associations en Java
Moteur

public class Voiture {


Voiture //Composant
0..* private Moteur monMoteur;

//Agrégation (simple)
conduit>

private Carburant monCarburant;

//Association
0..1
private Conducteur [] mesConducteurs;
Conducteur // ...
}

Carburant  Apparaissent toutes sous


la forme d’un attribut
Programmation Objet en Java  Prof A. El Faker - 2010
Leçon n°3: Héritage et spécialisation

Associations en Java
public class Voiture{
private Moteur monMoteur;
private Carburant monCarburant;
private Conducteur [] mesConducteurs;
//Composition
public Voiture() { monMoteur =new Moteur(); }
//Aggregation
public void setCarburant (Carburant leCarburant) {
this.monCarburant = leCarburant;
}
//Association
public void addConducteur(Conducteur unConducteur) {
mesConducteurs.add(unConducteur);
}
//Dépendance
public void removeConducteur(Conducteur unConducteur) {
mesConducteurs.remove(unConducteur);
}
}
Programmation Objet en Java  Prof A. El Faker - 2010
Leçon n°3: Héritage et spécialisation

Associations en Java
 Mais …
Relation (bidirectionnel, unidirectionnel) avec cardinalités
Cours
- leProf: Professeur

- setProf()
- removeProf()

0..*

assure>
 On doit développer des méthodes pour
maintenir ce type de relation 0..1

Professeur
- listeCours:Cours[]

- addCours()
- removeCours()

Programmation Objet en Java  Prof A. El Faker - 2010


Associations
Leçon n°3: Héritage et en Java
spécialisation
public class Cours{
private Professeur leProf;
public Cours() { leProf = null;}
public void setProfesseur(Professeur unProf) {leProf=unProf;}
} unProf

Cours
- leProf: Professeur

- setProf()
- removeProf()
unCours
listeCours
0..*

assure>
public class Professeur{
private ArrayList listeCours;
public Professeur() { 0..1

listeCours = new ArrayList[10]; Professeur


}
public void addCours(Cours unCours) { - listeCours:Cours[]
if(! listeCours.contains(unCours))
- addCours()
listeCours.add(unCours); - removeCours()
unCours.setProfesseur(this);
}
...
Programmation
} Objet en Java  Prof A. El Faker - 2010
Associations
Leçon n°3: Héritage et en Java
spécialisation
public class Cours{
private Professeur leProf;
public Cours() { leProf = null;}
public void removeProfesseur() { leProf = null;}
}
unProf

Cours
- leProf: Professeur

- setProf()
unCours - removeProf()
listeCours
0..*

assure>
public class Professeur{
private ArrayList listeCours;
0..1
public Professeur() {
listeCours = new ArrayList[10]; Professeur
}
- listeCours:Cours[]
...
public void removeCours(Cours unCours) { - addCours()
listeCours.remove (unCours); - removeCours()
unCours.removeProfesseur(this);
}

Programmation
} Objet en Java  Prof A. El Faker - 2010
Associations
Leçon n°3: Héritage et en Java
spécialisation
public class Cours{
private Professeur leProf;
public Cours() { leProf = null;}
public void setProfesseur(Professeur unProf) {leProf=unProf;}
public void removeProfesseur() { leProf = null;}
}
Cours
public class Professeur{
private ArrayList listeCours; - leProf: Professeur
public Professeur() {
listeCours = new ArrayList[10]; - setProf()
- removeProf()
}
public void addCours(Cours unCours) { 0..*

assure>
if(! listeCours.contains(unCours))
listeCours.add(unCours);
unCours.setProfesseur(this); 0..1

} Professeur
public void removeCours(Cours unCours) {
- listeCours:Cours[]
listeCours.remove (unCours);
unCours.removeProfesseur(this); - addCours()
} - removeCours()

} Redondance du code
Programmation Objet en Java  Prof A. El Faker - 2010
Associations
Leçon n°3: Héritage et en Java
spécialisation
public class Professeur{
private ArrayList listeCours;
public Professeur() {
listeCours = new ArrayList[10];
}
public void addCours(Cours unCours) {
if(! listeCours.contains(unCours))
Cours
if(unCours.setProfesseur(this))
listeCours.add(unCours); - leProf: Professeur
unCours.setProfesseur(this);
} - setProf()
- removeProf()
public void removeCours(Cours unCours) {
listeCours.remove (unCours); 0..*

assure>
unCours.removeProfesseur();
}
0..1
unProf
} Professeur
- listeCours:Cours[]

- addCours()
- removeCours()
unCours

Programmation Objet en Java  Prof A. El Faker - 2010


Associations
Leçon n°3: Héritage et en Java
spécialisation
public class Cours{
private Professeur leProf;
public Cours() { leProf = null;}
public boolean setProfesseur(Professeur unProf) {
if(leProf == null) {
leProf=unProf;
unProf.addCours(this);
Cours
return true;
} else return false; - leProf: Professeur
}
public void removeProfesseur() { - setProf()
- removeProf()
leProf.removeCours(this); leProf=null;
} 0..*

assure>
}
0..1
unProf
Professeur
- listeCours:Cours[]

- addCours()
listeCours - removeCours()
unCours

Programmation Objet en Java  Prof A. El Faker - 2010


Leçon n°3: Héritage et spécialisation

Programmation
Objet en java

Programmation Objet en Java  Prof A. El Faker - 2010


Leçon n°4: Collections et exceptions

Programmation
Objet en java

Programmation Objet en Java  Prof A. El Faker - 2008


Leçon n°4: Collections et exceptions

Plan de la leçon

 Collections d’objets

 Classes génériques
 Mécanisme des exceptions

Programmation Objet en Java  Prof A. El Faker - 2008


Leçon n°4: Collections et exceptions

Collections d’objets

Programmation Objet en Java  Prof A. El Faker - 2008


Leçon n°4: Collections et exceptions

Tableaux
public class SortTest {
public static void sort (double t[]) {
for(i=0; i< t.length -1 ; i++)
for(j=i+1; j< t.length ; j++)
if(t[i]>t[j]) {
int x=t[i];t[i]=t[j];t[j]=x;}
}
public static void main (String args[]) {
double tab[]=new double[10];
for(int i=0; i< tab.length; i++)
tab[i] = Math.random()*100;
sort(tab); //Tri du tableau
for(int i=0; i< tab.length; i++)
System.out.println("\t"+tab[i]);
}
}
Programmation Objet en Java  Prof A. El Faker - 2008
Leçon n°4: Collections et exceptions

Tableaux
Mais peu
public classde choses
SortTest { …
public static void sort (double t[]) {
 Une seule
for(i=0; i< propriété
t.length -1 :;length
i++)
for(j=i+1; j< t.length ; j++)
 Méthodes héritée
if(t[i]>t[j]) { de : java.lang.Object
int x=t[i];t[i]=t[j];t[j]=x;}
}
public static void main (String args[]) {
double tab[]=new double[10];
for(int i=0; i< tab.length; i++)
tab[i] = Math.random()*100;
sort(tab); //Tri du tableau
for(int i=0; i< tab.length; i++)
System.out.println("\t"+tab[i]);
}
}
Programmation Objet en Java  Prof A. El Faker - 2008
Leçon n°4: Collections et exceptions

Collections

Collection  organiser les données


dans les classes
Classe  encapsuler des données

Séparation entre

interfaces et implémentations

à partir de JDK 1.2

Programmation Objet en Java  Prof A. El Faker - 2008


Leçon n°4: Collections et exceptions

Collections
interface Queue<E> { Exemple
//type générique à partir de JDK 5.0
void add(E element);
E remove(); 1 2 3 4
int size(); head tail
}
class LinkedList<E> implements Queue<E> {
LinkedList(){ ... }
public void add(E element) { ... }
public E remove() { ... }
public int size() { ... }
private Link head;
private Link tail;
Link Link Link
}
data 1 data 2 data 3
next next next
head tail
Programmation Objet en Java  Prof A. El Faker - 2008
Leçon n°4: Collections et exceptions

Collections abstraites
public interface Collection<E> extends Iterable{
boolean add(E element);
public interface Iterator<E> {
Iterator<E> iterator();
E next();
... boolean hasNext();
} void remove();
...
}
Collection<String> c = ...;
Iterator<String> it = c.iterator();
while(it.hasNext()){
String element = it.next();
//do something with element
}
for(String e : c){ //JDK 5.0
//do something with element
}

Programmation Objet en Java  Prof A. El Faker - 2008


Leçon n°4: Collections et exceptions

Collections abstraites
public interface Iterator<E> {
Java E next();
Iterators boolean hasNext();
void remove();
...
}

 Visite des éléments selon le type de la collection


 Penser : “entre les éléments”

Returned
element
 Analogie: Iterator.next() InputStream.read()
Programmation Objet en Java  Prof A. El Faker - 2008
Leçon n°4: Collections et exceptions

Collections abstraites
public interface Iterator<E> {
Java E next();
Iterators boolean hasNext();
void remove();
...
}

 remove() supprime l’élément retourné par next()

Collection<String> c = ...;
Iterator<String> it = c.iterator();
it.next(); //first element
it.remove(); //remove it
it.remove(); //IllegalStateException

Programmation Objet en Java  Prof A. El Faker - 2008


Leçon n°4: Collections et exceptions

Interface Collection

Collection Java.util.*
Sacs (bags) : Collection non ordonnée
d'éléments qui peut contenir des doublons.

Set List
Map
Ensemble : Liste : collection ordonnée
Groupe d'éléments d'éléments indexés
uniques séquentiellement Les
doublons sont autorisés.
SortedMap
SortedSet
Carte : collection non ordonnée de paires
<clé ,valeur> :
dictionnaires, tableaux associatifs
Les clés sont uniques.
Les cartes peuvent être triées selon les clés.
Programmation Objet en Java  Prof A. El Faker - 2008
Leçon n°4: Collections et exceptions

Interface Collection

Collection
add(o) Ajoute un nouvel élément o à cette collection
addall(c) Ajoute tous les éléments de la collection c
clear() Retire tous les éléments de la collection
contains(o) Retourne true si la collection contient un élément
égal à o
containsAll(c) Retourne true si tous les éléments de c sont dans
la collection
isEmpty() Retourne true si la collection ne contient pas
d'éléments
iterator() Retourne un itérateur sur la collection
remove(o) Retire un élément qui égal à o s'il existe
removeAll(c) Retire tous les éléments qui sont présents dans c
retainsAll(c) Ne conserve que les éléments qui sont dans c
size() Retourne
Programmation Objet en Javale nombre
 Prof d'éléments
A. El Fakerde
- la collection
2008
Leçon n°4: Collections et exceptions

Interface Set

Collection

Set List

Pas de nouvelles méthodes, mais certaines


sémantiques changent
add(o) Ajoute l'élément o s'il n'existe pas déjà
addall(c) Ajoute tous les éléments s'ils n'existent pas déjà

Programmation Objet en Java  Prof A. El Faker - 2008


Leçon n°4: Collections et exceptions

Interface List

Collection

Set List
add(i,o) Insère l'élément o à la ième position dans la liste
add (o) Ajoute l'élément à la fin de la liste
get(i) Retourne l'élément à la ième position
listIterator() Retourne un itérateur de liste
listIterator(i) Retourne un itérateur positionné sur le ième
élément
remove(i) Retire l'élément à la ième position et le renvoie
remove(o) Retire la première occurrence de l'élément o
set(i,o) Remplace l'élément à la position i par l'élément o
et renvoie l'ancien
Programmation Objet en Java  Prof A. El Faker - 2008
Leçon n°4: Collections et exceptions

Interface Map
Carte : collection de paires <clé ,valeur> : Map
clear() Retire tous les mapping de la carte
containsKey(k) Retourne true si la carte contient
SortedMapun mapping
pour la clé k
get(k) Retourne la valeur mappée par la clé k
isEmpty() Retourne true si la collection ne contient pas de
mapping
keySet() Retourne un ensemble des clés de la carte
put(k, v) Associe la valeur v à la clé k
putAll(m) Copie tous les mapping de la map m
remove(k) Retire le mapping de la clé k
size() Retourne le nombre de paires clé-valeur de la
carte
values() Retourne une Collection des valeurs contenues
Programmation Objetdans la carte
en Java  Prof A. El Faker - 2008
Leçon n°4: Collections et exceptions

Implémentation des collections

Collection

Set List HashSet Set


TreeSet SortedSet

ArrayList List
LinkedList LinkedList List
Vector List

HashMap Map
TreeMap SortedMap
HashTable Map

Programmation Objet en Java  Prof A. El Faker - 2008


Leçon n°4: Collections et exceptions

Quelle classe utiliser ?


 TreeSet / HashSet :
– Les éléments sont triés par (comparateur / clé de Hash)
– add() et contains() en O(1) / O(log n)

HashSet Set
TreeSet SortedSet

ArrayList List
LinkedList List
Vector List

HashMap Map
TreeMap SortedMap
HashTable Map

Programmation Objet en Java  Prof A. El Faker - 2008


Leçon n°4: Collections et exceptions

Quelle classe utiliser ?


 ArrayList / LinkedList
– perte de place / pas de perte
– perte de performance si la taille max est dépassée
– get() et set() en O(1) / O(n)
– Vector : histoire de java HashSet Set
TreeSet SortedSet

ArrayList List
LinkedList List
Vector List

HashMap Map
TreeMap SortedMap
HashTable Map

Programmation Objet en Java  Prof A. El Faker - 2008


Leçon n°4: Collections et exceptions

Quelle classe utiliser ?


 TreeMap / HashMap
– Les éléments sont triés par (comparateur / clé de Hash)
– put() et get() en O(log n) / O(1)
– HashTable : histoire de java
HashSet Set
TreeSet SortedSet

ArrayList List
LinkedList List
Vector List

HashMap Map
TreeMap SortedMap
HashTable Map

Programmation Objet en Java  Prof A. El Faker - 2008


Leçon n°4: Collections et exceptions

Collections d’objets

Exemple : Créer une pile ?


 Solution 1
java.util.Stack hérite de Vector
(méthodes lents car synchronisées)
 Solution 2
Java.util.LinkedList avec
addFirst(Object o),
getFirst(), removeFirst()
 Solution 3
Créer sa propre pile : Stack

Programmation Objet en Java  Prof A. El Faker - 2008


Leçon n°4: Collections et exceptions

Collections d’objets

Exemple : Créer une pile ?

D’abord une interface

Stack.java <<interface>>
package monpackage;
public interface Stack {
boolean empty();
Object top();
Object pop();
Object push(Object item);
}

Programmation Objet en Java  Prof A. El Faker - 2008


Leçon n°4: Collections et exceptions

Collections d’objets

Exemple : Créer une pile ?


Ensuite une classe concrète LinkedStack

LinckedStack.java
import java.util.Collection;
public class LinkedStack extends java.util.LinkedList
implements Stack {
public LinkedStack() { super(); }
public boolean empty() { return(this.size()==0); }
public Object top() { return(this.getFirst()); }
public Object pop() {return(this.removeFirst()); }
public Object push(Object o) {
this.addFirst(o); return(o); }
}
Programmation Objet en Java  Prof A. El Faker - 2008
Leçon n°4: Collections et exceptions

Ordre et Tri

List<String> maListe= new LinkedList<String>();


...
Collections.sort(maListe);

 Ne fonctionne que si les éléments


List dans la liste sont Comparables :
int, String, Date

 Sinon … définir un ordre


LinkedList

Programmation Objet en Java  Prof A. El Faker - 2008


Leçon n°4: Collections et exceptions

Ordre et Tri

Comment définir un ordre pour ses objets ?


1. Implémenter l'interface Comparable
– public int compareTo(Object o)
– Ordre naturel
2. Utiliser un comparateur externe
− classe qui implante l'interface Comparator
– public int compare (Object o1, Object o2)

Programmation Objet en Java  Prof A. El Faker - 2008


Leçon n°4: Collections et exceptions

Ordre et Tri

Comment définir un ordre pour ses objets ?


1. Implémenter l'interface Comparable
– public int compareTo(Object o)
class Person implements java.util.Comparable {
– Ordre naturel
private String nom = "";
2. Utiliser
private intun
agecomparateur
= 0; externe
public Person(String n, int a) { nom = n; age=a;}
− classe
public qui implante
int getAge() l'interface
{ return age; } Comparator
public String toString() { return nom+"\t"+ age;}
– public int compare (Object o1, Object o2)
public int compareTo(Object other) {
int age1 = ((Person) other).getAge();
int age2 = this.getAge();
if (age1 > age2) return -1;
else if(age1 == age2) return 0; else return 1; }
}
Programmation Objet en Java  Prof A. El Faker - 2008
Leçon n°4: Collections et exceptions

Ordre et Tri

Comment définir un ordre pour ses objets ?


1. Implémenter l'interface Comparable
– public int compareTo(Object o)
– Ordre naturel Person
List maListe=new
2. Utiliser LinkedList()
un comparateur externe;
maListe.add(new Person("Daoudi",30)) ;
− classe qui implante
maListe.add(new l'interface Comparator
Person("Hachim",35)) ;
maListe.add(new Person("Abbadi",29))
– public int compare ; o2)
(Object o1, Object
maListe.add(new Person("Chraibi",25)) ;
Collections.sort(maListe);
Chraibi 25
Maintenant OK Abbadi 29 …
Programmation Objet en Java  Prof A. El Faker - 2008
Leçon n°4: Collections et exceptions

Classes génériques

Programmation Objet en Java  Prof A. El Faker - 2008


Leçon n°4: Collections et exceptions

Classes génériques

Avant-J2SE 5.0 : problème


Vector v = new Vector();
v.add(new Integer(4));
MaClass.expurger(v);
...
static void expurger(Collection c) {
for (Iterator it = c.iterator(); it.hasNext();)
/* ClassCastException */
if (((String)it.next()).length() == 4)
it.remove();
}
}

Programmation Objet en Java  Prof A. El Faker - 2008


Leçon n°4: Collections et exceptions

Classes génériques
Instancier une classe générique
Solution pour créer une classe spécifique
J2SE5Solution
Vector<String> x = new Vector<String>();
x.add(new Integer(5)); // Compiler error!

Vector<Integer> y = new Vector<Integer>();


return x.getClass() == y.getClass(); // ?
J2SE5Solution
HashMap<String, Mammifère> map =
new HashMap<String, Mammifère >();

map.put(“cow”,new Mammifère ("vache"));


Mammifère w = map.get(“cow”);
Programmation Objet en Java  Prof A. El Faker - 2008
Leçon n°4: Collections et exceptions

Classes génériques

Avant-J2SE 5.0 : problème


void printCollection(Collection<Object> c)
{
for (Object o : c) System.out.println(o);
}

 Faux : Passer une Collection de type String


génère une erreur de compilation.

 Une Collection de paramètre Object n’est


pas le supertype de tous les types
Programmation Objet en Java  Prof A. El Faker - 2008
Leçon n°4: Collections et exceptions

Classes génériques

J2SE 5.0 : solution


void printCollection(Collection<?> c) {
for (Object o : c)System.out.println(o);
}

Wildcards
? : Type inconnu : wildcard
Collection<?> : Collection d’inconnu

Programmation Objet en Java  Prof A. El Faker - 2008


Leçon n°4: Collections et exceptions

Mécanisme des
exceptions
en Java

Programmation Objet en Java  Prof A. El Faker - 2008


Leçon n°4: Collections et exceptions

Mécanisme des exceptions

Problèmatique

Traitement des erreurs par test des codes de


retour :

On risque d'oublier le traitement


des valeurs de retour

La valeur de retour ne sert plus


à retourner des résultats

Programmation Objet en Java  Prof A. El Faker - 2008


Leçon n°4: Collections et exceptions

Mécanisme des exceptions

C’est quoi une exception ?


Objet : contenant l’information relative au problème
java.lang.Throwable

java.lang.Exception java.lang.Error

Erreur Fatale
Erreur au niveau Si une exception (erreur) est générée
De l’application et qu’elle crée une instance de la
classe Error c’est qu’il s’est produit
une erreur au niveau de la MV

Programmation Objet en Java  Prof A. El Faker - 2008


Leçon n°4: Collections et exceptions

Mécanisme des exceptions


Clause try /catch
try {
// code pouvant lever une exception
// délimite la portion de code à surveiller
}
catch (MonException e) {
// Code a exécuter si MonException est levée
// Intercepte capture et traite une exception
}
catch (Exception e) {
System.out.println(e.toString());
}
finally {
//Code toujours exécuté, exception levée ou non
}

Programmation Objet en Java  Prof A. El Faker - 2008


Leçon n°4: Collections et exceptions

Mécanisme des exceptions

Mot clé : throws <Exeption>


Indique au compilateur que la méthode peut
remonter une exception
MonAppli
class MonAppli {
static int moyenne(String[] liste) throws
MonException {
Si on fait appel à moyenne() :
1. Soit intercepter et traîter l’exception try /catch
2. Soit ajouter la clause throws dans la
déclaration de la méthode appelante
Programmation Objet en Java  Prof A. El Faker - 2008
Leçon n°4: Collections et exceptions

Mécanisme des exceptions

Mot clé : throw


 Permet de lever une exception
 Générer des exceptions d’une
manière explicite
MonAppli
class MonAppli {
static int moyenne(String[] liste) throws
MonException {
//…
if (nbNotes == 0) throw new MonException ();
return somme/nbNotes;
}
Programmation Objet en Java  Prof A. El Faker - 2008
Leçon n°4: Collections et exceptions

Mécanisme des exceptions

Signaler un événement exceptionnel


d’un type non prévu par les API

MonException
class MonException extends Exception{
public String toString() {
return “Aucune note n’est valide”;
}
}

Définition d’un constructeur et


Redéfinition de la méthode toString()
Programmation Objet en Java  Prof A. El Faker - 2008
Leçon n°4: Collections et exceptions
int moyenne(String[] lst) throws MonException {
int somme=0,entier,nbNotes=0;
for (int i=0;i<lst.length();i++){
try {
entier=Integer.parseInt(lst[i]);
somme+=entier; nbNotes++;
} catch (NumberFormatException e) {
System.out.println(“Note”+i+” n’est
pas entière”); }}
if (nbNotes==0) throw new MonException();
return somme/nbNotes;
}
public static void main(String[] argv){
try { System.out.println(“La moyenne est:”
+ moyenne(argv) );}
catch (MonException e){
System.out.println(e);}}
Programmation Objet en Java  Prof A. El Faker - 2008
Leçon n°4: Collections et exceptions

Mécanisme des exceptions

Les exceptions prédéfinies

Exceptions dérivées de RuntimeException


 ArithmeticException
Erreurs math, division par zéro,...

 OutOfMemoryException
 ClassNotFoundException
 NosuchMethodeException

Programmation Objet en Java  Prof A. El Faker - 2008


Leçon n°4: Collections et exceptions

Programmation
Objet en java

Programmation Objet en Java  Prof A. El Faker - 2008


Leçon n°5: Sérialisation

Programmation
Objet en java

Programmation Objet en Java  Prof A. El Faker - 2008


Leçon n°5: Sérialisation

Sérialisation en Java

Programmation Objet en Java  Prof A. El Faker - 2008 2


Leçon n°5: Sérialisation

Plan de la leçon

 Manipuler les fichiers ?

 Manipuler les flux de données ?

 Sérialisation Objet

Programmation Objet en Java  Prof A. El Faker - 2008 3


Leçon n°5: Sérialisation

Entrées/sorties en Java
Basées sur la notion de stream
java.io.* canal de communication entre
écrivain et lecteur

java.net.* Classes de manipulation de flux


sur sockets

 Plusieurs types de streams


 Mais utilisation similaire
Ce sont les concepts d'héritage et d'interfaces qui
permettent d'obtenir cette abstraction.

Programmation Objet en Java  Prof A. El Faker - 2008 4


Leçon n°5: Sérialisation

Manipuler les fichiers

 Indépendamment des données

Programmation Objet en Java  Prof A. El Faker - 2008 5


Leçon n°5: Sérialisation

Manipuler les fichiers

Classe java.io.File
 Renommage
 Suppression
 Droits d’accès d'un fichier

Programmation Objet en Java  Prof A. El Faker - 2008 6


Leçon n°5: Sérialisation

Manipuler les fichiers


Ls.java
import java.io.*;
public class Ls {
public Scan() { super(); }
public static void main(String[] args) throws Exception{
String filename ="C:\\Windows";
File f = new File(filename);
String [] files = f.list();
for(int i =0; i < files.length; i++) {
if(new File(filename + "\\" +
files[i]).isDirectory()) {
System.out.print("Rep : ");
} else System.out.print("Fic : ");
System.out.println(filename+"\\"+ files[i]);
} } }

Programmation Objet en Java  Prof A. El Faker - 2008 7


Leçon n°5: Sérialisation

Manipuler les
flux de données

 Exploiter les données du fichier

Programmation Objet en Java  Prof A. El Faker - 2008 8


Leçon n°5: Sérialisation

Flux de données
Classes de streams de base
 InputStream/OutputStream
Classes abstraites définissant les opérations de base
pour la lecture/écriture de séquence d’octets
InputStream System.in
PrintStream System.out, System.err
int c;
while( (c=System.in.read())!=-1 ) {
System.out.print(c);
nbc++;
}
9
Programmation Objet en Java  Prof A. El Faker - 2008
Leçon n°5: Sérialisation

Flux de données
Classes de streams de base
Dans la majorité des cas, les flux sont 8 bits
(Ex. System.in)

 Reader/Writer
définissent les opérations de base pour la
lecture/écriture de séquence de données de type
caractère et supportant l’Unicode

Méthodes principales : read(),write(),close()


java.io.IOException
10
Programmation Objet en Java  Prof A. El Faker - 2008
Leçon n°5: Sérialisation

Flux de données
Principaux streams
 Buffered[Input|Output]Stream/
Buffered[Reader|Writer]
ajoutent un système de tampon (buffer) pour
améliorer les performances

11
Programmation Objet en Java  Prof A. El Faker - 2008
Leçon n°5: Sérialisation

Flux de données
Principaux streams
 InputStream[Reader|Writer]
classes pour transformer des caractères en
octets et vice-versa

12
Programmation Objet en Java  Prof A. El Faker - 2008
Leçon n°5: Sérialisation

Flux de données
import java.io.*;
public class MesInputs {
...
public static String readString() throws
java.io.IOException {
Reader isReader = new InputStreamReader(System.in);
BufferedReader bReader = new BufferedReader(isReader);
return bReader.readLine();
}
}

ou
(new BufferedReader(new
InputStreamReader(System.in))).readLine();

ou
new java.util.Scanner(System.in).nextLine();

Programmation Objet en Java  Prof A. El Faker - 2008 13


Leçon n°5: Sérialisation

Flux de données
Principaux streams

 Data[Input|Output]Stream
Streams spécialisés qui ajoutent la possibilité
de lire/écrire des données de types de base

 Object[Input|Output]Stream
lecture/écriture d’objets Java sérialisés. Cela
implique reconstruction d’objet

Programmation Objet en Java  Prof A. El Faker - 2008 14


Leçon n°5: Sérialisation

Flux de données
Principaux streams

 File[Input|Output]Stream/File[Reader|Writer]
Streams permettant de lire/écrire dans un fichier

 Transformations en chaîne de caractères PrintWriter


méthodes print(), println()

Programmation Objet en Java  Prof A. El Faker - 2008 15


Leçon n°5: Sérialisation

Manipulations de fichiers
import java.io.*;
...
public void copieFic(String nomSource, String nomCible) {
File source = new File(nomSource);
File cible = new File(nomCible);
try{
BufferedReader in = new BufferedReader(new
FileReader(source));
PrintWriter out = new PrintWriter(new
FileWriter(cible));
String ligne;
while ((ligne = in.readLine()) != null) {
out.println(ligne);
}
out.close();
in.close();
}
catch(IOException e) { e.printStackTrace(); }
Programmation Objet en Java  Prof A. El Faker - 2008
}
Leçon n°5: Sérialisation

Sérialisation Objet

Programmation Objet en Java  Prof A. El Faker - 2008 17


Leçon n°5: Sérialisation

Sérialisation Objet

Persistance ?

 L'objet continu d’exister et de garder


son information même quand le
programme ne tourne plus

Programmation Objet en Java  Prof A. El Faker - 2008 18


Leçon n°5: Sérialisation

Sérialisation Objet

Persistance ?

◊ Vision 1 :
Ecrire l’information dans un
fichier ou dans une BD

◊ Vision 2 :
Définir un objet en employant un
certain type de mot-clé pour la
"persistance" et de laisser le système
prendre en charge les détails
Programmation Objet en Java  Prof A. El Faker - 2008 19
Leçon n°5: Sérialisation

Sérialisation Objet

Sérialisation C’est quoi ?

 Permet de prendre n'importe quel objet et


le dévie en une séquence de bytes qui
pourront ensuite être complètement
restaurés pour régénérer l'objet original
 Permet de prendre un objet en mémoire et
d’envoyer son état (valeur de ses attributs)
sur un flux de données (fichier, socket)

Programmation Objet en Java  Prof A. El Faker - 2008 20


Leçon n°5: Sérialisation

Sérialisation Objet

Conséquence?

On peut créer un objet sur un


machine Windows, le sérialiser, et
l'envoyer à travers le réseau sur
une machine Unix où il sera
correctement reconstruit

Programmation Objet en Java  Prof A. El Faker - 2008 21


Leçon n°5: Sérialisation

Sérialisation Objet

Problématiques

 C++ (par exemple) ne fournit


pas, de base, la sérialisation

La sérialisation n'est pas


simple à mettre en œuvre !

 Où est la difficulté ?

Programmation Objet en Java  Prof A. El Faker - 2008 22


Leçon n°5: Sérialisation

Sérialisation Objet

Problématiques

1. Attributs sont de type


scalaire (int, float, double,
...) ou
agrégat (sous-objets ou tableaux)
 Agrégats stockés dans le tas
(autre que la pile) . Donc pointés

 Or, il faut sauvegarder l'objet


pointé et non le pointeur !
Programmation Objet en Java  Prof A. El Faker - 2008 23
Leçon n°5: Sérialisation

Sérialisation Objet

Problématiques

2. Comment connaître le type d'un


attribut ( scalaire/agrégat) ?

3. Résoudre le problème de 2 objets


qui se pointent mutuellement !

 Il ne faudrait pas sauvegarder les


mêmes objets indéfiniment

Programmation Objet en Java  Prof A. El Faker - 2008 24


Leçon n°5: Sérialisation

Sérialisation Objet

Solutions

 Une seule : la réflexion

 Permet, par programmation,


d'obtenir des informations sur un
type de données chargé en
mémoire.

Programmation Objet en Java  Prof A. El Faker - 2008 25


Leçon n°5: Sérialisation

Sérialisation Objet

Solutions

 Une seule : la réflexion

 A partir des méthodes exposées


par une classe on peut aussi en
déduire ses propriétés
(getters, setters et évènements
-écouteurs-)

Programmation Objet en Java  Prof A. El Faker - 2008 26


Leçon n°5: Sérialisation

Sérialisation Objet

Solutions

 Ce que sait faire Java :

 Manipuler les méta-classes :


Un type qui en identifie un autre

Comment ?
Le compilateur joint la table des
symboles au fichier de byte-code
généré

Programmation Objet en Java  Prof A. El Faker - 2008 27


Leçon n°5: Sérialisation

Sérialisation Objet

Solutions

 Pour pouvoir utiliser la réflexion,


la classe java.lang.Class,
 Des classes utilitaires dans le
package java.lang.reflect

Mais cela dépasse le cadre


de la sérialisation

Programmation Objet en Java  Prof A. El Faker - 2008 28


Leçon n°5: Sérialisation

Sérialisation Objet

Mode d’emploi

 Les outils de sérialisation


sont localisés dans le package
java.io
 Notamment 2 classes :
ObjectInputStream
ObjectOutputStream

Programmation Objet en Java  Prof A. El Faker - 2008 29


Leçon n°5: Sérialisation

Sérialisation Objet

Mode d’emploi

 Pour sérialiser un objet :

1. On crée une sorte d'objet


OutputStream et
2. On l'enveloppe ensuite dans
un objet ObjectOutputStream

Programmation Objet en Java  Prof A. El Faker - 2008 30


Leçon n°5: Sérialisation

Sérialisation Objet

Mode d’emploi

ObjectOutputStream

Propose la méthode

writeObjet()

Programmation Objet en Java  Prof A. El Faker - 2008 31


Leçon n°5: Sérialisation

Sérialisation Objet

Mode d’emploi

L’objet est passé en paramètre

writeObjet(objet)

 et envoyé à OutputStream

Programmation Objet en Java  Prof A. El Faker - 2008 32


Leçon n°5: Sérialisation

Sérialisation Objet

Mode d’emploi

 Si un attribut fait référence à


un autre objet
writeObjet()
est invoquées récursivement
« Web des objets »

Attention : références croisés

Programmation Objet en Java  Prof A. El Faker - 2008 33


Leçon n°5: Sérialisation

Sérialisation Objet

Mode d’emploi

On peut écrire tous les types


de données primitives

oos.writeObject(" Nous somme ");


oos.writeObject(new Date());
oos.writeObject(new Mafenetre());

Programmation Objet en Java  Prof A. El Faker - 2008 34


Leçon n°5: Sérialisation

Sérialisation Objet

Mode d’emploi

objet=(TypeDeObjet)

ObjectInputStream.readObjet();

 Recrée l’objet dans l’état où il


était sérialisé

Les objets référencés sont


aussi sérialisés
Programmation Objet en Java  Prof A. El Faker - 2008 35
Leçon n°5: Sérialisation

Sérialisation Objet

Serialize.java
public void saveWindow() throws IOException {
JFrame window = new JFrame("Ma fenêtre");
...
window.setSize(400,300);
FileOutputStream fos = new
FileOutputStream("window.ser");
ObjectOutputStream oos = new
ObjectOutputStream(fos);
oos.writeObject(window);
oos.flush();
oos.close();
 Crée une fenêtre et la
} sérialise dans un fichier
Programmation Objet en Java  Prof A. El Faker - 2008 36
Leçon n°5: Sérialisation

Sérialisation Objet
Serialize.java
public void loadWindow() throws Exception {
FileInputStream fis = new
FileInputStream("window.ser");
ObjectInputStream ois = new
ObjectInputStream(fis);
JFrame window = (JFrame)ois.readObject();
ois.close();
window.setVisible(true);
}

 Reconstruit la fenêtre à partir


des données du fichier

Programmation Objet en Java  Prof A. El Faker - 2008 37


Leçon n°5: Sérialisation

Sérialisation Objet

Coder une classe sérialisable

 Ca marche puisque la majorité des


classes du J2Sdk ont été définies
comme étant sérialisables.

Programmation Objet en Java  Prof A. El Faker - 2008 39


Leçon n°5: Sérialisation

Sérialisation Objet

Coder une classe sérialisable

 Nos classes ne permettent pas de


sauvegarder l'état d'un objet sur un flux
de données

 Il faut explicitement le demander

 Comment coder une classe sérialisable ?

Programmation Objet en Java  Prof A. El Faker - 2008 40


Leçon n°5: Sérialisation

Sérialisation Objet

Coder une classe sérialisable

C’est simple !
 Marquer la classe comme étant
Sérialisable

implements java.io.Serializable

 Ne contient aucune méthode !!!

Programmation Objet en Java  Prof A. El Faker - 2008 41


Leçon n°5: Sérialisation

Sérialisation Objet

Coder une classe sérialisable

C’est simple !

Le compilateur préfère avoir une


confirmation (confiance)

 Un objet peut théoriquement avoir


une taille phénoménale …

Programmation Objet en Java  Prof A. El Faker - 2008 42


Leçon n°5: Sérialisation

Sérialisation Objet

Coder une classe sérialisable

 Attributs name et age seront sérialisés


PersonSer.java
import java.io.*;
import java.util.*;
public PersonSer implements Serializable {
private String name;
private int age;
//…
}
Programmation Objet en Java  Prof A. El Faker - 2008 43
Leçon n°5: Sérialisation

Sérialisation Objet

Coder une classe sérialisable

transient

un attribut ne doit pas être


sauvegardé

Programmation Objet en Java  Prof A. El Faker - 2008 44


Leçon n°5: Sérialisation

Sérialisation Objet

Coder une classe sérialisable

 Attribut name ne sera jamais sérialisé


PersonSer.java
import java.io.*;
import java.util.*;
public PersonSer implements Serializable {
private transient String name;
private int age;
//…
}
Programmation Objet en Java  Prof A. El Faker - 2008 45
Leçon n°5: Sérialisation

Sérialisation Objet

Fin

Programmation Objet en Java  Prof A. El Faker - 2008 48


Leçon n°5: Sérialisation

Sérialisation Objet

Serialize an Apple object to disk

Apple apple = new Apple(Color.green);


FileOutputStream f = new
FileOutputStream(“apple.tmp”);
ObjectOutputStream s = new ObjectOutputStream(f);
s.writeObject(apple);
s.flush();
f.close();
ObjectOutputStream

apple
object FileOutputStream
file in harddisk
Programmation Objet en Java  Prof “apple.tmp”
A. El Faker - 2008 49
Leçon n°5: Sérialisation

Sérialisation Objet

Serialize an Apple object from disk

FileInputStream f = new
FileInputputStream(“apple.tmp”);
ObjectInputStream s = new ObjectInputStream(f);
Apple apple = (Apple)s.readObject();

f.close();

ObjectInputStream

apple
object FileInputStream file in harddisk
“apple.tmp”
Programmation Objet en Java  Prof A. El Faker - 2008 50
Leçon n°5: Sérialisation

Programmation
Objet en java

Programmation Objet en Java  Prof A. El Faker - 2008


Leçon n°5: Applets et Interfaces Graphiques

Programmation
Objet en java

Programmation Objet en Java  Prof A. El Faker - 2008


Leçon n°5: Applets et Interfaces Graphiques

Applets et
Interfaces
Graphiques

Programmation Objet en Java  Prof A. El Faker - 2008


Leçon n°5: Applets et Interfaces Graphiques

Plan de la leçon

 Applet Java
 C’est quoi ?
 Comment écrire une Applet?
 Exemple

 Interfaces Graphiques
 Composants et conteneurs
 Gestionnaires de présentation
 Gestion des événements

Programmation Objet en Java  Prof A. El Faker - 2008


Leçon n°5: Applets et Interfaces Graphiques

Qu’est ce qu’une Applet ?


Application Java
Début.java
// Mon premier programme en Java
public class Début {
public static void main(String[] argv)
{
System.out.println("Ca marche !");
}
/* corps de la méthode principale */
}
main() Premier élément appelé par la MV
Programmation Objet en Java  Prof A. El Faker - 2008
Leçon n°5: Applets et Interfaces Graphiques

Qu’est ce qu’une Applet ?


Applet Java

Première.java
// Ma première applet Java
public class Première
extends java.applet.Applet {
public void init() {
add(new java.awt.Label("Ça marche !")); }
}
Première.html
<html> <body>
<applet code="Première.class" width="200"
height="150"> </applet>
</body></html>

Programmation Objet en Java  Prof A. El Faker - 2008


Leçon n°5: Applets et Interfaces Graphiques

Qu’est ce qu’une Applet ?

Principe
Lorsqu’un navigateur reçoit une page HTML
 Il télécharge le code de la classe
 Il éxécute le code sur le poste client

Serveur Client Navigateur

Page
Code.class HTTP HTML

init...
Redéfinir les méthodes start...

init(),start()
Programmation Objet en Java  Prof A. El Faker - 2008
Leçon n°5: Applets et Interfaces Graphiques

Qu’est ce qu’une Applet ?

Une applet peut

 Construire et gérer une


interface graphique

 Créer de nouveaux threads

 Ouvrir des connexions réseaux


...

Programmation Objet en Java  Prof A. El Faker - 2008


Leçon n°5: Applets et Interfaces Graphiques

Qu’est ce qu’une Applet ?

Mais ne peut pas

 Exécuter des programmes


 Accéder aux systèmes de fichiers
 Communiquer avec un autre site web
Comment ?

Le navigateur charge l’objet


SecurityManager pour contrôler
les actions interdites
Programmation Objet en Java  Prof A. El Faker - 2008
Leçon n°5: Applets et Interfaces Graphiques

Méthodes qu’on peut redéfinir

Méthodes de gestion de l’exécution

public void init()


 Appelée une seule fois par le navigateur à
l’initialisation lorsque l’applet est chargée

public void start()

 Au démarrage de l’applet
Après init()
et à chaque fois que la page est revisitée

Programmation Objet en Java  Prof A. El Faker - 2008


Leçon n°5: Applets et Interfaces Graphiques

Méthodes qu’on peut redéfinir

Méthodes de gestion de l’exécution

public void stop()


 Lorsque l’utilisateur change de page Web
 Lorsque l’applet appelle elle même stop()

public void destroy()

 Avant la fermeture du navigateur


 Utilisée pour détruire les threads
Programmation Objet en Java  Prof A. El Faker - 2008
Leçon n°5: Applets et Interfaces Graphiques

Méthodes qu’on peut redéfinir

Méthode de gestion de l’Interface Graph.

public void paint(java.awt.Graphics g)

 Voir la représentation graphique de l’Applet

 Définir ici : les textes, images, et les


représentations graphiques à afficher
 g : contexte graphique dans lequel
s’exécute l’Applet

Programmation Objet en Java  Prof A. El Faker - 2008


Leçon n°5: Applets et Interfaces Graphiques

Méthodes qu’on peut redéfinir

Méthode de gestion de l’Interface Graph.

public void paint(java.awt.Graphics g)

 Appelée à chaque fois que :

• La fenêtre du navigateur est


déplacée, réduite ou agrandie

• On fait appel à repaint()


= update()+ paint()

Programmation Objet en Java  Prof A. El Faker - 2008


Leçon n°5: Applets et Interfaces Graphiques

ENSIAS.java
import java.applet.*; // Applet
import java.awt.*; //Graphics,Font,Color
public class ENSIAS extends Applet {
Font font;
public void init() {
font= new Font("sansserif",Font.BOLD,48);
}
public void paint(Graphics g) {
g.setColor(Color.pink);
g.fillOval(10,10,330,100);
g.setColor(Color.black);
g.setFont(font);
g.drawString("ENSIAS",40,75);
}
}
Programmation Objet en Java  Prof A. El Faker - 2008
Leçon n°5: Applets et Interfaces Graphiques

Exemple: Afficher une image

Etapes
1. Charger une image
 Méthodes de la classe : java.applet.Applet
Ex. getImage(URL)

2.Traitement sur l’image


 Méthodes de la classe : java.awt.Image
Ex. getWidth() et getHeigh()

3. Afficher l’image
Dans le contexte graphique de l’Applet
java.awt.Graphics
Programmation Objet en Java  Prof A. El Faker - 2008
Leçon n°5: Applets et Interfaces Graphiques

Exemple: Afficher une image


ImageApplet.java
import java.applet.*;
import java.awt.*;
public class DrawImag extends Applet {
Image image; URL du .class de
public void init() { l’Applet
setBackground(Color.lightGray);
image=getImage(getCodeBase(),"flower.gif");
}
// Dessiner l’Applet chaque fois que nécessaire
public void paint(Graphics g){
g.drawString("Des fleurs ...",10,75);
g.drawImage(image,100,10,this);
}
}

Programmation Objet en Java  Prof A. El Faker - 2008


Leçon n°5: Applets et Interfaces Graphiques

Exemple: Afficher une image


ImageApplet.java
import java.applet.*;
import java.awt.*;
public class DrawImag extends Applet {
Image image;

// Dessiner l’Applet chaque fois que nécessaire


public void paint(Graphics g){
// récupérer les dimensions de l’image
int w = image.getWidth();
int h = image.getHeight();

g.drawString("Des fleurs ...",10,75);


g.drawImage(image,10,10,w/2,h/2,this);
}
}
Programmation Objet en Java  Prof A. El Faker - 2008
Leçon n°5: Applets et Interfaces Graphiques

Conception d’Interface
Graphique

Programmation Objet en Java  Prof A. El Faker - 2008


Leçon n°5: Applets et Interfaces Graphiques

Interfaces graphiques
Deux bibliothèques d’APIs
 AWT (Abstract Window Toolkit) java.awt

 Swing (100% java) javax.swing

1 Composants graphiques

2 Gestionnaires de présentation

3 Gestion des événements

Programmation Objet en Java  Prof A. El Faker - 2008


Leçon n°5: Applets et Interfaces Graphiques

1 Composants graphiques
java.awt.*

Conteneurs (d’autres composants)

Fenêtres (java.awt.Frame)

Contexte graphique
d’une Applet

Panneau (Panel)

Canevas
Programmation Objet en Java  Prof A. El Faker - 2008
Leçon n°5: Applets et Interfaces Graphiques

1 Composants graphiques
java.awt.*

Composants

Button TextArea CheckBox

Programmation Objet en Java  Prof A. El Faker - 2008


Leçon n°5: Applets et Interfaces Graphiques

1 Composants graphiques
Créer une instance du composant
Configurer son aspect (taille, forme, coul)
L’ajouter à un conteneur
Authent.java
public class Authent extends Applet {
public void init() {
Label pwdLab;
pwdLab = new Label("Mot de passe" , label.LEFT);
TextField pwdTxF = new TextField (20);

pwdTxF.setEchoChar(‘*’);

this.add(pwdLab);
this.add(pwdTxF); }
}
Programmation Objet en Java  Prof A. El Faker - 2008
Leçon n°5: Applets et Interfaces Graphiques

2 Gestionnaires de présentation
 Pour indiquer l’ordre d’apparition et la dispostion
des composants dans un conteneur

Classe qui implémente java.awt.LayoutManager

setLayout(new FlowLayout());
Programmation Objet en Java  Prof A. El Faker - 2008
Leçon n°5: Applets et Interfaces Graphiques

2 Gestionnaires de présentation
Créer une instance du gestionnaire
L’appliquer au conteneur choisi
Ajouter des composants au conteneur
Blay.java
public class Blay extends Applet {
public void init() {
BorderLayout borderLayout = new BorderLayout();
this.setLayout(borderLayout);
this.add(new Button("Nord"), BorderLayout.NORTH);
add(new Button("Sud"), BorderLayout.SOUTH);
add(new Button("Est"), BorderLayout.EAST);
add(new Button("Ouest"), BorderLayout.WEST);
add(new Button("Centre"), BorderLayout.CENTER);
}
}
Programmation Objet en Java  Prof A. El Faker - 2008
Leçon n°5: Applets et Interfaces Graphiques

2 Gestionnaires de présentation

Gestionnaire Disposition Par défaut

FlowLayout Gauche à droite Panel


GridLayout nbLignes/nbCol Panel
BorderLayout North,South, East, Frame, Dialog
West, Center

Programmation Objet en Java  Prof A. El Faker - 2008


Leçon n°5: Applets et Interfaces Graphiques

Gestion des
événements en Java

Programmation Objet en Java  Prof A. El Faker - 2008


Leçon n°5: Applets et Interfaces Graphiques

3 Gestion des événements


Un composant AWT peut avertir d'une action
effectuée sur lui.

Opération effectuée!

Un Button peut avertir ...


... un objet écouteur de type ActionListener

... un objet d’une classe qui implémente


ActionListener
Programmation Objet en Java  Prof A. El Faker - 2008
Leçon n°5: Applets et Interfaces Graphiques

3 Gestion des événements

Répond à des événements de type

ActionListener ActionEvent
Clic sur un bouton
ENTREE zone de texte
actionPerformed()
MouseListener MouseEvent
Passage du curseur: enter(), exit()
Appui sur bouton:
press(),release(),click()
MouseMotionListener MouseEvent
Déplacement de la souris
mouseDragged()
Programmation Objet en Java  Prof A. El Faker - 2008
Leçon n°5: Applets et Interfaces Graphiques

3 Gestion des événements

Répond à des événements de type

WindowListener WindowEvent
Ouverture, fermeture, réduction, de
fenêtre, …
windowClosing()...
KeyListener KeyEvent
Actions sur les touches du clavier par
rapport à un composant
TextListener TextEvent
Modification de contenu de composants
textValueChanged()

Programmation Objet en Java  Prof A. El Faker - 2008


Leçon n°5: Applets et Interfaces Graphiques

3 Gestion des événements


Créer une classe qui implémente l’interface d’écoute

class MyActionListener implements ActionListener {


public void actionPerformed(ActionEvent event){
System.out.println("Opération effectuée!");
}
}

Abonner le composant à l’écouteur

button.addActionListener(new MyActionListener());

Programmation Objet en Java  Prof A. El Faker - 2008


Leçon n°5: Applets et Interfaces Graphiques
TestEvent.java
import java.awt.*;
import java.awt.event.*;
public class TestEvent {
public static void main(String[] args) {
Frame frame= new Frame("Gestion d'un … ");
Button button = new Button("Valider");
button.addActionListener(new MyActionListener());
Label label = new Label("Cliquer pour valider ");
Panel panel = new Panel();
panel.add(label); panel.add(button);
frame.add(panel); frame.setVisible(true);
}
// classe interne ... c’est possible
static class MyActionListener implements ActionListener {
public void actionPerformed(ActionEvent event) {
System.out.println("L'opération est validée!!"); }
}
}
Remarque : Impossible de fermer la fenêtre
Programmation Objet en Java  Prof A. El Faker - 2008
Leçon n°5: Applets et Interfaces Graphiques

3 Gestion des événements


1ère approche : implémenter l’interface
WindowListener
TestEvent.java
public static void main(String[] args) {

frame.addWindowListener(new MyWindowListener());
}
static class MyWindowListener implements WindowListener {
public void windowActivated(WindowEvent event) {;}
public void windowDeactivated(WindowEvent event) {;}
public void windowClosing(WindowEvent event) {
System.exit(0);
}
public void windowClosed(WindowEvent event) {;}
public void windowIconified(WindowEvent event) {;}
public void windowDeiconified(WindowEvent event) {;}
Problème : Seule
public void la méthode windowClosing()
windowOpened(WindowEvent event) {;} est utile.
} Mais il a fallu tout implémenter (avec rien!).
Programmation Objet en Java  Prof A. El Faker - 2008
Leçon n°5: Applets et Interfaces Graphiques

3 Gestion des événements


2ème approche : Etendre un adaptateur

 WindowAdapter :
Le WindowListener le plus simple (il ne fait rien)

 Redéfinir par héritage la méthode voulue

private class MyWindowListener extends


WindowAdapter {
public void windowClosing(WindowEvent e){
System.exit(0);
}
}

Programmation Objet en Java  Prof A. El Faker - 2008


Leçon n°5: Applets et Interfaces Graphiques

3 Gestion des événements


3ème approche : Utiliser les classes anonymes
 En une seule instruction:
• Abonnement du composant
• Déclaration de l’écouteur
• Implémentation des méthodes

Très utilisée dans les outils de développement


RAD, tel que JBuilder
frame.addWindowListener(
new WindowAdapter(){
public void windowClosing(WindowEvent eve){
System.exit(0);
}
Classe anonyme
}
);
Programmation Objet en Java  Prof A. El Faker - 2008
Leçon n°5: Applets et Interfaces Graphiques

3 Gestion des événements

Exemple : Scribble

Programmation Objet en Java  Prof A. El Faker - 2008


Leçon n°5: Applets et Interfaces Graphiques

1. Abonner le composant à l’écouteur

(pour intercepter un MouseEvent)

2. Redéfinir les méthodes voulues

Programmation Objet en Java  Prof A. El Faker - 2008


Leçon n°5: Applets et Interfaces Graphiques
public class Scribble extends Applet {
private Point lastP; Graphics g;
public void init() {
lastP = new Point(); g=this.getGraphics();
this.addMouseListener(new MyMouseListener() );
this.addMouseMotionListener(new
MyMouseMotionListener());
}

private class MyMouseListener extends MouseAdapter {


public void mousePressed(MouseEvent e) {
lastP.x = e.getX(); lastP.y = e.getY(); }}
private class MyMouseMotionListener extends
MouseMotionAdapter {
public void mouseDragged(MouseEvent e) {
int x = e.getX(), y=e.getY();
g.drawLine(lastP.x ,lastP.y ,x,y);
lastP.x = x; lastP.y = y;
}}
} Programmation Objet en Java  Prof A. El Faker - 2008
Leçon n°5: Applets et Interfaces Graphiques

Programmation
Objet en java

Programmation Objet en Java  Prof A. El Faker - 2008