POO Java
POO Java
2
Acquis d’apprentissage du chapitre
A la fin du module, l’apprenant doit :
3
PLAN
• INTRODUCTION
• NOTIONS DE BASES
• CLASSE ET OBJET
• ENCAPSULATION
• HÉRITAGE
• POLYMORPHISME
• EXCEPTIONS
• INTERFACES
• COLLECTIONS
• STREAM
4
01 Introduction à la POO
5
Prog classique vs POO
✔Approche procédurale :
"Que doit faire mon programme ? "
✔Approche orientée-objet :
"De quoi doit être composé mon programme ?"
La programmation classique telle que étudiée au travers des langages C, Pascal… définie un programme
⮚
comme étant:
⮚
Un ensemble de données sur lesquelles agissent des procédures et des fonctions.
Les données constituent la partie passive du programme. Les procédures et les fonctions constituent
la partie active;
Programmer dans ce cas revenait à:
6
Programmation Orientée Objet
C’EST QUOI ?
✔Un objet est une entité logicielle: ✔Un programme est constitué d’un
ensemble d’objets chacun disposant d’une
⮚ Identité partie procédures et d’une partie
⮚ Attributs données. Les objets interagissent par
⮚ Comportement ( Operations ) envoie de messages.
✔Ces opérations sont appelées ✔Un objet peut recevoir un msg qui
méthodes. Ce sont des fonctions liées à déclenche:
des objets et qui précisent le ⮚ Une méthode qui modifie son état ou
comportement de ces objets. ⮚ Une méthode qui envoie un msg à un
autre objet
✔Attributs :Les attributs d’un objet sont
l’ensemble des informations se
présentant sous forme de variable et
permettant de représenter l’état de
l’objet.
7
Programmation Orientée Objet
C’EST QUOI ?
C C++
Pascal Scala
8
02 LANGAGE PROGRAMMATION JAVA
9
Langage de programmation Java
C’est quoi?
10
Langage de programmation JAVA
C’EST QUOI ?
➢ Un programme Java est compilé et interprété
➢ Un langage de programmation orienté objet ➢ Simplicité et productivité, car il intègre complètement les concepts de
➢ Java est portable : c’est-à-dire qu’il est l’OO avec une gestion de mémoire efficace « Garbage collector »
indépendant de toute plateforme. ➢ Robustesse, fiabilité et sécurité
➢ Indépendance par rapport aux plateformes
→Les types d’applications pour « Java »
Java Embedded →Java est aussi une plateforme : JAVA Platform constituée de Java virtual
Machine (JVM) et interfaces de programmation d’application (API Java)
11
Langage de programmation JAVA
C’EST QUOI ?
→API (Application Programming Interface)
→JVM (JAVA Virtual Machine) ✔L’API Java est structuré en libraires (packages).
Une machine virtuelle est un ordinateur
fictif s’exécutant sur un ordinateur réel : ✔ Le noyau (core) de l’API Java (inclus dans toute implémentation
▪ Possède un langage natif propre et complète de la plateforme Java) comprend notamment :
traduit un programme écrit dans ce
langage vers le langage natif de ▪ Essentials (data types, objects, string, array, vector,
l’ordinateur. I/O,date,…)
▪ Définit les spécifications hardware de ▪ Applet
la plateforme. ▪ Abstract Windowing Toolkit (AWT)
▪ Lit le bytecode compilé (indépendant ▪ Basic Networking (URL, Socket –TCP or UDP-,IP)
de la plateforme) ▪ Evolved Networking (Remote Method Invocation)
▪ Internationalization
▪ Security
12
Langage de programmation Java
Premier Pas
13
Langage de programmation Java
Premier Programme
14
03 NOTIONS DE BASES en JAVA
15
PLAN PLAN
• VARIABLES
• OPÉRATEURS & STRUCTURES DE DONNÉES
• STRUCTURES CONDITIONNELLES
• STRUCTURES ITÉRATIVES
16
Notions de bases en programmation
Langage Java
LES OPÉRATEURS ?
LES VARIABLES? • Les opérateurs en Java permettent d’effectuer des opérations sur les données. Les
opérateurs arithmétiques comprennent +, -, *, / et %. Les opérateurs de comparaison
• En Java, les variables sont des espaces comprennent ==, !=, , <= et >=. Les opérateurs logiques comprennent ! (NON), ||
mémoire réservés pour stocker des données. (OU) et (ET).
Chaque variable a un type qui détermine le Exemple : int resultat = (5 + 2) * 3;
type de données qu’elle peut stocker. Les
types de base en Java sont : int,long (entier),
double,float (nombre à virgule flottante),
boolean (true/false) et char (caractère).
Exemple :
17
Notions de bases en programmation
Langage Java
18
Notions de bases en programmation
Langage Java
19
Notions de bases en programmation
Langage Java
20
04 Concepts Orientée Objet en JAVA
21
PLAN PLAN
• CLASSE ET OBJET
• ENCAPSULATION
• HÉRITAGE
• POLYMORPHISME
• ABSTRACTIONS AVEC INTERFACES
22
Programmation Orientée Objet Java
C’est quoi?
DÉFINITION POO
La POO est un ensemble d’outils (classes) que tu peux utiliser pour créer des objets
avec des attributs et des méthodes. Ces objets peuvent interagir entre eux pour
accomplir des tâches complexes. La POO te permet de construire des programmes
modulaires et faciles à comprendre, tout comme tu peux construire des meubles à partir
d’une boîte à outils.
→Exemple
Par exemple, vous pouvez créer un objet ”voiture” qui a des attributs tels que la
marque, le modèle et la couleur, et des méthodes telles que ”démarrer” et ”arrêter”. Tu
peux également créer un objet ”conducteur” qui a des attributs tels que le nom et l’âge,
et des méthodes telles que ”conduire” et ”s’arrêter”. En combinant ces objets, tu peux
créer un programme qui simule la conduite d’une voiture.
23
Classe et Objet
→ Objectifs
✔ Notion de classe et d’objet
✔ Déclaration de classe
✔ Déclarations des attributs et des méthodes
✔ Les types des variables (primitives et objets)
✔ Notion de référence
✔ Les constructeurs
24
Programmation Orientée Objet Java
Classe et objet? →Qu’est ce qu’une classe ?
Une classe est un plan ou un prototype défini par l’utilisateur à partir duquel
→ des objets sont instanciés.
• Le concept d’utilisation de classes et Il représente l’ensemble des propriétés ou méthodes communes à tous les
d’objets consiste à encapsuler l’état et objets d’un même type.
le comportement dans une seule unité Lorsque vous créez une classe java, vous devez suivre cette règle: le nom du fichier
de programmation.
• Les objets Java sont similaires aux et le nom de la classe doivent être les mêmes.
objets du monde réel. Voiture écrit avec une majuscule V n’est pas la même chose que voiture, écrit avec
• Par exemple, nous pouvons créer une une minuscule v.
classe voiture en Java, qui aura des
propriétés telles que la vitesse actuelle
et l’immatriculation ; et un
comportement comme: rouler et
changerPneu….
25
Programmation Orientée Objet Java
Classe et objet?
→Méthodes →Instanciation de classe
→Notion classe : noms de la classe Une méthode est une fonction définie Pour instancier une classe, c'est-à-dire créer un objet
Un objet est donc « issu » d'une classe, dans une classe qui permet à l’objet de à partir d'une classe, il s'agit d'utiliser l'opérateur
c'est le produit qui sort d'un moule. la classe d’effectuer une action ou de new.
En réalité on dit qu'un objet est une renvoyer une valeur. Les méthodes
En réalité l'opérateur new, lorsqu'il est utilisé, fait
instanciation d'une classe. définies dans une classe peuvent être
utilisées pour modifier les propriétés de appel à une méthode spéciale de la classe: le
objet = instance
Une classe est composée de deux l’objet, pour effectuer des calculs ou constructeur.
parties : pour effectuer des opérations plus
• Les attributs (parfois appelés complexes.
données membres) :
• il s'agit des données représentant Le rôle d’un constructeur est de déclarer et de
l'état de l'objet permettre d'initialiser les données membres de la
• Les méthodes (parfois appelées
classe, ainsi que de permettre différentes actions
fonctions membres): il s'agit des
opérations applicables aux objets. (définies par le concepteur de la classe) lors de
l'instanciation.
Un constructeur se définit comme une méthode
standard, mais ne renvoie aucune valeur.
Ainsi, le constructeur d'un objet porte le même nom
que la classe et ne possède aucune valeur de retour
(même pas void).
26
Programmation Orientée Objet Java
Classe et objet?
▪ Constructeur surchargé
→Constructeur
• Un constructeur porte le même nom que la Candidat(int id, String couleur, float vote){
classe dans laquelle il est défini. [Link]=id;
• Un constructeur n’a pas de type de retour [Link]=nom;
(même pas void). [Link]=vote;
• Un constructeur peut avoir des arguments }
ou paramètres.
▪ Constructeur par défaut • Le constructeur par défaut initialise les variables de la classe aux valeurs par
défaut.
Candidat(){}
• Si vous ne créez pas un constructeur dans votre classe, le compilateur va
Candidat(){ automatiquement vous créer un constructeur par défaut implicite.
id=0; • Si le constructeur surchargé est créé, le constructeur par défaut implicite ne sera plus
nom=‘BA’ créer par le compilateur.
NBVote=10.2f;
} • La plateforme java différencie entre les différents constructeurs déclarés au sein
d’une même classe en se basant sur le nombre des paramètres et leurs types.
On ne peut pas créer deux constructeurs ayant le même nombre et types des
paramètres.
27
Programmation Orientée Objet Java
Classe et objet?
→Utilisation de this
→Constructeur Le mot-clé this permet de désigner l’objet courant,
Quel constructeur va être déterminé lorsque vous allez créer votre objet ? pour manipuler un attribut de l’objet courant.
class Chemise{ [Link]
int id; Pour manipuler une méthode de la classe courante
char couleur; : [Link](100);
float prix; Pour faire appel au constructeur de l(objet
String description; Utilisation:
int quantite; class Chemise{
int id;
Chemise () {} Chemise ch1=new char couleur;
Chemise();
Chemise(int id) { Chemise(int id) {
Chemise ch2=new [Link]=id;
[Link]=id;
} Chemise(122); }
28
Programmation Orientée Objet Java
Classe et objet?
→Appel des méthodes
→Manipulation de Méthodes Pour exécuter une méthode, il suffit de faire appel
➢ Le nom de la méthode doit commencer par un verbe. à elle en écrivant l'objet auquel elle s'applique
➢ Une méthode est une fonctionne faisant partie d’une classe. (celui qui contient les données), le nom de la
➢ Elle permet d’effectuer des traitements sur (ou avec) les données méthode ( en respectant la casse), suivie de ses
arguments entre parenthèse :
membres des objets.
[Link](argument1,argument2);
Syntaxe:
Niveau d’accès Type_retour nom_method([arguments])
Le passage d'arguments à une méthode se fait au
{
moyen d'une liste d'arguments (séparés par des
} virgules) entre parenthèses suivant
immédiatement le nom de la méthode.
29
Encapsulation
→ Objectifs
✔ Notion de package
✔ Encapsulation des classes
✔ Encapsulations des attributs/méthodes
✔ Les attributs et méthodes static
30
Programmation Orientée Objet Java
encapsulation
→Les packages
➢ C’est un ensemble de classe, interfaces et des sous-packages de
même type (entités, métier, graphiques, etc.)
➢ Pour accéder à un élément défini dans un package on doit utiliser
son nom complet sauf si l’élément qui l’utilise est dans le même
package.
nom_de_package.nom_de_élément
• Package = répertoire.
➢ Un paquetage est un regroupement de classes. Les paquetages • Les classes Java peuvent être regroupées dans des
sont organisés hiérarchiquement comme des répertoires de packages.
classes. Projet
package 1
ClassA
ClassB
Package 2
ClassC
ClassD
31
Programmation Orientée Objet Java
encapsulation
Encapsulation des classes (1/3)
→Encapsulation :modificateurs d’accès
• Java offre 4 modificateurs d ’accès: private, default, protected et public.
ENCAPSULATION
• Ces modificateurs permettent de moduler la visibilité d'un membre d'une
classe selon que l'on se place dans la même classe, dans une sous-classe,
dans une classe du même paquetage, ou ailleurs.
• Chaque classe, constructeur, méthode et attribut peut être paramétré par
un modificateur qui peut être :
CLASSES METHODES ATTRIBUTS
• public : accès non contrôlé
• private : accès limité à la classes ou l'interface courante
• protected : accès limité au membre du package et à ses
descendants
• Par default : accès limité au membre du package. Il n'existe pas de
mot clef pour ce type de modificateur, de ce fait si aucun mot clef
parmi public, private ou protected n'est utilisé alors l'élément est
considéré comme par default.
• Une interface et une classe peuvent uniquement être publiques ou par
default.
32
Programmation Orientée Objet Java
Encapsulation classe
public class A
{
…
}
33
Programmation Orientée Objet Java
Encapsulation Classe
default
class A {
…
}
La classe default est visible seulement par les classes de son package.
34
Programmation Orientée Objet Java
Encapsulation classe
default
class A {
…
}
La classe default est visible seulement par les classes de son package.
35
Programmation Orientée Objet Java
Encapsulation attribut
public class A {
public int x;
…
}
class C extends A {
class B { A a=new A(); class D {
A a=new A(); a. x = t ; A a=new A();
a. x = t ; x=t; a. x = t ;
} } }
L’attribut private
public class A {
…
}
public class A {
…
}
La variable default n'est accessible que depuis les classes faisant partie du même package.
38
Programmation Orientée Objet Java
Encapsulation Attribut
L’attribut protected
public class A {
…
protected int w ;
public class A {
public void
meth1()
{ }
…
}
40
Programmation Orientée Objet Java
Encapsulation méthodes
public class A {
private void meth2 ()
{ }
…
}
41
Programmation Orientée Objet Java
Encapsulation méthodes
La méthode default n'est accessible que depuis les classes faisant partie du même package.
42
Programmation Orientée Objet Java
Encapsulation méthodes
Méthode protected
public class A {
Protected void meth4()
{}
…
}
La méthode protected est accessible uniquement aux classes d'un package et à ses sous-classes
(même si elles sont définies dans un package différent.)
43
Programmation Orientée Objet Java
Encapsulation Récap
private visible
44
Programmation Orientée Objet Java
Accesseurs & mutateurs
private float monAttribut;
→Les getters & setters
public void setMonAttribut (float monAttribut){
this. monAttribut = monAttribut;
Pour la manipulation des attributs private, il faut :
}
• Un mutateur (setter): une méthode pour
public float getMonAttribut(){
assigner une valeur à un attribut return monAttribut;
• Un accesseur (getter): une méthode pour }
récupérer la valeur d'un attribut
private boolean absent;
45
Héritage
→ Objectifs
✔ Savoir identifier le lien entre les classes
✔ Introduire la technique d’héritage : intérêt et notation
✔ Introduire les droits d’accès d’une classe dérivée aux membres de la
classe de base.
✔ Comprendre la construction d’un objet dérivé
✔ Maîtriser la nation de redéfinition
✔ Comprendre la nation des classes abstraites
46
Programmation Orientée Objet Java
Héritage ? Exemple:
→Définition
L’héritage est la définition d’une classe par
extension (extends) des caractéristiques
d’une autre classe.
47
Programmation Orientée Objet Java
Héritage
48
Programmation Orientée Objet Java
Héritage →Chainages des constructeurs
INTERDIT
- Il n’est pas possible d’utiliser à la fois un autre constructeur de la classe et un public A ( int x) {
constructeur de sa classe mère dans la définition d’un de ses constructeurs. super();
this() ;
}
}
49
Programmation Orientée Objet Java
Héritage
50
Programmation Orientée Objet Java
Héritage
Pour initialiser les attributs hérités, le constructeur d’une classe peut
→Chainages des constructeurs
invoquer un des constructeurs de la classe mère à l’aide du mot-clé
→Affichage super.
constructeur de A
constructeur de B public class VoitureElectrique extends Voiture{
autre constructeur de B
constructeur de C public VoitureElectrique( int puissance, boolean estDemarer, float vitesse) {
→Explication super(puissance, estDemarer,vitesse) ;
-Peut-être avez-vous oublié constructeur de A, si }
super doit être la
vous n'avez plus pensé que l'instruction super(); première instruction
est ajoutée en première ligne du constructeur public Voiture( String unNom) {
sans paramètre de la classe B.
this (puissance, estDemarer,vitesse) ;
-L'instruction super(); est aussi ajoutée en }
première ligne du constructeur de la classe A , }
faisant ainsi appel au constructeur sans
paramètre de la classe Object, mais ce Si on ne fait pas d’appel explicite au constructeur de la superclasse,
constructeur ne fait rien. c’est le constructeur par défaut de la superclasse qui est appelé
implicitement.
51
Programmation Orientée Objet Java
Héritage
Solution2:Appel explicite au
Solution 1: ajout d’un
→Chainages des constructeurs constructeur vide
super
52
Programmation Orientée Objet Java
Héritage →Surcharge & Redéfinition
53
Programmation Orientée Objet Java
Héritage →Surcharge & Redéfinition
→Redéfinition (override)
•La redéfinition des méthodes est possible uniquement pour les Classes et méthodes finales
méthodes qui sont héritables. DÉFINITION
Par exemple, une méthode marquée private n'est pas • UTILISATION DU MOT-CLÉ FINAL
héritable et ne peut pas donc être outrepassée. • MÉTHODE : INTERDIRE UNE ÉVENTUELLE REDÉFINITION D’UNE MÉTHODE
On peut fournir une implémentation de la même méthode
avec le même nom, la même signature (paramètres), et le même PUBLIC FINAL VOID DEMARRE();
type de retour dans la sous-classe, comme si on a créé une
nouvelle méthode qui n'a absolument rien avoir avec la méthode
• CLASSE : INTERDIRE TOUTE SPÉCIALISATION OU HÉRITAGE DE LA CLASSE
CONCERNÉE
de superclasse.
•Une sous-classe dans un package différent de celui de la public final class VoitureElectrique extends Voiture {
...
superclasse peut redéfinir toutes les méthodes de cette classe qui
}
sont marquées public ou protected.
•On ne peut pas redifinir une méthode marquée final. La classe String est finale
54
Programmation Orientée Objet Java
Héritage →Classe abstraite
→Définition →Intérêts
public abstract class Component {
• Le mécanisme des classes abstraites permet de définir des • Le recours aux classes
comportements (méthodes) qui devront être implémentés private int x, y;
abstraites facilite la
dans les classes filles, mais sans implémenter ces
comportements (c’est-à-dire sans écrire de code pour cette public setPosition(int x, int y) { conception orientée objet
méthode) this.x = x; this.y = y;
}
• Ainsi, on a l'assurance que les classes filles respecteront le public abstract void render(); • On peut placer dans une
contrat défini par la classe mère abstraite
classe abstraite toutes les
• Une classe abstraite est une classe marquée avec le mot-clé }
abstract . Contrairement aux classes non abstraites, elle peut fonctionnalités dont on
contenir des méthodes abstraites sans implémentation.
souhaite disposer pour toutes
• Il est cependant valable de créer une classe abstraite sans ses descendances
méthodes abstraites.
55
Polymorphisme
→ Objectifs
✔ Redéfinition de méthodes dans les sous-classes : Polymorphisme.
✔ Sur-classement et susbtitution.
✔ Le transtypage (conversion de type ou cast en anglais).
56
Programmation Orientée Objet Java
Polymorphisme →Polymorphisme : Définition & Exemple
→Définition →Exemple
• Le polymorphisme est le fait d’instancier un objet d’une
• Le polymorphisme permet au
classe fille avec une référence déclarée de type de
développeur d'utiliser une méthode
classe mère.
ou un attribut selon plusieurs
Exemple
Animal manières, en fonction du besoin.
D'ailleurs, le mot polymorphisme
est apparu dans la Grèce antique.
57
Programmation Orientée Objet Java
Polymorphisme →Tableau polymorphique
Animal
Avec le polymorphisme : le type de la
référence peut être la classe mère de
l’objet instancié.
🡺 un tableau polymorphique.
Dog Cat Wolf
Soit : Animal [ ] animals = new
Animal [3];
58
Programmation Orientée Objet Java
Polymorphisme →Tableau polymorphique
59
Programmation Orientée Objet Java
Polymorphisme →Sur-classement et substitution
public void
watch(){
sout(’’je
gardes’’)
}
[Link]() OK
[Link]() OK
[Link]() OK [Link]() OK
((Dog) animal).watch() OK
[Link]() OK [Link]() OK
[Link]() OK [Link]() NO
60
Programmation Orientée Objet Java
Polymorphisme →Upcast & Downcast
→Upcast →Downcast
• Permet de convertir le type d'une référence vers un type parent. • Permet de convertir le type d'une référence vers un sous type.
String str1 = new Object(); // DownCasting implicite (erreur
de compilation : Type mismatch: cannot convert from Object
to String)
• La conversion (implicite ou explicite) vers un type parent est String str2 = (String) new Object(); // DownCasting explicite
(erreur à l'exécution : [Link]:
toujours acceptée par le compilateur et elle ne posera aucun
[Link] cannot be cast to [Link])
problème à l'exécution du programme
• La conversion implicite (String str1 = new Object();) vers un sous type
• une référence d'un type parent peut, sans risque, lire/modifier est toujours refusée par le compilateur.
les attributs ou invoquer les méthodes dont elle a accès,
• Par contre, la conversion explicite (String str2 = (String) new
indépendamment si l'instance référée et du même type ou un Object();) vers un sous type est toujours acceptée par le compilateur.
Cependant à l'exécution du programme, la JVM va vérifier si le
sous-type du type de la référence.
type de l'instance (Object) est le même ou un sous type du type
qu'on a spécifiée pour la conversion (String) :
si ce n'est pas le cas, la JVM déclenche une exception.
61
Programmation Orientée Objet Java
Polymorphisme →Upcast & Downcast
62
Programmation Orientée Objet Java
Polymorphisme →Upcast & Downcast
→Downcasting: solution
→Downcasting: cas d’erreur
• L’upcasting est toujours permis, par contre
• Pour remédier à ce problème, on peut
utiliser l’opérateur instanceof avant de
le downcasting implique une vérification de
faire l’opération du cast, afin de tester le
type et peut générer une exception de
type de l’objet à convertir.
type « ClassCastException »
Animal a = new Animal();
Dog d = (Dog) a; Animal a = new Animal();
[Link]()
• Cet exemple nous génère une erreur If (a instanceof Dog){
Dog d = (Dog) a;
d’exécution (ClassCastException), parce [Link]();
que le type de la variable a est Animal, et }
au moment de la conversion (cast), il else
{
s’avère que la variable a ne pointe pas, [Link](‘’Conver
vraiment, vers un objet de type Dog! sion de type impossible!’’);
}
63
Programmation Orientée Objet Java
Polymorphisme →Upcast & Downcast
64
Programmation Orientée Objet Java
Polymorphisme →Final: Classe / Méthode
65
Programmation Orientée Objet Java
Polymorphisme →Méthode Equals
→ Objectifs
✔ Comprendre la notion de classe abstraite.
✔ Se familiariser avec le concept d’interfaces.
✔ Manipuler une interface et savoir quand l’utiliser.
67
Programmation Orientée Objet Java
INterfaces →Méthode et Classe Abstraite
<abstract>
• On définit une méthode abstraite comme étant une méthode Personnel
n’ayant pas de corps
68
Programmation Orientée Objet Java
INterfaces →Les interfaces
<<ClassA>>
public interface I
{
void f (int n) ; //les mots clés public et abstract sont
facultatifs
ClassA : classe abstraite dans laquelle on peut public abstract void g () ;
déclarer des méthodes concrètes (c’est le cas de la }
méthode m3()) ▪ Une interface définit un comportement (d’une classe) qui doit
être implémenté par une classe, sans implémenter ce
comportement.
▪ Une classe C implémente une Une classe dérivée peut implémenter 1 ou Les interfaces peuvent se dériver cad une
interface I plusieurs interfaces interface peut hériter d’une autre interface
<<Interface I>>
Classe A Classe B
<<Interface 2>>
Classe C
70
05 Notions avancées en JAVA
71
PLAN PLAN
• EXCEPTIONS
• COLLECTIONS
• STREAM
72
Les Exceptions
→ Objectifs
✔ Séparer la gestion des anomalies du reste du code, donc de
contribuer à la lisibilité programmes
✔ Savoir écrire un gestionnaire d’exception avec le Bloc Try
✔ Savoir le cheminement d’une exception
✔ Différencier l’utilisation des deux mots clés throw et throws
✔ Comprendre l’utilisation du multicatch
73
Notions avancées en Java
Exception ?
→Définition Exemple:
➢ Des conditions exceptionnelles
d’exécution du programme.
Quand une exception se produit,
l’exécution normale du
programme est interrompue et
l’exception est traitée.
74
Notions avancées en Java
Exceptions →Le mécanisme
75
Notions avancées en Java
Exceptions
76
Notions avancées en Java
Exceptions →Les types d’exception : Hiérarchie des exception
Les exceptions vérifiées et non vérifiées:
• Throwable: Cette classe descend Java classe les exceptions en 2 catégories:
directement de Object : c'est la - Les exceptions vérifiées (checked)
classe de base pour le traitements
des erreurs. - Les exceptions non vérifiées (unchecked)
-Les exceptions vérifiées (checked) représentent généralement les
événements anticipés qu'une application doit pouvoir gérer.
• Error: Elle gère les erreurs liées à Par exemple, IOException et ses sous-types représentent des
la machine virtuelle (LinkageError, conditions d'erreur pouvant se produire dans les opérations d'E /
ThreadDeath etc.) S.
77
Notions avancées en Java
Exceptions →Les types d’exception
Les exceptions non vérifiées (unchecked) représentent Exemple d’exception « Unchecked »
généralement des événements imprévus auxquels une public class TestException {
application ne peut pas faire face.
-Une exception non vérifiée (implicite) est une classe public static void main(String[] args) {
dérivant de l'une des deux classes Error ou int a=5,b=0,c;
RuntimeException
c=a/b;
[Link]("le résultat"+c);
}
}
78
Notions avancées en Java
Exceptions →La gestion des exceptions
79
Notions avancées en Java
Exceptions →Gestion active – Le bloc try/catch
•try : détermine le bloc du code qui est - Attention, les blocs catch sont testés dans -Pour gérer une exception, on utilise le bloc de
susceptible de lancer une exception. l'ordre d'écriture ! code try/catch
- Un catch inatteignable est un erreur
•catch : permet d'attraper une exception
lancée par le bloc du code de la clause
try.
80
Notions avancées en Java
Exceptions
try { ... }
catch (IOException ioex) { ... }
finally { ... }
81
Notions avancées en Java
Exceptions →Le bloc finally
- La clause finally peut être utilisée avec ou sans des - Seul l'appel de [Link]() empêchera l'exécution du bloc finally
clauses catch. - Un bloc finally suit:
- Une clause finally sans les clauses catch peut être utile soit un bloc try
dans les cas où on veut faire un traitement spécial sans
soit un bloc try suivi d'un ou plusieurs bloc catch.
pour autant arrêter la propagation de l'exception
try { ... }
finally { ... }
82
Notions avancées en Java
Exceptions →Les exceptions personnalisées
- Il faut signaler que les exceptions sont des classes
qui héritent de la classe Object.
- La classe de la nouvelle exception doit étendre une public class EmployeException extends Exception {
des classes Throwable, Error, ou Exception ou public EmployeException(){
n'import quelle autre classe qui hérite de ces classes super();
}
✔Dériver (spécialiser)une classe de type Exception public EmployeException(String message){
✔Créer uniquement deux constructeurs : un super(message);
[Link]("Vous essayez d'instancier un Employe avec
constructeur sans paramètre et un constructeur qui un age négatif !");
prend un message (String) en paramètre. }}
83
Les Collections
→ Objectifs
✔ Apprendre les interfaces principales de la Collection Framework
(Collection, List, Set, Map, etc.)
✔ Connaître et comprendre les classes qui implémentent ces interfaces
(ArrayList, HashSet, HashMap etc. )
✔ Savoir manipuler ces collections
✔ Comprendre les différents cas d’utilisation de chaque classe.
84
Notions avancées en Java
Collections ?
Pourquoi ?:
→Définition ✔Adapter la structure collective aux besoins de la collection
➢ Les collections en java est un
ensemble d'interfaces et classes ✔Les collections sont utilisés pour:
qui aident à stocker, ordonner et - stocker, rechercher et manipuler des données
traiter les données efficacement.
- transmettre des données d’une méthode à une autre
✔Une structure collective implante ✔Certaines collections acceptent les doublons, d'autres pas. Certaines sont ordonnées,
une collection d'autres pas. Certaines collections émettent quelques restrictions, comme le type ou
→ plusieurs implantations possibles l'interdiction de la valeur null.
❖ ordonnées ou non, avec →Collections vs Tableaux Statiques:
ou sans doublons, ...
❖ accès, recherche, tris •Tableau
(algorithmes) plus ou -accès par index
moins efficaces
-recherche efficace si le tableau est trié (dichotomie) -défaut majeur : nombre d’éléments borné.
✔Les classes et les interfaces se •Collections
trouvent dans le paquetage : [Link]. -accès séquentiel : premier, suivant
-insertions et suppressions rapide
85
Notions avancées en Java
Collections →Architecture
Composée de 3 parties :
86
Notions avancées en Java
Collections →Opérations possibles sur les collections
87
Notions avancées en Java
Collections →Collection : Interface LIST
→ArrayList vs Vector:
- Les objets appartenant à la
[Link]
catégorie List sontdes tableaux
extensibles à volonté. On y trouve
- Utilise un tableau en interne pour ranger les données.
les objets Vector, LinkedList et
- Fournit un accès aux éléments par leur indice très performant et est optimisé pour des
opérations d'ajout/suppression d'éléments en fin de liste.
ArrayList
- Les emplacements sont repérés par des indice (à partir de 0).
[Link]
- Une liste est une collection
- Synchronisé par défaut (4x plus lent que ArrayList).
ordonnée. L'utilisateur de celle-ci a
un contrôle complet sur les
- Est une classe dite "thread-safe", c'est-à-dire que plusieurs processus peuvent l'utiliser
en même temps sans risque de perte de données.
éléments qu'il insère dedans, et il
peut y accéder par leur index.
● List monArrayList = new ArrayList(10)
- Les listes ont toujours comme
premier élément d’indice 0.
88
Notions avancées en Java
Collections →LIST : ArrayList
- Un ArrayList est un tableau qui se
redimensionne automatiquement. Il
accepte tout type d'objets, null y
compris.
- Chaque instance d'ArrayList a une
capacité, qui définit le nombre
d'éléments qu'on peut y stocker.
- Au fur et à mesure qu'on ajoute des ● Les opérations principales sur un ArrayList sont :
éléments et qu'on " dépasse " la
capacité, la taille augmente en - add(Object o) : ajoute l'objet o à la fin du ArrayList
conséquence. - clear() : vide le ArrayList
- La classe ArrayList implémente - get(int index) : renvoie l'Object à l'index spécifié. Renvoie une exception si vous
l’interface List. Il utilise un tableau
dépassez le tableau (IndexOutOfBoundsException)
dynamique pour stocker l’élément en
double de différents types. La classe - size() : renvoie la taille du ArrayList
ArrayList maintient l’ordre d’insertion et - contains(Object o): renvoie true si la liste contient l'objet o, false sinon. La
n’est pas synchronisée. Les éléments
redéfinition de la fonction equals(Object obj) est importante pour comparer deux objets
stockés dans la classe ArrayList sont
accessibles de manière aléatoire. selon leurs attributs.
Prenons l’exemple suivant.
- remove(Object o): Retirer un objet de la collection. La redéfinition de la fonction
equals(Object obj) est importante pour comparer deux objets selon leurs attributs.
89
Notions avancées en Java
Collections →LIST :Tri et recherche
→ArrayList vs Tableaux Statiques:
- Collection est l'interface racine dans l'hiérarchie de java framework Collections. Ce qui veut dire que chaque classe implémente Collection.
- Collections est une classe utilitaire membre de java framework Collections et qui a des méthodes statiques pour manipuler les objets qui
implémentent l'interface List. Par exemple, le tri d'un ArrayList dans l'ordre croissant. [Link](arraylist);
→La classe Collections:
La classe Collections est une classe utilitaire pour les collections Java. Cette classe contient des méthodes statiques qui manipulent ou retournent
des collections.
- trie (sur listes) - recherches (sur listes) –copies - minimum et maximum.
90
Notions avancées en Java
Collections →LIST :Tri et recherche
→La classe Collections (Tri): →L’interface Comparable <T>
• Si la méthode sort(List) est utilisée, • Interface pour définir un ordre de tri public class Student
il faut obligatoirement que les naturel pour un objet implementsComparable<Student>{
éléments inclus dans la liste • Redéfinir la méthode private String name;
implémentent tous l'interface
public int compareTo (T o) avec public Student(){}
Comparable sinon une exception
de type ClassCastException est public Student(String name) { [Link] =
levée. name;}
91
Notions avancées en Java
Collections →Collection : Interface SET
- Set est une collection qui ne contient • Méthodes de Set<E>
aucun élément en double. Plus - sens du hashCode à l’objet passé en paramètre sera enlevé
formellement, Set ne contiennent pas - la méthode add n’ajoute pas un élément si un élément égal est déjà dans l’ensemble
une paire d’éléments e1 et e2 tels que
[Link](e2). • Set : TreeSet et HashSet
Le choix entre ces deux objets est lié à la nécessité de trier les éléments :
- Il stocke les éléments dans une table - les éléments d'un objet HashSet ne sont pas triés : l'insertion d'un nouvel élément est rapide
de hachage qui est un très bon atout - les éléments d'un objet TreeSet sont triés : l'insertion d'un nouvel élément est plus long
pour les haute performances, mais il
ne garantie pas l'ordre d'insertion • L'interface Set définit les fonctionnalités d'une collection qui ne peut pas contenir de doublons
des éléments lors de parcours dans ses éléments.
• Les éléments ajoutés dans une collection de type Set doivent ré implémenter leurs méthodes
equals() et hashCode(). Ces méthodes sont utilisées lors de l'ajout d'un élément pour déterminer
s'il est déjà présent dans la collection.
• La valeur retournée par hashCode() est recherchée dans la collection : si aucun objet de la
collection n'a la même valeur de hachage alors l'objet n'est pas encore dans la collection et
peut être ajoutési un ou plusieurs objets de la collection ont la même valeur de hachage alors la
méthode equals() de l'objet à ajouter est invoquée sur chacun des objets pour déterminer si
l'objet est déjà présent ou non dans la collection.
92
Notions avancées en Java
Collections →Collection : Interface SET
→HashSet<E>
import [Link]; HashSet est l'implémentation la plus utile de Set. Elle permet de stocker des objets
sans doublons
import [Link];
Set myHashSet = new HashSet(); // on crée notre Set
import [Link];
public class ExempleSet { [Link](new Student("Ali")); // on ajoute des étudiants
[Link](new Student("Sami"));
public static void main(String args[]) { [Link](new Student("Mariem"));
[Link](new Student("Ali")); // Insertion impossible! L’étudiant Ali a été
int count[] = {10, 20, 30, 40, 50};
déjà ajouté (redéfinition de equals() & hashCode())
Set hashset = new HashSet(); for(Student etudiant:myHashSet)
{
for(int i = 0; i<4; i++){[Link](count[i]);} [Link](etudiant); // on affiche la chaîne
}
[Link](hashset); }
TreeSet treeset = new TreeSet(hashset);
[Link](treeset);
}}
93
Notions avancées en Java
Collections →Collection MAP
• Une map est une collection qui associe une →MAP : Les méthodes
clé à une valeur ( Map<K,V> ). La clé est
unique, contrairement à la valeur qui peut
être associée à plusieurs clés.
94
Notions avancées en Java
Collections →MAP : HashMap
→ HashMap
• La classe HashMap présente plusieurs
caractéristiques :
- Elle permet l'utilisation de la valeur null
comme clé et comme valeur.
- Elle n'est pas thread-safe.
- Elle ne garantit aucun ordre lors du
parcours des éléments de la collection.
→ TreeMap
• La classe TreeMap, ajoutée à Java 1.2, est
une Map qui stocke des éléments de
manière triée.
• Les éléments de la collection sont triés selon
l'ordre naturel de leur clé (s'ils
implémentent l'interface Comparable) ou
en utilisant une instance de type
Comparator fournie au constructeur de la
collection.
• Elle implémente les interfaces Map et
SortedMap.
95
Notions avancées en Java
Collections →Interface MAP
• L’interface Map contient l’interface interne →Interface MAP : Parcours et récupération des données
public [Link]<K,V> qui correspond à un • keySet(): qui retourne une collection de type Set<K> lorsque "K" est le type
couple clé-valeur de la clé de notre Map<K, V>.
• Cette interface contient 3 méthodes
• entrySet(): qui retourne elle aussi une implémentation de l'interface Set, mais
de type différent. La collection retournée sera définie ainsi Set<Entry<K,
V>>. Ce sera donc une collection d'objets qui contiendra tous les couples clé -
valeur de notre Map
• La méthode entrySet() de Map renvoie un • values(): qui retourne ce type d'objet Collection<String>, c'est-à-dire la liste
objet de type « ensemble (Set) de Entry » de nos valeurs
96
Notions avancées en Java
Collections →Comparaison LIST, SET & MAP
98