Programmer en Java. OC Informatique GYMNASE DE BURIER
|
|
|
- Germaine Alarie
- il y a 10 ans
- Total affichages :
Transcription
1 Programmer en Java OC Informatique GYMNASE DE BURIER
2 Table des matières 1 Greenfoot Concepts de base Gros chat Le monde du crabe 8 3 De l environnement intégré à la ligne de commande La structure de base d un premier programme Java La ligne de commande du Mac Compilation bidon Structure d un programme Java autonome La méthode main Un tout petit premier programme Un exemple un peu plus complexe Pour passer des paramètres Généralités sur Java 21 6 Quelques exercices d entraînement Faire calculer la machine Instructions répétitives Données numériques Données alphanumériques Pour commencer avec les tableaux La programmation objet en Java Classes et Objets Une classe et ses méthodes La notion de constructeur L accessibilité aux attributs d une classe La notion d accesseur La notion de mutateur Les attributs statiques
3 7.5 L héritage Introduction Un exemple complet Exercices sur les objets en java Figures géométriques La citerne Thermometre Devinez un nombre Ville et Capitale Jouer avec des dés Les Schtroumpfs Le Village Schtroumpf Exercices sur les tableaux et les boucles Listes dynamiques en Java La classe Personne Exercices divers Les piles Le point de départ : JFrame Deux niveaux d interface Composants Contenants Description de la JFrame Les gestionnaires de mise en forme Les événements 69 v. 2.0 Août 2014
4 1 Greenfoot 1.1 Concepts de base Exercice 1.1 On voit ci-dessous le menu contextuel associé à un wombat du scénario leaves-and-wombats. a) Établir une liste de toutes les méthodes du Wombat. b) Dans la liste de la question a), chercher toutes les méthodes sans valeur de retour. c) Dans la liste de la question a), chercher toutes les méthodes qui renvoient une valeur. Donner également le type de la valeur de retour. d) Décrire précisément chaque mot figurant dans l en-tête de la méthode setdirection. e) Donner la liste de toutes les valeurs que peut renvoyer la méthode canmove. f) Donner quelques exemples de valeurs que peut renvoyer la méthode getleaveseaten. g) Quelle est la méthode de la classe Wombat qui demande un paramètre? Quel est le type de ce paramètre? h) Que signifie le mot-clef void? Exercice 1.2 On donne le scénario cars, dans lequel on trouve la classe Car. Ouvrir ce scénario. a) Est-ce qu un objet de type Car existe à l ouverture du scénario? b) Est-ce que la classe Car existe à l ouverture du scénario? c) Combien d objets de type Car peut-on créer dans ce scénario? d) Créer quelques voitures. Ces voitures sont-elles différentes? e) Cliquer le bouton Act. Comment interpréter le résultat qui s affiche à la console? f) Remettre le scénario à zéro en cliquant le bouton Reset. Créer une voiture dans la première colonne. À l aide d un appel à la bonne méthode, faire se déplacer la voiture de deux cases vers la droite. 3
5 Exercice 1.3 Rédiger l en-tête d une méthode publique nommée send, disposant d un paramètre de type String, et qui ne renvoie pas de valeur. Exercice 1.4 Rédiger l en-tête d une méthode publique nommée moyenne, disposant de deux paramètres, tous deux de type int, et qui renvoie une valeur int. Exercice 1.5 Voici le diagramme de classe des acteurs du scénario leaves-and-wombats On donne également les en-têtes des classes figurant dans ce diagramme à l exception de la classe Actor. public class Wombat extends Actor public class Leaf extends Actor Dessiner le diagramme de classe des acteurs du scénario asteroids à partir des en-têtes de classes donnés ci-dessous: public class Explosion extends Actor public class Mover extends Actor public class Bullet extends Mover public class Rocket extends Mover public class Asteroid extends Mover 1.2 Gros chat Exercice 1.6 Observez les en-têtes de méthodes ci-dessous: public void play() public void addamount(int amount) public boolean haswings() public void compare(int x, int y, int z) public boolean isgreater (int number) 4
6 Pour chaque en-tête, répondez aux questions suivantes : a) Quel est le nom de la méthode? b) La méthode retourne-t-elle une valeur? Si c est le cas, quelle est le type de la valeur de retour? c) Combien de paramètres a la méthode? Exercice 1.7 Écrivez l en-tête d une méthode dont le nom est go. La méthode n a pas de paramètre et ne retourne aucune valeur. Exercice 1.8 Écrivez l en-tête d une méthode dont le nom est process. La méthode a un paramètre de type int intitulé number et elle retourne une valeur de type int. Exercice 1.9 Sur papier, écrivez un appel de méthode pour la méthode play de l exercice 1. Donnez un autre appel de méthode pour la méthode addamount de l exercice 1. 5
7 Exercice 1.10 On donne ci-dessous les méthodes de la classe Cat du scénario fatcat. Écrire la méthode act de votre chat en respectant les deux points suivants simultanément: a) si le chat s ennuie, il danse et crie Hooray ; b) s il ne s ennuie pas, il se déplace à gauche de cinq unités et, dans ce cas seulement, s il est fatigué, il dort durant trois unités de temps. Tous les exercices qui suivent sont destinés à être faits dans le scénario Greenfoot: fatcat. Ouvrez le scénario dans Greenfoot avant de poursuivre. Pour télécharger ce nouveau scénario : Exercice 1.11 Ouvrez le code la classe Cat dans l éditeur. Assurez-vous que l éditeur est en mode de documentation. De combien de méthodes dispose la classe Cat? Exercice 1.12 Combien de méthodes de la classe Cat retournent une valeur? Exercice 1.13 Combien de paramètres contient la méthode sleep? 6
8 Exercice 1.14 Essayez d appeler certaines méthodes de votre chat de façon interactive, en utilisant le menu contextuel du chat. Les méthodes intéressantes proviennent toutes de Inherited from Cat. Exercice 1.15 Est-ce que le chat s ennuie? Comment pouvez-vous faire pour qu il ne s ennuie pas? Exercice 1.16 Ouvrez l éditeur pour la classe MyCat. (C est là que vous allez écrire le code pour tous les exercices suivants.) Faites manger lechatquand ilagit.(c est àdire:danslaméthodeact, écrire unappelàla méthode eat.) Compiler. Testez en appuyant sur le bouton Act dans le panneau de contrôle de l exécution. Exercice 1.17 Faites danser le chat. (Ne pas le faire de façon interactive - écrivez du code dans la méthode act pour ce faire. Lorsque vous avez terminé, cliquez sur le bouton Act dans le panneau de contrôle de l exécution.) Exercice 1.18 Faites dormir le chat. Exercice 1.19 Faites exécuter à votre chat une séquence d actions de votre choix, choisies parmi celles qui sont disponibles. Exercice 1.20 Changer la méthode act de votre chat afin que, lorsque vous cliquez Act, si le chat est fatigué, il dort un peu. Si il n est pas fatigué, il ne fait rien. Exercice 1.21 Changer la méthode act de votre chat pour qu il danse s il s ennuie. (Mais seulement s il s ennuie.) Exercice 1.22 Changer la méthode act de votre chat pour qu il mange s il a faim. Exercice 1.23 Modifier la méthode act de votre chat de la façon suivante: Si le chat est fatigué, il dort un peu, et puis il crie hooray. S il n est pas fatigué, il crie seulement hooray. (Pour les essais, faire en sorte que le chat soit fatigué en appelant des méthodes de manière interactive. Comment pouvez-vous faire pour que le chat soit fatigué?) Exercice 1.24 Modifier le code de la méthode act de façon à obtenir le comportement suivant: Si votre chat est seul, faites-le dormir. S il n est pas seul, faites le crier: hooray. Testez en plaçant un deuxième chat dans le monde avant de lancer Act. 7
9 2 Le monde du crabe Exercice 2.1 Voici le code source de la classe CrabWorld du scénario little-crab-5 import greenfoot.*; // imports Actor, World, Greenfoot, GreenfootImage import java.util.random; import java.awt.color; public class CrabWorld extends World /** * Create the crab world (the beach). Our world has a size * of 560x560 cells, where every cell is just 1 pixel. */ public CrabWorld() super(560, 560, 1); populateworld(); /** * Create the objects for the start of the game. */ public void populateworld() addobject(new Crab(), 300, 300); addobject(new Lobster(), 90, 70); addobject(new Lobster(), 390, 200); addobject(new Lobster(), 360, 500); addobject(new Worm(), 20, 500); addobject(new Worm(), 30, 200); addobject(new Worm(), 60, 90); addobject(new Worm(), 80, 310); addobject(new Worm(), 150, 50); addobject(new Worm(), 210, 410); addobject(new Worm(), 220, 520); addobject(new Worm(), 380, 330); addobject(new Worm(), 410, 270); addobject(new Worm(), 530, 30); Onconstatequelesobjetssontplacés àlamain lesunsàlasuitedesautres.àl aidedel instruction while, modifier le code ci-dessus pour placer automatiquement un crabe, trois homards et dix vers aléatoirement sur l écran à l ouverture du scénario. 8
10 On utilisera la méthode Greenfoot.getRandomNumber(int limit). Écrire le code source de la nouvelle méthode populateworld. Exercice 2.2 On a ajouté au scénario little-crab-5 une sous-classe FatWorm de la classe Worm. On donne ci-dessous le code source de la méthode lookforworm de la classe Crab: /** * Check whether we have stumbled upon a worm. * If we have, eat it. If not, do nothing. If we have * eaten eight worms, we win. */ public void lookforworm() if ( cansee(worm.class) ) eat(worm.class); Greenfoot.playSound( slurp.wav ); wormseaten = wormseaten + 1; if (wormseaten == 8) Greenfoot.playSound( fanfare.wav ); Greenfoot.stop(); L appel de méthode cansee(worm.class) retourne true si le crabe voit un objet de la classe Worm ou de sa sous-classe FatWorm. 9
11 Modifier la méthode lookforworm de façon à ce que l attribut wormseaten soit augmenté de 2 lorsque le crabe mange un objet de la classe FatWorm, toutes choses restant égales par ailleurs. Réécrire complètement la méthode lookforworm ci-dessous, après lui avoir fait les modifications nécessaires. On veillera à changer le commentaire... 10
12 3 De l environnement intégré à la ligne de commande Le fascicule Introduction à la programmation orientée objet avec Greenfoot, tiré du livre Introduction to programming with Greenfoot de Michael Kölling donne un cours d introduction à la programmation dans le cadre d un environnement de programmation intégré. L environnement intégré Greenfoot fournit une fenêtre graphique, un diagramme de classes, un tableau commande du scénario (avec des boutons Run, Act, etc.) et un éditeur de texte pour afficher et modifier le code source d une classe. Nous supposons ici que l environnement Greenfoot vous est familier et que vous avez compris les bases de la programmation en Java qui sont exposées dans le fascicule Introduction à la programmation orientée objet avec Greenfoot. Nous allons maintenant nous intéresser à un environnement beaucoup plus basique. Il est tout à fait possible de compiler un programme Java avec des outils plus simples, en particulier si l on se contente d une interface utilisateur très limitée. Nous présentons ci-dessous ce qu il faut savoir au minimum pour pouvoir exécuter de petits programmes écrits en Java sur une machine récente. En bref, il faut un éditeur de texte (Smultron pour Mac, ou Notepad++ pour Windows, par exemple) et un compilateur. Tant sous Windows que sous OS X, un compilateur est d accès facile via une fenêtre de terminal. Une fois ces deux outils réunis, on peut compiler et exécuter de petits programmes Java. 3.1 La structure de base d un premier programme Java Un programme Java comporte au moins un fichier qui doit contenir au minimum une classe Java. La fenêtre ci-dessous, copie d écran d une fenêtre TextMate montre le programme ne comportant que la classe Bidon, sans aucune instruction à l intérieur du bloc formé des accolades qui suivent. Notons le commentaire, ignoré par le compilateur, mais essentiel pour le programmeur! 11
13 Nous pouvons compiler sans erreur un fichier de ce genre, pour peu qu il ait été enregistré sous le nom de Bidon.java. Le nom de la classe commence conventionnellement par une majuscule. Le nom du fichier doit être identique au nom de la classe. Le code source correspondant est le suivant: /** * Bidon.java - une classe vide dans un fichier texte. * On ne peut pas faire plus simple! * juin 2010 Thivent Besson */ public class Bidon Supposons maintenant que, tout comme le suggère la copie d écran plus haut, le code source ci-dessus a été enregistré sur le disque dur de notre ordinateur. On pourra alors, à l aide d un compilateur, créer un fichier Bidon.class, contenant du bytecode Java que la machine virtuelle Java peut exécuter. Pour cela, il faut accéder au compilateur. Le paragraphe suivant présente une introduction minimale à la ligne de commande du Mac, qui expose comment compiler un fichier Java. Exercice 3.1 Dans votre éditeur de texte, saisir le code source de la classe Bidon.java. Sauvegarder ce fichier texte dans un dossier exercice 1 1, qui devra être placé dans le répertoire contenant tous vos exercices. 3.2 La ligne de commande du Mac Sous OS X, le compilateur est installé par défaut et on y accède au moyen de la ligne de commande du terminal Unix. Il suffit, pour accéder au compilateur, d ouvrir une fenêtre terminal à l aide de l application portant le même nom. On obtient une fenêtre qui ressemble à celle-ci: La ligne de commande est un outil de gestion extrêmement puissant. Nous nous bornerons à utiliser ici le compilateur Java. Pour pouvoir l employer, il faut tout d abord être en mesure d accéder au fichier contenant le code source Java. Le fichier est enregistré dans un dossier que nous avons choisi: ici, le dossier Documents de notre session, qui contient lui-même un dossier 12
14 exercicesjava; dans ce dernier, nous trouvons un dossier exercice 1 1, dans lequel finalement se trouve notre fichier Bidon.java. Il nous faut maintenant trouver le moyen d accéder à ce fichier depuis la ligne de commande. Il faut savoir ici que lors de l ouverture d une fenêtre terminal, le répertoire courant peut être donné par la commande pwd, autrement dit: present working directory; les commandes de la ligne de terminal seront très souvent de tels sigles. Voyons l effet de la commande pwd: Le répertoire courant est thiventbesson, sous-répertoire de Users, qui est le dossier contenant les fichiers personnels de la session courante. Exercice 3.2 Ouvrir une fenêtre de l application Terminal sur votre session. Déterminer le répertoire courant et l ouvrir dans l interface graphique du système d exploitation de votre machine. 13
15 Pour obtenir la liste des fichiers contenus dans le répertoire courant, on utilise la commande ls et on obtient: On voit maintenant le dossier Documents dans la liste des sous-répertoires du répertoire courant. Il faut trouver moyen de changer de répertoire pour se trouver à l intérieur du dossier Documents. Pour ce faire, on utilisera la commande cd, change directory. La commande cd Documents aura l effet suivant: Enutilisantàbonescientlacommandecdencoredeuxfois,onpeutseplacerdansledossierdans lequel se trouve notre programme Bidon.java. Une vérification au moyen de la commande ls confirme que nous nous trouvons au bon endroit. Exercice 3.3 Ouvrir une fenêtre de l application Terminal sur votre session. Faire en sorte que le répertoire courant soit celui dans lequel se trouve votre fichier Bidon.java. 14
16 3.3 Compilation bidon La compilation du fichier Bidon.java est maintenant un jeu d enfant. Il suffit en effet d écrire la commande suivante: javac Bidon.java L effet en est le suivant: Apparemment, il ne s est rien passé. La commande ls nous montre le contraire. En effet, le compilateur a produit un fichier Bidon.class qui se trouve dans le répertoire courant. Pour exécuter un fichier après compilation, on utilise simplement la commande java suivi du nom du fichier sans l extension.class. Essayons d exécuter notre programme Bidon, au moyen de la commande java Bidon. Exercice 3.4 Compiler le fichier Bidon.java et tenter d exécuter le fichier résultat Bidon.class avec la machine virtuelle Java. Nous aurions pu nous attendre à ce que l exécution se borne à ne rien faire. Mais nous obtenons le message d erreur suivant: Exception in thread "main" java.lang.nosuchmethoderror: main Il nous faut maintenant éliminer la cause de cette erreur. C est le sujet du paragraphe suivant. 15
17 4 Structure d un programme Java autonome 4.1 La méthode main Force nous est de constater que la compilation d une classe vide ne provoque pas d erreur, mais que la machine virtuelle chargée de l exécution ne trouve pas la méthode main de notre programme. Tout programme java doit en effet comporter une méthode main chargée du fil d exécution principal. La syntaxe de cette méthode est la suivante: public static void main (String[] args) // Code exécutable à cet endroit Exercice 4.1 Editer le fichier Bidon.java et ajouter la méthode main au bloc vide suivant la déclaration de la classe Bidon. Compiler ce nouveau fichier et vérifier qu il est exécuté sans erreur par la machine virtuelle Java même s il ne se passe rien à l exécution. En résumé, un programme Java minimal est formé d une classe contenant une méthode main comme ci-dessous. /** * Bidon.java - une classe contenant une méthode main vide * le plus simple que l on puisse faire sans erreur à l exécution! * juin 2010 Thivent Besson */ public class Bidon public static void main (String[] args) La méthode main est une méthode statique qui n est liée à aucune instance particulière de la classe dans laquelle elle se trouve. Le paramètre String[] args de la méthode main permet de récupérer des arguments transmis au programme au moment de son lancement. Pour que le programme Bidon.java fasse vraiment quelque chose, nous allons mettre du code source dans la méthode main. 16
18 4.2 Un tout petit premier programme On veut écrire ici un programme qui affiche les nombres de 1 à 10, directement dans la fenêtre de terminal. Il suffit d utiliser une boucle for et d appeler la méthode println() de l objet System.out qui est ici la fenêtre de terminal dans laquelle nous travaillons depuis le début. Pour que la méthode println() affiche le nombre voulu, on lui passe en paramètre le compteur i de la boucle for. Exercice 4.2 Dans un dossier exercice 2 2, créer un fichier CompteJusquaDix.java dans lequel écrire le programme décrit ci-dessus. Compiler et lancer le résultat dans une fenêtre terminal. On donne ci-dessous la solution de l exercice 2.2: /** * CompteJusquaDix.java - une classe pour afficher * les dix premiers nombres entiers * juin 2010 Thivent Besson */ public class CompteJusquaDix public static void main (String[] args) for (int i = 1; i <= 10; i += 1) System.out.println(i) Exercice 4.3 Écrire un programme qui affiche les 20 premiers multiples de 7. Compiler et lancer le résultat dans une fenêtre terminal. 17
19 4.3 Un exemple un peu plus complexe On donne maintenant un exemple de code un peu plus élaboré, utilisant des variables déclarées dans la fonction main. /** * AfficheLogarithmes.java - une classe permettant d afficher les * logarithmes des puissances successives d un nombre et de constater * que ce sont des multiples du logarithme du nombre de départ. * juin 2010 Thivent Besson */ public class AfficheLogarithmes public static void main (String[] args) int n; double base; double nombre; double resultat; n = 5; base = 2.0; nombre = 2.4; System.out.println(); for (int i = 1; i <= n; i += 1) resultat = Math.log(Math.pow(nombre, i))/math.log(base); System.out.println("Le log en base " + base + " de " + nombre + " élevé à la puissance " + i + " vaut " + resultat); resultat = Math.log(nombre)/Math.log(base); System.out.println(); System.out.println("Ce sont les multiples de " + resultat); System.out.println(); Exercice 4.4 Expliquer ce que fait le code ci-dessus. 18
20 Exercice 4.5 En vous inspirant de l exemple ci-dessus, par exemple, inventer un petit programme qui utilise des variables déclarées dans la fonction main. Tester le programme en question. 4.4 Pour passer des paramètres On aimerait bien, à ce stade, pouvoir passer en paramètre des nombres ou des chaînes de caractères à notre programme. Il suffit, pour ce faire, d utiliser le tableau args défini dans l en tête de notre méthode main. Comme indiqué dans la liste des paramètres de cette méthode, le tableau args est un tableau de chaînes de caractère. Aucun problème donc pour passer des chaînes de caractères à notre programme. Mais nous aimerions récupérer des arguments numériques. Pour ce faire, Java nous a prévu les méthodes de classe Integer.parseInt() et Double.parseDouble(). Voici notre programme modifié: /** * AfficheLogAvecParam.java - une classe permettant d afficher les * logarithmes des puissances successives d un nombre et de constater * que ce sont des multiples du logarithme du nombre de départ. * * On doit passer trois paramètres à la méthode main * depuis la ligne de commande: le nombre d étapes, * la base du log et le nombre. * juin 2010 Thivent Besson */ public class AfficheLogAvecParam public static void main (String[] args) int n; double base; double nombre; double resultat; n = Integer.parseInt(args[0]); base = Double.parseDouble(args[1]); nombre = Double.parseDouble(args[2]); System.out.println(); System.out.println("Les logarithmes de " + args[3]); System.out.println(); for (int i = 1; i <= n; i += 1) 19
21 resultat = Math.log(Math.pow(nombre, i))/math.log(base); System.out.println("Le log en base " + base + " de " + nombre + " élevé à la puissance " + i + " vaut " + resultat); resultat = Math.log(nombre)/Math.log(base); System.out.println(); System.out.println("Ce sont les multiples de " + resultat); System.out.println(); Pour passer les paramètres au programme on compile comme d habitude et on appelle le programme depuis la ligne de commande avec l instruction suivante: java AfficheLogAvecParam "Thivent Besson" Les paramètres sont séparés par un espace. Le premier paramètre est un entier, les deux suivants sont des codes à virgules et le dernier est une chaîne de caractère. On peut voir l effet de cette commande dans une fenêtre terminal: Exercice 4.6 Modifier votre programme inventé à l exercice précédent de sorte à ce que l appel de la ligne de commande puisse lui passer des valeurs en paramètre. Compiler et faire exécuter le résultat par la machine virtuelle java, en ligne de commande, bien entendu. On peut remarquer que notre programme ne fait quasiment pas usage du fait que Java est un langage orienté objet. Nous nous sommes bornés à utiliser quelques méthodes de classes prédéfinies dans Java, mais nous n avons instancié aucun objet dont nous aurions créé la classe nous-mêmes. C est normal, car l un des buts de ce paragraphe du cours est de faire un peu de programmation procédurale en Java, c est à dire de la programmation qui n utilise pas le concept d objet et qui produit des suites d instructions devant être traitées séquentiellement. Nous espérons par ce biais vous permettre d entraîner les instructions de base du langage Java. 20
22 5 Généralités sur Java Exercice 5.1 Faire tourner un programme contenant l instruction suivante: System.out.println(i++); Quel sera le nombre affiché à la console? Exercice 5.2 Comment peut-on connaître les paramètres à fournir pour créer un nouvel objet? En consultant... a) les constructeurs b) les méthodes c) les packages d) les librairies Exercice 5.3 La méthode dont la signature est donnée ci-dessous se trouve dans la classe Math, comment faire pour calculer le sinus de 1 radian? public static double sin (double angle); a) Math m = new Math(); m.sin(1); b) new Math().sin(1); c) Math.sin(1); d) Math.static.sin(1); Exercice 5.4 Que va afficher cette instruction à la console? System.out.println ( " enfants"); a) 45 enfants b) 9 enfants c) 0 d) 0 enfants Exercice 5.5 Que vaut c après l exécution du code suivant : int a = 41, b = 10, c; c = a / b; a) 4.1 b) 4 c) 0 d) 1 21
23 Exercice 5.6 Cette déclaration private int age; est faite dans une classe Person. Où cette variable ne sera-t-elle pas visible? a) Dans les méthodes de la classe Person b) Dans le corps de la classe Person c) Dans le code qui utilise un objet de la classe Person d) Nulle part, elle sera visible partout Exercice 5.7 Le code ci-dessous est-il correct? int [] tab; //tableau d entiers for(int i=0 ; i<10 ; i++) tab[i]=0; Exercice 5.8 Quelle instruction faut-il utiliser pour créer un nouveau tableau d entiers de type int de 5 cases? a) Array t = new Array ("int", 5); b) int t = new int[5]; c) int[] t = new int[5]; d) int[] t = new int[4]; e) Array t = new int[5]; Exercice 5.9 Que se produit-il si on compile et exécute le programme suivant : public class Test public static void main(string []args) int []t; t = new int[4]; for(int i = 0; i<= 4; i++) System.out.print(t[i]); a) b) c) il ne se compile pas d) une erreur d exécution se produit 22
24 Exercice 5.10 Que manque-t il pour que cette déclaration de méthode compile? public somme (int a, int b) return a + b; a) Rien du tout, c est correct b) Il manque le type de retour c) On ne peut pas renvoyer directement a+b, il faut créer une variable locale, y placer le résultat de a+b puis la renvoyer d) Il manque le modificateur private Exercice 5.11 Étant donné la définition suivante de la classe Test, quelles méthodes données plus bas pourraient être placées après le commentaire? public class Test public void mamethode(int i, String s) //ici a) public void mamethode(string s, int i) b) public int mamethode(int i, String s) c) public void mamethode(int i, String texte) d) public void madeuxiememethode(int i, String s) Exercice 5.12 Pour la classe Info définie ainsi : public class Info public Info() System.out.println("Groupe"); public Info(int i) this(); System.out.println(" OCI " + i); Qu affichera l instruction suivante : Info x = new Info(2);? 23
25 a) erreur de compilation b) erreur d exécution c) Groupe OCI 2 d) OCI 2 Exercice 5.13 Soit la classe C définie ainsi : public class C public static int i; public int j; public C() i++; j=i; Qu affichera le code suivant : C x = new C(); C y = new C(); C z = x; System.out.println(z.i + " et " + z.j); a) 2 et 2 b) 1 et 1 c) 2 et 1 d) 1 et 3 Exercice 5.14 Observer les classes suivantes : public class Person public void talk() System.out.print("I am a Person "); public class Student extends Person public void talk() 24
26 System.out.print("I am a Student "); Quel sera le résultat du morceau de code qui suit : public class Test public static void main(string[] args) Person p = new Student(); p.talk(); a) I am a Person b) I am a Student c) I am a Person I am a Student d) I am a Student I am a Person 6 Quelques exercices d entraînement Ces exercices sont tirés du livre Apprendre à programmer avec Python 3 de Gérard Swinnen. Pour vous aider à faire ces exercices, il vous faudra peut-être une référence résumant les éléments du langage Java vus jusqu ici. Le site openclassrooms offre des explications de bonne qualité et la page Bien commencer en Java du tutoriel de programmation en java vous sera sans doute utile. L URL du site est: Faire calculer la machine Exercice 6.1 Écrire un programme qui calcule le volume d un parallélépipède rectangle dont sont fournis au départ la largeur, la hauteur et la profondeur. Exercice 6.2 Écrire un programme qui convertit un nombre entier de secondes fourni au départ en un nombre d années, de mois, de jours, de minutes et de secondes (utiliser l opérateur modulo: %). 6.2 Instructions répétitives Exercice 6.3 Écrire un programme qui affiche en colonne les 20 premiers termes de la table de multiplication 25
27 par 13, en signalant au passage à l aide d un décalage vers la droite ceux qui sont également des multiples de 3. Exercice 6.4 Écrire un programme qui affiche en colonne les n premiers termes de la table de multiplication par k, en signalant au passage à l aide d un décalage vers la droite ceux qui sont également des multiples de m. Les nombres n, m et k sont des entiers. Exercice 6.5 Écrire un programme qui calcule les 50 premiers termes de la table de multiplication par 17, mais n affiche que ceux qui sont des multiples de 7. Exercice 6.6 Écrire un programme qui calcule les n premiers termes de la table de multiplication par k, mais n affiche que ceux qui sont des multiples de m. Exercice 6.7 Écrire un programme qui affiche un nombre donné de lignes avec sur chaque ligne un nombre d étoile correspondant au numéro de la ligne. 6.3 Données numériques Exercice 6.8 Écrire un programme qui convertit en radians un angle fourni au départ en degrés, minutes et secondes. Exercice 6.9 Écrire un programme qui convertit en degrés, minutes et secondes un angle fourni au départ en radians. Exercice 6.10 Écrire un programme qui convertit en degrés Celsius une température exprimée au départ en degrés Farenheit, ou l inverse. La formule de conversion s écrit: Exercice 6.11 T F = T C Écrire un programme qui calcule les intérêts accumulés chaque année pendant 20 ans, par capitalisation d une somme de 100 francs placée en banque au taux fixe de 2.25%. Exercice 6.12 Une légende de l Inde ancienne raconte que le jeu d échecs a été inventé par un vieux sage, que son roi voulut remercier en lui affirmant qu il lui accorderait n importe quel cadeau en récompense. Le vieux sage demanda qu on lui fournisse simplement un peu de riz pour ses vieux jours, et plus précisément un nombre de grains de riz suffisant pour que l on puisse en déposer un seul sur la 26
28 première case du jeu qu il venait d inventer, deux sur la suivante, quatre sur la troisième, et ainsi de suite jusqu à la 64ème case. Ecrire un programme Java qui affiche le nombre de grains à déposer sur chacune des 64 cases du jeu. Calculer ce nombre de deux manières: a) sous la forme d un nombre entier de grains; b) en exprimant le nombre de grains en notation scientifique. 6.4 Données alphanumériques Exercice 6.13 Écrire un programme qui détermine si une chaîne de caractères contient ou non le caractère e. Exercice 6.14 Écrire un programme qui compte de nombre d occurrences du caractère e dans une chaîne de caractères. Exercice 6.15 Écrire un programme qui recopie une chaîne dans une nouvelle variable, en insérant des astérisques entre les caractères. Ainsi, par exemple, gaston devra devenir g*a*s*t*o*n. Exercice 6.16 Écrire un programme qui recopie une chaîne dans une nouvelle variable, en l inversant. Ainsi, par exemple, zorglub devra devenir bulgroz. Exercice 6.17 En partant de l exercice précédent, écrire un programme qui détermine si une chaîne de caractères donnée est un palindrome, c est à dire une chaîne qui peut se lire indifféremment dans les deux sens, comme par exemple radar ou sugus. Exercice 6.18 Écrire un programme nommé MultiConcat qui prend comme paramètres une chaîne de caractères et un entier. Ce programme retourne la chaîne de caractères passée en paramètre concaténée avec elle-même n fois, où n est l entier passé en paramètre. Par exemple, si la chaîne de caractères est hi et l entier n = 4, le programme retourne hihihihi. Ce programme retourne la chaîne originale si l entier passé en paramètre est strictement plus petit que deux. 27
29 6.5 Pour commencer avec les tableaux Exercice 6.19 Écrire un programme qui affiche sur une ligne tous les éléments d un tableau. Par exemple, le tableau déclaré comme suit: String[] tableaudesjours = "Lundi", "Mardi", "Mercredi", "Jeudi", "Vendredi", "Samedi", "Dimanche" devrait apparaître sous la forme ci-dessous. Lundi Mardi Mercredi Jeudi Vendredi Samedi Dimanche Exercice 6.20 Écrire un programme qui recherche le plus grand élément présent dans un tableau de nombres donné. Par exemple, si on l appliquait au tableau déclaré comme suit: int[] tableaunombres = 32, 5, 12, 8, 3, 75, 2, 15 cela nous donnerait Le plus grand élément de la liste a la valeur 75. Exercice 6.21 Écrire un programme qui analyse un par un tous les éléments d un tableau de nombres pour générer deux nouveaux tableaux. L un contiendra les nombres pairs de la liste initiale, et l autre les nombres impairs. Exercice 6.22 Écrire un programme qui analyse un par un tous les éléments d un tableau de mots pour générer deux nouveaux tableaux. L un contiendra les mots comptant moins de six caractères, l autre les mots comptant six caractères ou davantage. 28
30 7 La programmation objet en Java Les concepteurs de langages cherchent les moyens de faciliter la création et la maintenance du code. Une méthode souvent retenue consiste à structurer le langage au moyen de procédures qui sont des blocs de code effectuant une action bien précise sur des données du programme. Il est possible de regrouper ces procédures en bibliothèques utilisables par d autres programmeurs. Cette façon de faire est efficace mais présente l inconvénient de séparer le code et les données et d être sensible aux effets de bord. L idée de base des langages objets, comme Java, est de regrouper données et code en une même entité l objet. Cette réunion données-code se nomme encapsulation. 7.1 Classes et Objets Une classe est une collection d attributs (ou champs) contenant des valeurs; de constructeurs servant à créer les objets; de méthodes définissant des actions. On peut considérer une classe comme le moule qui permet de fabriquer les objets. Un objet est une réalisation concrète et utilisable de la classe : on dit que c est une instance de la classe. new Classe Instances objet 1 objet 2 objet 3 Voyons comment déclarer une classe en nous inspirant de Greenfoot et du scénario little-crab. Les attributs et les méthodes sont adaptées pour rendre l exemple plus parlant. public class Animal Pour déclarer les variables constituant les attributs de la classe, nous devons choisir leur type. Prenons par exemple le type int pour l âge, float pour la taille et String pour la couleur. 29
31 public class Animal public int age; public float taille; public String couleur; L étape suivante consiste à ajouter des méthodes à notre classe. Avant de déclarer une méthode, il faut décider si elle prend des arguments et si elle retourne une valeur : Le constructeur Animal() qui est une méthode, sans valeur de retour, portant le même nom que la classe. Cette méthode est invoquée lors de la création de l objet de la classe Animal (opérateur new). La méthode move() permet à l animal de se déplacer. Elle n a pas besoin d argument et ne retourne aucune valeur. La méthode turn(int angle) permet à l animal de tourner d un angle en degré dans le sens des aiguilles d une montre. Elle a besoin d un argument et ne retourne aucune valeur. La méthode atworldedge() teste si l animal est au bord du monde. Elle n a pas besoin d argument et retourne true si c est le cas ou false sinon. La nouvelle version de la classe Animal ressemble à ceci : public class Animal public int age; public float taille; public String couleur; public Animal()... public void move()... public void turn(int angle)... public boolean atworldedge()... 30
32 7.2 Une classe et ses méthodes Nous désirons gérer des comptes bancaires. Pour cela, nous implémentons une classe Compte avec deux attributs : le numéro du compte le solde du compte et quatre méthodes : deposer retirer avoirsolde avoirnumero Nous résumons cette classe sous la forme d un schéma : Compte int numero double solde void deposer(double montant) void retirer(double montant) int avoirnumero() double avoirsolde() L implémetation est relativement simple, en quelques mots : la méthode deposer effectue la somme du solde courant et d un montant : solde = solde + montant la méthode retirer effectue la différence entre solde courant et d un montant : solde = solde - montant la méthode avoirnumero retourne le numéro du compte la méthode avoirsolde retourne le solde du compte Voici l implémentation de la classe Compte. public class Compte public int numero; public double solde; /** * Déposer un montant sur le compte */ public void deposer(double montant) 31
33 solde = solde + montant; /** * Retirer un montant du compte */ public void retirer(double montant) solde = solde - montant; /** * Retourne le numero du compte */ public int avoirnumero() return numero; /** * Retourne le solde du compte */ public double avoirsolde() return solde; Créons un compte bancaire Compte moncompte. Créons une classe Banque pour tester le tout dans la méthode main : class Banque public static void main (String arg[]) Compte moncompte; moncompte = new Compte(); System.out.println("****************"); System.out.println("Création d un nouveau compte"); System.out.println(monCompte.numero); System.out.println(monCompte.solde); 32
34 Remarque La déclaration Compte moncompte ne réserve pas d emplacement pour un objet de type Compte, mais seulement un emplacement pour une référence à un objet de type Compte. L emplacement pour l objet proprement dit sera alloué sur une demande explicite du programme, en faisant appel à l opérateur new. Ainsi l expression : new Compte() // attention à la présence des parenthèses crée un emplacement pour un objet de type Compte et fournit sa référence en résultat. Voici l exécution du programme Banque : La classe Compte ne contient pas de constructeur. La définition de cette méthode n est pas obligatoire dans la mesure où un constructeur par défaut (appelé parfois constructeur sans argument) est défini par le compilateur Java si la classe n en possède pas. La création de l objet (instance) attribue une valeur par défaut à chaque variable d instance, qu elle soit d un type primitif (dans notre cas : 0 pour la variable numero et 0.0 pour la variable solde) ou de référence (sa valeur est alors null). Modifions la classe Banque. class Banque public static void main (String arg[]) Compte moncompte; moncompte = new Compte(); System.out.println("****************"); System.out.println("Création d un nouveau compte"); moncompte.numero=200; // Affectation d un numéro de compte moncompte.solde= ; // Affectation d un solde au compte System.out.println(monCompte.numero); System.out.println(monCompte.solde); moncompte.deposer(300.0); 33
35 System.out.println("Le numéro de moncompte est : "+moncompte.avoirnumero()); System.out.println("Le solde de moncompte est : "+moncompte.avoirsolde()); L instruction moncompte.numero=200 attribue un numéro de compte, tandis que l instruction moncompte.deposer(300.0) ajoute le nombre à virgule au solde du compte (appel de méthode). Voici l exécution du nouveau programme Banque : Utilisation des objets Accès aux données La référence à une donnée définie dans une classe d objet a pour syntaxe : nomobjet. nomattribut Le point marque la séparation entre le nom de l objet et le nom de la méthode de cet objet. Accès aux méthodes Quand on applique les méthodes aux objets, on dit qu on envoie des messages aux objets. Cela s écrit ainsi : nomobjet. nomméthode() 7.3 La notion de constructeur Dans l exemple Compte, le compilateur utilise un constructeur par défaut. Nous souhaitons définir immédiatement le numéro et le solde du compte dès sa création. Pour cela nous avons besoins d un constructeur. Voici un exemple de constructeur : public Compte(int a, double b) numero=a; solde=b; 34
36 Dés lors les instructions Compte moncompte; moncompte = new moncompte(300, ); initialise le compte moncompte avec le numéro 300 et un solde égal à Voici quelques règles à suivre concernant les constructeurs : un constructeur doit toujours être une méthode publique vous devez impérativement donner le même nom que votre classe au constructeur un constructeur ne retourne rien, c est à dire que vous n ajouterez pas de return dans cette méthode vous ne devez pas mettre de void, même si le constructeur ne retourne rien 7.4 L accessibilité aux attributs d une classe Dans l introduction de ce chapitre, nous avons parlé d encapsulation. L encapsulation est un mécanisme consistant à rassembler les données (les arguments) et les méthodes au sein d une structure en cachant l implémentation de l objet, c est-à-dire en empêchant l accès aux données par un autre moyen que les services proposés. L encapsulation permet donc de garantir l intégrité des données contenues dans l objet. L encapsulation permet de définir des niveaux de visibilité des éléments de la classe. Ces niveaux de visibilité définissent les droits d accès aux données selon que l on y accède par une méthode de la classe elle-même, d une classe héritière, ou bien d une classe quelconque. Il existe trois niveaux de visibilité : publique : les fonctions de toutes les classes peuvent accéder aux données ou aux méthodes d une classe définie avec le niveau de visibilité public. Il s agit du plus bas niveau de protection des données protégée : l accès aux données est réservé aux fonctions des classes héritières, c est-à-dire par les fonctions membres de la classe ainsi que des classes dérivées privée : l accès aux données est limité aux méthodes de la classe elle-même. Il s agit du niveau de protection des données le plus élevé Dans la classe Compte définies au point 4.2, les attributs sont publiques. En les déclarant privés, l accès à ces attributs avec une expression moncompte.numero=200 n est plus possible. Voyons cela avec un exemple plus simple. public class Test private int x; Créons une instance de Test et essayons d accéder à l attribut x. Voici une classe TestX qui montre le résultat : 35
37 class TestX public static void main (String arg[]) Test test; test = new Test(); System.out.println("****************"); System.out.println(test.x); Nous obtenons une erreur de compilation, comme le montre la fenêtre ci-dessous : Pour accéder ou modifier des attributs déclarés privés, on crée des méthodes nommées accesseurs ou mutateurs La notion d accesseur Un accesseur est une méthode permettant de récupérer le contenu d une donnée membre protégée. Un accesseur, pour accomplir sa fonction : doit avoir comme type de retour le type de la variable à renvoyer ne doit pas nécessairement posséder d arguments Une convention de nommage veut que l on fasse commencer de façon préférentielle le nom de l accesseur par le préfixe get, afin de faire ressortir sa fonction première. La syntaxe d un accesseur réduit à sa plus simple expression ressemble donc à ceci : public class Test private int x; public int getx() return x; 36
38 7.4.2 La notion de mutateur Un mutateur est une méthode permettant de modifier le contenu d une donnée membre protégée. Un mutateur, pour accomplir sa fonction : doit avoir comme paramètre la valeur à assigner à la donnée membre. Le paramètre doit donc être du type de la donnée membre ne doit pas nécessairement renvoyer de valeur (il possède dans sa plus simple expression le type void) Une convention de nommage veut que l on fasse commencer de façon préférentielle le nom du mutateur par le préfixe set. La syntaxe d un mutateur réduit à sa plus simple expression ressemble donc à ceci : public class Test private int x; public void setx (int a) x = a; Les attributs statiques Unattribut statiqueest unattributqui est communàtouslesobjetsque vous pourrezcréer. On peut par exemple citer un compteur du nombres d instances de classe que vous aurez lancées. Si vous souhaitez compter le nombre de fois où vous avez instancié la classe Test vous pourrez écrire ceci : public class Test2 public static int nombre=0; public Test2() // Constructeur nombre=nombre+1; System.out.println("Nombre d instances créées : " + nombre); En testant cette classe : class TestX2 37
39 public static void main (String arg[]) System.out.println("****************"); Test2 test1 = new Test2(); Test2 test2 = new Test2(); Test2 test3 = new Test2(); Nous obtenons : 7.5 L héritage Introduction L avantage essentiel d un langage orienté-objet est que le code est réutilisable. Grâce à l héritage, on peut faire dériver une nouvelle classe d une classe existante et ainsi en récupérer les attributs et méthodes, sans avoir à la réécrire complètement. Nous avons rencontré la notion d héritage dans Greenfoot. Diagramme de classes dans Greenfoot Dans ce scénario : la classe Animal est une sous-classe de la classe Actor la classe Actor est une super-classe de la classe Animal 38
40 les classes Crab, Worm et Lobster sont des sous-classes de la classe Animal Si Enfant est une sous-classe de Parent, on dit que la classe Enfant hérite de la classe Parent, qu elle étend cette ancienne classe. Enfant est alors une sous-classe de Parent. Parent est une super-classe de Enfant. Toujours dans Greenfoot, nous avons la classe Animal : public class Animal private int age; private float taille; private String couleur; public Animal()... public void move()... public void act()... public void turn(int angle)... public boolean atworldedge()... et la classe Crab qui est une sous-classe de la classe Animal : public class Crab extends Animal private GreenfootImage image1; private GreenfootImage image2; private int wormseaten; public Crab()... public void act()... public void switchimage()... public void checkkeypress()... public boolean lookforworm()... La classe Crab peut accéder à toutes les méthodes publiques de la classe Animal. Dans la classe Crab, la méthode act() est redéfinie. Cela permet de redéfinir une méthode de la super-classe 39
41 Animal, en proposant une nouvelle définition. Il faut respecter la signature de la méthode (type des arguments), ainsi que le type de valeurs de retour. C est alors cette nouvelle méthode qui sera appelée sur tout objet de la sous-classe, masquant en quelque sorte la méthode de la classe de base. Une sous-classe reprend toutes les propriétés et méthodes de la super-classe, tout en pouvant intégrer de champs nouveaux (attributs et méthodes). Ceux-ci caractériseront et distingueront les objets de la classe héritée des objets de la classe parent. Autrement dit, cela signifie qu une instance de la classe Enfant aura la possibilité d utiliser, outre des attributs et méthodes supplémentaires, toutes les ressources définies dans Parent, si des modificateurs ne l empêche pas. Une méthode d une classe Enfant n a pas accès aux membres privés de sa classe Parent. Si c était le cas, il suffirait de créer une classe Enfant pour violer le principe d encapsulation. En Java, toutes les classes sont dérivées de la classe spéciale Object. C est la racine de la hiérarchie des classes (cela entraine que toute classe Java possède déjà à sa naissance un certain nombre de variables et de méthodes). Dans la déclaration d une classe si la clause extends n est pas présente, la surclasse est donc Object directement Un exemple complet Considérons un exemple complet d une classe Parent Ville et d une classe Enfant Capitale. Ville String nom int nbhab Ville(String lenom) Ville (String lenom, int lenbhab) String getnom() int getnbhab() void setnbhab(int nvnbhab) String presentetoi() Capitale String pays Capitale(String lenom, String lepays) Capitale(String lenom, String lepays, int lenbhab) String getpays void setpays(string nompays) String presentetoi() Voici l implémentation de la classe Ville : class Ville 40
42 //le nom ne sera accessible que par la classe Ville, et pas par la classe Capitale private String nom; //le nombre d habitant sera accessible par la classe Capitale protected int nbhab; public Ville(String lenom) nom = lenom.touppercase( );//ainsi tous le noms de ville seront en majuscule nbhab = -1; //-1 signifie que le nombre d habitant est inconnu public Ville (String lenom, int lenbhab) nom = lenom.touppercase( ); if (lenbhab< 0) System.out.println("Un nombre d habitant doit ^etre positif."); nbhab = -1; else nbhab = lenbhab; public String getnom( ) return nom; //pas d accesseur en écriture pour le nom //donc il est impossible de changer le nom d une ville public int getnbhab( ) return nbhab; public void setnbhab(int nvnbhab) if (nvnbhab < 0) System.out.println("Un nombre d habitant doit ^etre positif."); System.out.println("La modification n a pas été prise en compte); else nbhab = nvnbhab; 41
43 public String presentetoi() String presente = "Ville "+ nom +" nombre d habitants "; if (nbhab == -1) presente = presente + "inconnu"; else presente = presente + " = " + nbhab; return presente; Et voici l implémentation de la classe Capitale : public class Capitale extends Ville private String pays; //constructeurs public Capitale(String lenom, String lepays) super(lenom); //appel du constructeur de Ville //nbhab est initialisé à 1 par ce constructeur pays = lepays; public Capitale(String lenom, String lepays, int lenbhab) super(lenom, lenbhab); pays = lepays; //accesseurs supplémentaires public String getpays( ) return pays; public void setpays(string nompays) pays = nompays; //méthode presentetoi( ) redéfinie 42
44 public String presentetoi( ) String presente = super.presentetoi( ); presente = presente + " Capitale de "+ pays; return presente; Pour tester ces deux classes, créons une classe TestVille : public class TestVille public static void main(string args[]) Ville v1 = new Ville("Lausanne", ); Ville v2 = new Ville("Vevey"); Capitale c1 = new Capitale("Paris", "France", ); Capitale c2 = new Capitale("Berne", "Suisse"); System.out.println("******************************"); System.out.println(v1.presenteToi( )); System.out.println(v2.presenteToi( )); System.out.println(c1.presenteToi( )); System.out.println(c2.presenteToi( )); System.out.println("******************************"); Finalement, l exécution de ce dernier programme donne : 8 Exercices sur les objets en java 8.1 Figures géométriques Exercice 8.1 Écrire une classe Rectangle avec deux champs longueur et largeur, avec un constructeur et 43
45 avec les méthodes aire, perimetre et description (qui donne les caractéristiques du rectangle : longueur, largeur, aire et périmètre). Rectangle int longueur int largeur Rectangle(int x,int y) int aire() int perimetre() String description() Exercice 8.2 Écrire une sous-classe Carre de la classe Rectangle. Carre Carre(int c) Exercice 8.3 Créer une méthode dessinerectangle de la classe Rectangle qui dessine sommairement le rectangle à l aide d étoiles. Créer ensuite une méthode main de la classe Rectangle telle que suite au lancement du programme, on obtientladescription etledessin d un carrési un seul argument(côté) est donnéetd unrectangle si deux arguments (longueur, largeur) sont fournis. Exercice 8.4 Écrire une classe représentant des cercles. Cette classe contient deux constructeurs : a) Cercle() sans argument qui crée un cercle dont le rayon est égal à 1 44
46 b) Cercle(double r) avec un argument qui crée un cercle de rayon r Écrire les méthodes suivantes de la classe Cercle. a) pour calculer l aire b) pour calculer le périmètre c) pour obtenir le rayon d) pour modifier le rayon d un cercle déjà créé e) pour donner les caractéristiques (rayon et aire) du cercle Exercice 8.5 On peut considérer qu un cylindre est un cercle dont la hauteur est donnée. Construire une classe Cylindre qui dérive de la classe Cercle. Créer un constructeur Cylindre() sans argument qui crée un cylindre dont le rayon du cercle de base est égal à 1 et dont la hauteur est égale à 5 et un constructeur Cylindre(double r, double h) qui crée un cylindre dont le rayon du cercle de base est r et dont la hauteur est h. Écrire les méthodes qui calculent le volume et l aire totale d un cylindre, ainsi que la méthode qui donne les caractéristiques (rayon, aire totale et volume) du cylindre Formules : volume = π r 2 h et aire totale = 2πr (r +h) Exercice 8.6 Créer une méthode main de la classe Cercle telle que suite au lancement du programme, on obtient la description d un cercle si un seul argument (rayon) est donné et d un cylindre si deux arguments (rayon, hauteur) sont fournis. 8.2 La citerne Exercice 8.7 Il s agit de développer une classe simulant une citerne d eau potable. Développez la classe Citerne qui possède les propriétés et fonctionnalités suivantes : a) une citerne possède un volume maximal de 1000 litres, b) une citerne a un volume d eau actuel, c) on peut ajouter de l eau à la citerne (attention au volume maximal) d) on peut retirer de l eau de la citerne (attention au retrait maximal possible) e) la citerne renseigne à l aide d un indicateur sur son volume actuel, f) la citerne possède aussi un indicateur affichant le taux de remplissage en pourcents. Ajouter un constructeur Citerne() sans argument qui permet de créer une citerne de 1000 litres vide et une méthode main qui simule quelques remplissages et retraits aléatoires successifs. Exercice 8.8 Modifiez votre classe Citerne en CiterneBis. Cette nouvelle version ne possède plus un volume maximal fixe de 1000 litres. Transformer le constructeur Citerne en un constructeur CiterneBis(double rayon, double hauteur) qui permet de créer des citernes à volume variable selon leurs dimensions extérieures. 45
47 N oubliez pas que le volume maximal ne peut plus être modifié après que la citerne est construite! 8.3 Thermometre Exercice 8.9 Écrire deux constructeurs de la classe Thermometre qui travaille soit avec des degrés Celsius, soit avec des degrés Fahrenheit. Le premier constructeur initialise une température de 0 degré ( C ou F). Le deuxième constructeur initialise une température donnée en degré ( C ou F). Thermometre double temperature double Thermometre() double Thermometre(double t) Exercice 8.10 Compléter la classe avec les méthodes suivantes : gettemperature() pour accéder au champ privé temperature, settemperature(double t) pour modifier la valeur du champ privé temperature, changetemperature() qui additionne un degré ( C ou F) à la valeur courante du champ temperature, changetemperature(double t) qui additionne la valeur t à la valeur courante du champ temperature, celsiustofahrenheit() qui convertit en degrés Fahrenheit une température donnée en degrés Celsius, fahrenheittocelsius() qui convertit en degrés Celsius une température donnée en degrés Fahrenheit, printtemp() qui affiche la température (en C ou en F) Indication : La formule de conversion de degrés Celsius en degrés Fahrenheit s écrit: Exercice 8.11 T F = T C Modifier la classe précédente Thermometre afin que la température soit donnée dès le départ en degrés Celsius ou Fahrenheit. Par exemple, on transformera les deux constructeurs en Thermometre(char u) et en Thermometre(double t, char u). 8.4 Devinez un nombre Exercice 8.12 Écrire un programme Devinette.java qui fait deviner un nombre secret compris entre 0 et 100 à quelqu un. Ce programme commencera par initialiser une variable secret par l instruction 46
48 int secret = (int)(math.random() * 100); ce qui donne une valeur différente à secret à chaque exécution du programme. Puis le programme doit faire deviner cette valeur à l utilisateur en lui demandant d entrer un nombre et en lui indiquant si celui-ci est supérieur ou inférieur à la valeur secrète jusqu à ce qu il trouve le bon nombre. Par exemple : Devinez le nombre : 42 Trop grand! Devinez le nombre : 21 Trop bas! Devinez le nombre : 23 Trop bas! Devinez le nombre! 25 Bravo, vous avez gagné! 8.5 Ville et Capitale Exercice 8.13 Écrire les classes Ville et Capitale selon le diagramme de classe ci-dessous. Ville String nom int nbhab Ville(String lenom) Ville (String lenom, int lenbhab) String getnom() int getnbhab() void setnbhab(int nvnbhab) String presentetoi() Capitale String pays Capitale(String lenom, String lepays) Capitale(String lenom, String lepays, int lenbhab) String getpays void setpays(string nompays) String presentetoi() 47
49 Exercice 8.14 Pour tester ces deux classes, créez une classe TestVille : public class TestVille public static void main(string args[]) Ville v1 = new Ville("Lausanne", ); Ville v2 = new Ville("Vevey"); Capitale c1 = new Capitale("Paris", "France", ); Capitale c2 = new Capitale("Berne", "Suisse"); System.out.println("******************************"); System.out.println(v1.presenteToi( )); System.out.println(v2.presenteToi( )); System.out.println(c1.presenteToi( )); System.out.println(c2.presenteToi( )); System.out.println("******************************"); 8.6 Jouer avec des dés Exercice 8.15 Voici le diagramme de la classe Dice. Dice private int face private String name private static int nombredede private static final int NombreDeFaces Dice() int getface() void roll() String description() int somme(dice de) static int countdice() 48
50 Le champ nombredede est un champ de classe, il donne le nombre de dés instanciés. Le champ NombreDeFaces est constant et représente ici le nombre de faces d un dé (6 pour cet exercice). La méthode getface permet de récupérer la face du dé (accesseur). La méthode roll permet de lancer un dé et ainsi de modifier sa face. La méthode description retourne les informations d un dé, par exemple : le dé dice1 a la face 3. La méthode somme permet d additionner les faces de deux dés. La méthode de classe countdice permet d afficher le nombre de dés. A partir de ces informations, créer la classe Dice. Exercice 8.16 Deux joueurs lancent deux dés à six faces. Celui qui obtient le maximum en additionnant les deux faces a gagné. Créer une nouvelle classe Personne qui permet à deux joueurs de lancers des dés et de comparer leur résultat. Utiliser la classe Dice pour simuler le lancer des dés. Commencer par écrire le le diagramme de la classe Personne. Exercice 8.17 Modifier la classe précédente : un des deux joueurs gagne lorsqu il obtient un total fixé au départ. 8.7 Les Schtroumpfs Les Schtroumpfs sont des petits êtres bleus vivant dans la forêt. On considère une modélisation simple d un Schtroumpf : chaque Schtroumpf a un nom, a un âge, est content, ou pas. Exercice 8.18 Écrire la classe Schtroumpf (dans un fichier Schtroumpf.java) avec ses champs et son constructeur. Exercice 8.19 Un Schtroumpf se présente en donnant un message, par exemple: Bonjour, on m appelle Schtroumpf à lunettes et j ai 99 ans. Exercice 8.20 Si un Schtroumpf est content, il chante la, la, la, la Schtroumpf la la la. S il n est pas content, il ne chante pas. Écrire la méthode chante qui écrit à l écran la chanson que l on peut entendre en s approchant d un Schtroumpf. 49
51 Exercice 8.21 Déclarer un champ statique salsepareille de type entier de la classe Schtroumpf. Initialiser ce champ à 100 feuilles. Écrire des méthodes pour les événements suivantes de la vie d un Schtroumpf : manger de la salsepareille en puisant trois feuilles dans la réserve (ce qui le rend heureux); aller travailler au pont de la riviere Schtroumpf (ce qui le rend triste); récolter de la salsepareille (ce qui le rend triste aussi). Il en ramène alors cinq feuilles. Exercice 8.22 Créer un deuxième constructeur de la classe Schtroumpf qui nomme les Schtroumpfs Schtroumpf 1, Schtroumpf 2, etc (même si ça manque de poésie) et qui lui attribue un âge au hasard (en utilisant la méthode java.lang.math.random de Java). Exercice 8.23 Le Grand Schtroumpf d un village est le plus vieux des Schtroumpfs de ce village. Comment le repérer? Exercice 8.24 Créer une méthode statique qui affiche le nombre de Schtroumpfs. Exercice 8.25 Pour que tout le monde ne soit pas content, créer une boucle dans la méthode main qui va envoyer un Schtroumpf sur deux au travail. Exercice 8.26 Créer la méthode qui affiche tous les Schtroumpfs heureux. Exercice 8.27 Créer une méthode qui envoie tous les Schtroumpfs heureux cueillir de la salsepareille. Exercice 8.28 Créer une méthode statique AnneeQuiPasse qui incréments de un l âge de tous les Schtroumpfs. Exercice 8.29 Le méchant Gargamel essaye d influer sur les Schtroumpfs : par une magie connue de lui seul, il peut changer leur humeur à distance grâce à la méthode suivante (de la classe Gargamel) : public static void maudireschtroumpf (Schtroumpf S) S.content = false; Comment déjouer la tentative de Gargamel? 50
52 8.8 Le Village Schtroumpf Un village Schtroumpf possède : un nom; une structure qui contient 100 Schtroumpfs; un stock de salsepareille (on compte le nombre de feuilles en réserve). Attention : il faut modifier la classe Schtroumpf. Exercice 8.30 Écrire la classe Village. Le constructeur de la classe Village doit appeler le constructeur de Schtroumpf pour chaque Schtroumpf (cf Ex 5.1). Exercice 8.31 Écrire la méthode qui affiche tous les Schtroumpfs heureux d un village. Exercice 8.32 Un Schtroumpf ne peut habiter qu un village. Il existe cependant des Schtroumpfs ermites qui n habitent aucun village. Ajouter dans la classe Schtroumpf l information du village auquel appartient un Schtroumpf, et les accesseurs pour manipuler cette information. Attention, les bébés Schtroumpfs ont (en général) un village de naissance! Modifier la classe Schtroumpf pour qu un Schtroumpf se présente en donnant le nom de son village. Exercice 8.33 On veut maintenant savoir combien de Schtroumpfs il y a au monde. Comment faire? Pour vérifier votre programme, faites un main qui construit deux villages et un Schtroumpf ermite puis affiche le nombre de Schtroumpfs (qui devrait donc être 201). 51
53 8.9 Exercices sur les tableaux et les boucles Exercice 8.34 Voici la classe Tableau. Le champ tableau est privé. Tableau int[] tableau Tableau() int[] gettableau int element(int i) int somme() double moyenne() int max() int min() double moyenneolympique() String description() tableau contient 10 nombres entiers positifs choisis au hasard entre 0 compris et 100 non compris. La méthode Math.random permet de générer des nombres aléatoires. La méthode element(int i) renvoie le ième élément de tableau. La méthode moyenneolympique est la moyenne des éléments de tableau obtenue en lui retirant son plus grand et et son plus petit élément. Les autres méthodes sont explicites. a) Créer la classe Tableau, puis la tester dans une classe TestTableau. b) Ajouter à la classe Tableau une méthode statique echange(int[] tab, int i, int j) qui permute dans le tableau donné en paramètre les deux coefficients d indice i et j. Sa signature est public static void echange(int[] tab, int i, int j) c) Ajouter à la classe Tableau une méthode int[] elementpair() qui renvoie un tableau composé des éléments pairs de tableau. d) Ajouter à la classe Tableau une méthode int[] tri() qui renvoie le tableau formé des éléments de tableau triés par ordre croissant. Exercice 8.35 Nous allons compléter la classe MotDeQuatreLettres (voir le fichier MotDeQuatreLettres.java). MotDeQuatreLettres String mot MotDeQuatreLettres() MotDeQuatreLettres(int indice) String getmot() static String motdudico(int i) String inserecaractere(char c) boolean estunpalindrome() String inverse() 52
54 Le champ mot est privé. Le constructeur sans argument choisit un mot au hasard dans le dico; le constructeur avec un argument choisi dans le dico le mot placé à l indice indiqué. La méthode statique motdudico(int i) retourne le mot placé dans le dico à l indice donné en paramètre. La méthode inserecaractere(char c) insère entre les lettres du mot le caractère passé en paramètre. Par exemple si mot contient taxi, en insérant le caractère *, la méthode retourne t*a*x*i. La méthode estunpalindrome() vérifie si le mot est un palindrome. La méthode inverse() retourne le mot. Par exemple si mot contient taxi la méthode retourne ixat. a) Compléter la classe MotDeQuatreLettres, puis la tester dans une classe TestMot. b) Ajouter à la classe MotDeQuatreLettres une méthode doublon qui dit si mot apparaît au moins deux fois dans le dico. Sa signature est boolean doublon(). Par exemple si l attribut mot de l objet instancié est elle, la méthode renvoie true. c) Ajouter à la classe MotDeQuatreLettres une méthode statique qui place tous les mots qui commencent par le caractère c dans un nouveau tableau. Sa signature est static String[] commenceparliste(char c). d) Ajouter à la classe MotDeQuatreLettres une méthode statique commencepar(char c) qui affiche dans la fenêtre du terminal tous les mots de dico commençant par la lettre passée en paramètre. e) Ajouter à la classe MotDeQuatreLettres une méthode auneanagramme() qui renvoie true si mot a une anagramme dans dico. f) Ajouter à la classe MotDeQuatreLettres une méthode anagramme() qui renvoie (quand c est possible) un mot de dico qui est l anagramme de mot. Exercice 8.36 Écrire une classe Tableau qui : initialise un tableau de 10 nombres entiers inférieurs à 100 (classe Random), calcul la somme des éléments du tableau, calcule la moyenne des éléments du tableau, détermine le minimum et le maximum des éléments du tableau. Exercice 8.37 Écrire une classe Parity. Les objets sont des tableaux de nombres entiers aléatoires, la longueur du tableau est fixée au moment de sa création : Parity tableau = new Parity(8); par exemple. Cette classe contient au moins les trois méthodes : print qui affiche les éléments d un tableau, splitpair et splitimpair qui construisent deux nouveaux tableaux : l un contiendra les nombres pairs du tableau initial, et l autre les nombres impairs. 53
55 Exercice 8.38 Nous allons compléter la classe Pascal Pascal int[][] tableau Pascal(int n) int[][] gettableau() int[] getligne(int n) static int[][] creepascal(int n) String affiche() String affichesomme() Le champ tableau est privé. C est un tableau de tableaux; les éléments sont les lignes successives du tableau de Pascal sous forme de tableaux. Le constructeur Pascal(int n) construit un tableau de Pascal de niveau n. Par exemple le tableau de Pascal de niveau 3 est le suivant : La méthode statique creepascal(int n) permet d initialiser le champ tableau. La méthode getligne(int n) retourne la n-ième ligne du tableau de Pascal (1 est la ligne 0, 1-1 est la ligne 1, est la ligne 2 et ainsi de suite). La méthode affiche() retourne une chaîne de caractères permettant d afficher le tableau de Pascal dans la fenêtre du terminal. La méthode affichesomme() retourne une chaîne de caractères permettant d afficher la suite des sommes des lignes du tableau de Pascal. Exercice 8.39 Écrire une classe Pythagore qui trouve et qui affiche tous les triangles rectangles dont les côtés sont tous inférieurs à 500. Ce programme affiche également le nombre de triangles rectangles. Exercice 8.40 Écrire un programme qui recherche et affiche les facteurs premiers d un nombre entier lu au clavier (il n est pas nécessaire que le programme soit efficace). Par exemple pour 120, on affichera : 120 = 2 x 2 x 2 x 3 x 5 Indication : excepté 2, inutile de rechercher d autres diviseurs pairs. 54
56 8.10 Listes dynamiques en Java Exercice 8.41 Dans un projet moyennes, créé dans NetBeans, créer une classe correspondant au diagramme cidessous: Note double valeur int coefficient double getvaleur() int getcoefficient() double noteponderee() Cette classe dispose d un champ privé de type double qui permet de stocker la note et d un champ privé de type int pour tenir compte du coefficient de la note. On peut consulter la note et son coefficient, mais pas les modifier après construction. On peut également faire calculer la note pondérée (produit de la valeur par le coefficient). Créer ensuite une deuxième classe donnée par le second diagramme: Branche String denomination ArrayList<Note> listenotes String getdenomination() ArrayList<Note> getlistenotes() void ajouternote (int index, Note note) void remplacernote(int index, Note note) void supprimernotenumero(int index) double totalpondere() double moyenne() String affiche() Cette classe dispose d un champ privé de type String pour nommer la branche et d un champ privé de type ArrayList<Note> qui permet de stocker les notes au fur et à mesure. a) Dans la méthode main de la classe Moyennes, créer un objet de type Branche qui s appelle francais, par exemple. À l aide d une boucle, remplir ensuite cet objet avec une quinzaine de notes calculées aléatoirement. Les dix premières notes comptent simple et les cinq dernières comptent double. b) Dans la javadoc, passer en revue les méthodes prédéfinies de la classe ArrayList. c) Faire afficher toutes les notes de français. d) Remplacer la première note de français insuffisante par un 4(attention à conserver la pondération). e) Ajouter un 6 de coefficient 1 au début de la liste des notes de français. f) Faire afficher le total pondéré des notes de français et la moyenne de cette branche à la console. 55
57 g) Créer une classe EnsembleDesNotes qui contient toutes les notes d un élève dans les branches suivantes : français, maths, allemand, histoire, géographie, physique, chimie et biologie. les noms des branches sont stockés dans un tableau statique et le constructeur de cette classe est chargé de créer un objet de type Branche pour chacun de ces noms. On veut pouvoir consulter les différentes moyennes et gérer les notes de chaque branche La classe Personne Exercice 8.42 Créer une classe Personne. Voici les fonctionnalités de Personne : les variables d instances sont privées : inaccessibles d une autre classe les variables variables d instance : String nom, prenom, adresse, sexe; int age trois constructeurs : public Personne (String lenom).. public Personne (String leprenom, String lesexe, int lage).. public Personne (String lenom, String leprenom, String lesexe, int lage).. des méthodes d instances publiques pour accéder aux variables privées getnom(), setnom(),..., anniversaire() incrémente l âge, presentetoi() pour afficher un texte comme : Je m appelle Je suis un [homme femme] J ai... ans Personne String nom String prenom String adresse String sexe int age public Personne... String getnom() void setnom() void anniversaire() String presentetoi() Exercice 8.43 Modifier la classe Personne pour qu elle permette de décrire complètement une personne, sachant que l on souhaite avoir autant d informations que dans la phrase suivante : "M. Holly Pierre est né en 1965, il est marié." 56
58 Exercice 8.44 Écrire dans une classe TestPersonne un programme qui déclare 3 variables de type Personne, crée 3 instances de personne pour les affecter dans les variables et affiche les informations les concernant. Exercice 8.45 Ajouter une méthode donneage(int annee) qui fixe l âge de l individu en fonction d une année donnée en paramètre. Exercice 8.46 Ajouter à la classe Personne un attribut conjoint et examiner les conséquences que cela peut avoir sur l ensemble du code. Exercice 8.47 Ajouter une méthode marier(personne p) qui permet de marier une personne à une autre. Modifier la méthode presentetoi() de façon que le nom des époux soient modifiés comme suit : Pour simplifier : quand une femme se marie son nom devient : [nom de l époux] née [nom de jeune fille], par exemple : si Mlle Jeanne Durant se marie avec M. Jean Dupond, sa présentation deviendra Mme Dupond Jeanne née Durant en 1971, est mariée avec Dupond Jean. Pour un homme marié, on ajoutera le nom de l épouse, par exemple : si M. Jean Dupond se marie avec Mlle Jeanne Durant, sa présentation deviendra M. Dupond Jean né en 1971 est mariée avec Durant Jeanne. Si le conjoint n est pas connu, on conservera la présentation précédente. Attention : cet exercice ne prétend pas représenter l état actuel de la loi! Exercice 8.48 Créer une classe GroupePersonnes qui contient un groupe de Personnes. Le groupe possède un nom et un champ privé de type ArrayList<Personne> qui permet de stocker au fur et à mesure les membres qui rejoignent le groupe. Un méthode presentegroupe() retourne une chaîne de caractères qui donne le nom du groupe et la description de ses membres. Créer un groupe dans la classe TestPersonne et le faire se présenter Exercices divers Exercice 8.49 Créer une classe Livret capable de créer une table de multiplication. Par exemple : 1 x 4 = 4 2 x 4 = 8 3 x 4 = 12 4 x 4 = 16 5 x 4 = 20 6 x 4 = 24 7 x 4 = 28 8 x 4 = 32 9 x 4 = 36 57
59 10 x 4 = x 4 = x 4 = 48 Exercice 8.50 On considère la classe suivante : public class Bidule private int val; public Bidule(int val) this.val = val; public int getval() return val; Les instructions ci-dessous, supposées être dans une autre classe, ne sont pas correctes. Pourquoi? Corriger dans la mesure du possible. Bidule b = new Bidule(); b.val = 3; System.out.println(b.val); Exercice 8.51 Écrire une classe Etoile qui utilise une méthode affiche() permettant de visualiser un triangle isocèle formé d étoiles. * *** ***** La hauteur du triangle sera fournie en argument. Exercice 8.52 Concevoir une classe permettant la gestion d une caisse enregistreuse : montant de la caisse détails de la caisse (somme en espèces, somme en CB) encaisser un montant avec un CB encaisser un montant exact 58
60 encaisser un montant avec rendu de monnaie (indiquer la somme à rendre en retour) réinitialiser le contenu de la caisse Voici la modélisation de la caisse : Caisse float sommeespeces float sommecb Caisse() Caisse(float se, float scb) void setsommeespeces(float se) void setsommecb(float scb) float getsommeespeces() float getsommecb() float montant() void details() void encaisserespeces(float e) void encaissercb(float c) float encaisserespecerendu(float montantdu, float montantrendu) void initialisercaisse() Écrire la classe Caisse et la tester. Exercice 8.53 Développez la classe Compte qui possède les propriétés et fonctionnalités suivantes : a) le compte a un solde(nombre réel) b) au début le compte est vide (le solde est zéro) c) on peut ajouter un certain montant à uncompte d) on peut retirer un certain montant d un compte e) on peut demander le solde actuel Exercice 8.54 (Mini-Projet) La banque BurierBank a codé ses numéros de compte de façon à ce qu il soit possible de contrôler si un numéro de compte a été entré correctement. Pour ce faire, les deux derniers chiffres du numéro correspondent à la somme des chiffres précédents. Les numéros de compte (chiffres de contrôle inclus) sont toujours des nombres à 9 chiffres. Exemples est donné correctement, car = est donné correctement, car = n est pas donné correctement, car = 35 au lieu de 47 Reprenez votre exercice Compte et sauvez-le sous Compte2. Modifiez la classe Compte ainsi : 59
61 a) Chaque compte possède un numéro de compte numero, qui peut être consulté avec getnumero(). b) La méthode isvalide(long n) contrôle si un numéro de compte donné comme paramètre est valide (selon la description ci-dessus). c) La méthode generernumcompte() sert à générer un numéro de compte valide de façon aléatoire. (On néglige ici le fait qu en réalité il est impossible d employer une telle méthode parce qu elle risque de produire deux fois le même numéro de compte.) d) Lors de la création d un compte, il faut vérifier que le numéro de compte donné comme paramètre est valide, sinon un numéro de compte valide doit être créé de façon aléatoire. e) La méthode transfert(...) permet de transférer une somme d argent du compte actuel vers un autre compte. Pour effectuer le transfert, il faut indiquer comme paramètre le compte (objet) destinataire, le numéro de compte destinataire (comme contrôle) et le montant à transférer. Avant d effectuer le transfert, il faut vérifier, si le numéro de compte destinataire est valide si le nom du compte destinataire correspond au numéro de compte donné s il reste assez d argent pour effectuer le transfert Comme résultat, la méthode transfert(...) retourne un texte indiquant le succès de l opération ou une description de l erreur commise, par exemple : ERREUR : Le numéro de compte destinataire n est pas valide! SUCCES : Le transfert a été effectué avec succès!... f) La méthode tostring() retourne un texte décrivant le numéro de compte et le solde actuel. Exercice 8.55 (Héritage) Partie 1 La classe Vehicule Définir une classe Vehicule qui a pour attributs des informations valables pour tout type de véhicule : a) sa marque b) sa date d achat c) son prix d achat d) son prix courant Définir un constructeur prenant en paramètre les trois attributs correspondant à la marque, la date d achat et le prix d achat. Le prix courant sera calculé plus tard. Définir une méthode publique void affiche() qui affiche l état de l instance, c est-à-dire la valeur de ses attributs. Partie 2 La classe Voiture et la classe Avion Définissez deux classes Voiture et Avion, héritant de la classe Vehicule et ayant les attributs supplémentaires suivants : a) pour la classe Voiture : * sa cylindrée 60
62 * son nombre de portes * sa puissance * son kilométrage b) pour la classe Avion : * son type (hélices ou réaction) * son nombre d heures de vol Définir, pour chacune de ces classes, un constructeur permettant l initialisation explicite de l ensemble des attributs, ainsi qu une méthode affichant la valeur des attributs. Constructeurs et méthodes d affichage devront utiliser les méthodes appropriées de la classe parente! 8.13 Les piles Exercice 8.56 (Pile LIFO) Une pile FILO ou LIFO est de type Premier rentré, Dernier sorti ou Dernier rentré, Premier sorti (en anglais First In, Last Out ou Last In, First Out), et peut aussi être appelée un tas. Le principe est que les données sont insérées et lues par le même coté. Il s agit de définir une classe Pile modélisant une pile de trois entiers naturels. (La classe Pile utilisera un tableau d entiers.). Nécessairement, tous les attributs de cette classe auront le modificateur private, ce qui signifie qu on ne peut pas les utiliser directement de l extérieur de la classe (on dit encore qu ils ne sont visibles que de leur propre classe). Cette classe possèdera au moins les quatre méthodes suivantes (il faudra reprendre exactement les en-têtes indiquées) : a) void empiler(int n) Cette méthode empile la valeur n reçue en paramètre. Si la pile est pleine, cette méthode lance un message d erreur. b) int depiler() throws ExceptionPileVide Si la pile est vide, cette méthode lance une exception, ce que vous ferez par l instruction : throw new ExceptionPileVide(); sinon, elle dépile un entier dont elle retourne la valeur. c) void afficher() Cette méthode affiche les éléments de la pile. d) boolean estvide() Cette méthode retourne true si la pile est vide et false dans le cas contraire. Au départ, ce tableau aura une certaine longueur, petite (par exemple 3). Exemple 61
63 initialisation de la pile p p.empiler(2) p.empiler(3) p.depiler() retourne l entier 3 la pile p p.empiler(5) p.empiler(9) p.empiler(1) affiche la pile est pleine Il faut créer la classe suivante pour gérer l exception : class ExceptionPileVide extends Exception public String tostring() return "la pile est vide"; et l utiliser par exemple ainsi : public class TestPile public static void main(string[] args) Pile p2 = new Pile(); try System.out.println(p2.depiler()); catch(exceptionpilevide e) System.out.println(e); Exercice 8.57 (Pile FIFO) Une pile FIFO (qu on peut aussi appeler une file) répond au protocole du Premier rentré, Premier Sorti ou en anglais First In, First Out (d où FIFO). Le principe est simple : les données sont ajoutées d un coté et lues de l autre... Un bon schéma valant mieux qu un long discours : Entrée Sortie Pour expliciter le schéma on peut dire que : la prochaine de donnée lue sera celle qui a pour index 0 et la prochaine donnée insérée dans le pile recevra l index 5. En clair, dans une pile FIFO, les données sont lues dans l ordre de leur insertion. Créer une classe Pile en java gérant une pile FIFO. 62
64 9 Le point de départ : JFrame Une première fenêtre. import java.awt.color; import javax.swing.*; public class Bonjour public static void main(string[] args) JFrame cadre = new JFrame("Ma première fen^etre"); JLabel etiquette = new JLabel("Bonjour à tous!", JLabel.CENTER); cadre.getcontentpane().add(etiquette); cadre.getcontentpane().setbackground(color.white); cadre.setsize(250, 100); cadre.setvisible(true); cadre.setdefaultcloseoperation(jframe.exit_on_close); a) appel de new JFrame(...) pour créer l objet JFrame. Si on était, comme c est souvent le cas, en train de définir une sous-classe de JFrame, l appel du constructeur de JFrame serait caché dans une instruction super(...); b) appel de setsize(...) pour donner une taille au cadre, sinon il sera réduit à quelques pixels. A la place de setsize(...) on peut appeler la méthode pack(), qui donne au cadre une taille juste suffisante pour contenir les composantes qui lui sont ajoutés, mais il faut alors que ces composants aient une taille minimum significative; de plus, il faut appeler pack après avoir ajouté ces composants; c) appel de setvisible() pour faire apparaître le cadre parmi les autres éléements graphiques visibles à l écran et pour initier le thread (fil d exécution) chargé de détecter et traiter les actions de l utilisateur sur le cadre. d) L instruction cadre.setdefaultcloseoperation(jframe.exit_on_close); permet de terminer l application lorsque l utilisateur clique sur la case de fermeture de la fenêtre. Exercice 9.1 Écrire une nouvelle version du programme précédent en définissant une sous-classe plutôt qu une instance de JFrame. 63
65 import java.awt.color; import javax.swing.*; public class Bonjour2 extends JFrame //Constructeur de la fen^etre public Bonjour2() // A compléter public static void main(string[] args) JFrame cadre = new Bonjour2(); 10 Deux niveaux d interface 10.1 Composants Ceux sont les briques élémentaires d une interface, c est principalement avec eux que l utilisateur dialogue. Exemples de composants : Bouton (JButton) Étiquette (JLabel) Champs de saisie (JTextField) Liste (JList) La disposition des composants est gérée par des LayoutManager 10.2 Contenants Ils servent à organiser les composants. Un composant ne peut être utilisé que dans un contenant. Exemples de contenants (containers) : contenants de haut-niveau JWindow (fenêtre sans titre ni encadrement) JFrame (fenêtre classique) JDialog (boite de dialogue) contenants intermédiaires JPanel (simple panneau) JScrollPane (panneau avec barres de défilement)... 64
66 10.3 Description de la JFrame Les composants ne s ajoutent à la Frame mais au Content Pane. Voici deux fenêtres. import java.awt.*; import javax.swing.*; public class ExempleContentPane public static void main(string args[]) // 1er cas, on utilise le ContentPane JFrame frame1 = new JFrame("Ceci est une fen^etre"); Container contentpane1 = frame1.getcontentpane(); contentpane1.add(new JButton("Ceci est un bouton dans cette fen^etre"), BorderLayout.CENTER); frame1.pack(); frame1.setvisible(true); // 2eme cas, on crée un autre ContentPane JFrame frame2 = new JFrame("Ceci est toujours une fen^etre"); JPanel contentpane2 = new JPanel(); contentpane2.setborder(borderfactory.createtitledborder("ceci est un bord")); contentpane2.add(new JButton("Ceci est un bouton dans cette fen^etre")); 65
67 frame2.setcontentpane(contentpane2); frame2.pack(); frame2.setvisible(true); 11 Les gestionnaires de mise en forme Un gestionnaire de mise en forme permet de placer des composants graphiques d une certaine façon dans une fenêtre. Il existe 6 gestionnaires de mise en forme : a) Le gestionnaire BorderLayout. Il place les objets contre les bords ou au centre. C est l afficheur par défaut du panneau de contenu des JFrame, JDialog et JApplet. b) Le gestionnaire FlowLayout. Il place les objets sur des lignes successives comme le ferait un traitement de texte. Souvent utilisé pour des boutons. C est l afficheur par défaut associé aux JPanel. c) Le gestionnaire CardLayout. Il place les objets les uns sur les autres. Seul le sommet de pile est visible à un moment donné. d) Le gestionnaire GridLayout. Il place les objets sur une grille dont on peut spécifier le nombre de lignes et de colonnes. e) Le gestionnaire BoxLayout. Il place les composants sur une même ligne ou une même colonne. Utiliser des Box nous permet d avoir plusieurs BoxLayout dans un même conteneur (dans le JFrame par exemple). Les composants sont insérés : de gauche à droite pour le BoxLayout horizontal de haut en bas pour le BoxLayout vertical Par défaut, les composants sont collés les uns aux autres. Pour les espacer, il faut insérer des réserves entre les composants. Il en existe 3 types : le Strut, qui ajoute un espace mesuré en nombre de pixels. Le Strut est unidimensionnel : il existe un Strut horizontal et un Strut vertical le RigidArea, qui est équivalent à un couple de Strut horizontal/vertical le Glue, qui repousse les 2 composants voisins aussi loin que possible l un de l autre. Par exemple : JLabel nomlabel = new JLabel("Nom : "); JTextField nomtext = new JTextField(10); 66
68 Box hbox = Box.createHorizontalBox(); hbox.add(nomlabel); hbox.add(box.createhorizontalstrut(5)); hbox.add(nomtext); f) Le gestionnaire GridBagLayout. Comme le GridLayout, ce gestionnaire permet de placer les composants sur une grille, mais avec plus de flexibilité. Le GridBagLayout fonctionne comme un tableau dont les cellules peuvent être fusionnées. Le gestionnaire BorderLayout est utilisé par défaut en dehors de toute précision. Exercice 11.1 Reproduire les applications décrites par ces fenêtres. 67
69 Exercice 11.2 Reproduire l application décrite par cette fenêtre. 12 Les événements Puisqu un composant est visible sur un écran, il est naturellement prédestiné à devenir la cible d actions faites par l utilisateur à l aide de la souris, du clavier ou de tout autre organe de saisie disponible. Au moment où elle est détectée par l ordinateur, une action de l utilisateur provoque la création par la machine Java d un événement, un objet qu on peut imaginer comme un rapport décrivant la nature et les circonstances de cette action; on dit que le composant qui en a été la cible est la source de l événement en question. Lorsqu un événement est créée, le composant qui en est la source a la charge de notifier ce fait à tous les objets qui ont été enregistré auprès de lui comme étant concernés par ce type d événements et souhaitant donc être prévenus lorsqu ils se produiraient. Bien entendu, notifier un événement c est appeler une certaine méthode, spécifique de l événement. Les objets qui demandent à recevoir les notifications des événements d un certain type doivent donc posséder les méthodes correspondantes; on garantit cela en imposant que ces objets soient des implémentations d interfaces ad hoc, nomméees XxxListener, ou Xxx caractérise le type d événement considéré : MouseListener, WindowListener, ActionListener, par exemple. En résumé : pour qu un objet puisse recevoir les notifications d une catégorie Xxx d événements il faut que sa classe implémente l interface XxxListener; cet objet peut alors être enregistré auprès d une source d événements Xxx en tant qu auditeur (listener) des événements Xxx. Par conséquent, si un objet est source d événements Xxx alors il doit posséder la méthode addxxxlistener grâce à laquelle d autres objets lui sont enregistrés en qualité d auditeurs de ces événements. L interface MouseListener L interface MouseListener permet à une classe de répondre aux évènements souris de base. Elle est définie dans le package java.awt.event qu il faut donc importer. Elle contient les méthodes suivantes : public void mouseclicked(mouseevent e) //Invoked when the mouse has been clicked on a component. 68
70 public void mousepressed(mouseevent e) //Invoked when a mouse button has been pressed on a component. public void mousereleased(mouseevent e) //Invoked when a mouse button has been released on a component. public void mouseentered(mouseevent e) //Invoked when the mouse enters a component. public void mouseexited(mouseevent e) //Invoked when the mouse exits a component. Ces méthodes ont comme paramètre un objet de type MouseEvent; celui-ci possède deux méthodes getx() et gety() qui renvoient les coordonnées du point où se trouve la souris. L interface ActionListener Cette interface concerne des actions (avec la souris ou le clavier) sur un composant qui les traduit en une commande de plus haut niveau, comme un choix dans une liste ou un menu, une pression sur un bouton, etc. L interface se compose d une seule méthode : void actionperformed(actionevent e) appelée lorsqu une action a été faite (ce que action veut dire dépend du composant : presser un bouton, cocher ou décocher une case à cocher, faire un choix dans un menu, etc.). La classe ActionEvent contient la méthode String getactioncommand(). Voici un exemple d utilisation : JButton bouton = new JButton("Oui"); bouton.addactionlistener(this); add(bouton); public void actionperformed(actionevent e) if (e.getactioncommand().equals("oui")) System.out.println("Il a dit oui"); Voici une autre manière d écrire une classe fonctionnellement identique à la précédente, en utilisant les références des boutons plutôt que leurs chaînes action command : JButton bouton = new JButton("Oui"); bouton.addactionlistener(this); add(bouton); 69
71 public void actionperformed(actionevent e) if (e.getsource() == bouton) System.out.println("Il a dit oui"); Exercice 12.1 Créer une application simple qui implémente l interface MouseListener. Exercice 12.2 Créer une application simple qui implémente l interface ActionListener. Par exemple le bouton +1 incrémente le label central de 1 et le bouton -1 le décrémente de 1. Exercice 12.3 Créer l application présentée ici. Les boutons permettent de changer la couleur du fond. Exercice 12.4 Créer l application présentée ici. Le bouton permet de calculer la moyenne des cases. 70
72 Exercice 12.5 Créer l application présentée ici. Exercice 12.6 Créer une application qui convertit des degrés Celsius en degrés Fahrenheit (et inversément). Formules : [ C] = 5 ([ F] 32) 9 et [ F] = [ C] Exercice 12.7 Créer une application qui calcule la note d un travail en fonction du nombre total de points N et du nombre de points obtenus n. Formule : note = 5 n N +1 Afficher, si possible, la note au centième et au demi-point. Exercice 12.8 Créer l application présentée ici. Exercice 12.9 Créer une calculatrice sommaire, cette application peut se présenter par exemple ainsi : 71
73 72
Pour signifier qu'une classe fille hérite d'une classe mère, on utilise le mot clé extends class fille extends mère
L'héritage et le polymorphisme en Java Pour signifier qu'une classe fille hérite d'une classe mère, on utilise le mot clé extends class fille extends mère En java, toutes les classes sont dérivée de la
INTRODUCTION A JAVA. Fichier en langage machine Exécutable
INTRODUCTION A JAVA JAVA est un langage orienté-objet pur. Il ressemble beaucoup à C++ au niveau de la syntaxe. En revanche, ces deux langages sont très différents dans leur structure (organisation du
TP1 : Initiation à Java et Eclipse
TP1 : Initiation à Java et Eclipse 1 TP1 : Initiation à Java et Eclipse Systèmes d Exploitation Avancés I. Objectifs du TP Ce TP est une introduction au langage Java. Il vous permettra de comprendre les
Premiers Pas en Programmation Objet : les Classes et les Objets
Chapitre 2 Premiers Pas en Programmation Objet : les Classes et les Objets Dans la première partie de ce cours, nous avons appris à manipuler des objets de type simple : entiers, doubles, caractères, booléens.
Langage et Concepts de Programmation Objet. 1 Attributs et Méthodes d instance ou de classe. Travaux Dirigés no2
Langage et Concepts de Programmation Objet Travaux Dirigés no2 Pôle Informatique École Nationale Supérieure des Mines de St-Etienne Vous trouverez plus de détails sur les concepts abordés lors de ce TD
Programmer en JAVA. par Tama ([email protected]( [email protected])
Programmer en JAVA par Tama ([email protected]( [email protected]) Plan 1. Présentation de Java 2. Les bases du langage 3. Concepts avancés 4. Documentation 5. Index des mots-clés 6. Les erreurs fréquentes
Utilisation d objets : String et ArrayList
Chapitre 6 Utilisation d objets : String et ArrayList Dans ce chapitre, nous allons aborder l utilisation d objets de deux classes prédéfinies de Java d usage très courant. La première, nous l utilisons
Chapitre I Notions de base et outils de travail
Chapitre I Notions de base et outils de travail Objectifs Connaître les principes fondateurs et l historique du langage Java S informer des principales caractéristiques du langage Java Connaître l environnement
Info0101 Intro. à l'algorithmique et à la programmation. Cours 3. Le langage Java
Info0101 Intro. à l'algorithmique et à la programmation Cours 3 Le langage Java Pierre Delisle, Cyril Rabat et Christophe Jaillet Université de Reims Champagne-Ardenne Département de Mathématiques et Informatique
Langage Java. Classe de première SI
Langage Java Table des matières 1. Premiers pas...2 1.1. Introduction...2 1.2. Mon premier programme...2 1.3. Les commentaires...2 2. Les variables et les opérateurs...2 3. La classe Scanner...3 4. Les
Encapsulation. L'encapsulation consiste à rendre les membres d'un objet plus ou moins visibles pour les autres objets.
Encapsulation L'encapsulation consiste à rendre les membres d'un objet plus ou moins visibles pour les autres objets. La visibilité dépend des membres : certains membres peuvent être visibles et d'autres
TP n 2 Concepts de la programmation Objets Master 1 mention IL, semestre 2 Le type Abstrait Pile
TP n 2 Concepts de la programmation Objets Master 1 mention IL, semestre 2 Le type Abstrait Pile Dans ce TP, vous apprendrez à définir le type abstrait Pile, à le programmer en Java à l aide d une interface
TP, première séquence d exercices.
TP, première séquence d exercices. Benoît Valiron [email protected] 7 novembre 2010 Introduction Vous écrirez les réponses aux questions courtes sur une feuille à rendre à la fin de la
Solutions du chapitre 4
Solutions du chapitre 4 Structures de contrôle: première partie 4.9 Identifiez et corrigez les erreurs (il peut y en avoir plus d une par segment de code) de chacune des proposition suivantes: a) if (
TD3: tableaux avancées, première classe et chaînes
TD3: tableaux avancées, première classe et chaînes de caractères 1 Lestableaux 1.1 Élémentsthéoriques Déclaration des tableaux Pour la déclaration des tableaux, deux notations sont possibles. La première
Licence Bio Informatique Année 2004-2005. Premiers pas. Exercice 1 Hello World parce qu il faut bien commencer par quelque chose...
Université Paris 7 Programmation Objet Licence Bio Informatique Année 2004-2005 TD n 1 - Correction Premiers pas Exercice 1 Hello World parce qu il faut bien commencer par quelque chose... 1. Enregistrez
Cours 1 : Introduction. Langages objets. but du module. contrôle des connaissances. Pourquoi Java? présentation du module. Présentation de Java
Langages objets Introduction M2 Pro CCI, Informatique Emmanuel Waller, LRI, Orsay présentation du module logistique 12 blocs de 4h + 1 bloc 2h = 50h 1h15 cours, 45mn exercices table, 2h TD machine page
as Architecture des Systèmes d Information
Plan Plan Programmation - Introduction - Nicolas Malandain March 14, 2005 Introduction à Java 1 Introduction Présentation Caractéristiques Le langage Java 2 Types et Variables Types simples Types complexes
Auto-évaluation Programmation en Java
Auto-évaluation Programmation en Java Document: f0883test.fm 22/01/2013 ABIS Training & Consulting P.O. Box 220 B-3000 Leuven Belgium TRAINING & CONSULTING INTRODUCTION AUTO-ÉVALUATION PROGRAMMATION EN
Cours 1: Java et les objets
Ressources Les interface homme-machine et le langage Java DUT première année Henri Garreta, Faculté des Sciences (Luminy) Cyril Pain-Barre & Sébastien Nedjar, IUT d Aix-Marseille (Aix) Cours 1: infodoc.iut.univ-aix.fr/~ihm/
Cours intensif Java. 1er cours: de C à Java. Enrica DUCHI LIAFA, Paris 7. Septembre 2009. [email protected]
. Cours intensif Java 1er cours: de C à Java Septembre 2009 Enrica DUCHI LIAFA, Paris 7 [email protected] LANGAGES DE PROGRAMMATION Pour exécuter un algorithme sur un ordinateur il faut le
Programmation en Java IUT GEII (MC-II1) 1
Programmation en Java IUT GEII (MC-II1) 1 Christophe BLANC - Paul CHECCHIN IUT Montluçon Université Blaise Pascal Novembre 2009 Christophe BLANC - Paul CHECCHIN Programmation en Java IUT GEII (MC-II1)
Anne Tasso. Java. Le livre de. premier langage. 10 e édition. Avec 109 exercices corrigés. Groupe Eyrolles, 2000-2015, ISBN : 978-2-212-14154-2
Anne Tasso Java Le livre de premier langage 10 e édition Avec 109 exercices corrigés Groupe Eyrolles, 2000-2015, ISBN : 978-2-212-14154-2 Table des matières Avant-propos Organisation de l ouvrage..............................
Java Licence Professionnelle 2009-2010. Cours 7 : Classes et méthodes abstraites
Java Licence Professionnelle 2009-2010 Cours 7 : Classes et méthodes abstraites 1 Java Classes et méthodes abstraites - Le mécanisme des classes abstraites permet de définir des comportements (méthodes)
Structure d un programme et Compilation Notions de classe et d objet Syntaxe
Cours1 Structure d un programme et Compilation Notions de classe et d objet Syntaxe POO 1 Programmation Orientée Objet Un ensemble d objet qui communiquent Pourquoi POO Conception abstraction sur les types
Tp 1 correction. Structures de données (IF2)
Tp 1 correction Structures de données (IF2) Remarque générale : compilez et exécutez le code au-fur-et-à mesure de son écriture. Il est plus facile de corriger une petite portion de code délimitée que
Introduction à Java. Matthieu Herrb CNRS-LAAS. Mars 2014. http://homepages.laas.fr/matthieu/cours/java/java.pdf
Introduction à Java Matthieu Herrb CNRS-LAAS http://homepages.laas.fr/matthieu/cours/java/java.pdf Mars 2014 Plan 1 Concepts 2 Éléments du langage 3 Classes et objets 4 Packages 2/28 Histoire et motivations
Java Licence Professionnelle CISII, 2009-2010. Cours 2 : Classes et Objets
Licence Professionnelle CISII, 2009-2010 Cours 2 : Classes et Objets 1 Classes et Objets Objectifs des LOO : - Manipuler des objets - Découper les programmes suivant les types des objets manipulés - Regrouper
Exceptions. 1 Entrées/sorties. Objectif. Manipuler les exceptions ;
CNAM NFP121 TP 10 19/11/2013 (Séance 5) Objectif Manipuler les exceptions ; 1 Entrées/sorties Exercice 1 : Lire un entier à partir du clavier Ajouter une méthode readint(string message) dans la classe
TP 1. Prise en main du langage Python
TP. Prise en main du langage Python Cette année nous travaillerons avec le langage Python version 3. ; nous utiliserons l environnement de développement IDLE. Étape 0. Dans votre espace personnel, créer
LMI 2. Programmation Orientée Objet POO - Cours 9. Said Jabbour. [email protected] www.cril.univ-artois.fr/~jabbour
LMI 2 Programmation Orientée Objet POO - Cours 9 Said Jabbour [email protected] www.cril.univ-artois.fr/~jabbour CRIL UMR CNRS 8188 Faculté des Sciences - Univ. Artois Février 2011 Les collections
Eclipse atelier Java
Eclipse atelier Java Table des matières 1. Introduction...2 2. Télécharger eclipse...3 3. Installer eclipse...3 4. Premier lancement d eclipse...3 5. Configurer eclipse pour faire du Java...5 6. Développer
TP1. Outils Java Eléments de correction
c sep. 2008, v2.1 Java TP1. Outils Java Eléments de correction Sébastien Jean Le but de ce TP, sur une séance, est de se familiariser avec les outils de développement et de documentation Java fournis par
INITIATION AU LANGAGE C SUR PIC DE MICROSHIP
COURS PROGRAMMATION INITIATION AU LANGAGE C SUR MICROCONTROLEUR PIC page 1 / 7 INITIATION AU LANGAGE C SUR PIC DE MICROSHIP I. Historique du langage C 1972 : naissance du C dans les laboratoires BELL par
Langage et Concepts de ProgrammationOrientée-Objet 1 / 40
Déroulement du cours Introduction Concepts Java Remarques Langage et Concepts de Programmation Orientée-Objet Gauthier Picard École Nationale Supérieure des Mines de Saint-Étienne [email protected]
Prénom : Matricule : Sigle et titre du cours Groupe Trimestre INF1101 Algorithmes et structures de données Tous H2004. Loc Jeudi 29/4/2004
Questionnaire d'examen final INF1101 Sigle du cours Nom : Signature : Prénom : Matricule : Sigle et titre du cours Groupe Trimestre INF1101 Algorithmes et structures de données Tous H2004 Professeur(s)
INITIATION AU LANGAGE JAVA
INITIATION AU LANGAGE JAVA I. Présentation 1.1 Historique : Au début des années 90, Sun travaillait sur un projet visant à concevoir des logiciels simples et performants exécutés dans des PDA (Personnal
Initiation à JAVA et à la programmation objet. [email protected]
Initiation à JAVA et à la programmation objet [email protected] O b j e c t i f s Découvrir un langage de programmation objet. Découvrir l'environnement java Découvrir les concepts de la programmation
SHERLOCK 7. Version 1.2.0 du 01/09/09 JAVASCRIPT 1.5
SHERLOCK 7 Version 1.2.0 du 01/09/09 JAVASCRIPT 1.5 Cette note montre comment intégrer un script Java dans une investigation Sherlock et les différents aspects de Java script. S T E M M E R I M A G I N
Héritage presque multiple en Java (1/2)
Héritage presque multiple en Java (1/2) Utiliser deux classes ou plus dans la définition d'une nouvelle classe peut se faire par composition. class Etudiant{ int numero; Diplome d; float passeexamen(examen
TD/TP PAC - Programmation n 3
Université Paris Sud Licence d informatique/iup-miage2 Année 2004-2005 Auteur : Frédéric Vernier Semaine : 11-16 octobre 2004 Conditions : sur machine avec les outils standards java web: http://vernier.frederic.free.fr/indexpac.html
Programmation par les Objets en Java
Programmation par les Objets en Java Najib TOUNSI Les classes en Java (TD 3) I. Notion de classe I.1 Classe, champs, méthodes, instanciation, this, private vs. public. Créer une classe Point (coordonnée
Polymorphisme, la classe Object, les package et la visibilité en Java... 1
Polymorphisme, la classe Object, les package et la visibilité en Java. Polymorphisme, la classe Object, les package et la visibilité en Java.... 1 Polymorphisme.... 1 Le DownCast... 4 La Classe Object....
Une introduction à Java
Une introduction à Java IFT 287 (Semaine 1) UNIVERSITÉ DE SHERBROOKE 1 Java - Historique Développé par Sun Microsystems en 1994 Inventeur James Gosling (canadien!) Objectif langage sûr (fortement typé)
Utiliser Java sans BlueJ
Conception objet en Java avec BlueJ une approche interactive Utiliser Java sans BlueJ Michael Kölling version française: Patrice Moreaux Rédigé avec 1.0 Conception objet en Java avec BlueJ une approche
Corrigés des premiers exercices sur les classes
Corrigés des premiers exercices sur les classes Exercice 2.1.1 utilisation d une classe Voici le texte d une classe représentant de façon sommaire un compte bancaire et les opérations bancaires courantes.
LES TYPES DE DONNÉES DU LANGAGE PASCAL
LES TYPES DE DONNÉES DU LANGAGE PASCAL 75 LES TYPES DE DONNÉES DU LANGAGE PASCAL CHAPITRE 4 OBJECTIFS PRÉSENTER LES NOTIONS D ÉTIQUETTE, DE CONS- TANTE ET DE IABLE DANS LE CONTEXTE DU LAN- GAGE PASCAL.
Projet de programmation (IK3) : TP n 1 Correction
Projet de programmation (IK3) : TP n 1 Correction Semaine du 20 septembre 2010 1 Entrées/sorties, types de bases et structures de contrôle Tests et types de bases Tests et types de bases (entiers) public
Introduction à MATLAB R
Introduction à MATLAB R Romain Tavenard 10 septembre 2009 MATLAB R est un environnement de calcul numérique propriétaire orienté vers le calcul matriciel. Il se compose d un langage de programmation, d
Plan du cours. Historique du langage http://www.oracle.com/technetwork/java/index.html. Nouveautés de Java 7
Université Lumière Lyon 2 Faculté de Sciences Economiques et Gestion KHARKIV National University of Economic Introduction au Langage Java Master Informatique 1 ère année Julien Velcin http://mediamining.univ-lyon2.fr/velcin
COURS WINDEV NUMERO 3
COURS WINDEV NUMERO 3 01/02/2015 Travailler avec un fichier de données Etude du gestionnaire d analyse, Manipulation des tables mémoires, Manipulation de données, Création d états, Pré requis : Cours WinDev
Polycopié Cours Programmation Orientée Objet sous Java Programme : Filière SMI S5
UNIVERISTE MOHAMMED PREMIER Faculté des Sciences d Oujda Oujda - Maroc Polycopié Cours Programmation Orientée Objet sous Java Programme : Filière SMI S5 Pr. El Mostafa DAOUDI Département de Mathématiques
Objets et Programmation. origine des langages orientés-objet
Objets et Programmation origine des langages orientés-objet modularité, encapsulation objets, classes, messages exemples en Java héritage, liaison dynamique G. Falquet, Th. Estier CUI Université de Genève
Bases Java - Eclipse / Netbeans
Institut Galilée PDJ Année 2014-2015 Master 1 Environnements Java T.P. 1 Bases Java - Eclipse / Netbeans Il existe plusieurs environnements Java. Il est ESSENTIEL d utiliser la bonne version, et un environnement
Remote Method Invocation (RMI)
Remote Method Invocation (RMI) TP Réseau Université Paul Sabatier Master Informatique 1 ère Année Année 2006/2007 Plan Objectifs et Inconvénients de RMI Fonctionnement Définitions Architecture et principe
Présentation du langage et premières fonctions
1 Présentation de l interface logicielle Si les langages de haut niveau sont nombreux, nous allons travaillé cette année avec le langage Python, un langage de programmation très en vue sur internet en
GOL502 Industries de services
GOL502 Industries de services Conception d un service Partie IIb Version 2013 Introduction Conception d un service partie IIb Nous verrons dans ce chapitre Modélisation d un service; Langage de modélisation
UE Programmation Impérative Licence 2ème Année 2014 2015
UE Programmation Impérative Licence 2 ème Année 2014 2015 Informations pratiques Équipe Pédagogique Florence Cloppet Neilze Dorta Nicolas Loménie [email protected] 2 Programmation Impérative
Le langage C. Séance n 4
Université Paris-Sud 11 Institut de Formation des Ingénieurs Remise à niveau INFORMATIQUE Année 2007-2008 Travaux pratiques d informatique Le langage C Séance n 4 But : Vous devez maîtriser à la fin de
Développement Logiciel
Développement Logiciel Éxamen session 1-2012-2013 (Vendedi 25 mai, 9h-11h) Seuls les documents liés directement au cours sont autorisés (comme dit sur le site) : sujets de TD, notes de cours, notes personnelles
INF 321 : mémento de la syntaxe de Java
INF 321 : mémento de la syntaxe de Java Table des matières 1 La structure générale d un programme 3 2 Les composants élémentaires de Java 3 2.1 Les identificateurs.................................. 3 2.2
4. Groupement d objets
Conception objet en Java avec BlueJ une approche interactive 4. Groupement d objets Collections et itérateurs David J. Barnes, Michael Kölling version française: Patrice Moreaux Rédigé avec 1.0 Principaux
Chapitre VI- La validation de la composition.
Chapitre VI- La validation de la composition. Objectifs du chapitre : Expliquer les conséquences de l utilisation de règles de typage souples dans SEP. Présenter le mécanisme de validation des connexions
Cours de Systèmes d Exploitation
Licence d informatique Synchronisation et Communication inter-processus Hafid Bourzoufi Université de Valenciennes - ISTV Introduction Les processus concurrents s exécutant dans le système d exploitation
Corrigé des exercices sur les références
Corrigé des exercices sur les références Exercice 3.1.1 dessin Pour cet exercice, vous allez dessiner des structures de données au moyen de petits schémas analogues à ceux du cours, comportant la pile
Gestion distribuée (par sockets) de banque en Java
Gestion distribuée (par sockets) de banque en Java Université Paris Sud Rappel sur la solution locale de gestion simple de banque L objet de cet exercice était de créer une application java qui implante
Découverte du logiciel ordinateur TI-n spire / TI-n spire CAS
Découverte du logiciel ordinateur TI-n spire / TI-n spire CAS Mémento Ouvrir TI-Nspire CAS. Voici la barre d outils : L insertion d une page, d une activité, d une page où l application est choisie, pourra
TP1 : Initiation à l algorithmique (1 séance)
Université de Versailles Vanessa Vitse IUT de Vélizy - Algorithmique 2006/2007 TP1 : Initiation à l algorithmique (1 séance) 1 Prise en main de l environnement Unix : rappels et compléments Le but de la
Table des matières PRESENTATION DU LANGAGE DS2 ET DE SES APPLICATIONS. Introduction
PRESENTATION DU LANGAGE DS2 ET DE SES APPLICATIONS Depuis SAS 9.2 TS2M3, SAS propose un nouveau langage de programmation permettant de créer et gérer des tables SAS : le DS2 («Data Step 2»). Ces nouveautés
Initiation à la programmation en Python
I-Conventions Initiation à la programmation en Python Nom : Prénom : Une commande Python sera écrite en caractère gras. Exemples : print 'Bonjour' max=input("nombre maximum autorisé :") Le résultat de
Les chaînes de caractères
Les chaînes de caractères Dans un programme informatique, les chaînes de caractères servent à stocker les informations non numériques comme par exemple une liste de nom de personne ou des adresses. Il
Cours d initiation à la programmation en C++ Johann Cuenin
Cours d initiation à la programmation en C++ Johann Cuenin 11 octobre 2014 2 Table des matières 1 Introduction 5 2 Bases de la programmation en C++ 7 3 Les types composés 9 3.1 Les tableaux.............................
ALGORITHMIQUE ET PROGRAMMATION ORIENTEE OBJET
ALGORITHMIQUE ET PROGRAMMATION ORIENTEE OBJET I. INTRODUCTION 1.1. HISTORIQUE 1991: Concepts Java pour Sun -conception d'un langage pour des appareils électroniques(code embarqué) -syntaxe proche du C++
Un ordonnanceur stupide
Un ordonnanceur simple Université Paris Sud L objet des exercices qui suivent est de créer un ordonanceur implantant l algorithme du tourniquet ( round-robin scheduler ). La technique utilisée pour élire
Java Licence Professionnelle CISII, 2009-10
Java Licence Professionnelle CISII, 2009-10 Cours 4 : Programmation structurée (c) http://www.loria.fr/~tabbone/cours.html 1 Principe - Les méthodes sont structurées en blocs par les structures de la programmation
Algorithmique et Programmation, IMA
Algorithmique et Programmation, IMA Cours 2 : C Premier Niveau / Algorithmique Université Lille 1 - Polytech Lille Notations, identificateurs Variables et Types de base Expressions Constantes Instructions
Java 7 Les fondamentaux du langage Java
184 Java 7 Les fondamentaux du langage Java 1.1 Les bibliothèques graphiques Le langage Java propose deux bibliothèques dédiées à la conception d'interfaces graphiques. La bibliothèque AWT et la bibliothèque
Anne Tasso. Java. Le livre de. premier langage. 6 e édition. Groupe Eyrolles, 2000, 2002, 2005, 2006, 2008, 2010, ISBN : 978-2-212-12648-8
Anne Tasso Java Le livre de premier langage 6 e édition Groupe Eyrolles, 2000, 2002, 2005, 2006, 2008, 2010, ISBN : 978-2-212-12648-8 Table des matières Avant-propos Organisation de l ouvrage..............................
Cette application développée en C# va récupérer un certain nombre d informations en ligne fournies par la ville de Paris :
Développement d un client REST, l application Vélib 1. Présentation L application présentée permet de visualiser les disponibilités des vélos et des emplacements de parking à la disposition des parisiens
C++ Programmer. en langage. 8 e édition. Avec une intro aux design patterns et une annexe sur la norme C++11. Claude Delannoy
Claude Delannoy Programmer en langage C++ 8 e édition Avec une intro aux design patterns et une annexe sur la norme C++11 Groupe Eyrolles, 1993-2011. Groupe Eyrolles, 2014, pour la nouvelle présentation,
Environnements de développement (intégrés)
Environnements de développement (intégrés) Tests unitaires, outils de couverture de code Patrick Labatut [email protected] http://www.di.ens.fr/~labatut/ Département d informatique École normale supérieure
Threads. Threads. USTL http://www.lifl.fr/ routier 1
Threads USTL http://www.lifl.fr/ routier 1 Rappels - Définitions un Process est un programme qui tourne et dispose de ses propres ressources mémoire. OS multi-tâche plusieurs process en concurrence un
Apprendre Java en 154 minutes
Apprendre Java en 154 minutes Tutorial Java 1.6 - HESB-TI Stéphanie Calderara José R. Beuret Quentin Cosendey Mai 2008 Table des matières 1 Objet, classe et modificateur 3 1.1 Le premier pas..........................
Traduction des Langages : Le Compilateur Micro Java
BARABZAN Jean-René OUAHAB Karim TUCITO David 2A IMA Traduction des Langages : Le Compilateur Micro Java µ Page 1 Introduction Le but de ce projet est d écrire en JAVA un compilateur Micro-Java générant
Généralités sur le Langage Java et éléments syntaxiques.
Généralités sur le Langage Java et éléments syntaxiques. Généralités sur le Langage Java et éléments syntaxiques....1 Introduction...1 Genéralité sur le langage Java....1 Syntaxe de base du Langage...
Introduction à la programmation orientée objet, illustrée par le langage C++ Patrick Cégielski [email protected]
Introduction à la programmation orientée objet, illustrée par le langage C++ Patrick Cégielski [email protected] Mars 2002 Pour Irène et Marie Legal Notice Copyright c 2002 Patrick Cégielski Université
TD/TP PAC - Programmation n 3
Université Paris Sud Licence d informatique/iup-miage2 - Année 2004-2005 auteur : Frédéric Vernier semaine : 11-16 octobre 2004 conditions : sur machine avec les outils standards java web: http://vernier.frederic.free.fr/indexpac.html
Introduction au langage C
Introduction au langage C Cours 1: Opérations de base et premier programme Alexis Lechervy Alexis Lechervy (UNICAEN) Introduction au langage C 1 / 23 Les premiers pas Sommaire 1 Les premiers pas 2 Les
2. Comprendre les définitions de classes
Conception objet en Java avec BlueJ une approche interactive 2. Comprendre les définitions de classes Analyser le contenu des classes David J. Barnes, Michael Kölling version française: Patrice Moreaux
I. Introduction aux fonctions : les fonctions standards
Chapitre 3 : Les fonctions en C++ I. Introduction aux fonctions : les fonctions standards A. Notion de Fonction Imaginons que dans un programme, vous ayez besoin de calculer une racine carrée. Rappelons
Package Java.util Classe générique
Package Java.util Classe générique 1 Classe Vector La taille est dynamique: dès qu un tableau vectoriel est plein, sa taille est doublée, triplée, etc. automatiquement Les cases sont de type Object add(object
JAVA TD0. Prise en main du langage Environnement de base JAVA 1
JAVA TD0 Prise en main du langage Environnement de base JAVA 1 Mon premier programme public class HelloWorld { public static void main(string [] arg){ System.out.println("Hello, World!"); main(string []
ACTIVITÉ DE PROGRAMMATION
ACTIVITÉ DE PROGRAMMATION The purpose of the Implementation Process is to realize a specified system element. ISO/IEC 12207 Sébastien Adam Une introduction 2 Introduction Ø Contenu Utilité de l ordinateur,
Notions fondamentales du langage C# Version 1.0
Notions fondamentales du langage C# Version 1.0 Z 2 [Notions fondamentales du langage Csharp] [Date : 25/03/09] Sommaire 1 Tout ce qu il faut savoir pour bien commencer... 3 1.1 Qu est ce qu un langage
TP1 : Initiation à Java et Eclipse
TP1 : Initiation à Java et Eclipse 1 I. Objectif du TP TP1 : Initiation à Java et Eclipse Programmation Mobile Initiation à l environnement Eclipse et aux notions de base du langage Java. II. Environnement
RMI le langage Java XII-1 JMF
Remote Method Invocation (RMI) XII-1 Introduction RMI est un ensemble de classes permettant de manipuler des objets sur des machines distantes (objets distants) de manière similaire aux objets sur la machine
Recherche dans un tableau
Chapitre 3 Recherche dans un tableau 3.1 Introduction 3.1.1 Tranche On appelle tranche de tableau, la donnée d'un tableau t et de deux indices a et b. On note cette tranche t.(a..b). Exemple 3.1 : 3 6
2 e édition JAVA 5 et 6. Jérôme Bougeault. TSoft et Groupe Eyrolles, 2003, 2008, ISBN : 978-2-21212250-3
2 e édition JAVA 5 et 6 Jérôme Bougeault TSoft et Groupe Eyrolles, 2003, 2008, ISBN : 978-2-21212250-3 Classes et objets Les constructeurs Propriétés Les méthodes L héritage Les interfaces Les relations
Introduction à la programmation Travaux pratiques: séance d introduction INFO0201-1
Introduction à la programmation Travaux pratiques: séance d introduction INFO0201-1 B. Baert & F. Ludewig [email protected] - [email protected] Qu est-ce que la programmation? Programmer Ecrire un
Cours d Algorithmique-Programmation 2 e partie (IAP2): programmation 24 octobre 2007impérative 1 / 44 et. structures de données simples
Cours d Algorithmique-Programmation 2 e partie (IAP2): programmation impérative et structures de données simples Introduction au langage C Sandrine Blazy - 1ère année 24 octobre 2007 Cours d Algorithmique-Programmation
