Vous êtes sur la page 1sur 105

15/05/2023

Préparé par : Said JAI ANDALOUSSI


1

Plan de cours

❑ Chapitre 1 : Présentation du langage JAVA


❑ Chapitre 2 : Classes JAVA
❑ Chapitre 3 : Héritage
❑ Chapitre 4 : Exceptions
❑ Chapitre 5 : Interfaces graphiques (Swing)
❑ Chapitre 6 : JDBC

1
15/05/2023

Plan de cours

❑ Chapitre 1 : Présentation du langage JAVA


❑ Chapitre 2 : Classes JAVA
❑ Chapitre 3 : Héritage
❑ Chapitre 4 : Exceptions
❑ Chapitre 5 : Interfaces graphiques (Swing)
❑ Chapitre 6 : JDBC

Chapitre 1 : Présentation du langage JAVA

Le langage Java est un langage de programmation orienté objet créé par James Gosling
et Patrick Naughton, employés de Sun Microsystems, avec le soutien de Bill Joy
(cofondateur de Sun Microsystems en 1982), présenté officiellement le 23 mai 1995 au
SunWorld.

en 2009

rachetée par

2
15/05/2023

Chapitre 1 : Présentation du langage JAVA

Quelques chiffres et faits à propos de Java en 2021 :


❑ 97% des machines d'entreprises ont une JVM installée
❑ Java est l'un des langages de programmation les plus populaires au monde,
utilisé par plus de 9 millions de développeurs dans le monde entier.
❑ Il y a plus de 8 millions de développeurs Java certifiés dans le monde, ce qui en
fait l'un des certifications les plus populaires pour les développeurs.
❑ Java est largement utilisé pour développer des applications d'entreprise, telles
que les systèmes de gestion des relations client (CRM), les systèmes de gestion
de la chaîne d'approvisionnement (SCM) et les systèmes de gestion des
ressources humaines (HRM).
❑ Java peut être utilisé pour développer des applications pour une variété de
plateformes, notamment les ordinateurs de bureau, les serveurs, les appareils
mobiles et les objets connectés.
❑ Plus de 3 milliards d'appareils mobiles peuvent mettre en oeuvre Java
❑ Plus de 1,4 milliards de cartes à puce utilisant Java sont produites chaque année
5

Chapitre 1 : Présentation du langage JAVA

Java possède un certain nombre de caractéristiques qui ont largement contribué à son
énorme succès :
Java est interprété
Le fichier source est compilé en pseudo code ou bytecode puis exécuté par un interpréteur Java : la
Java Virtual Machine (JVM). Ce concept est à la base du slogan de Sun pour Java : WORA (Write Once,
Run Anywhere : écrire une fois, exécuter partout). En effet, le bytecode, s'il ne contient pas de code
spécifique à une plate-forme particulière peut être exécuté et obtenir quasiment les mêmes résultats
sur toutes les machines disposant d'une JVM.

3
15/05/2023

Chapitre 1 : Présentation du langage JAVA

Java possède un certain nombre de caractéristiques qui ont largement contribué à son
énorme succès :

Java est portable


il n'y a pas de compilation spécifique pour chaque plate forme. Le code reste indépendant
de la machine sur laquelle il s'exécute. Il est possible d'exécuter des programmes Java sur
tous les environnements qui possèdent une Java Virtual Machine. Cette indépendance est
assurée au niveau du code source grâce à Unicode et au niveau du bytecode.

Java est orienté objet


comme la plupart des langages récents, Java est orienté objet. Chaque fichier source
contient la définition d'une ou plusieurs classes qui sont utilisées les unes avec les autres
pour former une application. Java n'est pas complètement objet car il définit des types
primitifs (entier, caractère, flottant, booléen,...).

Chapitre 1 : Présentation du langage JAVA

Java possède un certain nombre de caractéristiques qui ont largement contribué à son
énorme succès :

Java est simple


le choix de ses auteurs a été d'abandonner des éléments mal compris ou mal exploités
des autres langages tels que la notion de pointeurs (pour éviter les incidents en
manipulant directement la mémoire), l'héritage multiple et la surcharge des opérateurs,
...

Java est fortement typé


toutes les variables sont typées et il n'existe pas de conversion automatique qui risquerait
une perte de données. Si une telle conversion doit être réalisée, le développeur doit
obligatoirement utiliser un cast ou une méthode statique fournie en standard pour la
réaliser.

4
15/05/2023

Chapitre 1 : Présentation du langage JAVA

Java possède un certain nombre de caractéristiques qui ont largement contribué à son
énorme succès :

Java assure la gestion de la mémoire


l'allocation de la mémoire pour un objet est automatique à sa création et Java récupère
automatiquement la mémoire inutilisée grâce au garbage collector qui restitue les zones
de mémoire laissées libres suite à la destruction des objets.

Chapitre 1 : Présentation du langage JAVA

Java possède un certain nombre de caractéristiques qui ont largement contribué à son
énorme succès :
Java est sûr
la sécurité fait partie intégrante du système d'exécution et du compilateur. Un programme
Java planté ne menace pas le système d'exploitation. Il ne peut pas y avoir d'accès direct à
la mémoire. L'accès au disque dur est réglementé dans une applet.

Les applets fonctionnant sur le Web sont soumises aux restrictions suivantes dans la
version 1.0 de Java :
• aucun programme ne peut ouvrir, lire, écrire ou effacer un fichier sur le système de
l'utilisateur
• aucun programme ne peut lancer un autre programme sur le système de l'utilisateur
• toute fenêtre créée par le programme est clairement identifiée comme étant une
fenêtre Java, ce qui interdit par exemple la création d'une fausse fenêtre demandant
un mot de passe
• les programmes ne peuvent pas se connecter à d'autres sites Web que celui dont ils
proviennent.

10

5
15/05/2023

Chapitre 1 : Présentation du langage JAVA

Java possède un certain nombre de caractéristiques qui ont largement contribué à son
énorme succès :

Java est économe


le pseudo code a une taille relativement petite car les bibliothèques de classes requises
ne sont liées qu'à l'exécution.

Java est multitâche


il permet l'utilisation de threads qui sont des unités d'exécutions isolées. La JVM, elle
même, utilise plusieurs threads.

11

Chapitre 1 : Présentation du langage JAVA

Il existe 2 types de programmes avec la version standard de Java : les applets et les
applications.

• Une application autonome (stand alone program) est une application qui s'exécute
sous le contrôle direct du système d'exploitation.
• Une applet est une application qui est chargée par un navigateur et qui est exécutée
sous le contrôle d'un plug in de ce dernier.

Les principales différences entre une applet et une application sont :

▪ les applets n'ont pas de méthode main() : la méthode main() est appelée par la
machine virtuelle pour exécuter une application.
▪ les applets ne peuvent pas être testées avec l'interpréteur. Elles doivent être testées
avec l'applet viewer ou doivent être intégrées à une page HTML, elle même visualisée
avec un navigateur disposant d'un plug in Java,

12

6
15/05/2023

Chapitre 1 : Présentation du langage JAVA

Un bref historique de Java


Voici un bref historique des versions Java :
1.0 : La première version publique de Java a été publiée en 1996. Elle comprenait des fonctionnalités telles que l'exécution de code sur
plusieurs plates-formes et une sécurité renforcée.
1.1 : La version 1.1 a été publiée en 1997 et a ajouté de nouvelles fonctionnalités telles que les classes internes, les classes anonymes et
les collections.
1.2 (ou JDK 1.2) : Publiée en 1998, la version 1.2 de Java a ajouté le Swing GUI toolkit, l'API Collections et les expressions régulières.
1.3 : La version 1.3 de Java a été publiée en 2000 et comprenait des améliorations de performances, une meilleure prise en charge des
EJB et des améliorations de l'API Swing.
1.4 : La version 1.4 de Java a été publiée en 2002 et a ajouté des fonctionnalités telles que la gestion des erreurs, les assertions, le
support des chaînes de caractères Unicode et l'API de formatage de texte.
5.0 (ou JDK 1.5) : Publiée en 2004, la version 5.0 de Java a ajouté des fonctionnalités telles que les annotations, les types génériques, les
énumérations et l'autoboxing/unboxing.
6 (ou JDK 1.6) : Publiée en 2006, la version 6 de Java a ajouté des améliorations de performances, des améliorations de l'API Swing et
l'ajout de Java Compiler API.
7 (ou JDK 1.7) : La version 7 de Java a été publiée en 2011 et a ajouté des fonctionnalités telles que les littéraux de chaîne switch, les
captures multiples des exceptions, les try-with-resources et l'amélioration des performances du compilateur.
8 (ou JDK 1.8) : Publiée en 2014, la version 8 de Java a ajouté des fonctionnalités telles que les expressions lambda, l'API de temps et de
date, les annotations de type et l'amélioration des performances des Streams.
9 (ou JDK 9) : Publiée en 2017, la version 9 de Java a ajouté des fonctionnalités telles que le module système, l'API de processus et les flux
de réactifs.
10 (ou JDK 10) : Publiée en 2018, la version 10 de Java a ajouté des fonctionnalités telles que la déclaration var, l'API pour les interfaces
privées et l'amélioration des performances de la compilation.
11 (ou JDK 11) : Publiée en 2018, la version 11 de Java a ajouté des fonctionnalités telles que le support de HTTP/2, l'amélioration de13l'API
pour les chaînes de caractères et le support de TLS 1.3.

Chapitre 1 : Présentation du langage JAVA

Un bref historique de Java


Voici un bref historique des versions Java :

12 (ou JDK 12) : Publiée en 2019, la version 12 de Java a ajouté des fonctionnalités telles que la switch expression, l'API de la JVM pour
les conteneurs, la mise à l'échelle dynamique des machines virtuelles et l'amélioration des performances du garbage collector.
13 (ou JDK 13) : Publiée en 2019, la version 13 de Java a ajouté des fonctionnalités telles que la syntaxe de texte brut pour les littéraux,
l'API de point d'ancrage pour les Garbage Collectors, le support de la mise en cache des compilateurs JIT et l'ajout de plusieurs
fonctionnalités pour les API de flux et d'E/S.
14 (ou JDK 14) : Publiée en 2020, la version 14 de Java a ajouté des fonctionnalités telles que les enregistrements, les expressions switch,
le support des chaînes de caractères au format UTF-8 et l'amélioration de la lecture des fichiers.
15 (ou JDK 15) : Publiée en 2020, la version 15 de Java a ajouté des fonctionnalités telles que les opérateurs de text blocks, l'amélioration
des performances de l'allocation de mémoire et l'ajout d'une API pour les sockets Unix.
16 (ou JDK 16) : Publiée en 2021, la version 16 de Java a ajouté des fonctionnalités telles que les enregistrements de classe locales,
l'amélioration de la gestion des erreurs, l'ajout de l'API Vector API pour les calculs à haute performance et l'ajout de fonctionnalités pour
les flux et les E/S.
17 (ou JDK 17) : Publiée en 2021, la version 17 de Java a ajouté des fonctionnalités telles que la rétrocompatibilité avec des versions
antérieures, l'amélioration des performances du garbage collector, l'ajout de l'API contextuelle et la simplification des paramètres du JDK.

14

7
15/05/2023

Chapitre 1 : Présentation du langage JAVA

Un bref historique de Java


Quelle est la différence entre les plates-formes JRE et SE ?

15

Chapitre 1 : Présentation du langage JAVA

Un bref historique de Java


Quelle est la différence entre JRE et JDK ?

16

8
15/05/2023

Chapitre 1 : Présentation du langage JAVA

Un bref historique de Java


Depuis sa version 1.2, Java a été renommé Java 2. Les numéros de version 1.2 et 2
désignent donc la même version. Le JDK a été renommé J2SDK (Java 2 Software
Development Kit) mais la dénomination JDK reste encore largement utilisée, à tel point
que la dénomination JDK est reprise dans la version 5.0. Le JRE a été renommé J2RE (Java
2 Runtime Environment).
Trois plate-formes d'exécution (ou éditions) Java sont définies pour des cibles distinctes
selon les besoins des applications à développer :

▪ Java Standard Edition (J2SE / Java SE) : environnement d'exécution et ensemble complet
d'API pour des applications de type desktop. Cette plate-forme sert de base en tout ou
partie aux autres plate-formes
▪ Java Enterprise Edition (J2EE / Java EE) : environnement d'exécution reposant
intégralement sur Java SE pour le développement d'applications d'entreprises
▪ Java Micro Edition (J2ME / Java ME) : environnement d'exécution et API pour le
développement d'applications sur appareils mobiles et embarqués dont les capacités ne
permettent pas la mise en oeuvre de Java SE

17

Chapitre 1 : Présentation du langage JAVA

Un bref historique de Java


Avec différentes éditions, les types d'applications qui peuvent être développées en Java
sont nombreux et variés :

▪ Applications desktop
▪ Applications web : servlets/JSP, portlets, applets
▪ Jeux : Les jeux peuvent être développés en Java à l'aide de bibliothèques telles que
LWJGL (Lightweight Java Game Library) et jMonkeyEngine.
▪ Applications pour appareil mobile (MIDP) : midlets
▪ Applications scientifiques : Les applications scientifiques telles que la modélisation
numérique et la simulation peuvent être développées en Java à l'aide de bibliothèques
telles que JAMA (Java Matrix Package) et JFreeChart.
▪ Applications pour appareil embarqué (CDC) : Xlets
▪ Applications pour carte à puce (Javacard) : applets Javacard
▪ Applications temps réel

18

9
15/05/2023

Chapitre 1 : Présentation du langage JAVA

LA SYNTAXE DE JAVA
Java est un langage objet qui s’appuie sur la syntaxe du langage C et du C++. Java est un
langage objet : on doit utiliser les classes et les objets ; C++ est un langage orienté objet,
sorte de langage hybride permettant à la fois la programmation classique sans objets et la
programmation avec objets.
La figure ci-dessous présente un programme réalisant la somme des nb
éléments d’un tableau tabEnt d’entiers.

19

Chapitre 1 : Présentation du langage JAVA

LA SYNTAXE DE JAVA
• Java est sensible à la casse.
• Les blocs de code sont encadrés par des accolades. Chaque instruction se termine par un
caractère ';' (point virgule).
• Une instruction peut tenir sur plusieurs lignes :
Les commentaires
Il existe trois types de commentaire en Java :

20

10
15/05/2023

Chapitre 1 : Présentation du langage JAVA

LA SYNTAXE DE JAVA
La déclaration de variables
Une variable possède un nom, un type et une valeur.
La déclaration d'une variable permet de réserver la mémoire pour en stocker la valeur.
Le type d'une variable peut être :
• soit un type élémentaire dit aussi type primitif déclaré sous la forme
type_élémentaire variable;
• soit une classe déclarée sous la forme classe variable ;

Rappel : les noms de variables en Java peuvent commencer par une lettre, par le caractère de
soulignement ou par le signe dollar. Le reste du nom peut comporter des lettres ou des nombres
mais jamais d'espaces.
21

Chapitre 1 : Présentation du langage JAVA

LA SYNTAXE DE JAVA
Les types élémentaires
Les types élémentaires ont une taille identique quelque soit la plate-forme d'exécution :
c'est un des éléments qui permet à Java d'être indépendant de la plate-forme sur laquelle
le code s'exécute

Remarque : Les types élémentaires commencent tous par une minuscule.

22

11
15/05/2023

Chapitre 1 : Présentation du langage JAVA

LA SYNTAXE DE JAVA
Exemples de déclaration de variables avec ou sans valeur initiale

23

Chapitre 1 : Présentation du langage JAVA

LA SYNTAXE DE JAVA
Exemples de déclaration de variables avec ou sans valeur initiale

24

12
15/05/2023

Chapitre 1 : Présentation du langage JAVA

LA SYNTAXE DE JAVA
Exemples de déclaration de variables avec ou sans valeur initiale
Java vérifie qu’une variable locale (à la fonction main() dans cet exemple) est initialisée
avant son utilisation. Si la variable n’est pas initialisée, le compilateur signale un message
d’erreur comme sur les exemples ci-dessous.

Lorsque vous essayez de compiler ce code, le compilateur Java signalera une erreur

25

Chapitre 1 : Présentation du langage JAVA

LA SYNTAXE DE JAVA
Exemples de déclaration de variables avec ou sans valeur initiale
L’instruction suivante écrit en début de ligne (indiquée par \n), pour chaque variable, son
nom suivi de sa valeur convertie en caractères. L’opérateur + est ici un opérateur de
concaténation de chaînes de caractères.

26

13
15/05/2023

Chapitre 1 : Présentation du langage JAVA

LA SYNTAXE DE JAVA
Exemple de résultats d’exécution de la classe TypesPrimitifs :

Remarque : pour chaque type, des constantes indiquant les maximums et les minimums sont définies
: Byte.MIN_VALUE, Byte.MAX_VALUE, Short.MIN_VALUE, etc.
27

Chapitre 1 : Présentation du langage JAVA

LA SYNTAXE DE JAVA

28

14
15/05/2023

Chapitre 1 : Présentation du langage JAVA

LA SYNTAXE DE JAVA
Les constantes symboliques
Les constantes symboliques sont déclarées comme des variables précédées de final . Leur
contenu ne peut pas être modifié par la suite. L’identificateur de la constante est souvent
écrit en majuscules. Exemples de déclaration de constantes symboliques :

29

Chapitre 1 : Présentation du langage JAVA

LA SYNTAXE DE JAVA
Les opérateurs arithmétiques, relationnels, logiques
Les opérateurs arithmétiques réalisent des opérations sur des variables entières ou
réelles. Les opérations possibles sont listées ci-après.

Les opérateurs d’incrémentation

30

15
15/05/2023

Chapitre 1 : Présentation du langage JAVA

LA SYNTAXE DE JAVA
Les opérateurs (relationnels) de comparaison

Les opérateurs logiques

31

Chapitre 1 : Présentation du langage JAVA

LA SYNTAXE DE JAVA
Le transtypage (cast)
Le transtypage est nécessaire quand il risque d’y avoir perte d’information, comme lors de
l’affectation d’un entier long (64 bits) à un entier int (32 bits), ou d’un réel double vers un
réel float. On force alors le type, indiquant ainsi au compilateur qu’on est conscient du
problème de risque de perte d’information.

Byte → short → int → long → float → double

Remarque : dans les expressions arithmétiques, les entiers de type byte ou short sont considérés
comme des int (convertis d’office en int). Si b1 est un byte, b1 + 1 est considéré être un int.
L’affectation b1 = b1 + 1 est illégale sans cast (de type int -> byte)
32

16
15/05/2023

Chapitre 1 : Présentation du langage JAVA

LA SYNTAXE DE JAVA
Les tableaux à une dimension : Les tableaux d’éléments de type primitif
Plusieurs éléments de même type peuvent être regroupés (sous un même nom) en tableau.
On peut accéder à chaque élément à l’aide d’un d’indice. Le premier élément porte l’indice
0. Les tableaux sont alloués dynamiquement en Java. Ils sont initialisés par défaut à 0 pour
les nombres et à faux pour les tableaux de booléens.

Exemples de déclarations : tableau de types primitifs (type int) avec allocation et


initialisation du tableau :

(1) et (2) sont identiques et corrects en Java. La forme (2) indique mieux un tableau d’entiers nommé tabEnt, et
initialisé avec les valeurs 1, 2 et 3.

tabEnt est une référence non initialisée vers un tableau d’entiers. 33

Chapitre 1 : Présentation du langage JAVA

LA SYNTAXE DE JAVA
Les tableaux à une dimension : Les tableaux d’éléments de type primitif
Exemples de déclarations avec allocation dynamique du tableau :

déclare et définit la variable tabEnt comme une référence sur un tableau d’entiers, mais ne
réserve pas de place mémoire pour ce tableau. L’allocation doit se faire avec new en
indiquant le nombre d’éléments. Ci-après, on réserve 10 éléments de type int, numérotés
de 0 à 9.

34

17
15/05/2023

Chapitre 1 : Présentation du langage JAVA

LA SYNTAXE DE JAVA
Les tableaux à une dimension : Les tableaux d’éléments de type primitif

Ou encore en une seule instruction :

tabEnt.length fournit la longueur déclarée du tableau tabEnt (soit 10 sur l’exemple).

35

Chapitre 1 : Présentation du langage JAVA

LA SYNTAXE DE JAVA
Les tableaux à une dimension : Les tableaux d’objets
On déclare de la même façon un tableau d’objets. tabBalle est un tableau d’éléments de
type Balle pouvant référencer six objets de type Balle numérotés de 0 à 5.

Les chaînes de caractères étant gérées en Java sous forme de classes, on peut de même
déclarer des tableaux d’objets de type String (chaînes de caractères).

36

18
15/05/2023

Chapitre 1 : Présentation du langage JAVA

LA SYNTAXE DE JAVA
Les tableaux à une dimension : Les tableaux à plusieurs dimensions
On peut généraliser la notion de tableau à une dimension pour créer des tableaux
multidimensionnels. Un tableau à deux dimensions est un tableau de tableaux.

Un tableau à deux dimensions de deux lignes


et d’un nombre variable de colonnes.

Un tableau d’entiers à deux dimensions de deux


lignes et trois colonnes.

37

Chapitre 1 : Présentation du langage JAVA

LA SYNTAXE DE JAVA
Les instructions de contrôle (alternatives, boucles)
Les instructions de contrôle du déroulement lors de l’exécution des instructions ont la
même syntaxe que pour le langage C. Leur syntaxe est présentée succinctement ci-
dessous. L’espace n’étant pas significatif en Java, les instructions peuvent être présentées
(indentées) de différentes façons.

38

19
15/05/2023

Chapitre 1 : Présentation du langage JAVA

LA SYNTAXE DE JAVA
Les instructions de contrôle (alternatives, boucles)

39

Chapitre 1 : Présentation du langage JAVA

LA SYNTAXE DE JAVA
Les instructions de contrôle (alternatives, boucles)

40

20
15/05/2023

Chapitre 1 : Présentation du langage JAVA

LA SYNTAXE DE JAVA
Les instructions de contrôle (alternatives, boucles)
Les boucles for, while et do ... while

• exp1 : évaluée avant de commencer la boucle.


• exp2 : condition évaluée en début d’itération ; la boucle continue si exp2 est vraie.
• exp3 : évaluée en fin de chaque itération.

ou encore surtout s’il y a plusieurs instructions dans la boucle :

41

Chapitre 1 : Présentation du langage JAVA

LA SYNTAXE DE JAVA
Les instructions de contrôle (alternatives, boucles)

42

21
15/05/2023

Plan de cours

❑ Chapitre 1 : Présentation du langage JAVA


❑ Chapitre 2 : Classes JAVA
❑ Chapitre 3 : Héritage
❑ Chapitre 4 : Exceptions
❑ Chapitre 5 : Interfaces graphiques (Swing)

43

Chapitre 2 : Classes JAVA

La notion de classe
Une classe en langage orienté objet est une structure de programmation qui définit un
ensemble d'attributs et de méthodes qui représentent un concept ou un objet du monde réel.
Elle permet de créer des objets qui peuvent interagir les uns avec les autres en utilisant ces
attributs et méthodes.

La classe Pile (-indique un


attribut ou une méthode
privé).

44

22
15/05/2023

Chapitre 2 : Classes JAVA

La notion de classe

Deux objets (deux instances) de la classe Pile.


• Chaque objet a ses propres attributs (en grisé) qui sont privés (encapsulés dans
l’objet).
• Les méthodes par contre ne sont pas dupliquées

45

Cette classe s'appelle Person, elle contient deux propriétés (name et age), un constructeur et trois méthodes (sayHello(), getAge()
Chapitre 2 : Classes JAVA

La notion de classe

Cette classe s'appelle Person, elle contient deux propriétés (name et age), un
constructeur et trois méthodes (sayHello(), getAge() et setAge()).
46

23
15/05/2023

Chapitre 2 : Classes JAVA

La notion de classe et Objet

Qu’est ce qu’un objet ?

• Une instance d'une classe, créée à partir du modèle fourni par la classe.
• Une entité autonome qui peut avoir des états et des comportements.
• Une structure de données complexe qui contient des données (variables
d'instance) et des méthodes (comportements) pour manipuler ces données.
• Une abstraction de données qui permet de regrouper les données et les
comportements associés en une seule entité.
• Une instance de classe qui peut interagir avec d'autres objets pour réaliser une
tâche ou résoudre un problème.
• Un élément fondamental de la programmation orientée objet, qui permet une
modélisation efficace et flexible des concepts du monde réel.

47

Chapitre 2 : Classes JAVA

La notion de classe et Objet

- Un objet a :
• une adresse en mémoire (identifie l’objet)
• un comportement (ou interface)
• un état interne
- Le comportement est donné par des fonctions ou procédures, appelées
méthodes
- L’état interne est donné par des valeurs de variables d’instances

48

24
15/05/2023

Chapitre 2 : Classes JAVA

La notion de classe et Objet


Un objet est une instance, un exemplaire construit dynamiquement sur le modèle que
décrit la classe.

49

Chapitre 2 : Classes JAVA

La notion de constructeur d’un objet

Constructeur : méthode particulière, portant le même nom que la classe et


automatiquement invoquée juste après la création d’une instance.
• Un constructeur peut avoir un nombre quelconque de paramètres.
• Un constructeur sans paramètre est conseillé sur toute classe.
• Un paramètre peut avoir le même nom qu’une variable d’instance.
L’ exécution d’un constructeur débute par une initialisation éventuelle et
automatique des attributs de l’objet si des valeurs ont été données à la déclaration.
Elle se poursuit avec l’exécution des instructions du constructeur

50

25
15/05/2023

Chapitre 2 : Classes JAVA

La notion de constructeur d’un objet


Exemple :

51

Chapitre 2 : Classes JAVA

La notion de constructeur d’un objet


Quelques règles concernant les constructeurs
1) un constructeur ne fournit aucune valeur. Dans son en-tête, aucun type ne doit figurer
devant son nom. Même la présence (logique) de void est une erreur :

2) Une classe peut ne disposer d’aucun constructeur. On peut alors instancier des objets
comme s’il existait un constructeur par défaut sans arguments.

3) Un constructeur ne peut pas être appelé directement depuis une autre méthode. :

52

26
15/05/2023

Chapitre 2 : Classes JAVA

La notion de constructeur d’un objet


Quelques règles concernant les constructeurs
4) Un constructeur peut appeler un autre constructeur de la même classe. Cette possibilité
utilise la sur-définition des méthodes et nécessite l’utilisation du mot clé super

53

Chapitre 2 : Classes JAVA

La notion de constructeur d’un objet


Quelques règles concernant les constructeurs

5) Un constructeur peut être déclaré privé (private ). Dans ce cas, il ne pourra plus être
appelé de l’extérieur, c’est-à-dire qu’il ne pourra pas être utilisé pour instancier des objets :

54

27
15/05/2023

Chapitre 2 : Classes JAVA

La notion de destruction d’un objet


Ramasse-miette

❑ La gestion automatique de la mémoire : Le garbage collector est un mécanisme de


gestion de mémoire automatique intégré dans la machine virtuelle Java qui est
responsable de la libération de la mémoire des objets qui ne sont plus référencés.
❑ L'identification des objets non référencés
❑ La libération de l'espace mémoire
❑ La suppression des références : Les références aux objets supprimés sont également
retirées afin de permettre une récupération complète de l'espace mémoire.
❑ L'amélioration des performances : Le garbage collector permet de libérer de l'espace
mémoire de manière efficace
❑ La configuration possible : Il est possible de configurer les paramètres du garbage
collector pour adapter son fonctionnement aux besoins spécifiques du programme et
de l'application.

55

Chapitre 2 : Classes JAVA

La notion de destruction d’un objet


La méthode finalize
Il est possible, pour toute classe, d’écrire une méthode finalize, automatiquement invoquée
lorsqu’un objet va être récupéré par le GC (Equivalent des destructeurs C++).

Note : Dans cet exemple, on crée un objet MyClass puis on ne le référence plus en mettant sa référence à null. Ensuite, on
appelle la méthode System.gc() pour demander explicitement au GC de récupérer les objets non référencés. Lorsque le GC
va récupérer l'objet obj, la méthode finalize de la classe MyClass sera automatiquement invoquée.
56

28
15/05/2023

Chapitre 2 : Classes JAVA

Affectation et comparaison d’objets


Exemple 1
Supposons que nous disposions d’une classe Point possédant un constructeur à deux
arguments entiers et considérons ces instructions :

Après leur exécution, on aboutit à cette situation :

57

Chapitre 2 : Classes JAVA

Affectation et comparaison d’objets


Exécutons maintenant l’affectation : a = b ?
Dorénavant, a et b désignent le
même objet, et non pas deux objets
de même valeur

58

29
15/05/2023

Chapitre 2 : Classes JAVA

Affectation et comparaison d’objets


Exemple 2
Considérons les instructions suivantes :

Notez bien qu’il n’existe ici que deux objets de type Point et trois variables de type
Point (trois références, dont deux de même valeur).

59

Chapitre 2 : Classes JAVA

Affectation et comparaison d’objets


Exercice

Écrire une classe "Personne" avec les attributs "nom" et "age". Créez ensuite
deux objets "p1" et "p2" de type "Personne" avec les valeurs suivantes :

•p1 : nom = "Alice", age = 25


•p2 : nom = "Bob", age = 30

1. Affectez l'objet "p1" à l'objet "p3", puis comparez les objets "p1", "p2" et "p3"
pour vérifier s'ils sont égaux ou non.
2. Modifiez la valeur de l'attribut "nom" de l'objet "p3" en "Reda" et comparez
de nouveau les objets "p1", "p2" et "p3".

60

30
15/05/2023

Chapitre 2 : Classes JAVA

Affectation et comparaison d’objets

p1 equals p2 : false
p1 equals p3 : true
p1 equals p3 : true
61

Chapitre 2 : Classes JAVA

Initialisation de référence et référence nulle


En Java, il n’est pas possible de définir une variable locale d’un type primitif sans l’initialiser.
La règle se généralise aux variables locales de type classe .

Considérez cet exemple utilisant une classe Point disposant d’une méthode affiche :

62

31
15/05/2023

Chapitre 2 : Classes JAVA

La notion de clone
L’affectation de variables de type objet se limite à la recopie de références. Elle ne provoque
pas la recopie de la valeur des objets.
Si on le souhaite, on peut bien entendu effectuer explicitement la recopie de tous les
champs d’un objet dans un autre objet de même type.

Cette démarche est utilisable tant que la classe concernée ne comporte pas de champs de
type classe.
63

Chapitre 2 : Classes JAVA

La notion de clone
la copie profonde d’un objet : on se contente de recopier la valeur de tous ses champs, y
compris ceux de type classe,

la copie superficielle d’un objet : comme précédemment, on recopie la valeur des


champs d’un type primitif mais pour les champs de type classe, on crée une nouvelle
référence à un autre objet du même type de même valeur.

64

32
15/05/2023

Chapitre 2 : Classes JAVA

Comparaison d’objet
Les opérateurs == et != s’appliquent théoriquement à des objets. Mais comme ils portent sur
les références elles-mêmes, leur intérêt est très limité.

Ainsi, avec :

Point a, b ;

L’expression a == b est vraie uniquement si a et b font référence à un seul et même objet, et


non pas seulement si les valeurs des champs de a et b sont les mêmes.

65

Chapitre 2 : Classes JAVA

Règles d’écriture des méthodes


Méthodes fonction
Une méthode peut ne fournir aucun résultat. Le mot clé void figure alors dans son en-tête
à la place du type de la valeur de retour.

Mais une méthode peut aussi fournir un résultat. Nous parlerons alors de méthode
fonction. Voici par exemple une méthode distance qu’on pourrait ajouter à une classe
Point pour obtenir la distance d’un point à l’origine :

66

33
15/05/2023

Chapitre 2 : Classes JAVA

Règles d’écriture des méthodes


Méthodes fonction
La valeur fournie par une méthode fonction peut apparaître dans une expression,
comme dans ces exemples utilisant les méthodes distance , getX et getY précédentes :

67

Chapitre 2 : Classes JAVA

Règles d’écriture des méthodes


Arguments muets ou effectifs
Comme dans tous les langages, les arguments figurant dans l’en-tête de la définition d’une
méthode

Il est possible de déclarer un argument muet avec l’attribut final . Dans ce cas, le compilateur
s’assure que sa valeur n’est pas modifiée par la méthode :

Les arguments fournis lors de l’appel de la méthode portent quant à eux le nom d’arguments
effectifs (ou encore paramètres effectifs).

68

34
15/05/2023

Chapitre 2 : Classes JAVA

Règles d’écriture des méthodes


Conversion des arguments effectifs
Jusqu’ici, nous avions appelé nos différentes méthodes en utilisant des arguments effectifs
d’un type identique à celui de l’argument muet correspondant.

Il faut simplement que la conversion dans le type attendu soit une conversion implicite
légale

69

Chapitre 2 : Classes JAVA

Règles d’écriture des méthodes


Conversion des arguments effectifs
Voici quelques exemples usuels :

p.deplace (n1, n2) ;


// OK : appel normal
p.deplace (b+3, n1) ;
// OK : b+3 est déjà de type int
p.deplace (b, n1) ;
// OK : b de type byte sera converti en int
p.deplace (n1, q) ;
// erreur : q de type long ne peut être converti en int
p.deplace (n1, (int)q) ;
70
// OK

35
15/05/2023

Chapitre 2 : Classes JAVA

Règles d’écriture des méthodes


Conversion des arguments effectifs
Voici quelques autres exemples plus insidieux :

p.deplace (b1, b2) ;


// OK : appel normal
p.deplace (b1+1,b2) ;
// erreur : b1+1 de type int ne peut être converti en byte p.
deplace (b1++, b2) ;
// OK : b1++ est de type byte

71

Chapitre 2 : Classes JAVA

Règles d’écriture des méthodes


Conversion des arguments effectifs
Écrire une méthode appelée "somme" qui prend deux arguments de type int et
renvoie leur somme. Cependant, cette méthode doit également pouvoir traiter les
arguments de type short et byte.

72

36
15/05/2023

Chapitre 2 : Classes JAVA

Méthodes & Attribut statiques :


Un attribut statique est un attribut qui est commun à tous les objets que vous pourrez
créer. On peut par exemple citer un compteur du nombres d'instances de classe que vous
aurez lancées.

Ce code affichera 3.
73

Chapitre 2 : Classes JAVA

Méthodes & Attribut statiques :


Supposons que vous voulez écrire une méthode int abs(int x) dans une classe Math qui
calcule la valeur absolue d'un nombre x. Le comportement de cette méthode ne dépend
pas de la valeur des variables d'instance de la class Math.
Pourquoi devrait-on créer un objet de la classe Math pour utiliser cette méthode ? Ce serait
perdre de la place sur la mémoire.
La classe Math existe en Java, ainsi que la méthode abs(). Et effectivement il n'est pas
possible d'instancier cette classe.

Cette instruction renvoie l'erreur suivante à la compilation :


% javac TestMath
TestMath . java :3: Math () has private
access in java . lang . Math
...
1 error
74

37
15/05/2023

Chapitre 2 : Classes JAVA

Méthodes & Attribut statiques :


▪En général, une classe possédant des méthodes statiques n'est pas
conçue pour être instanciée.

▪Mais cela ne signifie pas qu'une classe possédant une méthode


statique ne doit jamais être instanciée : si une méthode de la classe
n'est pas statique, alors l'instanciation doit être possible.

75

Chapitre 2 : Classes JAVA

Méthodes & Attribut statiques :


Une méthode statique est une méthode qui peut être appelée même sans avoir instancié la
classe. Une méthode statique ne peut accéder qu'à des attributs et méthodes statiques.

Exemple d'application avec une méthode statique :

Vous pouvez sans avoir instancié la classe accéder à la méthode statique en tapant ceci :
Test.MaMethodeStatique();

n'importe où dans votre code. 76

38
15/05/2023

Chapitre 2 : Classes JAVA

Méthodes & Attribut statiques :


Bien que Java soit un langage objet, il existe des cas où une instance de classe est inutile. Le
mot clé static permet alors à une méthode de s'exécuter sans avoir à instancier la classe qui
la contient. L'appel à une méthode statique se fait alors en utilisant le nom de la classe,
plutôt que le nom de l'objet.

77

Chapitre 2 : Classes JAVA

La surcharge de méthodes :
La surcharge survient lorsque l'on a deux méthodes du même nom mais qui ne prennent pas
les mêmes paramètres. :
Exemple de surcharge de méthode

78

39
15/05/2023

Chapitre 2 : Classes JAVA

Les packages en Java


En Java, un package (paquet en français) est un mécanisme utilisé pour organiser et
regrouper des classes liées dans une même unité. Les packages fournissent un espace de
noms séparé pour éviter les conflits de noms de classes et permettent une meilleure
organisation et maintenance du code.

79

Chapitre 2 : Classes JAVA

Les packages en Java

Parmi les paquetages de Java vous avez :

80

40
15/05/2023

Chapitre 2 : Classes JAVA

Les packages en Java


Nom : chaque paquetage porte un nom.
Ce nom est soit un simple identificateur ou une suite d'identificateurs séparés par des points.
L'instruction permettant de nommer un paquetage doit figurer au début du fichier source
(.java) comme suit:

Dans cette opération nous venons d'assigner toutes les classes du fichier Exemple.java au
paquetage nomtest.

81

Chapitre 2 : Classes JAVA

Les packages en Java


Si vous avez besoin d'utiliser une classe se trouve dans le paquetage nomtest
import nomtest .*;

Par cette instruction vous avez demandé d'importer toutes les classes se trouvant dans le
paquetage nomtest

Remarques :
1) Le paquetage java.lang est importé automatiquement par le compilateur.
2) import nomtest.*;
• Cette instruction ne va pas importer de manière récursive les classes se
trouvant dans nomtest et dans ses sous paquetages.
• Elle va uniquement se contenter de faire un balayage d'un seul niveau.
• Elle va importer donc que les classes du paquetage nomtest.
import java.awt.*;
import java.awt.event.*; 82

41
15/05/2023

Chapitre 2 : Classes JAVA

Les packages en Java

Si deux paquetages contiennent le même nom de classe il y a problème!

Par exemple

• la classe List des paquetages java.awt et java.util ou bien la classe Date des paquetages
java.util et java.sql etc.

• Pour corriger ce problème vous devez impérativement spécifier le nom exact du


paquetage à importer (ou à utiliser).

• java.awt.List (ou) java.util.List ; java.util.Date (ou) java.sql.Date


• import java.awt.*; // ici on importe toutes les classes dans awt
• import java.util.*; // ici aussi
• import java.util.List; // ici on précise la classe List à utiliser

83

Chapitre 2 : Classes JAVA

Classe String
En Java, les chaînes de caractères sont gérées à l’aide de la classe String fournie en standard
dans le paquetage java.lang. Cette gestion diffère du langage C où les chaînes de caractères
sont mémorisées comme une suite de caractères terminée par 0.

• Le principe d’encapsulation et l’accès direct aux données d’un objet de la classe String
n’est pas possible et les structures de données utilisées sont inconnues.
• La classe String met à la disposition de l’utilisateur un large éventail de méthodes gérant
les chaînes de caractères.

Remarque :

• la chaîne de caractères d’un objet de type String ne peut pas être modifié .
• En cas de modification, les méthodes fournissent un nouvel objet à partir de la chaîne de
l’objet courant et répondant aux caractéristiques de la méthode. Une même chaîne de
caractères (String) peut être référencée plusieurs fois puisqu’on est sûr qu’elle ne peut
pas être modifiée.
• La classe StringBuffer par contre permet la création et la modification d’une chaîne de
caractères. 84

42
15/05/2023

Chapitre 2 : Classes JAVA

Classe String
Les premières méthodes sont des constructeurs d’un objet de type String.
• String () : crée une chaîne vide
• String (String) : crée une chaîne à partir d’une autre chaîne
• String (StringBuffer) : crée une chaîne à partir d’une autre chaîne de type String-Buffer

Remarque :
String s = "Monsieur" ; est accepté par le compilateur et est équivalent à
String s = new String ("Monsieur") ;

85

Chapitre 2 : Classes JAVA

Classe String

• int length () : longueur de la chaîne.


• String toLowerCase () : fournit une nouvelle chaîne (nouvel objet) convertie en
minuscules.
• String toUpperCase () : fournit une nouvelle chaîne (nouvel objet) convertie en
majuscules.
• char charAt (int n) : fournit le n ième caractère de la chaîne de l’objet courant.
• int compareTo (String s) : compare la chaîne de l’objet et la chaîne s ; fournit 0 si =, <0 si
inférieur, > 0 sinon.
• String concat (String s) : concatène la chaîne de l’objet et la chaîne s (crée un nouvel
objet).
• boolean equals (Object s) : compare la chaîne de l’objet et la chaîne s.
• boolean equalsIgnoreCase (String s) : compare la chaîne de l’objet et la chaîne s (sans
tenir compte de la casse).

86

43
15/05/2023

Chapitre 2 : Classes JAVA

Classe String
• int indexOf (char c) : indice du caractère c dans la chaîne ; -1 s’il n’existe pas.
• int indexOf (int, char) : indice d’un caractère de la chaîne en partant d’un indice donné.
• int indexOf (String s) : indice de la sous-chaîne s.
• int indexOf (String, int) : indice de la sous-chaîne en partant d’un indice.
• int lastIndexOf (char c) : indice du dernier caractère c.
• int lastIndexOf (int, char) : indice du dernier caractère en partant de la fin et d’un
indice.
• int lastIndexOf (String) : indice de la dernière sous-chaîne.
• int lastIndexOf (String, int) : indice de la dernière sous-chaîne en partant d’un indice.
• String replace (char c1, char c2) : crée une nouvelle chaîne en remplaçant le caractère
c1 par c2.
• boolean startsWith (String s) : teste si la chaîne de l’objet commence par s.
• boolean startsWith (String s, int n) : teste si la chaîne de l’objet commence par s en
partant de l’indice n.
87

Chapitre 2 : Classes JAVA

Classe String
• boolean endsWith (String s) : teste si la chaîne de l’objet se termine par s.
• String substring (int d) : fournit la sous-chaîne de l’objet commençant à l’indice d.
• String substring (int d, int f) : fournit la sous-chaîne de l’objet entre les indices d
(inclus) et f (exclu).
• String trim () : enlève les espaces en début et fin de chaîne.
• L’opérateur + est un opérateur de concaténation de chaînes de caractères souvent utilisé
pour la présentation des résultats à écrire.
• Il peut aussi s’utiliser pour former une chaîne de caractères.
• Les objets de type String ne sont pas modifiables ; il faut donc créer un nouvel objet de
type String si on concatène deux objets de type String.`
• Si les deux opérandes de l’opérateur + sont de type String, le résultat est de type String.
• Si un des deux opérandes est de type String et l’autre de type primitif (entier, réel,
caractère, booléen), le type primitif est converti en un String.
• Si un des deux opérandes est de type String et l’autre est un objet, l’objet est remplacé
par une chaîne de caractères fournie par la méthode toString() de l’objet (ou celle de la
classe Object, ancêtre de toutes les classes)
88

44
15/05/2023

Chapitre 2 : Classes JAVA

Classe String
class TestString1 {
public static void main (String[] args) {
String ch1 = "Louis"; int i1 = 13;
String ch2 = ch1 + i1; System.out.println ("ch2 : " + ch2);
// …….
String ch3 = i1 + ch1; System.out.println ("ch3 : " + ch3);
// ………
String ch4 = ch1 + i1 + 2; System.out.println ("ch4 : " + ch4);
//…….
String ch5 = ch1 + (i1 + 2); System.out.println ("ch5 : " + ch5);
// ……….
//String ch6 = i1 + 2;
// ……
String ch7 = "" + i1 + 2;
// …….
System.out.println ("ch7 : " + ch7); String ch8 = i1 + 2 + "";
// …….
System.out.println ("ch8 : " + ch8); String ch9 = Integer.toString (i1 + 2);
89
// ……} }

Chapitre 2 : Classes JAVA

Classe String
class TestString1 {
public static void main (String[] args) {
String ch1 = "Louis"; int i1 = 13;
String ch2 = ch1 + i1; System.out.println ("ch2 : " + ch2);
// Louis13
String ch3 = i1 + ch1; System.out.println ("ch3 : " + ch3);
// 13Louis
String ch4 = ch1 + i1 + 2; System.out.println ("ch4 : " + ch4);
// Louis132
String ch5 = ch1 + (i1 + 2); System.out.println ("ch5 : " + ch5);
// Louis15
//String ch6 = i1 + 2;
// impossible de convertir int en String
String ch7 = "" + i1 + 2;
// 132
System.out.println ("ch7 : " + ch7); String ch8 = i1 + 2 + "";
// 15
System.out.println ("ch8 : " + ch8); String ch9 = Integer.toString (i1 + 2);
90
// 15 } }

45
15/05/2023

Chapitre 2 : Classes JAVA

Classe String
Résultats d’exécution

91

Chapitre 2 : Classes JAVA

Classe String
Exemple de la méthode charAt

92

46
15/05/2023

Chapitre 2 : Classes JAVA

Classe String
Exemple de la méthode compareTo

0
-1
2
93

Chapitre 2 : Classes JAVA

Classe String
Exemple de la méthode trim

hello how are you


hellohow are you

94

47
15/05/2023

Chapitre 2 : Classes JAVA

Classe String
Exemple de la méthode toString

Student@70dea4e
Student@5c647e05
95

Chapitre 2 : Classes JAVA

Classe String
Exemple de la méthode toString

101 Raj lucknow


102 Vijay ghaziabad 96

48
15/05/2023

Chapitre 2 : Classes JAVA

Classe StringBuffer
Un objet de type StringBuffer représente une chaîne de caractères modifiable. On peut
changer un caractère, ajouter des caractères au tampon interne de l’objet défini avec une
capacité qui peut être changée.

Un objet sb de la classe StringBuffer.


Il contient six caractères et a une capacité de 22 caractères, numérotés de 0 à 21.

97

Chapitre 2 : Classes JAVA

Classe StringBuffer
Les méthodes de type StringBuffer append () concatènent au tampon de l’objet courant la
représentation sous forme de caractères de leur argument (boolean, int, etc.).
• StringBuffer append (boolean);
• StringBuffer append (char);
• StringBuffer append (char[]);
• StringBuffer append (char[], int, int);
• StringBuffer append (double);
• StringBuffer append (floa );
• StringBuffer append (int);
• StringBuffer append (long);
• StringBuffer append (Object) : ajoute toString() de l’objet.
• StringBuffer append (String).
• StringBuffer insert (int, boolean) ;
• StringBuffer insert (int, char) ;
• StringBuffer insert (int, char[]) ;
• StringBuffer insert (int, double) ;
• StringBuffer insert (int, floa ) ;
• StringBuffer insert (int, int) ; 98

49
15/05/2023

Chapitre 2 : Classes JAVA

Classe Vector
Lorsque l'on crée un tableau, il faut spécifier sa taille qui est fixe. Java fourni un objet très
utilisé: le vecteur ( classe java.util.Vector ). L'utilisation d'un vecteur plutôt qu'un tableau
est souvent avantageux lorsque la taille finale du tableau n'est pas connue à l'avance. Un
vecteur est un tableau dynamique. La première cellule d'un vecteur est à l'index zéro.
Principales méthodes de la classe Vector
constructeurs :

• Vector() crée un vecteur vide

• Vector(int nombre) crée un vecteur vide de capacité précisée.

• elementCount nombre d'éléments du vecteur

99

Chapitre 2 : Classes JAVA

Classe Vector
Voici quelques-unes des méthodes disponibles dans la classe Vector en Java :
add(E element) : Ajoute un élément à la fin du vecteur.
add(int index, E element) : Insère un élément à l'index spécifié dans le vecteur.
addAll(Collection<? extends E> c) : Ajoute tous les éléments de la collection spécifiée à la fin du vecteur.
addAll(int index, Collection<? extends E> c) : Insère tous les éléments de la collection spécifiée à l'index
spécifié dans le vecteur.
clear() : Supprime tous les éléments du vecteur.
contains(Object o) : Vérifie si le vecteur contient l'élément spécifié.
elementAt(int index) : Retourne l'élément à l'index spécifié dans le vecteur.
isEmpty() : Vérifie si le vecteur est vide.
remove(int index) : Supprime l'élément à l'index spécifié dans le vecteur.
remove(Object o) : Supprime la première occurrence de l'élément spécifié dans le vecteur.
removeAll(Collection<?> c) : Supprime tous les éléments de la collection spécifiée du vecteur.
retainAll(Collection<?> c) : Supprime tous les éléments du vecteur qui ne sont pas présents dans la
collection spécifiée.
size() : Retourne le nombre d'éléments dans le vecteur.
toArray() : Retourne un tableau contenant tous les éléments du vecteur dans l'ordre. 100

50
15/05/2023

Chapitre 2 : Classes JAVA

Classe Vector
Exercice
Supposons que vous ayez une liste de noms de villes, et que vous souhaitiez stocker ces
noms dans un vecteur (Vector<String>). Écrivez un programme Java qui réalise les tâches
suivantes :
1. Ajoutez les noms de villes suivants au vecteur : "Paris", "Londres", "New York",
"Tokyo", "Dubai".
2. Affichez la taille du vecteur.
3. Affichez tous les éléments du vecteur à l'aide d'une boucle for.
4. Supprimez l'élément "Tokyo" du vecteur.
5. Vérifiez si le vecteur contient l'élément "New York" à l'aide de la méthode contains.
6. Supprimez tous les éléments du vecteur.
7. Vérifiez si le vecteur est vide à l'aide de la méthode isEmpty.
8. Ajoutez le nom de ville "Barcelone" au vecteur.
9. Affichez la taille du vecteur.
10. Affichez tous les éléments du vecteur à l'aide d'une boucle for each.
101

Chapitre 2 : Classes JAVA

Classe Vector
Exercice

102

51
15/05/2023

Chapitre 2 : Classes JAVA

Classe Stack
En Java, la classe Stack hérite de la classe Vector et sert à créer une pile, également
appelée "stack" en anglais. Cette structure de données suit le principe Last-In-First-Out
(LIFO), ce qui implique que le dernier élément ajouté à la pile sera le premier à être
retiré.
• push(element) : ajoute l'élément au sommet de la pile
• pop() : retire et retourne l'élément se trouvant au sommet de la pile
• peek() : retourne l'élément se trouvant au sommet de la pile sans le retirer
• empty() : vérifie si la pile est vide
• search(element) : recherche l'élément dans la pile et retourne sa position (en
comptant à partir du sommet de la pile), ou -1 si l'élément n'est pas présent

Une pile peut aussi contenir des


objets de différents types.

103

Chapitre 2 : Classes JAVA

Classe Stack
Écrivez une méthode qui prend en entrée une chaîne de caractères et utilise une
pile (classe stack) pour inverser l'ordre des caractères. La méthode doit
renvoyer la chaîne de caractères inversée.

104

52
15/05/2023

Chapitre 2 : Classes JAVA

Classe ArrayList
La classe ArrayList est une implémentation de liste dynamique en Java qui permet de
stocker des éléments de manière ordonnée et de modifier sa taille dynamiquement. Elle
peut stocker des éléments de n'importe quel type et offre des méthodes pour ajouter,
supprimer, accéder et modifier les éléments de la liste.

105

Chapitre 2 : Classes JAVA

Classe ArrayList : méthodes


• add() : ajoute un élément à la fin de la liste
• add(index, element) : insère un élément à l'indice spécifié
• get(index) : récupère l'élément à l'indice spécifié
• set(index, element) : remplace l'élément à l'indice spécifié par un nouvel élément
• remove(index) : supprime l'élément à l'indice spécifié
• size() : retourne le nombre d'éléments dans la liste
• clear() : supprime tous les éléments de la liste
• indexOf(element) : retourne l'indice de la première occurrence de l'élément spécifié
• lastIndexOf(element) : retourne l'indice de la dernière occurrence de l'élément
spécifié
• isEmpty() : retourne true si la liste est vide, sinon false
• contains(element) : retourne true si la liste contient l'élément spécifié, sinon false
• toArray() : retourne un tableau contenant tous les éléments de la liste
• subList(fromIndex, toIndex) : retourne une vue de la liste entre les indices spécifiés
• addAll(collection) : ajoute tous les éléments de la collection spécifiée à la fin de la
liste
• removeAll(collection) : supprime tous les éléments de la liste qui sont également
présents dans la collection spécifiée 106

53
15/05/2023

Tableau : [1, 2, 3, 4, 5, 6]
Liste : [1, 2, 3, 4, 5, 6]
Somme des éléments du tableau : 15
Somme des éléments de la liste : 21
Tableau trié : [1, 2, 3, 4, 5]
Liste triée : [1, 2, 3, 4, 5, 6]

107

Chapitre 2 : Classes JAVA

Classe Hashtable
La classe Hashtable est une implémentation de la structure de données de table de hachage en
Java. Elle est utilisée pour stocker des paires clé-valeur, où chaque clé est associée à une
valeur. Cette classe est similaire à la classe HashMap en termes de fonctionnalités, mais elle
est synchronisée, ce qui la rend appropriée pour les environnements multithread.
• put(key, value) : cette méthode permet d'ajouter une paire clé-valeur à la table de hachage. Si la clé
existe déjà, la valeur associée est remplacée par la nouvelle valeur.
• get(key) : cette méthode permet de récupérer la valeur associée à une clé donnée. Si la clé n'existe
pas, cette méthode renvoie la valeur null.
• remove(key) : cette méthode permet de supprimer une paire clé-valeur de la table de hachage.
• containsKey(key) : cette méthode renvoie true si la clé donnée est présente dans la table de hachage,
false sinon.
• containsValue(value) : cette méthode renvoie true si la valeur donnée est associée à au moins une clé
dans la table de hachage, false sinon.
• keySet() : cette méthode renvoie un ensemble (Set) contenant toutes les clés présentes dans la table
de hachage.
• values() : cette méthode renvoie une collection (Collection) contenant toutes les valeurs associées aux
clés présentes dans la table de hachage.
• entrySet() : cette méthode renvoie un ensemble (Set) contenant toutes les paires clé-valeur présentes
dans la table de hachage, sous forme d'objets de type Map.Entry.
108

54
15/05/2023

Chapitre 2 : Classes JAVA

Classe Hashtable
Écrire un programme Java qui permet de compter le nombre d'occurrences de chaque
caractère dans une chaîne de caractères donnée, en utilisant une Hashtable.

Le programme doit permettre à l'utilisateur de saisir une chaîne de caractères au


clavier. Ensuite, il doit parcourir cette chaîne de caractères, et pour chaque
caractère rencontré, ajouter une entrée à la Hashtable si cette clé n'existe pas
encore, ou bien augmenter la valeur associée à la clé si elle existe déjà.

À la fin du traitement, le programme doit afficher la liste des caractères présents


dans la chaîne, ainsi que leur nombre d'occurrences.

109

Chapitre 2 : Classes JAVA

Classe Hashtable

110

55
15/05/2023

Chapitre 2 : Classes JAVA

Classe Set
Cette interface étend également l'interface Collection et définit une collection d'objets qui ne
contient aucun doublon. La plateforme Java comporte 3 implémentations de Set. Vous
pouvez choisir l'une des Collections d'objets suivante:
1. java.util.HashSet
2. java.util.TreeSet
3. java.util.LinkedHashSet
Voici quelques exemples de la création de l'interface Set:
Set hset = new HashSet();
Set tset = new TreeSet();
Set lset = new LinkedHashSet();

• add(Object o): ajoute un élément à l'ensemble s'il n'existe pas déjà dans l'ensemble.
• remove(Object o): supprime l'élément spécifié de l'ensemble s'il est présent.
• contains(Object o): renvoie true si l'ensemble contient l'élément spécifié, sinon false.
• size(): renvoie le nombre d'éléments dans l'ensemble.
• isEmpty(): renvoie true si l'ensemble ne contient aucun élément, sinon false.
• clear(): supprime tous les éléments de l'ensemble. 111

Chapitre 2 : Classes JAVA

Classe Set

Écrire un programme Java qui utilise la classe Set pour effectuer les opérations
suivantes:
1.Créer un ensemble de chaînes de caractères (Set<String>).
2.Ajouter les éléments suivants à l'ensemble : "Java", "Python", "C++", "JavaScript",
"Ruby", "PHP".
3.Afficher le contenu de l'ensemble.
4.Supprimer l'élément "PHP" de l'ensemble.
5.Vérifier si l'ensemble contient l'élément "Java".
6.Afficher la taille de l'ensemble.
7.Vider l'ensemble.
8.Vérifier si l'ensemble est vide.
9.Afficher à nouveau le contenu de l'ensemble.

112

56
15/05/2023

Chapitre 2 : Classes JAVA

Classe Set

113

Chapitre 2 : Classes JAVA

Classe Set

Contenu de l'ensemble : [Java, C++, JavaScript, PHP, Ruby, Python]


Ensemble apr?s suppression de 'PHP' : [Java, C++, JavaScript, Ruby,
Python]
L'ensemble contient 'Java' : true
Taille de l'ensemble : 5
Ensemble vid? : []
L'ensemble est vide : true

114

57
15/05/2023

Chapitre 2 : Classes JAVA

Iterator
La classe Iterator en Java est une interface qui permet de parcourir et d'accéder aux éléments
d'une collection, telle qu'une liste, un ensemble ou une carte.

L'interface Iterator définit les méthodes suivantes :

• boolean hasNext() : renvoie true si il y a un élément suivant dans la collection, false


sinon.
• E next() : renvoie l'élément suivant dans la collection.
• void remove() : supprime l'élément actuel de la collection.

115

Chapitre 2 : Classes JAVA

Iterator : exemple

Dans cet exemple, nous créons une liste de chaînes de caractères, puis nous créons un objet
Iterator à l'aide de la méthode iterator() de la liste. Nous utilisons ensuite une boucle
while pour parcourir la liste en utilisant l'interface Iterator. À chaque itération de la
boucle, nous utilisons la méthode next() pour récupérer l'élément suivant de la liste, et
nous l'affichons à l'aide de la méthode println().
116

58
15/05/2023

Plan de cours

❑ Chapitre 1 : Présentation du langage JAVA


❑ Chapitre 2 : Classes JAVA
❑ Chapitre 3 : Héritage
❑ Chapitre 4 : Exceptions
❑ Chapitre 5 : Interfaces graphiques (Swing)

117

Chapitre 3 : Héritage JAVA

Héritage
Une classe Java dérive toujours d’un autre classe, Object quand rien n’est spécifié. Pour
spécifier de quelle classe hérite une classe on utilise le mot-clé extends :

La classe D dérive de la classe B. On dit que le classe B est la super classe.

La visibilité protected rend l'accès possible :

• depuis les classes dérivée.


• depuis les classes du paquetage.

118

59
15/05/2023

Chapitre 3 : Héritage JAVA

Héritage : exemple

class B{ class D extends B {


private int a; int x;
protected int b; void f(){
int c; b = …;
public int d; }
} }
On peut alors représenter un objet de la classe D de la façon suivante :

119

Chapitre 3 : Héritage JAVA

Héritage
Une référence à une classe de base peut être affectée d’une référence à une classe dérivée,
l’inverse doit faire l’objet d’une opération de conversion de type ou cast :

• B b = new B();
• D d = new D();
• b = d; // OK
• d = b; // interdit
• d = (D) b ; // OK avec cast
Remarque : Cette dernière instruction peut lever une exception si le cast est impossible.

120

60
15/05/2023

Chapitre 3 : Héritage JAVA

Constructeurs et héritage
class X{ class Y extends X{
int x;
public X (int x){ this.x = x; } }
}

la classe Y étend la classe X qui possède un constructeur paramétré. Comme il n'y a pas de
constructeur par défaut (sans paramètres) défini dans la classe X, cela provoque une erreur
de compilation.

Pour résoudre ce problème, il faut soit


ajouter un constructeur par défaut à la
classe X, soit appeler explicitement le
constructeur paramétré de la classe X dans
le constructeur de la classe Y.

121

Chapitre 3 : Héritage JAVA

Opérateur instanceof
L’opérateur instanceof permet de savoir à quelle classe appartient une instance :

class B{ …}
class D extends B{…}
class C {…}
B b = new B();
D d = new D();
C c = new C();
b instanceof B
// true
b instanceof D
// false
d instanceof B
// true
d instanceof D
// true
c instanceof B
122
// erreur de compilation Erreur No. 365 : // impossible de comparer C avec B

61
15/05/2023

Chapitre 3 : Héritage JAVA

Opérateur instanceof
la méthode equals(Object o), pour une classe X, est définie, en général, de la façon suivante :

public boolean equals(Object o){


if(this==o) return true;
if(!(o instanceof X)) return false;
X x = (X)o;
...
}

123

Chapitre 3 : Héritage JAVA

Redéfinition des méthodes


En Java, la redéfinition de méthodes est une technique permettant à une classe dérivée (ou enfant) de
fournir une implémentation spécifique pour une méthode déjà définie dans sa classe parente.

Pour redéfinir une méthode, il suffit de déclarer une méthode avec la même signature (nom et
paramètres) que la méthode à redéfinir dans la classe enfant, avec la nouvelle implémentation
souhaitée.

L'annotation @Override est facultative mais recommandée, elle permet de signaler au compilateur qu'il s'agit bien
d'une redéfinition de méthode, ce qui permet de détecter des erreurs éventuelles si la signature de la méthode est
incorrecte.
124

62
15/05/2023

Chapitre 3 : Héritage JAVA

Redéfinition des méthodes


Il est important de noter que lors de l'exécution d'un programme, la méthode appelée
dépendra du type réel de l'objet sur lequel elle est appelée, et non du type de la variable qui
la référence. Par exemple :

125

Chapitre 3 : Héritage JAVA

Redéfinition des méthodes


Remarque
Ne pas confondre la redéfinition avec la surcharge :
• Redéfinition (ou override en anglais) : même type de retour et mêmes paramètres.
• Surcharge (ou overload en anglais) : type de retour et paramètres différents, les
paramètres au moins doivent être différents.
Exemple de surcharge :

Les deux méthodes ont le même nom mais des signatures différentes, ce qui permet d'utiliser la
méthode appropriée en fonction des types de paramètres utilisés.
126

63
15/05/2023

Chapitre 3 : Héritage JAVA

Héritage : Classe abstraite


Une classe définie avec le modificateur abstract est une classe abstraite qui ne peut pas
produire d’instance.
• Sa définition peux contenir des méthodes abstraites.
• Une classe qui contient une méthode abstraite doit être abstraite.
• Une méthode abstraite est une méthode définie uniquement par son prototype.
• Le rôle des classes abstraites est la factorisation de fonctionnalités communes à
plusieurs classes dérivées.

127

Chapitre 3 : Héritage JAVA

Héritage : Exemple
Supposons que nous définissions la classe suivante :

128

64
15/05/2023

Chapitre 3 : Héritage JAVA

Héritage : Exemple
Un chef «est un» employé qui a une prime en plus du salaire :

La méthode getSalaire pourrait être (mieux ?) programmée de la façon suivante : cela


permettrait de changer les accès de nom et salaire en private.

129

Chapitre 3 : Héritage JAVA

Héritage : Exemple
Une entreprise est un tableau d’employés :

L’affichage des noms et salaires des différents employés se fera de la façon suivante :

130

65
15/05/2023

Chapitre 3 : Héritage JAVA

Héritage : Exemple
Le calcul de la somme des salaires des employés qui ne sont pas des chefs ?

131

Chapitre 3 : Héritage JAVA

Héritage multiple
Un diagramme d'héritage en diamant. En informatique, le problème du
diamant (ou problème du losange dans certains articles scientifiques) arrive principalement
en programmation orientée objet, lorsque le langage permet l'héritage multiple

Si une classe D hérite de deux classes B et C, elles-mêmes filles


d'une même classe A, se pose un problème de conflit lorsque
des fonctions ou des champs des classes B et C portent le
même nom. Le nom de ce problème provient de la forme du
schéma d'héritage des classes A, B, C et D dans ce cas.

132

66
15/05/2023

Chapitre 3 : Héritage JAVA

Héritage multiple : exemple


Par exemple, dans le cas d'une interface graphique, une classe Button pourrait hériter de
deux classes :
• Rectangle (gérant son apparence)
• Clickable (gérant les clics de souris)
et ces deux classes hériter d'une classe Object.

Si la classe Object définit la fonction equals (gérant la comparaison entre objets), que les
deux sous-classes Rectangle et Clickable étendent cette fonction pour l'adapter à leurs
particularités, laquelle des fonctions equals de Rectangle ou de Clickable la
classe Button doit-elle utiliser ?

Choisir arbitrairement une seule des deux fonctions ferait


perdre l'intérêt de l'héritage

133

Chapitre 3 : Héritage JAVA

Héritage : Interface
Java n’autorise que l’héritage simple. Une classe ne peut avoir qu’une seule superclasse. Une
certaine forme d’héritage multiple est obtenue grâce à la notion d’interface.

Une interface définit uniquement des constantes et des prototypes de méthodes.

134

67
15/05/2023

Chapitre 3 : Héritage JAVA

Héritage : Votre première interface

Pour définir une interface, au lieu d'écrire :


public class A{ }
… il vous suffit de faire :
public interface I{ }

vous venez d'apprendre à déclarer une interface. Vu qu'une interface est une classe 100 % abstraite, il
ne vous reste qu'à y ajouter des méthodes abstraites, mais sans le mot clé abstract

135

Chapitre 3 : Héritage JAVA

Héritage : Votre première interface

public interface I{ public interface I2{


public void A(); public void C();
public String B(); public String D();
} }

Et pour faire en sorte qu'une classe utilise une interface, il suffit d'utiliser le mot clé implements. Ce
qui nous donnerait :

public class X implements I {


public void A(){
//…
} la classe X implémente
public String B(){ l'interface I.
//…
}
}

136

68
15/05/2023

Chapitre 3 : Héritage JAVA

Héritage : Votre première interface


vous pouvez implémenter plusieurs interfaces; ci-dessous un exemple:

public class X implements I, I2{


public void A(){
//…
}
public String B(){
//…
}
public void C(){
//…
}
public String D(){
//…
}
}

137

Chapitre 3 : Héritage JAVA

Héritage : Votre première interface


Par contre, lorsque vous implémentez une interface, vous devez obligatoirement redéfinir
les méthodes de l'interface ! Ainsi, le polymorphisme vous permet de faire ceci :

public static void main(String[] args){


// Avec cette référence, vous pouvez utiliser les méthodes de l'interface I
I var = new X();
//Avec cette référence, vous pouvez utiliser les méthodes de l'interface I2
I2 var2 = new X();
var.A();
var2.C();
}

138

69
15/05/2023

Chapitre 3 : Héritage JAVA

Héritage : Interface

Java 8 : du neuf dans les interfaces !


En Java 7 et antérieur, une méthode déclarée dans une interface ne fournit pas
d'implémentation. Ce n'est qu'une signature, un contrat auquel chaque classe dérivée doit se
conformer en fournissant une implémentation propre.
Mais il arrive que plusieurs classes similaires souhaitent partager une même implémentation
de l'interface.
Java 8 propose d’ajouter deux éléments supplémentaires dans une interfaces : des méthodes
statiques et des méthodes par défaut.

139

Chapitre 3 : Héritage JAVA

Héritage : Interface
La syntaxe est simple et sans surprises : il suffit de fournir un corps à la méthode, et de la
qualifier avec le mot-clé default .

Les classes filles sont alors libérées de l'obligation de fournir elles-mêmes une
implémentation à cette méthode - en cas d'absence d'implémentation spécifique, c'est celle
par défaut qui est utilisée.

140

70
15/05/2023

Chapitre 3 : Héritage JAVA

Héritage : Interface

Exercice
Certain animaux peuvent crier, d’autres sont muets. On représentera le fait de crier au
moyen d’une méthode affichant à l’écran le cri de l’animal.
▪ écrire une interface contenant la méthode permettant de crier.

▪ écrire les classes des chats, des chiens et des lapins (qui sont muets)

▪ écrire un programme avec un tableau pour les animaux qui savent crier, le remplir
avec des chiens et des chats, puis faire crier tous ces animaux. Décrire ce qui s’affiche
à l’écran à l’exécution de ce programme.

141

Chapitre 3 : Héritage JAVA

Héritage : Interface

142

71
15/05/2023

Plan de cours

❑ Chapitre 1 : Présentation du langage JAVA


❑ Chapitre 2 : Classes JAVA
❑ Chapitre 3 : Héritage
❑ Chapitre 4 : Exceptions
❑ Chapitre 5 : Interfaces graphiques (Swing)
❑ Chapitre 6 : JDBC

143

Chapitre 4 : Exceptions JAVA

Exceptions
▪ Mécanisme permettant de traiter les comportements exceptionnels.
▪ Constituent un moyen fiable et pratique d’effectuer un contrôle des erreurs rigoureux sans
alourdir le code.
▪ La notion d’erreur fait partie intégrante de la fonction

En Java, la fonction peut lancer une exception en indiquant un type d’exception.


• L’exception se "propage" de retour de méthode en retour de méthode jusqu’à ce
qu’une méthode la traite.
• Si aucune méthode ne la prend en compte, il y a un message d’erreur d’exécution.
• Suite à une exception, toutes les instructions sont ignorées, sauf les instructions
chargées de capter cette exception.

144

72
15/05/2023

Chapitre 4 : Exceptions JAVA

Les exceptions de type RunTimeException


L’exécution du programme suivant provoque un message d’erreur indiquant une exception du
type ArrayIndexOutOfBoundsException, et l’arrêt du programme. Le tableau de 4 entiers
tabEnt a des indices de 0 à 3. L’accès à la valeur d’indice 5 provoque une exception non
captée.

145

Chapitre 4 : Exceptions JAVA

Les exceptions de type RunTimeException


Dans le programme suivant, la même erreur d’accès à un élément est captée par le
programme. Lors de la rencontre de l’erreur, les instructions en cours sont abandonnées et un
bloc de traitement (catch) de l’exception est recherché et exécuté. Le traitement se poursuit
après ce bloc sauf indication contraire du catch (return ou arrêt par exemple). Le message
"Fin du main" est écrit après interception de l’exception.

Exemples de résultats d’exécution :

146

73
15/05/2023

Chapitre 4 : Exceptions JAVA

Exemple2 : les débordements de tableaux (dans une méthode)


l’instruction tabEnt[4] provoque
une exception dans la méthode
initTableau(). L’instruction qui suit
n’est pas prise en compte ;
l’exception n’est pas traitée dans
initTableau(). Les instructions qui
suivent l’appel de initTableau() dans
main() (le programme appelant) sont
ignorées également. Par contre, il
existe un bloc catch qui traite
l’exception. Le message "Fin de
main" est lui pris en compte après
le traitement de l’exception.
Exception :
java.lang.ArrayIndexOutOfBoundsException
Fin de main

147

Chapitre 4 : Exceptions JAVA

Exemple2 : les débordements de tableaux (dans une méthode)


L’exception peut aussi être traitée dans initTableau() comme indiqué ci-dessous. Le
programme se poursuit normalement une fois le bloc catch exécuté (retour de initTableau(),
appel de ecrireTableau() et message de fin).

148

74
15/05/2023

Chapitre 4 : Exceptions JAVA

Autres exemples d’exceptions de type RunTimeException


L’instructions suivante provoque une exception de type NullPointerException. s1 est une
référence null sur un (futur) objet de type String. On ne peut pas accéder au troisième caractère
de l’objet String référencé par null, d’où l’exception.
Le programme suivant
donne des exemples où une
exception est lancée : chaîne
à convertir en entier ne
contenant pas un entier
(lecture erronée d’un entier
par exemple), division par
zéro, transtypage non
cohérent de deux objets de
classes différentes, essai
d’ouverture d’un fichier
n’existant pas

149

Chapitre 4 : Exceptions JAVA

La définition et le lancement d’exception


Afin de définir une nouvelle sorte d’exception, on crée une nouvelle classe en utilisant une
déclaration de la forme suivante :

la déclaration suivante définit bien une nouvelle classe d’exception PasDefini :

Sachant que Error est prédéfinie en Java

150

75
15/05/2023

Chapitre 4 : Exceptions JAVA

La définition et le lancement d’exception


Il existe de nombreuses classes d’exceptions prédéfinies en Java, que l’on peut classer en trois
Catégories :
• Celles définies en étendant la classe Error : elles représentent des erreurs critiques qui ne
sont pas censée être gérées en temps normal. Par exemple, une exception de type
OutOfMemoryError est lancée lorsqu’il n’y a plus de mémoire disponible dans le système.
• Celles définies en étendant la classe Exception : elles représentent les erreurs qui doivent
normalement être gérées par le programme. Par exemple, une exception de type
IOException est lancée en cas d’erreur lors de la lecture d’un fichier
• Celles définies en étendant la classe RuntimeException : elles représente des erreurs
pouvant éventuellement être gérée par le programme. L’exemple typique de ce genre
d’exception est NullPointerException, qui est lancée si l’on tente d’accéder au contenu
d’un tableau ou d’un objet qui vaut null.

151

Chapitre 4 : Exceptions JAVA

Lancer une exception


En Java, il est possible de lancer une exception à l'aide du mot-clé throw. Voici les étapes pour
lancer une exception :
Créez une instance de l'exception que vous souhaitez lancer. Vous pouvez utiliser l'un des
types d'exceptions existants de Java ou créer une nouvelle classe d'exception personnalisée en
héritant de la classe Exception.

Par exemple, si vous souhaitez lancer une exception de type NullPointerException, vous
pouvez créer une instance de cette exception comme ceci :

NullPointerException ex = new NullPointerException();

Utilisez le mot-clé throw suivi de l'instance de l'exception pour lancer l'exception.


Par exemple, pour lancer une exception de type NullPointerException :

throw new NullPointerException();

152

76
15/05/2023

Chapitre 4 : Exceptions JAVA

Lancer une exception


vous pouvez également ajouter un message d'erreur à l'exception en passant une chaîne de
caractères au constructeur de l'exception.

Par exemple, pour lancer une exception NullPointerException avec un message d'erreur
personnalisé :

throw new NullPointerException("La variable n'est pas initialisée");

Lancer une exception peut être utile pour signaler


• une erreur dans le programme,
• un paramètre invalide
• une opération arithmétique interdite
• une condition de validation qui n'est pas respectée.

153

Chapitre 4 : Exceptions JAVA

Les clauses "throws" et "throw"


En Java, il existe deux mots-clés similaires mais distincts : throws et throw. Ils sont utilisés
pour gérer les exceptions dans les méthodes.

La clause throws est utilisée dans la signature de la méthode pour indiquer que la méthode
peut potentiellement lancer une exception et la propager à l'appelant. Par exemple :

public void maMethode() throws IOException {


// Le code de la méthode qui peut potentiellement lancer une IOException
}

Dans cet exemple, la méthode maMethode peut potentiellement lancer une exception
de type IOException

154

77
15/05/2023

Chapitre 4 : Exceptions JAVA

Les clauses "throws" et "throw"


La clause throw, quant à elle, est utilisée pour lancer une exception manuellement à partir du
corps de la méthode. Elle permet de déclencher une exception à un moment donné dans le
code en créant une instance d'une classe d'exception et en la lançant.
Par exemple :

public void maMethode() throws IOException {


if (someCondition) {
throw new IOException("Erreur d'entrée/sortie !");
}
}

155

Chapitre 4 : Exceptions JAVA

Personnaliser les exceptions

En Java, il est possible de personnaliser les exceptions en créant une nouvelle classe
d'exception personnalisée.

Pour créer une nouvelle classe d'exception personnalisée, vous pouvez étendre la classe
Exception ou l'une de ses sous-classes (par exemple, RuntimeException ou IOException) et
définir les propriétés et les méthodes spécifiques à votre exception. c un exemple de création
d'une exception personnalisée :

156

78
15/05/2023

Chapitre 4 : Exceptions JAVA

157

Chapitre 4 : Exceptions JAVA

Personnaliser les exceptions


Exercice
Écrivez une classe Produit qui représente un produit vendu dans un magasin. La classe doit
avoir un attribut prix de type double. Écrivez une méthode setPrix qui prend en entrée un prix
et l'assigne à l'attribut prix. Si le prix est négatif, cette méthode doit lever une exception de type
PrixNegatifException.

158

79
15/05/2023

Chapitre 4 : Exceptions JAVA

Personnaliser les exceptions

159

Chapitre 4 : Exceptions JAVA

Personnaliser les exceptions


Exercice
La classe "Personne" est créée pour représenter une personne avec des propriétés telles que
le nom, le prénom, le numéro de téléphone et l'adresse e-mail. Deux classes "Enseignant" et
"Etudiant " héritent de "Personne", qui ont des propriétés spécifiques comme les matières
enseignées ou étudiées. Pour gérer l'affichage de ces objets, une interface "Affichable" est créée
avec une méthode "afficher()". La classe "Personne" implémente cette interface et fournit une
méthode "afficher()" qui affiche les informations de la personne. Afin de gérer les erreurs
lors de la création de ces objets, une exception "PersonneInvalideException" est créée
pour signaler les informations invalides. Les constructeurs des classes "Enseignant" et
"Etudiant" sont modifiés pour vérifier les informations entrées et lever une
"PersonneInvalideException" si l'une des informations est manquante ou invalide.

160

80
15/05/2023

Chapitre 4 : Exceptions JAVA

Personnaliser les exceptions

161

Plan de cours

❑ Chapitre 1 : Présentation du langage JAVA


❑ Chapitre 2 : Classes JAVA
❑ Chapitre 3 : Héritage
❑ Chapitre 4 : Exceptions
❑ Chapitre 5 : Interfaces graphiques (Swing)
❑ Chapitre 6 : JDBC

162

81
15/05/2023

Chapitre 5 : Interfaces graphiques (Swing)

Introduction à la programmation d'interfaces graphiques


les principaux concepts de la programmation d'interfaces graphiques :

• Composants graphiques : ce sont les éléments de base d'une interface utilisateur tels
que des boutons, des boîtes de dialogue, des barres de défilement, des menus, des
tableaux, des arbres, des onglets et bien d'autres. Ils sont utilisés pour créer
l'apparence de l'interface utilisateur.
• Gestionnaire de mise en page : c'est un mécanisme utilisé pour organiser les
composants graphiques dans une fenêtre ou un panneau. Il permet de définir la
position et la taille de chaque composant, ainsi que leur alignement et leur
espacement.
• Événements : ce sont des actions déclenchées par l'utilisateur, telles que cliquer sur
un bouton ou saisir du texte dans une zone de texte. Les événements sont gérés par le
code pour déclencher des réactions spécifiques dans l'interface utilisateur.

163

Chapitre 5 : Interfaces graphiques (Swing)

Introduction à la programmation d'interfaces graphiques


La programmation d'interfaces graphiques consiste à créer des applications avec des
interfaces utilisateur visuelles, telles que des fenêtres, des boutons, des menus, des zones
de texte, etc. Elle est couramment utilisée pour les applications de bureau, les jeux vidéo,
les applications mobiles et les sites web interactifs.

164

82
15/05/2023

Chapitre 5 : Interfaces graphiques (Swing)

Introduction à la programmation d'interfaces graphiques


les principaux concepts de la programmation d'interfaces graphiques

• Modèle-Vue-Contrôleur (MVC) : c'est un design pattern couramment utilisé en


programmation d'interfaces graphiques. Il sépare les données de l'interface utilisateur
(le modèle) de leur présentation (la vue) et de la logique de contrôle (le contrôleur).
Cette séparation facilite la maintenance et l'évolutivité du code.
• Rendu personnalisé : c'est un moyen d'ajouter des effets visuels spécifiques aux
composants graphiques en modifiant leur apparence, leur comportement ou leur
interaction avec l'utilisateur.
• Internationalisation : c'est un mécanisme qui permet de rendre une application
utilisable dans différentes langues et cultures. Les composants graphiques peuvent
être configurés pour afficher du texte dans différentes langues, et les éléments de
l'interface utilisateur peuvent être adaptés aux conventions culturelles locales.

165

Chapitre 5 : Interfaces graphiques (Swing)

Introduction à la programmation d'interfaces graphiques


Il existe plusieurs bibliothèques graphiques pour la programmation d'interfaces utilisateur en
Java, voici les principales :

Swing : bibliothèque graphique couramment utilisée pour la programmation d'interfaces


utilisateur en Java. Elle fournit des composants graphiques personnalisables, une gestion avancée
des événements et une haute performance. Elle est entièrement écrite en Java et est compatible
avec toutes les plates-formes Java.
AWT : première bibliothèque graphique de Java, introduite en 1995. Elle fournit des composants
graphiques natifs de la plate-forme sous-jacente, ce qui signifie qu'elle utilise les éléments
graphiques fournis par le système d'exploitation.
JavaFX : bibliothèque graphique plus récente pour Java, introduite en 2008. Elle fournit une prise
en charge complète des graphiques vectoriels, des animations, des transitions, des effets, des
styles et des feuilles de style CSS. JavaFX est considéré comme plus moderne et riche en
fonctionnalités que Swing et AWT.
SWT : bibliothèque graphique alternative à AWT et Swing. Elle fournit des composants
graphiques natifs de la plate-forme sous-jacente, ce qui signifie qu'elle utilise les éléments
graphiques fournis par le système d'exploitation. SWT est utilisé par l'environnement de
développement Eclips

166

83
15/05/2023

Chapitre 5 : Interfaces graphiques (Swing)

Introduction à la programmation d'interfaces graphiques

En résumé, Swing est actuellement l'API la plus populaire pour la programmation


d'interfaces graphiques en Java. AWT est moins couramment utilisé en raison de
son manque de fonctionnalités avancées. JavaFX est plus riche en fonctionnalités
mais est encore relativement peu utilisé. SWT est principalement utilisé dans
l'environnement de développement Eclipse.

167

Chapitre 5 : Interfaces graphiques (Swing)

L’API Swing

❑ Java Swing est une bibliothèque graphique pour le développement d'interfaces


utilisateur en Java.
❑ Elle offre une large gamme de composants graphiques personnalisables.
❑ Elle est écrite en Java, donc portable sur toutes les plates-formes prenant en charge
Java.
❑ Elle peut être utilisée pour développer des applications de bureau en Java, y compris
des applications autonomes ou des applets Java qui s'exécutent dans un navigateur
Web.
❑ Elle est une des bibliothèques les plus populaires pour le développement
d'applications graphiques en Java.

168

84
15/05/2023

Chapitre 5 : Interfaces graphiques (Swing)

Architecture MVC
La conception des classes Swing s’appuie assez librement sur l’architecture MVC
(Modèle/Vue/Contrôleur).
Le patron modèle-vue-contrôleur (en abrégé MVC, de l'anglais model-view-controller), tout
comme les patrons modèle-vue-présentation ou Présentation, abstraction, contrôle, est un
modèle destiné à répondre aux besoins des applications interactives en séparant les
problématiques liées aux différents composants au sein de leur architecture respective.

Ce paradigme regroupe les fonctions nécessaires en trois catégories :


▪ un modèle (modèle de données) ;
▪ une vue (présentation, interface utilisateur) ;
▪ un contrôleur (logique de contrôle, gestion des événements, synchronisation).

169

Chapitre 5 : Interfaces graphiques (Swing)

Modèle
❑ Le modèle représente le cœur (algorithmique) de l'application : traitements des données,
interactions avec la base de données, etc.

❑ La base de données sera l'un de ses composants. Le modèle comporte des méthodes
standards pour mettre à jour ces données (insertion, suppression, changement de valeur). Il
offre aussi des méthodes pour récupérer ces données.

❑ Le modèle peut autoriser plusieurs vues partielles des données. Si par exemple le
programme manipule une base de données pour les emplois du temps, le modèle peut
avoir des méthodes pour avoir tous les cours d'une salle, tous les cours d'une personne ou
tous les cours d'un groupe de TD.

170

85
15/05/2023

Chapitre 5 : Interfaces graphiques (Swing)

Vue
Ce avec quoi l'utilisateur interagit se nomme précisément la vue.
❑ Sa première tâche est de présenter les résultats renvoyés par le modèle.
❑ Sa seconde tâche est de recevoir toute action de l'utilisateur (clic de souris, sélection
d'un bouton radio, entrée de texte, de mouvements, de voix, etc.). Ces différents
événements sont envoyés au contrôleur.
❑ La vue n'effectue pas de traitement, elle se contente d'afficher les résultats des
traitements effectués par le modèle et d'interagir avec l'utilisateur.

171

Chapitre 5 : Interfaces graphiques (Swing)

Contrôleur

❑ Le contrôleur prend en charge la gestion des événements de synchronisation pour mettre à


jour la vue ou le modèle et les synchroniser.
❑ Il reçoit tous les événements de la vue et déclenche les actions à effectuer.
❑ Si une action nécessite un changement des données, le contrôleur demande la
modification des données au modèle afin que les données affichées se mettent à jour.
❑ Le contrôleur n'effectue aucun traitement, ne modifie aucune donnée. Il analyse la requête
du client et se contente d'appeler le modèle adéquat et de renvoyer la vue correspondant à
la demande.

172

86
15/05/2023

Chapitre 5 : Interfaces graphiques (Swing)

Swing : composants
Les composants Swing sont des éléments graphiques de l'interface utilisateur qui sont
fournis par le package "javax.swing".

❑ JButton : un bouton que l'utilisateur peut cliquer pour effectuer une action.
❑ JLabel : un composant qui affiche du texte ou une image.
❑ JTextField : un champ de saisie de texte qui permet à l'utilisateur de saisir une ou
plusieurs lignes de texte.

173

Chapitre 5 : Interfaces graphiques (Swing)

Swing : composants
❑ JPasswordField : un champ de
saisie de texte pour les mots de
passe qui masque les caractères
saisis.
❑ JCheckBox : une case à cocher
qui permet à l'utilisateur de
sélectionner une ou plusieurs
options.
❑ JRadioButton : un bouton radio
qui permet à l'utilisateur de
sélectionner une option parmi
plusieurs.
❑ JComboBox : une liste déroulante
qui permet à l'utilisateur de
sélectionner une option à partir
d'une liste.
❑ JList : une liste qui affiche un
ensemble d'éléments, où
l'utilisateur peut sélectionner un
ou plusieurs éléments. 174

87
15/05/2023

Chapitre 5 : Interfaces graphiques (Swing)

Swing : composants
❑ JTable : un tableau qui affiche des données dans une grille avec des lignes et des
colonnes.
❑ JToolBar : une barre d'outils qui contient des boutons et d'autres composants pour
exécuter des actions fréquentes.

175

Chapitre 5 : Interfaces graphiques (Swing)

Swing : gestion des conteneurs


En Java, la gestion des conteneurs est une partie importante de la création d'interfaces
graphiques utilisateur.

❑ Les conteneurs sont des composants qui sont utilisés pour organiser d'autres
composants, tels que des boutons, des champs de texte, des images, etc., dans une
hiérarchie de conteneurs imbriqués.

❑ Les conteneurs sont eux-mêmes des composants et peuvent être ajoutés à d'autres
conteneurs pour créer des interfaces utilisateur plus complexes.

176

88
15/05/2023

Chapitre 5 : Interfaces graphiques (Swing)

Swing : JComponent
JComponent est une classe de base pour tous les composants Swing, fournissant des
fonctionnalités essentielles pour la gestion de l'apparence, du comportement et des
événements des composants Swing.

177

Chapitre 5 : Interfaces graphiques (Swing)

Swing : gestion des conteneurs


Swing fournit plusieurs types de conteneurs que vous pouvez utiliser pour organiser les
composants dans votre interface utilisateur. Voici des conteneurs Swing les plus
couramment utilisés :

❑ JFrame : un conteneur de haut niveau qui représente la fenêtre principale de votre


application.

178

89
15/05/2023

Chapitre 5 : Interfaces graphiques (Swing)

Swing : Jframe Visualisation des apparences


En Java Swing, le "look and feel" (apparence et comportement) est un ensemble de règles et
de conventions qui définissent l'apparence visuelle et l'interaction des composants de
l'interface utilisateur. Swing fournit plusieurs look and feel par défaut, tels que Metal,
Nimbus, Windows, et Mac. Chacun de ces look and feel a son propre ensemble de règles et
de conventions pour l'apparence et le comportement des composants d'interface utilisateur.

179

Chapitre 5 : Interfaces graphiques (Swing)

Swing : gestion des conteneurs


Swing fournit plusieurs types de conteneurs que vous pouvez utiliser pour organiser les
composants dans votre interface utilisateur. Voici des conteneurs Swing les plus
couramment utilisés :

❑ JPanel : un conteneur qui peut être utilisé pour organiser des composants dans une zone
spécifique de la fenêtre.

180

90
15/05/2023

Chapitre 5 : Interfaces graphiques (Swing)

Swing : gestion des conteneurs


Swing fournit plusieurs types de conteneurs que vous pouvez utiliser pour organiser les
composants dans votre interface utilisateur. Voici des conteneurs Swing les plus
couramment utilisés :

❑ JDialog : un conteneur qui représente une fenêtre de dialogue ou une boîte de dialogue.

181

Chapitre 5 : Interfaces graphiques (Swing)

Swing : gestion des conteneurs


Swing fournit plusieurs types de conteneurs que vous pouvez utiliser pour organiser les
composants dans votre interface utilisateur. Voici des conteneurs Swing les plus
couramment utilisés :

❑ JTabbedPane : un conteneur qui affiche plusieurs onglets, chacun contenant un


ensemble de composants.

182

91
15/05/2023

Chapitre 5 : Interfaces graphiques (Swing)

Swing : gestion des conteneurs


Swing fournit plusieurs types de conteneurs que vous pouvez utiliser pour organiser les
composants dans votre interface utilisateur. Voici des conteneurs Swing les plus
couramment utilisés :

❑ JScrollPane : un conteneur qui peut être utilisé pour afficher du contenu qui ne rentre
pas dans la zone d'affichage.

183

Chapitre 5 : Interfaces graphiques (Swing)

Swing : gestionnaire de disposition (Layout Manager )


Le Layout Manager est un concept clé en Java Swing, qui permet de gérer la disposition
des composants graphiques dans une interface utilisateur. Un gestionnaire de disposition
est une classe Java qui permet de définir la disposition et le positionnement des
composants graphiques dans un conteneur Swing, tel qu'un JPanel ou une JFrame.

184

92
15/05/2023

Chapitre 5 : Interfaces graphiques (Swing)

Swing : événements
Les composants Swing créent des événements, soit directement, soit par une action de
l'utilisateur sur le composant. Ces événements peuvent déclencher une action exécutée par
d'autre(s) composant(s).
▪ Un composant qui crée des événements est appelé source. Le composant source délègue le
traitement de l'événement au composant auditeur.
▪ Un composant qui traite un événement est appelé auditeur (listener)
Un composant auditeur doit s'inscrire auprès du composant source des événements qu'il veut
traiter.

185

Chapitre 5 : Interfaces graphiques (Swing)

Swing : événements
Hiérarchie : Schéma de la hiérarchie simplifiée des événements java

186

93
15/05/2023

Chapitre 5 : Interfaces graphiques (Swing)

Swing événements : classe ActionEvent


La classe ActionEvent contient plusieurs propriétés importantes qui fournissent des informations sur l'événement, telles
que le composant source de l'événement, l'heure à laquelle l'événement s'est produit et le type d'action qui a été déclenché.

Les composants sources de ActionEvent sont :


❑ Boutons : JButton, JRadioButton, JCheckBox, JToggleButton
❑ Menus : JMenuItem, JMenu, JRadioButtonMenuItem, JCheckBoxMenuItem
❑ Texte : JTextField

187

Chapitre 5 : Interfaces graphiques (Swing)

Swing événements : classe ActionEvent


la classe ComponentEvent sert toujours de classe de base pour les événements de composants tels que le
redimensionnement, le déplacement, la visibilité et l'activation des composants Swing (par exemple, JPanel,
JButton, JTextField, etc.). Pour gérer ces événements dans Swing, vous devez implémenter l'interface
ComponentListener et enregistrer l'écouteur auprès du composant Swing concerné.

Les composants sources de ActionEvent sont :

javax.swing.JPanel : Un conteneur léger pour contenir d'autres composants Swing.


javax.swing.JButton : Un bouton permettant de déclencher une action lorsqu'il est cliqué.
javax.swing.JTextField : Un champ de texte permettant à l'utilisateur de saisir du texte.
javax.swing.JLabel : Un composant permettant d'afficher du texte ou une image.
javax.swing.JComboBox : Une liste déroulante permettant à l'utilisateur de choisir une option parmi
plusieurs.

188

94
15/05/2023

Chapitre 5 : Interfaces graphiques (Swing)

Swing : événements
MouseEvent

Tous les composants


peuvent être sources de
MouseEvent . Lors d'un clic
les méthodes sont appelées
dans l'ordre suivant :
▪ mousePressed
▪ mouseReleased
▪ mouseClicked

189

Chapitre 5 : Interfaces graphiques (Swing)

Swing : événements
KeyEvent

Tous les composants peuvent être sources de KeyEvent

190

95
15/05/2023

Chapitre 5 : Interfaces graphiques (Swing)

Swing : événements
Adaptateur
Un adaptateur XxxAdapter est une classe abstraite qui fourni une implémentation de la classe
XxxListener. Les méthodes implémentées sont toutes vides, et ainsi permettent à un
utilisateur de l'adaptateur de ne redéfinir que le traitement qui l'intéresse.

Exemple : Un adaptateur qui ne redéfinit que KeyPressed et keyTyped :

191

Plan de cours

❑ Chapitre 1 : Présentation du langage JAVA


❑ Chapitre 2 : Classes JAVA
❑ Chapitre 3 : Héritage
❑ Chapitre 4 : Exceptions
❑ Chapitre 5 : Interfaces graphiques (Swing)
❑ Chapitre 6 : JDBC

192

96
15/05/2023

Chapitre 6 : JDBC

Plan

1. Introduction à JDBC
2. Connexion à une base de données
3. Requêtes SQL
4. Mises à jour de la base de données
5. Transactions

193

Chapitre 6 : JDBC

Introduction à JDBC
• JDBC (Java Database Connectivity) est une API standard de Java qui facilite l'accès et la
manipulation des bases de données relationnelles.
• Son objectif principal est de fournir aux développeurs un moyen uniforme et cohérent
d'interagir avec différentes bases de données en utilisant le langage Java.
• JDBC permet l'exécution de requêtes SQL pour récupérer, insérer, mettre à jour ou supprimer
des données dans une base de données.
• Il offre une architecture modulaire, comprenant des classes et des interfaces pour établir une
connexion à la base de données, créer des déclarations (statements), traiter les résultats et
gérer les transactions.
• JDBC est compatible avec une large gamme de bases de données relationnelles, ce qui permet
aux développeurs de créer des applications indépendantes de la base de données utilisée.
• Différents types de pilotes JDBC sont disponibles pour assurer la connectivité avec différents
systèmes de gestion de bases de données (SGBD), tels que les pilotes de type 1, 2, 3 et 4.
• L'utilisation de JDBC simplifie la gestion des connexions à la base de données, offre une
meilleure performance et facilite le développement d'applications robustes et évolutives.

194

97
15/05/2023

Chapitre 6 : JDBC

Rôle de JDBC dans le développement d'applications Java

• Accès aux bases de données : JDBC fournit aux développeurs Java les outils
nécessaires pour accéder et interagir avec les bases de données relationnelles. Il
offre une interface standardisée pour établir des connexions, exécuter des requêtes
SQL et effectuer des opérations de manipulation des données.
• Portabilité : JDBC offre une portabilité élevée, ce qui signifie que les applications
développées avec JDBC peuvent fonctionner avec différentes bases de données sans
nécessiter de modifications majeures du code. Cela permet aux développeurs de
créer des applications indépendantes du SGBD utilisé.
• Performance : En utilisant JDBC de manière appropriée, les développeurs peuvent
optimiser les performances des opérations sur les bases de données. L'utilisation de
requêtes préparées, de mises à jour en bloc et d'autres fonctionnalités de JDBC peut
améliorer l'efficacité et la vitesse des opérations de base de données.

195

Chapitre 6 : JDBC

Rôle de JDBC dans le développement d'applications Java

• Intégration avec d'autres technologies : JDBC peut être utilisé en conjonction avec
d'autres frameworks et technologies Java, tels que JSP (JavaServer Pages) et Servlets,
pour créer des applications Web dynamiques qui récupèrent et manipulent les
données de la base de données.
• Flexibilité : Grâce à JDBC, les développeurs ont le contrôle total sur les opérations de
base de données effectuées par leurs applications. Ils peuvent personnaliser et
optimiser les requêtes, gérer les transactions et manipuler les données selon leurs
besoins spécifiques.
• Évolutivité : JDBC offre la possibilité de développer des applications Java évolutives
en permettant l'accès à des fonctionnalités avancées telles que la gestion des
transactions, les requêtes préparées, la récupération des métadonnées de la base de
données, etc.

196

98
15/05/2023

Chapitre 6 : JDBC

Connexion à une base de données


Pour établir une connexion à une base de données en utilisant JDBC, plusieurs éléments sont nécessaires.

1) URL de la base de données : L'URL (Uniform Resource Locator) de la base de données


spécifie l'emplacement de la base de données à laquelle vous souhaitez vous connecter.
L'URL peut inclure des informations telles que le type de base de données, l'adresse IP, le
port et le nom de la base de données.
Exemple : jdbc:mysql://localhost:3306/ma_base_de_donnees

2) Nom d'utilisateur et mot de passe

String username = "mon_utilisateur";


String password = "mon_mot_de_passe";

3) Chargement du pilote JDBC : Avant d'établir une connexion, vous devez charger le pilote
JDBC approprié pour le SGBD spécifique que vous utilisez. Cela se fait généralement en
utilisant la méthode
Class.forName("nom_du_pilote")

Class.forName("com.mysql.cj.jdbc.Driver");
197

Chapitre 6 : JDBC

Connexion à une base de données


Pour établir une connexion à une base de données en utilisant JDBC, plusieurs éléments sont nécessaires.

4) Établissement de la connexion : Une fois que vous avez les informations nécessaires,
vous pouvez établir une connexion à la base de données en utilisant la classe Connection
de JDBC. L'appel à la méthode DriverManager.getConnection(url, username, password)
retourne un objet Connection représentant la connexion établie.

String url = "jdbc:mysql://localhost:3306/ma_base_de_donnees";


Connection connection = DriverManager.getConnection(url, username, password);

5) Fermeture de la connexion : Après avoir terminé d'utiliser la connexion, il est important


de la fermer pour libérer les ressources. Cela se fait en appelant la méthode close() sur
l'objet Connection.

connection.close();

198

99
15/05/2023

Chapitre 6 : JDBC

Requêtes SQL
Utilisation des objets Connection, Statement et ResultSet
L'objet Statement en JDBC est utilisé pour exécuter des requêtes SQL avec la méthode
executeQuery() et d'exécuter des instructions de mise à jour avec la méthode
executeUpdate().

L'objet ResultSet en JDBC est utilisé pour représenter les résultats d'une requête SQL
exécutée sur une base de données. Il permet de parcourir les lignes de résultats et d'accéder
aux données de chaque ligne. L'objet ResultSet est obtenu à partir d'un objet Statement ou
d'un objet PreparedStatement après l'exécution d'une requête SELECT à l'aide de la
méthode executeQuery().

199

Chapitre 6 : JDBC

Requêtes SQL
Utilisation des objets Connection, Statement et ResultSet

200

100
15/05/2023

Chapitre 6 : JDBC

Requêtes SQL
Utilisation des objets Connection, Statement et ResultSet
executeUpdate

201

Chapitre 6 : JDBC

Requêtes SQL
Utilisation de l’objets PreparedStatement
L'objet PreparedStatement en JDBC est utilisé pour exécuter des requêtes SQL paramétrées
de manière sécurisée. Il permet de préparer une requête SQL avec des paramètres marqués
à la place des valeurs réelles, ce qui facilite l'exécution répétée de la requête avec
différentes valeurs de paramètres sans avoir à recompiler la requête à chaque fois.

202

101
15/05/2023

Chapitre 6 : JDBC

Requêtes SQL
Utilisation de l’objets PreparedStatement

203

Chapitre 6 : JDBC

Transactions JDBC
Les transactions JDBC (Java Database Connectivity) sont une série d'actions qui sont
réalisées ensemble comme une seule unité de travail. Si toutes les actions réussissent, les
modifications sont validées dans la base de données. Si une action échoue, toutes les
modifications sont annulées et la base de données reste inchangée.

204

102
15/05/2023

Chapitre 6 : JDBC

Transactions JDBC
La gestion des transactions JDBC implique les étapes clés suivantes :
• Démarrer une Transaction : Vous démarrez une transaction en désactivant le mode
de validation automatique pour une connexion. En JDBC, une transaction est
automatiquement démarrée après que le mode de validation automatique a été
désactivé.
• Exécuter les Requêtes SQL : Une fois la transaction démarrée, vous pouvez exécuter
une ou plusieurs requêtes SQL. Ces requêtes peuvent être des opérations d'insertion,
de mise à jour, de suppression ou de sélection.
• Valider ou Annuler la Transaction : Après l'exécution des requêtes SQL, vous pouvez
décider de valider ou d'annuler la transaction. Si vous validez la transaction, toutes les
modifications effectuées pendant la transaction sont enregistrées de manière
permanente dans la base de données. Si vous annulez la transaction, toutes les
modifications effectuées pendant la transaction sont annulées.
• Réactiver le Mode de Validation Automatique : Une fois la transaction terminée
(validée ou annulée), vous pouvez réactiver le mode de validation automatique.

205

Chapitre 6 : JDBC

Transactions JDBC
Il est important de noter que la gestion des transactions est essentielle pour assurer
l'intégrité des données dans une base de données. Si plusieurs actions doivent être
exécutées ensemble comme une seule unité de travail, vous devez utiliser la gestion des
transactions pour vous assurer que toutes les actions sont effectuées avec succès ou que
toutes les actions sont annulées en cas d'échec de l'une d'entre elles.

206

103
15/05/2023

Chapitre 6 : JDBC

Transactions JDBC
Systèmes bancaires : Supposons qu'une transaction bancaire implique le transfert d'argent
d'un compte à un autre. Il s'agit de deux opérations distinctes : débiter un compte et
créditer un autre. Ces deux opérations doivent être effectuées ensemble. Si l'une d'elles
échoue, l'autre doit également être annulée pour maintenir l'intégrité des données.

207

Chapitre 6 : JDBC

Transactions JDBC
Systèmes de réservation : Dans un système de réservation de billets de cinéma ou de vol,
une transaction pourrait impliquer la sélection d'un siège, la mise à jour de la disponibilité
du siège et le paiement du billet. Ces opérations doivent être effectuées ensemble comme
une seule transaction.

208

104
15/05/2023

Chapitre 6 : JDBC

Transactions JDBC

209

Chapitre 6 : JDBC

Transactions JDBC

Le terme "rollback" dans le contexte des transactions de base de données fait référence à
l'opération qui annule toutes les modifications qui ont été effectuées pendant une
transaction.

210

105

Vous aimerez peut-être aussi