Université Mohammed Premier Année universitaire 2011-2012. Complément d exercices avec correction



Documents pareils
TP n 2 Concepts de la programmation Objets Master 1 mention IL, semestre 2 Le type Abstrait Pile

Licence Bio Informatique Année Premiers pas. Exercice 1 Hello World parce qu il faut bien commencer par quelque chose...

Java Licence Professionnelle CISII,

Corrigé des exercices sur les références

Programmer en JAVA. par Tama

Java Licence Professionnelle Cours 7 : Classes et méthodes abstraites

Exceptions. 1 Entrées/sorties. Objectif. Manipuler les exceptions ;

Flux de données Lecture/Ecriture Fichiers

TD3: tableaux avancées, première classe et chaînes

Cours intensif Java. 1er cours: de C à Java. Enrica DUCHI LIAFA, Paris 7. Septembre Enrica.Duchi@liafa.jussieu.fr

Pour plus de détails concernant le protocole TCP conférez vous à la présentation des protocoles Internet enseignée pendant.

Introduction à Java. Matthieu Herrb CNRS-LAAS. Mars

Structure d un programme et Compilation Notions de classe et d objet Syntaxe

LMI 2. Programmation Orientée Objet POO - Cours 9. Said Jabbour. jabbour@cril.univ-artois.fr

INTRODUCTION A JAVA. Fichier en langage machine Exécutable

Langage et Concepts de ProgrammationOrientée-Objet 1 / 40

Info0101 Intro. à l'algorithmique et à la programmation. Cours 3. Le langage Java

Premiers Pas en Programmation Objet : les Classes et les Objets

Programmation avec des objets : Cours 7. Menu du jour

Langage à objets : JAVA (1)

Tp 1 correction. Structures de données (IF2)

Cours 1 : Introduction. Langages objets. but du module. contrôle des connaissances. Pourquoi Java? présentation du module. Présentation de Java

Page 1 sur 5 TP3. Thèmes du TP : l la classe Object. l Vector<T> l tutorial Interfaces. l Stack<T>

Programmation Réseau. Sécurité Java. UFR Informatique jeudi 4 avril 13

INF 321 : mémento de la syntaxe de Java

Java Licence Professionnelle CISII, Cours 2 : Classes et Objets

ALGORITHMIQUE ET PROGRAMMATION ORIENTEE OBJET

Plan du cours. Historique du langage Nouveautés de Java 7

Programme Compte bancaire (code)

Java Licence Professionnelle CISII,

Utilisation d objets : String et ArrayList

Programmation Objet Java Correction

Pour signifier qu'une classe fille hérite d'une classe mère, on utilise le mot clé extends class fille extends mère

Package Java.util Classe générique

as Architecture des Systèmes d Information

Gestion distribuée (par sockets) de banque en Java

Support de cours et TD Programmation Orientée Objet

Communication inter-processus (IPC) : tubes & sockets. exemples en C et en Java. F. Butelle

Développement Logiciel

et se trouve popularisé rapidement pour ses possibilités de développement liés au Web. Les

Encapsulation. L'encapsulation consiste à rendre les membres d'un objet plus ou moins visibles pour les autres objets.

Cours 14 Les fichiers

Objets et Programmation. origine des langages orientés-objet

Java DataBaseConnectivity

PROGRAMMATION PAR OBJETS

Prendre le marteau, le tableau, le mètre, le crayon, la ficelle, le clou, la pointe ;

Prendre le marteau, le tableau, le mètre, le crayon, la ficelle, le clou, la pointe ;

Chapitre 10. Les interfaces Comparable et Comparator 1

Programmation Par Objets

Cours 1: Java et les objets

Programmation par les Objets en Java

Langage Java. Classe de première SI

Une introduction à Java

TD/TP PAC - Programmation n 3

Génie Logiciel avec Ada. 4 février 2013

Polymorphisme, la classe Object, les package et la visibilité en Java... 1

Introduction au langage Java

Langage et Concepts de Programmation Objet. 1 Attributs et Méthodes d instance ou de classe. Travaux Dirigés no2

Programmation Orientée Objet - Licence TIS CM8/9. Rappel sur la séance précédente. Lancelot Pecquet Lancelot.Pecquet@math.univ-poitiers.

ACTIVITÉ DE PROGRAMMATION

RMI le langage Java XII-1 JMF

Threads. Threads. USTL routier 1

Projet de programmation (IK3) : TP n 1 Correction

Structurer ses données : les tableaux. Introduction à la programmation

Dis papa, c est quoi un bus logiciel réparti?

Généricité. en Java. (polymorphisme paramétrique) Philippe GENOUD UJF Janvier

Solutions du chapitre 4

Cours d initiation à la programmation en C++ Johann Cuenin

TD Objets distribués n 3 : Windows XP et Visual Studio.NET. Introduction à.net Remoting

INITIATION AU LANGAGE JAVA

RAPPELS SUR LES METHODES HERITEES DE LA CLASSE RACINE Object ET LEUR SPECIALISATION (i.e. REDEFINITION)

Un ordonnanceur stupide

Recherche dans un tableau

Programmation Internet en Java

Cahier des Charges du Projet Domotique. Choquet Mathieu Masson Jérôme Groupe 6. Domotique. p.1

Synchro et Threads Java TM

Généralités sur le Langage Java et éléments syntaxiques.

I. Introduction aux fonctions : les fonctions standards

Cette application développée en C# va récupérer un certain nombre d informations en ligne fournies par la ville de Paris :

Corrigés des premiers exercices sur les classes

TP, première séquence d exercices.

Prénom : Matricule : Sigle et titre du cours Groupe Trimestre INF1101 Algorithmes et structures de données Tous H2004. Loc Jeudi 29/4/2004

TP1 : Initiation à Java et Eclipse

Anne Tasso. Java. Le livre de. premier langage. 6 e édition. Groupe Eyrolles, 2000, 2002, 2005, 2006, 2008, 2010, ISBN :

Polycopié Cours Programmation Orientée Objet sous Java Programme : Filière SMI S5

Notion de thread (1/2)

Programmation Objet I

Auto-évaluation Programmation en Java

LOG4430 : Architecture logicielle et conception avancée

TP Composants Java ME - Java EE. Le serveur GereCompteBancaireServlet

Exercices sur les interfaces

Design patterns. Design patterns - définition. Design patterns - avantages

Cours Programmation Système

Applet pour visualiser les variables «automate» notifiées

Introduction : les processus. Introduction : les threads. Plan

Remote Method Invocation Les classes implémentant Serializable

Chapitre VI- La validation de la composition.

Programmation Orientée Objets Le Langage JAVA

1. Langage de programmation Java

IFT287 Exploitation de base de données relationnelles et orientées objet. Laboratoire Mon premier programme Java en Eclipse

Transcription:

Université Mohammed Premier Année universitaire 2011-2012 Faculté des Sciences Filière SMI Département de Mathématiques et d Informatique Module : POO Java Semestre : S5 Complément d exercices avec correction Exercice 1 Donnez ce qui est affiché par le programme suivant: class ClasseA { System.out.println("Bonjour: Je suis ClasseA"); class ClasseB extends ClasseA { System.out.println("Bonjour : je suis ClasseB"); public void calculer() { System.out.println("Bonjour : je suis ClasseB: méthode calculer"); class ClasseC extends ClasseB { System.out.println("Bonjour: Je suis ClasseC"); class ClasseD extends ClasseA { class ClasseE extends ClasseD { System.out.println("Bonjour: Je suis ClasseE"); class ClasseF extends ClasseD { class ClasseG extends ClasseF { System.out.println("Bonjour: Je suis ClasseG"); class ClasseH extends ClasseG { System.out.println("Bonjour: Je suis ClasseH"); TD - Programmation Orientée Objet-Java, 2011-2012 1

public class TestComplement { public static void main(string[] args) { ClasseA P1 = new ClasseA(); ClasseA P2 = new ClasseC(); ClasseB P3 = new ClasseC(); ClasseA P4 = new ClasseG(); ClasseD P5 = new ClasseE(); ClasseF P6 = new ClasseH(); ClasseH P7 = new ClasseH(); ClasseF P8 = new ClasseG(); ClasseA P9 = new ClasseD(); ClasseD P10 = new ClasseF(); ClasseB P11 = new ClasseB(); ClasseA P12 = new ClasseB(); P1.afficher(); P2.afficher(); P3.afficher(); P4.afficher(); P5.afficher(); P6.afficher(); P7.afficher(); P8.afficher(); P9.afficher(); P10.afficher(); P11.calculer(); P12.calculer(); Solution Le programme ne compile pas à cause de l instruction «P12.calculer() ;». En effet, la méthode «calculer()» n'est pas définie dans ClassaA: mécanisme de la liaison retardée. Il faut définir la méthode «calculer()» dans la classe ClasseA Les autres instructions : P1.afficher(); // Bonjour: Je suis ClasseA P2.afficher(); // Bonjour: Je suis ClasseC P3.afficher(); // Bonjour: Je suis ClasseC P4.afficher(); // Bonjour: Je suis ClasseG P5.afficher(); // Bonjour: Je suis ClasseE P6.afficher(); // Bonjour: Je suis ClasseH P7.afficher(); // Bonjour: Je suis ClasseH P8.afficher(); // Bonjour: Je suis ClasseG P9.afficher(); // Bonjour: Je suis ClasseA P10.afficher(); // Bonjour: Je suis ClasseA P11.calculer();// Bonjour : je suis ClasseB: méthode calculer Pour l instruction, «P12.calculer();» Si on défini une méthode «calculer()» dans la classe ClasseA, alors c est la méthode «calculer()» définie dans la classe ClasseB qui sera appelée : principe du polymorphisme : méthode de la classe réelle qui sera appelée. TD - Programmation Orientée Objet-Java, 2011-2012 2

Exercice 2 : Ecrire une classe qui permet à l utilisateur d entrer deux nombres entiers sur la ligne de commande, ensuite le programme : additionne les deux nombres entiers et affiche le résultat s il n y a pas d erreur. affiche un message en cas d erreur: - S il n y a pas exactement 2 valeurs entrées sur la ligne de commande - Si au moins, une des 2 valeurs entrées n est pas un nombre entier. - Si au moins, une des 2 valeurs entrées n est pas un nombre entier positif. Solution : class ExceptionUnArgumentNegatif extends Exception { private int n; public ExceptionUnArgumentNegatif(int n){ this.n=n; public int getn(){ return n; class ExceptionDeuxArgumentsNegatifs extends Exception { private int n1,n2; public ExceptionDeuxArgumentsNegatifs(int n1, int n2){ this.n1=n1; this.n2=n2; public int getn1(){ return n1; public int getn2(){ return n2; public class TestComplement { public static int some(int n1, int n2)throws ExceptionUnArgumentNegatif, ExceptionDeuxArgumentsNegatifs { if ((n1<0)&& (n2<0)) throw new ExceptionDeuxArgumentsNegatifs(n1,n2); if (n1<0) throw new ExceptionUnArgumentNegatif(n1); if (n2<0) throw new ExceptionUnArgumentNegatif(n2); return n1+n2; public static void main(string[] args) { try { int n1=integer.parseint(args[0]); int n2=integer.parseint(args[1]); int n=some(n1, n2); System.out.println(n1+" + "+n2+" = "+n); catch(arrayindexoutofboundsexception exc){ System.out.println("Entrer deux arguments entiers"); catch(exceptionunargumentnegatif e){ System.out.println(e.getN()+" est negaif "); catch(exceptiondeuxargumentsnegatifs e){ System.out.println(e.getN1()+" et "+ e.getn2()+" sont négatifs "); TD - Programmation Orientée Objet-Java, 2011-2012 3

catch (NumberFormatException e){ System.out.println("Les arguments doivent être des entiers "); Exercice3 : Gérer une pile d'entiers Il s'agit de définir une classe nommée «Pile» modélisant une pile d'entiers positifs. Tous les attributs de cette classe auront le modificateur private. Cette classe possède au moins les trois méthodes suivantes: void empiler(int x) Cette méthode empile la valeur x reçue en paramètre. int depiler() throws ExceptionPileVide Si la pile est vide, cette méthode lance une exception. sinon, elle dépile (supprime) le dernier élément de la pile et retourne sa valeur, boolean estvide() Cette méthode retourne «true» si la pile est vide et «false» dans le cas contraire. Pour les tests, on défini une classe, nommée «TestPile» qui contiendra la méthode main(). Pour la pile, on utilise un tableau d'entiers. Au départ, ce tableau aura une taille initiale. En cas de besoin, il faut agrandir ce tableau : lorsqu'il est plein et que l'on veut encore empiler un entier; on pourra alors agrandir le tableau d'une quantité déterminée (par exemple égale au double de la taille du tableau courant). Solution import java.io.*; class PileVide extends Exception { public PileVide() { class Pile { private int lapile[]; // Le tableau (la pile) dans lequel on va empiler les entiers positif. private int dernier=-1; // l attribut «dernier» désigne la position du dernier élément de la pile. public Pile(int n) { // créé le tableau «lapile» avec une taille initiale lu au clavier. lapile=new int[n]; /* affiche les éléments de la pile. Attention: les éléments de la pile sont situés entre 0 et la valeur de l attribut «dernier». /* for(int i=0;i<=dernier;i++) System.out.print(laPile[i]+" "); System.out.println(); public boolean estvide() { if (dernier<0) return true; else return false; public void empiler(int x) { /* ajout d'un élément dans la pile. Puisque on travaille avec des tableaux et non avec des listes chainées, alors on doit agrandir la taille du tableau lorsqu'il est plein et que l'on veut encore empiler un entier. On pourra, par exemple, doubler la taille du tableau TD - Programmation Orientée Objet-Java, 2011-2012 4

int l=lapile.length; dernier++; if (dernier <lapile.length-1){ // s'il reste encore des places dans le tableau lapile[dernier]=x; else { /* si non, on créé un nouveau tableau «tab», de taille égale au double du tableau courant «lapile», ensuite on copie les éléments du tableau courant «lapile» dans le nouveau tableau «tab». Enfin, on change la référence de «lapile» qui référencera «tab». int[] tab= new int [2*l]; System.arraycopy(laPile, 0, tab, 0, l); //copie des éléments de «lapile» dans «tab» lapile=tab; lapile[dernier]=x; // ajout de l élément à empiler. public int depiler() throws PileVide { if (this.estvide()) throw ( new PileVide() ); int x = lapile[dernier]; dernier--; /* supprimer le dernier élément de la pile. Donc, on doit changer la position du dernier élément de la pile. return x; public class TestPile { public static void main(string[] args) { InputStreamReader in = null; BufferedReader tampon = null; try { in = new InputStreamReader(System.in); tampon = new BufferedReader(in); /* On saisi un entier pour taille initiale du tableau System.out.print("Entrez la taille initiale de la pile : "); int n = Integer.parseInt(tampon.readLine()); // conversion de String en un entier Pile p=new Pile(n); // création d'une instance de la classe Pile while (true) { /* saisi des éléments à empiler. Remarque: On peut saisir un nombre d'éléments supérieur à n. Dans ce cas agrandissement automatique de la taille du tableau (voir méthode «empiler()»). System.out.print("Entrez un élément à empiler : "); int x = Integer.parseInt(tampon.readLine()); if (x==-1) // on s arrête lorsque l'élément saisi es égale à -1 break; else p.empiler(x); TD - Programmation Orientée Objet-Java, 2011-2012 5

p.afficher(); / / faire un affichage pour la vérification while (true) { /* On dépile les éléments : on supprime les éléments un à un à partir du dernier élément. System.out.print("Voulez vous supprimer un élément : "); char c = (tampon.readline()).charat(0); if ((c=='o') (c=='o')){ int x=p.depiler(); System.out.println("l'élément supprimé est "+x); System.out.println("Pour test: affichage de la pile "); p.afficher(); else break; catch (PileVide e) { System.out.println("la pile est vide :"); catch (NumberFormatException e){ System.out.println("Entrer un entier positif"); catch (IOException ioe) { System.out.println("Erreur de lecture au clavier :"); finally { try { tampon.close(); in.close(); catch (IOException exception1) { System.out.println("Erreur de fermeture des flux :"); Exercice 4 Le but de l exercice est de calculer la surface d un terrain composé de «r» rectangles et de «c» cercles. On suppose que les entiers «r» et «c» sont passés à la ligne de commande. Les données concernant les rectangles (longueur et largeur) et les cercles (les rayons) sont soit demander à l utilisateur de les saisir avant la construction soit pendant la construction. Surface d un rectangle = longueur*largeur Surface d u cercle = pi*r² =ou r désigne le rayon du cercle. Le terrain est modélisé sous forme de tableau. On suppose que les entiers «r» et «c» sont passés de la manière suivante : r5 c7 pour spécifier qu on a 5 rectangles et 7 cercle de même si on passe à la ligne de commande c4 r3 c est que le terrain est composé de 4 cercles et de 3 rectangles. Il faut agrandir la taille du tableau en cas de besoin. TD - Programmation Orientée Objet-Java, 2011-2012 6