Vous êtes sur la page 1sur 37

13/02/2023

Université de Sousse
Institut Supérieur des Sciences Appliquées et de Technologie de Sousse

Département : Informatique

MODULE: PROGRAMMATION ORIENTÉE OBJET -2

Chapitre 2: Introduction au langage Java


Dr. ING. Ahlem ABOUD
aboud.ahlem.tn@ieee.org

A.U: 2022-2023

Le langage Java
➢Le langage java est crée en 1995 par la société Sun Microsystems.

• Version actuelle Java 17, actuellement rachetée par Oracle en 2009

➢Orienté objet

➢Le java est open source.

➢Fortement typé:

• Toute variable doit être déclarée avec un type,

• Les types sont d’une part fournis par le langage, mais également par la définition des clases,

➢Reprend une syntaxe très proche de celle du langage C

➢Simple:

• simple à lire, les pointeurs n’existent plus en java

• La libération d’espace inutilisé est faite avec le « Garbage collector »: les objets non référencés sont
automatiquement supprimés de la mémoire dès que la mémoire disponible devient faible.

13/02/2023 POO-2 DR A. ABOUD 2

1
13/02/2023

Le langage Java
➢Modulaire: on peut écrire des portions de code générique, c-à-d utilisables par plusieurs applications.

➢Rigoureux: la plupart des erreurs se produisent à la compilation et non à l’exécution

➢Portable et multiplateformes :

• le code est indépendant de la machine, un même programme compilé peut s’exécuter sur différents
environnements.

• Portable grâce à l’exécution par une machine virtuelle « write once, run everywhere),

➢Multi-tâches

• Java est un langage qui permet d'exécuter plusieurs processus au même temps (multithread)

➔ En contrepartie; les applications java ont le défaut d’ être plus lentes à l’exécution que des
applications programmées en C par exemple.

➔ verbeux (beaucoup de lignes pour des choses simples)

13/02/2023 POO-2 DR A. ABOUD 3

Le langage Java
➢Les plateformes java permettant le développement:
✓ Des application Desktop.
✓ Des applets java.
✓ Des applications web.
✓ Des application mobile.
✓ Des applications embarqués.

13/02/2023 POO-2 DR A. ABOUD 4

2
13/02/2023

C++ vs. Java


➢Java est un langage de programmation orienté objet alors que C++ est à la fois un
langage de programmation procédurale et orienté objet.

➢Java prend en charge le garbage collector automatique. Il ne supporte pas les


destructeurs comme le fait dans C++.

➢C++ dépend de la plate-forme, mais Java est indépendant de la plate-forme.

➢C++ prend en charge l’héritage multiple et Java ne prend pas en charge l’héritage
multiple par classe.

13/02/2023 POO-2 DR A. ABOUD 5

C++ vs. Java


Java
C++
Plateforme C++ dépend de la plate-forme. Java est indépendant de la plate-forme.
Java est principalement utilisé pour la
Principalement utilisé C++ est principalement utilisé pour la programmation des applications. Il est largement
pour programmation système. utilisé dans les applications Windows, Web et
mobiles.
C++ a été conçu pour la programmation
système et application. C’était une Java a été conçu dans le but d’être facile à utiliser
Objectif de conception
extension du langage de et accessible à un public plus large.
programmation C.
Java est aussi un langage orienté objet.
C++ est un langage orienté objet. Cependant, tout (sauf les types fondamentaux) est
Orienté objet Cependant, en langage C, y’a pas de un objet en Java. Il s’agit d’une racine de la
racine de la hiérarchie de classe. hiérarchie de classe car tout est dérivé de
java.lang.Object.

13/02/2023 POO-2 DR A. ABOUD 6

3
13/02/2023

Plateforme Java
Pour développer et exécuter des programmes écrits en langage java indépendants de tout processeur et de tout
système d’exploitation, on a donc besoin:

➢Du langage de programmation et du compilateur

➢La JVM et des APIs (Application Programming Interfaces) regroupées dans une plateforme:

✓ Java SE (Java Platform, Standard Edition): pour des applications classiques , desktop

✓ Java EE (Java Platform, Entreprise Edition): pour développer des applications serveur, web services, etc,…

✓ Java ME (Java Platform, Micro Edition): J2ME pour les applications embarquées, PDA, téléphones, etc,…

✓ JavaFX plate-forme pour créer des applications Internet riches en utilisant un API d’interface utilisateur légère.
Elles utilisent des moteurs graphiques et multimédias à accélération matérielle pour tirer parti de clients plus
performants et d’une apparence moderne ainsi que d’API de haut niveau pour se connecter aux sources de
données en réseau.

13/02/2023 POO-2 DR A. ABOUD 7

Plateformes Java

13/02/2023 POO-2 DR A. ABOUD 8

4
13/02/2023

JDK et JRE
•JRE (Java Runtime Environment) est la « machine virtuelle ». L’applet, le Javascript et
l’application de bureau utilisent le JRE pour le travail sur machine.

•JDK est une extension du JRE : contient la machine virtuelle et le kit pour développer
une nouvelle application, en particulier le compilateur (javac) en fait partie.

•Le JDK Java Development Kit


• Le “Java Development Kit” est un outil qui sert à la fois de compilateur et d’interpréteur.
• La dernière version du JDK peut être téléchargée sur le site Web d’Oracle –
https://www.oracle.com/java/technologies/downloads/ . Assurez-vous que vous téléchargez
la version appropriée pour votre ordinateur. Si vous utilisez un système d’exploitation 32
bits, puis téléchargez le nom de fichier correspondant apposé avec x86. Sinon, s’il s’agit
d’un système d’exploitation 64 bits téléchargez celui avec x64.

13/02/2023 POO-2 DR A. ABOUD 9

Comment exécuter un programme Java?


Installation du kit de développement java

✓ Le kit de développement java JDK est téléchargeable gratuitement à partir du site oracle
https://www.oracle.com/java/

Le JDK contient trois pacquages:

✓ J2Sdk1.x.exe : le kit de développement.

✓ Jre1.x.exe : la machine virtuelle java.

✓ Jdk1x-doc.zip: documentation java.


Exécuter J2Sdk.exe par défaut le JDK s’installe dans le répertoire: c:\program files\java
Exécuter Jre.exe pour installer la machine virtuelle dans le même répertoire.

13/02/2023 POO-2 DR A. ABOUD 10

5
13/02/2023

Comment exécuter un programme Java?

13/02/2023 POO-2 DR A. ABOUD 11

Comment exécuter un programme Java?


Ce qui contient le JDK:
➢ javac.exe : Compilateur java.
➢ java.exe : Interpréteur du byte code java.
➢ appletviewer.exe : Pour tester les applets java.
➢ javadoc.exe : générer la documentation des programmes java.
➢ javah.exe : Permet de faire le lien entre le programme java avec des méthodes natives
écrites dans un autre langage.
➢ jar.exe: permet de compresser les classes java ainsi tous les fichiers nécessaires pour
l’exécution du programme. Aussi permet l’optimisation du chargement des applets sur
Internet.

13/02/2023 POO-2 DR A. ABOUD 12

6
13/02/2023

Comment exécuter un programme Java?


➢Configuration de l’environnement:
➢Définir la variable d’environnement path
qui indique le chemin d’accès aux
programmes exécutables.
➢Cette variable devrait contenir le chemin
du jdk utilisé
➢Pendant l’exécution d’un programme
java, la JVM consulte la variable
d’environnement classpath qui contient le
chemin d’accès aux classes java utilisées
par cette application.

13/02/2023 POO-2 DR A. ABOUD 13

Outils de développement java


• Un éditeur de texte: on peut utiliser un simple éditeur comme Notepad de Windows mais il
est préférable d’utiliser un éditeur conçu pour programmer en java.
• Eclipse IDE: l’environnement de développement java le plus connu, il est gratuit.
• Autres IDE java:

✓ Visual Studio Code

✓ JDevlopper de Oracle.

✓ JBuilder de Borland.

✓ Netbeans de Sun.

13/02/2023 POO-2 DR A. ABOUD 14

7
13/02/2023

Exécuter un programme Java


➢Ecrire le code source de programme HelloWorld.java

➢Enregistrer ce fichier dans un nouveau répertoire c:\projetjava sous le nom

HelloWorld.java

➢Compiler ce programme sur ligne de commande Dos :

c:\ projetjava>javac HelloWorld.java

➢Corriger les Erreurs de compilation si nécessaire

➢Exécuter le programme sur ligne de commande

c:\ projetjava>java HelloWorld

13/02/2023 POO-2 DR A. ABOUD 15

Le Langage Java
Mon premier programme Java (pas très objet…)
➢Créer et ecrire la classe HelloWorld.java

Le code de la classe doit être enregistré dans un Tout code java doit être défini à l'intérieur
fichier de même nom (casse comprise) que la classe d'une classe
HelloWorld.java

public class HelloWorld {


public static void main(String[] args) {
System.out.println("Hello World !");
}
}

Le point d'entrée pour l'exécution est


la méthode main()
La description de la classe est
effectuée à l'intérieur d'un bloc { }

13/02/2023 POO-2 DR A. ABOUD 16

8
13/02/2023

Le Langage Java
Mon premier programme Java
➢Un programmeur Java écrit son code source, sous la forme de classes, dans des fichiers dont
l’extension est .java.

➢Ce code source est alors compilé par le compilateur javac en un langage appelé bytecode et
enregistre le résultat dans un fichier dont l’extension est .class.

➢Le bytecode ainsi obtenu n’est pas directement utilisable. Il doit être interprété par la machine
virtuelle de Java qui transforme alors le code compilé en code machine compréhensible par le
système d’exploitation.

➢C’est la raison pour laquelle Java est un langage portable : le bytecode reste le même quelque
soit l’environnement d’exécution.

13/02/2023 POO-2 DR A. ABOUD 17

La machine virtuelle Java


Exécution d'un programme Java compilé
Interprétation du langage

Code source HelloWorld.java

Compilateur Javac HelloWorld.java

Bytecode HelloWorld.class

Interpréteur Java HelloWorld

Code machine virtualisation

Système d’exploitation Système d’exploitation

13/02/2023 POO-2 DR A. ABOUD 18

9
13/02/2023

La machine virtuelle Java


Exécution d'un programme Java compilé
➢ le compilateur est un programme qui effectue cette traduction ➔Java génère du byte
code et non de l’assembleur (langage machine)
➢ le byte code est exécuté sur une machine virtuelle : la JVM (Java Virtual Machine)
➢ approche adoptée par la plupart des langages récents (Java, .NET, python,
➢ indépendance de la plate-forme : Windows, linux, mac, web, téléphone, ...

Code source byte-code

13/02/2023 POO-2 DR A. ABOUD 19

La machine virtuelle Java


Exécution d'un programme Java compilé
Java est un langage:

➢Compilé:

En bytecode: code intermédiaire indépendant de la machine n’est pas


directement exécutable par le système d’éxploitation

➢Interprété

Le bytecode doit être interprété par un autre programme qu’on appelle


interpréteur: une machine virtuelle Java (JVM)

13/02/2023 POO-2 DR A. ABOUD 20

10
13/02/2023

La machine virtuelle Java


Exécution d'un programme Java compilé
Le byte-code est :
▪proche d'un langage machine
▪indépendant de la plateforme d'exécution
(matériel + OS)
byte-code assure la portabilité des
programmes
▪langage d'une Machine Virtuelle
▪à l'exécution un interpréteur simule cette
machine virtuelle

13/02/2023 POO-2 DR A. ABOUD 21

L’objet en Java
➢ Contient une mise en œuvre
▪ Des champs (attributs)
▪ Des méthodes d’instances
▪ Des constructeurs (méthodes d’initialisation vues dans ce cours)
➢ Expose des fonctionnalités
▪ En empêchant l’accès à certains champs/méthodes/constructeurs à partir de
l’extérieur de la classe

13/02/2023 POO-2 DR A. ABOUD 22

11
13/02/2023

Syntaxe du langage Java


Le code source d’un programme Java est contenu dans plusieurs fichiers d’extension
.java (exp: Hello.java)
➢une seule classe publique par fichier
➢Le nom du fichier doit être le même que celui de la classe
➢Par convention, le nom d’une classe commence toujours par une majuscule
➢Le code source d’une classe commence par le mot-clé class suivi de son
contenu
➢Les caractères « {« et « } » marquent le début et la fin du bloc d’instructions à
réaliser par la classe
class <nom de la classe> {
<contenu de la classe>
}
13/02/2023 POO-2 DR A. ABOUD 23

Syntaxe du langage Java


Syntaxe
Création d’une classe
<visibilité> class <nom de la class> {
//code java (commentaire)
}
Attribut
<visibilité> <type> <nom de l’attribut> =<valeur par défaut>;
Opération
<visibilité> <type retour><nom de méthode> (<liste param>) {
//code java
}

13/02/2023 POO-2 DR A. ABOUD 24

12
13/02/2023

Syntaxe du langage Java


Le langage C a servi de base pour la syntaxe du langage Java :
➢le caractère de fin d’une instruction est “ ;”
a=c+c;

➢les commentaires (non traités par le compilateur) se situent entre les symboles “/*” et
“*/” ou commencent par le symbole “//” en se terminant à la fin de la ligne
int a ; // ce commentaire tient sur une ligne
int b ;

ou
/*Ce commentaire nécessite
2 lignes*/
int a ;

13/02/2023 POO-2 DR A. ABOUD 25

Syntaxe du langage Java


➢les identificateurs de variables ou de méthodes acceptent les caractères {a..z}, {A..Z}, $,
_ ainsi que les caractères {0..9} s’ils ne sont pas le premier caractère de l’identificateur.

➢ Il faut évidemment que l’identificateur ne soit pas un mot réservé du langage (comme int
ou for).
Exemple :

• mon_entier et ok4all sont des identificateurs valides

• mais mon-entier et 4all ne sont pas valides pour des identificateurs.

13/02/2023 POO-2 DR A. ABOUD 26

13
13/02/2023

Types de données: Types primitifs


Types primitifs

13/02/2023 POO-2 DR A. ABOUD 27

Types de données: Types primitifs


Types numériques entiers:
Types byte short int long
Taille (en bits) 8 16 32 64
Intervalle de valeurs -128…127 -32768…32767 -231 … 231-1 -263 … 263-1

Types numériques flottants:


Types float double
Taille (en bits) 32 64
Exemple 4.2f 4.2

13/02/2023 POO-2 DR A. ABOUD 28

14
13/02/2023

Types de données: Types primitifs


Types booléen:
➢ Peut prendre deux valeurs
True
Booléen
False

Types caractère:
➢ Permet de gérer les caractères
➢ Un caractère est placé entre double quottes

13/02/2023 POO-2 DR A. ABOUD 29

Types de données: Types primitifs


Types primitifs: Exemple déclaration et initialisation d’une variable:

int monEntier =0;


String chaine =’’bonjour ’’;
boolean test= false;

13/02/2023 POO-2 DR A. ABOUD 30

15
13/02/2023

Types de données: Types primitifs


Types primitifs:
En plus de ces types primitifs,

➢Le terme void est utilisé pour spécifier le retour vide ou une absence de paramètres d’une
méthode.

➢On peut remarquer que chaque type primitif possède une classe qui encapsule un attribut du
type primitif.

➢Exemple: la classe Integer encapsule un attribut de type int et permet ainsi d’effectuer des
opérations de traitement et des manipulations qui seraient impossibles sur une simple variable de
type int.

13/02/2023 POO-2 DR A. ABOUD 31

Types de données: Tableaux et matrices


Tableau (à une dimension)
➢ Une variable est déclarée comme un tableau dès lors que des crochets [ ] sont
présents soit après son type, soit après son identificateur.
➢ Les deux syntaxes suivantes sont acceptées pour déclarer un tableau d’entiers:
➢ Déclaration :
int [ ] mon_tableau ;
int mon_tableau2 [ ];
➢ Un tableau a toujours une taille fixe qui doit être précisée avant l’affectation de
valeurs à ses indices, de la manière suivante :
➢ Dimensionnement:
Int [ ] mon_tableau = new int [20];

13/02/2023 POO-2 DR A. ABOUD 32

16
13/02/2023

Types de données: Tableaux et matrices


Tableau (à une dimension)
➢ Initialisation: (méthode 1)
mon_tableau [0] = 1;
mon_tableau [1] = 2;
mon_tableau [2] = 3;
…….
mon_tableau [18] = 19;
mon_tableau [19] = 20;

➢ Initialisation: (méthode 2)

Int [ ] mon_tableau ={1,2,3,…,19,20};

13/02/2023 POO-2 DR A. ABOUD 33

Types de données: Tableaux et matrices


Les différentes syntaxes possible (1/2)

Définition de tableau Explications complémentaires


int [ ] tb; Définit un tableau d'entiers non encore initialisé.
Définit un tableau de dix entiers. Il n'est plus possible de
int [ ] tb = new int[10];
changer la taille de ce tableau.
Comme les crochets sont placés à gauche des noms de
variables ils s'appliquent à toutes ces variables. On est
int [ ] tb1, tb2;
donc en train de définir deux tableaux d'entiers, tous
deux non initialisés.

13/02/2023 POO-2 DR A. ABOUD 34

17
13/02/2023

Types de données: Tableaux et matrices


Les différentes syntaxes possible (2/2)
Définit un premier tableau de cinq entiers, puis un
int [] tb1 = new int[5], tb2 = new int[10];
second de dix entiers.

Définit un tableau de dix entiers ainsi qu'une variable


(value) de type entier. Les crochets ne s'appliquent
int tb[ ] = new int[10], value = 10;
uniquement qu'à tb car ils sont placés à la droite du
nom de la variable.

Définit un tableau pouvant contenir jusqu'à cinq


String [] strValues = new String[5];
chaînes de caractères.

Définit un tableau de chaînes de caractères contenant


String [] strValues = { "toto", "titi", "tata" }; les trois valeurs stockées entre les accolades : on
parle de liste d'initialisation.

13/02/2023 POO-2 DR A. ABOUD 35

Tableau (à une dimension)


▪ Les éléments d'un tableau sont accessibles par un indice. Ils sont indicés par des entiers
à partir (obligatoirement) de 0.
▪ L'instanciation (la création en mémoire) précise le nombre d'éléments : tableau = new
type[nombre];
▪ Cela permet de réserver en mémoire (allocation) la place nécessaire aux éléments. la
création est en fait l'instanciation de l'objet tableau.
▪ Le tableau possède une "caractéristique ou propriété" : tableau.length = le nombre
d'éléments déclaré. longueur est un attribut de l'objet tableau
▪ Le dernier indice est égal à (tableau.length - 1)
▪ Il est possible d'initialiser et d'instancier un tableau avec des valeurs : dans le programme
ci-dessus, cela aurait donné: int tab[] = {3,45,5,412,0};

13/02/2023 POO-2 DR A. ABOUD 36

18
13/02/2023

Tableau (à une dimension)


Parcourir un tableau (méthode 1):

for (int i=0, i< mon_tableau.length; i++)


{
System.out.println(mon_tableau[i] );
}

Ou (méthode 2):
for (int valeur: mon_tableau)
{
System.out.println(valeur);
}

13/02/2023 POO-2 DR A. ABOUD 37

Exemple: Tableaux

public class Demo {


public static void main( String [] args ) {
int [] myArray = { 10, 20, 30, 40, 50, 60, 70, 80, 90, 100 }; Output:
// Quelle est la taille du tableau myArray ? Size == 10
System.out.println( "Size == " + myArray.length ); 10
// On imagine accéder à certaines valeurs de ce tableau. 100
System.out.println( myArray[0] );
System.out.println( myArray[9] );
}
}

13/02/2023 POO-2 DR A. ABOUD 38

19
13/02/2023

Matrices (Multi-Dimensional Array)


Créer des matrices ou des tableaux à plusieurs dimensions en multipliant les crochets
▪La déclaration :
type [ ][ ] nomDeMatrice;
type nomDeMatrice [ ][ ] ;
▪L'instanciation précise le nombre de "lignes et de colonnes", en fait chacune des 2
dimensions :
matrice = new type[nombre1][nombre2];
▪Les longueurs des dimensions s'obtiennent ainsi :
matrice.length = la première (ou encore le nombre de lignes)
matrice[0].length = la seconde (ou encore le nombre de colonnes)

13/02/2023 POO-2 DR A. ABOUD 39

Matrices (Multi-Dimensional Array)


Parcourir un tableau à plusieurs dimensions

public class Main {


public static void main(String[] args) {
int[][] myNumbers = { {1, 2, 3, 4}, {5, 6, 7} };
for (int i = 0; i < myNumbers.length; ++i)
{
Résultat:
for(int j = 0; j < myNumbers[i].length; ++j)
{ 1
System.out.println(myNumbers[i][j]); 2
} 3
} 4
} 5
} 6
7

13/02/2023 POO-2 DR A. ABOUD 40

20
13/02/2023

Types de données: Chaînes de caractères


Les chaînes de caractères ne sont pas considérées en Java comme un type primitif ou
comme un tableau.
On utilise une classe particulière, nommée String, fournie dans le package java.lang.
Les variables de type String ont les caractéristiques suivantes :
➢leur valeur ne peut pas être modifiée
➢on peut utiliser l’opérateur + pour concaténer deux chaînes de caractères :

String s1 = ”hello” ;
String s2 = ”world” ;
String s3 = s1 + ” ” + s2 ;
//Après ces instructions s3 vaut ”hello world”

13/02/2023 POO-2 DR A. ABOUD 41

Types de données: Chaînes de caractères


➢l’initialisation d’une chaîne de caractères s’écrit :

String s = new String(); //pour une chaine vide


String s2 = new String(”hello world”);
// pour une chaîne de valeur ”hello world”

➢un ensemble de méthodes de la classe java.lang.String permettent d’effectuer des


opérations ou des tests sur une chaîne de caractères (voir la documentaion de la classe
String).

13/02/2023 POO-2 DR A. ABOUD 42

21
13/02/2023

Types de données: Constantes


➢Les constantes sont déclarés par le mot clé final

➢Exemple :

final int x=7


final double PI = 3.14159265358979323846 ;

➢ Le premier exemple qui vient à l'esprit est la définition de PI dans la classe Math.

13/02/2023 POO-2 DR A. ABOUD 43

Opérateurs
Les opérateurs arithmétiques Les opérateurs arithmétiques unaires

* Multiplication expr++ Incrément postfixé


int i = 0;
/ Division expr-- Décrément postfixé i++; // i vaut 1
++i; // i vaut 2
Reste de la ++expr Incrément préfixé
% --i; // i vaut 1
division --expr Décrément préfixé
+ Addition int j = +i; // équivalent à int j = i;
+ Positif int k = -i;
- Soustraction - Négatif

13/02/2023 POO-2 DR A. ABOUD 44

22
13/02/2023

Opérateurs
Une liste des opérateurs relationnels

< <ari> < <ari> <boo> inférieur à


<= <ari> <= <ari> <boo> inférieur ou égal à
> <ari> > <ari> <boo> supérieur à
>= <ari> >= <ari> <boo> supérieur ou égal à
instanceof <val>instanceof<cla> <boo> test de type
== <val>==<val> <boo> égal à
!= <val>!=<val> <boo> différent de

Légende
<ari> valeur arithmétique, <boo> valeur booléenne, <cla> classe, <ent> valeur entière, <ins> instruction,
<str> chaîne de caractères (String), <val> valeur quelconque, <var> variable

13/02/2023 POO-2 DR A. ABOUD 45

Opérateurs
Une liste des opérateurs logiques (booléens): permet de vérifier si plusieurs conditions sont vraies:

<ent>&<ent> <ent> ET bit à bit (binaire)


&
<boo>&<boo> <boo> ET booléen
<ent>ˆ<ent> <ent> OU exclusif bit à bit
ˆ <boo>ˆ<boo> <boo> OU exclusif booléen
<ent>|<ent> <ent> OU bit à bit
|
<boo>|<boo> <boo> OU booléen
&& <boo>&&<boo> <boo> ET logique
|| <boo>||<boo> <boo> OU logique
?: <boo>?<ins>:<ins> <ins> si...alors...sinon
= <var>=<val> <val> assignation
Légende
<ari> valeur arithmétique, <boo> valeur booléenne, <cla> classe, <ent> valeur entière, <ins> instruction, <str> chaîne de caractères (String),
<val> valeur quelconque, <var> variable

13/02/2023 POO-2 DR A. ABOUD 46

23
13/02/2023

Opérateurs
Une liste des opérateurs disponibles en Java est présentée par ordre de priorité décroissante dans le tableau
Opérateur Syntaxe Résultat Signification < <ari> < <ari> <boo> inférieur à
<= <ari> <= <ari> <boo> inférieur ou égal à
++<ari> <ari> pré incrémentation > <ari> > <ari> <boo> supérieur à
++ <ari>++ <ari> post incrémentation >= <ari> >= <ari> <boo> supérieur ou égal à
— —<ari> <ari> pré décrémentation instanceof <val>instanceof<cla> <boo> test de type
+ <ari>— <ari> post décrémentation
- +<ari> <ari> signe positif == <val>==<val> <boo> égal à
! -<ari> <ari> signe négatif != <val>!=<val> <boo> différent de
(type) !<boo> <boo> complément logique
<ent>&<ent> <ent> ET bit à bit
(type)<val> <val> changement de type &
<boo>&<boo> <boo> ET booléen
* <ari>*<ari> <ari> multiplication <ent>ˆ<ent> <ent> OU exclusif bit à bit
/ <ari>/<ari> <ari> division ˆ
<boo>ˆ<boo> <boo> OU exclusif booléen
% <ari>%<ari> <ari> reste de la division
<ent>|<ent> <ent> OU bit à bit
+ <ari>+<ari> <ari> addition |
<boo>|<boo> <boo> OU booléen
- <ari>-<ari> <ari> soustraction
+ <str>+<str> <str> concaténation && <boo>&&<boo> <boo> ET logique
décalage de bits || <boo>||<boo> <boo> OU logique
<< <ent> << <ent> <ent> à gauche
?: <boo>?<ins>:<ins> <ins> si...alors...sinon
>> <ent> >> <ent> <ent> décalage de bits
à droite = <var>=<val> <val> assignation

Légende
<ari> valeur arithmétique, <boo> valeur booléenne, <cla> classe, <ent> valeur entière, <ins> instruction, <str> chaîne de caractères (String),
<val> valeur quelconque, <var> variable
13/02/2023 POO-2 DR A. ABOUD 47

Structures de contrôle
➢Les structures de contrôle permettent d’exécuter un bloc d’instructions
• soit plusieurs fois (instructions itératives)
• soit selon la valeur d’une expression (instructions conditionnelles ou de choix
multiple).
➢ Dans tous ces cas, un bloc d’instruction est
• soit une instruction unique ;
• soit une suite d’instructions commençant par une accolade ouvrante “{” et se
terminant par une accolade fermante “}”.

13/02/2023 POO-2 DR A. ABOUD 48

24
13/02/2023

Instructions conditionnelles (if/else)


Syntaxe : Il est possible de définir
if (<condition>) { plusieurs conditions à
<bloc1> remplir avec les opérateurs
}[else {<bloc2>}] ET, OU (&& et ||)
<condition> doit renvoyer une valeur booléenne. Si celle-ci est vraie c’est <bloc1> (resp.
<instruction1>) qui est exécuté sinon <bloc2> (resp. <instruction2>) est exécuté.
La partie else <bloc2> est facultative.
if (a == b) {
a = 50 ;
b=0;
} else {
a=a-1;
}

13/02/2023 POO-2 DR A. ABOUD 49

Instructions conditionnelles (if/else)


Syntaxe :
if (<condition>) {<bloc1> }[else {<bloc2>}]
ou opérateur ternaire

Variable=<condition>?<instruction1 valeur_si_vrai>:<instruction2 valeur_si_faux>

Exemple:
int a=10, b=20;
int min= a<b ? a : b ;

int moyenne=13;
string resultat= moyenne<10 ? ‘’ refusé ’’ : ‘’admis ’’ ;

13/02/2023 POO-2 DR A. ABOUD 50

25
13/02/2023

Instructions conditionnelles (l’instruction switch)


Syntaxe : Exemple: int day = 4;
switch (day) {
case 1: System.out.println("Monday");
switch(expression) { break;
case 2: System.out.println("Tuesday");
case x: break;
// code block case 3: System.out.println("Wednesday");
break; break;
case 4: System.out.println("Thursday");
case y: break;
// code block case 5: System.out.println("Friday");
break; break;
case 6: System.out.println("Saturday");
default: // code block } break;
case 7: System.out.println("Sunday");
break; } // Outputs "Thursday" (day 4)

13/02/2023 POO-2 DR A. ABOUD 51

Instructions itératives (while)


Les instruction itératives permettent d’exécuter plusieurs fois un bloc d’instructions, et
ce, jusqu’à ce qu’une condition donnée soit fausse. Les trois types d’instruction itératives
sont les suivantes :
Tant Que...Faire... L’exécution de cette instruction suit les étapes suivantes :
➢ la condition (qui doit renvoyer une valeur booléenne) est évaluée. Si celle-ci est vraie on passe
à l’étape 2 sinon on passe à l’étape 4,
➢ le bloc est exécuté ;
➢ retour à l’étape 1;
➢ la boucle est terminée et le programme continue son exécution en interprétant les instruction
suivant le bloc.

Syntaxe : Exemple :
while (<condition>) {<bloc>} while (a != b) a++;

13/02/2023 POO-2 DR A. ABOUD 52

26
13/02/2023

Instructions itératives (do…while)


Faire...TantQue... L’exécution de cette instruction suit les étapes suivantes :
➢ le bloc est exécuté ;
➢ la condition (qui doit renvoyer une valeur booléenne) est évaluée. Si celle-ci est vraie
on retourne à l’étape 1, sinon on passe à l’étape 3;
➢ la boucle est terminée et le programme continue son exécution en interprétant les
instruction suivant le bloc.

Syntaxe : Exemple :
do {
do {<bloc>} while (<condition réalisée>); a++
} while (a != b);

13/02/2023 POO-2 DR A. ABOUD 53

Instructions itératives (for)


Pour...Faire Cette boucle est constituée de trois parties : (i) une initialisation (la déclaration de
variables locales à la boucle est autorisée dans cette partie) ; (ii) une condition d’arrêt ; (iii) un
ensemble d’instructions à exécuter après chaque itération (chacune de ces instructions est
séparée par une virgule). L’exécution de cette instruction suit les étapes suivantes :
➢les initialisations sont effectuées ;
➢la condition (qui doit renvoyer une valeur booléenne) est évaluée. Si celle-ci est vraie on
passe à l’étape 2, sinon on passe à l’étape 6 ;
➢le bloc principal est exécuté ;
➢les instructions à exécuter après chaque itération sont exécutées ;
➢retour à l’étape 2 ;
➢la boucle est terminée et le programme continue son exécution en interprétant les instructions
suivant le bloc principal.

13/02/2023 POO-2 DR A. ABOUD 54

27
13/02/2023

Instructions itératives (for)


Syntaxe :

for (<compteur>;<condition>;<instr_post_itération>)
{
<bloc instructions>
}

Exemple :

for (int i = 0, j = 49 ; (i < 25) && (j >= 25); i++, j--) {


if (tab[i] > tab[j])
{
int tampon = tab[j];

13/02/2023 POO-2 DR A. ABOUD 55

Instructions break et continue


L’instruction break est utilisée pour sortir immédiatement d’un bloc d’instructions (sans
traiter les instructions restantes dans ce bloc). Dans le cas d’une boucle on peut
également utiliser l’instruction continue avec la différence suivante :

➢ break : l’exécution se poursuit après la boucle (comme si la condition d’arrêt devenait


vraie➔ sotrir de la boucle) ;

➢ continue : l’exécution du bloc est arrêtée mais pas celle de la boucle. Une nouvelle
itération du bloc commence si la condition d’arrêt est toujours vraie.

13/02/2023 POO-2 DR A. ABOUD 56

28
13/02/2023

Instructions break et continue


Exemple:
public class Main {
public class Main { public static void main(String[] args) {
public static void main(String[] args) { int i = 0;
int i = 0; while (i < 10) {
while (i < 10) { if (i == 4) { Résultat:
System.out.println(i);
0
1 i++; 0
i++; 2
continue; 1
3
if (i == 4) { } 2
break; System.out.println(i); 3
} Résultat: i++; 5
} 0 } 6
} 1 7
}
2 8
} }
3 9

13/02/2023 POO-2 DR A. ABOUD 57

Casting des primitives


➢ Le casting (mot anglais) ou le transtypage, consiste à effectuer une conversion d’un
type à un autre.
➢ 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 surtypage.
✓ Vers un type plus particulier. On parle alors de sous-casting ou de soustypage.
➢ Exemple:
• int a=6; // le type int est codé sur 32 bits.
• long b; // le type long est codé sur 64 bits.

13/02/2023 POO-2 DR A. ABOUD 58

29
13/02/2023

Casting des primitives


➢ Sur-casting implicite: b=a;

➢ Sur-casting explicite: b=(long) a;

Exemple :

Le sous-casting ne peut se faire qu’explicitement.

❖ float a= (double) 5.5;

❖ double c= a;

❖ int d= 8;

❖ byte f=(byte)d;

13/02/2023 POO-2 DR A. ABOUD 59

Les conversions de type


➢Java est très strict du point de vue des données et il est parfois intéressant
de convertir une donnée d'un type primitif vers un autre type primitif,

➢Type de conversion: Il y a deux types de conversion.

❖ Les conversions sans perte d'information

❖ Les conversions qui impliquent une perte d'information.

➢Il n'y a pas de perte d'information lorsque la grandeur du nombre converti est
conservée.

13/02/2023 POO-2 DR A. ABOUD 60

30
13/02/2023

Les conversions de type


• Imaginons vouloir convertir un int qui vaut 1254 en un byte.
• Ça ne sera pas possible puisque qu'avec le type byte, on ne peut représenter que des valeurs
comprises entre -127 et 128.
• Si on fait la conversion, on va donc perdre de l'information.

Conversions sans perte d'information Conversions avec perte d'information


De Vers De Vers
byte short, int, long, float, double short byte, char
short int, long, float, double char byte, short
char int, long, float, double int byte, short, char
int long, float, double long byte, short, char, int
long float, double float byte, short, char, int, long
float double double byte, short, char, int, long, float

13/02/2023 POO-2 DR A. ABOUD 61

Les conversions de type


Il y a 4 contextes possibles de conversion (cast) :

➢Conversion explicite

➢Affectation

➢Promotion arithmétique

➢Conversion par le compilateur

13/02/2023 POO-2 DR A. ABOUD 62

31
13/02/2023

Les conversions de type


Conversion explicite
➢Il est utile pour réaliser des conversions soit avec ou sans perte d'information
➢On doit faire un cast, aussi appelé conversion explicite.
➢L'opérateur de cast: est constitué de deux parenthèses entre lesquelles se trouve un
type de donnée (type), précisément celui vers lequel la conversion doit avoir lieu (int).
int x = 292;
float f = (float) x; // Conversion sans perte d'information
byte b = (byte) x; // Conversion avec perte d'information Output:
char c = (char) b; // Conversion d'un byte vers un char 292.0
System.out.println (f); 36
System.out.println (b);
$
System.out.println (c);
System.out.println ((byte) c); 36

13/02/2023 POO-2 DR A. ABOUD 63

Les conversions de type


Affectation:
➢ Une conversion par affectation intervient lorsqu'une valeur d'un certain type est
affectée à une variable d'un autre type.
➢ Lorsqu'on écrit x = y, la valeur de y va être convertie dans le type de la variable x,
➢ Seules les conversions sans perte d'information sont possibles; les autres, ainsi que
la conversion de byte vers char, vont produire une erreur lors de la compilation.
float money;
int dollars = 25;
money = dollars; // Conversion de int vers float
System.out.println (money);

✓ L'exécution de ces dernières affiche 25.0 à l'écran. Pourquoi le .0 ? Car la valeur 25 de type int à été
convertie en un float lors de l'affectation money = dollars.
✓ Cette conversion étant bien sans perte d'information, elle a pu se produire implicitement.

13/02/2023 POO-2 DR A. ABOUD 64

32
13/02/2023

Les conversions de type


Promotion arithmétique
➢La promotion arithmétique intervient automatiquement lorsque certains opérateurs
mathématiques doivent modifier leurs opérandes pour pouvoir exécuter l'opération.
➢Exemple:
✓ diviser un float par un int, la valeur du dénominateur sera promue en un type float avant
la division, afin que le résultat de la division soit un float.
➢Les opérandes d'un opérateur sont donc convertis vers le type requis par l'opérateur.
➢Les opérateurs arithmétiques existent en quatre versions : double, float, long et int.

float num = 10.0F; • L'exécution du programme affiche 5.0 à l'écran puisqu'un


int denom = 2; des deux opérandes de l'opérateur / est de type float, ce
System.out.println (num / denom); qui implique que le résultat sera également un float.

13/02/2023 POO-2 DR A. ABOUD 65

Les conversions de type


Conversion par le compilateur:

➢les conversions par le compilateur. Il s'agit de conversions avec perte d'information,


mais qui sont autorisées et effectuées de manière implicite.

Les byte sont stockés sur 8 bits et sont donc compris


entre -128 et 127.
final byte B = 50;
Le compilateur se rend compte que la valeur 50 est
final short S = 25000;
comprise entre les deux limites et que la conversion ne
short sum = B + S;
résultera donc pas en une perte de précision.
Celle-ci est donc autorisée par le compilateur.
Resultat = 25050

13/02/2023 POO-2 DR A. ABOUD 66

33
13/02/2023

Exemple Conversion par le compilateur:


class Test {
public static void main(String[] args) {
Exemple, les instructions suivantes ne byte t = 512;
short s = 23.0;
compileront pas int i = 12L;
System.out.println("int to byte"+t);
System.out.println("flot to short"+s);
System.out.println("long to int"+i);
}
}
javac /tmp/mOF6NInlJm/Test.java
/tmp/mOF6NInlJm/Test.java:7: error: incompatible types: possible lossy conversion from int to byte
byte t = 512;
^
/tmp/mOF6NInlJm/Test.java:8: error: incompatible types: possible lossy conversion from double to short
short s = 23.0;
^
/tmp/mOF6NInlJm/Test.java:9: error: incompatible types: possible lossy conversion from long to int
int i = 12L;
^
3 errors

13/02/2023 POO-2 DR A. ABOUD 67

Les conversions de type boolean


Type boolean
➢ on ne peut convertir une donnée boolean vers aucun autre type primitif et cette
interdiction est également valable dans l'autre sens.
➢ Bien que dans d'autres langages de programmation, il y a une correspondance entre
la valeur true et l'entier 1 et entre la valeur false et l'entier 0, ce n'est pas du tout le
cas en Java.
int i = 3;
➢ Le type boolean ne peut pas être converti en entier. // Impossible en JAVA !!!!!
if( i ) {
➢ Le type int ne peut pas être traité comme un booléen. // ne peut pas compiler
...
}
// Correct en Java
if( i != 0 ) {
...
}
13/02/2023 POO-2 DR A. ABOUD 68

34
13/02/2023

Les enveloppeurs (wearpers)


➢ Les primitives peuvent être "enveloppées" dans un objet provenant d'une classe prévue à cet
effet et appelée Wrapper (mot anglais signifiant enveloppeur).
➢ Les enveloppeurs sont donc des objets pouvant contenir une primitive et auxquels sont
associés des méthodes permettant de les manipuler.
Enveloppeur Primitive associée
Character char
Byte byte
Short short
Integer int
Long long
Float float
Double double
Boolean boolean
Void void

13/02/2023 POO-2 DR A. ABOUD 69

Les enveloppeurs (wearpers)


Java vous fournit un ensemble de classe est de méthode: une classe est fournie par
type primitif :
➢java.long.Byte : pour le type byte
➢java.long.Short : pour le type short
➢java.long.Integer : pour le type int
➢java.long.Long : pour le type long
➢java.long.Float : pour le type float
➢java.long.Double : pour le type double
➢java.long.Boolean : pour le type boolean

13/02/2023 POO-2 DR A. ABOUD 70

35
13/02/2023

Afficher un message sur l’écran


➢ Pour afficher un message sur l’écran on utilise la méthode print ou println de la
classe System.

➢ Println permet d’afficher le message sur console et retourner à la ligne.

➢ La syntaxe:

System.out.println (“TEXT”);

➢ La classe System sont des classes du package java.util

13/02/2023 POO-2 DR A. ABOUD 71

Les bibliothèques de java


Les classes prédéfinies en Java sont standardisées et placées dans des bibliothèques dont
les noms sont eux-mêmes standard
➢ java.lang contient les classes de base (chaînes de caractères, mathématiques, tâches, exceptions ...)

➢ java.util contient des classes comme vecteurs, piles, files, tables ...

➢ java.io contient les classes liées aux entrées/sorties texte et fichier

➢ java.awt contient les classes pour les interfaces (fenêtres, boutons, menus, graphique, événements ...)

➢ javax.swing contient les classes pour les interfaces (évolution de awt)

➢ java.net contient les classes relatives à internet (sockets, URL ...)

➢ java.applet contient les classes permettant de créer des applications contenues dans des pages en HTML

13/02/2023 POO-2 DR A. ABOUD 72

36
13/02/2023

Les bibliothèques de java


➢Pour pouvoir utiliser les classes de ces bibliothèques il faut y faire référence en début
de fichier en utilisant la directive import suivie du nom de la classe de la bibliothèque ou
de * pour accéder à toutes les classes de cette bibliothèque:

exemple: import java.io.*


➢Certaines de ces bibliothèques contiennent des sous-bibliothèques qu’il faut
explicitement nommer (par exemple java.awt.events.* pour les événements)

13/02/2023 POO-2 DR A. ABOUD 73

37

Vous aimerez peut-être aussi