CH - 1 - Fondements Du Langage Java - Complet
CH - 1 - Fondements Du Langage Java - Complet
PROGRAMMATION JAVA
POUR LES SCIENCES DE DONNÉES
Partie 1 : Java
Chapitre 1 : Fondements du langage Java
Pr. A. DARGHAM
Département de Mathématiques & Informatique
ENSA, Khouribga
1990
• Lancement du projet Java chez Sun Microsystems.
• Sous la direction de James Gosling, Mike Sheridan et
Patrick Naughton.
• Objectif Développer un langage de
programmation simple, robuste et portable.
1991 : Oak
• Initialement, le langage fut nommé « Oak » et visait à
développer un langage pour les appareils
électroniques embarqués, comme les décodeurs de
télévision ou les appareils domestiques intelligents.
• Il s’agit d’un petit interprète fiable, indépendant de
l'architecture et réalisé au départ par extension du
langage C++. 2
Extension de C++
• James Gosling a utilisé C++ comme langage de base
pour écrire Oak en 1991.
• Il a voulu améliorer certains aspects de C++, en
particulier pour le rendre plus simple et plus sécurisé.
• Or, C++ n’était pas à la hauteur.
3
12/11/2024
Problèmes du C++
• Recompilation dès qu'une nouvelle puce arrive.
• Complexité de programmation pour l’écriture de
logiciels fiables C++ n’est pas sécurisé.
• Pas de gestion automatique de la mémoire (pas de
ramasse-miettes).
• Aucune gestion de la concurrence (absence de
threads avant la version C++.11). 4
Motivations de Gosling
• Créer un langage qui élimine certaines des erreurs
courantes associées à la gestion manuelle de la
mémoire et aux pointeurs.
• Résultats la gestion automatique de la mémoire
(Garbage collector, ramasse-miettes) et l’absence de
pointeurs explicites.
5
1995-96
• Hotjava Lancement du 1er navigateur Web (écrit en
Java) capable de charger de petits programmes Java
(appelés applets) à partir d’Internet et de les exécuter
dans le navigateur
• 1996 Sortie de la 1ère version du JDK.
Java
• L’engouement pour Java a été amplifié par l’essor
d’Internet.
• Au fil du temps, Java s’est imposé comme l’un des
langages de programmation les plus utilisés dans
tous les domaines.
• En 2009, Oracle a racheté Sun Microsystems et a pris
en charge le développement de Java. 9
12/11/2024
12
12/11/2024
13
18
12/11/2024
21
12/11/2024
22
JSE
• Java Standard Edition principalement pour les
applications client sur PC et postes de travail.
JEE
• Java Entreprise Edition avec des API importantes
pour les applications Web d’entreprise basées sur des
architectures client-serveur.
24
12/11/2024
JME
• Java Micro Edition pour les petits appareils tels
que les ordinateurs de poche et pour les systèmes
embarqués.
Smartcard Edition
• Java Entreprise Edition pour utilisation sur les
cartes à puce.
25
SDK
• Standard Software Development Kit ensemble
d’outils pour le développement d’applications pour
une plateforme spécifique (Java, Android, iOS, etc)
26
33
12/11/2024
Commentaires
• Java reconnaît trois types de commentaires :
• Commentaires sur une seule ligne //…
• Commentaires sur plusieurs lignes : /* … */
• Commentaires sur la documentation : /** … **/ (
utilisés par l’outil SDK « javadoc » pour générer
automatiquement la documentation du
programme). 35
12/11/2024
Identificateurs
• Permettent de nommer les entités d’un programme
(variables, classes, interfaces, méthodes et packages).
• Ils peuvent être constitués de plusieurs lettres, traits
de soulignement « _ », symboles « $ » (considérés
comme des lettres) et chiffres.
• Le 1er caractère d’un identificateur doit être une lettre.
36
Identificateurs
• Java est sensible à la casse une distinction est
faite entre majuscules et minuscules.
• Un identificateur ne doit pas correspondre à un mot-
clé (keyword) du langage.
• Un identificateur doit être différent des littéraux
« true », « false » et « null ».
37
Unicode
• L’Unicode est un « jeu de caractères standardisé » qui
peut être utilisé pour représenter les caractères de
toutes les langues courantes.
• Un caractère Unicode est codé sur 16 bits ce qui
permet d’écrire 65 536 caractères différents.
• Les 128 premiers caractères du jeu de caractères
Unicode sont les caractères ASCII (7 bits). 38
12/11/2024
Mots-clés
39
Variables
• Les données sont représentées dans les programmes
par des variables.
• Une variable correspond à un espace de stockage
dans la mémoire principale dans lequel est stockée la
valeur actuelle de la variable.
• Les variables ne peuvent contenir que des valeurs très
spécifiques. 40
Variables
• Ceci est déterminé par le type de données.
• Une variable est déclarée sous la forme suivante :
Variables
42
Types primitifs
43
Littéraux
• Littéral valeur constante.
• Le type « boolean » possède deux littéraux : « true »
et « false ».
• Impossible de convertir les valeurs de vérité en
valeurs entières.
44
12/11/2024
Littéraux
• Le type « char » est utilisé pour stocker des caractères
individuels du jeu de caractères Unicode.
• Les littéraux sont placés entre guillemets simples « ' »
et spécifiés sous forme de caractères Unicode ou de
séquences d’échappement.
45
Littéraux
46
Littéraux
• Les types « byte », « short », « int », « long » sont
signés.
• Les littéraux peuvent être écrits sous forme
• Décimale : chiffres de 0 à 9.
• Octale : préfixe « 0 », chiffres de 0 à 7.
• Hexadécimale : préfixes « 0x » ou « 0X », chiffres
de 0 à 9, plus les littéraux abcdef ou ABCDEF. 47
12/11/2024
Littéraux
• Les nombres négatifs sont représentés en les faisant
précéder du signe moins « - ».
• Les littéraux entiers sont de type « int », sauf si la
lettre « l » ou « L » est ajoutée comme suffixe.
• Dans ce cas, ils sont de type « long ».
48
Littéraux
• Les littéraux des types « float » et « double » sont
écrits en notation décimale.
• Ils se composent d’une partie pré-virgule, d’un point
décimal « . », d’une partie décimale, d’un exposant et
d’un suffixe.
• Au moins le point décimal « . », l’exposant ou le
suffixe doivent être présents. 49
Littéraux
• La partie pré-virgule (ou la partie post-virgule) peut
être omise.
• La partie pré-virgule et l’exposant peuvent être
précédés d’un signe « + » ou « - ».
• L’exposant introduit par « e » ou « E » et le suffixe
sont facultatifs.
50
12/11/2024
Littéraux
• Le suffixe « f » ou « F » désigne un littéral flottant, le
suffixe « d » ou « D » désigne un littéral double.
• Si aucun suffixe n’est précisé, il s’agit d’un littéral
double.
• Voici quelques exemples :
51
Littéraux
• Les chaînes constantes sont des séquences de
caractères littéraux entourées de guillemets doubles
« " ».
• Exemple :
52
Littéraux
• Cependant, il n’y a pas de type de données primitif
associé, mais plutôt une classe « String » qui peut être
utilisée pour créer des chaînes de caractères.
• L’opérateur « + » peut être utilisé pour concaténer des
chaînes de caractères.
53
12/11/2024
Opérateurs arithmétiques
56
12/11/2024
Opérateurs arithmétiques
• Ils ont des opérandes numériques (entiers ou réels) et
renvoient une valeur de retour numérique.
• Si les opérandes sont de types différents, une
conversion de type « ascendante » est
automatiquement effectuée.
57
Opérateurs arithmétiques
• Le plus petit type des deux opérandes est converti
dans le type du plus grand.
• Le type de résultat correspond au plus grand des
deux opérandes.
• Lors de la division de nombres entiers, le résultat est
le quotient entier des deux nombres (13/5 vaut 2).
58
Opérateurs arithmétiques
• L’opérateur modulo « % » calcule le reste « r = a %
b » d’une division entière (ou réelle) de « a » par
« b ».
• Exemples :
• « 13 % 5 » vaut 3
• « 13.8 % 5.6 » vaut 2.6.
59
12/11/2024
Opérateurs arithmétiques
• Comme en C++, Java offre les opérateurs
d’incrémentation « ++ » et de décrémentation « -- »
qui ne peut être utilisé que sur des variables.
• Une distinction est faite entre « préfixe » et
« postfixe », selon que l’opérateur est avant ou après
l’opérande : « a++ », « ++a », « a-- » ou « --a ».
60
Opérateurs relationnels
• Ils comparent deux expressions entre elles le
résultat est de type booléen.
61
Opérateurs logiques
• Ils relient les valeurs de vérité entre elles.
• Java fournit les opérations logiques : la négation, la
conjonction, la disjonction inclusive et la disjonction
exclusive.
• La conjonction et la disjonction inclusive sont
disponibles en deux versions.
62
12/11/2024
Opérateurs logiques
• Dans la variante dite courte, le deuxième opérande
n’est plus évalué lorsque le résultat de l’expression
globale a déjà été déterminé.
• Par exemple, « A && B » est faux si « A » est faux,
quelle que soit la valeur de vérité de « B ».
• L’expression « ! a » renvoie false si « a » est vrai
et true si « a » est faux. 63
Opérateurs logiques
64
Opérateurs logiques
65
12/11/2024
Opérateurs bit-à-bit
• Ils travaillent sur la représentation binaire des
opérandes (8, 16, 32 ou 64 bits) qui doivent être de
types entiers (char, byte, short, int ou long).
• Par exemple, « ~a » est le complément à un du
nombre « a » : il est créé à partir du nombre « a » en
inversant tous les bits de « a » : « 0 » « 1 » et « 1 »
« 0 ». 66
Opérateurs bit-à-bit
• Avec les opérateurs de décalage, tous les bits du
premier opérande sont décalés vers la gauche ou la
droite d’autant de places que spécifié dans le
deuxième opérande.
• Lors d’un décalage à gauche, des « 0 » sont ajoutés à
partir de la droite.
67
Opérateurs bit-à-bit
• Lors d’un décalage à droite, des « 0 » sont ajoutés
depuis la gauche si le premier opérande est positif.
• S’il est négatif, des « 1 » sont ajoutés.
• Avec l’opérateur « >>> », les « 0 » sont toujours
ajoutés à partir de la gauche.
68
12/11/2024
Opérateurs bit-à-bit
69
Opérateurs bit-à-bit
70
Opérateurs d’affectation
• Java offre l’opérateur d’affectation simple et
plusieurs opérateurs d’affectation composée.
• Avec l’affectation simple « = », l’expression de droite
est évaluée et affectée à la variable de gauche.
• Les types des deux côtés doivent être compatibles.
• Une conversion automatique du côté droit vers le type
de la variable est effectuée si nécessaire. 71
12/11/2024
Opérateurs d’affectation
• Une affectation composée « a op= b » correspond à
« a = a op b ».
• Par exemple « a += b » signifie « a = a + b ».
72
Opérateur ternaire
• L’opérateur conditionnel « ?: » nécessite trois
opérandes : une condition et deux expressions.
• Il est présenté sous la forme :
Condition ? Expression_1 : Expression_2
• La condition est une expression booléenne.
73
Opérateur ternaire
• Si la condition est vraie, la valeur de
« Expression_1 » est obtenue, sinon c’est la valeur de
« Expression_2 » qui est obtenue.
• L’opérateur de condition a la priorité 12.
74
12/11/2024
Opérateur ternaire
• Exemples :
• Valeur absolue de x x > 0 ? x : -x
• Maximum de x et y x > y ? x : y
75
Conversion implicites
• Une expression mixte contient des opérandes de
types différents 3 + 2.5.
• Dans ce cas le compilateur procède à une conversion
implicite de types.
• La conversion de types suit la hiérarchie suivante :
76
Exemple :
• Soit l’expression « a * b + c », où « a » de type int,
« b » de type long et « c » de type float.
• « a » est convertie en long.
• « a * b » de type long sera convertie en float.
• Le résultat final est de type float.
77
12/11/2024
Promotion numérique
• Les opérateurs arithmétiques ne sont pas définis pour
les types char, byte et short.
• Java prévoit que toute valeur de l’un de ces trois
types apparaissant dans une expression est d’abord
convertie en int.
78
79
80
12/11/2024
81
Exemples :
82
Bloc d’instructions
• En java, une instruction simple doit se terminer par
« ; ».
• Un bloc d’instructions est une suite d’instructions (de
toutes sortes) placées entre accolades « { » et « } ».
• Les instructions d
83
12/11/2024
Instruction « if »
84
Instruction « switch »
85
Instruction « switch »
• Expression : doit être de type char, byte, short, int,
énumération ou String.
• Les instructions sont simples, structurées ou des
blocs.
86
12/11/2024
Instruction « for »
Instruction « for »
• Expression_2 expression booléenne quelconque
(sert pour tester l’arrêt d’exécution de la boucle).
• Expression_3 suite d’expressions quelconques
séparées par des virgules « , ». C’est le plus souvent
une incrémentation ou décrémentation du compteur
de la boucle.
88
Instruction « for »
• Instruction simple, structurée ou un bloc.
• Elle constitue le corps de la boucle.
89
12/11/2024
Instruction « while »
Instruction « do-while »
Instruction « break »
Instruction « break »
93
Instruction « continue »
Instruction « break »
Exemple :
98
12/11/2024
Exemples :
101
12/11/2024
102
Exercice 1
• Écrire un programme Java qui lit :
• une chaîne de caractères désignant le nom et le
prénom d’une personne.
• un entier désignant l’âge de cette personne.
• un réel (float) désignant la taille en mètres de cette
personne.
103
104
12/11/2024
106
Tableaux en Java
• Les tableaux permettent de stocker plusieurs valeurs
de même type dans une variable.
• Les éléments contenus dans un tableau sont repérés
par des indices (0 pour le premier élément).
• En langage Java, les tableaux sont des objets ils
sont donc manipulés par des références.
107
12/11/2024
Tableaux en Java
• Une variable de type « tableau » contient une
référence à un tableau.
• Les éléments d’un tableau sont crées par l’opérateur
« new ».
• En Java, la taille d’un tableau n’est fixé que lors de
son initialisation (et non pas lors de sa déclaration).
108
Tableaux en Java
• Les éléments d’un tableau peuvent être de type :
• Primitif char, byte, short, int, long, float,
double.
• Objet String, ou n’importe quel objet.
109
110
12/11/2024
111
Exemples :
112
Exemples :
113
12/11/2024
Exemples :
114
Tableaux en Java
• La création d’un tableau par l’opérateur new permet :
• d’allouer de la mémoire pour stocker les éléments
du tableau en fonction du type et de la taille du
tableau.
• initialiser par défaut chaque élément du tableau à
la valeur 0 (le 0 du type).
115
Exemples :
119
12/11/2024
Exemples :
120
122
12/11/2024
Exemples :
123
Exemple 1 :
126
127
129
131
12/11/2024
133
134
12/11/2024
135
136
137
12/11/2024
138
142
143
12/11/2024
145
146
12/11/2024
147
148
149
12/11/2024
Tableaux et méthodes
• Une méthode Java peut :
• avoir comme argument un tableau (de n’importe
quel type).
• retourner un tableau comme résultat.
• La taille du tableau ne doit pas être spécifiée dans les
deux cas elle peut être obtenue dans le corps de la
méthode via l’attribut « length ». 150
Tableaux et méthodes
• Le passage des tableaux comme arguments s’effectue
par référence et non pas par copie (comme les types
primitifs).
• La méthode agit directement sur le tableau et non sur
sa copie cela a pour conséquence que la méthode
peut modifier le tableau passé en argument.
151
152
12/11/2024
153
154
155
12/11/2024
Chaînes en Java
• Une chaîne de caractères est une séquence de
caractères.
• En Java, les chaînes de caractères sont des objets des
classes :
• « String » : chaînes de caractères non modifiables.
• « StringBuffer » : chaînes de caractères modifiables.
157
Classe « String »
• Déclaration :
158
12/11/2024
Classe « String »
• Déclaration et création :
159
Autres exemples
160
Autres exemples
Autres exemples
La chaîne vide
163
Remarque
• Un objet de type String n’est pas modifiable : il
n’existe aucune méthode qui permet de modifier le
contenu d’un objet String.
• L’affectation entre variables référençant des objets
n’affectent pas leurs contenus : elle ne concerne que
les valeurs des références.
164
12/11/2024
Exemple
La classe Math
• Les fonctions mathématiques les plus connues sont
regroupées dans la classe « Math » qui appartient au
package « [Link] ». On y trouve :
• Les fonctions trigonométriques : sin, cos, asin, …
• Les fonctions d’arrondi, de valeur absolue, ..., la racine
carrée (sqrt), La puissance (pow), l’exponentiel (exp),
le logarithme (log), etc.
168
La classe Math
• Ce sont des méthodes de classe (static).
169
Les wrappers
• Il existe des classes wrapper (enveloppes) qui permettent
de voir un type primitif comme un objet.
• Un wrapper est juste un objet stockant un type primitif :
boolean Boolean, byte Byte short Short
char Character, int Integer, long Long,
float Float, double Double
170
12/11/2024
Méthodes de Character
• isDigit(car) : retourne true si car est un chiffre.
• isSpace(car) : retourne true si car est un caractère blanc.
• isLetter(car) : retourne true si car est une lettre.
• isLowerCase(car) : retourne true si car est une lettre
minuscule.
• isUpperCase(car) : retourne true si car est une lettre
majuscule.
171
Méthodes de Integer
• parseInt(ch) : retourne un entier à partir de la chaîne ch.
• parseInt(ch, base) : retourne un entier dans la base
indiquée à partir de la chaîne ch.
Méthodes de Float
• parseFloat(ch) : retourne un float à partir de la chaîne ch.
172