INTRODUCTION AU LANGAGE JAVA
Abdellaziz Walid Département G-Info
[Link]@[Link] 2020-2021
Motivation : Pourquoi étudier langage Java ?
2
Classement basé sur le TIOBE Index.
TIOBE Index 1 : Index qui mesure chaque mois la popularité de chaque langage de
programmation. 1. L'index TIOBE est issu de l'entreprise TIOBE Software BV basée aux Pays-Bas, à Eindhoven
Motivation : Pourquoi étudier Java ?
3
TIOBE Programming Language Index History
(2002- Early 2021)
Langage java : Leader éternel de l'index TIOBE depuis des années.
Langage C est devenu le plus utilisé par les développeurs pour les objets connectés
(Internet of things ou IoT ).
Un peu d’histoire
4
Le projet Java voit le jour en 1991, dans le secret d’une équipe de Sun
Microsystem.
Cette équipe (green team) a cherché à concevoir un langage applicable à de
petits appareils électriques (en code embarqué) : Green Project
The Green Team
Un peu d’histoire
5
Le Green Project a donc démarré afin d’étudier l’impact de la convergence entre les appareils
ménagers contrôlés numériquement et les ordinateurs.
En utilisant une syntaxe proche de celle de C++, ils ont fabriqué une télécommande digitale, munie
d’un écran tactile graphique et animé pour contrôler un équipement audio et vidéo de salon.
Cette télécommande fut programmée dans un langage nouveau, complètement indépendant du
processeur sur lequel il s’exécutait, rendant ainsi la télécommande unique en son genre.
Ce nouveau langage conçu par James Gosling, l’un des membres du Green Project est nommé Oak.
Oak devient alors FirstPerson. (Pas de succès commercial pour FirstPerson)
En 1993, on assiste à l’arrivée du protocole http et du navigateur Mosaic, ce qui fut un événement
crucial pour le projet. C’est à cette période que l’équipe comprit qu’Internet serait le réseau idéal
pour positionner leur produit.
En 1995, James Gosling dévoila un navigateur appelé WebRunner capable de montrer du contenu
html mélangé à des applets ( petite application qui se télécharge lors de la consultation de certains
sites Internet)
WebRunner devient HotJava et le site [Link] s’ouvre officiellement au grand public.
le 23 mai 1995, la dénomination de cette technologie sera Java (café en argot américain), en honneur
à la boisson préférée des programmeurs, c’est-à-dire le café.
20 avril 2009 : Sun Microsystems annonce son rachat par Oracle Corporation.
James Gosling : The founder and lead designer behind the
Java programming language
6
James Gosling
The Green
Team
Évolution des versions de Java au fil des années
7
1995: JDK 1.0 en version Béta (expérimentale).
1996 : JDK 1.0, appelé Java 1.0
1997 : JDK 1.1, appelé Java 1.1
1998 : JDK 1.2, appelé J2SE 1.2
2000 : JDK 1.3, appelé J2SE 1.3
2002 : JDK 1.4, , appelé J2SE 1.4
2004 : JDK 1.5, appelé J2SE 1.5
2006 : JDK 1.6, appelé Java SE 6
2011 : JDK 1.7, appelé Java SE 7
2014 : JDK 1.8, appelé Java SE 8
Septembre 2017 : JDK 9, appelé Java SE 9
Mars 2018 : JDK 10, appelé Java SE 10
Septembre 2018 : JDK 11, appelé Java SE 11
Mars 2019 : JDK12, Appelé Java SE 12
Septembre 2019 : JDK 13, appelé Java SE 13
Mars 2020 : JDK 14, appelé Java SE 14
Septembre 2020 : JDK 15, appelé Java SE 15
Mars 2021 : JDK 16, appelé Java SE 16
JDK : Java Development Kit J2SE : Java 2 Standard Edition SE : Standard Edition
Environnements de développement intégré JAVA
(IDE)
8
Un IDE ou un environnement de développement (Integrated Development
Environment) est un logiciel qui rassemble des outils permettant de développer
d'autres logiciels tels que des applications mobiles, des logiciels pour ordinateur
ou consoles de jeux, des sites web, etc... ainsi que de réaliser des librairies ou des
frameworks.
Les outils d'un IDE peuvent être :
Un éditeur de code intelligent (Coloration, autocomplétions, mise en forme) ;
Un simulateur (logiciel permettant de tester l'exécution de son logiciel) ;
Un compilateur (qui va transformer le code source rédigé par le développeur en code
binaire) ;
Un débogueur (fonctionnalité d'aide à la correction de bugs).
Top 10 Java IDE’s 2020
9
Eclipse
BlueJ
IntelliJ IDEA
JGRASP
Netbeans
Greenfoot
DrJava
JSource
JDeveloper
JCreator
Les plates-formes d’exécution JAVA
10
Java SE (Java Platform, Standard Edition) pour applications classiques,
desktop.
Jakarta EE (Jakarta Platform, Enterprise Edition)
pour développer et déployer des applications serveur, Web services, etc.
Java ME (Java Platform, Micro Edition):JavaME pour les applications embarqués, P
DA, téléphones, TV, etc.
Java Card est utilisée pour les cartes à puce, telles que les cartes bancaires, les cartes
SIM en communication mobile, etc.
JavaFX permet aux développeurs Java de créer une interface graphique pour des
applications de bureau, des applications internet riches et des applications smartphones
et tablettes tactiles.
Qu’est-ce qu’on peut produire avec JAVA ?
11
On peut faire de nombreuses sortes de programmes avec
Java :
Statistiques d’oracle corporation
12
97% des bureaux d’entreprise exécutent Java.
89% des bureaux (ou ordinateurs) des États-Unis exécutent Java.
9 millions de développeurs Java dans le monde.
Choix n°1 des développeurs.
Plate-forme de développement n°1.
3 milliards de téléphones mobiles exécutent Java.
100% des lecteurs Blu-ray livrés avec Java.
5 milliards de cartes Java utilisées.
125 millions de périphériques TV exécutent Java.
Les 5 fabricants d’équipement d’origine principaux fournissent Java ME
Motivation : Pourquoi JAVA est si Populaire ?
13
Points forts de Java?
14
Langage orienté objet
Langage Modulaire
Langage portable
Langage rigoureux
Langage sécurisé
La programmation procédurale vs orientée objet
15
Programmation procédurale VS Programmation orientée objet
La programmation procédurale vs orientée objet
16
Programmation procédurale VS Programmation orientée objet
JAVA : Langage orienté objet
17
Objets
JAVA : Langage orienté objet
18
Notion de classe d’objets
Pour un développeur java tout est objet.
Un objet est une variable (presque) comme les autres. Il faut
notamment qu’il soit déclaré avec son type.
Le type d’un objet est un type complexe (par opposition aux types
primitifs entier, caractère, …) qu’on appelle une classe.
le programmeur écrit uniquement des classes correspondant aux
objets de son système.
JAVA : Langage orienté objet (Classe)
19
Une classe regroupe :
Un ensemble de données (qui peuvent être des variables
primitives ou des objets)
un ensemble de méthodes de traitement de ces données
et/ou de données extérieures à la classe.
On parle d’encapsulation pour désigner le regroupement
de données dans une classe.
Exemple d’une classe en code JAVA
20 Le nom de la classe
Le
constructeur de
la classe
Les attributs
de la classe
Méthode 1 de
la classe
Méthode 2 de
la classe
JAVA : Langage orienté objet (Objet)
21
Un objet est une instance (anglicisme signifiant « cas
» ou « exemple ») d’une classe
Il est référencé par une variable ayant un état (ou
valeur).
Pour créer un objet, il est nécessaire de déclarer une
variable dont le type est la classe à instancier, puis de
faire appel à un constructeur de cette classe.
Exemple d’objets de la classe Rectangle
22
Objet rectangle = Instanciation de la classe Rectangle
Réservation de
Classe L’objet la mémoire
pour l’objet
Constructeur pour
initialiser l’objet
Accès aux variables
Nom de l’objet attribut
Accès aux méthodes
Nom de l’objet Nom méthode
Programme JAVA
23
Tout programme JAVA a au moins une classe.
Règle: toute classe publique doit être dans un fichier qui a le même nom que la classe
Règle: tout code doit être à l'intérieur d'une classe
Classe
exécutable
La
méthod
e Main
Ça définit une classe, qui est une unité de compilation
Comme il y a une méthode main, cette classe est « exécutable »
Pour exécuter un programme java il faut au moins une fonction main.
Points forts de Java?
24
Langage orienté objet
Langage Modulaire
Langage portable
Langage rigoureux
Langage sécurisé
Architecture intégrale vs architecture modulaire
25
Architecture intégrale Architecture modulaire
La modularité vise à réduire le degré de complexité qui affecte tout système
technique complexe.
JAVA : Langage modulaire !!
26
La programmation procédurale vs orientée objet
27
Programmation intégrale VS Programmation modulaire
JAVA : Langage Modulaire
28
La conception par classes, représentant à la fois les données,
les actions et les responsabilités des objets de cette classe,
permet de bien distinguer et séparer les concepts.
Le fait de définir des « interfaces », au sens « moyens et
modalités de communication avec l'extérieur » permet de
cacher les détails d'implémentation et d'éviter les
dépendances trop fortes.
Tout ça favorise la réutilisabilité et la composition /
délégation : l'assemblage des composants en respectant leurs
responsabilités
JAVA : Langage Modulaire
29
L'objectif de la modularité est de produire du code :
Facile à développer, à maintenir et à faire évoluer.
Réutilisable, tout ou en partie, sans avoir besoin de le
dupliquer.
Générique, et dont les spécialisations sont transparentes.
Points forts de Java?
30
Langage orienté objet
Langage Modulaire
Langage portable
Langage rigoureux
Langage sécurisé
Rappel : Compilateur vs Interpréteur
31
le compilateur traduit les programmes dans leur
ensemble : tout le programme doit être fourni en bloc
au compilateur pour la traduction.
l’interpréteur traduit les programmes instruction par
instruction dans le cadre d’une interaction continue
avec l’utilisateur.
JAVA : Langage Portable
32
N.B : JAVA utilisent à la fois un compilateur et un interpréteur.
(Pas comme C/C++ qui utilisent juste un compilateur)
Rappel : compilation d’un programme en C/C++
33
JAVA : Langage Portable
34
JAVA : Langage Portable
35
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
Il doit être interprété par la machine virtuelle de Java qui
transforme alors le code compilé en code machine
compréhensible par la machine.
C’est la raison pour laquelle Java est un langage portable : le
bytecode reste le même quelque soit l’environnement
d’exécution.
JAVA : Langage Portable
36
Bytecode
JAVA : Langage Portable
37
Bytecode
Bytecode Java est un langage intermédiaire entre compilation
et exécution.
Le terme Bytecode vient de Byte car chaque instruction de la
JVM est codée à l’aide d’un Byte (à chaque instruction
correspond un opcode ou code opération de 8 bits).
Exemple : l’addition de deux entiers est représenté par
l’opcode IADD et correspond à 60 en hexadécimal.
JAVA : Langage Portable
38
Points forts de Java?
39
Langage orienté objet
Langage Modulaire
Langage portable
Langage rigoureux
Langage sécurisé
JAVA : Langage rigoureux et sécurisé
40
Java est un langage rigoureux car la plupart des erreurs se
produisent à la compilation et non à l’exécution.
Java est un langage très rigoureux sur le typage de
données.
Java est un langage sécurisé car la JVM contrôle le
champ d'exécution d'un programme pour empêcher
d'aller faire des choses non autorisé :
accéder directement à certaine fonctions;
Injecter du code;
exécuter du code non prévus en injectant des paramètres;
accéder directement à la mémoire;
etc...
Il améliore la sécurité des données grâce à
l’encapsulation de données.
Autres Avantages : Ramasse miette (Garbage collector)
41
Ramasse miette Gestion automatique de la mémoire. (En C/C++
gestion manuelle calloc, malloc, realloc et free / destructeur).
Le ramasse-miettes est une fonctionnalité de la JVM qui a pour rôle de
gérer la mémoire notamment en libérant celle des objets qui ne sont plus
utilisés.
Mais comment ??
Le ramasse miette a plusieurs rôles :
s'assurer que tout objet dont il existe encore une référence n'est
pas supprimé.
récupérer la mémoire des objets inutilisés (dont il n'existe plus
aucune référence)
éventuellement défragmenter (compacter) la mémoire de la JVM
selon l'algorithme utilisé.
intervenir dans l'allocation de la mémoire pour les nouveaux
objets à cause du point précédent.
Autres Avantages
42
Pas de la notion de pointeurs.
Les Api Java disposes d’une bonne
documentation et d’exemples trouvables sur internet.
La communauté Java est énorme. Une question, un problème,
il y aura toujours quelqu’un pour vous répondre.
La rapidité de conception d’un programme, console, IHM, bref
c’est simple et rapide. Le fait que des tas de classes, api existent
déjà vous font gagner un temps fou.
Java est en constante évolution du fait de sa masse importante
d’utilisateur.
Cycle de développement d’un programme java
43
1. Les phases d’écriture et de correction se fait à l’aide d’un éditeur de texte (emacs,
geany, gedit, Notepad++, . . . ) ou d’une IDE (Netbeans, Eclipse, …).
Exemple: Notepad++ [Link]
2. La phase de compilation se fait à l’aide de la commande javac.
Exemple: javac [Link]
3. La compilation produit un fichier .class.
Exemple: le fichier [Link] est généré par le compilateur
4. La phase d’interprétation se fait à l’aide de la commande java.
Exemple: java Salut
Conventions de nommage en Java
44
Nom de classe :
Commencez chaque mot par une majuscule :
HelloWorld
MonPremierProgramme
Nom de variable ou méthode :
Commencez chaque mot par une majuscule, sauf le premier :
maPremiereVariable
maPremiereMethode
nb1
main
Usage non recommandé :
mapremierevariable
ma_premiere_variable
N.B : Il faut évidemment que l’identificateur ne soit pas un mot réservé du langage (comme int out et for).
La nature des variables en Java
45
Les variables locales comme les champs des classes et
des objets ne peuvent être que de deux natures :
De type « primitif »
De type évolué : tableau ou chaîne de caractères
(String) ou objet (Classe).
Types primitifs
46
Type primitif
47
Dans ce cas de type, la déclaration de la variable
réserve la place mémoire pour stocker sa valeur
(qui dépend de son type)
Type évolué
48
La déclaration d’une variable de type évolué ne fait que
réserver la place d'une référence (une sorte de pointeur) qui
permettra d'accéder à l'endroit en mémoire où est
effectivement stocké un :
objet
une chaîne de caractère (String)
un tableau
null si la référence est inconnue.
Type évolué : objet (Classe)
49
Type évolué : Les tableaux
50
Deux syntaxes pour l’allocation :
int[] monTableau = new int[10];
int monTableau[] = new int[10];
Type évolué : Les tableaux
51
Type évolué : chaîne de caractères (String)
52
Une chaîne de caractères est déclarée avec le mot-clé « String ».
Les chaînes de caractères ne sont pas considérées en Java comme un type
primitif ou comme un tableau de caractère. On utilise une classe
particulière, nommée String, fournie dans le package [Link].
Il se manipule comme un type de base :
String s = "hello world"; String s = new String ("hello world");
L‘operateur «+» est utilisé pour concaténer les chaînes de caractères.
Exemple :
Type évolué : chaîne de caractères (String)
53
Typage fort
54
Java est un langage à typage fort :
Chaque variable a un type.
La valeur doit être du même type que la variable.
On ne peut (normalement) pas mélanger des variables de type
différent.
Pourquoi?
Utilisation efficace de la mémoire.
Vérification de la logique du programme.
Typage fort
55
Un int à droite peut devenir un double à gauche mais pas vice versa :
int i =1;
double d=1.7;
d = i; Oui, .0 ajouté (la valeur de d est 1.0) :
Transtypage automatique int → double
i = d; Non !!!
Mais on peut forcer une conversion double → int :
i = (int) d ; Oui, valeur tronquée, i vaut 1
Transtypage explicite (explicit cast) : double → int
Attention : Valeur tronquée ne veut pas dire valeur arrondie !
Entrées-Sorties Standard
56
Un minimum d’interactivité...
Affichage :
[Link]("bonjour") / [Link]("bonjour") : prédéfinis dans Java.
Lecture (d’un entier) :
import [Link] ;
Scanner keyb = new Scanner([Link]) ;
int i = [Link]() ;
Lecture d’une chaine de caractère
import [Link] ;
Scanner sc = new Scanner([Link]);
[Link]("Veuillez saisir un mot :");
String str = [Link]();
[Link]("Vous avez saisi : " + str);
Opérateurs dans JAVA
57
Commentaire
58
(non traités par le compilateur)
/* commentaire sur une ou plusieurs lignes */
Identiques à ceux existant dans le langage C
// commentaire de fin de ligne
Identiques à ceux existant en C++
/** commentaire d'explication */
Les commentaires d'explication se placent généralement juste avant une
déclaration (d'attribut ou de méthode)
Ils sont récupérés par l'utilitaire javadoc et inclus dans la documentation ainsi
générée.
Affectation
59
le signe = est l'opérateur d'affectation et s'utilise avec
une expression de la forme:
variable = expression
ou
Variable = valeur;
L'opération d'affectation est associative de droite à
gauche : il renvoie la valeur affectée ce qui permet
d'écrire :
x = y = z = 0;
Structures de contrôle conditionnelles
60
L'instruction conditionnelle if : La syntaxe de
l'instruction if
Structures de contrôle conditionnelles
61
Structures de contrôle conditionnelles imbriquées
62
Structures de contrôle à choix multiple
63
L'instruction Switch: la syntaxe est la suivante:
Structures de contrôle répétitives
64
Structures de contrôle répétitives
65
Structures de contrôle répétitives
66
L’instruction do .. while
Instruction break
67
break : l’exécution se poursuit après la boucle
(comme si la condition d’arrêt devenait vraie) ;
Instruction continue
68
continue : l’exécution du bloc est arrêtée mais pas
celle de la boucle.
Merci de votre attention