0% ont trouvé ce document utile (0 vote)
12 vues116 pages

Cours Java

Ce document présente les concepts fondamentaux de la programmation en Java, y compris le paradigme orienté objet, les notions de base comme les variables, types, opérateurs, et structures de contrôle. Il explique également la différence entre les langages compilés et interprétés, ainsi que les outils nécessaires pour développer en Java, tels que JDK et IDE. Enfin, il aborde la syntaxe de base et les structures conditionnelles utilisées dans le langage Java.

Transféré par

tpkdmta
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
12 vues116 pages

Cours Java

Ce document présente les concepts fondamentaux de la programmation en Java, y compris le paradigme orienté objet, les notions de base comme les variables, types, opérateurs, et structures de contrôle. Il explique également la différence entre les langages compilés et interprétés, ainsi que les outils nécessaires pour développer en Java, tels que JDK et IDE. Enfin, il aborde la syntaxe de base et les structures conditionnelles utilisées dans le langage Java.

Transféré par

tpkdmta
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

LANGAGE DE PROGRAMMATION JAVA

Conçu et Rédigé par : Ing MINTOUA TOUPKANDI


1
CHAPITRE : PROGRAMMATION AVEC
JAVA

2
Acquis d’apprentissage du chapitre
A la fin du module, l’apprenant doit :

➢ Comprendre le paradigme Orientée Objet et utiliser Java pour le mettre en œuvre


➢ Comprendre l’algorithmique pour utiliser en Java
➢ Maitriser la notion de classe et d’objet
➢ Décrire les éléments-clé de la plate-forme Java
➢ Compiler et exécuter une application Java
➢ Décrire la syntaxe et les bases du langage
➢ Comprendre et utiliser les API de Java

3
PLAN
• INTRODUCTION
• NOTIONS DE BASES
• VARIABLES ET TYPES
• OPÉRATEURS
• STRUCTURES DE DONNÉES
• STRUCTURES ITÉRATIVES ET CONDITIONNELLES

• PROGRAMMATION ORIENTÉE OBJET


• CLASSE ET OBJET
• HÉRITAGE
• POLYMORPHISME
• INTERFACES

• 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 à:

⮚ Définir un certain nombre de variables (structures, tableaux…)


⮚ Ecrire des procédures pour les manipuler sans associer explicitement les unes aux autres.
-----------------------------------------------------------------------------------------------------------------------------
La programmation orientée objet se base sur une approche de conception et de développement de logiciels
Représenter les éléments du monde réel par des entités informatiques appelés "objets" en adoptant un
haut niveau d'abstraction.

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 ?

LANGAGES PROCÉDURALES & ORIENTÉE OBJET

Langages procédurales Langages Orientée Objet

C C++

COBOL PHP >= 5

PHP < 5 Ruby

Pascal Scala

Visual Basic JAVA

8
02 LANGAGE PROGRAMMATION JAVA

9
Langage de programmation Java
C’est quoi?

LANGAGE COMPILÉ VS INTERPRÉTÉ

-le code source est, directement,


Compilé interprété sans phase de compilation, et
c'est l'interprète qui exécute ce code
source, qu'il interprète à la volée.(JVM)

-le code source est soumis à un


compilateur, pour en faire un fichier
binaire compréhensible par un
microprocesseur (une sorte de pré- Interprété
fichier .exe)

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 SE Java ME Java EE Java Card

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

JRE L’environnement qui permet d'exécuter les applications


OUTILS DE DÉVELOPPEMENT (Java java,
Runtime
• Pour développer un programme JAVA on utilise un Environment) Il est constitué de la JVM en particulier (Java Virtual
IDE Machine).
• Afin de pouvoir créer une application JAVA JDK Outils permettant de développer, compiler (javac),
consistante, on a besoin du JDK, (Java débuguer (jdb) et exécuter un programme java.
Development
• Pour tester et lancer le code écrit, on doit,
Kit) Il y a aussi des outils d'archivage (jar), de génération de
nécessairement, disposer du JRE.
documentation (javadoc).

IDE Un programme regroupant un ensemble d'outils pour le


→Installation et pré configuration (Integrated développement de logiciels.
Télécharger et installer l’IDE IntelliJ IDEA Community et Development
configurer le SDK (JDK + JRE). Environment) En général, un IDE regroupe un éditeur de texte,
un compilateur, des outils automatiques de fabrication, et
souvent un débogueur. (Exp: Eclipse, Netbeans, IntelliJ
IDEA)

13
Langage de programmation Java
Premier Programme

C’EST QUOI UN PROGRAMME ?


• Un programme en Java est un ensemble d’instructions
écrites dans le langage Java, qui sont compilées en
bytecode puis exécutées par la machine virtuelle
Java (JVM).

• Ici nous avons ce qu’on appelle une classe d’entrée


en Java, pour cette exemple la classe est
«HelloWorld », elle contient une méthode d’entrée
« main », nous verrons plus tard ces notions de classe
et méthode. Concentrons nous sur cette ligne
[Link] : cette instruction permet d’afficher
la chaine de caractère « Hello world!». Pour la suite du cours nous allons créer notre projet java « java-
Autre exemple: course-logonedigital » puis nous allons créer un repository
Github pour stocker me code source de nos futurs séances et
notions en Java

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).

• Mais il faut savoir aussi que Java utilise


un mot-clé var pour déclarer une
variable. C’est lorsque nous ne
connaiçons le type de valeur de notre
variable
Syntaxes :
type nomVar ;
type nomVar = valeur initiale;
ou
var nomVar = valeur_initiale;

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

Nous allons nous concentrer sur


certains d’entre eux.
18
Notions de bases en programmation LES OPÉRATEURS?
Langage Java
→2-Les opérateurs de comparaison →3-Opérateurs logiques
Les opérateurs relationnels et d’égalité Les opérateurs logiques effectuent des opérations de ET logique && , de OU logique || et
comparent leur premier opérande à leur second d'inversion ! généralement sur des expressions booléennes.
opérande pour tester la validité de la relation
spécifiée. Le résultat d'une expression
relationnelle est true si la relation testée a la
valeur true et false si elle a la valeur false. Le
type du résultat est booléen.

Explication :

x < 123 est vrai donc le résultat est true


y > 123 est faux donc le résultat est false
( x < 123 ) && (y > 123) soit true et false ce qui donne false !
! ( ( x < 123 ) && ( y > 123)) soit inversion de false ce qui donne comme résultat true

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?

LES TABLEAUX STATIQUES

• Un tableau en Java est une structure de


données qui permet de stocker un ensemble
de données de même type. Un tableau est
déclaré en spécifiant son type et sa taille.
Les éléments du tableau sont accessibles
par leur indice.
Exemple : int[] tableau = new int[5];

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

LES STRUCTURES CONDITIONNELLES


• Les structures conditionnelles permettent d’exécuter
des blocs de code en fonction d’une condition. La
structure if permet d’exécuter un bloc de code si
une condition est vraie, sinon elle ne fait rien. La
structure if-else permet d’exécuter un bloc de
code si une condition est vraie, sinon elle exécute
un autre bloc de code.

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

LES STRUCTURES ITÉRATIVES?

• Les structures itératives permettent


d’exécuter un bloc de code plusieurs fois. La
structure while exécute un bloc de code tant
qu’une condition est vraie. La structure for
permet d’itérer sur un tableau ou une
séquence de valeurs.
Exemple : while (i < 10) [Link](i);
i++;

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); }

Chemise(int id, char couleur) { Chemise(int id, char couleur) {


Chemise ch3=new [Link]=couleur;
[Link]=couleur;
} Chemise(122, ‘B’); }
} }

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.

Le nombre et le type d'arguments dans la


déclaration, le prototype et dans l'appel doit
correspondre, sinon, on risque de générer une
erreur lors de la compilation...

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

→Encapsulation des classes (2/3)

public class A
{


}

class B { class C extends A { class D {


A a; A a; A a;
… … …
} } }

La classe public est visible depuis n’importe quelle classe du projet.

42
Programmation Orientée Objet Java
Encapsulation Classe

→Encapsulation des classes (3/3)

default

class A {


}

class B { class C extends A { class D {


A a; A a; A a;
… … …
} } }

La classe default est visible seulement par les classes de son package.

43
Programmation Orientée Objet Java
Encapsulation classe

→Encapsulation des classes (3/3)

default

class A {


}

class B { class C extends A { class D {


A a; A a; A a;
… … …
} } }

La classe default est visible seulement par les classes de son package.

44
Programmation Orientée Objet Java
Encapsulation attribut

→Encapsulation des attributs (1/4) L’attribut public

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 ;
} } }

La variable public est visible par toutes les classes


45
Programmation Orientée Objet Java
Encapsulation Attribut

→Encapsulation des attributs (2/4)

L’attribut private

public class A {


}

class B { class C extends A { class D {


A a=new A(); A a=new A(); A a=new A();
a. y = t ; a. y = t ; a. y = t ;
} y= t; }
}

La variable private n'est accessible que depuis l'intérieur même de la classe.


46
Programmation Orientée Objet Java
Encapsulation Attribut

→Encapsulation des attributs (3/4)


L’attribut default (par défaut)

public class A {


}

class C extends A { class D {


A a=new A(); A a=new A();
a. z = t ; a. z = t ;
z = t; }
}

La variable default n'est accessible que depuis les classes faisant partie du même package.
47
Programmation Orientée Objet Java
Encapsulation Attribut

→Encapsulation des attributs (4/4)

L’attribut protected

public class A {


protected int w ;

class B { class C extends A { class D {


A a=new A(); A a=new A(); A a=new A();
a.w= t ; a. w = t ; a. z = t ;
} w = t; }
}
La variable 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.)
48
Programmation Orientée Objet Java
Encapsulation méthodes

→Encapsulation des méthodes (1/4) Méthode public

public class A {
public void
meth1()
{ }

}

class C extends A class D {


class B { { A a=new
A a=new A(); A a=new A(); A();
a.meth1() ; a.meth1() ;
} meth1(); a.meth1() ;
} }

La méthode public est visible par toutes les classes

49
Programmation Orientée Objet Java
Encapsulation méthodes

→Encapsulation des méthodes (2/4)


L’attribut private

public class A {
private void meth2 ()
{ }

}

class B { class C extends A { class D {


A a=new A(); A a=new A(); A a=new A();
a.meth1() ; a.meth1() ; a.meth1() ;
} meth1(); }
}

La méthode private n'est accessible que depuis l'intérieur même de la classe.

50
Programmation Orientée Objet Java
Encapsulation méthodes

→Encapsulation des méthodes (3/4)

Méthode default (par défaut)


public class A {
void meth3 () {}

}

class B { class C extends A { class D {


A a=new A(); A a=new A(); A a=new A();
a.meth1() ; a.meth1() ; a.meth1() ;
} meth1() ; }
}

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

→Encapsulation des méthodes (4/4)

Méthode protected
public class A {
Protected void meth4()
{}

}

class B { class C extends A { class D {


A a=new A(); A a=new A(); A a=new A();
a.meth1() ; a.meth1() ; a.meth1() ;
} }
meth1() ;
}

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

→Encapsulation des attributs / méthodes

Modificateur Classe Paquetage Classe fille Autre classe

private visible

default visible visible visible


(même package) (même package)
protected visible visible visible

public visible visible visible visible

MAIS COMMENT ALLONS-NOUS FAIRE MAINTENANT SI NOUS


SOUHAITONS RÉCUPÉRER OU MODIFIER UN ATTRIBUT DANS NOTRE
PROGRAMME ?

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;

public void setAbsent(boolean absent){


[Link]=absent;
}
Les setter et les getter doivent être public boolean isAbsent(){
return absent;
déclarés public
}

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.

L’héritage est l’un des mécanismes les plus


puissants de la POO, il permet de
reprendre des membres d’une classe
(appelée superclasse ou classe mère )
dans une autre classe (appelée sous-
→Intérêts:
classe ou classe-fille ou encore classe ✓ Spécialisation, enrichissement : une nouvelle classe réutilise les attributs et les
dérivée) qui en hérite. opérations d ’une classe en y ajoutant et/ou des opérations particulières à la
nouvelle classe.
✓ Redéfinition : une nouvelle classe redéfinit les attributs et opérations d’une
Une classe B hérite d’une classe A si B est classe de manière à en changer le sens et/ou le comportement pour le cas
un type de A. particulier défini par la nouvelle classe.
✓ Réutilisation : évite de réécrire du code existant et parfois on ne possède pas les
sources de la classe à hériter

56
Programmation Orientée Objet Java
Héritage

→Notons que … →Héritage à plusieurs niveaux


➢ Toutes les classes étendent la public class Voiture {
superclasse « Object » ...
Exemple : class Personne{ … } cela Voiture public void demarre() {
...
signifie en réalité + demmarer }
}
Class Personne extends Object{ … }
public class VehiculePrioritaire
➢ Une classe ne peut étendre qu’une extends Voiture {
...
seule classe : on dit qu’il n’ya pas public void allumeGyrophare()
Ambulance am = new
VehiculePrioritaire Ambulance(...);
d’héritage multiple en JAVA {
[Link]();
+ allumeGyropahre ...
} [Link]();
[Link]("Raoul");
➢ Une classe déclarée final ne peut }

pas être étendue.


Exemple: final class A{ … } on ne peut public class Ambulance extends
VehiculePrioritaire {
avoir class B extends A{ … } Ambulance private String malade;
- malade : String ...
public void chercher(String
+ chercher (String) ma) {
...
}
}

57
Programmation Orientée Objet Java
Héritage →Chainages des constructeurs

Tout constructeur, sauf celui de la classe [Link], fait appel à un autre


constructeur qui est:
- Un constructeur de sa superclasse (appelé par super(…));
- Un autre constructeur de la même classe (appelé par this(…)).
- Cet appel est mis nécessairement en première ligne du constructeur.
- En cas d’absence de cet appel, le compilateur ajoute super(); en première ligne du
constructeur.
public class A {

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

→Chainages des constructeurs

▪ public class A { ▪ public class B extends A {


▪ public class C extends B {

public A() { public B(){


public C() {
[Link]("constructeur de B");
[Link]("constructeur de A"); super(3);
} [Link]("constructeur de C");
} }
} }
▪ public B(int r){
▪ public class EssaiChainage {
this();
public static void main(String[]
[Link]( "autre constructeur
de B"); argv) {
} new C();
}
} }

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

→Constructeur implicite: erreur fréquente


public class A {
public class A {
Etape 1 public class A { public int x ;
public int x ;
public int x ; public A () {}
public class A { public A ( int x ) {
public int x ; public A ( int x ) {
public A (int x) { this . x = x ;
} this . x = x ;
this.x =x; }
}
} }
public class B extends A { }
}
public int y ;
public class B extends A {
public class B extends A { public class B extends A {
public B ( int x , int y ) public int y ;
public int y ; public int y ;
{ public B ( int x , int y ) {
public B ( int x , int y )
this . x = x ; super(x);
this . y = y ;
public B ( int x , int y ) {
{ this . y = y ;
} this . x = x ;
this . x = x ; }
} this . y = y ;
this . y = y ; }
}
}
}
}

61
Programmation Orientée Objet Java
Héritage →Surcharge & Redéfinition

→Surcharge (overloading) →Redéfinition (override)


• DEF 1: Un même nom de • Permet à une sous-classe de fournir une
définition spécifique d'une méthode déjà public class A {
fonction pour plusieurs public void direDesMots() {
définie dans l'une de ses superclasses.
fonctions qui sont distinguées
par leur signature.
• La version de la méthode de la superclasse
[Link]("Hey, ça marche ?");
}
peut être invoquée à partir du code de la
• DEF 2: Avoir une même sous-classe en la utilisant le mot clé super
}
public class B extends A {
méthode qui possède des (exemple :
paramètres de nature [Link]()). public void direDesMots() {
différentes... • Redéfinition est un concept qui s'applique
}
[Link]("Hey, pas encore ?");
uniquement aux méthodes et non pas aux
variables public void direDesMots(String msg) {
• La redéfinition est la possibilité d’utiliser [Link]("Alors, comme ça tu veux
exactement la même signature pour définir dire "+msg+" ?");
un service dans un type et dans un sous }
void Message(String a);
type. Le type de retour du service doit être
void Message(int a); le même, mais la visibilité peut changer }

void Message(String a, String b);

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.

• Une classe abstraite ne peut pas être instanciée. Elle peut


être sous-classée (étendue) tant que la sous-classe est soit
abstraite, soit implémente toutes les méthodes marquées
comme abstraites par les super-classes

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.

Animal myDog = new Dog(); • Il signifie quelque chose qui peut


prendre plusieurs formes.
Dog
Référence Objet crée
déclaré en en
tant tant que
qu’Animal(). Dog().

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];

✔ Déclarer un tableau de type On peut affecter les classes « filles » de la classe


Animal. Animal dans le tableau ( de type Animal).
✔ Un tableau qui contiendra des
objets
de type Animal.

animals [0] = new Dog();

animals [1] = new Cat();

animals [2] = new Wolf();

67
Programmation Orientée Objet Java
Polymorphisme →Tableau polymorphique

68
Programmation Orientée Objet Java
Polymorphisme →Sur-classement et substitution

Animal animal; - l’objet Dog crée est « surclassé » il est vu de type


Animal
Dog myDog = new Dog(); Animal référence déclaré (animal).
animal = myDog;
public void eat(){
sout(’’je manges’’)
- Les fonctionnalités de Dog sont restreintes à celles
} de Animal
public void roam(){
sout(’’je voyages’’)
- Le chien ne pourra pas être un chien de garde (il
} peut pas appelé watch()).
Il faut donc substituer animal par :
((Dog) animal).watch();
Dog Cat Wolf

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

→InstanceOf : Définition →InstanceOf:Exemple →Downcasting


public class B { Animal a = new Dog();
• L'opérateur instanceof (également } Dog d = (Dog) a;
appelé opérateur de comparaison public class A { [Link]()
}
de type) permet de vérifier si l'objet public class Test { • L’objet a est de type Animal
est une instance du type spécifié
public static void main(String... ar) {
(classe ou sous-classe ou interface).
• Il pointe vers un objet de type Dog, donc
A ob= new A(); la conversion (cast) dans ce cas là est
• Il retourne : [Link](ob instanceof A);
permise
⮚ true - si la variable est une //checking if ob is an object of A class
[Link](ob instanceof B);
instance de la classe spécifiée, //checking if ob is an object of B class.
• Lors de l’exécution, et après avoir
} effectué la conversion, l’objet d exécute
ou de la classe parente
}
⮚ false - si la variable n'est pas Output:
la méthode watch()
true
une instance de la classe ou la false
variable est nulle

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

→Transtypage: Définition →Transtypage: Quand ? →Transtypage: Quand ?


• L'opérateur de transtypage (opérateur de • S’il risque d’y avoir perte d’information • Si on veut prendre la partie entière d’un
"cast") permet de modifier explicitement le réel (ou double)
Par exemple lorsqu’on fait l’affectation d’un
type d'une valeur avant de l'affecter à une
entier long (64 bits) à un entier int (32 bits), Par exemple si on utilise la méthode
variable ou de l'utiliser.
ou d’un réel double (Virgule flottante random() de la class Math cette fonction
• On écrit entre parenthèses le nom du nouveau double précision) vers un réel float. On retourne par défaut un double entre 0 et
type voulu, suivi de la valeur à transtyper, du force alors le type, indiquant ainsi à la 1,alors qu’on a besoin d’un int. Par exemple,
nom de la variable contenant cette valeur, de
machine Java qu’on est conscient du dans ce cas on peut procéder comme suite :
l'opération fournissant cette valeur...
problème de risque de perte d’information.
(La première variable peut contenir plus int a = (int) [Link]()*100 ; //on
d'information que la seconde). ne prend que la partie entière

73
Programmation Orientée Objet Java
Polymorphisme →Final: Classe / Méthode

→Classe final : ne peut pas avoir de classes filles

→Méthode final : ne peut pas être redéfinie

74
Programmation Orientée Objet Java
Polymorphisme →Méthode Equals

→Définition →Exemple 1 →Exemple 2


• La méthode equals permet à Java de public class Animal
{
comparer deux objets et de déterminer String name;
l’égalité entre ces deux objets, ce qui parait
@Override
logique. public boolean equals(Object obj) {
if (obj == null) {
• Par défaut, la méthode retourne vrai s’il
return false;
s’agit du même objet en mémoire. Par }
conséquent, si deux objets distincts instancié if (getClass() != [Link]()) { // if(!(obj
instanceof Animal))
à partir de la classe Personne, par exemple, return false;
ont tout les deux le même id, nom, prénom et }
final Animal animal = (Animal) obj;
date de naissance, la méthode ne retourne pas
vrai mais faux, car il s’agit de deux objets if ([Link] != [Link]) {
distincts en mémoire, c’est pourquoi il faut return false;
}
parfois la surcharger. return true;
}
}
75
Abstraction Interfaces

→ 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

• Une fois on déclare une méthode abstraite dans une classe A,


cette classe devient abstraite aussi

• Une méthode abstraite ne peut pas être déclarée static ou


private ou final.

Une classe abstraite ne peut pas être instanciée

77
Programmation Orientée Objet Java
Interfaces →Les interfaces

<<ClassA>>

Si la classe ClassA contient que des méthodes abstraites -> Interface

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.

▪ C’est un ensemble de méthodes abstraites

▪ On peut déclarer que des constantes dans une interface


78
Programmation Orientée Objet Java
Interfaces →Les interfaces

▪ 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

▪ La classe C doit implémenter <<Interface I>>


toutes les méthodes de l’interface <<Interface I1>>

<<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.

➢ Une Exception est un évènement


qui arrive durant l’exécution d’un
programme qui interrompt le
→Quand ?: Une exception peut être déclenchée de deux façons :
déroulement normal des
instructions. ✓ L’exécution du programme ne se déroule pas de la façon prévue et la machine Java
génère une exception.
✓ Le programme décide lui-même de déclencher une exception, afin de signaler à la
méthode appelante que quelque chose ne se déroule pas comme prévu.

83
Notions avancées en Java
Exceptions →Le mécanisme

-Lors de l'exécution, après avoir Etapes de production de l’exception :


- Soit un programme Java contenant La méthode main :
un incident d'exécution (une division affiché les chaînes "Début du - a instancié un objet Obj de classe
par zéro dans l'instruction x = 1/0; ) programme" et " ...Avant incident", Action1,;
dans la méthode meth() de la classe le programme s'arrête et la java - a affiché sur la console la phrase
"Début du programme",
Action1. machine signale une erreur. - a invoqué la méthode meth() de
l'objet Obj,
- cette méthode est appelée dans la -Voici ci-dessous l'affichage obtenu - a affiché sur la console la phrase
sur la console lors de l'exécution " ...Avant incident",
classe UseAction1 à travers un objet - a exécuté l'instruction "x = 1/0;«
de classe Action1
- Dès que l'instruction "x = 1/0;" a été exécutée
---- java UseAction1 celle-ci a provoqué un incident. En fait une
Début du programme exception de la classe ArithmeticException a été
...Avant incident "levée" (un objet de cette classe a été instancié)
[Link] : / par la JVM.
by zero
- La JVM a arrêté le programme immédiatement à
---- : Exception in thread "main"
cet endroit parce qu'elle n'a pas trouvé de code
d'interception de cette exception qui a été
automatiquement levée.

84
Notions avancées en Java
Exceptions

→Déclencher explicitement une exception


Il est également possible de déclencher nos propres exceptions, qu'elles
soient instances de classes fournies par l'API Java, ou de nos propres
classes:

Le mot-clé throw fait partie des mots-clés réservés du langage Java, et il


permet de forcer la génération d'une exception, représentée par l'objet
qu'on lui passe en paramètre.

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.

• Exception: contient l'ensemble des


exceptions gérées par le
Programmeur (ArithmeticException
etc.)

• RunTimeException: C'est la super- Erreur de compilation: Le constructeur de la


classe de toutes les exceptions classe [Link] est susceptible, par
normales qui sont des exceptions définition (cf. api), de renvoyer une exception du
non vérifiées. type [Link]

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

✔La gestion des exceptions Java est un Il y a deux façons de réagir au


Une exception! déclenchement d'une exception pour un
mécanisme qui permet de traiter toutes
Que devons programme :
les situations inattendues qui peuvent se faire? ⮚ soit l'exception est traitée localement au
produire au moment de l'exécution. code exécuté. (à travers le bloc
try/catch)
✔Elle s'appuie sur le fait que vous La gérer! ⮚ soit l'exception est transmise à la
Mais.
savez que la méthode peut avoir un Comment? fonction appelante, qui elle-même peut
comportement risqué. Si c'est le cas, choisir ce qu'elle en fait. (à travers
vous devez écrire explicitement un
throws)
morceau de code qui prend en compte Façon active (try /
catch)
cette éventualité.
✔Lorsqu'une méthode possède un Façon passive
(throws)
comportement risqué, on dit qu'elle
peut générer(ou lancer) une exception.

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.

-Résultat d'exécution du code :


NOTE : L'exception ArithmeticException est
une sous-classe de la classe
RuntimeException (unchecked exception),
et donc le compilateur ne se plaindra pas si
on ne gère pas cette exception par un bloc
try/catch

89
Notions avancées en Java
Exceptions

→Gestion passive - throws →Le bloc finally


Indique qu'une exception peut-être levée • Permet de faire des actions spécifiques suite à
dans le code mais que celui-ci ne la gère pas l'exécution du bloc du code de la clause try et, si c'est
(pas de try/catch).
le cas, de la clause catch.

• Sert à exécuter un code quoi qu'il arrive(fermer un


fichier, une connection, libérer une ressources)

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 { ... }

catch (ClassException e1) { ... } Il est possible


d’avoir un
ensemble
catch (ClassException e2) { ... } try/finally sans
la clause catch

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.

Sinon, la création d'une nouvelle exception est utile


lorsqu'on veut gérer un type particulier d'exception
et ainsi la distinguer des autres exceptions.

- 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 :

• Une hiérarchie d'interfaces permettant de


représenter les collections sous forme de types
abstraits.

• Des implémentations de ces interfaces.

• Implémentation de méthodes liées aux collections


(recherche, tri, etc.).

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.

● List monVector = new Vector()

Remarque: L’attribution de la taille d’un tableau dynamique est facultatif !

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;}

• Plus exactement, la méthode sort() //Redéfinir la méthode compareTo()


ne fonctionnera que si tous les @Override
éléments de la liste sont d’une
classe qui implémente l’interface public int compareTo(Student s) {

[Link]<? super E> return [Link]([Link]());

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]("La liste triée est:");

[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.

• L'interface Map stocke les pairs clé et sa


valeur dans une table de hachage.
• Map peut être implementée avec:
- HashMap: il ne garantie pas l'ordre
d'insertion des éléments lors de parcours.
- TreeMap: elle stocke les éléments triés selon
leurs valeurs.

• La comparaison utilise l’ordre naturel


(interface Comparable<K>) ou une instance
de Comparator<? super K>

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

→Utiliser LIST, SET ou MAP


● Si vous ne souhaitez pas que les
valeurs soient dupliquées dans la
base de données, Set doit être
votre premier choix, car toutes ses
classes n’autorisent pas les
doublons.
● Si des opérations de recherche
fréquentes basées sur les valeurs
d’index sont nécessaires, alors List
(ArrayList) constitue un meilleur
choix.
● S’il est nécessaire de maintenir
l’ordre d’insertion, List est
également préférée.
● Si l’exigence est d’avoir un
mappage clés/valeurs dans la
base de données, alors Map est
votre meilleur choix.
106
API Stream Java

→ 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

➢ A la différence des programmes


impératifs organisés en
instructions, les programmes
fonctionnels sont bâtis sur des
expressions dont la valeur est le
résultat du programme. Pour ce
faire nous utiliserons l’API Stream
de Java 8.

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

Pourquoi l'ordre est important


L'exemple suivant est constitué de deux opérations intermédiaires "map" et "filtre" et une opération terminale "forEach".
Essayons de nouveau de voir de près la manière dont ces opérations sont exécutées:

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

Pourquoi l'ordre est important


L'exemple suivant est constitué de deux opérations intermédiaires "map" et "filtre" et une opération terminale "forEach". Essayons de nouveau
de voir de près la manière dont ces opérations sont exécutées:

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

Vous aimerez peut-être aussi