Académique Documents
Professionnel Documents
Culture Documents
Programmation Orientée Objet Application Au Langage Java
Programmation Orientée Objet Application Au Langage Java
Serli informatique
Serli : www.serli.com
Socit de services en informatique
Fonde en 1981
Situe sur le site du Futuroscope, Poitiers
Ralisation de logiciels et assistance technique
Domaines de comptences
Systmes dinformations
www.serli.com
Serli informatique
Equipes impliques dans lOpen Source
Utilisation massive de briques Open Source
Formation / diffusion de cours concernant Java et lOpen Source
RMLL : 7me rencontres mondiales du logiciel libre
Solutions Linux 2007 : Salon des Solutions Open Source pour lentreprise
www.serli.com
www.serli.com
Dans les annes 90, vers une maturit des concepts objets
Standardisation de C++
Apparition de langages comme Java ou Python
Cours POO - M. Baron - Page 5
www.serli.com
Programmation Structure
Unit logique : le module
Une zone pour les variables
Une zone pour les fonctions
Structuration descendante du programme
Chaque fonction rsout une partie du problme
Cours POO - M. Baron - Page 6
Principes POO
Programmation par Objets
Unit logique : lobjet
Objet est dfini par
maVoiture
un tat
- couleur = bleue
un comportement
- vitesse = 100
www.serli.com
une identit
tat : reprsent par des attributs (variables) qui stockent des valeurs
Comportement : dfini par des mthodes (procdures) qui modifient
des tats
Identit : permet de distinguer un objet dun autre objet
Cours POO - M. Baron - Page 7
Principes POO
Les objets communiquent entre eux par des messages
Un objet peut recevoir un message qui dclenche :
une mthode qui modifie son tat
et / ou
www.serli.com
dmarre
ma voiture
le moteur
Principes POO
Notion de classe
On regroupe les objets qui ont les mmes tats et les mmes comportements :
cest une classe
Les classes servent de moules pour la cration des objets : un objet est
une instance dune classe
Un programme OO est constitu de classes qui permettent de crer des
objets qui senvoient des messages
Voiture
Nom de la classe
www.serli.com
- puissance : entier
Attributs
- estDmarre : boolen
- vitesse : rel
+ deQuellePuissance() : entier
Mthodes
- Slecteur
+ demarre()
- Modificateurs
+ acclre (rel)
Visibilit
Principes POO
Lensemble des interactions entre les objets dfini un algorithme
Les relations entre les classes refltent la dcomposition du
programme
Moteur
www.serli.com
Voiture
Droulement du cours
Structuration du cours
Prsentation des concepts
Illustration avec de nombreux exemples
Des bulles daide tout au long du cours :
www.serli.com
Organisation ...
www.serli.com
Partie 4 : Hritage
Partie 5 : Hritage et polymorphisme
Partie 7 : Les indispensables : package, collections et
exception
Cours POO - M. Baron - Page 12
Dates cls
1991 : Introduction du langage Oak par James Gosling
1993 : Monte en puissance du Web grce Mosaic (lide dadapter
www.serli.com
www.serli.com
Sr
Orient objet
Portable
Rparti
Performant
Interprt
Multitches
Robuste
Dynamique ...
Byte-Code Java
Code objet destin tre excut sur toute Machine Virtuelle Java
Provient de la compilation du code source
www.serli.com
www.serli.com
Cartes puces
...
Compilation en Byte-Code
javac
MonProgramme.class
java
MonProgramme
www.serli.com
Diffrentes finalits
www.serli.com
Eclipse
NetBeans
JBuilder
IntelliJ
LAPI de Java
Packages
Description
Attributs
Mthodes
www.serli.com
Classes
Ouvrages dinitiation
Programmer en Java (2me dition)
Auteur : Claude Delannoy
diteur : Eyrolles
Edition : 2002 - 661 pages - ISBN : 2212111193
www.serli.com
Java en action
Auteur : Ian F. Darwin
diteur : OReilly
Edition : 2002 - 836 pages - ISBN : 2841772039
Ouvrages de rfrence
www.serli.com
String[] argv
Permet de rcuprer des arguments transmis au programme au
moment de son lancement
System.out.println("Ola ")
Mthode d'affichage dans la fentre console
Cours POO - M. Baron - Page 25
Mise en uvre
Pas de sparation entre dfinition et codage des oprations
Un seul fichier NomDeClasse.java
Pas de fichier den tte comme C/C++
Compilation
www.serli.com
Excution
java NomDeClasse
www.serli.com
Initialisation et constantes
Initialisation
Une variable peut recevoir une valeur initiale au moment de sa dclaration :
int n = 15;
boolean b = true;
www.serli.com
Constantes
Ce sont des variables dont la valeur ne peut affecte qu'une fois
Elles ne peuvent plus tre modifies
Elles sont dfinies avec le mot cl final
final int n = 5;
final int t;
...
t = 8;
n = 10; // erreur : n est dclar final
Structure de contrle
Choix
Si alors sinon : if condition {} else {}
Itrations
www.serli.com
Structure de contrle
Exemple : structure de contrle
www.serli.com
Faisons varier n :
Valeur de n : 0
nul
Adios...
Valeur de n : 1
petit
moyen
Adios...
Valeur de n : 6
grand
Adios...
Se demander si
break est ncessaire
Cours POO - M. Baron - Page 30
Unaires : +a, -b
Binaires : a+b, a-b, a*b, a%b
Incrmentation et dcrmentation : a++, b--
Affectation largie : +=, -=, *=, /=
Oprateurs comparaisons
www.serli.com
Attention : erreur
boolean t = true;
if (t == true) {...}
Prfrer :
boolean t = true;
if (t) {...}
Oprateurs logiques
Et : a && b , a & b
Ou : a || b , a | b
while(compteur != 100) {
// Prend un nombre alatoire
double nbreAleatoir = Math.random() * 1000;
// Etablie un index de 0 10
int index = compteur % 10;
www.serli.com
// Construction de laffichage
System.out.println("Index:" + index +
"Nbre Alatoir:" + (int)nbreAleatoir);
// Incrmentation de la boucle
compteur+= 1;
}
}
}
www.serli.com
a=b
www.serli.com
Des rfrences sur des objets ( voir dans la partie Classes et Objets)
monTableau
null
www.serli.com
int monTableau[];
www.serli.com
0
Cours POO - M. Baron - Page 36
www.serli.com
monTableau
monTab[1] = 2;
monTableau
monTab[2] = 3;
monTableau
est quivalent
monTab = new int[3];
monTab[0] = 1; monTab[1] = 2; monTab[2] = 3;
2 Dimensionnement
monTableau = new int[3];
Ou 12 et 3
int[] monTab = {1, 2, 3};
www.serli.com
3 Initialisation
monTableau[0] = 1;
monTableau[1] = 2;
monTableau[2] = 3;
tab
null
Tableaux rectangulaires
Dimensionnement :
tab
monTableau = new type[2][3]
www.serli.com
Tableaux non-rectangulaires
Dimensionnement :
tab
null
null
tab
www.serli.com
Mise en forme
Facilite la relecture
Crdibilit assure !!!!
Indentation chaque niveau de bloc
if (b == 3) {
if (cv == 5) {
if (q) {
...
} else {
...
}
...
}
...
}
Prfrer
if (b == 3) {
if (cv == 5) {
if (q) {
...
} else {...}
...
}
...
}
viter
Classe et dfinition
Une classe est constitue :
Donnes ce qu'on appelle des attributs
Procdures et/ou des fonctions ce qu'on appelle des mthodes
www.serli.com
Voiture
Nom de la classe
- puissance : entier
Attributs
- estDmarre : boolen
- vitesse : rel
www.serli.com
Mthodes
- Slecteur
- Modificateurs
+ deQuellePuissance() : entier
+ demarre()
+ acclre (rel)
Visibilit
Cours POO - M. Baron - Page 44
Attributs
Slecteur
www.serli.com
Modificateurs
}
Attributs visibles
dans les mthodes
www.serli.com
www.serli.com
Objet et dfinition
Un objet est instance dune seule classe :
Se conforme la description que celle-ci fournit
Admet une valeur propre lobjet pour chaque attribut dclar dans la classe
Les valeurs des attributs caractrisent ltat de lobjet
www.serli.com
Voiture
Relation dinstanciation
instance of
www.serli.com
maClio
- puissance = 4
- estDemarre = true
- vitesse = 179.8
Valeurs des
attributs qui
caractrisent
ltat de lobjet
maClio
Cours POO - M. Baron - Page 50
www.serli.com
instance of
ladaBerline110
maClio
205Gti
- puissance = 6
- puissance = 4
- puissance = 6
- estDmarre = false
- estDmarre = true
- estDmarre = true
- vitesse = 0
- vitesse = 179.8
- vitesse = 250
Cours POO - M. Baron - Page 51
Affectation et comparaison
Affecter un objet
a = b signifie a devient identique b
Les deux objets a et b sont identiques et toute modification de a entrane
celle de b
www.serli.com
Cest--dire si les rfrences sont les mmes, cela ne compare pas les
attributs
a=b
Cours POO - M. Baron - Page 52
Affectation et comparaison
Lobjet maClio et saClio ont les mmes attributs (tats identiques)
mais ont des rfrences diffrentes
maClio != saClio
Voiture
www.serli.com
instance of
saClio
maClio
- puissance = 4
- puissance = 4
- estDmarre = true
- estDmarre = true
- vitesse = 179.8
- vitesse = 179.8
Cours POO - M. Baron - Page 53
Affectation et comparaison
Recopier les attributs dun objet clone()
Les deux objets a et b sont distincts
Toute modification de a nentrane pas celle de b
recopie
www.serli.com
www.serli.com
Partie dynamique
Varie dune instance de classe une autre
Varie durant la vie dun objet
Constitue dun exemplaire de chaque attribut de la classe
Cours POO - M. Baron - Page 55
Utilisation
Usage des Mthodes et des Attributs (non recommand)
Les attributs de lobjet peuvent tre modifis
www.serli.com
monObjet
null
Dclaration
Dfinit le nom et le type de l objet
www.serli.com
monObjet
attribut 1
attribut n
monObjet != null
Cours POO - M. Baron - Page 57
Dclaration
www.serli.com
Cration et
allocation mmoire
Dclaration
www.serli.com
Affectation par
rfrence
Le constructeur de Voiture
Actuellement
On a utilis le constructeur par dfaut sans paramtre
On ne sait pas comment se construit la Voiture
Les valeurs des attributs au dpart sont indfinies et identique pour chaque
objet (puissance, etc.)
www.serli.com
Le constructeur de Voiture
Le constructeur de Voiture
Initialise vitesse zro
Initialise estDmaree faux
Initialise la puissance la valeur passe en paramtre du constructeur
public class Voiture {
www.serli.com
Constructeur
avec un
paramtre
Dclaration
www.serli.com
Cration et
allocation mmoire
avec Voiture(int)
www.serli.com
public Voiture() {
puissance = 4;
estDemaree = false;
vitesse = 0;
}
public Voiture(int p) {
puissance = p;
estDemaree = false;
vitesse = 0;
}...
}
Constructeurs multiples
Intrts
Possibilit dinitialiser un objet de plusieurs manires diffrentes
On parle alors de surchage (overloaded)
Le compilateur distingue les constructeurs en fonction :
de la position des arguments
du nombre
www.serli.com
du type
public Voiture(int p) {
puissance = p; ...
}
public Voiture(int p, boolean estDemaree) {
...
}
www.serli.com
+ v1.puissance);
}
}
www.serli.com
+ deQuellePuissance() : entier
+ demarre()
+ acclre (rel)
+
www.serli.com
// La voiture dmarre
maVoiture.demarre();
if (maVoiture.deQuellePuissance() == 4) {
System.out.println("Pas trs Rapide");
}
// La voiture acclre
maVoiture.acclre(123.5);
}
}
Les objets
Leur rfrence est recopie et non pas les attributs
Leur modification dans la mthode entrane celle de loriginal!!!
Cours POO - M. Baron - Page 68
www.serli.com
Rfrence comme
paramtre
Voiture
+ acclre (rel)
+ compare (Voiture) : entier
+
Cours POO - M. Baron - Page 69
Lobjet courant
Lobjet courant est dsign par le mot cl this
Permet de dsigner lobjet dans lequel on se trouve
self ou current dans dautres langages
Dsigne une rfrence particulire qui est un membre cach
www.serli.com
Le retour dUML
Association : les objets sont smantiquement lis
Exemple : une Voiture est conduite par un Conducteur
www.serli.com
0..1
0..1
Conducteur
Agrgation
4..5
Roue
Moteur
0..1
Galerie
Cours POO - M. Baron - Page 72
www.serli.com
Moteur
}
A discuter : si le moteur
dune voiture est mort ,
il y a la possibilit de le
changer
Cration de l'objet
Moteur
Cours POO - M. Baron - Page 73
www.serli.com
Moteur
}
Voiture
www.serli.com
Moteur
public Voiture(int p) {
leMoteur = new Moteur(p,this);
...
}
...
}
Cration de lobjet
Moteur
Transmission de la
rfrence de
lobjet courant
Cours POO - M. Baron - Page 75
www.serli.com
Voiture
Moteur
www.serli.com
0..1
Galerie
Destruction et ramasse-miettes
La destruction des objets se fait de manire implicite
Le ramasse-miettes ou Garbage Collector se met en route
Automatiquement :
Si plus aucune variable ne rfrence lobjet
Si le bloc dans lequel il tait dfini se termine
Si lobjet a t affect null
Manuellement :
www.serli.com
Destruction et ramasse-miettes
public class Voiture {
private boolean estDemarree;
...
www.serli.com
Force le programme se
terminer
www.serli.com
ou
if (maVoiture.getClass() == Voiture.class) {...} // C est vrai galement
Surcharge
La surcharge (overloading) nest pas limite aux constructeurs, elle
est possible galement pour nimporte quelle mthode
Possibilit de dfinir des mthodes possdant le mme nom mais
dont les arguments diffrent
Quand une mthode surcharge est invoque le compilateur
www.serli.com
Surcharge
Exemple
www.serli.com
Exemple
www.serli.com
Implantation du constructeur
public Voiture(int p) {
this(p, new Galerie());
}
paramtres
...
Encapsulation
Possibilit daccder aux attributs dune classe Java mais pas
recommand car contraire au principe dencapsulation
Les donnes (attributs) doivent tre protgs et accessibles pour lextrieur
par des slecteurs
www.serli.com
classe
www.serli.com
attribut
mthode
- private
Encapsulation
Exemple
public class Voiture {
Longueur
maChaine.length(); // Avec les parenthses car c'est une mthode
www.serli.com
Comparaison
maChaine.equals("Bonjour!"); // Renvoi vrai
Concatnation
String essai = "ess" + "ai";
String essai = "ess".concact("ai");
www.serli.com
String s = mCM.toString();
www.serli.com
Un exemple :
StringTokenizer st =
new StringTokenizer("Bonjour,
le monde|de|Java",", |");
while(st.hasMoreElements())
System.out.println("Element : " + st.nextElement());
Variables de classe
Il peut tre utile de dfinir pour une classe des attributs
indpendamment des instances : nombre de Voitures cres
Utilisation des Variables de classe comparables aux variables
globales
www.serli.com
Variables de classe
Elles sont dfinies comme les attributs mais avec le mot-cl static
public static int nbVoitureCreees;
Voiture.nbVoitureCreees = 3;
Constantes de classe
Usage
Ce sont des constantes lies une classe
Elles sont crites en MAJUSCULES
www.serli.com
www.serli.com
Utilisation de Variables
et Constantes de classe
par le nom de la classe
Voiture
System.out.println("Poids maxi:" +
Voiture.PTAC_MAX);
System.out.println(Voiture.nbVoitureCreees);
...
}
}
Mthodes de classe
Usage
Ce sont des mthodes qui ne s'intressent pas un objet particulier
Utiles pour des calculs intermdiaires internes une classe
Utiles galement pour retourner la valeur d'une variable de classe en
visibilit private
www.serli.com
Mthodes de classe
Exemple
public class Voiture {
private static int nbVoitureCreees;
...
public static int getNbVoitureCreees(){
return Voiture.nbVoitureCreees;
}
Dclaration d'une
variable de classe prive.
Respect des principes
d'encapsulation.
www.serli.com
Dclaration d'une
mthode de classe pour
accder la valeur de la
variable de classe.
public Voiture(Galerie g) {
laGalerie = g;
...
}
public static boolean isGalerieInstall() {
return (laGalerie != null)
}
www.serli.com
Erreur : Utilisation
d'un attribut non
statique dans une zone
statique
Cours POO - M. Baron - Page 96
Mthodes de classe
Rappel : chacun des types simples (int, double, boolean, char)
possde un alter-ego objet disposant de mthodes de conversion
Par exemple la classe Integer encapsule le type int
Constructeur partir dun int ou dune chane de caractres
public Integer(int value);
public Integer(String s);
www.serli.com
Des mthodes de classe trs utiles qui permettent partir dune chane de
caractres de transformer en type simple ou type object
String maValueChaine = new String("12313");
int maValuePrimitif = Integer.parseInt(maValueChaine);
2 Dimensionnement
monTableau = new Voiture[3];
www.serli.com
3 Initialisation
Ou 12 et 3
Voiture[] monTab = {
new Voiture(5),
new Voiture(7),
new Voiture(8)
};
Dfinition et intrts
Hritage
Technique offerte par les langages de programmation pour construire une
classe partir dune (ou plusieurs) autre classe en partageant ses attributs
et oprations
Intrts
www.serli.com
Voiture
+ dmarre()
Relation dhritage
VehiculePrioritaire
VoitureElectrique
- gyrophare : boolen
- disjoncteur : boolen
+ allumeGyrophare()
+ dmarre()
Cours POO - M. Baron - Page 101
Classes et sous-classes
Un objet de la classe VehiculePrioritaire ou VoitureElectrique est
aussi un objet de la classe Voiture donc il dispose de tous les attributs
et oprations de la classe Voiture
VoitureElectrique
- gyrophare : boolen
- disjoncteur : boolen
+ allumeGyrophare()
+ dmarre()
- puissance : entier
- puissance : entier
- estDmarre : boolean
- vitesse : flottant
+ deQuellePuissance() : entier
+ dmarre()
+ acclre(flottant)
Hrit de Voiture
Hrit de Voiture
www.serli.com
VehiculePrioritaire
- estDmarre : boolean
- vitesse : flottant
+ deQuellePuissance() : entier
+ dmarre()
+ acclre(flottant)
www.serli.com
Attention
Un objet de la classe VehiculePrioritaire ou VoitureElectrique est
forcment un objet de la classe Voiture
Un objet de la classe Voiture nest pas forcment un objet de la classe
VehiculePrioritaire ou VoitureElectrique
Cours POO - M. Baron - Page 103
Gnralisation et Spcialisation
La gnralisation exprime une relation est-un entre une classe et
Super-classe
www.serli.com
Sous-classe
VehiculePrioritaire
Lhritage permet
Abstraction
Voiture
Raffinement
sa super-classe
Exemple dhritage
Exemple
Mammifre
www.serli.com
Ctac
Humain
Baleine
Dauphin
Etudiant
Enseignant
Mobi Dick
Ecco
Raoul
Mickal
Cours POO - M. Baron - Page 105
Hritage et Java
Hritage simple
Une classe ne peut hriter que dune seule autre classe
Dans certains autres langages (ex : C++) possibilit dhritage multiple
Utilisation du mot-cl extends aprs le nom de la classe
public class VehiculePrioritaire extends Voiture {
private boolean gyrophare;
...
www.serli.com
Voiture
VehiculePrioritaire
- gyrophare : boolen
+ allumeGyrophare()
Voiture
+ dmarre()
VehiculePrioritaire
www.serli.com
+ allumeGyrophare()
Ambulance
- malade : String
+ chercher(String)
Ambulance am =
new
Ambulance(...);
am.dmarre();
am.allumeGyrophare();
am.chercher("Didier");
Surcharge et redfinition
Lhritage
Une sous-classe peut ajouter des nouveaux attributs et/ou mthodes ceux
quelle hrite (surcharge en fait partie)
Une sous-classe peut redfinir (redfinition) les mthodes ceux dont elle
hrite et fournir des implmentations spcifiques pour celles-ci
www.serli.com
Surcharge et redfinition
Une voiture lectrique est une voiture dont lopration de dmarrage
est diffrente
Une voiture lectrique rpond aux mme messages que la Voiture
On dmarre une voiture lectrique en activant un disjoncteur
Voiture
www.serli.com
+ dmarre()
VoitureElectrique
- disjoncteur : boolen
+ dmarre()
Redfinition de la
mthode
Cours POO - M. Baron - Page 109
Surcharge et redfinition
public class Voiture {
...
public void demarre() {
...
}
}
www.serli.com
Redfinition
VoitureElectrique possde au
plus une mthode de moins
que VehiculePrioritaire
Surcharge
VehiculePrioritaire possde
au plus une mthode de
plus que VoitureElectrique
Cours POO - M. Baron - Page 110
www.serli.com
dsire utiliser
super.nomSuperClasseMethodeAppelee(...);
www.serli.com
www.serli.com
super(paramtres du constructeur);
public Voiture() {
this(7, new Galerie());
}
www.serli.com
public Voiture(int p) {
this(p, new Galerie());
}
Implantation du constructeur
de VoiturePrioritaire partir
de Voiture
www.serli.com
www.serli.com
public class A {
public A() {
public void afficherInformation() {
super();
System.out.println("Des Informations..."); }
}
}
public class B {
private String pInfo;
public B(String pInfo) {
this.pInfo = pInfo;
}
super();
}
public class Test {
public static void main (String[] argv) {
new B("Message du main");
}
}
Cours POO - M. Baron - Page 116
Constructeurs explicites
dsactivation du constructeur
par dfaut
www.serli.com
}
public class VoiturePrioritaire
extends Voiture {
private boolean gyrophare;
super();
www.serli.com
+ Class getClass()
+ String toString()
+ boolean equals(Object)
+ int hashCode()
Aprswww.serli.com
redfinition
Avant redfinition
.ln(maVoiture.toString());
public class Test {
public static void main (String[] argv) {
public String toString() {
Voiture maVoiture = new Voiture(3);
return("Puissance:" + p);
System.out.println(maVoiture);
}
}
}
Redfinition de la mthode
String toString()
Cours POO - M. Baron - Page 119
Voiture
# dmarre()
VehiculePrioritaire
+ dmarre(int code)
VehiculeElectrique
+ dmarre()
Cours POO - M. Baron - Page 120
www.serli.com
www.serli.com
Dfinition du polymorphisme
Dfinition
Un langage orient objet est dit polymorphique, sil offre la possibilit de
pouvoir percevoir un objet en tant quinstance de classes varies, selon les
besoins
Une classe B qui hrite de la classe A peut tre vue comme un sous-type du
type dfini par la classe A
Voiture
www.serli.com
+ dmarre()
Rappel
voitureLarochelle est une instance de la
classe VoitureElectrique
VoitureElectrique
+ dmarre()
+ getVoltage() : int
Mais aussi
voitureLarochelle est une instance de la
classe Voiture
voitureLarochelle
Cours POO - M. Baron - Page 124
www.serli.com
+ dmarre()
VoitureElectrique
+ dmarre()
+ getVoltage() : int
}
}
voitureLarochelle
www.serli.com
Examiner le type de la
rfrence
www.serli.com
Voiture
+ dmarre()
voitureLarochelle
voitureLarochelle.demarre();
}
}
Voiture
+ dmarre() {
estDemarre = true;
}
www.serli.com
voitureLarochelle.demarre()
VoitureElectrique
+ dmarre() {
super.dmarre();
disjoncteur = true;
}
Cours POO - M. Baron - Page 128
www.serli.com
Point
Pointcol
www.serli.com
Point
Pointcol
www.serli.com
Surclassement (compilation)
Une variable maVoit est dclare comme tant
une rfrence vers un objet de la classe Voiture
Voiture
+ dmarre() {
estDemarre = true;
}
www.serli.com
VoitureElectrique
+ dmarre() {
super.dmarre();
disjoncteur = true;
}
www.serli.com
www.serli.com
+ afficher()
Rectangle
- largeur : int
- hauteur : int
+ afficher()
- liste : Forme[ ]
+ ajouter(Forme)
+ afficherForme()
Cercle
- rayon : int
+ afficher()
www.serli.com
Polymorphisme : downcasting
Intrt
Force un objet librer les fonctionnalits caches par le surclassement
On parle de conversion de type explicite (cast). Dj vu pour les types primitifs
ClasseA monObj = ...
ClasseB b = (ClasseB) monObj
ClasseA
www.serli.com
ClasseB
Polymorphisme : downcasting
Exemple
public class Test {
public static void main (String[] argv) {
Forme maForme = new Rectangle();
// Je ne peux pas utiliser les mthodes de la classe Rectangle
// Dclaration dun objet de type Rectangle
Rectangle monRectangle;
if (maForme instanceof Rectangle) {
monRectangle = (Rectangle)maForme;
// Utilisation possible des mthodes spcifiques de Rectangle
}
}
www.serli.com
Ralisation de la
conversion de lobjet de
type Forme en objet de
type Rectangle
Cours POO - M. Baron - Page 137
La mthode equals()
Deux possibilits pour comparer des objets dune classe
Crer une mthode ad-hoc public boolean comparer(MaClasse c) {} qui
compare les attributs
Redfinir la mthode public boolean equals(Object o) pour garder la
compatibilit avec les autres classes de Java.
Re-implmenter la mthode public boolean equals(Object o) en
comparant les attributs (en utilisant une conversion de type explicite)
Object
www.serli.com
+ boolean equals(Object)
Voiture
- puissance : int
- estDmarre : int
- vitesse : reel
Rappel de la classe
Voiture
La mthode equals()
public class Voiture extends Object {
public boolean equals(Object o) {
if (!o instanceof Voiture) {
return false;
}
Redfinition de la mthode
equals de la classe Object
www.serli.com
www.serli.com
Hrite de Voiture
Dfinit un attribut protg toitRepli
Dfinit une mthode abstraite replieLeToit()
VoitureDecapotable {abstraite}
# toitRepli : boolen
+ replieLeToit() {abstraite}
www.serli.com
DeuxChevaux
C3Pluriel
- capoteAttache : boolen
- arceauxRetirs : boolen
+ replieLeToit()
+ replieLeToit()
Cours POO - M. Baron - Page 142
Classe
abstraite
Mthode
abstraite
www.serli.com
}
public class C3Pluriel extends VoitureDecapotable {
private boolean arceauxRetirs;
public void replieLeToit() {
this.toitReplie = true;
this.arceauxRetirs = true;
}
www.serli.com
Attention : La classe
VoitureDecapotable ne
peut tre instancie
puisquelle est abstraite
Cours POO - M. Baron - Page 144
+ deplace(x,y)
+ surface() : double {abstraite}
+ primtre() : double {abstraite}
www.serli.com
Cercle
Rectangle
- rayon : int
+ surface() : double
+ primtre() : double
+ surface() : double
+ primtre() : double
Pas dimplmentation !!
Notion dinterface
Une interface est un modle pour une classe
Quand toutes les mthodes dune classe sont abstraites et il ny a aucun attribut
on aboutit la notion dinterface
Elle dfinit la signature des mthodes qui doivent tre implmentes dans les
classes qui respectent ce modle
Toute classe qui implmente linterface doit implmenter toutes les mthodes
dfinies par linterface
Tout objet instance dune classe qui implmente linterface peut tre dclar
comme tant du type de cette interface
Les interfaces pourront se driver
www.serli.com
Exemple :
Les choses Dmarrable doivent possder une mthode dmarre()
Voiture
Dmarrable << Interface >>
+ dmarre
Ordinateur
Cours POO - M. Baron - Page 146
Interface : ne pas
confondre avec les
interfaces graphiques
www.serli.com
Si une classe hrite dune autre classe elle peut galement implmenter une ou
plusieurs interfaces
public class NomClasses extends SuperClasse implements Interface1, ... {
...
}
www.serli.com
Ordinateur
www.serli.com
www.serli.com
www.serli.com
Consquences
La dfinition de mthodes de linterface mre
Utilisation
Lorsquun modle peut se dfinir en plusieurs sous-modles complmentaires
Cours POO - M. Baron - Page 152
www.serli.com
Une autre classe peut en hriter mais doit donner une implmentation aux
mthodes abstraites
Elles ne peuvent pas tre instancies mais peuvent avoir un constructeur
Les interfaces
Elles ne sont pas implmentes
Toute classe qui implmente une ou plusieurs interfaces doit implmenter
toutes leurs mthodes (abstraites)
Cours POO - M. Baron - Page 153
Linterface Cloneable
Deux possibilits pour dupliquer un objet de ses classes
Crer une mthode ad-hoc public MaClasse dupliquer() qui retourne une
copie de lobjet en ayant cr une nouvelle instance et initialis les attributs
(en utilisant le constructeur)
saClio
- puissance = 4
- estDmarre = true
- vitesse = 179.8
maClio
recopie
- puissance = 4
- estDmarre = true
- vitesse = 179.8
www.serli.com
www.serli.com
Classes anonymes
Sont des instanciations de classes et des
implmentations dune classe abstraite
ou dune interface
La ou les mthodes abstraites doivent tre
implmentes au moment de linstanciation
Demarrable uneInstance =
new Demarrable(){
public void demarre() {
// Code ici
}
};
classe
classe anonyme
classe interne
Gnration de byte-code : 3 fichiers
classe Voiture.class
anonyme Voiture$1.class
www.serli.com
interne Voiture$Moteur.class
public Voiture(...) {
monMoteur = new Moteur(...);
Initialisable monInit = new Initialisable() {
public void initialisation() {
...
}
};
}
class Moteur {
...
public Moteur(...) {
...
}
}
Classe interne
Les packages
Le langage Java propose une dfinition trs claire du mcanisme
dempaquetage qui permet de classer et de grer les API externes
Les API sont constitues :
API
0..*
Paquetage
0..*
Classe
0..*
0..*
0..*
Mthode
Attribut
www.serli.com
Interface
www.serli.com
Nom complet
de la classe
java.util.Date
www.serli.com
ou
import mesclasses.*;
import java.lang.*; // Ne sert rien puisque par dfaut
import java.io.*;
Classe
mesclasses
www.serli.com
Exemple : mesclassses.ex1.Voiture
ex1
mesclasses
Package (mesclasses)
Sous-package (ex1)
Classe (Voiture.java)
Cours POO - M. Baron - Page 161
www.serli.com
lang
util
math
String.java
Geom
Package voiture :
voiture.modele.VoitureElectrique
voiture.modele.Voiture
voiture.test.Test
www.serli.com
voiture
modele
VoitureElectrique.java
test
Voiture.java
Test.java
www.serli.com
www.serli.com
java voiture.test.Test
www.serli.com
/**
et
*/
/**
www.serli.com
*/
/**
* Description de la mthode
* Autres caractristiques
*/
public Voiture(...) {
...
}
}
Utilisation
Lentit documente est prcde par son commentaire
www.serli.com
www.serli.com
www.serli.com
Jar
Jar et intrts
Larchiveur jar est loutil standard pour construire les archives qui ont le
mme objectif que les bibliothques de programmes utilises par certains
langages de programmation (lib par exemple)
java verbose HelloWorld
www.serli.com
Le . indique le
rpertoire courant
Cours POO - M. Baron - Page 171
Jar
Utilisation pour la cration (suite)
Utilisation dun fichier manifeste (MANIFEST.MF) qui prcise un ensemble
dattributs pour excuter dans de bonnes conditions lapplication
Lattribut Main-class par exemple permet de connatre la classe principale
excuter
Manifest-Version: 1.0
Created-By: 1.4.1_01 (Sun Microsystems Inc.)
Main-class: HelloWorld
MANIFEST.MF
www.serli.com
Exception
Dfinition
Une exception est un signal qui indique que quelque chose dexceptionnel
(comme une erreur) sest produit. Elle interrompt le flot dexcution normal
du programme
A quoi a sert
Grer les erreurs est indispensable :
Mauvaise gestion peut avoir des consquences catastrophiques (Ariane 5)
www.serli.com
Vocabulaire
Lancer ou dclencher (throw) une exception consiste signaler les erreurs
Capturer ou attraper (catch) une exception permet de traiter les erreurs
Cours POO - M. Baron - Page 173
Exception
Premier exemple : lancer et capturer une exception
public class Point {
... // Dclaration des attributs
... // Autre mthodes et constructeurs
public Point(int x, int y) throws ErrConst {
if ((x < 0) || (y < 0)) throw new ErrConst();
this.x = x ; this.y = y;
}
www.serli.com
La classe
ErrConst nest
pas encore
dfinie. A voir
plus tard
Exception : mcanisme
Explication
Lorsquune situation exceptionnelle est rencontre, une exception est lance
Si elle nest pas traite, elle est transmise au
bloc englobant, , jusqu ce quelle soit
traite ou parvienne en haut de la pile dappel.
Mthode n
bloc 1
bloc 1.1
www.serli.com
Mthode 1
bloc 2.1
bloc 2.1.1
Mthode 2
appel de
mthode
transmission
d'exception
bloc 2.1.2
Mthode n
bloc 2.2
Permet au constructeur
Point de lancer une
exception ErrConst
www.serli.com
Cration dune
nouvelle valeur
dexception
www.serli.com
Ces blocs permettent de capturer les exceptions dont le type est spcifi et
dexcuter des actions adquates
Cours POO - M. Baron - Page 177
www.serli.com
System.exit(-1);
}
...
}
}
Exception : modlisation
Les exceptions en Java sont considres comme des objets
Toute exception doit tre une instance dune sous-classe de la classe
java.lang.Throwable
Erreurs non rcuprables.
Plantage de lapplication
www.serli.com
Error
Throwable
Exception
NullPointerException
ErrConst
Exception : modlisation
Les exceptions sont des objets nous pouvons donc dfinir
Des attributs particuliers
Des mthodes
Exception
- message : String
www.serli.com
+ Exception()
+ Exception(String)
+ getMessage() : String
+ printStackTrace()
+
ErrConst
Exception : modlisation
Utilisation de lobjet ErrConst
Affichage de lerreur
System.out.println(e.getMessage());
e.printStackTrace();
www.serli.com
System.exit(-1);
}
...
}
www.serli.com
...
public class Test {
public static void main(String[] argv) {
try {
... // Bloc dans lequel on souhaite dtecter
les exceptions ErrConst et ErrDepl
} catch (ErrConst e) {
System.out.println("Erreur Construction");
System.exit(-1);
} catch (ErrDepl e) {
System.out.println("Erreur Dplacement");
System.exit(-1);
}
}
}
Dfinition dune
nouvelle mthode qui
lance une exception
Attrape la nouvelle
exception de type
ErrDepl
www.serli.com
www.serli.com
www.serli.com
www.serli.com
ErrConst permet de
connatre les valeurs
qui ont fait chouer la
construction de Point
Exception : finally
Bloc finally : cest une instruction optionnelle qui peut servir de
nettoyage . Elle est excute quelle que soit le rsultat du bloc try
(cest--dire quil ait dclench une exception ou non)
Permet de spcifier du code dont lexcution est garantie quoi quil
arrive
www.serli.com
Intrt double :
Rassembler dans un seul bloc un ensemble dinstructions qui autrement
auraient du tre dupliques
Effectuer des traitements aprs le bloc try, mme si une exception a t leve
et non attrape par les blocs catch
Cours POO - M. Baron - Page 187
Exception : finally
public class Test {
public static void main(String[] argv) {
try {
... // Bloc dans lequel on souhaite dtecter
les exceptions ErrConst et ErrDepl
} catch (ErrConst e) {
System.out.println("Erreur Construction");
System.out.println("Fin du programme");
System.exit(-1);
} catch (ErrDepl e) {
System.out.println("Erreur Dplacement");
System.out.println("Fin du programme");
System.exit(-1);
}
}
public class Test {
}
public static void main(String[] argv) {
try {
... // Bloc dans lequel on souhaite dtecter
les exceptions ErrConst et ErrDepl
} catch (ErrConst e) {
System.out.println("Erreur Construction");
} catch (ErrDepl e) {
System.out.println("Erreur Dplacement");
} finally {
System.out.println("Fin du programme");
System.exit(-1);
}
}
}
www.serli.com
Au moyen du mot cl
finally, il est possible
de factoriser
www.serli.com
erreurType lireFichier() {
int codeErreur = 0;
// Ouvrir le fichier
if (isFileIsOpen()) {
// Dtermine la longueur du fichier
if (getFileSize()) {
// Vrification de lallocation de la mmoire
if (getEnoughMemory()) {
// Lire le fichier en mmoire
if (readFailed()) {
codeErreur = -1;
}
} else {
codeErreur = -2;
}
} else {
codeErreur = -3;
}
// Fermeture du fichier
if (closeTheFileFailed()) {
codeErreur = - 4;
}
} else {
codeErreur = - 5;
}
www.serli.com
La lisibilit
void lireFichier() {
try {
// Ouvrir le fichier
// Dtermine la longueur du fichier
// Vrification de lallocation de la mmoire
// Lire le fichier en mmoire
// Fermer le fichier
} catch (FileOpenFailed) {
...
} catch (FileSizeFailed) {
...
} catch (MemoryAllocFailed) {
...
} catch (FileReadFailed) {
...
} catch (FileCloseFailed) {
...
}
}
www.serli.com
Les flux
Pour obtenir des donnes, un programme ouvre un flux de donnes
sur une source de donnes (fichier, clavier, mmoire, etc)
De la mme faon pour crire des donnes dans un fichier, un
programme ouvre un flux de donnes
www.serli.com
Les flux
En Java, le nombre de classes intervenant dans la manipulation des
flux est important (plus de 50)
Java fournit quatre hirarchies de classes pour grer les flux de
donnes
Pour les flux binaires :
La classe InputStream et ses sous-classes pour lire des octets
(FileInputStream)
www.serli.com
FileReader hrite de
Reader et permet de
manipuler un flux texte
associ un fichier
}
}
Fermeture du flux
myFile vers le fichier
a_ecrire.txt
Convertit un objet
de type InputStream
en Reader
www.serli.com
is.close();
} catch (Exception e) {
System.out.println("Intercept : " + e);
}
if (inputLine != null)
System.out.println("Votre nom est :" + inputLine);
}
}
Chane saisie
Cours POO - M. Baron - Page 195
texte associ un
www.serli.com
fichier texte
in.close();
out.close();
Transfert de donnes
jusqu ce que in ne
fournisse plus rien
}
}
www.serli.com
La classe File
Java dispose dune classe File qui offre des fonctionnalits de gestion
de fichiers
La cration dun objet de type File
File monFichier = new File("truc.dat");
File
Cration du fichier
portant le nom de name
www.serli.com
- name : String
+ File(String nf)
+ createNewFile()
+ delete() : boolen
+ exists() : boolen
+ getName() : String
+ isFile() : boolen
+
Vrifie si le fichier
existe physiquement
File monFichier = new File("c:\toto.txt");
if (monFichier.exists()) {
monFichier.delete();
} else {
monFichier.createNewFile();
}
Les collections
Pour linstant nous avons tudi le tableau pour structurer les
donnes
Taille statique
Lent pour la recherche dlments particuliers
Impossibilit dutiliser un pattern de dplacement dans les lments
www.serli.com
Les collections
Ces classes implmentent toutes indirectement une mme interface
Collection quelles compltent de fonctionnalits propres
Collection << Interface >>
HashSet
TreeSet
www.serli.com
HashSet
LinkedList
ArrayList
Les collections
Linterface Collection permet
La gnricit et rfrences : possibilit de stocker des lments de type
quelconque, pour peu quil sagisse dobjets. Un nouvel lment introduit dans
une collection Java est une rfrence lobjet et non une copie
Les itrateurs : ils permettent de parcourir un par un les diffrents lments
www.serli.com
dune collection
Efficacit des oprations sur des collections
Oprations communes toutes les collections : les collections que nous allons
tudier implmentent toutes au minimum linterface Collection, de sorte
quelle disposent de fonctionnalits communes
Cours POO - M. Baron - Page 201
www.serli.com
bidirectionnels
Le parcours de la collection peut se faire dans les deux sens ; on peut avancer
et reculer sa guise dans la collection
La notion dIterator fait
partie de lensemble des
Design Patterns
www.serli.com
Supprime le dernier
objet renvoy par
next()
Permet dobtenir
lobjet courant et
passe au suivant
while (iter.hasNext()) {
On vrifie sil y a
possibilit de
rcuprer un objet
??? o = iter.next();
...
}
On rcupre lobjet
courant puis on
passe au suivant
Cours POO - M. Baron - Page 204
www.serli.com
Vrifie sil y a un
prcdent
On vrifie sil y a
possibilit de
rcuprer un objet
prcdemment
Rcupre lobjet
prcdemment puis on
passe au prcdent
Ajoute ou modifie la
position courante un
lment de la collection
??? o = iter.previous();
...
}
www.serli.com
Plus rien
aprs ses
lments,
on fait un
retour en
arrire
iter.add("Bonjour");
iter.add("Coucou");
while(iter.hasPrevious()) {
String o = iter.previous();
System.out.println(o);
}
www.serli.com
Utilisation
de la
mthode
add de la
classe
LinkedList
Lutilisation
de la
LinkedList
nest pas
transparente.
Connaissance
obligatoire de
ces mthodes
www.serli.com
myArrayList.add("Coucou");
myArrayList.add(34);
for (int i = 0; i < myArrayList.size(); i++) {
Object myObject = myArrayList.get(i);
if (myObject instanceof String) {
System.out.println("Chane:" + ((String)myObject));
}
if (my_object instanceof Integer) {
System.out.println("Integer:" + ((Integer)myObject));
}
}
Prfrer
lutilisation de la
classe ArrayList au lieu de la
classe Vector
www.serli.com
}
}
www.serli.com
Point(int x, int y) {
this.x = x; this.y = y;
}
public int hashCode() {
return x+y;
}
public boolean equals(Object pp) {
Point p = (Point)pp;
return ((this.x == p.x) &
(this.y == p.y));
}
public void affiche() {
System.out.print("[" + x + " "
+ y + "] ");
}
Redfinition des
mthodes hashCode() et
equals(Object)