Programmation Orientée Objet
POO : Java
JAVA
Sofiane HACHICHA
[Link]@[Link]
Sofiane HACHICHA
CPI2
ISIMG 2024 - 2025 2024/2025 1
Objectifs du cours
Comprendre le paradigme orienté objet et utiliser Java
POO : Java
pour le mettre en œuvre
Maîtriser la syntaxe du langage Java
Modéliser et manipuler des objets du monde réel
Comprendre et utiliser les classes de l’API Java
Compiler et exécuter une application Java
Comprendre et utiliser les exceptions
Sofiane HACHICHA
ISIMG 2024 - 2025
2
Contenu
Introduction générale à Java
Concepts de base de la programmation orientée objet
POO : Java
Syntaxe et éléments de base de Java
Classe et Objet
Héritage et Polymorphisme
Classe abstraite et Interface
Concepts avancés
Classes de base en Java
Sofiane HACHICHA
ISIMG 2024 - 2025
Gestion des exceptions 3
Chapitre
POO : Java
1
Introduction générale à Java
Sofiane HACHICHA
ISIMG 2024 - 2025
4
1- Introduction générale à Java
1.1 Evolution des langages de programmation (1/10)
Dans les programmes informatiques, on distingue deux
aspects : les algorithmes et les données.
Ceci n’a pas changé au cours de l’histoire de
l’informatique.
POO : Java
Ce qui a évolué, c’est la relation existante entre ces
deux aspects, une relation qui est définie par ce que
l'on appelle un paradigme de programmation.
Un paradigme de programmation est une manière
d'aborder la programmation informatique et de traiter les
solutions aux problèmes ainsi que leur formulation dans
un langage de programmation approprié.
Sofiane HACHICHA
ISIMG 2024 - 2025
5
1- Introduction générale à Java
1.1 Evolution des langages de programmation (2/10)
Quelques paradigmes courants :
Programmation impérative
L'un des paradigmes de programmation les plus anciens et les
POO : Java
plus couramment utilisés. Les langages de programmation
comme C, Pascal et Fortran appartiennent à ce paradigme.
La programmation impérative décrit les opérations sous
forme de séquences d'instructions exécutées par
l'ordinateur pour modifier l'état du programme.
Elle se concentre sur la description de la manière
(comment) dont un programme doit fonctionner pour
résoudre un problème donné.
Programmation structurée
Un sous-ensemble de la programmation impérative
qui vise à structurer les programmes impératifs en
garantissant que le code est exécuté instruction par
instruction, de manière séquentielle.
Sofiane HACHICHA
ISIMG 2024 - 2025 Elle recommande d’éviter les instructions de sauts (goto)
6
qui rendent l’exécution du programme non linéaire.
1- Introduction générale à Java
1.1 Evolution des langages de programmation (3/10)
Programmation procédurale
Une extension de la programmation structurée qui
permet de subdiviser des algorithmes en parties plus petites et
POO : Java
plus gérables, appelées procédures. Cela facilite la
compréhension du code et évite les répétitions inutiles.
Elle consiste à découper un programme en procédures,
également appelées routines ou fonctions, qui :
Représentent un ensemble d’étapes.
Peuvent être récursives, c'est-à-dire s’appeler elles-
mêmes.
En programmation procédurale, les fonctions (ou procédures)
peuvent prendre des paramètres en entrée, effectuer des
opérations sur ces paramètres et renvoyer des résultats en
sortie, ce qui améliore la structure et la lisibilité du code.
Sofiane HACHICHA
ISIMG 2024 - 2025
7
1- Introduction générale à Java
1.1 Evolution des langages de programmation (4/10)
Programmation modulaire
Elle est proche de l’approche procédurale et repose sur l'idée
de subdiviser un programme de manière ciblée en blocs
POO : Java
logiques, appelés modules, qui sont indépendants les uns des
autres. Cette approche améliore la clarté du code et facilite le
processus de débogage.
Les différents modules peuvent être testés séparément
avant d'être intégrés dans une application commune et
peuvent être réutilisés dans d'autres applications.
La programmation modulaire n'est pas liée à un paradigme
de programmation spécifique ; elle peut structurer des
éléments selon des approches impératives, orientées objet ou
fonctionnelles.
Elle permet de créer des types de données abstraits
(TDA), qui sont des concepts essentiels dans ce paradigme.
Sofiane HACHICHA
ISIMG 2024 - 2025
8
1- Introduction générale à Java
1.1 Evolution des langages de programmation (5/10)
Un programmeur peut développer une structure de données
personnalisée en utilisant des modules, avec la possibilité de
créer plusieurs variables (instances) de ce type.
POO : Java
Les opérations nécessaires pour manipuler ces variables doivent
être définies et disponibles.
Les données associées à ce type doivent être protégées et ne
peuvent être modifiées que par les opérations spécifiées.
Les TDA peuvent être implémentés en utilisant la notion de
classe en programmation orientée objet.
Cette approche favorise la modularité, la réutilisation
et une gestion efficace des données, en permettant de
manipuler ces TDA comme s'ils étaient des types de
données de base du langage.
Sofiane HACHICHA
ISIMG 2024 - 2025
9
1- Introduction générale à Java
1.1 Evolution des langages de programmation (6/10)
Programmation déclarative
Il peut être parfois essentiel d'atteindre un résultat précis sans
se soucier de l'état actuel du programme ou de la machine.
Autrement dit, on souhaite que la machine accomplisse une
POO : Java
tâche sans avoir à décrire les différentes opérations nécessaires
pour y parvenir.
Les langages de programmation déclaratifs permettent de
spécifier le résultat souhaité tout en laissant à la machine le
soin de gérer les détails de l'exécution.
Il existe une correspondance entre les langages de
programmation déclaratifs et la logique mathématique,
car le développeur se concentre sur le "quoi" (le résultat)
plutôt que sur le "comment" (les opérations spécifiques).
Un exemple de langage déclaratif est HTML, qui décrit ce
que doit contenir une page (texte, titres, paragraphes, etc.)
sans indiquer comment ces éléments doivent être affichés.
Sofiane HACHICHA
ISIMG 2024 - 2025
10
1- Introduction générale à Java
1.1 Evolution des langages de programmation (7/10)
Programmation fonctionnelle
Un dérivé de la programmation déclarative qui se
caractérise par l'absence d'état mutable. Les données sont
POO : Java
manipulées uniquement par des évaluations de fonctions
mathématiques, sans modification directe des valeurs.
Ce paradigme permet de décrire des calculs et des
transformations de données à travers des fonctions.
Le développement des applications Big Data nécessite la
maîtrise de la programmation fonctionnelle.
Lisp est considéré comme le premier langage fonctionnel.
Programmation logique
Elle repose sur l'utilisation d'un langage déclaratif où un
programme est composé d'un ensemble de phrases exprimant
des faits et des règles liés à un domaine spécifique.
Sofiane HACHICHA Elle est adaptée aux besoins de l’intelligence artificielle.
ISIMG 2024 - 2025
11
Prolog est un langage de programmation logique.
1- Introduction générale à Java
1.1 Evolution des langages de programmation (8/10)
Programmation orientée objet
Un paradigme qui complète et s'intègre avec la programmation
impérative et la programmation fonctionnelle.
POO : Java
Elle vise à regrouper les types de données manipulés par le
programme avec les traitements qui peuvent s’y appliquer,
organisant ainsi les parties corrélées du programme.
L'objectif est de favoriser la modularité à travers des
concepts comme l'encapsulation.
Les concepts de ce paradigme prennent souvent la forme de
classes (qui définissent le modèle) et d’objets (instances
dynamiquement créées à partir de ces classes).
Ce paradigme est généralement complété par une technique
appelée héritage, qui permet de :
Réutiliser des parties de code déjà écrites,
Sofiane HACHICHA
ISIMG 2024 - 2025 Redéfinir ou compléter ces parties pour les adapter à des
12
contextes différents.
1- Introduction générale à Java
1.1 Evolution des langages de programmation (9/10)
POO : Java
Approche procédurale :
"Que doit faire mon programme ?"
Approche orientée objet :
Sofiane HACHICHA
ISIMG 2024 - 2025
"De quoi doit être composé mon programme ?"
13
1- Introduction générale à Java
1.1 Evolution des langages de programmation (10/10)
Des objets similaires peuvent être informatiquement décrits
par une même abstraction : une classe
même structure de données et méthodes de traitement
POO : Java
valeurs différentes pour chaque objet
Sofiane HACHICHA
ISIMG 2024 - 2025
14
1- Introduction générale à Java
1.2 Historique du langage Java (1/2)
Développé en 1990 chez Sun Microsystems par James
Gosling, Mike Sheridan et Patrick Naughton.
Le nom Oak étant déjà utilisé, le langage est alors appelé
POO : Java
Java (café en argot américain).
En 1993, avec l'intérêt grandissant d'Internet, ce
langage, se métamorphose en langage dédié à Internet :
Sun diffuse le premier browser HotJava qui permet
d'exécuter des programmes Java encapsulés dans des
pages WEB (i.e. des applets Java).
1996 : Java Development Kit (JDK) est disponible
gratuitement pour la plupart des machines du marché.
Sofiane HACHICHA La société SUN a été acquise en janvier 2010 par Oracle
ISIMG 2024 - 2025
qui est devenue le gardien officiel de Java. 15
1- Introduction générale à Java
1.2 Historique du langage Java (2/2)
Java 1.0 publié en janvier 1996 : première version
Java 1.1 publié en février 1997.
POO : Java
Java 1.2 publié en décembre 1998.
…
Java 8 (JDK 1.8), publié en mars 2014, est une version
LTS (Long Term Support) : supportée jusqu’en 2030.
Java 9 (JDK 9) publié en septembre 2017.
…
Java 17, publié en septembre 2021, est une LTS.
…
Java 21, publié en septembre 2023, est une LTS.
Sofiane HACHICHA
ISIMG 2024 - 2025 Java 23 sera disponible en septembre 2024.
16
1- Introduction générale à Java
1.3 Caractérisation du langage Java (1/6)
Le langage Java est familier :
Java est un langage familier, très proche du langage
C++.
POO : Java
Même types de base que C++ (int, float, double, etc.),
Même formes de déclarations que C++,
Même structure de contrôle que C++ (if, while, for, etc.).
Le langage Java est simple :
Java est un langage simple par rapport au langage C
et C++.
Il n'y a plus de pointeurs et des manipulations les concernant ;
Java se charge (presque) de restituer au système les zones
Sofiane HACHICHA
mémoire inaccessibles sans l'intervention du programmeur.
ISIMG 2024 - 2025
17
1- Introduction générale à Java
1.3 Caractérisation du langage Java (2/6)
Le langage Java est orienté objet :
Paquetage (ou package) pour la réutilisation :
[Link] : classes de base
POO : Java
[Link] : entrée/sortie
[Link] : gestion des interfaces graphiques
[Link] : interagir avec les bases données relationnelles
[Link] : classes utilitaires
Le langage Java est distribué :
Package [Link] : fournit des classes pour les
applications réseaux.
Classe URL : permet l ’accès à des objets distants.
Classe Socket : facilite la programmation d’applications
Client/Serveur.
Sofiane HACHICHA
ISIMG 2024 - 2025 Package [Link] : permet la mise en œuvre d’objets
18
distribués.
1- Introduction générale à Java
1.3 Caractérisation du langage Java (3/6)
Java permet une manipulation indifférente des fichiers
locaux et distants, ce qui facilité la gestion des
ressources indépendamment de leur localisation.
Le langage Java est interprété :
POO : Java
Un programme Java n'est pas compilé directement en
code machine ;
Il sera compilé en code intermédiaire interprété nommé
Bytecode.
Lors de l'exécution, le Bytecode sera interprété à l’aide d’une
machine virtuelle JVM.
Le langage Java est portable et indépendant des plates-
formes :
Le Bytecode est indépendant des plates-formes.
Il pourra être exécuté sur tous types de machines et systèmes à
Sofiane HACHICHA condition qu'ils possèdent l'interpréteur de code Java « JVM ».
ISIMG 2024 - 2025
19
1- Introduction générale à Java
1.3 Caractérisation du langage Java (4/6)
Production d’une application Java standard
Bytecode
POO : Java
COMPILATEUR
[Link] JAVA [Link]
Code source
[Link]
Bytecode = Pseudo code machine qui, contrairement à du code
binaire natif, n'est pas exécuté directement par le processeur – ce qui a
pour conséquence de ralentir son exécution.
Sofiane HACHICHA
ISIMG 2024 - 2025
20
1- Introduction générale à Java
1.3 Caractérisation du langage Java (5/6)
Exécution d’une application Java standard
POO : Java
Bytecode
JVM
[Link] INTERPRETEUR Résultats
DE BYTECODE
JVM = Programme capable d'interpréter les instructions contenues
dans les fichiers Bytecode Java afin de les exécuter sur n'importe quelle
Sofiane HACHICHA plateforme (Linux, Mac OS, Windows,…) sans aucune modification.
ISIMG 2024 - 2025
21
1- Introduction générale à Java
1.3 Caractérisation du langage Java (6/6)
Le langage Java est robuste et sûr :
Détection des erreurs d’invocation des méthodes :
Java est fortement typé. Seules les conversions sûres sont
POO : Java
effectuées automatiquement
Fiabilité de la gestion de la mémoire :
Pas de pointeurs
Ramasse-miettes automatique
Contrôle automatique des accès aux tableaux et aux
chaînes de caractères.
Le langage Java est multi-thread :
Il permet l’exécution en parallèle de plusieurs
processus légers (threads), facilitant ainsi la
programmation concurrente.
La classe [Link] fournit des méthodes pour :
Sofiane HACHICHA Démarrer, Exécuter, Stopper les threads.
ISIMG 2024 - 2025
22
Le framework Executor : gestion efficace des threads.
1- Introduction générale à Java
1.4 Java par l’exemple (1/5)
Fichier «[Link] »
// Commentaire
Définition d’une classe XXX
POO : Java
Méthode main ( )
Classiquement, un programme Java contient une classe
qui :
porte le même nom que le fichier ayant l’extension
« .java » dans lequel elle est enregistrée.
comporte (au moins) une méthode appelée main.
Sofiane HACHICHA
ISIMG 2024 - 2025
23
1- Introduction générale à Java
1.4 Java par l’exemple (2/5)
Fichier «[Link] »
// Ce programme affiche le message « Bonjour ISIMG »
class PremierProgramme
POO : Java
{
public static void main(String args[] )
{
[Link]("Bonjour ISIMG");
}
}
La première ligne du programme « PremierProgramme »
est une ligne de commentaire :
Elle commence par //.
Tout ce qui est compris entre ces deux caractères et
Sofiane HACHICHA
ISIMG 2024 - 2025
la fin de la ligne est ignoré par le compilateur.
24
1- Introduction générale à Java
1.4 Java par l’exemple (3/5)
Le mot clé class permet de définir une nouvelle classe
Java, suivi du nom de cette classe.
POO : Java
En Java, les majuscules et les minuscules sont considérés
comme des caractères différents.
PremierProgramme n’est pas identique à
PREMIERProgramme.
Les caractères « { « et « } » marquent le début et la fin
du bloc d’instructions à réaliser par la classe.
main() : représente la méthode principale de la classe.
Un interpréteur Java a pour fonction d’exécuter les
Sofiane HACHICHA instructions contenues dans le bloc d’instruction de la
ISIMG 2024 - 2025
méthode principale main, du programme qu’on lui soumet.
25
1- Introduction générale à Java
1.4 Java par l’exemple (4/5)
Une méthode est une sorte de procédure (ensemble
d’instructions) appartenant à une classe.
Une méthode peut prendre des paramètres de types
POO : Java
précis et renvoie éventuellement une valeur de type
aussi précis.
Le mot clé void signifie que la méthode main ne renvoie
aucune valeur. args est le paramètre d’entrée de type
String[] de la méthode main.
les mots clés public et static décrivent des caractéristiques
de la méthode main.
[Link] est une commande permettant
d’afficher la chaîne de caractère « Bonjour ISIMG » sur la
Sofiane HACHICHA
ISIMG 2024 - 2025
sortie par défaut de votre machine qui est l’écran.
26
1- Introduction générale à Java
1.4 Java par l’exemple (5/5)
Depuis Java 21 (en mode preview) :
La méthode main() peut être une méthode d’instance
(non statique) avec ou sans tableau de chaînes de
POO : Java
caractères en paramètre.
// [Link]
class Exemple {
void main(){
[Link]("Bonjour");
}
}
Il n’est plus obligatoire de définir explicitement une
classe. Dans ce cas, une classe implicite sera définie
par le compilateur dans le package par défaut.
// [Link]
void main(){
Sofiane HACHICHA [Link]("Bonjour");
ISIMG 2024 - 2025
} 27
1- Introduction générale à Java
1.5 Structure d’une application Java standard
Fichier «[Link] »
// Commentaire
Définition d’une classe AAA
POO : Java
// Commentaire
Définition d’une classe BBB
Définition d’une classe XXX
Méthode main ( )
Parmi les classes définies dans le fichier [Link], il ne peut y
avoir qu’une seule classe publique et cette classe doit avoir
Sofiane HACHICHA le même nom XXX que le fichier.
ISIMG 2024 - 2025
28
1- Introduction générale à Java
1.6 Exemple d’une application Java standard
Fichier «[Link] »
// Ce programme affiche le message « Bonjour ISIMG »
POO : Java
class PremierProgramme
{
static void Affiche( )
{
[Link]("Bonjour ISIMG");
}
public static void main(String args[] )
{
Affiche( );
}
}
Sofiane HACHICHA
ISIMG 2024 - 2025
29
1- Introduction générale à Java
1.7 Le Java Development Kit : JDK
Le JDK est l’ensemble d’outils et bibliothèques nécessaires
pour développer et exécuter des applications Java.
POO : Java
Java est également soutenu par la communauté open
source via le projet OpenJDK, lancé en 2006, qui
fournit une implémentation libre et ouverte de la
plate-forme Java.
Les environnements intégrés de développement (IDE)
Java sont actuellement :
commercialisés (Codenvy, IntelliJ IDEA Ultimate,
MyEclipse, …)
distribués gratuitement à travers le Web (Eclipse,
IntelliJ IDEA Community, NetBeans, BlueJ, JDeveloper,
Sofiane HACHICHA
DrJava, …).
ISIMG 2024 - 2025
30
1- Introduction générale à Java
1.8 Outils fournis par le JDK (1/3)
Le compilateur javac :
Compile les fichiers sources java de nom [Link].
Traduit les fichiers sources en Bytecode :
POO : Java
Produit autant de fichiers .class que de classes définies dans le
fichier .java
L’interpréteur java/javaw :
Prend en paramètre le nom de la classe principale.
Recherche le ou les fichiers .class corresponds.
Appelle la méthode main de la classe principale.
Le documenteur javadoc :
Génère automatiquement une documentation sous la
forme de fichiers html à partir des fichiers sources
commentés.
L’outil jstat :
Sofiane HACHICHA
ISIMG 2024 - 2025 Un outil pour surveiller les statistiques de la JVM
31
1- Introduction générale à Java
1.8 Outils fournis par le JDK (2/3)
L’outil jconsole :
Un outil graphique permettant de contrôler et de gérer
le comportement des applications.
POO : Java
L’archive jar :
JAR est l’abréviation de Java ARchive. C'est un
format de fichier qui permet de regrouper des fichiers
contenant du Bytecode (fichier .class) et des données
utilisées en tant que ressources (images, son, ...).
Depuis Java 9, Il est possible d’utiliser l’archive JMod.
L’outil jlink :
Un outil permettant de produire une nouvelle « JVM
light » dans laquelle on stocke uniquement les codes
des modules utilisés par l’application.
Le désassembleur de classe javap :
Un programme permettant de désassembler les
Sofiane HACHICHA
fichiers compilés en prenant en paramètre les fichiers
ISIMG 2024 - 2025 .class et de produire un texte en clair de la classe afin
32
d’examiner le Bytecode.
1- Introduction générale à Java
1.8 Outils fournis par le JDK (3/3)
Le débogueur Java jdb :
Un programme permettant de faciliter la mise au point
des programmes grâce à de nombreuses options
POO : Java
permettant de surveiller leur exécution.
Il est beaucoup plus facile à utiliser lorsqu’il est
intégré à un IDE.
Un serveur web minimaliste jwebserver :
Depuis Java 18, un mini Serveur Web permettant de
servir uniquement des fichiers statiques.
Les librairies de classe standard :
Classes pour réaliser les entrées sorties.
Classes pour réaliser des applications réseau.
Classes utilitaires (listes, maps, etc.).
Sofiane HACHICHA
La documentation en ligne.
ISIMG 2024 - 2025 … 33
1- Introduction générale à Java
1.9 Compiler et exécuter un programme Java en
ligne de commande (1/2)
Etapes :
Ecrire le programme [Link] dans
un fichier portant le nom de la classe (Respecter la
POO : Java
casse des caractères (majuscules/minuscules)).
Compiler le programme : javac [Link]
Un fichier [Link] contenant du
ByteCode sera généré.
Exécuter le ByteCode : java PremierProgramm
Depuis Java 11, possibilité d’exécuter un programme depuis un
fichier source unique (mono-fichier), sans étape de compilation
préalable : java [Link]
S’il s’agit d’une classe implicite :
java --enable-preview --source=21 [Link]
Sofiane HACHICHA
ISIMG 2024 - 2025
34
1- Introduction générale à Java
1.9 Compiler et exécuter un programme Java en
ligne de commande (2/2)
Depuis Java 22, possibilité d’exécuter un programme depuis un
fichier source qui utilise une classe définie dans un autre fichier
POO : Java
source. Ce second fichier sera aussi compilé automatiquement
en mémoire. Seuls les fichiers sources utilisés par le programme
principal seront compilés en mémoire.
Permettre l’exécution de code dans plusieurs fichier source
// [Link] // [Link]
public class Prog { public class Utils {
public static void main(String[ ] args){ static void saluer(){
[Link](); [Link]("Hello");
} }
} }
Sofiane HACHICHA > java [Link]
ISIMG 2024 - 2025
Hello 35
1- Introduction générale à Java
1.10 JVM (1/2)
La JVM est une machine abstraite qui permet à la machine
physique (ordinateur) d’exécuter un programme Java.
Le compilateur Java compile d'abord le code Java en
Bytecode. La JVM convertit ensuite ce Bytecode en code
POO : Java
machine natif (ensemble d'instructions que le processeur
d'un ordinateur exécute directement).
La JVM définit les spécifications hardware de la plate-
forme.
Un compilateur JIT (Just In Time) est intégré à la JVM afin
d’améliorer les performances de l'exécution du Bytecode.
L'idée d'un compilateur JIT est de compiler en code natif
le Bytecode d'une méthode invoquée plusieurs fois.
Par défaut, le Bytecode est exécuté par la JVM HotSpot.
La JVM possède trois tâches principales :
Charger le code (class loader)
Sofiane HACHICHA Vérifier le code (bytecode verifier)
ISIMG 2024 - 2025
36
Exécuter le code (runtime interpreter)
1- Introduction générale à Java
1.10 JVM (2/2)
JRE (Java Runtime Environment) est un progiciel qui
fournit des bibliothèques de classes Java, ainsi que JVM,
et d'autres composants permettant d'exécuter des
applications écrites en Java.
POO : Java
Lors du téléchargement du JDK, le JRE est également
téléchargé
pas besoin de télécharger le JRE séparément.
le JDK contient le JRE et plusieurs autres outils comme
présenté ci-avant
Sofiane HACHICHA
ISIMG 2024 - 2025
37
1- Introduction générale à Java
1.11 Java SE
Java SE ou Java Platform, Standard Edition
(anciennement Java 2 Platform, Standard Edition,
ou J2SE), est une spécification de la plate-forme
Java d'Oracle, destinée aux applications pour poste de
POO : Java
travail.
Java SE est composée de plusieurs API (Application
Programming Interface) Java :
Bibliothèques de classes Java standards sur lesquelles
le programmeur peut s’appuyer pour écrire son code.
À chaque version de Java SE correspond :
les Java Specification Requests (JSR), constituant les
spécifications de la version considérée ;
un JDK ;
Sofiane HACHICHA
ISIMG 2024 - 2025 un JRE contenant le seul environnement d'exécution
38
(inclus de base dans le JDK).
1- Introduction générale à Java
1.12 Java vs C++
Un programme doit contenir au moins une classe.
POO : Java
Une méthode main() avec un type de retour void.
L’instruction include est remplacée par l’instruction import
suivie par le nom complet de la classe ou du package à
inclure.
Pas de pointeurs, seulement des références.
Pas d’héritage multiple de classes.
Sofiane HACHICHA
ISIMG 2024 - 2025
39