Cours Java
Cours Java
2
Acquis d’apprentissage du chapitre
A la fin du module, l’apprenant doit :
3
PLAN
• INTRODUCTION
• NOTIONS DE BASES
• VARIABLES ET TYPES
• OPÉRATEURS
• STRUCTURES DE DONNÉES
• STRUCTURES ITÉRATIVES ET CONDITIONNELLES
• NOTIONS AVANCÉES
• EXCEPTIONS
• COLLECTIONS
• STREAMS
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 ET TYPES
• OPÉRATEURS
• STRUCTURES DE CONTRÔLES
(CONDITIONNELLES ET ITÉRATIVES)
• STRUCTURES DE DONNÉES
16
Notions de bases en programmation
Langage Java
LES VARIABLES?
• Les variables sont des espaces mémoire
réservés pour stocker des données.
Chaque variable a un type qui
détermine le type de donnée ou valeur
qu’elle peut stocker.
• Les types de base en Java sont :
• int (entier)
• double,float (nombre à virgule
flottante),
• boolean (true/false)
• char(un caractére) et
• String (chaine de caractères).
17
Notions de bases en programmation LES OPÉRATEURS?
Langage Java
→1-Les opérateurs
Les opérateurs en Java arithmétiques
permettent d’effectuer des
opérations sur les données. Il Les opérateurs arithmétiques
existe plusieurs types sont utilisés pour faire des
d’opérateurs: opérations arithmétiques sur
des valeurs des données. La
• Opérateurs arithmétiques syntaxe pour faire ces
opérations est assez simple.
• Opérateurs de comparaisons Voici un tableau récapitulatif
des opérateurs arithmétiques
• Expressions conditionnelles
et leurs explications.
• Opérateurs logiques
Les règles de priorités des
• Opérateurs d’assignations opérateurs sont les même
qu'en mathématique.
• Opérateurs de bits et de
décalage
Explication :
19
Notions de bases en programmation LES OPÉRATEURS?
Langage Java
→4-Les opérateurs assignation →5-Les expressions conditionnelles
Les operateurs d'assignation permettent comme leur nom l'indique, d'assigner une Java a un opérateur qui vous permettent d'évaluer de
valeur à une variable. manière concise des expressions qui pourraient sinon nécessiter
Cette assignation peut se faire après quelques opérations dans certains cas. Les des instructions si-oui:
plus communs : Syntaxe :
condition? expression1 : expression2 (opérateur ternaire)
Si la condition est vraie, évalue expression1 (et renvoie sa
valeur); sinon, évalue et renvoie la valeur de expression2.
20
Notions de bases en programmation
Langage Java
LES VARIABLES STRUCTURES DE DONNÉES?
21
Notions de bases en programmation
Langage Java LES STRUCTURES DE CONTRÔLES
Les structures de contrôles en programmation permettent Quand le programme arrive au niveau de la condition if, la
de contrôler le flux d'exécution d'un programme. condition est évaluée. Si cette évaluation
•Les structures conditionnelles retourne true l'expression est exécutée. Si la condition est fausse
•Les structures itératives (retourne false) le programme continue son exécution sans
exécuter l'expression dans la condition if.
→ Les structures conditionnelles if Syntaxe pour créer une condition simple avec if
Dans un programme, il peut arriver que nous souhaitions if(condition){
modifier le comportement d'une opération en fonction expression;
d’une condition. Pour cela nous utilisons les conditions. Les }
conditions permettent d'écrire dans le programme des
portions de code qui s'exécutent si une condition est Exemple
remplie ou d'exécuter une autre portion si elle ne l'est
pas.
Dans la programmation en général et dans le langage
Dart en particulier, il existe plusieurs structures
conditionnelles.
•If (si) ou Structure conditionnelle simple
•If....else (si .... sinon) ou Structure conditionnelle
alternative
•If...else...if (si .... sinon .... si) ou structure conditionnelle
généralisée
22
Notions de bases en programmation
Langage Java LES STRUCTURES CONDITIONNELLES
Condition: if … else (si … sinon) Quand le programme arrive au
On parle de Structure conditionnelle niveau de la condition if .... else, la Exemple
alternative lorsque le traitement du condition est évaluée. Si cette
programme dépend d’une aussi seule évaluation retourne true l'expression
condition comme la structure conditionnelle 1 est exécutée. Si la condition est
simple IF. Mais dans ce cas, si la condition fausse (retourne false) l'expression 2 float temp = 37.5f;
est vraie, la première expression est est exécutée.
exécutée; si la condition est fausse, la Syntaxe pour créer une condition if (temp > 35) {
deuxième expression est exécutée et alternative avec if .... else [Link]("Il fait chaud");
l'exécution du programme continue. } else {
[Link]("Il fait froid");
}
if(condition){
expression 1;
}else {
expression 2;
}
23
Notions de bases en programmation
Langage Java
24
Notions de bases en programmation
Langage Java LES STRUCTURES DE CONDITIONNELLES
if(condition 1){
Condition: if … else … if (si … sinon … si) expression 1
On parle de Structure conditionnelle généralisée lorsqu'elle permet de }else if(condition 1){
lier des instructions à des conditions variables et finies. Cette structure expression 1;
permet de faire plusieurs évaluations de condition à la suite et exécute }else if(condition 2){
expression 2;
une certaine expression quand une seule de ces conditions est vraie. }else if(condition 3){
expression 3;
}else {
expression 4;
}
double moyenne = 14.5
String mention;
if (moyenne >= 10 && moyenne < 12) {
mention = "Passable";
} else if (moyenne >= 12 && moyenne < 14) {
mention = "Assez bien";
} else if (moyenne >= 14 && moyenne < 16) {
mention = "Bien";
} else if (moyenne >= 16 && moyenne < 18) {
mention = "Très bien";
} else if (moyenne >= 18 && moyenne <= 20) {
Quand l'expression de la condition vraie est exécutée, le programme mention = "Execellent";
quitte la structure conditionnelle et continue son exécution. } else { mention = "Ajournee"; }
[Link]("Avec une moyenne de $moyenne, votre mention est "+
Il est possible d' évaluer le nombre de conditions voulues
mention);
Syntaxe pour créer une condition généralisée avec if .... else .... if //Output
//Avec une moyenne de 14.56, votre mention est Bien
25
Notions de bases en programmation
Langage Java LES STRUCTURES CONDITIONNELLES
→Les structures conditionnelles expression est l'expression qui sera évaluée dans
switch les différents cas.
L'expression switch sert à contrôler L’instruction case permet de définir un certain cas.
les opérations conditionnelles en La valeur qui lui est passée sera évaluée avec
mettant en place plusieurs conditions. l'expression définie au départ.
Elle a le même fonctionnement que break permet de terminer le traitement d’un cas
la structure conditionnelle if .. else .. particulier dans l’instruction switch.
if tout en offrant une syntaxe plus L’instruction default est exécutée si aucune valeur
simple. des différents cas n’est égale à la valeur
Si vous vérifiez la valeur d'une seule de switch .
variable dans if ... else ... if, il est Exemple
préférable d'utiliser var choix = 1;
l'instruction switch. switch(choix)
{
Syntaxe de switch/case case 1:
[Link]("vous avez choisi 1");
switch (expression){ break;
case condition1 : instruction1 break; case 2:
case condition2 : instruction2 break; [Link]("vous avez choisi 2");
case condition3 : instruction3 break; break;
default : instruction par defaut default:
} [Link]("Choix Invalide");
}
26
Notions de bases en programmation
Langage Java LES STRUCTURES ITÉRATIVES
→ Les Structures Itératives (Boucles) → Boucle for
Une boucle est une structure de contrôle destinée à La boucle for permet de répéter une
exécuter une portion de code plusieurs fois de suite. expression un certain nombre de fois.
La boucle for est une boucle à pré-condition.
Il existe plusieurs façons de créer une boucle. Cela veut dire la condition est évaluée avant
Quelle que soit la façon dont la boucle est créée, l' exécution de l'expression. Si cette condition
son but principal sera de répéter une portion de est vraie, la portion de code est exécutée
code ou une expression un certain nombre donné de sinon toute la boucle est terminée et le
fois. Il est préférable qu'une boucle soit finie c'est- programme continue.
à-dire que son exécution s'arrête à un moment Syntaxe pour écrire une boucle for.
donné. for (initialisation; condition; itération ){
On peut aussi avoir des boucles qui s' exécutent à //instructions
l'infini. }
Exemple
Le fonctionnement des boucles est assez simple.
Elles exécutent l'expression quand la condition est //Boucle for
vraie et s' arrêtent quand la condition est fausse. for (int j = 0; j < 5; j++) {
Il existe plusieurs type de boucles. [Link]("Itération $j");
•for }
•while
•do .... while
Les boucles peuvent être imbriquées
27
Notions de bases en programmation
Langage Java LES STRUCTURES ITÉRATIVES
→ Boucle while → Boucle do…while
Le mot while se traduit par tant Cette boucle se traduit par faire ..
que. Alors cette boucle s' tant que.
exécute tant que sa condition est La boucle do .. while est une
vraie. boucle à post-condition. Cela veut
La boucle while est une boucle à dire la condition est évaluée après
pré-condition. Cela veut dire que l' exécution de l'expression.
la condition est évaluée avant l' Syntaxe:
exécution de l'expression. do{
Syntaxe: //instructions
while (condition) { }while (condition)
//instructions; Exemple:
}
Exemple:
//Boucle do while
int i = 0;
do {
//Boucle while
[Link]("Itération $i");
int k = 0;
i++;
while (k < 5) {
} while (i < 5);
[Link]("Itération $k");
k++;
}
28
Notions de bases en programmation
Langage Java
29
04 Concepts Orientée Objet en JAVA
30
PLAN PLAN
• CLASSE ET OBJET
• ENCAPSULATION
• HÉRITAGE
• POLYMORPHISME
• ABSTRACTIONS AVEC INTERFACES
31
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.
32
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
33
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….
34
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).
35
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.
36
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); }
37
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.
38
Encapsulation
→ Objectifs
✔ Notion de package
✔ Encapsulation des classes
✔ Encapsulations des attributs/méthodes
✔ Les attributs et méthodes static
39
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
40
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.
41
Programmation Orientée Objet Java
Encapsulation classe
public class A
{
…
}
42
Programmation Orientée Objet Java
Encapsulation Classe
default
class A {
…
}
La classe default est visible seulement par les classes de son package.
43
Programmation Orientée Objet Java
Encapsulation classe
default
class A {
…
}
La classe default est visible seulement par les classes de son package.
44
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.
47
Programmation Orientée Objet Java
Encapsulation Attribut
L’attribut protected
public class A {
…
protected int w ;
public class A {
public void
meth1()
{ }
…
}
49
Programmation Orientée Objet Java
Encapsulation méthodes
public class A {
private void meth2 ()
{ }
…
}
50
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.
51
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.)
52
Programmation Orientée Objet Java
Encapsulation Récap
private visible
53
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;
54
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 notion de redéfinition
✔ Comprendre la notion des classes abstraites
55
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.
56
Programmation Orientée Objet Java
Héritage
57
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() ;
}
}
58
Programmation Orientée Objet Java
Héritage
59
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
autre constructeur de B public class VoitureElectrique extends Voiture{
constructeur de C
→Explication public VoitureElectrique( int puissance, boolean estDemarer, float vitesse) {
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
public Voiture( String unNom) {
est ajoutée en première ligne du constructeur
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.
60
Programmation Orientée Objet Java
Héritage
Solution2:Appel explicite au
Solution 1: ajout d’un
→Chainages des constructeurs constructeur vide
super
61
Programmation Orientée Objet Java
Héritage →Surcharge & Redéfinition
62
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
63
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.
64
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).
65
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.
66
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];
67
Programmation Orientée Objet Java
Polymorphisme →Tableau polymorphique
68
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
69
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.
70
Programmation Orientée Objet Java
Polymorphisme →Upcast & Downcast
71
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!’’);
}
72
Programmation Orientée Objet Java
Polymorphisme →Upcast & Downcast
73
Programmation Orientée Objet Java
Polymorphisme →Final: Classe / Méthode
74
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.
76
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
77
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
79
05 Notions avancées en JAVA
80
PLAN PLAN
• LES EXCEPTIONS
• API COLLECTION
• INTERFACES FONCTIONNELLES
• API STREAM
81
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
82
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.
83
Notions avancées en Java
Exceptions →Le mécanisme
84
Notions avancées en Java
Exceptions
85
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.
86
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);
}
}
87
Notions avancées en Java
Exceptions →La gestion des exceptions
88
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.
89
Notions avancées en Java
Exceptions
try { ... }
catch (IOException ioex) { ... }
finally { ... }
90
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 { ... }
91
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. }}
92
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.
93
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
94
Notions avancées en Java
Collections →Architecture
Composée de 3 parties :
95
Notions avancées en Java
Collections →Opérations possibles sur les collections
96
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.
97
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.
98
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.
99
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;}
100
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.
101
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);
}}
102
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.
103
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.
104
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
105
Notions avancées en Java
Collections →Comparaison LIST, SET & MAP
→ Objectifs
✔ Comprendre la programmation fonctionnelles avec l’API Stream
✔ Connaitre les types opérations et leur ordre dans la manipulation des Stream
✔ Connaitre comment obtenir un stream et savoir où et quand l’utiliser.
✔ Manipuler les fonctions ( Predicate, Comparator, Consumer et Function)
107
Notions avancées en Java
API STREAM
Pourquoi ?:
→Définition - Un “Stream<T>” décrit une séquence d’éléments ( de type T) supportant des opérations
➢ Le principe général de la agrégées en séquence ou en parallèle.
programmation fonctionnnelle
- L’API Stream fourni des classes pour supporter des opérations de style fonctionnel sur des
est de concevoir des programmes flux de valeurs
comme des fonctions Illustration :
mathématiques que l’on compose - Par analogie à une usine, le Stream représente la séquence d’éléments à traiter à la
entre elles. chaîne, et les opérations que nous allons appliquer sur ces éléments
108
Notions avancées en Java
API STREAM
Type d’opération :
→Obtention d’un stream L’intérêt principal d’un "stream" réside dans la possibilité d’effectuer plusieurs
Il existe plusieurs façons pour créer un "stream". opérations plus ou moins complexes en les enchaînant en une seule instruction.
La plus simple consiste à appeler la méthode
"stream()" ou "parallelStream()" sur une Cet enchaînement, appelé pipeline, est composé de plusieurs opérations
collection, de plus un certain nombre de intermédiaires et d’une seule opération terminale.
méthodes ont été ajoutées aux classes déjà
existantes. 🡺 Intermédiaires
Input : Stream 🡺 Output : Stream
Un "stream" s’obtient de la manière suivante : 🡺 Terminales
▪ Depuis une Collection via la méthode Input : Stream 🡺 Output : autre type
"stream()" ou "parallelStream()"
▪ Depuis un tableau via
"[Link](Object[])".
▪ Depuis des méthodes statiques de l’interface
"Stream<T> comme "[Link](Object[])",
"[Link](int,int)" ou
"[Link](Object, UnaryOperator) ".
▪ Lors de la lecture d’un fichier via
"[Link]()".
109
Notions avancées en Java →Type d’opérations
API STREAM
Opérations terminales:
Opérations intermédiaires : L’opération terminale d’un stream est une opération finale, celle qui déclenche
l’exécution du pipeline d’opérations (et donc consomme le flux d’entrée), produit
Chaqu opération intermédiaire retourne un
(éventuellement) un résultat puis ferme le "stream".
nouveau "stream" (permettant ainsi l’enchaînement
des opérations). Opérations terminales principales :
De même type ▪ Booléennes
Stream<T> filter(Predicate<T>) - Les opérations booléennes "allMatch", "anyMatch" et "noneMatch", qui prennent
Stream<T> sorted() toutes les trois un "Predicate<T>" en paramètre, sont vraies lorsque,
Stream<T> sorted(Comparator<T> comparator) respectivement, tous les éléments, au moins un ou aucun satisfont le prédicat
Stream<T> distinct() donné.
Stream<T> limit(long maxSize)
Stream<T> peek(Consumer<T> action) :
▪ Numériques
- long count() : retourne le nombre d’éléments du "stream".
Stream<T> skip(long n) - type sum() : retourne la somme des éléments du "stream" (type étant int,
double ou long).
De type différent
<R> Stream<R> map(Function<T, R> mapper) ▪ Simple
<R> Stream<R> flatMap(Function<T, Stream<R>> - Optional<T> findAny() : retourne un élément (n’importe lequel) du "stream".
mapper) - Optional<T> findFirst() : retourne le premier élément du "stream".
- Optional<T> max (Comparator<T>comparator) et Optional<T> min
(Comparator<T>comparator) retournent respectivement le maximum et le minimum
des éléments du "stream" en accord avec le comparateur donné.
110
Notions avancées en Java
API STREAM →Type d’opérations
→Pour résumer
▪ Complexes
- Pour utiliser Stream on commence toujours par une source de
- Collect: "Collect" est une opération
donnée (Exemple: liste)
terminale extrêmement utile pour
- Nous passons le Stream par une suite d’opérations intermédiaires
transformer les éléments d’un "stream" à
qui ont comme output un Stream
un autre type de résultat, par exemple
- On fini par une opération finale qui un comme output une sortie
une "List", "Set" ou "Map".
autre que Stream
- Reduce
L'opération de réduction combine tous les
éléments du "stream" en un seul résultat
111
Notions avancées en Java
API STREAM →Condition importante
• Pour que les opérations d’un Stream s’éxécutent Étendons l'exemple ci-dessus par l'opération terminale "forEach":
il faut impérativement avoir une opération
finale. On ajoutant l’opération finale « ForEach » nous garantissant que
l’execution ce fait avec succes.
On exécutant ce bout de code, rien ne sera affiché
à la console. C’est parce que les opérations
intermédiaires ne seront exécutés que lorsque une
opération terminale est présente.
112
Notions avancées en Java
API STREAM →L’ordre des opérations
Comme vous l'aurez deviné les opérations "map" et "filtre" sont appelées cinq fois dans la collection alors que la méthode
"forEach" est appelée une seule fois.
Nous pouvons réduire le nombre réel d'exécutions si nous changeons l'ordre des opérations, en déplaçant "filtre" au début de
la chaîne:
113
Notions avancées en Java
API STREAM → L’ordre des opérations
Comme vous l'aurez deviné les opérations "map" et "filtre" sont appelées cinq fois dans la collection alors que la méthode "forEach" est
appelée une seule fois.
Nous pouvons réduire le nombre réel d'exécutions si nous changeons l'ordre des opérations, en déplaçant "filtre" au début de la chaîne:
Maintenant, la méthode "map" est
appelée une seule d’où les
opérations du pipe-line beaucoup
plus rapide pour un nombre
d'éléments d’élément plus grand.
Gardez cela à l'esprit lors de la
composition d’une chaîne des
méthodes complexes.
114
Notions avancées en Java
API STREAM → Résumons
115
CONCLUSION
116