Java Poo PDF
Java Poo PDF
Java Poo PDF
Concept et
Développement Objet
en Java
Objectifs du cours
Du procédural à l’objet
Conception par Objet des applications
Nous aborderons
Étude des principaux Outils de la plateforme J2SE
Bibliothèques de classes
Plan de la leçon
Paradigmes de programmation
Concepts Objets
Paradigmes
de
programmation
Programmation structurée
Fortran, Cobol
Maintenance très difficile
Besoin de structurer
Pascal, C (Equation de Niclauss Wirth )
Exactitude /à la spécification
Modifiabilité
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 modulaire
Accès à travers une interface
/
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
FileAttente
- premier Propriétés
- dernier
+ arriver()
+ servir()
+ filePleine() Méthodes
Paradigme Objet
On ajoute la notion d’héritage
Paradigme Objet
On ajoute la notion d’héritage
Paradigme Objet
Résumé
Décider quelles Procédures :
Meilleurs algorithmes
Décider quels Modules :
Masquer les données
Paradigme Objet
Intérêt
Démarche
Objet
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 ?
Démarche Objet
Données
procédure 1
procédure 2
procédure n
Concepts 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
Héritage
Article
Simple référence, désignation
prixHT, quantité
Super classe
prixTransport()
prixTTC()
Sous classe Classe dérivée
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
Héritage
Composition Avion
Bibliothèque
Aile
Document Association
Chat
posséder
Livre
? Genre
Chat noir
Héritage
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)
Agrégation (simple)
Association avec relation de possession
« is part of »
Société Département
Composition
Agrégation mais avec une relation plus
forte
Moteur Piston
Polygone Point
1 1..*
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()
Polymorphisme
Exemple Figure
centre, couleur
position()
périmètre()
afficher()
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
Liaison dynamique
Méthodes virtuelles
Concept et
Développement Objet
en Java
Concept et
Développement Objet
en Java
Plan de la leçon
Historique
Plate-forme Java
Classes Java
Objets Java
Méthodes Java
Historique
Historique
Programmes portables
Windows, Macintosh, Unix
Historique
Plate--forme Java
Plate
Plate-forme Java
Plate-forme Java
_______ Pentium
_______
_____ _____ 0111011010101
javac _______ java
_______ ______
______ PowerPC PowerPC
Plate-forme Java
Gestion de la mémoire
JRE
Programmation Objet en Java Prof A. El Faker - 2008
Leçon n°2 Classes et objets
Classes Java
Classes Java
Classes Java
Classes Java
int double
java.lang.Integer java.lang.Double
Wrappers
Classes d’emballage
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()
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
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”);
2. Créer l’instance
Opérateur new appliqué à un
constructeur de la classe
3. Affecter la référence
Objets Java
Objets Java
Objets Java
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
Objets Java
a b Clonage
xxxxxxx xxxxxxx
b=a.clone()
A.java
public class A implements Cloneable {
private int xy;
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
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
Méthodes d’accès
getPropriété()
Accéder en lecture seule
setPropriété()
Contrôler la validité de la valeur affectée
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
nom nom
Méthodes statiques
Passage de paramètres
Par valeur
int, float, …
Par référence
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; }
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
Programmation
Objet en java
Plan de la leçon
Héritage en Java
Héritage et polymorphisme
Interfaces en Java
Associations en Java
Héritage en Java
Héritage (rappel)
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)
Réutiliser le code
Réutiliser le code
Les sous-classes partagent : Compte
Infos sur le compte + solde, nom, code
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()
Polymorphisme d’héritage
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
Héritage multiple
Redondance
Nommage
de données
Comment Exprimer un
comportement
commun à plusieurs classes ?
Interfaces en Java
Interfaces en Java
Package : Amitié
Partager des connaissances
Interfaces en Java
<<Interface>>
Cloneable Object
+ clone() + ...
implements extends
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()
Interfaces en Java
Runnable
Serialisable
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
Voiture Bateau
+nbPortes : int +longueur
+nom
+accelerer() : void
+freiner():void +accoster() : void
Associations en Java
Associations en Java
Moteur
//Agrégation (simple)
conduit>
//Association
0..1
private Conducteur [] mesConducteurs;
Conducteur // ...
}
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()
Cours
- leProf: Professeur
- setProf()
- removeProf()
unCours
listeCours
0..*
assure>
public class Professeur{
private ArrayList listeCours;
public Professeur() { 0..1
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
assure>
}
0..1
unProf
Professeur
- listeCours:Cours[]
- addCours()
listeCours - removeCours()
unCours
Programmation
Objet en java
Programmation
Objet en java
Plan de la leçon
Collections d’objets
Classes génériques
Mécanisme des exceptions
Collections d’objets
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
Séparation entre
interfaces et implémentations
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
}
Collections abstraites
public interface Iterator<E> {
Java E next();
Iterators boolean hasNext();
void remove();
...
}
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();
...
}
Collection<String> c = ...;
Iterator<String> it = c.iterator();
it.next(); //first element
it.remove(); //remove it
it.remove(); //IllegalStateException
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
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
Collection
ArrayList List
LinkedList LinkedList List
Vector List
HashMap Map
TreeMap SortedMap
HashTable Map
HashSet Set
TreeSet SortedSet
ArrayList List
LinkedList List
Vector List
HashMap Map
TreeMap SortedMap
HashTable Map
ArrayList List
LinkedList List
Vector List
HashMap Map
TreeMap SortedMap
HashTable Map
ArrayList List
LinkedList List
Vector List
HashMap Map
TreeMap SortedMap
HashTable Map
Collections d’objets
Collections d’objets
Stack.java <<interface>>
package monpackage;
public interface Stack {
boolean empty();
Object top();
Object pop();
Object push(Object item);
}
Collections d’objets
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
Ordre et Tri
Ordre et Tri
Ordre et Tri
Classes génériques
Classes génériques
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!
Classes génériques
Classes génériques
Wildcards
? : Type inconnu : wildcard
Collection<?> : Collection d’inconnu
Mécanisme des
exceptions
en Java
Problèmatique
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
MonException
class MonException extends Exception{
public String toString() {
return “Aucune note n’est valide”;
}
}
OutOfMemoryException
ClassNotFoundException
NosuchMethodeException
Programmation
Objet en java
Programmation
Objet en java
Sérialisation en Java
Plan de la leçon
Sérialisation Objet
Entrées/sorties en Java
Basées sur la notion de stream
java.io.* canal de communication entre
écrivain et lecteur
Classe java.io.File
Renommage
Suppression
Droits d’accès d'un fichier
Manipuler les
flux de données
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
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();
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
Flux de données
Principaux streams
File[Input|Output]Stream/File[Reader|Writer]
Streams permettant de lire/écrire dans un fichier
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
Sérialisation Objet
Persistance ?
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 Objet
Conséquence?
Sérialisation Objet
Problématiques
Où est la difficulté ?
Sérialisation Objet
Problématiques
Sérialisation Objet
Problématiques
Sérialisation Objet
Solutions
Sérialisation Objet
Solutions
Sérialisation Objet
Solutions
Comment ?
Le compilateur joint la table des
symboles au fichier de byte-code
généré
Sérialisation Objet
Solutions
Sérialisation Objet
Mode d’emploi
Sérialisation Objet
Mode d’emploi
Sérialisation Objet
Mode d’emploi
ObjectOutputStream
Propose la méthode
writeObjet()
Sérialisation Objet
Mode d’emploi
writeObjet(objet)
et envoyé à OutputStream
Sérialisation Objet
Mode d’emploi
Sérialisation Objet
Mode d’emploi
Sérialisation Objet
Mode d’emploi
objet=(TypeDeObjet)
ObjectInputStream.readObjet();
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);
}
Sérialisation Objet
Sérialisation Objet
Sérialisation Objet
C’est simple !
Marquer la classe comme étant
Sérialisable
implements java.io.Serializable
Sérialisation Objet
C’est simple !
Sérialisation Objet
Sérialisation Objet
transient
Sérialisation Objet
Sérialisation Objet
Fin
Sérialisation Objet
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
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
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
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>
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
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
Au démarrage de l’applet
Après init()
et à chaque fois que la page est revisitée
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
Etapes
1. Charger une image
Méthodes de la classe : java.applet.Applet
Ex. getImage(URL)
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
Conception d’Interface
Graphique
Interfaces graphiques
Deux bibliothèques d’APIs
AWT (Abstract Window Toolkit) java.awt
1 Composants graphiques
2 Gestionnaires de présentation
1 Composants graphiques
java.awt.*
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
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
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
Gestion des
événements en Java
Opération effectuée!
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
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()
button.addActionListener(new MyActionListener());
WindowAdapter :
Le WindowListener le plus simple (il ne fait rien)
Exemple : Scribble
Programmation
Objet en java