POO Java 2 Smallpdf
POO Java 2 Smallpdf
2025/2026
C h api tre 1
Introduction au Java
Introduction
• Orienté objet: Java repose sur le paradigme de la programmation orientée objet (POO).
• Portable: Grâce à la machine virtuelle Java (JVM), le code Java peut s’exécuter sur différentes plateformes
("Write Once, Run Anywhere").
• Sécurisé: Java propose des fonctionnalités avancées pour la gestion de la sécurité et la protection des applications.
• Multithreading: Java permet l’exécution simultanée de plusieurs threads, optimisant ainsi la performance.
POO en java 1
Introduction
Mode d’exécution
POO en java 2
Introduction
Pourquoi Java?
L’API de Java
• Java fournit de nombreuses librairies de classes remplissant des fonctionnalités très diverses: c’est l’API Java.
• API (Application and Programming Interface /Interface pour la programmation d’applications): Ensemble de
bibliothèques permettant une programmation plus aisée.
POO en java 3
Introduction
Pourquoi Java?
L’API de Java
Les principaux paquetages:
• [Link] : structures de données classiques.
• [Link]: entrées / sorties.
• [Link] : chaînes de caractères, interaction avec l’OS, threads.
• [Link] : les applets sur le web.
• [Link] : interfaces graphiques, images et dessins...
• [Link] : package récent proposant des composants « légers» pour la création d’interfaces graphiques.
• [Link] : sockets, URL ...
• [Link] : Remote Method Invocation.
• [Link] : fournit le package JDBC.
POO en java 4
Introduction
POO en java 5
C h api tre 2
Structures fondamentales
Syntaxe du langage Java
• Les commentaires d’explication se placent généralement juste avant une déclaration (d’attribut ou de
méthode).
• Ils sont récupérés par l’utilitaire javadoc et inclus dans la documentation ainsi générée.
6
Syntaxe du langage Java
7
Syntaxe du langage Java
• Les espaces, tabulations, sauts de ligne sont autorisés. Cela permet de présenter un code plus lisible.
8
Syntaxe du langage Java
• Pour pouvoir faire un programme exécutable il faut toujours une classe qui contienne la méthode "main"
• C’est le point d’entrée dans le programme: le microprocesseur sait qu’il va commencer à exécuter les instructions à
partir de cet endroit.
9
Syntaxe du langage Java
Identificateurs
• On a besoin de nommer les classes, les variables, les constantes, etc. ;
on parle d’identificateur. (Attention: Java distingue les majuscules des minuscules.)
Type d'identificateur Exemple valide Remarques
Commence par une lettre
Nom de classe MaClasse
majuscule (convention).
Commence par une lettre
Nom de méthode calculerValeur
minuscule (convention).
Nom de variable compteur Commence par une lettre.
Commence par le caractère
Nom de variable _temperature
de soulignement (_).
Commence par le signe
Nom de variable $montantFinal
dollar ($).
Peut contenir des chiffres
Nom de variable i18n
(sauf en première position).
POO en java 10
Syntaxe du langage Java
Affectation
§ L'affectation est l'opération qui consiste à donner une valeur à un identificateur (variable ou constante)
que l'on a préalablement déclaré.
int compteur = 0;
compteur= 5; // C'est permis
Exemple:
final int NOMBRE_JOURS = 7; // NOMBRE_JOURS = 8; // <-- C'est interdit, cause une erreur de
compilation!
POO en java 11
Syntaxe du langage Java
Écriture en Java
L’écriture sur l’écran se fait à l’aide de l’objet [Link] et de ses méthodes principales:
POO en java 12
Syntaxe du langage Java
Lecture en Java
§ Pour lire des données saisies par l’utilisateur, on utilise la classe Scanner, appartenant au paquetage
[Link].
Ø Avant d’utiliser Scanner, il faut l’importer: import [Link];
Ø Création d’un objet Scanner: Scanner sc = new Scanner([Link]);
import [Link];
public class Lecture {
public static void main(String[] args) {
Exemple: Scanner scanner = new Scanner([Link]);
[Link]("Entrez votre nom : ");
String nom = [Link]();
[Link]("Bonjour, " + nom + " !");
[Link]();
}
}
POO en java 13
Syntaxe du langage Java
POO en java 14
Syntaxe du langage Java
Les opérateurs
Les opérateurs Java sont des symboles spéciaux qui effectuent des opérations sur les variables et les
valeurs. Ils sont utilisés pour manipuler les données et les variables dans les expressions. Java propose un
large éventail d'opérateurs classés en plusieurs types en fonction de leur fonctionnalité.
§ Opérateurs arithmétiques
+ (Ajout)
int a = 10;
- (Soustraction)
int b = 5;
* (Multiplication) [Link]("Addition: " + (a + b)); // Output: 15
/ (Division) [Link]("Subtraction: " + (a - b)); // Output: 5
[Link]("Multiplication: " + (a * b));// Output: 50
% (module)
[Link]("Division: " + (a / b)); // Output: 2
[Link]("Modulus: " + (a % b)); // Output: 0
POO en java 15
Syntaxe du langage Java
Les opérateurs
§ Opérateurs relationnels
== (égal à)
int a = 10;
!= (non égal à)
int b = 5;
> (Supérieur à) [Link](a == b); // Output: false
< (moins de) [Link](a > b); // Output: true
[Link](a < b); // Output: false
>= (supérieur ou égal)
<= (Inférieur ou égal à)
§ Opérateurs logiques
boolean x = true;
&& (ET logique)
boolean y = false;
|| (OU logique) [Link](x && y); // Output: false
! (logique NOT) [Link](x || y); // Output: true
[Link](!x); // Output: false
POO en java 16
Syntaxe du langage Java
Les opérateurs
§ Opérateurs d’assignation
+= (Ajouter et attribuer)
-= (Soustraire et céder)
*= (Multiplier et attribuer) int a = 10;
a += 5; // Equivalent to a = a + 5
/= (Diviser pour mieux régner)
[Link](a); // Output: 15
%= (Modulus et assign)
§ Opérateurs d’incrémentation
++ (Incrément)
-- (Diminution) int a = 10;
[Link](++a); // Output: 11
[Link](--a); // Output: 10
POO en java 17
Les structures conditionnelles
Instructions conditionnelles
• Effectuer une ou plusieurs instructions seulement si une certaine condition est vérifiée.
if (condition){
//bloc d'instructions
}
• Effectuer une ou plusieurs instructions si une certaine condition est vérifiée sinon effectuer d’autres instructions.
if (condition) {
//1er bloc d'instructions
}
else {
//2ème bloc d'instructions
}
POO en java 18
Les structures conditionnelles
Instructions conditionnelles
import [Link];
public class Comparaison {
public static void main(String[] args) {
Scanner sc = new Scanner([Link]); // Création de l’objet Scanner
[Link]("Entrez le premier entier (a) : ");
§ Exemple int a = [Link](); // Lecture du premier entier
[Link]("Entrez le deuxième entier (b) : ");
int b = [Link](); // Lecture du deuxième entier
if (a > b)
[Link]("Le plus grand est : " + a);
else
[Link]("Le plus grand est : " + b);
POO en java 19
Les structures conditionnelles
Instructions conditionnelles
§ switch
• L’utilisation de if / else peut s’avérer lourde quand on doit
traiter plusieurs sélections et de multiples alternatives. switch(nb)
{
• pour cela existe en Java le switch / case assez identique à
case 1:
celui de C/C++ . [Link]("Un");
break;
• La valeur sur laquelle on teste doit être un char ou un case 2:
entier. [Link]("Deux");
break;
• L’exécution des instructions correspondant à une default:
alternative commence au niveau du case correspondant et se [Link]("Autrenombre");
break;
termine à la rencontre d’une instruction break ou arrivée à la
}
fin du switch.
POO en java 20
Les structures répétitives
• On veut répéter une ou plusieurs instructions un nombre indéterminés de fois: on répète l’instruction ou le bloc
d’instruction tant que une certaine condition reste vraie.
• nous avons en Java une première boucle while:
import [Link];
• while (condition) public class Factorielle {
public static void main(String[] args) {
{ Scanner sc = new Scanner([Link]);
//bloc d'instructions [Link]("Entrer n: ");
int n = [Link]();
} int result = 1, i = n;
while (i > 1) {
result = result * i;
i--; }
[Link]("La factorielle de " + n + " vaut " + result);
[Link]();}}
POO en java 21
Les structures répétitives
• do (condition) { int i = 0;
//bloc d'instructions do {
}while (condition); [Link](i);
i++;
}while (i < 5);
POO en java 22
Les structures répétitives
{
[Link](i);
}
POO en java 23
Les structures répétitives
• Syntaxe générale:
for (Type element : collectionOuTableau) {
// Instructions utilisant 'element'
}
POO en java 24
Les structures répétitives
§ Exemple:
POO en java 25
C h api tre 3
Tableaux
Les tableaux
Les tableaux
§ Les tableaux permettent de stocker plusieurs valeurs de même type.
◦ Les valeurs contenues dans la variable sont repérées par un indice.
◦ Les tableaux sont des objets
§ Déclaration : (Type [] nomTableau ;).
Exemple: int notes[];
int[] notes; // forme recommandée en Java
§ Création du tableau
notes = new int[5]; // crée un tableau de 5 entiers initialisés à 0
§ Déclaration + création en une seule ligne
int[] notes = new int[5];
Ø ou bien, avec initialisation directe: int[] notes = {12, 15, 18, 10, 14};
26
Les tableaux
§ Parcourir un tableau
• Pour parcourir un tableau, on utilise l’instruction "for"
Méthode 1:
public class Demo {
public static void main( String [] args ) {
// Déclaration et initialisation du tableau
int array [] = { 10, 20, 30, 40, 50 };
// Parcours du tableau
for ( int i=0; i<[Link];i++ ) {
[Link]( array[ i ] );
}
}
}
27
Les tableaux
Méthode 2:
public class Demo {
public static void main( String [] args ) {
// Declaration et initialisation du tableau
int array[] = { 10, 20, 30, 40, 50 };
[Link]( "Parcours du tableau avec un for each" );
for ( int value : array ) {
[Link]( value );
}
}
}
POO en java 28
Les tableaux
§ Obtenir la Longueur
int longueur = [Link];
POO en java 29
Les tableaux
Arrays en java
POO en java 30
Les tableaux
Arrays en java
import [Link];
int[] notes = {12, 8, 15, 10, 18}; [12, 8, 15, 10, 18]
[Link]([Link](notes));
import [Link];
int[] tab = new int[5]; [7, 7, 7, 7, 7]
[Link](tab, 7); // Remplit tout le tableau avec 7
[Link]([Link](tab));
POO en java 31
Les tableaux
Arrays en java
§ [Link]() → Trier un tableau en ordre croissant
import [Link];
int[] valeurs = {5, 2, 8, 1, 3}; [1, 2, 3, 5, 8]
[Link](valeurs);
[Link]([Link](valeurs));
POO en java 32
Les tableaux
§ Exercice d’application:
§ Affiche à la fin:
• le contenu du tableau A,
• le contenu du tableau B,
• et le contenu du tableau C après la fusion.
POO en java 33
Les tableaux
POO en java 34
Les tableaux
C[[Link] + i] = B[i];
}
// Étape 4 : Affichage des trois tableaux
[Link]("Tableau A : " + [Link](A));
[Link]("Tableau B : " + [Link](B));
[Link]("Tableau C (fusionné) : " + [Link](C));
[Link]();
}
}
POO en java 35
C h api tre 4
Matrices
Les matrices
Matrices
§ Vu comme une grille composée de lignes et de colonnes,
§ Chaque élément est désigné par sa position dans cette grille : (numéro de ligne, numéro de colonne),
§ Si T est un tableau à deux dimensions, l’élément à la ligne i et colonne j est donné par T[i][j].
POO en java 36
Les matrices
Matrices
POO en java 37
Les matrices
POO en java 38
Les tableaux
Méthode 1:
public class Demo {
public static void main( String [] args ) {
// Déclaration et initialisation de la matrice
int[][] M = {{10, 20, 30},{40, 50, 60}};
// Parcours de la matrice
for (int i = 0; i < [Link]; i++) {
for (int j = 0; j < M[i].length; j++) {
[Link](M[i][j]);
} }}}
39
Les matrices
Méthode 2:
public class Demo {
public static void main( String [] args ) {
// Déclaration et initialisation de la matrice
int[][] M = {{10, 20, 30},{40, 50, 60}};
// Parcours de la matrice avec for-each
for (int[] ligne : M) { // parcours des lignes
for (int valeur : ligne) { // parcours des colonnes
[Link](valeur);
}}}}
POO en java 40
Les matrices
[Link](notes[0][2]); // Résultat : 18
POO en java 41
C h api tre 5
ClasseString
Classe String
String: Définition
Une chaîne de caractères en Java est un objet de la classe String qui représente une suite de caractères.
Elle est immutable, c’est-à-dire que son contenu ne peut pas être modifié après sa création.
[Link](s); [Link](s);
POO en java 42
Classe String
String: Manipulation
String s = "Java";
int longueur = [Link]();
[Link](longueur); //4
POO en java 43
Classe String
String: Manipulation
[Link](test);// true
POO en java 44
Classe String
String: Manipulation
7. Recherche un caractère ou une sous-chaîne (indice)
POO en java 45
Classe String
String: Manipulation
9. Comparaison des chaînes de caractères en Java: == (Référence)
String a = "Java";
String a = new String("Java");
String b = "Java";
String b = new String("Java");
[Link](a == b); // true
[Link](a == b); // false
String a = "Java";
String b = "JAVA";
[Link]([Link](b)); // false
[Link]([Link](b)); // true
POO en java 46
Classes et Objets
Pr. AIT MAIT Hind
2025/2026
Introduction
§Paradigme de programmation: est une façon d’organiser le code pour résoudre un problème. Chaque
paradigme propose une vision différente:
Comment représenter les données,
Comment structurer les instructions,
Comment décomposer et résoudre les problèmes.
ØParmi les paradigmes de programmation, on trouve:
Programmation procédurale,
Programmation orientée objet.
POO en java 1
Introduction
§ Programmation procédurale
Ø Le programme est divisé en petites parties appelées procédures /fonctions qui effectuent des
traitements sur des données.
Ø Il n’existe pas un lien direct entre les données et les traitements.
• Les données et les traitements sont séparés.
• Les données à traiter sont passées en arguments aux procédures
POO en java 2
Introduction
POO en java 4
Introduction
POO en java 5
Introduction
POO en java 6
Introduction
POO en java 7
Objet & Classe
Notion d’objet
Ø Le concept d’objet est utilisé pour modéliser informatiquement des objets concrets de la vie
courante (véhicule, personne, etc.) ou des objets conceptuels (date, etc.).
POO en java 8
Classe & Objet
Notion d’objet
POO en java 9
Objet & Classe
Notion de classe
Ø Une classe est la description d’une famille d’objets ayant une même structure et un même
comportement.
POO en java 10
Classe & Objet
Notion de classe
Ø Les membres d’une classe sont accessibles et utilisables en créant une instance de cette
classe.
POO en java 11
Classe & Objet
POO en java 12
Classe & Objet
POO en java 13
Classe & Objet
Modificateurs de la classe
Modificateur Rôle
La classe contient une ou des méthodes abstraites, qui n'ont pas de définition
explicite. Une classe déclarée abstract ne peut pas être instanciée : il faut définir
abstract une classe qui hérite de cette classe et qui implémente les méthodes nécessaires
pour ne plus être abstraite.
private La classe n'est accessible qu'à partir de la classe où elle est définie (les classes
internes).
public La classe est accessible partout
POO en java 14
Classe & Objet
Objet
n L'opérateur new crée une instance d'une classe en faisant appel à une méthode
particulière appelée constructeur, et renvoie une référence sur l'objet instancié.
n Pour chaque instance d'une classe, le code est le même, seules les données sont
différentes à chaque objet.
POO en java 15
Classe & Objet
q Contrairement à la déclaration d’une variable d’un type primitif (comme int n ;),
elle ne réserve pas d’emplacement pour un objet de type Point, mais seulement
un emplacement pour une référence à un objet de type Point.
n L’emplacement pour l’objet proprement dit sera alloué sur une demande explicite
du programme, en faisant appel à l’opérateur unaire nommé new.
POO en java 16
Classe & Objet
référence dans a.
POO en java 17
Classe & Objet
POO en java 18
Encapsulation
Encapsulation
q les données d'un objet doivent être privées (c'est à dire protégées et accessibles(et surtout
modifiables) qu'au travers de méthodes prévues à cet effet).
POO en java 19
Encapsulation
Sans modificateur, une entité (méthode ou attribut) est visible par toutes les classes se trouvant
dans le même package.
POO en java 20
Constructeurs
Constructeurs
§ Un constructeur est une méthode spéciale d’une classe qui est appelée automatiquement
lors de la création d’un objet.
§ Porte le même nom que la classe.
§ Ne retourne aucune valeur (pas même void).
§ Peut être surchargé (plusieurs constructeurs avec des paramètres différents).
§ Est appelé automatiquement par new.
POO en java 21
Constructeurs
POO en java 22
Constructeurs
Constructeur paramétré
§ Il sert à initialiser les attributs de l’objet avec des valeurs données lors de sa
création.
public class Point
{
// Attributs (coordonnées du point)
private int x;
private int y;
// Constructeur paramétré
public Point(int abs, int ord) {
x = abs;
y = ord;
}
}
Ø Point p = new Point(3, 5); // initialise x=3, y=5
POO en java 23
Constructeurs
§ Le constructeur de copie permet de créer un nouvel objet à partir d’un autre objet du
même type. Autrement dit, il duplique les attributs d’un objet existant.
public class Point
{
private int x, y;
// Constructeur paramétré
public Point(int abs, int ord) {
x = abs;
y = ord;
}
public Point(Point p) {
this.x = p.x;
this.y = p.y;
}
}
POO en java 24
Constructeurs
§ Utilisation:
public class TestPoint {
public static void main(String[] args) {
Point p1 = new Point(3, 4);
Point p2 = new Point(p1); // création par copie
[Link](); // (3, 4)
[Link](); // (3, 4)
}
}
POO en java 25
Constructeurs
§ Utilisation:
public class TestPoint {
public static void main(String[] args) {
Point p1 = new Point(3, 4);
Point p2 = new Point(p1); // création par copie
[Link](); // (3, 4)
[Link](); // (3, 4)
}
}
POO en java 26
Destructeur
§ Java n’a pas prévu la notion de destructeur telle quelle en existe en C++.
§ La destruction des références d’objets se fait automatiquement grâce à un processus
appelé "ramasse miettes" (ou garbage collector) qui s’occupe de collecter les objets qui
ne sont plus référenciés.
POO en java 27
Destructeur
POO en java 28
Variable d’instance vs de la classe
Variables d’instance
POO en java 29
Variable d’instance vs de la classe
Variable de la classe
POO en java 30
Méthode de la classe
n Une méthode de classe est une méthode qui ne nécessite pas la création d’un objet, elle
peut être appelée sans instance de la classe.
n On utilise là aussi le mot réservé static.
n L’appel d’une méthode de classe ne se fait pas sur un objet, mais sur une classe.
q Exemple : [Link](3.14);
POO en java 31
Méthode de la classe
n Exemple
double i = [Link](5);
double x = [Link]();
POO en java 32
Accesseurs / Modificateurs
n Ainsi, les données déclarées private à l'intérieur d'une classe ne peuvent être accédées et
modifiées que par des méthodes définies dans la même classe.
n Par convention, les accesseurs commencent par get et les modificateurs commencent
par set.
POO en java 33
Accesseurs / Modificateurs
POO en java 34
L’autoréférence this
L’autoréférence this(1)
Le mot-clé this représente l’objet courant sur lequel une méthode ou un constructeur est exécuté.
Parmi les cas d’utilisation de this:
1. Distinguer un attribut d’un paramètre.
2. Retourner l’objet courant.
POO en java 35
L’autoréférence this
L’autoréférence this(2)
POO en java 36
L’autoréférence this
L’autoréférence this(4)
2. Retourner l’objet courant
POO en java 38
Surcharge des fonctions
Remarque: Puisque les constructeurs sont aussi des méthodes spéciales, ils peuvent donc être surchargés
exactement comme les autres méthodes.
Le compilateur choisit automatiquement le bon constructeur selon: le nombre, le type des paramètres
passés.
public class Point { public class TestPoint {
private int x, y; public static void main(String[] args) {
public Point(int a, int b) { Point p1 = new Point(3, 5);
x = a; Point p2 = new Point(4);
y = b;} [Link]();
Exemple:
public Point(int a) { [Link]("Coordonnées du point :");
x = a; }
y = a;} }
public void afficher() {
[Link]("(" + x + ", " + y + ")");}
public void afficher(String msg) {
[Link](msg + " (" + x + ", " + y + ")");}
}
POO en java 39
Exercice d’application
1. Créez une classe Voiture avec les attributs: marque: (String), vitesse(int) et nbVoitures: représentant le nombre
total de voitures créées.
2. Créez le constructeur par défaut qui initialise marque = "Inconnue" et vitesse = 0.
3. Créez le constructeur paramétré: initialise marque et vitesse avec les valeurs données.
Ø À chaque création d’objet, incrémentez nbVoitures.
4. Créez les méthodes d’accès et de modification: getMarque(), getVitesse(), setMarque(String), setVitesse(int).
5. Ajoutez une méthode d’affichage qui affiche la marque et la vitesse d’une voiture.
6. Ajoutez une méthode surchargée accelerer():
• Version sans paramètre → augmente la vitesse de 10 km/h,
• Version avec un paramètre entier → augmente la vitesse du nombre de km/h passé.
7. Ajoutez une méthode qui affiche le nombre total d’objets Voiture créés.
Ø Dans une classe TestVoiture, écrivez le programme principal:
1. Créez trois objets: v1, v2 et v3, en initialisant les attributs de v2 et v3.
2. Affichez les informations de chaque voiture.
3. Changez la vitesse de v1.
4. Appelez accelerer() (avec et sans paramètre) sur v2.
5. Affichez le nombre total de voitures créées.
POO en java 40
Solution (1) // 3) Accesseurs / mutateurs
public String getMarque() { return marque; }
public int getVitesse() { return vitesse; }
public class Voiture {
public void setMarque(String marque) {
// Attributs d'instance
[Link] = marque; }
private String marque;
public void setVitesse(int vitesse) {
private int vitesse;
[Link] = vitesse; }
// 4) Affichage
// Attribut de classe (partagé)
public void afficher() {
private static int nbVoitures = 0;
[Link]("Voiture[" + marque + "] - vitesse = " +
vitesse + " km/h") }
// 1) Constructeur par défaut
// 5) Surcharge de accelerer()
public Voiture() {
public void accelerer() {
[Link] = "Inconnue";
[Link] += 10;
[Link] = 0;
}
nbVoitures++; // compter chaque objet créé}
public void accelerer(int v) {
// 2) Constructeur paramétré
[Link] += v; }
public Voiture(String marque, int vitesse) {
// 6) Méthode de classe pour afficher le total
[Link] = marque;
public static void afficherNbVoitures() {
[Link] = vitesse;
[Link]("Nombre total de voitures créées : " +
nbVoitures++; }
nbVoitures);}
POO en java 41
Solution (2)
POO en java 42
Héritage & Polymorphisme
Pr. AIT MAIT Hind
2025/2026
Héritage
Héritage
Créer une nouvelle classe à partir d'une classe existante en partageant les attributset ses méthodes.
Lesrelations d’héritage forment une hiérarchie
Spécialisation (classes descendantes)
Généralisation (classes ascendantes)
Au sommet se situe la classe mère
(ou superclasse)
En dessous:
la classe fille (ou sous-classe)
POO en java 1
Héritage
Avantages
Spécialisation/Enrichissement
La classe s’enrichie en ajoutant ses propresattributset méthodes.
Redéfinition
La classe fille redéfinit les méthodes d’une classe mère de façon à adapter son comportement.
Réutilisation
Evite la réécriture du code existant en factorisant les parties communes du code.
POO en java 2
Héritage
Des méthodes
Chaque type à ses spécificités
Voiture Avion Bateau
Des attributssupplémentaires nbPorte: entier nbPassager: Entier moteurs: booleen
POO en java 3
Héritage
Héritage en JAVA
Utilisation du mot clé extends
POO en java 4
Héritage
n Les variables et méthodes définies avec le modificateur d'accès public restent publiques à travers l'héritage
et toutes les autres classes.
n Une variable d'instance définie avec le modificateur private est bien héritée mais elle n'est pas accessible
directement mais via les getters et setters.
n Un membre de la classe de base déclaré protected est accessible à ses classes dérivées ainsi qu’aux classes
du même paquetage.
POO en java 5
Héritage
Héritage et constructeur
n En Java, le constructeur de la classe dérivée doit prendre en charge l’intégralité de la construction de l’objet.
n Si un constructeur d’une classe fille appelle un constructeur de la classe mère, il doit obligatoirement s’agir
n Sans précision du constructeur, c'est le constructeur par défaut qui est appelé (constructeur sans arguments).
POO en java 6
Héritage
POO en java 7
Héritage
POO en java 8
Héritage
POO en java
Héritage
POO en java 10
Héritage
POO en java 11
Héritage
POO en java 12
Héritage
Héritage en chaîne
POO en java 13
Héritage
n La redéfinition du comportement des méthodes de la classe mère peut prendre trois formes:
q Surcharge (overloading): est la capacité d'avoir plusieurs méthodes avec le même nom mais des
signatures différentes (nombre ou type de paramètres) dans la même classe ou dans une classe héritée.
q Redéfinition (overriding): est la capacité de la classe fille à fournir une nouvelle implémentation pour une
méthode héritée de la classe mère. La signature (nom et paramètres) doit être la même que la méthode de la classe
mère.
POO en java 14
Héritage
n La classe PointGraphique possède deux méthodes deplace, dont une héritée de Point.
POO en java 15
Héritage
POO en java 16
Héritage
POO en java 17
Héritage
n Iln'y a pas de restriction sur le droit d'accès de la méthode surchargé de la classe dérivée, car il s'agit
de méthodes différentes, leurs signatures étant différentes.
POO en java 18
Héritage
POO en java 19
Héritage
n On peut interdire la redéfinition d'une méthode en utilisant le mot-clé final dans sa signature.
POO en java 20
Héritage
n Pour interdire la possibilité d’étendre une classe, on utilise aussi mot-clé final dans sa déclaration.
POO en java 21
Exercice
§ Créez une classe «House », avec un attribut « surface », un constructeur qui définit sa valeur et une méthode «Display »
pour afficher « Je suis une maison, ma surface est de XXX m2 » (XXX: la valeur de surface). Incluez aussi des getters
et des setters pour la surface.
§ La classe «House » contiendra une porte (Door). Chaque porte aura un attribut «color » (de type String), et une
méthode « Display » qui affichera « Je suis une porte, ma couleur est bleu ». Inclure un getter et un setter. Créez
également les méthodes « GetDoor » et « SetDoor » dans la classe « House ».
§ La classe « Apartment » est une sous-classe de la classe « House », avec une surface prédéfinie de 50m².
§ Créez également une classe Person, avec un nom (de type String). Chaque personne aura une maison. La méthode
«Display » pour une personne affichera son nom, les données de sa maison et les données de la porte de cette maison.
§ Écrivez un Main pour créer un Apartment, une personne pour y vivre et pour afficher les données de la personne.
POO en java 22
Exercice: Solution (1)
POO en java 23
Exercice: Solution (2)
class Apartment extends House
{ public String getName(){return name;}
public Apartment() public void setName(String value)
{super(50);} {
@override name = value;
public void display() }
{ public House getHouse()
[Link]("Je suis un {
appartement, ma surface est " + surface + return house;
" m2");}} }
class Person public void setHouse(House h)
{ {
protected String name; house = h;
protected House house; }
public Person() public void display()
{name = "Thomas"; {
house = new House(150);} [Link]("Je m'appele "+ name
public Person(String name, House house) +".");
{ [Link]();
[Link] = name; [Link]();
[Link] = house;} }}
POO en java 24
Exercice: Solution (3)
//Classe de test
public class Main
{
public static void main(String[] args)
{
Apartment MyApartament = new Apartment();
Person person = new Person();
[Link] = "Thomas";
[Link] = MyApartament;
[Link]();
}
}
POO en java 25
Surclassement
Le surclassement (upcasting) consiste à convertir un objet d’une classe fille vers une référence de la
classe mère.
class Animal {
Exemple: void crier(){[Link]("Animal");} }
class Chat extends Animal {
@Override
void crier(){[Link]("Chat");} }
POO en java 26
Liaison Dynamique
Ø Liaison dynamique (Dynamic Binding): mécanisme par lequel la méthode appelée dépend du type réel
de l'objet, et non du type de la référence.
Ø Décision prise à l’exécution, pas à la compilation.
Ø C’est le processus technique par lequel Java choisit quelle méthode exécuter à l’exécution, selon le type
réel de l’objet.
Ø La liaison dynamique intervient lorsque la méthode est redéfinie dans une classe fille.
POO en java 27
Polymorphisme
§ Le mot polymorphisme est apparu dans la Grèce antique, Il signifie quelque chose qui peut prendre
plusieurs formes.
§ Le polymorphisme est la capacité d’un objet à être manipulé via une référence d’un type parent tout en
exécutant son propre comportement réel.
POO en java 28
Polymorphisme
§ Exemple (1)
class Animal {
public void talk() {
[Link]("Je suis un animal!");}
}
POO en java 29
Polymorphisme
§ Exemple (2)
public class AnimalTester {
public static void main(String[] args) {
Dog monChien = new Dog();
[Link]();
[Link]();
Cat monChat = new Cat();
[Link]();
[Link]();
Animal monAnimal = new Dog(); //Instance de Dog déclarée avec référence
Animal
[Link]();
Animal monAnimal2 = new Cat(); //Instance de Cat déclarée avec
référence Animal
[Link]();
[Link](); //cause une erreur de compilation
[Link](); //cause une erreur de compilation
}}
POO en java 30
Polymorphisme
§ Exemple (3)
Ø Dans ce cas pour le compilateur considère que la méthode talk() de monChien est la méthode de la
classe Dog, puisque la référence de l'objet est Dog, aussi la JVM va exécuter la méthode de la classe
Chien puisqu'elle a été redéfinie.
Ø Dans la même logique le compilateur considère que la méthode talk() de monAnimal est la méthode
de la classe Animal, puisque la référence de l'objet est Animal, mais ici la JVM va exécuter la
méthode de la classe Chien quand même puisqu'elle a été redéfinie.
POO en java 31
Polymorphisme
§ Exemple (4)
POO en java 32
Polymorphisme
Tableaux polymorphiques
Les tableaux polymorphiques en Java sont des tableaux qui peuvent contenir des objets de
différentes classes qui héritent d'une même classe parente.
POO en java 33
Sous-classement
Le sous-classement (Downcasting) consiste à convertir une référence d’une classe parente vers une référence de
la classe fille.
• Permet d’accéder aux méthodes spécifiques de la classe fille.
• Doit être utilisé avec précaution pour éviter les erreurs de type ClassCastException.
class Animal {
void crier() {[Link]("Animal"); }}
class Chat extends Animal {
@Override
void crier() {[Link]("Chat");}
Exemple: void miauler() {[Link]("Miaou"); }}
public class Main {
public static void main(String[] args) {
Animal a = new Chat(); // Upcasting
[Link](); // Affiche "Chat"
// Downcasting
if (a instanceof Chat) {
((Chat) a).miauler(); // Affiche "Miaou“
}}}
POO en java 34
Sous-classement
POO en java 35
Masquage
Le Masquage se produit lorsqu'une classe dérivée définit une méthode statique avec la même signature
(nom et paramètres) qu'une méthode statique de sa classe de base.
• Ceci n’est pas de la redéfinition (Override). Java ne permet pas la redéfinition des méthodes
statiques.
• La méthode de la classe dérivée masque (cache) celle de la classe de base, mais ne la remplace pas.
POO en java 36
Masquage
public class Animal {
public static void run() {
[Link](“An animal runs”);}
}
Exemple (2/3) public class Cat extends Animal{
public static void run() {
[Link](); //Erreur de compilation (interdit d'appeler une
méthode statique avec super)
[Link](); //Ok
[Link](“A cat runs”);}}
POO en java 37
Exercice
Ecrire les classes nécessaires au fonctionnement du programme suivant (en ne fournissant que les méthodes nécessaires à
ce fonctionnement).
POO en java 38
Solution
POO en java 39
Classe abstraite & Interface
Pr. AIT MAIT Hind
2025/2026
Introduction
hauteur
x,y
x,y
x,y v1
POO en java 1
Introduction
largeur
class Forme { r
hauteur
v2
protected double x,y;
public void deplacer(double dx, x,y
double dy) { x,y x,y
v1
x += dx ; y += dy; Forme
}
} double x,y;//centre du cercle
POO en java 2
Introduction
Exemple introductif (3)
§ Un besoin: profiter du polymorphisme
POO en java 3
Introduction
. . .
public double perimetreTotal() { double pt = 0.0;
for (int i=0; i < NbFormes; i++)
pt += tabForme[i].perimetre(); // ERREUR
return pt;
}
La méthode perimetre() n’est pas définie dans la classe Forme (type déclaré) : appel non valide!!
POO en java 4
Introduction
n Solution ?
q Définir une méthode perimetre() dans Forme ?
POO en java 5
Classe abstraite
n Une classe abstraite est une classe qui ne permet pas d’instancier des objets.
n Elle ne peut servir que de classe de base pour une dérivation.
n Elle se déclare à l'aide du mot-clé abstract:
POO en java 6
Classe abstraite
POO en java 7
Classe abstraite
n Dès lors qu'une classe contient au moins une méthode abstraite, elle est abstraite.
n Une classe abstraite ne peut être instanciée, car elle contient au moins une méthode qui n'a pas
d'implémentation.
n Une méthode abstraite doit être publique, car elle est destinée à être redéfinie dans une classe dérivée.
n Une classe dérivée d'une classe abstraite doit implémenter toutes les méthodes abstraites de sa classe mère, ou
sinon elle reste abstraite.
n Il suffit donc que la classe dérivée ne redéfinisse aucune ou une des méthodes abstraites de sa classe mère
pour rester elle-même abstraite.
POO en java 8
Classe abstraite
Exemple (1/4)
POO en java 9
Classe abstraite
Exemple (2/4)
POO en java 10
Classe abstraite
Exemple (3/4)
POO en java 11
Classe abstraite
Exemple (4/4)
POO en java 12
Classe abstraite
Exercice (1/2)
Une plateforme souhaite automatiser la validation de différents types de contenus avant publication: des articles, des
images et des vidéos.
Tous les contenus partagent des informations générales, mais la manière de valider chaque contenu est différente.
La validation peut consister à vérifier la longueur d’un texte, la résolution d’une image ou la durée d’une vidéo.
1. Créer une classe abstraite Contient:
• Attributs protégés communs : titre, auteur, dateCreation,
• un constructeur paramétré,
• une méthode: afficherInfos(),
• une méthode abstraite: valider()-> Retourne un bolean, elle représente la logique de validation, différente selon le
type de contenu.
2. Créer trois classes qui héritent de Contenu:
2.1. Article
Attributs privés: String texte; int longueurMin;
Redéfinir valider()→ retourne true si la longueur du texte ≥ longueurMin.
2.2. Image
Attributs: int largeur; int hauteur; int resolutionMin; (par ex : 800px)
Redéfinir valider()→ retourne true si la largeur et la hauteur sont ≥ resolutionMin.
POO en java 13
Classe abstraite
Exercice (2/2)
2.3. Video
Attributs: int dureeSecondes; int dureeMax; (ex : 300s)
Redéfinir valider()→ retourne true si la durée ≤ dureeMax.
3. Classe de test PlateformeValidationTest
Dans main:
1. Créer un tableau c de type Contenu.
2. Ajouter: un Article ,une Image, et une Vidéo.
3. Parcourir le tableau et appeler afficherInfos() et valider().
4. Comment assurer à l’avenir que tous les nouveaux contenus implémentent une validation personnalisée?
POO en java 14
Classe abstraite
Solution
POO en java 15
Classe abstraite
Solution (1/4)
public class Article extends Contenu {
private String texte;
private int longueurMin;
public Article(String titre, String auteur, String dateCreation, String texte, int
longueurMin) {
super(titre, auteur, dateCreation);
[Link] = texte;
[Link] = longueurMin;}
@Override
public boolean valider() {
if (texte != null) {
if ([Link]() >= longueurMin) {
return true;
}}
return false; }
@Override
public void afficherInfos() {
[Link]();
[Link]("Type:Article");
[Link]("Longueur min:" + longueurMin);
if (texte != null) { longueurTxt = [Link]();}
[Link]("Longueur txt : " + longueurTxt);}}
POO en java 16
Classe abstraite
Solution (2/4)
public class Image extends Contenu {
private int largeur;
private int hauteur;
private int resolutionMin;
public Image(String titre, String auteur, String dateCreation,int largeur, int
hauteur, int resolutionMin) {
super(titre, auteur, dateCreation);
[Link] = largeur;
[Link] = hauteur;
[Link] = resolutionMin;
}
@Override
public boolean valider() {
if (largeur >= resolutionMin && hauteur >= resolutionMin) {
return true;}
return false;}
@Override
public void afficherInfos(){
[Link]();
[Link]("Type: Image");
[Link]("Largeur:" + largeur);
[Link]("Hauteur:" + hauteur);
[Link]("Résolution min:" + resolutionMin);}}
POO en java 17
Classe abstraite
Solution (3/4)
public class Video extends Contenu {
private int dureeSecondes;
private int dureeMax;
public Video(String titre, String auteur, String dateCreation, int dureeSecondes, int
dureeMax) {
super(titre, auteur, dateCreation);
[Link] = dureeSecondes;
[Link] = dureeMax; }
@Override
public boolean valider() {
if (dureeSecondes <= dureeMax) {
return true;
}
return false;
}
@Override
public void afficherInfos() {
[Link]();
[Link]("Type: Vidéo");
[Link]("Durée: " + dureeSecondes + "s");
[Link]("Durée max: " + dureeMax + "s");
}
}
POO en java 18
Classe abstraite
Solution (4/4)
POO en java 19
Interface
n Une interface est une « classe » purement abstraite dont toutes les méthodes sont abstraites et publiques.
q Une façon de décrire ce que les classes doivent faire, sans préciser comment elles doivent le faire.
POO en java 20
Interface
public interface I {
static final int MAXI = 100 ;
public abstract void f(int n);
public abstract void g() ;
}
Il n’est pas nécessaire de mentionner les mots-clés public et abstract ils sont facultatifs.
POO en java 21
Interface
n Lorsqu’on définit une classe, on peut préciser implémente une interface donnée en utilisant le
implements, comme dans:
q soit la classe A doit être déclarée abstract ; Les méthodes manquantes seront implémentées par les
classes filles de A.
POO en java 22
Interface
POO en java 23
Interface
n Une interface peut seulement servir à déclarer une variable, un paramètre, une valeur retour, un type
de base de tableau, …
public interface I { .....}
.....
I i ; /* i est une référence à un objet d’une
classe implémentant l’interface I */
n En revanche, on pourra affecter à i n’importe quelle référence à un objet d’une classe implémentant
l’interface I.
I i = new A(...) ; // OK
Interface
public interface I {
void f(int n) ;
void g() ;
}
public class A {
.....
}
25
Interface
n On veut définir:
q Une interface nommée Affichable, dotée d’une seule méthode affiche.
q Deux classes Entier et Flottant implémentent cette interface (aucun lien d’héritage n’apparaît ici).
n Chaque classe est dotée d’un attribut valeur.
n La méthode affiche() affiche un message de l’ordre: "Je suis un flottant/entier de valeur xy").
q La méthode main utilise un tableau hétérogène d’objets de type Affichable qu’elle remplit en instanciant des objets
de type Entier et Flottant puis les affiche.
Interface
28
Interface
29
Interface
Exercice
On souhaite modéliser des objets capables de se connecter à un réseau.
Ces objets peuvent être très différents (ordinateur, imprimante, caméra…), mais ils doivent tous fournir les mêmes
opérations de connexion.
1. Créer une interface contenant deux méthodes: Connecter() et deconnecter().
2. Créer les classes suivantes qui implémentent Connectable :
a) Classe Ordinateur
Attribut privé: String nom;
Implémentations: connecter() → simule la connexion au réseau (par message d’affichage).
deconnecter() → simule la déconnexion( par message d’affichage).
b) Classe Imprimante
Attribut privé: String modele;
Implémentations: connecter() et deconnecter().
c) Classe CameraSurveillance
Attribut privé : String emplacement;
Implémentations: connecter() et deconnecter().
3. Classe de test RéseauTest
Dans la méthode main:
a) Créer un tableau de type Connectable.
b) Ajouter: un ordinateur, une imprimante ,et une caméra.
c) Parcourir le tableau et appeler: connecter() et deconnecter().
POO en java 30
Interface
Solution (1/4)
POO en java 31
Interface
Solution (2/4)
@Override
public void connecter() {
[Link]("L’imprimante " + modele + " est connectée au réseau.");
}
@Override
public void deconnecter() {
[Link]("L’imprimante " + modele + " est déconnectée du réseau.");
}
}
POO en java 32
Interface
Solution(3/4)
@Override
public void connecter() {
[Link]("La caméra située à " + emplacement + " est connectée au réseau.");
}
@Override
public void deconnecter() {
[Link]("La caméra située à " + emplacement + " est déconnectée du réseau.");
}
}
POO en java 33
Interface
Solution(4/4)
public class RéseauTest {
public static void main(String[] args) {
POO en java 34
À réfléchir!
1. Une classe qui implémente une interface doit-elle toujours redéfinir toutes ses méthodes ?
2. Une interface peut-elle exister sans aucune classe qui l’implémente ?
3. Une classe qui hérite d’une classe abstraite est-elle obligatoirement abstraite ?
4. Pourquoi une interface ne possède pas de constructeur ?
5. Peut-on déclarer une variable de type interface même si aucune classe ne l’implémente encore ?
POO en java 35
Les collections
Pr. AIT MAIT Hind
2025/2026
Introduction
Problématique
Question: On souhaite créer un objet qui va gérer un ensemble d’éléments ou d’objets de même type.
Comment procéder ?
Exemple:
Un objet qui va gérer un ensemble d’objets de type classe Point.
POO en java 1
Introduction
POO en java 2
Introduction
q Inconvénients
Ø Insertions et suppressions peu efficaces.
Ø Espace mémoire contigu.
Ø Nombre d’éléments borné qui doit être défini à l’avance.
Ø Les tableaux sont inadéquats pour gérer une quantité importante d'informations du même type quand leur
nombre n'est pas connu à l'avance.
=> Chercher une solution adéquate pour résoudre les limitations inhérentes aux tableaux.
POO en java 3
Introduction
q Une collection est un objet qui regroupe de multiples éléments de même type dans une seule entité.
q Le JDK fournit plusieurs types et variantes de collections sous forme de classes et interfaces pour le but de:
n ne pas reprogrammer les traitements répétitifs classiques (affichage, saisie, recherche d’éléments, …)
POO en java 4
Introduction
Structure de données
q Les tableaux
n Structure de taille fixe, accès direct aux éléments
q Les Collections
n Structure modifiable, différents algorithmes de stockage
q Les Map
n Structure modifiable, stocke des couples clé -> valeur
POO en java 5
Hiérarchie des Collections dans Java
POO en java 6
Hiérarchie des Maps dans Java
POO en java 7
Interface Iterable
q L'interface Iterable est l'interface racine pour toutes les classes de collection.
q L'interface Collection étend l'interface Iterable et, par conséquent, toutes les sous-classes de
l'interface Collection implémentent également l'interface Iterable.
q Il ne contient qu'une seule méthode abstraite qui renvoie l’objet Iterator sur les éléments de
type E.
POO en java 8
Interface Iterator (1)
n En Java toute collection possède une méthode Iterator<E> iterator() qui retourne un itérateur permettant
d'accéder aux éléments un par un dans la collection. Initialement, l'itérateur est placé « avant » le premier
élément. A chaque accès, le prochain élément est retourné et l'itérateur avance à l'élément suivant. Lors du
parcours complet d'une collection, chaque élément est retourné une seule fois, dans un ordre dépendant en
fait du type de la collection.
n Le schéma d'utilisation est toujours le même, quelle que soit la collection:
Collection<E> coll = new ...; // Collection existante, de type quelconque
// Elle contient des éléments de type E
Iterator<E> it = [Link](); // Crée un nouvel itérateur sur la
collection, // initialisé AVANT le 1er élément
while ([Link]()) { // Tant qu'il reste des éléments
E e = [Link](); // Récupère le prochain élément et avance
... // Traiter e ici
}
POO en java 9
Interface Iterator (2)
n Les collections, peuvent aussi être parcourues à l'aide du mécanisme de for each:
n Par rapport au parcours avec un itérateur, un for each traite systématiquement tous les éléments de la
collection. L'itérateur permet aussi d'enlever un élément pendant le parcours (Iterator possède une
méthode remove(), optionnelle, qui retire de la collection le dernier élément retourné par next().
POO en java 10
Interface Iterator (3)
n Cette interface définit des méthodes pour des objets capables de parcourir les données d'une
collection.
Méthode Rôle
boolean hasNext() indique s'il reste au moins à parcourir dans la collection
Object next() renvoie le prochain élément dans la collection
void remove() supprime le dernier élément parcouru
POO en java 11
Interface Iterator (4)
n La méthode remove() permet de supprimer l'élément renvoyé par le dernier appel à la méthode next().
Il est ainsi impossible d'appeler la méthode remove() sans un appel correspondant à next().
if ([Link]()) {
[Link]();
[Link]();
}
n Si aucun appel à la méthode next() ne correspond à celui de la méthode remove(), une exception de
type IllegalStateException est levée.
POO en java 12
Interface List
q Il existe diverses méthodes dans l'interface List qui peuvent être utilisées pour
insérer, supprimer et accéder aux éléments de la liste.
POO en java 13
Interface List
§ Classe ArrayList
n Cette classe représente un tableau d'objets dont la taille est dynamique. Elle implémente l'interface
List.
n Contrairement aux LinkedList, les ArrayList sont rapides en lecture, même avec un gros volume d'objets.
n Elles sont cependant plus lentes si vous devez ajouter ou supprimer des données en milieu ou au début de
liste.
Si vous effectuez beaucoup de lectures sans vous soucier de l'ordre des éléments, optez pour une
ArrayList ;
Si vous insérez beaucoup de données au milieu de la liste, optez pour une Linkedlist.
n Les classes ArrayList et Vector sont presque identique sauf que les ArrayList ne sont pas synchronisées.
POO en java 14
Interface List
§ Classe ArrayList
import [Link];
public class TestArrayList {
public static void main(String[] args) {
[Link]("Ali");
[Link]("Sara");
[Link]("Nadia");
§ Classe LinkedList
q Il existe une autre structure de données très répandue, la liste chaînée, qui permet de résoudre les problèmes
des tableaux dynamiques (ArrayList).
q une liste chaînée stocke chaque objet avec un lien qui y fait référence. Chaque lien possède également
une référence vers le lien suivant de la liste.
q Avec Java, chaque élément d'une liste chaînée possède en fait deux liens, c'est-à-dire que chaque élément est
aussi relié à l'élément précédent.
POO en java 16
Interface List
§ Classe LinkedList
import [Link];
public class ExempleLinkedList {
public static void main(String[] args) {
LinkedList<String> liste = new LinkedList<>();
[Link]("Ali");
[Link]("Sara");
[Link]("Nadia");
// Suppression d’un élément
[Link](1); [Link]("Après
suppression : " + liste); // [Ali, Nadia]
POO en java 17
Interface List
§ Classe Vector
q Vector est une ancienne implémentation de l’interface List,
basée sur un tableau dynamique, comme ArrayList.
q La particularité principale de Vector est que toutes ses
méthodes sont synchronisées, ce qui le rend thread-safe:
plusieurs threads peuvent l’utiliser simultanément sans
corrompre les données.
q Aujourd’hui, Vector est considéré comme une classe
héritée (legacy).
q Dans les applications modernes, on préfère utiliser
ArrayList ou, en cas de multithreading, des classes
spécialisées comme CopyOnWriteArrayList.
POO en java 18
Interface List
§ Classe Vector
import [Link];
import [Link];
public class ExempleVector {
public static void main(String[] args) {
Vector<String> vect = new Vector<>();
// Ajout d’éléments
[Link]("Ali");
[Link]("Sara");
[Link]("Nadia");
[Link]("Contenu du Vector : " + vect);
[Link](2);
[Link]("Après suppression : " + vect);
Iterator<String> it = [Link]();
while ([Link]()) {
[Link]([Link]());
}}}
POO en java 19
Interface List
§ Classe Stack
q La classe Stack est une structure de données basée sur le principe LIFO (Last In, First Out).
q Stack hérite de la classe Vector, et utilise donc un tableau dynamique synchronisé. Cela signifie que
toutes ses méthodes sont thread-safe, mais potentiellement plus lentes.
q Aujourd’hui, la classe Stack est considérée comme obsolète (legacy). Dans les applications modernes,
Java recommande d'utiliser Deque (comme ArrayDeque) pour implémenter une pile.
POO en java 20
Interface List
§ Classe Stack
import [Link];
[Link]("Ali"); // empiler
[Link]("Sara");
[Link]("Nadia");
POO en java 21
Interface Queue, Deque
• L’interface Queue<E> modélise une file d’attente. Dans la plupart des implémentations, elle suit le principe
FIFO (First In, First Out). Elle définit notamment les méthodes add(E e), qui ajoute un élément en fin de file, et
remove(), qui retire et retourne l’élément en tête de la file.
• L'interface Deque<E> (Double Ended Queue) spécialise une Queue<E> avec des méthodes d'insertion, d'accès
et de retrait en tête et queue de liste: addFirst, addLast, removeFirst, removeLast, getFirst, getLast. Ces
méthodes permettent notamment d'utiliser Deque comme une pile (LIFO, Last In First Out), en considérant la
tête comme le sommet de la pile.
POO en java 22
Interface Queue
§ Classe PriorityQueue
La classe PriorityQueue est une file qui ne respecte pas l’ordre d’arrivée des éléments, mais leur priorité.
Lorsque vous ajoutez des éléments, ils peuvent être insérés dans n’importe quel ordre, mais la file récupère
toujours en premier l’élément qui a la plus haute priorité (selon un ordre défini par Java pour les types simples
comme les nombres).
POO en java 23
Interface Deque
POO en java 24
Interface Deque
§ Version 1 : LinkedList utilisée comme une file (FIFO)
POO en java 25
Interface Deque
§ Version 2 : LinkedList utilisée comme une pile (LIFO)
POO en java 26
Interface Queue
§ Classe ArrayDeque
q Une ArrayDeque est une structure performante qui peut se comporter comme une file ou comme une pile selon
les méthodes utilisées.
// Retrait au début
[Link]([Link]()); // A
[Link]([Link]()); // B
}}
POO en java 27
Interface Set
n Un ensemble (Set) est une collection qui n'autorise pas l'insertion de doublons.
n Trois classes implémentent l'interface Set: HashSet, LinkedHashSet et TreeSet.
à les éléments d'un objet HashSet ne sont pas triés et l’ordre d’insertion n’est pas garanti.
à les éléments d'un objet LinkedHashSet ne sont pas triés et l’ordre d’insertion est garanti.
à les éléments d'un objet TreeSet sont tries.
POO en java 28
Interface Set
§ Classe HashSet
POO en java 29
Interface Set
§ Classe LinkedHashSet
POO en java 30
Interface Set
§ Classe TreeSet
n Cette classe permet d'insérer des éléments dans n'importe quel ordre et de restituer ces éléments dans un
ordre précis lors de son parcours.
n L'ordre utilisé est celui indiqué par les objets insérés si ils implémentent l'interface Comparable pour
un ordre de tri naturel ou fournir un objet de type Comparator au constructeur de l'objet TreeSet pour
définir l'ordre de tri.
POO en java 31
Interface Set
§ Classe TreeSet
[Link]("BBBBB");
AAAAA
[Link]("CCCCC");
BBBBB
[Link]("DDDDD");
CCCCC
[Link]("BBBBB"); DDDDD
[Link]("AAAAA");
POO en java 32
Interface Map
n Ce type de collection gère les éléments avec deux entités: une clé et une valeur associée.
n L’interface Map n’hérite pas de Iterable. On ne peut pas parcourir directement une Map avec un itérateur classique.
POO en java 33
Interface Map
§ Classe HashMap
public class TestHashMap {
public static void main(String[] args) {
Map<String, Integer> notes = new HashMap<>();
// Insertion des éléments
[Link]("Ali", 14);
n Aucun ordre garanti [Link]("Sara", 16);
[Link]("Yassine", 12);
lors du parcours des éléments. [Link]("Ali", 15);
// Recherche par clé
[Link]("Note de Sara : " +
[Link]("Sara"));
POO en java 34
Interface Map
§ Classe LinkedHashMap public class TestLinkedHashMap {
public static void main(String[] args) {
n LinkedHashMap est une classe qui hérite de HashMap. // Création d'une LinkedHashMap
Map<String, Integer> notes = new
n Conserve l’ordre d’insertion des clés lors du parcours. LinkedHashMap<>();
POO en java 35
Interface SortedMap
n Cette interface définit une collection de type Map triée sur la clé. Elle hérite de l'interface Map.
n Le tri peut être assuré par deux façons:
q les clés contenues dans la collection implémentent l'interface Comparable pour définir leur ordre
naturel.
q il faut fournir au constructeur de la collection un objet Comparator qui définit l'ordre de tri à
utiliser.
POO en java 36
Interface Comparable
n Tous les objets qui doivent définir un ordre naturel utilisé par le tri d'une collection doivent implémenter
cette interface.
POO en java 37
Interface Comparable
§ Exemple avec Classe TreeMap
import [Link];
import [Link];
public class TestTreeMap {
public static void main(String[] args) {
Map<String, Integer> notes = new TreeMap<>();
POO en java 38
Interface Comparator
n Cette interface représente un ordre de tri quelconque. Elle est utile pour permettre le tri d'objet qui
n'implémente pas l'interface Comparable ou pour définir un ordre de tri différent de celui défini avec
Comparable.
n Cette méthode compare les deux objets fournis en paramètre et renvoie une:
q valeur entière négative si le premier objet est inférieur au second
q valeur entière positive si le premier objet est supérieur au second
q valeur nulle si les deux objets sont égaux
POO en java 39
Interface Comparator
§ Exemple avec Classe TreeMap
public int compare(String s1, String s2) {
int diff = [Link]() - [Link]();
if (diff != 0) {
import [Link];
return diff;
import [Link];
import [Link]; }
class ComparateurLongueur implements Comparator<String> { return [Link](s2);}
@Override
public int compare(String s1, String s2) {
return [Link]() - [Link]();}}
POO en java 40
Remarque
Ø A ne pas confondre!
POO en java 41
Synthèse
POO en java 42
Processus légers (threads)
Pr. AIT MAIT Hind
2025/2026
Threads
Introduction: processus
POO en JAVA 1
Threads
Introduction: processus
POO en JAVA 2
Threads
POO en JAVA 3
Threads
POO en JAVA 4
Threads
Thread en JAVA
POO en JAVA 5
Threads
POO en JAVA 6
Threads
POO en JAVA 7
Threads
Cycle de vie d’un thread
POO en JAVA 8
Threads
Cycle de vie d’un thread
Méthodes / Situation
État du thread Description
qui provoque cet état
Le thread vient d’être créé mais il n’a pas encore Création avec new
NEW
commencé son exécution. Thread()
Le thread est prêt à s’exécuter et attend que le processeur
RUNNABLE start()
(CPU) lui donne du temps d’exécution.
Le CPU sélectionne le
Le thread est actuellement en train d’exécuter la méthode
RUNNING thread parmi les threads
run().
Runnable
Le thread est bloqué car il attend l’accès à une ressource tentative d’accès à une
BLOCKED
utilisée par un autre thread (ex : section synchronized). ressource verrouillée
POO en JAVA 9
Threads
Join() vs wait()
POO en JAVA 10
Threads
Coordination des threads avec join(): Exemple (1)
POO en JAVA 11
Threads
Thread 2 : 1
Coordination des threads avec join(): Exemple (2) Thread 2 : 2 Thread 2 : 1
Thread 2 : 3 Thread 1 : 1
Thread 2 : 4 Thread 1 : 2
public class TestThread { Thread 2 : 5 Thread 1 : 3
Thread 1 : 1 Thread 1 : 1 Thread 1 : 4
public static void main(String[] args) throws Thread 1 : 2 Thread 1 : 2 Thread 1 : 5
InterruptedException{ Thread 1 : 3 Thread 1 : 3 Thread 2 : 2
Thread 1 : 4 Thread 1 : 4 Thread 2 : 3
MonThread t1 = new MonThread("Thread 1"); Thread 1 : 5
Thread 1 : 5 Thread 2 : 4
MonThread t2 = new MonThread("Thread 2"); Fin du Thread 2 : 1 Thread 2 : 5
[Link](); programme Thread 2 : 2 Fin du programme
principal Thread 2 : 3 principal
[Link](); Thread 2 : 4
[Link](); Thread 2 : 5
[Link](); Fin du
programme
[Link]("Fin du programme principal");}} principal
POO en JAVA 12
Threads
Thread 1 : 1
public class TestThread { Thread 1 : 2
public static void main(String[] args) throws Thread 1 : 3
InterruptedException{ Thread 1 : 4
Thread 1 : 5
MonThread t1 = new MonThread("Thread 1"); Thread 2 : 1
MonThread t2 = new MonThread("Thread 2"); Thread 2 : 2
[Link](); Thread 2 : 3
Thread 2 : 4
[Link](); Thread 2 : 5
[Link](); Fin du programme principal
[Link]();
[Link]("Fin du programme principal");}} Toujours le même résultat obtenu
POO en JAVA 13
Threads
Constante Valeur
Thread.MIN_PRIORITY 1
Thread.NORM_PRIORITY 5
Thread.MAX_PRIORITY 10
§ La priorité d’un thread peut modifier avec la méthode: setPriority(int priority)
§ La priorité actuelle peut être consultée avec: getPriority()
POO en JAVA 14
Threads
Ø La priorité influence seulement le planificateur du système, elle ne garantit pas l’ordre d’exécution des
threads.
POO en JAVA 15
Threads
Lorsque plusieurs threads accèdent en même temps à une même ressource partagée (variable, objet,
fichier), cela peut provoquer :
• des résultats incorrects
• des incohérences dans les données
• ce qu’on appelle une condition de concurrence (Race Condition)
POO en JAVA 16
Threads
Concept Description
Partie du programme qui accède à une ressource
Section critique
partagée
Mécanisme qui contrôle l’accès à la section
Verrou (Lock)
critique
Un seul thread peut accéder à la section critique à
Exclusion mutuelle
la fois
POO en JAVA 17
Threads
Ø Protéger une section critique afin qu’un seul thread puisse l’exécuter à la fois.
POO en JAVA 20
Threads
POO en JAVA 21
Threads
POO en JAVA 23
Threads
POO en JAVA 24
Threads
§ Exercice 1
class MonThread extends Thread {
private String nom;
public MonThread(String nom) {
[Link] = nom;}
public void run() {
for(int i=1;i<=3;i++) {
Q1: Est-ce que t2 est terminé avant "Fin" ?
[Link](nom + " : " + i);
Q2: Est-ce que join() impose l’ordre entre t1 et t2?
}}}
Q3: Qui attend ici ?
public class Test {
public static void main(String[] args) throws
InterruptedException {
MonThread t1 = new MonThread("T1");
MonThread t2 = new MonThread("T2");
[Link]();
[Link]();
[Link]();
[Link]("Fin");}}
POO en JAVA 25
Threads
§ Exercice 2
class MonThread extends Thread {
private String nom;
public MonThread(String nom) {
[Link] = nom;
}
public void run() {
for(int i=0;i<5;i++) { Q1: Est-ce que t1 commence toujours en premier ?
[Link](nom); Q2: La priorité garantit-elle l’ordre ?
}}}
public class TestPriorite {
public static void main(String[] args) {
MonThread t1 = new MonThread("T1");
MonThread t2 = new MonThread("T2");
[Link](10);
[Link](1);
[Link]();
[Link]();}}
POO en JAVA 26
Threads
§ Exercice 3
class ZonePartagee {
int valeur;
boolean disponible = false;
public synchronized void produire(int v) throws
InterruptedException {
while(disponible) {
wait();} Q1: Pourquoi while et pas if?
valeur = v;
Q2: Le producteur peut-il produire deux fois de suite?
[Link]("Produit : " + valeur);
disponible = true;
notify();}
public synchronized void consommer() throws
InterruptedException {
while(!disponible) {
wait();}
[Link]("Consomme : " + valeur);
disponible = false;
notify();}}
POO en JAVA 27
Les exceptions
Pr. AIT MAIT Hind
2025/2026
Exceptions
Introduction
Un programme informatique n’est pas toujours exécuté dans des conditions idéales. Lors de son exécution,
plusieurs situations imprévues peuvent survenir et perturber son fonctionnement normal.
Exemples de situations problématiques:
•Division par zéro lors d’un calcul
•Saisie incorrecte de l’utilisateur (ex : texte au lieu d’un nombre)
•Tentative d’accès à un fichier inexistant
•Etc…
Conséquences possibles
Ø Arrêt brutal du programme
Ø Affichage de messages d’erreur incompréhensibles
Ø Interruption du service offert à l’utilisateur
POO en JAVA 1
Exceptions
Introduction
Il est nécessaire de :
•détecter les erreurs lors de la compilation ou d l’exécution
•contrôler le comportement du programme
•éviter les arrêts brutaux
•informer l’utilisateur de manière claire
Ø ces situations sont appelées exceptions.
Une exception est un événement qui survient dans un programme et qui perturbe son
déroulement normal.
POO en JAVA 2
Exceptions
Hiérarchie des exceptions
POO en JAVA 3
Exceptions
Types des exceptions
2. Exceptions Non vérifiées (Unchecked Exceptions): apparaissent pendant l’exécution du programme. Java
n’oblige pas le programmeur à les gérer.
Exemples:
• Division par zero: ArithmeticException
• Utilisation d’un objet non initialisé :NullPointerException
POO en JAVA 4
Exceptions
Gestion des exceptions
Au cœur de la gestion des exceptions en Java se trouvent cinq concepts clés : try, catch, finally, throw et throws.
Mot-clé Description
import [Link];
public class TestChecked {
1 error
public static void main(String[] args) {
ERROR!
§ Exemple: FileReader file = new FileReader("[Link]"); error: compilation failed
}}
import [Link];
import [Link];
public class TestChecked {
public static void main(String[] args) {
try { Erreur : fichier introuvable !
FileReader file = new FileReader("[Link]");
[Link]("Fichier ouvert avec succès");
} catch (IOException e) {
[Link]("Erreur : fichier introuvable !");
}}}
POO en JAVA 6
Exceptions
Gestion des exceptions
• Le bloc try-catch (2)
POO en JAVA 7
Exceptions
Gestion des exceptions
• Le bloc try-catch (3)
try {
q Plusieurs blocs catch // code à risque
} catch (TypeException1 e) {
// traitement 1
} catch (TypeException2 e) {
// traitement 2
}
int a = 10, b = 0;
int[] tab = {1, 2, 3};
try {
int res = a / b;
[Link](tab[5]); Erreur : division par 0
§ Exemple: } catch (ArithmeticException e) {
[Link]("Erreur : division par 0");
} catch (ArrayIndexOutOfBoundsException e) {
[Link]("Erreur : indice invalide");
}
POO en JAVA 8
Exceptions
Gestion des exceptions
• Le bloc try-catch (4)
q Plusieurs blocs catch
Remarque: Lorsqu’on utilise plusieurs blocs catch, il faut faire attention à leur ordre.
Si une exception générale est placée avant une exception spécifique, cette dernière ne sera jamais
atteinte, ce qui provoque une erreur de compilation.
POO en JAVA 9
Exceptions
Gestion des exceptions
• Le bloc try-catch + finally (1) § Exemple 1:
Le bloc finally s’exécute dans tous les cas, qu’il y ait une exception ou non.
POO en JAVA 10
Exceptions
Gestion des exceptions
• Le bloc try-catch + finally (2) § Exemple 3:
§ Exemple 2: import [Link];
import [Link];
import [Link];
public class TestException{ public class TestException {
public static void main(String[] args) { public static void main(String[] args) throws IOException
File file = null; {
try{ try {
file = new File("[Link]"); FileReader f = new FileReader("[Link]");
[Link]([Link]()); [Link]("Fichier ouvert");
}finally{ } finally {
if (file != null) { [Link]("Bloc finally exécuté");
boolean supprime = [Link](; }}}
[Link]("Tentative de suppression :
" + supprime);}
}}}
POO en JAVA 11
Exceptions
Gestion des exceptions
• Throws (1)
Ø Le mot-clé throws permet de déclarer qu’une méthode peut générer une exception.
modificateur typeRetour nomMethode() throws ExceptionType {
// code
}
import [Link];
import [Link]; Ouverture du fichier...
public class DemoThrows { ERROR!
Exception in thread "main"
§ Exemple: public static void lireFichier() throws IOException {
[Link]: [Link]
[Link]("Ouverture du fichier..."); (No such file or directory)
FileReader f = new FileReader("[Link]");
[Link]("Fichier ouvert");
}
public static void main(String[] args) throws IOException {
lireFichier();
[Link]("Fin du programme");}}
POO en JAVA 12
Exceptions
Gestion des exceptions
• Throws (2)
§ Exemple:
catch (IOException e) {
try {
import [Link];
FileWriter fw = new FileWriter(nomFichier);
import [Link];
[Link]("Fichier créé automatiquement.");
import [Link];
[Link]();
public class DemoCreationFichier {
[Link]("Fichier créé avec succès !");
public static void lireFichier(String nom) throws
// réessayer après création
IOException {
lireFichier(nomFichier);
[Link]("Ouverture du fichier : " + nom);
} catch (IOException ex) {
FileReader f = new FileReader(nom);
[Link]("Erreur lors de la création du
[Link]("Fichier ouvert avec succès"); }
fichier");}
}
public static void main(String[] args) {
}
String nomFichier = "[Link]";
}
try {
lireFichier(nomFichier);
}
POO en JAVA 13
Exceptions
POO en JAVA 14
Exceptions
POO en JAVA 15
Exceptions
Exercice 1
POO en JAVA 16
Exceptions
Exercice 2
POO en JAVA 17
Exceptions
Exercice 3
try {
String s = "abc"; Q1. Quelle exception est générée ?
int x = [Link](s); Q2. Est-ce que le programme compile?
} finally { Q3. Est-ce que finally s’exécute?
[Link]("Bloc finally");
}
POO en JAVA 18