Programmation Orientée Objet – Java Les programmes

publicité
Java
Introduction
Les programmes informatiques
Les étapes du traitement des données :
▶
Un ordinateur reçoit des données de différents périphériques d’entrée
(Carte réseau, souris, capteurs).
▶
Ces données sont codées sous la forme d’une suite de 0/1.
Bertrand Estellon
▶
Département Informatique et Interactions
Aix-Marseille Université
Ces données sont transformées afin de produire une nouvelle
suite de 0/1.
▶
Ces nouvelles données sont envoyées sur un périphérique de sortie
(Carte réseau, écran, carte son) ou de stockage.
▶
Ces données sont transportées, stockées, transformées en ondes
sonores, etc.
Programmation Orientée Objet – Java
21 septembre 2016
Un programme informatique spécifie une suite d’instructions à effectuer
sur des données afin de produire de nouvelles données en sortie.
Bertrand Estellon (DII – AMU)
Programmation Orientée Objet – Java
Java
21 septembre 2016
1 / 171
Bertrand Estellon (DII – AMU)
Introduction
Programmation Orientée Objet – Java
Java
Les langages de programmation
La programmation orientée objet (POO)
Les langages de programmation ont été définis par les humains afin de
permettre à un humain de spécifier à un ordinateur une suite
d’instructions.
Les objectifs :
Il existe de nombreux langages de programmation :
▶
▶
▶
▶
▶
Langages impératifs et procéduraux (C, Pascal, Fortran...)
Langages logiques (Prolog...)
Langages fonctionnels (OCaml, Haskell, Erlang...)
Langages à pile (PostScript...)
Langages à objets (Java, C++, C#...)
▶
▶
Interprétation (Python, PHP, JavaScript, Ruby...)
Compilation et exécution (C++, C, Pascal...)
Semi-compilation et exécution sur machine virtuelle (Java...)
Bertrand Estellon (DII – AMU)
Programmation Orientée Objet – Java
21 septembre 2016
2 / 171
▶
Faciliter le développement et l’évolution des applications ;
▶
Permettre le travail en équipe ;
▶
Augmenter la qualité des logiciels (moins de bugs).
Solutions proposées :
L’exécution se fait soit par :
▶
21 septembre 2016
Introduction
3 / 171
▶
Découpler (séparer) les parties des projets ;
▶
Limiter (et localiser) les modifications lors des évolutions ;
▶
Réutiliser facilement du code.
Bertrand Estellon (DII – AMU)
Programmation Orientée Objet – Java
21 septembre 2016
4 / 171
Java
Introduction
Java
Le langage Java (utilisé dans ce cours)
Autres langages orienté objet
Le langage Java :
▶
est un langage de programmation orienté objet
▶
créé par James Gosling et Patrick Naughton (Sun)
▶
présenté officiellement le 23 mai 1995.
Les objectifs de Java :
▶
C++ : très utilisé
▶
C# : langage de Microsoft (appartient à .NET)
▶
Objective C : langage utilisé par Apple
▶
PHP : langage très utilisé sur le Web
▶
Python
▶
Ruby
▶
simple, orienté objet et familier ;
▶
Eiffel
▶
robuste et sûr ;
▶
Ada
indépendant de la machine employée pour l’exécution ;
▶
Smalltalk
▶
très performant ;
▶
...
▶
multi-tâches.
▶
Bertrand Estellon (DII – AMU)
La syntaxe change mais les concepts sont les mêmes !
Programmation Orientée Objet – Java
Java
21 septembre 2016
5 / 171
Bertrand Estellon (DII – AMU)
Introduction
21 septembre 2016
6 / 171
Introduction
Commentaires
Le programme HelloWorld.java :
Les commentaires permettent de rajouter du texte dans votre programme
sans que le compilateur ne le considère comme du code :
class HelloWorld {
public static void main(String arg[]) {
System.out.println("Hello world !");
}
}
class HelloWorld {
public static void main(String arg[]) {
/* Commentaire
sur plusieurs lignes.
*/
// sur une seule ligne.
System.out.println("Hello world !");
}
}
Compilation et exécution :
$ javac HelloWorld.java
$ ls
HelloWorld.java HelloWorld.class
$ java HelloWorld
Hello world !
Programmation Orientée Objet – Java
Programmation Orientée Objet – Java
Java
Mon premier programme Java
Bertrand Estellon (DII – AMU)
Introduction
21 septembre 2016
7 / 171
Bertrand Estellon (DII – AMU)
Programmation Orientée Objet – Java
21 septembre 2016
8 / 171
Java
Introduction
Java
Introduction
Instructions, variables et expressions
Les variables
Les données sont manipulées à l’aide de variables et d’expressions :
Une variable possède un nom, un type et une valeur.
class Exemple {
public static void main(String arg[]) {
int a = 5;
// Déclaration d'une variable
int b = 9;
// Déclaration d'une deuxième variable
b = b + a;
// L'expression "b+a" est évaluée
// et le résultat est affecté à "b"
a = 2*b - 3; // 25 est affecté à "a"
System.out.println(a); // Affichage du contenu de "a"
System.out.println(b); // Affichage du contenu de "b"
}
}
Programmation Orientée Objet – Java
Java
21 septembre 2016
Il est ensuite possible de changer la valeur de la variable :
int a = 3;
a = 12;
// Affectation d'une nouvelle valeur
En Java, le symbole = désigne l’affectation et n’a pas la même signification
qu’en mathématiques.
9 / 171
Bertrand Estellon (DII – AMU)
Programmation Orientée Objet – Java
Introduction
Java
Les types primitifs
byte
short
int
long
float
double
char
boolean
// Déclaration d'une variable
// de nom "a", de type "int" (entier)
// avec une valeur initiale égale à 3.
Lors de la compilation, Java vérifie que chaque expression située à droite
de l’affectation est compatible avec le type de la variable.
Notez que les instructions sont séparées par des points-virgules.
Bertrand Estellon (DII – AMU)
int a = 3;
21 septembre 2016
10 / 171
Introduction
Opérateurs de calcul
entier
entier
entier
entier
flotant
flotant
caractère
boolean
8 bits
16 bits
32 bits
64 bits
32 bits
64 bits
16 bits
1 bit
-128 à 127
-32768 à 32767
−231 à 231 − 1
−263 à 263 − 1
caractères Unicode
false ou true
0
0
0
0
0.0
0.0
\u0000
false
Négation
Addition
Soustraction
Multiplication
Division
Modulo
-a
a +
a a *
a /
a %
b
b
b
b
b
Opposé de a
Somme de a et b
Différence de a et b
Produit de a et b
Quotient de a et b
Reste de a divisé par b
Les constantes :
int a = 12;
double b = 13.5;
char c = 't';
boolean b = true;
Bertrand Estellon (DII – AMU)
Programmation Orientée Objet – Java
21 septembre 2016
11 / 171
Bertrand Estellon (DII – AMU)
Programmation Orientée Objet – Java
21 septembre 2016
12 / 171
Java
Introduction
Java
Opérateurs logiques et comparaisons
Introduction
Les expressions
Il est possible de fabriquer des expressions complexes à partir des variables,
constantes et opérateurs :
non
et
ou
!a
a && b
a || b
égal
différent
plus petit
plus grand
inférieur ou égal
supérieur ou égal
a == b
a != b
a < b
a > b
a <= b
a >= b
Bertrand Estellon (DII – AMU)
int a =
int b =
int c =
boolean
boolean
true si a est égal à false
true si a et b sont égaux true
true si a ou b est égal true
true
true
true
true
true
true
si
si
si
si
si
si
a
a
a
a
a
a
est
est
est
est
est
est
égal à b
différent de b
strictement plus petit que b
strictement plus grand que b
plus petit ou égal à b
plus grand ou égal à b
Programmation Orientée Objet – Java
Java
21 septembre 2016
13 / 171
++a
a++
--a
a--
▶
L’ordre du calcul respecte les priorités des opérateurs.
▶
Le type de chaque partie est déterminé à la compilation.
▶
Le compilateur associe les instructions “machine” qui correspondent
aux opérateurs et aux types des opérandes.
▶
Le compilateur connaît le type de l’expression et vérifie s’il est
compatible avec le type de la variable (dans le cas d’une affectation).
Bertrand Estellon (DII – AMU)
Programmation Orientée Objet – Java
Introduction
Java
Incrémentation, décrémentation et affectations
Pre-incrémente
Post-incrémente
Pré-décrémente
Post-décrémente
3;
7;
2*a + 7*b - (a+9)%(b-4);
d = a<=4 && b+2<=10;
e = !(a>=4 && b+2<=10);
21 septembre 2016
14 / 171
Introduction
Les affectations
Affectation
Addition
Soustraction
Multiplication
Division
Incrémente a de 1, puis retourne a
Retourne a, puis incrémente a de 1
Décrémente a de 1, puis retourne a
Retourne a, puis décrémente a de 1
Exemple :
a=b
a+=b
a-=b
a*=b
a/=b
Affecte b à a
Ajoute b à a
Soustrait b à a
Multiplie a par b
Divise a par b
Exemple :
int a = 10;
int b, c;
a++;
b = a++; // Déconseillé → b = a; a++;
c = --b; // Déconseillé → b--; c = b;
int a = 10;
a+=22;
int c = 12;
a+=2*c;
c*=4;
Il existe des opérateurs de ce type associés aux opérations logiques.
Bertrand Estellon (DII – AMU)
Programmation Orientée Objet – Java
21 septembre 2016
15 / 171
Bertrand Estellon (DII – AMU)
Programmation Orientée Objet – Java
21 septembre 2016
16 / 171
Java
Introduction
Java
Introduction
Les affectations sont des opérateurs
Les tableaux
La valeur retournée par l’évaluation d’une affectation est égale à la valeur
retournée par l’évaluation de sa partie droite.
Déclaration d’une variable de type “référence vers un tableau” :
int[] arrayOfInt;
double[] arrayOfDouble;
Exemple :
int a, b;
a = (b = 10);
/* ou */
a = b = 10;
Allocation d’un tableau :
arrayOfInt = new int[10];
arrayOfDouble = new double[3];
Étapes de l’évaluation de l’instruction :
▶
▶
▶
▶
▶
Utilisation d’un tableau :
La valeur 10 est affectée à b ;
(b = 10) vaut 10 ;
la valeur 10 est affectée à a ;
a = (b = 10) vaut 10 ;
cette valeur est ignorée.
Bertrand Estellon (DII – AMU)
arrayOfInt[0] = 5;
arrayOfInt[9] = 10;
arrayOfInt[2] = arrayOfInt[0] + 3*arrayOfInt[9];
arrayOfDouble[2] = arrayOfInt[2] + 3.5;
Programmation Orientée Objet – Java
Java
21 septembre 2016
17 / 171
Bertrand Estellon (DII – AMU)
Introduction
Programmation Orientée Objet – Java
Java
Les tableaux
Références et Garbage Collector
L’expression new int[10] retourne une “référence vers un tableau” :
Une variable de type “référence” peut valoir null :
int[] array = new int[10];
int[] array2 = array;
// Allocation d'un tableau
// Copie de la référence
21 septembre 2016
18 / 171
Introduction
int[] array = null;
// La variable "array" contient la référence "null".
// Elle pointe vers aucune instance.
Seule la référence est copiée, il n’y a qu’un seul tableau :
array[4] = 2; // Affectation d'une valeur à la 5ème case
System.out.println(array2[4]); // "5"
Important : Une référence contient soit null soit la référence d’un
tableau ou d’un objet compatible avec le type de la variable.
Le Garbage collector peut supprimer les éléments devenus innaccessibles :
Taille du tableau :
int[] array = new int[10];
array[3] = 6;
...
array = null;
// La mémoire utilisée pour le tableau peut être libérée
int[] array = new int[10]; // Allocation d'un tableau
int length = array.length; // Récupération de la taille
System.out.println(length);
/* ou directement */ System.out.println(array.length);
Bertrand Estellon (DII – AMU)
Programmation Orientée Objet – Java
21 septembre 2016
19 / 171
Bertrand Estellon (DII – AMU)
Programmation Orientée Objet – Java
21 septembre 2016
20 / 171
Java
Introduction
Java
Les instructions conditionnelles if
Introduction
Les instructions conditionnelles switch
La syntaxe :
La syntaxe :
switch (expression) {
case valeur1 : instruction; instruction; /*...*/ break;
case valeur2 : instruction; instruction; /*...*/ break;
/* ... */
default : instruction; instruction; /*...*/ break;
}
if (condition) instruction;
/* ou */
if (condition) instruction; else instruction;
Exemple :
boolean a =
boolean b =
int c = 10,
if (a || b)
if (a && b)
Exemple :
true;
false;
d = 12, e;
e = c + d; else e = c - d;
e++; else e--;
Bertrand Estellon (DII – AMU)
Programmation Orientée Objet – Java
Java
int a = 2;
switch (a) {
case 1 : System.out.println("un"); break;
case 2 : System.out.println("deux"); break;
case 3 : System.out.println("trois"); break;
default : System.out.println(a); break;
}
21 septembre 2016
21 / 171
Bertrand Estellon (DII – AMU)
Programmation Orientée Objet – Java
Introduction
Java
Les boucles while et do/while
21 septembre 2016
22 / 171
Introduction
Les boucles for
La syntaxe :
for (initialisation; condition; incrementation)
instruction;
La syntaxe :
while (condition) instruction;
do instruction; while (condition);
Exemple :
for (int i = 0; i < 3; i++) System.out.println(i);
for (int i = 10; i >= 10; i--) System.out.println(i);
for (int i = 0; i <= 10; i+=2) System.out.println(i);
Exemple :
int a = 3;
while (a <= 10) a++;
do a--; while (a>=3);
Équivalence avec le while :
initialisation;
while (condition) { instruction; incrementation; }
Bertrand Estellon (DII – AMU)
Programmation Orientée Objet – Java
21 septembre 2016
23 / 171
Bertrand Estellon (DII – AMU)
Programmation Orientée Objet – Java
21 septembre 2016
24 / 171
Java
Introduction
Java
Les blocs d’instructions
Introduction
Les blocs d’instructions
La syntaxe :
{
Il est important d’indenter correctement le code :
instruction_1;
instruction_2;
...
instruction_k;
for (int i = 0; i < 10; i++) {
for (int j = i+1; j < 10; j++) {
int k = i*j;
if (k < 10) System.out.print(" ");
System.out.print(i*j);
System.out.print(" ");
}
System.out.println();
}
}
Les instructions du bloc sont exécutées séquentiellement.
Une instruction peut être remplacée par un bloc d’instructions :
boolean a = true;
int c = 0, d=2;
if (a) { c++; d+=4; } else { c--; d-=2; }
Bertrand Estellon (DII – AMU)
Programmation Orientée Objet – Java
Java
21 septembre 2016
25 / 171
Introduction
Les tableaux à plusieurs indices
Déclaration :
int[][] matrix;
Création :
matrix = new int[10][];
for (int row = 0; row < matrix.length; row++)
matrix[row] = new int[5];
/* ou directement */
matrix = new int[10][5];
Tableaux multidimensionnels “non rectangulaires” :
array = new int[10][];
for (int row = 0; row < array.length; row++)
array[row] = new int[row+1];
Bertrand Estellon (DII – AMU)
Programmation Orientée Objet – Java
21 septembre 2016
27 / 171
Bertrand Estellon (DII – AMU)
Programmation Orientée Objet – Java
21 septembre 2016
26 / 171
Téléchargement