INSA - 4 AE Durée : 1H00 2008 – 2009 Contrôle Programmation Objet – Java – CORR
INSA - 4 AE Durée : 1H00 2008 – 2009 Contrôle Programmation Objet – Java – CORRECTION Consignes ◦Tous les documents sont autorisés, mais ils seront peu utiles. ◦Indiquez vos nom et prénom sur chaque feuille. ◦Le corrigé sera mis sur la page du cours dans la journée. Nom : Prénom : Barème Exercice Barème Note Total partiel Exercice 1 – Questions rapides 5 points Exercice 2 – Sémantique de Java 10 points Exercice 3 – Questions avancées 5 points Note globale : / 20 1 Exercice 1 5 points Questions rapides Vrai / Faux Vrai Faux Exemples Java est un langage objet Eclipse est un lecteur d’emails Compilation La commande pour compiler un fichier java depuis un terminal est javac. Il serait plausible que javac utilise Eclipse en arrière plan. Il serait plausible qu’Eclipse utilise javac en arrière plan. La commande pour exécuter une classe java est java Le compilateur Java est écrit en Java. Il est donc plausible que javac utilise java pour exécuter le compilateur. Pour la même raison, il est plausible que java utilise javac. javadoc ouvre un navigateur web. javadoc permet de naviguer dans le source du programme java. La compilation génère autant de fichiers qu’il y a d’objets dans le programme. Lorsque Chuck Norris compile du Java, le compilateur n’ose pas lui signaler les exceptions non attrapées. (Argumentez votre réponse au dos de la dernière page) Environnement d’exécution Pour exécuter un programme Java, il faut obligatoirement une machine virtuelle Java (JVM). Le fichier Foo.class contient le résultat de l’exécution de la classe Foo. À l’exécution, de nouveaux fichiers .class sont fabriqués. Si j’exécute la classe Foo, c’est la première méthode du source qui est exécutée. Si j’exécute la classe Foo, c’est le constructeur de la classe qui est exécuté. On ne peut jamais exécuter directement une classe java. On ne peut jamais exécuter directement une interface java. 2 Nom : Prénom : Groupe : Vrai Faux Classes et objets La librairie standard Java n’a pas peur du ridicule, au point d’avoir une classe qui s’appelle DefaultStyledDocument.AttributeUndoableEdit. En Java, les types string et String existent mais sont différents. int et Integer héritent tous deux de la classe Object. Même lorsqu’une classe Foo hérite d’une classe Bar, elle est toujours un sous-type d’Object. L’héritage (extends) permet d’importer automatiquement les méthodes de la classe parent dans sa propre classe. L’héritage importe aussi les attributs de la classe parent. L’héritage importe aussi les constructeurs de la classe parent. Un itérateur (ou Enumeration, que l’on peut utiliser dans une boucle for) est un objet. Il est possible de définir ses propres itérateurs (Enumeration). Divers On peut écrire tout un programme java (qui fonctionne) sans écrire un seul constructeur. On peut définir le constructeur d’une classe dans une autre classe. Dans le constructeur de la classe Foo, je peux faire appel à new Bar. Si je remplace tous les private et protected d’un programme compilable par des public, le programme compile toujours. Si je remplace tous les public d’un programme compilable par des private, le programme compile toujours Si je passe tous les attributs d’un programme compilable en static, le programme compile toujours Si je passe tous les attributs d’un programme compilable en static, le programme s’exécute de la même manière et UML dans tout ça ? Les concepts principaux de Java sont, pour l’essentiel (cocher une case) : les mêmes concepts qu’en UML, mais avec des appellations différentes ; les mêmes concepts qu’en UML, avec les mêmes appellations en général ; ils n’ont aucun rapport car Java est un langage de programmation alors qu’UML est un langage de conception. 3 Nom : Prénom : Groupe : Exercice 2 10 points Sémantique de Java Le programme constitué des deux classes ci-dessous compile correctement. Précision : l’exception SecurityException est connue du compilateur par défaut, et n’a pas besoin d’être signalée à chaque méthode avec un throws Répondez aux questions de la page ci-contre. L’objectif est de vérifier que vous maîtrisez la séman- tique de Java, c’est-à-dire la manière précise dont un programme se déroule. Soyez très rigoureux, prenez votre temps ! (Vous pouvez librement griffonner le programme) class Robot { static int compteur = 0 ; Robot pote ; int numero ; Robot () { this .pote = new Robot(this) ; this .numero = compteur + + ; } Robot (Robot r) { this .pote = r ; this .numero = compteur + + ; } void hello(Robot r , boolean flag) { System.out. print(" Je suis " + this .qui()) ; if (! flag) { throw (new SecurityException()) ; } System.out. println(" pote de " + r .qui()) ; } String qui() { return " Robot " + this .numero ; } void go(boolean flag) { try { this . hello(this .pote, flag) ; } catch (Exception e) { System.out. println(" ( pas lol )") ; } finally {System.out. println(" ( lol )") ;} } } class Cyborg extends Robot { String nom ; Cyborg (Robot r , String name) { super(r) ; /∗Appel du constructeur dans la classe Robot ∗/ this .nom = name ; } String qui() { return (super.qui() + " " + nom) ; } public static void main(String[] args) { Robot R1 = new Robot() ; Cyborg C2 = new Cyborg(R1, " John ") ; R1.go(true) ; C2.go(true) ; R1.pote.go(false) ; R1.pote.go(true) ; System.out. println(" compteur = " + Robot.compteur) ; } } 4 Q1 – Respirez à fond. Qu’affiche le programme si je lance java Cyborg ? Je suis Robot 1 pote de Robot 0 (lol) Je suis Robot 2 John pote de Robot 1 (lol) Je suis Robot 0 (pas lol) (lol) Je suis Robot 0 pote de Robot 1 (lol) Q2 – Combien vaut compteur lorsque le programme se termine ? 3 Q3 – Restez calme. Même question que Q1 si on ajoute static devant l’attribut pote ? Je suis Robot 1 pote de Robot 1 (lol) Je suis Robot 2 John pote de Robot 1 (lol) Je suis Robot 1 (pas lol) (lol) Je suis Robot 1 pote de Robot 1 (lol) Q4 – Maintenant que vous êtes chaud : même question que Q1 si on enlève le mot-clef try et les blocs catch et finally. Je suis Robot 1 pote de Robot 0 Je suis Robot 2 John pote de Robot 1 Je suis Robot 0Exception in thread "main" java.lang.SecurityException at Robot.hello(Robot.java:20) at Robot.go(Robot.java:27) at Cyborg.main(Cyborg.java:17) (Pour cette question, contentez-vous d’être raisonnablement précis.) 5 Exercice 3 5 points Questions avancées 1 – La compilation croisée consiste à compiler depuis une machine pour une autre machine. Par exemple, compiler un programme C sur son PC-Intel en un exécutable pour C167. Qu’avez-vous à dire au sujet de la compilation croisée pour Java ? La compilation d’un programme Java produit un fichier .class qui est en principe portable sur n’im- porte quelle JVM. La compilation croisée n’existe donc pas. (Ou, si on préfère, toute compilation est automatiquement croisée). 2 – Vous êtes embauché depuis six mois chez “Autopilot” un sous-traitant d’Airbus chargé du pilote automatique. Votre chef de projet vous invite (malgré vos protestations) à une réunion où, paraît- il, il sera question de Java. Il vous prévient que la plupart des gens de la réunion sont compétents en C embarqué, mais sans doute pas en Java. Dès le début de la réunion, le responsable Airbus annonce : « Nous prévoyons désormais d’utiliser Java pour une partie du pilote automatique. Nous sommes confiant que le code obtiendra le niveau de certification nécessaire. » Un autre participant renchérit : « Je rappelle à tous que le niveau de certification exigé interdit l’allocation dynamique de mémoire. » Un troisième participant réplique : « Aucun problème, il n’y a pas d’instruction malloc en Java. » D’un discret mouvement du menton, votre chef vous invite à exprimer votre avis. Les regards se tournent vers vous. Il n’y a pas d’instruction malloc, c’est vrai, mais il y a l’instruction new, qui alloue dynamiquement de la mémoire pour créer un nouvel objet Il faudra donc veiller à ce que le programme ne fasse pas de new. 6 uploads/Geographie/ java08-corrige.pdf
Documents similaires










-
53
-
0
-
0
Licence et utilisation
Gratuit pour un usage personnel Attribution requise- Détails
- Publié le Apv 09, 2022
- Catégorie Geography / Geogra...
- Langue French
- Taille du fichier 0.1001MB