Chapitre 3 : JAVA Hassan El Bahi www.elbahihassan.com Plan Qu’est ce que java? Variables / L'affectation Comparaisons / conversions Structures de contrôle Les entrée/Sortie Tableaux Hassan El Bahi www.elbahihassan.com2 Qu’est ce que java? Java est un langage de programmation moderne développé par Sun Microsystems (aujourd'hui racheté par Oracle). Il ne faut surtout pas le confondre avec JavaScript (langage de scripts utilisé principalement sur les sites web), car Java n'a rien à voir. Langage de programmation orienté objet Les programmes java sont multi plate-forme Langage haute sécurité langage adapté aux systèmes de communications (programmation distribuée). 3 Qu’est ce que java? On peut faire de nombreuses sortes de programmes avec Java : des applications, sous forme de fenêtre ou de console. des applets, qui sont des programmes Java incorporés à des pages web des applications pour appareils mobiles, avec J2ME. et bien d'autres ! J2EE, JMF, J3D pour la 3D... 4 Compilation d’un programme Java En Java, le code source n'est pas traduit directement dans le langage de l'ordinateur. Il est d'abord traduit dans un langage appel bytecode ", langage d'une machine virtuelle (JVM _ Java Virtual Machine). 5 Qu’est ce que java? 6 Cycle de développement Les phases d’écriture et de correction se fait à l’aide d’un éditeur de texte (emacs, geany, gedit, Notepad++, . . . ) ou d’une EDI (netbeans , eclipse , …) Exemple: Notepad++ Salut.java La phase de compilation se fait à l’aide de la commande javac. Exemple: javac Salut.java La compilation produit un fichier .class. Exemple: le fichier Salut.class est généré par le compilateur La phase d’interprétation se fait à l’aide de la commande java. Exemple: java Salut 7 variables o Une variable est décrite à l’aide de trois caractéristiques : - Son identificateur qui est le nom par lequel la donnée est désignée. Exemples : b, delta, myWindow, ...; - Son type qui définit de quel genre est la donnée associée à la variable, en particulier, quels traitements elle peut (et ne peut pas) subir. Exemples : double, int, String, ... - Sa valeur littérale qui permet de définir sa valeur. Par exemple, si la donnée est un nombre, sa représentation pourra être (selon les conventions de représentation) : Exemples :123, -18, 3.1415, 2e-13, . . . o La syntaxe de la déclaration d’une variable est : type identificateur ; 8 Déclaration et initialisation de variables Les principaux types élémentaires définis en Java sont : • int : les nombres entiers. • double : les nombres réels. • char : les caractères. • boolean : les valeurs logiques “vrai” (true) et “faux” (false) • float : est utilisé pour les nombres avec une virgule flottante. • String : Le type String permet de gérer les chaînes de caractères, c'est-à-dire le stockage de texte. Note : nous verrons plus tard d’autres types : les types composés et la généralisation des types par la notion de classe 9 Déclaration et initialisation de variables En même temps qu’elle est déclarée, une variable peut être initialisée, c’est-à-dire qu’on lui donne une première valeur avant même toute utilisation. La syntaxe de la déclaration/initialisation d’une variable est : type identificateur = valeur_d’initialisation; où valeur_d’initialisation est n’importe quelle constante (i.e., valeur littérale) ou expression du type indiqué. Exemples : int val = 2; double pi = 3.1415; char c = ’a’; int j = 2*val+5; String phrase = "cours système réparti"; 10 Déclaration et initialisation de variables les noms de variables en Java peuvent commencer par une lettre, par le caractère de soulignement ou par le signe dollar. Le reste du nom peut comporter des lettres ou des nombres mais jamais d'espaces. Il est possible de définir plusieurs variables de même type en séparant chacune d'elles par une virgule. Exemple : int jour, mois, annee; 11 Variable Final • La valeur d’une variable déclarée final ne peut pas être modifiée après avoir été initialisée • Une telle variable est similaire à une constante dans les autres langages de programmation • Pour déclarer une variable final : final int A_FINAL_VAR = 0; 12 Variables = zone mémoire Exemple : • int i = 121; • char car = ’C’; • double x = 12.98705; 13 Commentaire • /* 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. 14 Instructions, blocs et blancs • Les instructions Java se terminent par un ; • Les blocs sont délimités par : { pour le début de bloc } pour la fin du bloc Un bloc permet de définir un regroupement d’instructions. La définition d’une classe ou d’une méthode se fait dans un bloc. • Les espaces, tabulations, sauts de ligne sont autorisés. Cela permet de présenter un code plus lisible. 15 Point d’entrée d’un programme Java • Pour pouvoir faire un programme exécutable il faut toujours une classe qui contienne une méthode particulière, la méthode « main » o c’est le point d’entrée dans le programme : le microprocesseur sait qu’il va commencer à exécuter les instructions à partir de cet endroit public static void main(String arg[ ]) { …………. ………… } 16 L'affectation le signe = est l'opérateur d'affectation et s'utilise avec une expression de la forme: o variable = expression; 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; 17 L'affectation Il existe des opérateurs qui permettent de simplifier l'écriture d'une opération d'affectation associée à un opérateur mathématique : Opérateur Exemple Signification = a=10 équivalent à : a = 10 += a+=10 équivalent à : a = a + 10 -= a-=10 équivalent à : a = a - 10 *= a*=10 équivalent à : a = a * 10 /= a/=10 équivalent à : a = a / 10 %= a%=10 reste de la division ^= a^=10 équivalent à : a = a ^ 10 18 Les comparaisons : Java propose des opérateurs pour toutes les comparaisons : Opérateur Exemple Signification > a > 10 strictement supérieur < a < 10 strictement inférieur >= a >= 10 supérieur ou égal <= a <= 10 inférieur ou égal == a == 10 Egalité != a != 10 diffèrent de && a && b ET logique pour expressions booléennes || a || b OU logique pour expressions booléennes 19 Les comparaisons : Opérateur ?: Exemple a?b:c Signification opérateur conditionnel : renvoie la valeur b ou c selon l'évaluation de l'expression a (si a alors b sinon c) : b et c doivent retourner le même type Exemple : x = ( y < 5 ) ? 4 * y : 2 * y; Equivalent à: If ( y < 5 ) x = 4 * y ; else x= 2 * y ; 20 Les conversions, ou « cast » Un cast peut être effectué simplement en faisant précéder la valeur par l'indication du nouveau type entre parenthèses, par exemple: : - D'un type int en type float : int i = 123; float j = (float)i; - D'un type int en double : int i = 123; double j = (double)i; 21 Les conversions, ou « cast » double i = 1.23; double j = 2.9999999; int k = (int)i; k = (int)j; //k vaut 1 //k vaut 2 int i; double d; i = 5 / 2; // Oui, 2 d = 5.0 / 2.0; // Oui, 2.5 d = 5.0 / 2; // Oui, 2.5 d = 5 / 2.0; // Oui, 2.5 d = 5 / 2; // Oui, 2.0 i = 5 / 2.0; // Non i = (int) (5 / 2.0); // Oui, 2 22 Structures de contrôle L'instruction conditionnelle if : La syntaxe de l'instruction if peut être décrite de la façon suivante: if (expression) instruction; Ou : if (expression) { instruction1; instruction2; } 23 Structures de contrôle L'instruction conditionnelle else if (expression) { instruction1; } else { instruction2; } Exemple : if (a<b) { min=a; } else { min=b; } 24 Structures de contrôle Les instructions conditionnelles imbriquées if (expression1) { bloc1; } else if (expression2) { bloc2; } else if (expression3) { bloc3; } else { bloc5; } 25 Structures de contrôle L'instruction switch : la syntaxe est la suivante: Switch ( variable ) { Case valeur1 : instructions1 ; break; Case valeur2 : instructions2 ; break; Case valeur3 : instructions2 ; break; . . Case valeurN : instructionsN ; break; Default : instructions ; break; } 26 Structures de contrôle Exemple : L'instruction switch switch (month) { case 1: System.out.println("January"); break; case 2: System.out.println("February"); break; case 3: System.out.println("March"); break; case 4: System.out.println("April"); break; case 5: System.out.println("May"); break; case 6: System.out.println("June"); break; case 7: System.out.println("July"); break; case 8: System.out.println("August"); break; case 9: System.out.println("September"); break; case 10: System.out.println("October"); break; case 11: System.out.println("November"); break; case 12: System.out.println("December"); break; default: System.out.println("Invalid month.");break; } 27 Structures de contrôle La boucle for : La boucle for est une structure employée pour exécuter un bloc d'instructions un nombre de fois en principe connu à l'avance. Elle utilise la syntaxe suivante: for (int i=0 ; i<limite ; i=i+increment) { instructions; } Exemple : for (inti = 2; i < 10;i++) { System.out.println("Vive Java !"); } 28 Structures de contrôle L’instruction While while (condition){ Instructions; } Exercice : qu’affiche le code suivant ? int i=5; while (i > 1) { System.out.print(i + " "); i = i / 2 ; } Réponse : 52 29 Structures de contrôle L’instruction do .. while do{ Instructions; } while (condition) Exercice : qu’affiche le code suivant ? int i=10; do{ System.out.print(i + " "); i = i / 2 ; } while (i > 1) Réponse : 10 5 2 30 Structures de contrôle Exercice : qu’afficheront les codes suivants ? int i=0; do{ System.out.print(i); i = i / 2 ; } while (i > 1) n’affichera rien ! int i=0; while (i > 1) { System.out.print(i); i = i / 2 ; } affichera: 0 31 Les entrée/Sortie Java propose des flux d’entrée et de sortie pour communiquer avec l’utilisateur. Affichages : System.out.print(…); Ou bien : System.out.println(…); Lecture (d’un entier): Scanner keyb = new Scanner(System.in); int i = keyb.nextInt(); 32 Tableaux Création d'un tableau int monTableau[ ] = new int[10]; Ou int [ ] monTableau = new int[10]; - L'opérateur [ ] permet d'indiquer qu'on est en train de déclarer un tableau. - Dans l'instruction précédente, nous déclarons un tableau d'entiers (int, integer) de taille 10, c'est-à-dire que nous pourrons stocker 10 entiers dans ce tableau. 33 Tableaux Remplissage d'un tableau - Une fois le tableau déclaré et instancié, nous pouvons le remplir : int [] monTableau = new int[10]; monTableau[5] = 23; - L'indexation démarre à partir de 0, ce qui veut dire que, pour un tableau de N éléments, la numérotation va de 0 à N-1. - Dans l'exemple ci-dessus, la 6ème case contient donc la valeur 23. - Nous pouvons également créer un tableau en énumérant son contenu int [] monTableau = {5,8,6,0,7}; 34 Tableaux Lecture d'un tableau - Pour lire ou écrire les valeurs d'un tableau, il faut ajouter l'indice entre crochets ([i]) à la suite du nom du tableau : : int [] monTableau = {2,3,5,7,11,15,17}; int nb; monTableau[5] = 23; // -> 2 3 5 7 11 23 17 nb = monTableau[4]; // 11 35 Tableaux Lecture d'un tableau - L'indice 0 désigne le premier élément du tableau. - L'attribut length d'un tableau donne sa longueur (le nombre d'éléments). Donc pour un tableau nommé monTableau l'indice du dernier élément est monTableau.length-1. - Ceci est particulièrement utile lorsque nous voulons parcourir les éléments d'un tableau. for (int i = 0; i < monTableau.length; i++) { int element = monTableau[i]; // traitement } 36 Tableaux à plusieurs dimensions - En Java, les tableaux à plusieurs dimensions sont en fait des tableaux de tableaux. - Exemple, pour allouer une matrice de 5 lignes de 6 colonnes : int[][] matrice=new int[5][6]; - On peut également remplir le tableau à la déclaration int[][] matrice = { { 0, 1, 4, 3 } , // tableau [0] de int { 5, 7, 9, 11, 13, 15, 17 } // tableau [1] de int }; 37 Tableaux à plusieurs dimensions - Pour déterminer la longueur des tableaux, on utilise également l'attribut length : matrice.length // 2 matrice[0].length // 4 matrice[1].length // 7 - De la même manière que précédement, on peut facilement parcourir tous les éléments d'un tableau : int i, j; for(i=0; i<matrice.length; i++) { for(j=0; j<matrice[i].length; j++){ //Action sur matrice[i][j] } } 38 Merci pour votre attention 39