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