Software">
[Go to site: main page, start]

0% ont trouvé ce document utile (0 vote)
7 vues115 pages

Qualité et Avantages de la POO en Java

Le document présente les principes de la programmation orientée objet (POO) et son importance pour la qualité des logiciels, en abordant des concepts tels que l'encapsulation, l'héritage et le polymorphisme. Il décrit également le langage Java, son histoire, ses caractéristiques, ainsi que les outils nécessaires pour le développement. Enfin, il aborde les structures fondamentales du langage Java, y compris les types primitifs et les enveloppeurs.

Transféré par

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

Qualité et Avantages de la POO en Java

Le document présente les principes de la programmation orientée objet (POO) et son importance pour la qualité des logiciels, en abordant des concepts tels que l'encapsulation, l'héritage et le polymorphisme. Il décrit également le langage Java, son histoire, ses caractéristiques, ainsi que les outils nécessaires pour le développement. Enfin, il aborde les structures fondamentales du langage Java, y compris les types primitifs et les enveloppeurs.

Transféré par

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

Programmation Orienté Objet

Professeur: MOHAMED HAMLICH

[Link]@[Link]
Introduction

Développement Orienté Objet


Rappels :Qualité d’un Logiciel
◼ La qualité d’un logiciel se mesure par rapport à
plusieurs critères :
❑ Répondre aux spécifications fonctionnelles :
◼ Une application est créée pour répondre , tout d’abord, aux besoins
fonctionnels des entreprises.
❑ Les performances:
◼ La rapidité d’exécution et Le temps de réponse
◼ Doit être bâtie sur une architecture robuste.
◼ Eviter le problème de montée en charge
❑ La maintenance:
◼ Une application doit évoluer dans le temps.
◼ Doit être fermée à la modification et ouverte à l’extension
◼ Une application qui n’évolue pas meurt.
◼ Une application mal conçue est difficile à maintenir, par suite
elle finit un jour à la poubelle.
3

Développement Orienté Objet


Qualité d’un Logiciel

◼ La qualité d’un logiciel se mesure par rapport à plusieurs


critères : (Suite)
❑ Sécurité
◼ Garantir l’intégrité et la sécurité des données
❑ Portabilité
◼ Doit être capable de s’exécuter dans différentes plateformes.
❑ Capacité de communiquer avec d’autres applications distantes.
❑ Disponibilité et tolérance aux pannes
❑ Capacité de fournir le service à différents type de clients :
❑ Design des ses interfaces graphiques
❑ Coût du logiciel

Développement Orienté Objet


Motivation Pour le développement
orienté objet
❖ Code spaghetti (manque de structure)
❖ Faible réutilisabilité
❖ Couplage fort
❖ Faible cohésion
❖ Manque d’abstraction
❖ Difficultés d’évolution et de maintenance
❖ Problèmes de lisibilité et compréhension

Développement Orienté Objet 5


Apports de la POO
Problème de qualité Conséquence sans POO Solution apportée par la POO
Encapsulation : chaque objet a ses
Code spaghetti (absence de Code mélange tout, dépendances entre
données et méthodes → frontières
structure claire) fonctions, difficile à lire et maintenir.
claires.
Classes et héritage : réutiliser des
Les fonctions sont écrites pour un cas précis,
Faible réutilisabilité comportements existants, factoriser le
difficile de les utiliser ailleurs.
code.
Interfaces / abstractions : séparer le
Couplage fort (modules trop Une modification casse plusieurs parties du
“quoi” du “comment”, modules
dépendants) programme.
indépendants.

Faible cohésion (modules font Une fonction ou un module s’occupe de Responsabilité unique : une classe =
trop de choses) tâches hétérogènes → difficile à tester. un rôle précis (SRP).

On raisonne en termes techniques (fonctions, Objets métier : Client, Facture, Produit


Manque d’abstraction
tableaux) et non métier. → code reflète la réalité.
Polymorphisme : nouveaux
Ajouter une fonctionnalité casse souvent
Difficulté d’évolution comportements sans toucher à l’ancien
l’existant.
code.
Relations entre classes (association,
Lisibilité et compréhension Les relations métier (Client–Commande) ne
composition, héritage) explicitent la
faibles sont pas visibles dans le code procédural.
logique métier.

Développement Orienté Objet 6


Programmation Orientée
Objet Java

Développement Orienté Objet


Programme
◼ Java?
◼ Programmation orientée Objet Java
❑ Objet et Classe
❑ Héritage et accessibilité
❑ Polymorphisme
❑ Encapsulation et interfaces
◼ Collections et API
◼ Exceptions et Entrées Sorties
◼ Interfaces graphiques

Développement Orienté Objet


Contexte et histoire de Java

• Naissance (1991–1995) : projet Oak chez Sun Microsystems,


conduit par James Gosling. Objectif initial : programmation
d’appareils électroniques embarqués.
• 1995 : rebaptisé Java, avec slogan “Write Once, Run
Anywhere” (WORA) → portabilité grâce à la JVM.
• 2006 : ouverture en open source → OpenJDK.
• 2010 : Oracle rachète Sun → devient le principal distributeur.
• Aujourd’hui : versions modernes (Java 17 LTS, Java 21 LTS).

Développement Orienté Objet 9


Qu’est ce que java?

◼ Langage de programmation orienté objet (Classe, Objet,


Héritage, Encapsulation et Polymorphisme)
◼ Avec java on peut créer des application
multiplateformes. Les applications java sont portables.
C’est-à-dire, on peut créer une application java dans une
plateforme donnée et on peut l’exécuter sur n’importe
quelle autre plateforme.
◼ Le principe de java est : Write Once Run Every Where
◼ Open source: On peut récupérer le code source de java.
Ce qui permet aux développeurs, en cas de besoin, de
développer ou modifier des fonctionnalités de java.

1
0

Développement Orienté Objet


Qu’est ce que java?

◼ Java est utilisé pour créer :


➢ Applications Desktop (bureautique, outils
graphiques)
➢ Applications Web et Entreprise avec Jakarta
EE (ex-Java EE)
➢ Applications Android via l’Android SDK
(Java / Kotlin)
➢ Applications embarquées avec Java Card
(cartes SIM, cartes bancaires)
➢ Applications Cloud et Microservices (Spring
Boot, Quarkus, Micronaut…)
◼ Kit de développement nécessaire :
➢ JDK (Java Development Kit)Contient :
compilateur (javac), JVM, bibliothèques
standard et outils (jar, javadoc, jshell).
➢ Indispensable pour compiler et exécuter des 1
1
programmes Java.
Développement Orienté Objet
Différents modes de compilation
Java est un langage compilé et interprété
▪ Compilation en mode natif
▪ Compilation Byte Code
▪ Compilation en mode JIT(Just In Time)

Natif Byte Code JIT

Code source Code source Code source

Compilation Compilation Compilation

Langage Machine Byte Code Byte Code

Edition de lien Interprétation par Interprétation par


La JVM en mode byte code La JVM en mode JIT
(Traduit en code machine (Traduit tout le programme
[Link] machine puis
et exécute instruction par Byte Code en programme
l’exécute )
instruction) 12

Développement Orienté Objet


Différence entre Bytecode et JIT

•Bytecode (interprétation)
•javac → produit un fichier .class (Bytecode).
•La JVM exécute les instructions une par une.
• Très portable (Write Once, Run Anywhere).
• Plus lent (traduction instruction par
instruction).

•JIT (Just-In-Time Compilation)


•La JVM compile pendant l’exécution les méthodes les
plus utilisées en code natif.
• Combine portabilité et rapidité proche du natif.
• Améliore les performances après un “échauffement”.
1
Développement Orienté Objet
3
Installation de Java
• Télécharger le JDK (Java Development Kit) :
• Oracle JDK
• Installer normalement (Windows, Mac, Linux).
• Sur Windows : l’installeur configure automatiquement le PATH.
• Vérifier l’installation dans le terminal
• Plus besoin de configurer [Link] ou d’installer JRE
séparément.

1
Développement Orienté Objet
4
Ce que contient le JDK
❑ JDK = Java Development Kit
C’est le kit de développement officiel qui permet de programmer en Java.
❑ Il contient :
➢ Le compilateur (javac) → transforme ton code .java en bytecode .class.
➢ La JVM (Java Virtual Machine) → exécute le bytecode.
➢ Le JRE (Java Runtime Environment) → bibliothèques et classes
nécessaires à l’exécution des programmes.
➢ Des outils : javadoc, jar, jshell, débogueur, etc.

15
Développement Orienté Objet
Outils de développement java
❑ Éditeurs de texte simples
• On peut écrire du Java avec n’importe
quel éditeur (Notepad++, Sublime Text,
Vim…).
• Mais il est recommandé d’utiliser un IDE
ou un éditeur moderne qui facilite le
développement.
❑ Visual Studio Code (VS Code)
Léger, gratuit, multiplateforme.
Extensions recommandées :
• Extension Pack for Java (compilation, exécution,
débogage).
❑ IntelliJ IDEA (JetBrains)
• Version Community (gratuite) ou Ultimate
(professionnelle).
• Très utilisé en entreprise. 1
❑ VS code & NetBeans 6
• Toujours présents dans l’éducation et certains
projets.
Développement Orienté Objet
Premier programme java

Remarques:
◼ Le nom du fichier java doit être le même que celui de la classe
qui contient la fonction principale main.
◼ Pour compiler le programme source, il faut faire appel au
programme [Link] qui se trouve dans le dossier bin.
◼ Après compilation du programme [Link], il y a
génération du fichier [Link] qui représente le
ByteCode de programme.
◼ Pour exécuter ce programme en byte code, il faut faire appel au
programme [Link] qui représente l interpréter du bytecode.

1
7

Développement Orienté Objet


Premier programme java
public class PremierProgramme {
public static void main(String[] args) {
[Link]("Bonjour, le JDK 25
fonctionne !");
}
}
◼ Lancer un éditeur de text et Ecrire le code source de ce programme.
◼ Enregistrer ce fichier dans un nouveau répertoire sous le nom
[Link]
◼ Compiler ce programme sur ligne de commande Dos :
◼ Corriger les Erreurs de compilation
◼ Exécuter le programme sur ligne de commande

18

1
Développement Orienté Objet
8
Structures fondamentales
du langage java

1
9

Développement Orienté Objet


Structure du langage java

◼ Au niveau syntaxe, Java est un langage de


programmation qui ressemble beaucoup au langage
c++
◼ Toute fois quelques simplifications ont été
apportées à java pour des raisons de sécurité et
d’optimisation.
◼ Dans cette partie nous ferons une présentation
succincte des types primitifs, les enveloppeurs,
déclarations des variables, le casting des primitives,
les opérateurs arithmétiques et logiques, les
structures de contrôle (if, swich, for et while) 2
0

Développement Orienté Objet


Les primitives

Java dispose des primitives suivantes :


Primitive Étendue Taille

char 0 à 65 535 16 bits


byte -128 à +127 8 bits
short -32 768 à +32 767 16 bits
int -2 147 483 648 à + 2 147 483 647 32 bits
long 64 bits
float de ± 1.4E-45 à ± 3.40282347E38 32 bits
double 64 bits
boolean true ou false 1 bit
void - 0 bit

2
1

Développement Orienté Objet


Utilisation des primitives
◼ Les primitives sont utilisées de façon très simple. Elles
doivent être déclarées, tout comme les handles d'objets,
avec une syntaxe similaire, par exemple :
❑ int i;
❑ char c;

❑ boolean fini;

◼ Les primitives peuvent être initialisées en même temps que


la déclaration.
❑ int i = 12;
❑ char c = 'a';
❑ boolean fini = true;
2
2

Développement Orienté Objet


Utilisation des primitives
◼ Comment choisir le nom d’une variable:
❑ Pour respecter la typologie de java, les nom des
variables commencent toujours par un caractère en
minuscule et pour indiquer un séparateur de mots,on
utilise les majuscules. Exemples:
❑ int nbPersonnes;
❑ String nomPersonne;
◼ Valeurs par défaut des primitives:
❑ Toutes les primitives de type numérique utilisées
comme membres d'un objet sont initialisées à la
valeur 0. Le type boolean est initialisé à la valeur
false.

2
3

Développement Orienté Objet


Casting des primitives

◼ Le casting des primitives


❑ Le casting (mot anglais qui signifie moulage),
également appelé cast ou, parfois, transtypage,
consiste à effectuer une conversion d'un type vers
un autre type.
❑ Le casting peut être effectué dans deux conditions
différentes
◼ Vers un type plus général. On parle alors de sur-casting ou
de sur-typage.
◼ Vers un type plus particulier. On parle alors de sous-
casting ou de sous-typage.

2
4

Développement Orienté Objet


Casting des primitives

◼ Sur-casting : Le sur-casting peut se faire


implicitement ou explicitement.
❑ Exemples :
◼ int a=6; // le type int est codé sur 32 bits
◼ long b; // le type long est codé sur 64 bits
❑ Casting implicite :
▪ b=a;
❑ Casting explicite
▪ b=(long)a;
◼ Sous-Casting : Le sous-casting ne peut
se faire qu’explicitement.
1: float a = (float)5.5;
2 : double c = (double)a;
4 : int d = 8;
5 : byte f = (byte)d;
2
5

Développement Orienté Objet


Les enveloppeurs (wearpers)
Les primitives sont enveloppées dans des objets appelés
enveloppeurs (Wearpers ). Les enveloppeurs sont des classe
Classe Primitive
Character char
Byte byte
Short short
Integer int
Long long
Float float
Double double
Boolean boolean

2
6

Développement Orienté Objet


Utilisation des primitives et enveloppeurs
◼ Exemple:
❑ double v1=5.5; // v1 est une primitive
❑ Double v2=new Double(5.6); // v2 est un objet
❑ long a=5; // a est une primitive
❑ Long b=new Long(5); // b est un objet
❑ Long c= 5L; // c est un objet
❑ [Link]("a="+a);
❑ [Link]("b="+[Link]());
❑ [Link]("c="+[Link]());
❑ [Link]("V1="+v1);
❑ [Link]("V2="+[Link]());
◼ Résultat:
❑ a=5
❑ b=5
❑ c=5
❑ V1=5.5
❑ V2=5

2
7

Développement Orienté Objet


Opérateurs
◼ Opérateur d ’affectation:
• x=3; // x reçoit 3
• x=y=z=w+5; // z reçoit w+5, y reçoit z et x reçoit y
◼ Les opérateurs arithmétiques à deux opérandes:
• + : addition
• - : soustraction
• * : multiplication
• / : division
• % : modulo (reste de la division euclidienne)

2
8

Développement Orienté Objet


Opérateurs
◼ Les opérateurs arithmétiques à deux opérandes
(Les raccourcis)
x = x + 4; ou x+=4;
z = z * y; ou Z*=y;
v = v % w; ou v%=w;
◼ Les opérateurs relationnels:
• == : équivalent
• < : plus petit que
• > : plus grand que
• <= : plus petit ou égal
• >= : plus grand ou égal
• != : non équivalent
◼ Les opérateurs d’incrémentations et de
décrémentation:
❑ ++ : Pour incrémenter (i++ ou ++i)
❑ -- : Pour décrémenter (i–- ou --i)

2
9

Développement Orienté Objet


Opérateurs
◼ Les opérateurs logiques
❑ && Et (deux opérandes)
❑ || Ou (deux opérandes )
❑ ! Non (un seul opérande)
◼ L'opérateur à trois opérandes ?:
❑ condition ? expression_si_vrai : expression_si_faux
❑ exemple : x = (y < 5) ? 4 * y : 2 * y;
Equivalent à :
if (y < 5)
x = 4 * y;
else
x = 2 * y;

3
0

Développement Orienté Objet


Structures de contrôle

◼ L'instruction conditionnelle if
La syntaxe de l'instruction if peut être décrite de la façon suivante:
if (expression) instruction;
ou :
if (expression) {
instruction1;
instruction2;
}
◼ L'instruction conditionnelle else
if (expression) {
instruction1;
}
else {
instruction2;
}
3
1

Développement Orienté Objet


Structures de contrôle
◼ Les instructions conditionnelles imbriquées
Java permet d'écrire ce type de structure sous la forme : if
(expression1) {
bloc1;
}
else if (expression2) {
bloc2;
}
else if (expression3) {
bloc3;
}
else {
bloc5;
}

3
2

Développement Orienté Objet


Structures de ◼ L'instruction switch
contrôle: Syntaxe :
switch( variable) {
case valeur1: instr1;break;
case valeur2: instr2;break;
case valeurN: instrN;break;
◼ Exemple:
import [Link]; default: instr;break;
public class Test { }
public static void main(String[] args) {
[Link]("Donner un nombre:");
Scanner clavier=new Scanner([Link]); int
nb=[Link]();
switch(nb){
case 1 : [Link]("Lundi");break; case 2 :
[Link]("Mardi");break; case 3 :
[Link]("Mercredi");break; default
:[Link]("Autrement");break;
}}} 3
3

Développement Orienté Objet


Structures itératif
◼ La boucle for
La boucle for est une structure employée pour exécuter un bloc
d'instructions un nombre de fois en principe connu à
l'avance. Elle utilise la syntaxe suivante :
for (initialisation;test;incrémentation) {
instructions;
}
Exemple :
for (int i = 2; i < 10;i++) {
[Link]("I="+i);
}

3
4

Développement Orienté Objet


Structures itératif
◼ Sortie d'une boucle par return
int[] tab=new int[]{4,6,5,8};
for (int i = 0; i < [Link]; i++) {
if (tab[i] == 5) {
return i;
}
◼ Branchement au moyen des instructions break et continue
❑ break:
int x = 10;
for (int i = 0; i < 10; i++)
{ x--;
if (x == 5) break;
}
[Link](x);
❑ continue:
for (int i = 0; i < 10; i++) {
if (i == 5) continue;
[Link](i);
} 3
5

Développement Orienté Objet


Structures itératif
◼ L ’instruction While
while (condition){ Exemple :
int s=0;int i=0;
BlocInstructions; while (i<10){
} s+=i;
i++;
}
[Link]("Somme="+s);
◼ L ’instruction do ..
while Exemple :
do{ int s=0;int i=0;
BlocInstructions; do{
s+=i;
}
i++;
while (condition); }while (i<10);
[Link]("Somme="+s);

3
6

Développement Orienté Objet


Chapitre 1 :

L’orienté objet

37
1.1-Notion d'< Objet >

• C'est un concept servant a représenter, modéliser toute entité décrite selon


ses propriétés et son comportement.

• Ce comportement s'observe via les interactions que le monde extérieur peut


avoir avec cette entité.

• Les interactions sont sollicitées a travers les opérations de l'objet.

• Les objets sont des entités avec des propriétés et des caractéristiques bien
spécifiques

38
Programmation Orientée Objet (POO)

• Qu'est ce qu’un Programme Orientée Objet ?


• Ensemble d'objets autonomes et responsables qui s'entraident pour
résoudre un problème final en s'envoyant des messages.

Objet 1 Message

Objet 3

Objet 2
Programmation Orientée Objet

• Qu’est ce qu’un objet


• Objet = Données + Méthodes (Fonctions Membres)

Fonction 1 Fonction 2

Fonction Fonction
DONNEES 3
6

Fonction 5 Fonction 4
Programmation Orientée Objet

• Exemple d’un objet

Résistance

SetValueR SetValueP

GetRmin R P GetValueR

GetRmax GetValueP
Exemple d’objet

• Une personne est caractérisée par son prénom, son nom de


famille, son sexe, sa date de naissance, son lieu de naissance, sa
profession : ce sont ses propriétés.

• Une personne peut exécuter les opérations suivantes : se réveiller,


se lever, marcher, courir, sauter, s'asseoir, dormir, manger, lire,
écrire, parler (dire son ^âge), se taire,. . .

42
1.2-Objets et classes d’objets

43
-Exemple: Gestion d’un zoo

-Création d’objet pour chaque élément du zoo:

▪ Les objets sont regroupés en catégories appelées classes

▪ Classes: singe, lion, oiseau, reptile….

▪ Si notre programme concerne l’alimentation des animaux


• Classes: carnivores, végétarien, Insectivore…

▪ De la classe la plus générale à la plus spécialisé.

▪ Les classes spécialisées dérivent de la classe générale.


• Elles représentent certains particularités de la classe dont elles sont dérivés
44
Programmation Orientée Objet

• Encapsulation des données


• L’accès aux données des objets est réglementé
• Données privées → accès uniquement par les fonctions
membres
• Données publiques → accès direct par l’instance de l’objet
• Conséquences
• Un objet n’est vu que par ses spécifications
• Une modification interne est sans effet pour le
fonctionnement général du programme
• Meilleure réutilisation de l’objet
• Exemple de la résistance
• Les données R et P ne peuvent être utilisées que par les
fonctions membres
Programmation Orientée Objet

• Polymorphisme (du Grecque→plusieurs


formes)
• Un nom (de fonction, d’opérateur) peut être associé à
plusieurs mais différentes utilisations
• Exemple
• Si a est un nombre complexe, sqrt(a) appellera si elle existe
la fonction adaptée au type de a.
• Dans un langage non OO, il aurait fallu connaître le nom de
deux fonctions distinctes (selon que a soit complexe ou
réel)
• C’est le système qui choisit selon le type de l’argument ou
de l’opérande
Programmation Orientée Objet

• L’Héritage
• Permet de définir les bases d’un nouvel objet à partir d’un objet existant
• Le nouvel objet hérite des propriétés de l’ancêtre et peut recevoir de
nouvelles fonctionnalités
• Avantages
• Meilleures réutilisations des réalisations antérieures parfaitement au
point
Programmation Orientée Objet

• Concept de Classe
• Type réunissant une description
• D’une collection de données membres hétérogènes ayant
un lien entres elles
• D’une collection de méthodes (fonctions membres) servant
à manipuler les données membres
• Généralisation du type structure ou record des
langages non OO (classe = définition de données +
définition de méthodes)
• Possibilité de fixer la visibilité externe des différents
constituants de la classe
Programmation Orientée Objet

• Instance d’une classe


• C’est un objet initialisé à partir de la description figée d’une classe
• Fonctions membres publiques
• Les constructeurs
• Les destructeurs
• Les accesseurs
• Les modificateurs
Programmation Orientée Objet

• Les Constructeurs
• Permettent d’initialiser l’objets lors de sa création
• copie des arguments vers les données membres
• initialisation de variables dynamiques à la création de
l’objet
• Sont appelés de manière automatique à la création de
l’objet
• Peuvent être surchargés→On peut en définir plusieurs
de même nom mais acceptant des arguments
différents
• Possèdent le même nom que la classe
Programmation Orientée Objet

• Le Destructeur
• Il est unique
• Est appelé automatiquement lors de la destruction de l’objet
• Sert généralement à éliminer les variables dynamiques de l’objet (créées
en général par le constructeur)
• Il a pour nom le nom de la classe précédé du symbole ~
Programmation Orientée Objet

• Les Accesseurs
• Catégorie de fonctions membres qui permettent l’accès et l’utilisation
des informations privées contenues dans l’objet

• Les Modificateurs
• Permettent de modifier l’état des données internes (publiques ou
privées) de l’objet
Programmation Orientée Objet

• Définition d’une Classe en Java


54
55
56
57
Lecture à partir du clavier

58
//Ceci importe la classe Scanner du package [Link]
import [Link];
//Ceci importe toutes les classes du package [Link]
import [Link].*;

▪ Avant d'indiquer à Java qu'il faut lire ce que nous allons taper au
clavier, nous devrons instancier un objet Scanner.
▪ Créez une nouvelle classe et tapez cette ligne de code dans votre
méthode main :
Scanner sc = new Scanner([Link]);

Scanner sc = new Scanner([Link]);


[Link]("Veuillez saisir un nombre :");
int str = [Link]();
[Link]("Vous avez saisi le nombre : " + str);

59
Autres types à saisir

import [Link];
public class Main { public static void main(String[] args)
{ Scanner sc = new Scanner([Link]);
[Link]("Saisissez un entier : ");
int i = [Link]();
[Link]("Saisissez une chaîne : ");
[Link]();
String str = [Link]();
[Link]("FIN ! "); } }

60
Boucles: FOR

public class Demo { public static void main( String [] args )


{
for ( int counter = 1; counter <= 10; counter++ )
[Link]( counter );
[Link]( "Bye bye" );
}
}

61
Boucles: FOR

public class Demo { public static void main( String []


args ) {
String [] months = { "January", "February", "March",
"April", "May", "June", "July", "August", "September",
"October", "November", "December" };
for ( int index=0; index<12 ; index++ ) {
[Link]( months[ index ] );
} } }

62
Boucles: L'instruction while

public class Demo { public static void main( String []


args ) {
// La première boucle est réalisée via l'instruction for
for( int i=0; i<10; i++ ) {
[Link]( i + " " ); }
[Link]();
// La seconde boucle est réalisée via l'instruction while
int i=0;
while( i<10 ) {
[Link]( i + " " ); i++; }
[Link](); }

63
Les tableaux

Les tableaux représentent des collections de valeurs ou d’objets.


En Java, les tableaux sont eux-mêmes des objets.
Donc une variable de type tableau peut avoir la valeur null.
Une variable de type tableau se déclare en ajoutant des crochets à
la suite du type :
int[] tableau;

Il est également possible de placer les crochets après le nom de la


variable :
int tableau[];
64
Les tableaux

Initialisation
Il est possible d’initialiser une variable de type tableau à partir
d’une liste fixe délimitée par des accolades.

int[] tableauEntier = {1, 2, 3, 4, 5};


String[] tableauChaine = {"Bonjour", "le", "monde"};

65
Les tableaux

Création avec new


Les tableaux étant des objets, il est également possible de les créer
avec le mot-clé new.
int[] tableauEntier = new int[] {1, 2, 3, 4};
String[] tableauChaine = new String[] {"Bonjour", "le", "monde"};

Si on ne souhaite pas donner de valeurs d’initialisation pour les


élements du tableau, il suffit d’indiquer uniquement le nombre
d’éléments du tableau entre crochets.
int[] tableauEntier = new int[5];
String[] tableauChaine = new String[3];
66
Dans ce cas, les éléments d’un tableau sont tout de même
initialisés avec une valeur par défaut (comme pour un attribut) :

67
Les tableaux

La taille du tableau peut être donnée par une constante, une


expression ou une variable.
int t = 6; int[] tableau = new int[t * t * 2];
Par contre, la taille d’un tableau est donné à sa création et ne
peut plus être modifiée. Il n’est donc pas possible d’ajouter ou
d’enlever des éléments à un tableau. Dans ce cas, il faut créer un
nouveau tableau avec la taille voulue et copier le contenu du
tableau d’origine vers le nouveau tableau.
Un tableau dispose de l’attribut length permettant de connaître
sa taille. L’attribut length ne peut pas être modifié.
int t = 6; int[] tableau = new int[t * t * 2];
[Link]([Link]); // 72 68
Les tableaux

Accès aux éléments d’un tableau


L’accès aux éléments d’un tableau se fait en donnant l’indice d’un
élément entre crochets. Le premier élément d’un tableau a
l’indice 0. Le dernier élément d’un tableau a donc comme indice la
taille du tableau moins un.
int[] tableau = {1, 2, 3, 4, 5};
int premierElement = tableau[0];
int dernierElement = tableau[[Link] - 1];
[Link](premierElement); // 1
[Link](dernierElement); // 5 for (int i = 0, j =
[Link] - 1; i < j; ++i, --j) { int tmp = tableau[j];
tableau[j] = tableau[i];
tableau[i] = tmp; } 69
Les tableaux

Mais il est également possible de parcourir tous les élements d’un


tableau avec un for amélioré.
int[] tableau = {1, 2, 3, 4, 5};
for (int v : tableau)
{ [Link](v); }

L’utilisation d’un for amélioré est préférable lorsque cela est


possible. Par contre, il n’est pas possible avec un for amélioré de
connaître l’indice de l’élément courant.

70
Les tableaux

Tableau multi-dimensionnel
Il est possible d’initialiser un tableau à plusieurs dimensions.
int[][] tableauDeuxDimensions = {{1, 2}, {3, 4}}; int[][][]
tableauTroisDimensions = {{{1, 2}, {3, 4}}, {{5, 6}, {7, 8}}};
[Link](tableauDeuxDimensions[0][1]);
[Link](tableauTroisDimensions[0][1][0]);
Il est également possible de créer un tableau multi-dimensionnel
avec le mot-clé new.
int[][] tableauDeuxDimensions = new int[2][10]; int[][][]
tableauTroisDimensions = new int[2][10][5];

71
Les tableaux

Égalité de deux tableaux


En Java, il n’est pas possible d’utiliser l’opérateur == pour
comparer deux objets. En effet, cet opérateur compare la
référence des variables. Cela signifie qu’il
indique true uniquement si les deux variables référencent le
même objet.
int[] tableau1 = {1, 2, 3, 4, 5};
int[] tableau2 = {1, 2, 3, 4, 5};
[Link](tableau1 == tableau1); // true
[Link](tableau1 == tableau2); // false

72
Les tableaux

Pour comparer deux objets, il faut utiliser la méthode equals. Les tableaux en Java
disposent de la méthode equals, malheureusement, elle a exactement le même
comportement que l’utilisation de l’opérateur ==.
int[] tableau1 = {1, 2, 3, 4, 5}; int[] tableau2 = {1, 2, 3, 4, 5};
[Link]([Link](tableau1)); // true
[Link]([Link](tableau2)); // false

La classe outil [Link] fournit des méthodes de classe equals pour


comparer des tableaux en comparant un à un leurs éléments.
int[] tableau1 = {1, 2, 3, 4, 5};
int[] tableau2 = {1, 2, 3, 4, 5};
[Link]([Link](tableau1, tableau1)); // true
[Link]([Link](tableau1, tableau2)); // true
73
Les tableaux

Il est également possible de comparer des tableaux d’objets. Dans ce


cas, la comparaison des élements se fait en appelant la
méthode equals de chaque objet. La méthode equals possède la
signature suivante :
public boolean equals(Object obj) { // ... }

Par exemple, la classe [Link] fournit une implémentation de


la méthode equals. Il est donc possible de comparer des tableaux de
chaînes de caractères.
String[] tableau1 = {"premier", "deuxième", "troisième", "quatrième"};
String[] tableau2 = {"premier", "deuxième", "troisième", "quatrième"};
[Link]([Link](tableau1, tableau2)); // true
74
Les tableaux

Tri & recherche


Le tri et la recherche sont des opérations courantes sur des tableaux de valeurs. La
classe outil [Link] offrent un ensemble de méthodes de classe pour nous
aider dans ces opérations.
Tout d’abord, [Link] fournit plusieurs méthodes sort. Celles prenant un
tableau de primitives en paramètre trient selon l’ordre naturel des éléments.
int[] tableau = {1, 5, 4, 3, 2}; [Link](tableau);
[Link]([Link](tableau));
Il est également possible de trier certains tableaux d’objets. Par exemple, il est
possible de trier des tableaux de chaînes de caractères.
String[] tableau = {"premier", "deuxième", "troisième", "quatrième"};
[Link](tableau);
[Link]([Link](tableau));
75
Les tableaux

[Link] fournit des méthodes binarySearch qui


implémentent l’algorithme de recherche binaire. Ces méthodes
attendent comme paramètres un tableau et une valeur compatible
avec le type des éléments du tableau. Ces méthodes retournent
l’index de la valeur trouvée. Si la valeur n’est pas dans le tableau,
alors ces méthodes retournent un nombre négatif. La valeur
absolue de ce nombre correspond à l’index auquel la valeur aurait
dû se trouver plus un.
int[] tableau = {10, 20, 30, 40, 50};
[Link]([Link](tableau, 20)); // 1
[Link]([Link](tableau, 45)); // -5
76
Les tableaux

Copie d’un tableau


Comme il n’est pas possible de modifier la taille d’un tableau, la copie peut
s’avérer une opération utile. [Link] fournit des méthodes de
classe copyOf et copyOfRange pour réaliser des copies de tableaux.
int[] tableau = {1, 2, 3, 4, 5};
int[] nouveauTableau = [Link](tableau, [Link] - 1);
[Link]([Link](nouveauTableau)); // [1, 2, 3, 4]
nouveauTableau = [Link](tableau, [Link] + 1);
[Link]([Link](nouveauTableau)); // [1, 2, 3, 4, 5, 0]
nouveauTableau = [Link](tableau, 2, [Link]);
[Link]([Link](nouveauTableau)); // [3, 4, 5]
nouveauTableau = [Link](tableau, 2, 3);
[Link]([Link](nouveauTableau)); // [3]
77
Les tableaux

Pour réaliser une copie, il existe également la


méthode [Link]. Contrairement aux
précédentes, cette méthode ne crée pas de nouveau tableau, elle
copie d’un tableau existant vers un autre tableau existant.
int[] tableau = {1, 2, 3, 4, 5};
int[] destination = new int[3]; /* Les paramètres attendus sont : * - le
tableau source * - l'index de départ dans le tableau source * - le tableau
destination * - l'index de départ dans le tableau destination * - le
nombre d'éléments à copier */
[Link](tableau, 1, destination, 0, [Link]);
[Link]([Link](destination)); // [2, 3, 4]
78
Les tableaux

Conversion d’un tableau en liste


La plupart des API Java utilisent des collections plutôt que des tableaux. Pour
transformer un tableau d’objets en liste, on utilise la
méthode [Link]. La liste obtenue possède une taille fixe. Par
contre le contenu de la liste est modifiable, et toute modification des éléments
de cette liste sera répercutée sur le tableau.
String[] tableau = {"Bonjour", "le", "monde"};
[Link]<String> liste = [Link](tableau);
[Link](0, "Hello"); [Link](1, "the"); [Link](2, "world"); // Le tableau a été
modifié à travers la liste [Link]([Link](tableau)); //
[Hello, the, world]

79
Exercice: Tableau de 10 entiers à saisir et
afficher le max, le min et la moyenne

import [Link];

public class TableauEntiers {


public static void main(String[] args) {
Scanner scanner = new Scanner([Link]);
int[] tableau = new int[10];
int somme = 0;

80
// Saisie des 10 entiers
[Link]("Veuillez saisir 10 entiers :");
for (int i = 0; i < 10; i++) {
[Link]("Entier " + (i + 1) + ": ");
tableau[i] = [Link]();
somme += tableau[i];
}

81
// Initialisation du minimum et maximum
int min = tableau[0];
int max = tableau[0];

// Recherche du minimum et maximum


for (int i = 1; i < 10; i++) {
if (tableau[i] < min) {
min = tableau[i];
}
if (tableau[i] > max) {
max = tableau[i];
}
}
82
// Calcul de la moyenne
double moyenne = (double) somme / [Link];

// Affichage des résultats


[Link]("Le maximum est : " + max);
[Link]("Le minimum est : " + min);
[Link]("La moyenne est : " + moyenne);

83
Comparer deux chaine de caractères x et y:
if ([Link](y))
{ [Link]("Les chaînes sont égales"); }
else
{ [Link]("Les chaînes sont différentes"); }
}
}

84
Les listes en Java
▪ Le Java Collection Framework contient des interfaces et des classes
très utiles qui les implémentent pour travailler avec des structures
de données.

▪ En Java, les listes sont homogènes, c'est-à-dire que les éléments de


la liste sont du même type de données.

85
Les listes en Java
▪ L'interface Java List hérite de Collection, elle hérite de toutes ses
opérations. En plus de celles-ci, les opérations suivantes sont
également possibles dans List :
▪ Accès positionnel. Chaque élément a un index et peut être
manipulé en fonction de sa position. dans la liste. Autrement
dit, vous pouvez ajouter, exclure et modifier des éléments.
▪ Recherche. Vous pouvez trouver un élément dans une liste par
son contenu et renvoyer son index.
▪ Itération. La nature séquentielle de List permet l'utilisation de
méthodes d'itération (listIterator).
▪ Gamme-vue. La méthode de sous-liste effectue des opérations
de plage arbitraires sur la liste.

86
Méthodes de liste Java
▪ Les opérations ci-dessus sont exposées dans les méthodes de l'interface
Java List. En voici quelques-uns:
▪ ajouter (élément E) Cette méthode ajoute l'élément element à la fin
de cette liste.
▪ ajouter (index int, élément) La méthode ajoute un élément à un
index particulier dans la liste. Si un paramètre nécessaire est passé, il
ajoute l'élément à la fin de la liste.
▪ addAll (index int, collection Collection) Ajoute tous les éléments de la
collection donnée à la liste. Si un seul paramètre est passé, il ajoute
tous les éléments de la collection donnée à la fin de la liste.
▪ taille() Renvoie la taille de la liste (quantité d'éléments dans la liste).
▪ obtenir (index entier) Renvoie l'élément à l'index spécifié.
▪ ensemble (index int, élément) Remplace les éléments à un index
donné par le nouvel élément et renvoie l'élément qui a été remplacé
par un nouvel élément.
▪ supprimer (index int) Supprime un élément de l'index spécifié.

87
Méthodes de liste Java
▪ supprimer (élément) Supprime la première occurrence de l'élément donné dans
la liste.
▪ clair() Supprime tous les éléments de la liste.
▪ indexOf(élément) Renvoie la première occurrence de l'élément donné. Si
l'élément n'est pas présent dans la liste, renvoie -1 .
▪ dernierIndexDe(élément) Renvoie la dernière occurrence de l'élément donné.
Si l'élément n'est pas présent dans la liste, renvoie -1 .
▪ est égal à (élément) Comparez l'égalité de l'élément donné avec les éléments de
la liste.
▪ est vide() Vérifie si la liste est vide. Renvoie vrai si la liste est vide.
▪ contient (élément) Vérifie si la liste contient l' élément . Renvoie true si la liste
contient l'élément.
▪ contientTout(Collection collection) Vérifie si la liste contient toute la collection
d'éléments.
▪ tri(Comparateur comp) Trie les éléments de la liste en fonction du comparateur
donné.
▪ subList(int fromIndex, int toIndex) Renvoie une vue de la partie de cette liste
entre le fromIndex spécifié, inclus, et le toIndex, exclusif. 88
Implémentation de la liste
•Comme List est une interface, les programmes doivent en créer
une implémentation concrète. Vous pouvez choisir entre les
implémentations List suivantes dans l'API Java Collections :

•[Link]
•[Link]
•[Link]
•[Link]

L'implémentation la plus populaire de l'interface List s'appelle


ArrayList.

89
Vous pouvez déclarer un programme List en Java de l'une des
manières suivantes :

List<String> myList = new ArrayList();


List myList1 = new ArrayList();
List myList3 = new ArrayList<String>();
ArrayList arrayList = new ArrayList();

Il est préférable de déclarer une nouvelle liste via une interface.


De même, vousDéclaration d'interface
pouvez déclarer de liste de List.
d'autres implémentations
Le chemin le plus court :

90
Déclaration d'interface de liste

List myList = new ArrayList<String>();


Vector myVector = new Vector();
LinkedList linkedList = new LinkedList();
Stack stack = new Stack();
[Link]("Paul");
[Link](1);
[Link](1.2f);
[Link]('a’);

Désormais, seules des chaînes peuvent être ajoutées à notre pile, des
entiers à linkedList , des flottants à myVector et myList est une liste de
caractères.

91
Déclaration d'interface de liste

Vector myVector = new Vector;


LinkedList linkedList = new LinkedList();
Stack stack = new Stack();

Avec une telle déclaration, le type de données des éléments de telles


listes est déterminé lors de l'initialisation de la liste, c'est-à-dire
lorsque des éléments y sont ajoutés.

92
import [Link].*;
Exemple de liste Java (réalisation d'Arraylist)
public class ArrayListExample2 { public static void main(String[] args)
{ List<String> myFriendsList = new ArrayList(); //we created list of some objects
[Link]( "the size of myList before init = " + [Link]());
[Link]("Alex"); [Link]("Tanya"); [Link]("Veloxy");
[Link]("Alex"); [Link]("Andrew");
[Link](myFriendsList);
[Link]( "the size of myList after init = " + [Link]());
[Link]("Ihor"); [Link](myFriendsList);
[Link]("the size of my list = " + [Link]());
//here the program will print out the first appearance of "Alex" element
[Link]([Link]("Alex"));
//program will print out the first appearance of "Alex" element starting from the element 0
[Link](3);
[Link]([Link](3));
[Link]("after removing one of Alex's there is only one Alex: " + myFriendsList);
[Link]([Link](1));
[Link]();
[Link]("the size of the vector after clear method = " + [Link]());
93
}}
Exemple de liste Java (réalisation d'Arraylist)

Voici la sortie de ce programme:


la taille de myList avant init = 0
[Alex, Tanya, Veloxy, Alex, Andrew]
la taille de myList après init = 5
[Alex, Tanya, Veloxy, Alex, Andrew, Ihor]
la taille de ma liste = 6
0 Andrew après en supprimant un des Alex, il n'y a qu'un seul Alex :
[Alex, Tanya, Veloxy, Andrew, Ihor]
Tanya la taille du vecteur après clear method = 0
Processus terminé avec le code de sortie 0

94
Comment fonctionne LinkedList
• Dans une LinkedList, les éléments sont en fait des liens dans la
même chaîne.
• Chaque élément, en plus des données qu'il stocke, a un lien vers
l'élément précédent et suivant.
• Ces liens permettent de naviguer d'un élément à l'autre. L'itérateur
prend en charge la traversée dans les deux sens. Implémente des
méthodes pour obtenir, supprimer et insérer au début, au milieu et à
la fin d'une liste. Vous permet d'ajouter n'importe quel élément, y
compris null.

• LinkedList implémente deux interfaces - non seulement List, mais


aussi Deque. Cela offre la possibilité de créer une file d'attente
bidirectionnelle à partir de n'importe quel élément, même nul.
Chaque objet placé dans la liste chaînée est un nœud (nœud).
Chaque nœud contient un élément, un lien vers le nœud précédent
et suivant. En fait, la liste chaînée est constituée d'une suite de
nœuds dont chacun est destiné à stocker un objet du type défini
lors de sa création.
95
Exemple de code
• import [Link].*;
• public class LinkedListTest {
• public static void main(String args[])
• { List myLinkedList= new LinkedList<Integer>();
• [Link](1);
• [Link](2);
• [Link](4);
• [Link]("three added elements: " + myLinkedList);
[Link](5);
• [Link](1);
• [Link](myLinkedList);
• [Link](); //3 //add new element at the specified
position: [Link](2,7);
• [Link](myLinkedList); } }
96
• La sortie est ici :
• trois éléments ajoutés :
• [1, 2, 4]
• [1, 4, 5]
• [1, 4, 7, 5]

97
Convertir un array en une liste
• Pour convertir un array, vous pouvez exécuter une liste avec des boucles et ajouter tour
à tour les éléments de l’array grâce à la méthode « .add() ».

• import [Link].*;
• public class ArrayToList{
• public static void main(String args[]){
• // Création d’un array
• String[] colors={"blue","green","red","yellow"};
• [Link]("Array: "+[Link](colors));
• //Conversion de l’array en liste
• List<String> list=new ArrayList<String>();
• for(String color: colors){
• [Link](color);
• }
• [Link]("List: "+list);
• }
• } 98
• Le résultat est le suivant :

• Array: [blue, green, red, yellow]


• List: [blue, green, red, yellow]

99
Convertir une liste en un array
• Grâce à la méthode « toArray() », une liste peut être transformée en un array :
• import [Link].*;

• public class ListToArray{


• public static void main(String args[]){
• List<String> days = new ArrayList<String>();
• [Link]("Monday");
• [Link]("Tuesday");
• [Link]("Wednesday");
• [Link]("Thursday");
• [Link]("Friday");
• [Link]("Saturday");
• [Link]("Sunday");
• // Conversion d’un ArrayList en array
• String[] array = [Link](new String[[Link]()]);
• [Link]("Array: "+[Link](array));
• [Link]("List: "+days);
• }
100
• }
• Dans le résultat, nous constatons que le contenu de l’array et celui
de la liste sont identiques :

• Array: [Monday, Tuesday, Wednesday, Thursday, Friday, Saturday,


Sunday]
• List: [Monday, Tuesday, Wednesday, Thursday, Friday, Saturday,
Sunday]

101
Conception d’IHM en Java
Les boîtes à outils graphiques interactives de Java :
• Java propose deux boîtes à outils graphiques :
• AWT (Abstract Window Toolkit), simple, petite et limitée
• SWING, cohérente, grosse et extensible.
• Les deux peuvent s'utiliser dans les applets
• SWING facilite la transition à partir d'AWT.
• Construire une fenêtre graphique
• Objets graphiques
• Composition, affichage
• Programmation par événement
• Comment faire pour que le programme réagisse?
• Principe MVC – Modèle-Vue-Contrôle
• Package Swing

102
Conception d’IHM en Java

103
Exemple simple (Montrer)

104
Vérification de l'installation de Java
[Link]-vous d'utiliser un JDK complet :
•L'erreur peut survenir si vous n'utilisez que le JRE (Java
Runtime Environment) au lieu du JDK (Java Development Kit).
•Téléchargez et installez la dernière version du JDK
depuis OpenJDK ou le site officiel d'Oracle.

[Link] Eclipse pour utiliser le JDK :


•Ouvrez Eclipse et allez dans Window > Preferences.
•Naviguez vers Java > Installed JREs.
•Si vous ne voyez pas votre JDK, cliquez sur Add, puis
sélectionnez Standard VM et indiquez le chemin d'accès au
JDK installé.
•Assurez-vous que le JDK est coché comme JRE par défaut.

105
Configuration du projet
[Link] les propriétés du projet :
•Cliquez avec le bouton droit sur votre projet dans l'explorateur
de projets et sélectionnez Properties.
•Allez dans Java Build Path, puis dans l'onglet Libraries.
•Supprimez l'ancienne bibliothèque JRE System Library si elle
pointe vers un JRE,
• puis ajoutez la nouvelle en cliquant sur Add Library,
sélectionnez JRE System Library,
•et choisissez celle qui correspond à votre JDK.

106
3.Vérifiez les restrictions d'accès :
•Si vous utilisez des modules (Java 9 et ultérieur),
assurez-vous que votre fichier module-
[Link] contient la ligne suivante :
java
requires [Link];

107
Afficher une interface
Importer le package (les classes)
Les classes sont regroupées en package
Importer un package = importer toutes les classes du package
import [Link].*;
Créer une fenêtre graphique (JFrame, …)
Définir les paramètres (taille, …)
Afficher
Différence:
import [Link].*; les classes dans awt
import [Link].*; les classes dans event
import [Link].*;
awt: Abstract Windows Toolkit

108
Les objets graphiques
3 niveaux
Haut niveau
Définir une fenêtre
JApplet, JDialog, JFrame, JWindow
Niveau intermédiaire
Pour composer la fenêtre
JPanel, JScrollPane, JSplitPane, …
Niveau inférieur
Les éléments de base
JButton, JCheckBox, JTextField, JTextArea, …

109
Insérer des éléments dans la fenêtre

110
Ajouter des composants dans une fenêtre

111
Utilisation de GridBagLayout
[Link] GridBagLayout :
•Ce layout est plus complexe mais offre une grande
flexibilité pour positionner les composants dans une grille.
•Exemple :java

JFrame window = new JFrame();


[Link](new GridBagLayout());
GridBagConstraints gbc = new GridBagConstraints();
JLabel label = new JLabel("Mon Label");
[Link] = 0; // Colonne
[Link] = 0; // Ligne
[Link](label, gbc);
112
Exemple Application Interface graphique :

113
Exemple Application Interface graphique :

114
Exercice:
Écrire un programme Java pour créer une classe appelée « Vehicule »
avec des attributs pour la marque, le modèle et l’année. Créez des
classes fils « Voiture » et « Camion » qui ajoutent des attributs
spécifiques tels que la taille du coffre pour les voitures et la capacité
de charge pour les camions. Implémentez une méthode pour afficher
les détails du véhicule dans chaque classe fille.

115

Vous aimerez peut-être aussi