Vous êtes sur la page 1sur 9

Examen 1

re

session 2011-2012

page 1

NFA 002 - Programmation JAVA Formation CNAM

IPST-CNAM Programmation JAVA NFA 002 Mercredi 27 Juin 2012 CORRECTION 1


re

Avec document Dure : 2 h30 Enseignant : LAFORGUE Jacques

Session NFA 002

1re PARTIE : COURS (sans document)

1. QCM (35 points)


En Java, la classe Hashtable<K,V> permet de grer une collection d'lments dont l'accs se fait par une donne, appele Key, et non par un rang comme cela est le cas dans la classe ArrayList 1 OUI 2 NON En Java, la classe Collections permet de trier les lments de n'importe quelle collection (classe qui implmente l'interface List) grce la mthode sort. Cette mthode fonctionne si la classe d'appartenance des lments de la collection implmente l'interface : 1 Comparator 2 Comparable 3 Compiler L'hritage multiple de classe est possible en Java 1 OUI 2 NON Une classe abstraite est une classe dont les types des attributs ne sont pas connus. C'est lors de l'instanciation de l'objet que les types des attributs sont rsolus 1 OUI 2 NON Soit le code suivant : public class A extends B implements C { private int attr_A; public A() { attr_A = 10; attr_B = "TOTO"; C.attr_C = 100; } } attr_B est un attribut protected de B attr_C est un attribut static public de l'interface C Ce code est correct 1 OUI 2 NON X Q1 X

Q2

Q3 X Q4

X Q5

page 1

Examen 1

re

session 2011-2012

page 2

NFA 002 - Programmation JAVA Formation CNAM Q6 X

Soit deux classes B et C qui hritent d'une classe abstraite A. Les classes B et C peuvent utiliser par hritage les attributs protected de la classe A. 1 OUI 2 NON Une classe qui contient au moins une mthode abstraite doit tre dclare abstraite. 1 OUI 2 NON En Java, on dclare un tableau qui contient des lments dont la classe d'appartenance est une classe abstraite C. 1 Cela n'est pas possible 2 Cela est possible et on ajoute dans le tableau des objets de type C ( t[i]=new C(); ) 3 Cela est possible et on ajoute dans le tableau des objets de type B ( t[i]=new B(); ) et la classe B hrite de C En JAVA, une classe peut implmenter plusieurs interfaces 1 OUI 2 NON En JAVA, une interface peut contenir des attributs : 1 statics 2 non statics 3 privs En JAVA, une interface permet de : 1 passer en paramtre d'une mthode un objet dont la classe d'appartenance implmente l'interface 2 dfinir des traitements gnriques sur des collections polymorphes 3 crer des classes abstraites La dclaration d'une mthode suivante : public void traitement(String s) throws MyException prcise que la mthode doit traiter l'exception MyException dans le corps de sa mthode. 1 OUI 2 NON

Q7 X

Q8

X X

Q9 X

Q 10 X

Q 11 X X

Q 12

page 2

Examen 1

re

session 2011-2012

page 3

NFA 002 - Programmation JAVA Formation CNAM Q 13

Soit le code suivant qui ajoute un Individu dans un tableau : public void ajouter(String nom) throws Exception { Individu ind=null; try { ind = rechercher(nom); } catch(NonTrouveException ex) { tab[n++] = ind; } } La mthode rechercher retourne l'exception NonTrouveException si le nom de l'individu n'est pas trouv.

1 2 3

si l'individu que l'on veut ajouter n'est pas trouv alors la mthode retourne l'exception NonTrouveException si l'individu que l'on veut ajouter n'est pas trouv et le tableau n'est pas plein alors l'individu est ajout au tableau Si l'individu que l'on veut ajouter n'est pas trouv et le tableau est plein alors la mthode retourne une exception prdfinie Java (IndexOutOfBoundsException)

X X

Soit le code suivant : try{ System.out.println("AAA"); call(); System.out.println("BBB"); } catch(MyException ex) { System.out.println("DDD"); } catch(Exception ex) { System.out.println("CCC"); } avec la mthode call qui dclenche l'exception MyException. Ce code affiche : 1 AAA BBB 2 AAA DDD CCC 3 AAA DDD En JAVA, un package est un regroupement de classe Java (.java et .class). Ce regroupement (cration du package) se fait avec la commande de compilation (option -d) : javac -d <repertoire de regroupement> *.java 1 OUI 2 NON Un design pattern est un modle de description qui reprsente souvent une architecture de classes et dont l'objectif est de rendre rutilisable des choix de conception 1 OUI 2 NON Le design pattern Factory est un modle de conception de la mise en uvre 1 d'une communication client serveur 2 d'une fabrique d'objets dcrits par une interface commune 3 de la mise en facteur des mthodes de diffrentes classes dans une mme interface

Q 14

Q 15

X Q 16 X

Q 17 X

page 3

Examen 1

re

session 2011-2012

page 4

NFA 002 - Programmation JAVA Formation CNAM Q 18 X

Le Singleton est un design pattern qui 1 est une classe contenant une mthode static qui cre un objet s'il n'est pas dj cr et le retourne, sinon le retourne 2 de crer un nouvel objet chaque fois que l'on appelle la mthode static getInstance mais chacun des objets implmente une interface unique 3 permet d'obtenir un objet qui est toujours le mme. Il est unique dans la JVM d'excution. Le code suivant cre un fichier de nom "exemple.txt" dans le rpertoire courant d'excution. Le fichier est cr, vide de toute information File fichier; fichier = new File("exemple.txt"); 1 2 OUI NON

X Q 19

X Q 20 X

En JAVA, la gestion des entres sorties se fait notamment par les classes qui se trouvent dans le package java.io 1 OUI 2 NON On a le code suivant : File fichier = new File("ListeDouble.bin); FileOutputStream fos = new FileOutputStream(fichier); DataOutputStream dos = new DataOutputStream(fos); dos.writeInt(tab.length); for(int i=0;i< tab.length;i++) dos.writeDouble( tab[i]); dos.close(); 1 2 3 Ce code cre un fichier de nom 'ListeDouble.bin' contenant la liste de doubles Ce code cre un fichier dont les informations sont dans un format texte Ce code cre un fichier dont les informations sont dans un format binaire

Q 21

X X Q 22 X Q 23 X

La class File ne gre que les fichiers. Pour grer des rpertoires on utilise la classe Directory 1 OUI 2 NON La srialisation est un service du langage Java qui permet d'crire et de lire n'importe quel objet dans un fichier binaire (Serializable) ou un fichier texte (XML) 1 OUI 2 NON Le code suivant est correct : import java.io.*; public class Terminal{ static BufferedReader in = new BufferedReader(new InputStreamReader(System.in)); public static String lireString() throws IOException { return in.readLine(); } } 1 2 OUI NON

Q 24

page 4

Examen 1

re

session 2011-2012

page 5

NFA 002 - Programmation JAVA Formation CNAM Q 25

Le package est une unit de programmation permettant de regrouper et architecturer les classes du langage Java (prdfinies ou dveloppes) dans des rpertoires et accessibles aux autres units de programmation (programme Java, Applet, ). 1 OUI 2 NON Un rpertoire de package est une chemin d'accs vers un rpertoire qui contient les classes du package et ce rpertoire ne peut pas contenir d'autres rpertoires. 1 OUI 2 NON Soit le fichier suivant : C:\CodeJava\exercices\cnam\util\Terminal.java. Le fichier Terminal.java contient en 1re ligne : package exercices.cnam.util Le rpertoire C:\bin est vide. On ralise la commande suivante : javac -d C:\bin C:\CodeJava\exercices\cnam\util\Terminal.java On obtient le rsultat suivant : C:\bin\ exercices\cnam\util\Terminal.class 1 2 OUI NON

Q 26

X Q 27

En JAVA, un thread est une JVM qui s'excute en parallle de la JVM dans laquelle le thread a t cr. 1 OUI 2 NON Pour crer et dmarrer un thread, il faut : 1 crer un objet dont la classe d'appartenance hrite de la classe Runnable et implmente la mthode run 2 crer un objet dont la classe d'appartenance hrite de la classe Thread, implmente la mthode run et appeler la mthode start La classe A hrite de B qui hrite de C. C est une classe abstraite qui implmente une interface I. A et B ne sont pas des classes abstraites 1 C peut implmenter qu'une partie des mthodes de l'interface I 2 B doit implmenter toues les mthodes de I qui n'ont pas t implmentes par C 3 A ne peut pas implmenter des mthodes de l'interface I L'interface permet de : 1 grer des collections polymorphes (les lments sont de type d'une interface) 2 grer les fichiers (interface avec le systme d'exploitation) 3 de passer en paramtre d'une mthode "un traitement" (traitements gnriques)

Q 28

X Q 29

Q 30 X X

Q 31 X X

Un tableau Java peut contenir des type primitifs, peut contenir des objets et la classe d'appartenance de Q 32 ces objets peut tre une classe abstraite 1 OUI X 2 NON

page 5

Examen 1

re

session 2011-2012

page 6

NFA 002 - Programmation JAVA Formation CNAM Q 33

Soit une collection "liste" dfinie par la classe ArrayList<Individu>. Nous proposons de vouloir trier les lments de cette liste suivant 3 critres de tri diffrents. Pour raliser ces 3 mthodes de tri diffrentes, il faut notamment : 1 que la classe Individu implmente 3 interfaces diffrentes (1 interface par tri) 2 crer 3 classes diffrentes Comparator1, Comparator2 et Comparator3 qui implmentent chacune l'interface Comparator<Individu> 3 pour chacun des tris faire les appels : Collections.sort(liste, comparator1) Collections.sort(liste, comparator2) ou Collections.sort(liste, comparator3) o comparator1, comparator2, comparator3 sont des instances des classe Comparator1, Comparator2, Comparator3 qui implmentent chacune l'interface Comparator<Individu> En JAVA, la classe RuntimeException qui hrite de la classe Exception permet de dclencher une exception qui interrompt proprement et dfinitivement le runtime de la JVM. 1 OUI 2 NON La srialisation a un prix: la compatibilit binaire des informations crites qui dpendent des versions JAVA et surtout de la stabilit des classes dont les objets sont crits sur ce principe 1 OUI 2 NON

X X

Q 34

X Q 35 X

2. Questions libres (15 points)


Chaque question est note sur 5 points. Vous rpondez ces questions sur une copie vierge en mettant bien le numro de la question, sans oublier votre nom et prnom. Q1 Expliquez quoi servent les exceptions et expliquer son fonctionnement. Les exceptions servent traiter les cas d'erreur proprement et efficacement. Quand un dveloppeur crit une mthode, il doit prvoir quels sont les cas fonctionnels pour lesquels il lui est impossible de continuer le traitement. Il dcide alors de remonter le cas d'erreur l'appelant. Les exceptions permettent d'interrompre l'excution d'une mthode et de remonter l'appelant le cas d'erreur sous la forme d'un objet dont la classe d'appartenance hrite de la classe prdfinie Exception. L'appelant peut alors rcuprer cette exception et/ou la remonter son tour son appelant. Quand une exception remonte de la mthode main alors le programme Java s'arrte.

Q2 Quels sont les composants (ou couches) d'une application Java base sur les principes du modle MVC. Quel est le rle de chacun de ces composants ? Les trois composants sont : - le modle de donnes - les vues - le contrleur Le modle de donne assure le stockage et le changement des donnes mtiers de l'application. Il notifie ces changements aux vues de l'application. Les vues assurent la reprsentation graphique des donnes mtiers de l'application. Une vue s'abonne aux vnements de mise jour des donnes et envoie des commandes au contrleur. Le contrleur initialise les vues avec les donnes mtiers, assure l'affichage des vues, l'enchanement des vues entre elles et traite les commandes des vues qu'elle envoie au modle.

page 6

Examen 1

re

session 2011-2012

page 7

NFA 002 - Programmation JAVA Formation CNAM

Q3 En programmation objet, donner une dfinition du polymorphisme. Quels sont les deux moyens, en JAVA, pour mettre en uvre le polymorphisme ? Commentez. Le polymorphisme est une proprit des LOO qui permet de crer des collections contenant des objets de classes diffrentes. Ces classes doivent alors toutes hrites d'une mme classe abstraite ou implmenter la mme interface. Les lments de la collection sont typs soit de la classe abstraite ou de l'interface. Les mthodes qu'il est possible de faire sur les lments de la collection sont soit les mthodes de la classe abstraite, soit les mthodes de l'interface.

2me PARTIE : PROGRAMMATION (avec document)


Probleme [30 points]
import java.util.*; import java.io.*; // La classe de dfinition d'un agenda public class Agenda { // Le nom de fichier de sauvegarde private static final String nomFichierSauvegarde="AGENDA.txt"; // La collection contenant les rendez-vous private ArrayList<RendezVous> rdvs; // Le constructeur : // la collection est cre et vide public Agenda() { rdvs = new ArrayList<RendezVous>(); } // Ajoute un rendez-vous dans l'agenda puis trie les rendez-vous public void ajouter(RendezVous rdv) { rdvs.add(rdv); Collections.sort(rdvs); } // Affichage de l'agenda public void afficher() { for(RendezVous rdv : rdvs) { System.out.println(rdv.toString()); System.out.println("------------------"); } } // Mthode de sauvegarde de l'agenda // Le fichier contient dans la 1re ligne le nombre de rendez-vous // puis les rendez-vous un par un public void sauver() { try{ FileOutputStream fos = new FileOutputStream(new File(nomFichierSauvegarde)); PrintStream flotOut = new PrintStream(fos); flotOut.println(rdvs.size()+""); for(RendezVous rdv : rdvs) rdv.ecrire(flotOut); }catch(Exception ex)

page 7

Examen 1

re

session 2011-2012 {

page 8

NFA 002 - Programmation JAVA Formation CNAM

System.out.println("Probleme de sauvegarde : " + ex); } } // Mthode de chargement de l'agenda public void charger() { try{ File file = new File(nomFichierSauvegarde); FileInputStream fis = new FileInputStream(file); BufferedReader flotIn = new BufferedReader(new InputStreamReader(fis)); String ligne1 = flotIn.readLine(); int nbRdv = Integer.parseInt(ligne1); rdvs.clear(); for(int i = 0; i <nbRdv; i++) { RendezVous rdv = new RendezVous(); rdv.lire(flotIn); rdvs.add(rdv); } }catch(Exception ex) { System.out.println("Probleme de chargement : " + ex); } } } import java.util.*; import java.io.*; // Classe de dfinition d'un rendez-vous public class RendezVous implements Comparable<RendezVous> { private String date; private String heureDebut; private String heureFin; private String texte; // Constructeur vide pour la lecture public RendezVous() {} // Constructeur de cration d'un rendez-vous public RendezVous(String date, String heureDebut, String heureFin, String texte) { this.date = date; this.heureDebut = heureDebut; this.heureFin = heureFin; this.texte = texte; } // Mthode de l'interface Comparable<RendezVous> // afin de trier l'agenda // 1er critre de tri la date du rendez-vous // 2eme critre de tri l'heure de dbut du rendez-vous // public int compareTo(RendezVous rdv) { // 1er critere : la date int n = this.date.compareTo(rdv.date); if ( n==0) // Si mme date { // 2eme critre : l'heure de dbut return this.heureDebut.compareTo(rdv.heureDebut); } else return n; }

page 8

Examen 1

re

session 2011-2012

page 9

NFA 002 - Programmation JAVA Formation CNAM

// Pour afficher l'cran, le rendez-vous en chaine public String toString() { return (date + "/"+ heureDebut + " " + heureFin + "\n" + texte); } // Mthode qui lit un rendez-vous dans un stream de texte public void lire(BufferedReader flotIn) throws IOException { date = flotIn.readLine(); heureDebut = flotIn.readLine(); heureFin = flotIn.readLine(); texte = flotIn.readLine(); } // Mthode qui crit un rednez-vous dans un stream de texte public void ecrire(PrintStream flotOut) throws IOException { flotOut.println(date); flotOut.println(heureDebut); flotOut.println(heureFin); flotOut.println(texte); } }

(Fin du sujet)

page 9