Upload
others
View
15
Download
0
Embed Size (px)
Citation preview
Programmation Orientée Objet – Java
Bertrand Estellon
Département Informatique et InteractionsAix-Marseille Université
12 novembre 2014
Bertrand Estellon (DII – AMU) Programmation Orientée Objet – Java 12 novembre 2014 1 / 171
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.▶ 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.Un programme informatique spécifie une suite d’instructions à effectuersur des données afin de produire de nouvelles données en sortie.
Bertrand Estellon (DII – AMU) Programmation Orientée Objet – Java 12 novembre 2014 2 / 171
Java Introduction
Les langages de programmationLes langages de programmation ont été définis par les humains afin depermettre à un humain de spécifier à un ordinateur une suited’instructions.
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#...)
L’exécution se fait soit par :▶ 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 12 novembre 2014 3 / 171
Java Introduction
La programmation orientée objet (POO)
Les objectifs :▶ 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 :▶ 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 12 novembre 2014 4 / 171
Java Introduction
Le langage Java (utilisé dans ce cours)
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 :▶ simple, orienté objet et familier ;▶ robuste et sûr ;▶ indépendant de la machine employée pour l’exécution ;▶ très performant ;▶ multi-tâches.
Bertrand Estellon (DII – AMU) Programmation Orientée Objet – Java 12 novembre 2014 5 / 171
Java Introduction
Autres langages orienté objet
▶ 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▶ Eiffel▶ Ada▶ Smalltalk▶ ...
La syntaxe change mais les concepts sont les mêmes !
Bertrand Estellon (DII – AMU) Programmation Orientée Objet – Java 12 novembre 2014 6 / 171
Java Introduction
Mon premier programme Java
Le programme HelloWorld.java :
class HelloWorld {public static void main(String arg[]) {
System.out.println("Hello world !");}
}
Compilation et exécution :
$ javac HelloWorld.java$ lsHelloWorld.java HelloWorld.class$ java HelloWorldHello world !
Bertrand Estellon (DII – AMU) Programmation Orientée Objet – Java 12 novembre 2014 7 / 171
Java Introduction
Commentaires
Les commentaires permettent de rajouter du texte dans votre programmesans que le compilateur ne le considère comme du code :
class HelloWorld {public static void main(String arg[]) {
/* Commentairesur plusieurs lignes.
*/// sur une seule ligne.System.out.println("Hello world !");
}}
Bertrand Estellon (DII – AMU) Programmation Orientée Objet – Java 12 novembre 2014 8 / 171
Java Introduction
Instructions, variables et expressions
Les données sont manipulées à l’aide de variables et d’expressions :
class Exemple {public static void main(String arg[]) {
int a = 5 ; // Déclaration d'une variableint b = 9 ; // Déclaration d'une deuxième variableb = 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"
}}
Notez que les instructions sont séparées par des points-virgules.
Bertrand Estellon (DII – AMU) Programmation Orientée Objet – Java 12 novembre 2014 9 / 171
Java Introduction
Les variables
Une variable possède un nom, un type et une valeur.
int a = 3 ; // Déclaration d'une variable// de nom "a", de type "int" (entier)// avec une valeur initiale égale à 3.
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 significationqu’en mathématiques.Lors de la compilation, Java vérifie que chaque expression située à droitede l’affectation est compatible avec le type de la variable.
Bertrand Estellon (DII – AMU) Programmation Orientée Objet – Java 12 novembre 2014 10 / 171
Java Introduction
Les types primitifs
byte entier 8 bits -128 à 127 0short entier 16 bits -32768 à 32767 0int entier 32 bits −231 à 231 − 1 0long entier 64 bits −263 à 263 − 1 0float flotant 32 bits 0.0double flotant 64 bits 0.0char caractère 16 bits caractères Unicode \u0000boolean boolean 1 bit false ou true false
Les constantes :int a = 12 ;double b = 13.5 ;char c = 't' ;boolean b = true ;
Bertrand Estellon (DII – AMU) Programmation Orientée Objet – Java 12 novembre 2014 11 / 171
Java Introduction
Opérateurs de calcul
Négation -a Opposé de aAddition a + b Somme de a et bSoustraction a - b Différence de a et bMultiplication a * b Produit de a et bDivision a / b Quotient de a et bModulo a % b Reste de a divisé par b
Bertrand Estellon (DII – AMU) Programmation Orientée Objet – Java 12 novembre 2014 12 / 171
Java Introduction
Opérateurs logiques et comparaisons
non !a true si a est égal à falseet a && b true si a et b sont égaux trueou a || b true si a ou b est égal true
égal a == b true si a est égal à bdifférent a != b true si a est différent de bplus petit a < b true si a est strictement plus petit que bplus grand a > b true si a est strictement plus grand que binférieur ou égal a <= b true si a est plus petit ou égal à bsupérieur ou égal a >= b true si a est plus grand ou égal à b
Bertrand Estellon (DII – AMU) Programmation Orientée Objet – Java 12 novembre 2014 13 / 171
Java Introduction
Les expressionsIl est possible de fabriquer des expressions complexes à partir des variables,constantes et opérateurs :
int a = 3 ;int b = 7 ;int c = 2*a + 7*b - (a+9)%(b-4);boolean d = a<=4 && b+2<=10 ;boolean e = !(a>=4 && b+2<=10);
▶ 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 12 novembre 2014 14 / 171
Java Introduction
Incrémentation, décrémentation et affectations
Pre-incrémente ++a Incrémente a de 1, puis retourne aPost-incrémente a++ Retourne a, puis incrémente a de 1Pré-décrémente --a Décrémente a de 1, puis retourne aPost-décrémente a-- Retourne a, puis décrémente a de 1
Exemple :
int a = 10 ;int b, c ;a++;b = a++; // Déconseillé → b = a; a++;c = --b ; // Déconseillé → b-- ; c = b;
Bertrand Estellon (DII – AMU) Programmation Orientée Objet – Java 12 novembre 2014 15 / 171
Java Introduction
Les affectations
Affectation a=b Affecte b à aAddition a+=b Ajoute b à aSoustraction a-=b Soustrait b à aMultiplication a*=b Multiplie a par bDivision a/=b Divise a par b
Exemple :
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 12 novembre 2014 16 / 171
Java Introduction
Les affectations sont des opérateursLa valeur retournée par l’évaluation d’une affectation est égale à la valeurretournée par l’évaluation de sa partie droite.
Exemple :int a, b ;a = (b = 10);/* ou */a = b = 10 ;
Étapes de l’évaluation de l’instruction :▶ 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) Programmation Orientée Objet – Java 12 novembre 2014 17 / 171
Java Introduction
Les tableaux
Déclaration d’une variable de type “référence vers un tableau” :
int[] arrayOfInt ;double[] arrayOfDouble ;
Allocation d’un tableau :arrayOfInt = new int[10];arrayOfDouble = new double[3];
Utilisation d’un tableau :arrayOfInt[0] = 5 ;arrayOfInt[9] = 10 ;arrayOfInt[2] = arrayOfInt[0] + 3*arrayOfInt[9];arrayOfDouble[2] = arrayOfInt[2] + 3.5 ;
Bertrand Estellon (DII – AMU) Programmation Orientée Objet – Java 12 novembre 2014 18 / 171
Java Introduction
Les tableauxL’expression new int[10] retourne une “référence vers un tableau” :
int[] array = new int[10]; // Allocation d'un tableauint[] array2 = array ; // Copie de la référence
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 caseSystem.out.println(array2[4]); // "5"
Taille du tableau :int[] array = new int[10]; // Allocation d'un tableauint length = array.length ; // Récupération de la tailleSystem.out.println(length);/* ou directement */ System.out.println(array.length);
Bertrand Estellon (DII – AMU) Programmation Orientée Objet – Java 12 novembre 2014 19 / 171
Java Introduction
Références et Garbage CollectorUne variable de type “référence” peut valoir null :
int[] array = null ;// La variable "array" contient la référence "null".// Elle pointe vers aucune instance.
Important : Une référence contient soit null soit la référence d’untableau ou d’un objet compatible avec le type de la variable.
Le Garbage collector peut supprimer les éléments devenus innaccessibles :
int[] array = new int[10];array[3] = 6 ;...array = null ;// La mémoire utilisée pour le tableau peut être libérée
Bertrand Estellon (DII – AMU) Programmation Orientée Objet – Java 12 novembre 2014 20 / 171
Java Introduction
Les instructions conditionnelles if
La syntaxe :
if (condition) instruction ;/* ou */if (condition) instruction ; else instruction ;
Exemple :
boolean a = true ;boolean b = false ;int c = 10, d = 12, e ;if (a || b) e = c + d ; else e = c - d ;if (a && b) e++; else e-- ;
Bertrand Estellon (DII – AMU) Programmation Orientée Objet – Java 12 novembre 2014 21 / 171
Java Introduction
Les instructions conditionnelles switchLa syntaxe :switch (expression) {case valeur1 : instruction ; instruction ; /*...*/ break ;case valeur2 : instruction ; instruction ; /*...*/ break ;/* ... */default : instruction ; instruction ; /*...*/ break ;
}
Exemple :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 ;
}Bertrand Estellon (DII – AMU) Programmation Orientée Objet – Java 12 novembre 2014 22 / 171
Java Introduction
Les boucles while et do/while
La syntaxe :
while (condition) instruction ;do instruction ; while (condition);
Exemple :
int a = 3 ;while (a <= 10) a++;do a-- ; while (a>=3);
Bertrand Estellon (DII – AMU) Programmation Orientée Objet – Java 12 novembre 2014 23 / 171
Java Introduction
Les boucles for
La syntaxe :
for (initialisation ; condition ; incrementation)instruction ;
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);
Équivalence avec le while :
initialisation ;while (condition) { instruction ; incrementation ; }
Bertrand Estellon (DII – AMU) Programmation Orientée Objet – Java 12 novembre 2014 24 / 171
Java Introduction
Les blocs d’instructionsLa syntaxe :
{instruction_1 ;instruction_2 ;...instruction_k ;
}
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 12 novembre 2014 25 / 171
Java Introduction
Les blocs d’instructions
Il est important d’indenter correctement le code :
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();
}
Bertrand Estellon (DII – AMU) Programmation Orientée Objet – Java 12 novembre 2014 26 / 171
Java Introduction
Les tableaux à plusieurs indicesDé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 12 novembre 2014 27 / 171