Introduction à Java
Riadh BOUSLIMI
bouslimi.riadh@gmail.com
PRÉSENTATION GÉNÉRALE
2
Programmation orientée objet
Ressources et références
Programmer en Java, C. Delannoy, Ed. Eyrolles, 2014
Thinking in Java, B. Eckel, Prentice Hall, 2006
Traduction française diponible en ligne
http://bruce-eckel.developpez.com/livres/java/traduction/tij2/
Les tutoriels Oracle
https://docs.oracle.com/javase/tutorial/
La documentation de l’API standard
https://docs.oracle.com/javase/8/docs/api/
3
Programmation orientée objet
Plan du cours
Les bases
Introduction
Types primitifs et opérateurs
Classes et objets
Tableaux
Héritage et polymorphisme
Chaînes de caractères
Exceptions
Entrées-sorties
Généricité et collections
Compléments sur le langage
4
PRÉSENTATION
5
Programmation orientée objet
Paradigmes de programmation
Un paradigme de programmation est un ensemble de concepts et de
méthodes de programmation autorisés ou interdits.
Tout programme peut s’écrire dans n’importe quel paradigme mais la
façon de l’exprimer change.
Un paradigme va guider la conception et l’implémentation d’un
algorithme.
6
Programmation orientée objet
7
Programmation orientée objet
8
Programmation orientée objet
Historique
Simula-67 : Dahl et Nygaard http://www.simula.no
Smalltalk-71 : A. Kay http://www.smalltalk.org
C++ 79-85 : Stroustrup
Eiffel 85 : B. Meyer http://www.eiffel.com
Java 94-95 : J. Gosling/Sun http://java.sun.com
Ruby 95 : Y. "Matz" Matsumoto http://www.ruby-lang.org
C# 2000 : Microsoft http://www.learn-c-sharp.com
Scala 2003 : Martin Odersky http://www.scala-lang.org
10
LES NOTIONS ESSENTIELLES
11
Programmation orientée objet
Types de données
Réalise un Type Abstrait de données (au sens algorithmique)
Un type de données définit
Un domaine de valeur
Un ensemble d’opérations autorisées
En java, on distingue
Les types primitifs (entiers, flottants, booléens, caractères)
Les types référence, objets définis à partir des types primitifs et/ou d’autres
types références.
• Une couleur RGB est un triplet d’entiers
• Une image Bitmap est un ensemble de pixels de couleur
12
Programmation orientée objet
Types primitifs
En java, il existe 8 types primitifs
1 type booléen : boolean
4 types entiers : byte, short, int, long
2 types flottants : float, double
1 type caractère : char
A la différence d’autres langages (comme C++), la taille en mémoire des
types primitifs est entièrement défini par le langage.
Type byte short int long float double boolean char
Taille (en octets) 1 2 4 8 4 8 1 2
13
Programmation orientée objet
Variables
Pour déclarer une variable, on indique son type et son nom.
boolean isRunning;
double precision;
14
Programmation orientée objet
15
Programmation orientée objet
16
Programmation orientée objet
Constantes entières
On peut affecter une constante entière à une variable.
byte val = 13; int val2 = 6;
Par défaut, les constantes entières sont de type int. On peut les forcer à
être de type long à l’aide du suffixe L.
long val = 0x100000000; long val = 0x100000000L;
-1 != 0xFFFFFFFFL && -1 != 037777777777L // true
17
Programmation orientée objet
Opérations autorisées
Comparaisons == != < <= > >=
Opérations arithmétiques + - * /
Exemples
13.0 / 2.0 -> 6.5
13.0 / 0.0 -> +∞
Les opérations arithmétiques ne produisent jamais d’erreur sur les
nombres flottants.
18
Programmation orientée objet
Constantes flottantes
On peut affecter une constante flottante à une variable.
double val = 13.0; double val = 1.3e1;
La constante doit avoir un valeur absolue autorisée par le type.
double val = 10e308;
Par défaut, les constantes flottantes sont de type double. On peut les
forcer à être de type float à l’aide du suffixe f.
float val = 0.1; float val = 0.1f;
Le calcul sur les nombres flottants est sujet aux erreurs de précision.
0.8 == 0.4 + 0.4; // true
0.8 == 0.7 + 0.1; // false
Il existe des constantes spéciales pour les nombres flottants.
Float.POSITIVE_INFINITY Float.NEGATIVE_INFINITY Float.NaN
Double.POSITIVE_INFINITY Double.NEGATIVE_INFINITY Double.NaN
20
Programmation orientée objet
21
Programmation orientée objet
Opérations et promotion
Exemple de l’addition
int +(int, int)
long +(long, long)
float +(float, float)
double +(double, double)
Promotion
byte -> short -> int -> long -> float -> double
char -> int -> long -> float -> double
Exemples
1 + 2L; // 3L
1 + 2.0; // 3.0
'e' - 'a'; // 4
21
Programmation orientée objet
Affectations combinées +=
Incrémente une variable
<variable> += <expression>;
Attention
Surchargée pour tous les types numériques
• byte, short, int, long, float, double
Différent d’une addition
• byte b = 127;
• b = b + b; b += b;
int +(int, int) byte +=(int)
Variantes
-= *= /= <<= >>= >>>= &= |=
b++ ++b
&&= et ||= n’existent pas!
22
Programmation orientée objet
Cast
Par promotion, on peut écrire :
byte shortVar = 10;
int var = shortVar; // var = 10
23
Programmation orientée objet
Structure de contrôle : if
La syntaxe du branchement conditionnelle est
if (condition) instruction_1
[else instruction_2]
Une instruction peut-être
une expression terminée par un point virgule (une instruction simple)
Un bloc d’instructions entre accolades
if (x % 2 == 0) x /= 2; // instruction simple if (x % 2 == 0) { // mieux
else { // bloc x /= 2;
x *= 3; } else {
x++; x *= 3;
x++;
}
}
Un bloc peut se limiter à une seule instruction.
On conseille de toujours utiliser un bloc pour les structures de contrôle.
24
Programmation orientée objet
case 1:
x *= 3;
x++;
default:
x = -1;
}
x == ?
26
Programmation orientée objet
case 1:
x *= 3; Donc toutes ces instructions sont exécutées
x++;
default:
On ajoute le mot clé break pour sortir d’un cas.
x = -1;
}
x == -1
27
Programmation orientée objet
On exécute le corps de la boucle tant que la condition est vraie. Le corps
s’exécute au moins une fois.
Le point virgule fait partie de la syntaxe.
30
Programmation orientée objet
30
Programmation orientée objet
31
Programmation orientée objet
32
Programmation orientée objet
Classe : encodage
Couleur Complexe
class CouleurRGB { class ComplexeCartesien {
byte rouge; double reelle;
byte vert; double imaginaire;
byte bleu; }
}
33
Programmation orientée objet
→
Complexe c1; // référence Complexe c2; // référence
c1 = new Complexe(1, -1); c2 = new Complexe(2, 0);
c1 : Complexe c2 : Complexe
c1 c2
34
Programmation orientée objet
35
Programmation orientée objet
Notation pointée
Pour accéder aux membres d’un objet
Membre = champs + méthodes
Complexe
reelle : double
Exemple imaginaire : double
norme() : double
Complexe c1 = new Complexe();
c1.reelle désigne le champ reelle de c1
c1.norme() désigne la méthode norme de c1
36
Programmation orientée objet
Méthodes et paramètres
Données supplémentaires
Le calcul de la norme nécessite seulement la valeur de ‘reelle’ et de ‘imaginaire’
Certaines méthodes nécessitent des paramètres
• Signature
int addition(int, int);
• Corps
int addition(int x, int y) {
return x + y ;
}
37
Programmation orientée objet
Classe Moyenne
class Moyenne { // bloc de déclaration de classe
/* Somme des notes obtenues */
int notes = 0;
/* Nombre de notes obtenues */
int nombreDeNotes = 0;
/* Ajoute une note à la moyenne */
void ajouteNote(int note) {
notes += note;
nombreDeNotes += 1;
}
/* Renvoie la moyenne des notes */
double calculMoyenne() {
return ((double) notes) / nombreDeNotes;
}
}
38
Programmation orientée objet
Classe String
Classe qui représente une séquence de caractères
Classe spéciale (utilisation très fréquente)
• Pas besoin d’utiliser new pour créer des instances
String str = "Un exemple!";
• Les objets sont immutables (on ne peut pas les modifier)
L’expression "rou" + "ge" fait intervenir 3 objets différents
Concaténation
int x = 20, y = 40;
40
Programmation orientée objet
Vocabulaire
m1
12
0
01
41
ENVIRONNEMENT DE DÉVELOPPEMENT
41
Programmation orientée objet
Compilateur
L’ordinateur (son processeur) ne comprend pas le code Java (code
source)
Un interpréteur interprète directement le code source (langage
interprété)
Le compilateur traduit (compile) le code source
Vers du code binaire natif (langage compilé)
• Spécifique à un processeur donné
• Spécifique au système d’exploitation utilisé
Vers un langage neutre (ex: bytecode)
• Ce langage neutre est alors interprété par la machine virtuelle java (Java Virtual Machine -
JVM)
42
Programmation orientée objet
43
Programmation orientée objet
44
Programmation orientée objet
e.ajouteNote(8);
e.ajouteNote(18);
e.ajouteNote(12);
double m = e.calculMoyenne();
System.out.println("Moyenne=" + m);
}
}
45
Programmation orientée objet
46