Algorithmique et initiation à la programmation Java
Transcription
Algorithmique et initiation à la programmation Java
Licence Monnaie - finance 2012-2013 Algorithmique et programmation java L3 Monnaie - Finance Algorithmique et initiation à la programmation java Première partie O. Auzende 2012-2013 1 Modalités Cours en amphithéâtre : les lundis de 12 h à 13 h 30 (amphi 3) o Deux fascicules de cours (polycopiés à trous) sont distribués en cours Travaux dirigés (12 séances, les TD commençant dès la première semaine du semestre) o Un fascicule de TD est distribué lors du premier TD. Huit groupes de TD : Horaire Mardi 18 h 50 Mardi 20 h 25 Mercredi 14 h 05 Mercredi 15 h 40 Vendredi 9 h 20 Vendredi 10 h 55 Vendredi 12 h 30 Vendredi 14 h 05 Salle 501 501 503 503 502 502 502 502 Pour les TD : o avoir toujours les fascicules de cours et de TD avec soi o disposer dès le premier TD d’une clé USB standard Evaluation : contrôle continu et projet o 1 contrôle sur 20 points au TD 5 (C1) o 1 contrôle sur 20 points au TD 8 (C2) o 1 contrôle sur 30 points au TD 11 (C3) Programme : cours et TD précédents o Un projet sur 30 points (P) Rendu progressif, de la 6ème à la 11ème semaine Soutenance lors du TD de la 12ème semaine Note finale sur 10 : (C1 + C2 + C3 + P)/10 En cas d’absence en TD o Prévenir l’enseignant o Venir en TD dans un autre groupe de la même semaine o Tout contrôle non passé est sanctionné par un 0 2 Enseignant O. Auzende O. Auzende N. Thibault N. Thibault F. Jézéquel F. Jézéquel N. Thibault O. Auzende Licence Monnaie - finance 2012-2013 Algorithmique et programmation java MODALITES 2 INTRODUCTION 5 Qu’est-ce que l’algorithmique ? 5 Qu’est-ce qu’un programme ? 5 Comment écrire un programme ? 5 Le langage machine 6 Les langages de programmation 6 Java, compilé et interprété 7 Applications, applets et servlets 7 ELEMENTS DE PROGRAMMATION JAVA 8 Notion de variable 8 Affectation 8 Egalité, inégalité 8 Conjonction, disjonction 9 Types de données 9 Notion d’application 10 Les tests 11 Tableaux 12 Les boucles 12 Les sauts 14 JAVA, LANGAGE A OBJETS 15 Classes et instances 15 Attributs et méthodes d’instances 18 Attributs et méthodes de classes 18 ALGORITHMIQUE 19 Permuter le contenu de deux variables 19 Pour les algorithmes sur tableaux suivants, 19 3 Insérer un élément x dans un tableau à la suite des éléments existants 20 Déterminer les éléments maximum et minimum d’un tableau 20 Déterminer l’indice du maximum ou du minimum d’un tableau 20 Somme des éléments d’un tableau 21 Comptages divers 21 Insérer un élément à sa place, le tableau étant déjà rangé 22 Les tris sur tableaux 23 LES PAQUETAGES JAVA 25 Qu’est-ce qu’un paquetage ? 25 La notion d’héritage 25 Protection des attributs et méthodes 25 Les interfaces 26 Les classes d’exceptions 26 Le paquetage java.lang 27 Le paquetage java.util 28 Le paquetage java.text 31 4 Licence Monnaie - finance 2012-2013 Algorithmique et programmation java Introduction Qu’est-ce que l’algorithmique ? L’algorithmique est une branche des mathématiques dont le but est de trouver de trouver comment réaliser … s’obtenir par une formule, mais … des tâches dont le résultat par une succession de … effectués en fonction du résultat de tests. Quelques exemples o Nombre de jours écoulés depuis … o Maximum d’un tableau de nombres (il n’y a pas de … o Somme d’un tableau de nombres (il existe une notation mathématique o pour le calcul effectif) o Tri d’un tableau de nombres … donnant la solution) , mais elle n’est pas … La solution s’appelle un algorithme : c’est un ensemble … Exemple : il existe différents algorithmes permettant de trier un tableau de nombres, mais … Qu’est-ce qu’un programme ? Un programme est un … (appelées couramment des … ) permettant à un ordinateur d’exécuter une tâche plus ou moins complexe, en interaction ou non avec l’utilisateur. Exemples de programmes élémentaires Calculer : o le nombre de jours écoulés … o le maximum, le minimum, la somme des éléments d’un … o le montant … o un seuil … Trier : o un tableau … o un tableau … Exemples de programmes complexes, appelés logiciels, destinés o traitement … o … o programme de gestion de … o programme de … o programme de conception assistée … o programme de publication assistée … … : Comment écrire un programme ? Il faut d’abord … Il faut ensuite trouver un (ou des) … Il faut enfin traduire les instructions qui composent ces algorithmes dans un par un ordinateur 5 … compréhensible Le langage machine Le processeur d’un ordinateur ne comprend que du langage machine ( … ) composé … Toute instruction élaborée : o répéter une même … o faire des choses différentes en fonction de … se décompose ainsi en des milliers… Les langages de programmation o o o o Intermédiaires entre … Permettent de décrire les instructions élaborées de manière plus … pour former le … du programme Le code source doit ensuite être … en langage machine pour pouvoir être exécuté par le … Il y a deux modes de traduction du code source : * la … (langage dit … ) * l’ … (langage dit … ) Les langages compilés Le compilateur o o est dédié à … et au … vérifie la … du code source ; si c’est correct, génère un fichier machine, exécutable sur toute machine … Exemples de langages compilés : Cobol ( … … en langage … ), C, C++ ( ) … la syntaxe de chaque instruction et ne l’exécute que si … Avantage des langages compilés : o Le code objet s’exécute … Inconvénient des langages compilés : o Le code objet est dédié à un seul … Les langages interprétés L’interpréteur o lit le fichier source ligne à ligne, Exemples de langages interprétés : HTML, javaScript, PHP ( … Avantage des langages interprétés o On peut interpréter le fichier sur tout type d’ordinateur, à condition de disposer de l’ à cet ordinateur Inconvénient des langages interprétés o La vérification ligne à ligne cause une certaine … 6 à l’exécution ), SQL … adapté Licence Monnaie - finance 2012-2013 Algorithmique et programmation java Java, compilé et interprété Langage développé par SUN depuis 1995. Universellement … Sur l’ordinateur sur lequel on écrit un programme Java, le fichier source est transformé par le compilateur javac en un … non exécutable, qui est … quel que soit le type de machine sur lequel on travaille. Transféré sur un autre type d’ordinateur, le pseudo-code est interprété par un L’interpréteur : o ne vérifie plus la syntaxe des instructions (gain de temps) o exécute directement … Le pseudo-code est donc indépendant du type d’ordinateur sur lequel lequel … … … appelé … et de celui sur Pour écrire un programme java sur un ordinateur, il suffit donc de disposer … Pour exécuter un programme java compilé, il suffit donc de disposer … Le pseudo-code est de … , donc … java est donc devenu le langage idéal … Applications, applets et servlets Java permet d’écrire : o Des applications : programmes … o Des applets : petits programmes appelés dans une page HTML par la balise interprétés par … … o Des servlets : programmes java stockés dynamiquement des pages html en réponse à … permettant de générer … 7 et Eléments de programmation Java Notion de variable La notion de variable en informatique est assez proche … En mathématiques, x = 5 veut dire … En informatique, x est un … dont la taille (nombre de … emplacement) dépend de ce qu’on veut y stocker : un entier, un réel… qui composent cet Le contenu de cet emplacement-mémoire peut constamment être … On écrit donc (syntaxe java) : int x ; (réservation de place x = 2 ; (on y met la valeur 2) x = 5 ; (on change, on y met float y ; (réservation de place y = 3.5 ; (on y met la valeur 3.5) ou bien directement : int x = 8; float y = 3.5 ; (les deux opérations … ) … … ) ) … ) Affectation Toute instruction complète se termine par … Les deux instructions x = 5 ; x = 7 ; y = 3.5 ; donnent des valeurs ( emplacements-mémoire x et y. Elles sont appelées des … On dit qu’on … … ) aux une valeur à une variable occupant une certaine place-mémoire. Il serait plus naturel d’écrire : x 5 (x reçoit la valeur 5), y 3.5 (y reçoit la valeur 3.5), mais tous les langages de programmation actuels (C, C++, JavaScript, Java, PHP…) utilisent la notation a = b au lieu de a b. L’écriture a = b correspond donc en fait à a b et doit se lire « a … la valeur de b ». A gauche : … A droite : … On peut affecter à une variable : o une … o la … d’une autre variable o le résultat du … d’une … o le résultat du calcul d’une … x = 3; y = 5 ; z = 4 ; x = y; (x reçoit la VALEUR de y, donc 5) x = y + z; (x reçoit la VALEUR de y + z) t = max(x, y, z) ; Egalité, inégalité Egalité Le symbole = étant réservé à l’affectation, on teste l’égalité de deux variables a et b autrement. On écrit : if … qui se lit si (a = b) ... Inégalité On teste l’inégalité de deux variables a et b en écrivant : if … qui se lit si (a ≠ b) ... 8 Licence Monnaie - finance 2012-2013 Algorithmique et programmation java Exemples o si x = 4 alors y = 7 : o si annee = 2012 alors nb_jours_fevrier = 29 : o si x ≠ 10 alors y = 8 : o si mois ≠ 2 alors nb_jours > 29 : Conjonction, disjonction Conjonction La conjonction ET s’écrit && si (a=b) et (c=d) s’écrit donc : Disjonction La disjonction OU s’écrit | | si (a=b) ou (c=d) s’écrit donc : Exemples o si x = 4 et y = 5 alors z = 7 : … o si annee=2012 et mois=2 alors nb_jours=29 : … o si mois =1 ou mois=3 alors nb_jours =31 : … Types de données Java est un langage typé Toute variable utilisée doit nécessairement être Un nom de variable doit : o être constitué … o ne PAS comporter o ne pas être un … … … et son … doit être … ni de … du langage (liste fournie en TD) Exemples : float revenu; int mois_annee; Les types élémentaires sont appelés des … Toute variable d’un type primitif est une variable simple, non composée (int, float…) Les types autres que primitifs sont des … (on verra plus tard) Types de données primitifs en Java Il y a 8 types de données primitifs (les plus utilisés sont soulignés) : o boolean : … o char : … o byte : … o short : … o int : … o long : … o float : … o double : … L’instruction : boolean fini = false; définit une variable fini de type … et de valeur false. L’instruction : int i = 254256; définit une variable i de type … , stockée sur 32 bits et de valeur 254256 L’instruction : float f = 156.256; définit une variable f de type … , stockée sur 32 bits et de valeur 156.256 9 Opérateurs de cast Pour créer une variable d’un type à partir d’une variable d’un autre type semblable (nombre et nombre, par exemple), on utilise un … Il est noté entre … Exemples float f=156.256; int j=(int)f; j est alors un entier valant 156 double t=0.567833333; float d=(float)t; d est un flottant stocké sur 32 bits au lieu de 64 bits. On a donc perdu … Notion d’application Fichier Programme .java : public class Programme { public static void main(String[] args) { int a = 25 ; int b = 76 ; System.out.println("a = " + a); System.out.println("b = " + b); } } Un programme java est contenu dans une La description d’une classe est faite entre une … … S’il n’y a qu’une seule classe, elle est déclarée … { et une … … déclarée sous la forme : compris entre { et } Tout programme contenant une méthode appelée o o o o o } afin d’être accessible à tout utilisateur Le programme proprement dit figure dans une méthode appelée public static void main(String[] args) Toute méthode a un … … est appelé … public signale que tout le monde peut exécuter … static indique que la méthode main est une méthode … (on verra plus tard) void dit que la méthode main … String[] args permet de passer … à la méthode main (ce qu’on ne fera pas) System.out.println(chaîne) fait afficher à l’écran une … Pour construire une chaîne à partir de plusieurs morceaux, on utilise … qui réalise leur … Compilation javac Programme.java o javac est … o Il compile le fichier Programme.java et crée le fichier … exécutable Exécution java Programme o java est … o Il charge le fichier … et … Résultat à l’écran a vaut : 5 b vaut : 7 10 … Programme.class qui n’est pas Licence Monnaie - finance 2012-2013 Algorithmique et programmation java Les tests Les tests permettent de faire des traitements … Le test simple : if … else Il s’écrit : if (test) { instructions; } else { instructions; } La clause else est … On peut avoir simplement : if (test) { instructions ; } Exemple : fichier Programme1.java public class Programme1 { public static void main(String[] args) { int a = 25 ; int b = 76 ; System.out.println("a = " + a); System.out.println("b = " + b); int min ; if (a < b) { min = a; } else { min = b; } System.out.println("le minimum de a et b est " + min); } } Le test multiple : switch Il s’écrit : switch (variable) { case 1: instructions; case 2: instructions; ... default : instructions; } La variable testée doit être de type … Le cas … sert si l’on veut prévoir un traitement par défaut. ... dans les instructions signale que le cas est traité et que l’on saute … Exemple : fichier Programme1b.java public class Programme1b { public static void main(String[] args) { int num = 11 ; String mois = "" ; // type chaîne de caractères switch(num) { case 1 : mois="janvier"; break ; case 2 : mois="fevrier"; break ; case 3 : mois="mars"; break ; case 4 : mois="avril"; break ; case 5 : mois="mai"; break ; case 6 : mois="juin"; break ; case 7 : mois="juillet"; break ; case 8 : mois="aout"; break ; case 9 : mois="septembre"; break ; default : mois="au dernier trimestre"; } System.out.println("le mois est " + mois); } } 11 Tableaux Les tableaux sont des collections de variables On doit d’abord les … , puis faire … Une fois qu’un tableau est créé, sa taille … , en … … . . On accède à l’élément d’indice i de t par t[i], les indices … Exemples int[] t ; // ou int t[]; // déclaration d’un tableau d’entiers t=new int[20]; // création de t en mémoire String[] t1 ; // ou String t1[]; // déclaration d’un tableau de chaînes t1 = new String[10] ; // création de t1 en mémoire Utilisation : fichier Tableau.java public class Tableau { public static void main(String[] args) { String[] t = new String[12] ; t[0]="janvier"; t[1]="fevrier"; t[2]="mars"; t[3]="avril"; t[4]="mai"; t[5]="juin";t[6]="juillet"; t[7]="aout"; t[8]="septembre"; t[9]="octobre"; t[10]="novembre"; t[11]="decembre"; System.out.println("Les mois de l'annee sont : "); System.out.println(t[0]); System.out.println(t[1]); System.out.println(t[2]); System.out.println(t[3]); System.out.println(t[4]); System.out.println(t[5]); System.out.println(t[6]); System.out.println(t[7]); System.out.println(t[8]); System.out.println(t[9]); System.out.println(t[10]); System.out.println(t[11]); } } Les boucles La boucle for La boucle for permet de … un certain nombre de fois des instructions. Elle s’écrit : for (initialisation; test_continuation; incrémentation) {instructions;} Exemple : répéter 10 fois des instructions for (int i = 0 ; i < 10 ; i++) { instructions; } o L’initialisation précise int i=0 … qui contrôle la boucle et o Le test est un i < 10 … o L’incrémentation précise comment … Généralement on écrit i++ qui veut dire i=i+1 (on passe de i à i+1, donc … ( test qui doit être vérifié pour que la boucle 12 … … ) ) Licence Monnaie - finance 2012-2013 Algorithmique et programmation java Fichier Tableau1.java : une seule instruction … public class Tableau1 { public static void main(String[] args) { String[] t = new String[12] ; t[0]="janvier"; t[1]="fevrier"; t[2]="mars"; t[3]="avril"; t[4]="mai"; t[5]="juin"; t[6]="juillet"; t[7]="aout"; t[8]="septembre";t[9]="octobre";t[10]="novembre"; t[11]="decembre"; System.out.println("Les mois de l'annee sont : "); for (int i = 0 ; i < 12; i++) { System.out.println(t[i]); } } } Fichier Tableau2.java : on utilise deux boucles for : une pour l’autre pour faire … … , public class Tableau2 { public static void main(String[] args) { double[] t = new double[20] ; for (int i = 0 ; i < 20 ; i++) { t[i] = i ; } for (int i = 0; i < 20 ; i++) { System.out.print(t[i] + " * "); } } } o o o La variable i est déclarée … Entre les deux boucles, i … On dit que la … se limite à la … en cours Fichier Tableau2b.java : la variable i est … o La portée de i est alors … toute entière (i est connu dans … ). public class Tableau2b { public static void main(String[] args) { double[] t = new double[20] ; int i ; for (i = 0 ; i < 20 ; i++) { t[i] = i ; } for (i = 0; i < 20 ; i++) { System.out.print(t[i] + " * "); } System.out.println("\n ---> i vaut maintenant " + i) ; } } La boucle while Elle permet de Elle s’écrit : … des instructions tant … while (test) { instructions ; } Les instructions doivent modifier … une variable intervenant dans le test, pour que la boucle while ne boucle … 13 Exemple : afficher les éléments d’un tableau de nombres t tant qu’ils sont inférieurs à 20. int i = 0 ; while (t[i] < 20) { System.out.print(t[i] + " ") ; i++ ; } i est modifié dans les instructions, donc t[i] correspond à chaque passage à Attention cependant à ne pas dépasser … … du tableau t. ! Si le tableau est de taille n, il faut écrire : int i = 0 ; while ((i < n) && (t[i] < 20)) { // && est la notation pour ET System.out.print(t[i] + " ") ; i++ ; } La boucle do … while Elle permet de faire exécuter ces instructions tant qu’un test est vérifié. Elle s’écrit : … do { instructions ; } while (test); des instructions puis de … Les instructions doivent modifier … une variable du test, pour que le do … while ne boucle pas … Exemple : afficher le premier élément du tableau t, puis les éléments suivants tant qu’ils sont inférieurs au premier : int i = 0 ; do { System.out.print(t[i]+ " "); i++ ; } while ((i<n)&&(t[i]<t[0])); Les sauts Le break break permet … le test ou la boucle (on saute donc … en reprenant l’exécution directement … les cas suivants). Exemple : afficher les éléments du tableau t tant qu’ils sont inférieurs à 20. On arrête donc dès qu’on rencontre un élément supérieur ou égal à 20. for (int i = 0 ; i < n ; i++) { if (t[i]<20) { System.out.print(t[i]+" * "); } else { break ; } } C’est équivalent à la boucle while ci-dessous : int i = 0 ; while ((i<n) && (t[i] < 20)) { System.out.print(t[i]+" * ") ; i++ ; } 14 Licence Monnaie - finance 2012-2013 Algorithmique et programmation java Le continue continue permet de sortir … en reprenant l’exécution à l’itération suivante. On arrête donc les instructions de l’itération en cours pour passer … Exemple : afficher les éléments du tableau t qui sont différents de 20. Deux versions, selon que l’on teste si t[i] est égal à 20 ou est différent de 20 : Si on teste si t[i] est égal à 20, on écrit : Si on teste si t[i] est différent de 20, on écrit : for (int i = 0 ; i < n ; i++) { if (t[i] == 20) { continue ; } else { System.out.print(t[i]+" * "); } } for (int i = 0 ; i < n ; i++) { if (t[i] != 20) { System.out.print(t[i]+ " * "); } else { continue ; } } Le return L’instruction return permet celle-ci. … sans nécessairement attendre la fin de Cette instruction ne peut donc pas figurer directement par la suite. … mais sera très largement utilisée Java, langage à objets Classes et instances Un programme java peut ne contenir qu’une seule Cette classe, qui contient … … , comme on l’a vu jusqu’à présent , constitue à elle toute seule toute l’application Mais java est avant tout un « langage … », ce qui veut dire qu’une classe peut aussi être un … à partir duquel on peut fabriquer des objets qu’on appelle des … On souhaite créer des « objets » comportant : o un entier n qui représente la … d’un tableau o un tableau t de n entiers comportant les entiers 1, 2, 3, … n-1 Exemple de deux tels objets : La classe (encore embryonnaire) correspondant à ces objets est la suivante : class ObjetTableau { int n ; int[] t ; } // // // // début de la classe deux attributs : ... et t ... fin de la classe 15 Cette description signifie que tout objet de la classe ObjetTableau, dès qu’il sera créé, comportera automatiquement deux variables (qu’on appellera des … ) n et t. Une classe correspond donc à la description d’un ensemble d’objets ayant … Les objets créés selon ce modèle sont appelés des … de la classe. Pour donner des valeurs aux attributs, donc remplir n et t, on doit ajouter dans la classe une méthode spécifique appelée … Le … est … class ObjetTableau { int n ; int[] t ; permettant de construire des objets // début de la classe // deux attributs : n et t ObjetTableau(int a) { // le ... n = a ; // n prend la valeur ... t = new int[n] ; // on réserve la place pour ... for (int i=0 ; i < n ; i++) { t[i] = i+1 ; // remplissage de ... } } // fin du ... } // fin de ... Créer des objets de la classe ObjetTableau se fait programme principal : … , dans une autre classe qui sert de public class ProgObjet { public static void main (String args[ ]) { ObjetTableau obj1 = new ObjetTableau(6); ObjetTableau obj2 = new ObjetTableau(3); } } // début de // le main classe // fin ... // fin ... Ce programme crée bien les deux objets, mais pour le moment n’affiche … On ajoute donc à la classe ObjetTableau une méthode void affiche() permettant à un objet … (c’est-à-dire de s’afficher … ): class ObjetTableau { int n ; int[] t ; // début de la classe // deux attributs : n et t ObjetTableau(int a) { // le constructeur n = a; // n prend la valeur a t = new int[n] ; // on réserve la place pour le tableau t for (int i=0;i<n;i++) { // remplissage du tableau t[i] = i+1 ; } } // fin du constructeur void affiche() { System.out.println("affichage des elements"); for (int i = 0; i < n; i++){ System.out.print(t[i]+" * "); } System.out.println(""); } } // fin de la classe 16 Licence Monnaie - finance 2012-2013 Algorithmique et programmation java On ajoute ensuite à la même classe une méthode int inferieurs(int p) permettant à un objet de calculer le nombre d’éléments de son tableau qui sont … class ObjetTableau { int n ; int[] t ; // début de la classe // deux attributs : n et t ObjetTableau(int a) { // le constructeur n = a; // n prend la valeur a t = new int[n] ; // on réserve la place pour le tableau t for (int i=0;i<n;i++) { // remplissage du tableau t[i] = i+1 ; } } // fin du constructeur void affiche() { System.out.println("affichage des elements"); for (int i = 0; i < n; i++){ System.out.print(t[i]+" * "); } System.out.println(""); } int inferieurs(int p) { int compteur = 0 ; for (int i = 0; i < n; i++){ if (t[i]<p) compteur++ ; } return compteur ; } } // fin de la classe On ajoute enfin à méthodes : … les instructions demandant aux objets créés d’exécuter ces public class ProgObjet { // classe principale public static void main (String args[ ]) { // main ObjetTableau obj1 = new ObjetTableau(6); obj1.affiche(); // affichage de obj1 // nb elements < 3 System.out.println(obj1.inferieurs(3)) ; ObjetTableau obj2 = new ObjetTableau(3); obj2.affiche(); // affichage de obj2 // nb elements < 4 System.out.println(obj2.inferieurs(4)) ; } // fin du main } // fin de classe Les deux méthodes void affiche() et int inferieurs(int p) ne peuvent être exécutées que par … o On les appelle des … void affiche() affiche les éléments à l’écran, mais ne calcule rien, d’où son type de valeur de retour : … int inferieurs(int p)calcule le nombre d’éléments de t qui sont strictement inférieurs à p o int (valeur de retour) indique que le résultat … (valeur du compteur) o int p est le … de la méthode o return permet de … la valeur du compteur Le fichier comporte finalement deux classes : ObjetTableau et ProgObjet. Il y aura donc … fichiers compilés. 17 Il s’agit d’une … , car il y a dans une des classes une méthode appelée … La classe principale est celle qui comporte le main ; elle … o On l’appelle aussi … l’application Le fichier doit porter le nom o Ce sera donc ici … … , suivi de l’extension .java Attributs et méthodes d’instances Une classe est un … permettant de construire des objets. Un objet est nécessairement créé à partir d’une classe, à l’aide … On dit que l’objet est une … de la classe et qu’il est … Mais une classe n’oblige pas forcément à créer des objets Un objet comporte des sa classe. … et dispose de … , définis dans Ainsi, dans la classe ObjetTableau, o n et t sont des … o les méthodes void affiche() et int inferieurs(int p) sont des … Attributs et méthodes de classes Une classe peut aussi comporter des … Ils sont signalés par le mot-clé … et existent dès le début de l’application Seule exception : le … et des … . est une méthode de classe, alors qu’il n’est jamais précédé de … Exemple d’utilisation d’un attribut de classe et d’une méthode de classe pour compter les objets créés : fichier ProgObjet1.java class ObjetTableau { static int nbobjets = 0; int n ; int[] t ; // // attribut d’instance // attribut d’instance ObjetTableau(int a) { // constructeur n = a; t = new int[n] ; for (int i=0;i<n;i++) { t[i] = i+1 ;} nbobjets++ ; // incrémentation du compteur } 18 Licence Monnaie - finance 2012-2013 Algorithmique et programmation java void affiche() { System.out.print("affichage d'un objet :"); for (int i = 0; i < n; i++){ System.out.print(t[i]+" * "); } System.out.println(""); } static void nombreObjets() { // méthode de classe System.out.println("Nombre d'objets : " + nbobjets) ; } } public class ProgObjet1 { // début de classe public static void main (String args[ ]) { // le main ObjetTableau.nombreObjets() ; // appel à la méthode de classe ObjetTableau obj1 = new ObjetTableau(6); obj1.affiche(); // affichage de obj1 ObjetTableau.nombreObjets() ; // appel à la méthode de classe ObjetTableau obj2 = new ObjetTableau(10); obj2.affiche(); // affichage de obj2 ObjetTableau.nombreObjets() ; // appel à la méthode de classe } // fin du main } // fin de classe static int nbobjets : attribut de classe initialisé … , modifié dans … static void nombreObjets() : méthode de classe affichant le nombre d’objets, appelée dans le programme principal sur … par : ObjetTableau.nombreObjets(); Exécution Nombre d'objets : 0 affichage d'un objet : 1 * 2 * 3 * 4 * 5 * 6 * Nombre d'objets : 1 affichage d'un objet : 1 * 2 * 3 * 4 * 5 * 6 * 7 * 8 * 9 * 10 * Nombre d'objets : 2 Algorithmique Permuter le contenu de deux variables On veut permuter le contenu de deux variables a et b. Exemple : o Avant la permutation, a contient 38 et b contient 56. o Après la permutation, a doit contenir 56 et b doit contenir 38. Si on écrit a b (a reçoit la valeur de b), a prend la valeur de b mais … Il faut donc On écrit donc : temp … ... où l’on puisse stocker …. ; ... ... ; Pour permuter deux variables, on a donc impérativement besoin … Pour les algorithmes sur tableaux suivants, On suppose qu’un tableau t, de taille nb, contient n nombres, n ≤ nb. Les cases t[0], t[1], …, t[n-1] du tableau sont donc … Les cases t[n], t[n+1], t[nb-1] sont … 19 ... temp ; Insérer un élément x dans un tableau à la suite des éléments existants Exemple Le tableau t dispose de 15 places (nb = 15) mais contient 7 nombres (n = 7), et on veut y insérer le nombre 10. Algorithme si (n = nb) alors ... sinon faire ... ... fin faire ... ... fin si Résultat Déterminer les éléments maximum et minimum d’un tableau Le tableau t est donné, ainsi que son nombre d’éléments n. On recherche le plus grand ou le plus petit élément du tableau. Algorithme de recherche du maximum Algorithme de recherche du minimum max ... pour i allant de 1 à n faire si ( ... ) alors faire ... ... fin faire fin si fin faire fin pour min ... pour i allant de 1 à n faire si ( ... ) alors faire ... ... fin faire fin si fin faire fin pour A la fin de l’algorithme, max contient le plus grand élément du tableau. A la fin de l’algorithme, min contient le plus petit élément du tableau. Déterminer l’indice du maximum ou du minimum d’un tableau C’est le même algorithme, mais où on mémorise en même temps : o la plus grande (ou petite) valeur … o son … 20 Licence Monnaie - finance 2012-2013 Algorithmique et programmation java Algorithme pour l’indice du plus grand Algorithme pour l’indice du plus petit max ... indice ... pour i allant de 1 à n faire si ( ... ) alors faire max ... indice ... fin faire fin si fin faire fin pour min ... indice ... pour i allant de 1 à n faire si ( ... ) alors faire min ... indice ... fin faire fin si fin faire fin pour A la fin de l’algorithme, max contient le plus grand élément du tableau et indice contient son indice dans le tableau A la fin de l’algorithme, min contient le plus petit élément du tableau et indice contient son indice dans le tableau Somme des éléments d’un tableau Il s’agit de … au fur et à mesure les valeurs des éléments du tableau. Il est donc nécessaire d’avoir une variable contenant … Algorithme : som ... pour i allant de 0 à n faire som ... fin faire fin pour A la fin, la somme des éléments du tableau est … Comptages divers On a besoin de variable supplémentaire. Exemple : compter le nombre d’éléments égaux à p. Algorithme : cpt ... pour i allant de 0 à n faire si ( ... ) alors faire ... fin faire fin si fin faire fin pour ... A la fin, le nombre d’éléments égaux à p est … 21 Insérer un élément à sa place, le tableau étant déjà rangé Un tableau de nb places contient n nombres déjà rangés dans l’ordre croissant. On veut y insérer un nouveau nombre. Exemple : Principe o si le tableau est déjà plein, … o si le tableau est vide, … o sinon, c’est que le tableau est partiellement rempli : - on cherche alors le premier indice i tel que… - on décale vers la fin du tableau les éléments d’indice allant de … - on place x en … - on augmente … d’une unité Algorithme si ( ... ) ... sinon si ( ... ) faire t[n] ... n ... fin faire sinon faire i ... tant que ( ... pour j ... faire ... t[i] ... n ... fin faire fin si fin si Résultat 22 ) faire ... i ... fin faire fin faire Licence Monnaie - finance 2012-2013 Algorithmique et programmation java Les tris sur tableaux Algorithme du tri tournoi Principe A partir d’un rang i, on considère l’élément … du tableau et on le compare à tous les éléments t[j] suivants. A chaque fois que t[i] est … à t[j], on permute … et … On effectue cela pour i allant du … indice à … indice. Exemple i = 0. On compare t[0] à t[1], t[2],…, t[n-1] et à chaque fois que t[0] > t[j], on permute … A la fin de ce premier parcours, le plus petit élément est arrivé … On recommence avec i = 1 : on compare t[1] à t[2], … , t[n-1] et lorsque t[1] > t[j], on permute … A la fin du deuxième parcours, les deux plus petits éléments sont … On recommence ensuite avec i = 2, 3, … n-2. Algorithme : pour i ... pour j ... si ( ... ) faire temp ... t[i] ... t[j] ... fin faire fin si fin pour fin pour 23 Algorithme du tri à bulles Principe On compare chaque élément à son suivant. S’il lui est supérieur, on les permute ; sinon, on passe à l’élément suivant. Lorsqu’on a parcouru tout le tableau, on recommence un nouveau parcours s’il y a eu au moins une permutation. Exemple du premier parcours : ci-contre A la fin de ce premier parcours, le plus grand élément est arrivé … Au parcours suivant, on obtient le résultat ci-contre. Les deux plus grands éléments sont position et … position. … Le tableau est trié dès qu’un parcours est fait sans … Pour contrôler l’arrêt des permutations, on utilise une variable initialisée à 0 au début de chaque parcours, et que l’on passe à 1 dès que … Il suffit alors de boucler alors tant que cette variable, à la fin d’un parcours, est égale … Algorithme permut ... tant que ( ... ) faire permut ... pour i 0 à ... si ( ... ) faire permut ... temp ... t[i] ... t[i+1] ... fin faire fin si fin pour fin faire fin tant que 24 Licence Monnaie - finance 2012-2013 Algorithmique et programmation java Les paquetages Java Qu’est-ce qu’un paquetage ? Les paquetages ( … ) sont des librairies de … , de … regroupées selon leur fonction. Elles sont fournies en même temps que le compilateur javac et l’interpréteur java. et … La documentation concernant chaque paquetage est stockée sous forme de pages HTML dans un dossier spécifique o A l’université, C:\sun\appserver\docs\doc\docs\ o Chez vous, … Choisir la page index.html puis cliquer sur le lien intitulé : Java 2 Platform … API Specification La notion d’héritage Toutes les classes sont liées par la notion … On déclare qu’une classe dérive d’une autre classe par : class Fille extends Mere { ... } La classe fille hérite de tous … et … Un objet de la classe fille est donc un objet de la classe … et des méthodes supplémentaires), mais la réciproque est … de la classe mère. (éventuellement complété par des champs Toutes les classes héritent d’une classe spécifique appelée … d’héritage dans la définition d’une classe, par défaut cette classe hérite de … . Si on ne précise pas de clause Protection des attributs et méthodes Déclarations de protection Les attributs et méthodes d’une classe peuvent être déclarés private, public, protected ou ne pas être précédés de déclaration de protection. Exemple class Truc { private int a ; protected int b ; public int c ; int d ; } Déclaration private Les attributs et méthodes déclarés private ne sont accessibles qu’à l’intérieur de leur propre classe a ne sera donc accessible … Déclaration protected Les attributs et méthodes déclarés protected ne sont accessibles qu’aux sous-classes (qu’elles soient dans le même paquetage ou pas) et aux classes du même paquetage b sera donc accessible … 25 Déclaration public Les attributs et méthodes déclarés public sont toujours accessibles c sera … Sans déclaration Les attributs et méthodes sans aucune déclaration de protection (mode dit toutes les classes du même paquetage. C’est le mode de protection par défaut d sera donc accessible … … ) sont accessibles par Les interfaces Une interface est une sorte de classe spéciale, dont toutes les méthodes sont déclarées … et … (sans code). En fait, une interface … , mais sans donner le code permettant d’exécuter ces services. Une classe qui souhaite utiliser une interface le signale par le mot implements : class B implements C { ... } ; On dit alors qu’elle … l’interface. Dans la classe B, on doit alors donner le code de … les méthodes de l’interface. Une classe B peut hériter d’une classe A et implémenter une ou plusieurs interfaces : class B extends A implements C, D {...} ; class A interface C, D extends implements class B Les méthodes des interfaces C et D doivent alors obligatoirement … On utilisera quelques interfaces par la suite. Les classes d’exceptions Lever une exception Lorsqu’une méthode est exécutée, il peut se produire des erreurs. On dit alors qu’une … est o Une exception est un objet, instance d’une des nombreuses sous-classes de la classe Exception. … Chaque méthode qui risque de provoquer une ou des erreur(s) le … de la nature des erreurs susceptibles de se produire. o Les différentes classes d’erreurs possibles sont spécifiées dans … suivi par le mot … Exemple : dans la classe FilterInputStream, une méthode de lecture d’un fichier est déclarée sous la forme : public int read() throws IOException Cela signale que cette lecture peut provoquer une erreur d’entrée-sortie ( … ). Utiliser une méthode à clause throws Lorsqu’on a besoin d’utiliser une méthode risquant de provoquer des erreurs : o o on englobe l’appel à cette méthode dans un bloc … on précise ce qu’on fera en cas d’erreur dans une clause … 26 (pour (pour … … l’erreur) l’erreur). Licence Monnaie - finance 2012-2013 Algorithmique et programmation java Exemple : try { fichier.read() ; } catch (IOException) { System.out.println(" erreur de lecture ") ; return ; } Le paquetage java.lang java.lang = java.language Le paquetage java.lang est le seul paquetage dont ... Il comprend notamment la classe Object, … classes enveloppantes, la classe Math et la classe String (classe des , la classe System, les ). … La classe System La classe System contient des … et des … Quand on écrit System.out.println(...), on fait appel à System. du système. … out de la classe System.out : … System.in : … Les classes enveloppantes Les variables des types de données primitifs (int, char, double, etc) sont les seuls éléments qui ne sont objets dans Java. Mais on peut … … des à partir de ces types primitifs à l’aide des … type nature classe enveloppante boolean true ou false Boolean char caractère 16 bits Character byte entier 8 bits signé (petit entier) Byte short entier 16 bits signé (entier court) Short int entier 32 bits signé (entier) Integer long entier 64 bits signé (entier long) Long float virgule flottante 32 bits (réel simple) Float double virgule flottante 64 bits (réel double) Double int n = 5 ; Integer obj1 = new Integer(n) ; // n n’est pas un objet // obj1 est ... double f = 4.68756 ; Double obj2 = new Double(f) ; // f n’est pas un objet // obj2 est ... La classe Math La classe Math contient toutes les mathématiques. … nécessaires On effectue donc l’appel à une méthode par l’instruction : … 27 pour effectuer tous les calculs Exemples double j double k double l double m = = = = -3.145 ; Math.abs(j) ; Math.pow(j,k) ; Math.sqrt(p) ; // k // l // m ... ... ... La classe String La classe String contient de très nombreuses caractères … pour le traitement des chaînes de Il est indispensable de consulter la documentation pour trouver la méthode dont on a besoin Le paquetage java.util java.util = utilitaires de java Il contient toutes les classes utilitaires, notamment : o Scanner : pour les … o Random : pour la … Importation de paquetage Pour utiliser une partie d’un paquetage autre que java.lang, on utilise le mot-clé o import java.util.Scanner ; on se donne le droit d’utiliser la classe Scanner … o import java.util.Random ; on se donne le droit d’utiliser la classe Random… o import java.util.* ; on se donne le droit d’utiliser … … : Utilisation de la classe Scanner Fichier UtilScanner.java : import java.util.Scanner ; public class UtilScanner { static Scanner sc ; public static void main(String args[]) { sc = new Scanner(System.in); System.out.println("Veuillez saisir une phrase :"); String str = sc.nextLine(); System.out.println("Vous avez saisi : " + str); System.out.println("Veuillez saisir un entier :"); int n = sc.nextInt(); System.out.println("Vous avez saisi le nombre : " + n); System.out.println("Veuillez saisir un float :"); float f = sc.nextFloat(); System.out.println("Vous avez saisi le nombre : " + f); System.out.println("Veuillez saisir un double :"); double d = sc.nextDouble(); System.out.println("Vous avez saisi le nombre : " + d); } } 28 Licence Monnaie - finance 2012-2013 Algorithmique et programmation java Le programme UtilScanner.java crée un objet sc de la classe Scanner par un constructeur relié au clavier : sc = new Scanner(System.in); puis d’entrer au clavier : o une phrase : … o un entier : … o un float : … o un double : … Attention : sous Windows, les float et double doivent être entrés sous la forme … du système, comme pour Excel). (liée à la configuration Utilisation de la classe Random Le programme UtilObjet.java suivant demande la création d’un objet o qui comporte … Le … Objet() : o crée … par l’instruction t = new float[40] ; o appelle le constructeur … de la classe Random par Random r = new Random(); l’objet construit est appelé un … o demande à ce … de remplir le tableau par l’instruction t[i]=r.nextFloat(); La méthode nextFloat() de la classe Random génère un ... compris entre et … Fichier UtilObjet.java import java.util.Random ; Un exemple de résultat : class Objet { float[] t ; Objet() { t = new float[20] ; Random r = new Random(); for (int i = 0 ; i < 20 ; i++) { t[i]=r.nextFloat(); } } void affiche() { for (int i = 0 ; i < 20 ; i++) { System.out.println(t[i]); } } } public class UtilObjet { public static void main(String[] args) { Objet o = new Objet(); o.affiche(); } } 0.37464726 0.008410811 0.36294508 0.9819035 0.9982327 0.2542473 0.7204915 0.52173376 0.94769883 0.7458367 0.70877224 0.2125029 0.7863865 0.22088677 0.8084339 0.76560336 0.94098556 0.81110626 0.085951984 0.12518334 Si on veut obtenir des entiers, on modifie le programme en conséquence et on fait appel à la méthode nextInt() qui génère un … dans … des entiers possibles. 29 Fichier UtilObjet2.java import java.util.Random ; Un exemple de résultat : class Objet { int[] t ; Objet() { t = new int[20] ; Random r = new Random(); for (int i = 0 ; i < 20 ; i++) { t[i]=r.nextInt(); } } void affiche() { for (int i = 0 ; i < 20 ; i++) { System.out.println(t[i]); } } } public class UtilObjet2 { public static void main(String[] args) { Objet o = new Objet(); o.affiche(); } } Si on veut obtenir des entiers compris entre 0 et m (0 méthode nextInt(m). … 1106836022 -727453113 1406092303 911562671 -1133440582 -1386178611 -1588036922 -994776228 1092643285 1158792337 1429772425 -498695102 341520753 -1052563006 -674535242 789254811 1820655005 1633617820 -1003275755 -1409624375 ,m … ), on fait appel à la Exemple ci-dessous avec des entiers entre 0 (compris) et 50 (exclu) : UtilObjet3.java Fichier UtilObjet3.java import java.util.Random ; class Objet { int[] t ; Objet() { t = new int[20] ; Random r = new Random(); for (int i = 0 ; i < 20 ; i++) { t[i]=r.nextInt(50); } } void affiche() { for (int i = 0 ; i < 20 ; i++) { System.out.println(t[i]); } } } public class UtilObjet3 { public static void main(String[] args) { Objet o = new Objet(); o.affiche(); } } On peut obtenir un entier de n’importe quel intervalle [a, b[ par t[i]= ... 30 Un exemple de résultat : 42 7 13 0 35 40 43 17 8 29 26 4 34 49 7 47 28 48 36 46 Licence Monnaie - finance 2012-2013 Algorithmique et programmation java Le paquetage java.text Fournit des classes pour le traitement des … Il contient notamment les classes DecimalFormat, DecimalFormatSymbol permettant d’afficher de manière variée des … Exemple : programme UtilFormat.java import java.text.* ; public class UtilFormat { public static void main(String args[]) { double d = 12556125.458997 ; System.out.println("0 : " + d) ; DecimalFormat df = new DecimalFormat() ; DecimalFormatSymbols dfs = df.getDecimalFormatSymbols(); dfs.setGroupingSeparator(' ') ; df.setDecimalFormatSymbols(dfs); System.out.println("1 : " + df.format(d)) ; df.applyPattern("#,###,##0.00 €") ; System.out.println("2 : "+df.format(d)) ; } } Exécution : 0 : 1.2556125458997E7 1 : 12 556 125,459 2 : 12 556 125,46 3 : 12 556 125,46 € Analyse du programme : System.out.println("0 : " + d) ; affichage … DecimalFormat df = new DecimalFormat() ; on crée ... DecimalFormatSymbols dfs = df.getDecimalFormatSymbols(); on récupère … dfs.setGroupingSeparator(' ') ; dans dfs, on choisit ... df.setDecimalFormatSymbols(dfs); on réassocie … System.out.println("1 : "+df.format(d)); résultat … df.applyPattern("#,###,##0.00 €") ; on ajoute … System.out.println("2 : "+df.format(d)); résultat … 31