Vous êtes sur la page 1sur 6

INSA - 4 AE Dure : 1H00

2008 2009

Contrle
Programmation Objet Java
C ORRECTION

Consignes
Tous les documents sont autoriss, mais ils seront peu utiles.
Indiquez vos nom et prnom sur chaque feuille.
Le corrig sera mis sur la page du cours dans la journe.

Nom :

Prnom :

Barme

Exercice Barme Note Total partiel

Exercice 1 Questions rapides 5 points

Exercice 2 Smantique de Java 10 points

Exercice 3 Questions avances 5 points

Note globale : / 20
Exercice 1 5 points Questions rapides

Vrai / Faux

Vrai Faux

Exemples
Java est un langage objet 7
Eclipse est un lecteur demails 7

Compilation
La commande pour compiler un fichier java depuis un terminal est javac. 7
Il serait plausible que javac utilise Eclipse en arrire plan. 7
Il serait plausible quEclipse utilise javac en arrire plan. 7
La commande pour excuter une classe java est java 7
Le compilateur Java est crit en Java. Il est donc plausible que javac utilise java 7
pour excuter le compilateur.
Pour la mme raison, il est plausible que java utilise javac. 7
javadoc ouvre un navigateur web. 7
javadoc permet de naviguer dans le source du programme java. 7
La compilation gnre autant de fichiers quil y a dobjets dans le programme. 7
Lorsque Chuck Norris compile du Java, le compilateur nose pas lui signaler les 7
exceptions non attrapes. (Argumentez votre rponse au dos de la dernire page)

Environnement dexcution
Pour excuter un programme Java, il faut obligatoirement une machine virtuelle 7
Java (JVM).
Le fichier Foo.class contient le rsultat de lexcution de la classe Foo. 7
lexcution, de nouveaux fichiers .class sont fabriqus. 7
Si jexcute la classe Foo, cest la premire mthode du source qui est excute. 7
Si jexcute la classe Foo, cest le constructeur de la classe qui est excut. 7
On ne peut jamais excuter directement une classe java. 7
On ne peut jamais excuter directement une interface java. 7
Nom : Prnom : Groupe :

Vrai Faux

Classes et objets
La librairie standard Java na pas peur du ridicule, au point davoir une classe qui 7
sappelle DefaultStyledDocument.AttributeUndoableEdit.
En Java, les types string et String existent mais sont diffrents. 7
int et Integer hritent tous deux de la classe Object. 7
Mme lorsquune classe Foo hrite dune classe Bar, elle est toujours un sous-type 7
dObject.
Lhritage (extends) permet dimporter automatiquement les mthodes de la 7
classe parent dans sa propre classe.
Lhritage importe aussi les attributs de la classe parent. 7
Lhritage importe aussi les constructeurs de la classe parent. 7
Un itrateur (ou Enumeration, que lon peut utiliser dans une boucle for) est un 7
objet.
Il est possible de dfinir ses propres itrateurs (Enumeration). 7

Divers
On peut crire tout un programme java (qui fonctionne) sans crire un seul 7
constructeur.
On peut dfinir le constructeur dune classe dans une autre classe. 7
Dans le constructeur de la classe Foo, je peux faire appel new Bar. 7
Si je remplace tous les private et protected dun programme compilable par des 7
public, le programme compile toujours.
Si je remplace tous les public dun programme compilable par des private, le 7
programme compile toujours
Si je passe tous les attributs dun programme compilable en static, le programme 7
compile toujours
Si je passe tous les attributs dun programme compilable en static, le programme 7
sexcute de la mme manire

et UML dans tout a ?


Les concepts principaux de Java sont, pour lessentiel (cocher une case) :
les mmes concepts quen UML, mais avec des appellations diffrentes ;
4les mmes concepts quen UML, avec les mmes appellations en gnral ;
ils nont aucun rapport car Java est un langage de programmation alors quUML est un langage
de conception.
Nom : Prnom : Groupe :
Exercice 2 10 points Smantique de Java
Le programme constitu des deux classes ci-dessous compile correctement.
Prcision : lexception SecurityException est connue du compilateur par dfaut, et na pas besoin
dtre signale chaque mthode avec un throws
Rpondez aux questions de la page ci-contre. Lobjectif est de vrifier que vous matrisez la sman-
tique de Java, cest--dire la manire prcise dont un programme se droule.
Soyez trs 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()) ;
i f (! 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) ;
}
}
Q1 Respirez fond. Quaffiche 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. Mme question que Q1 si on ajoute static devant lattribut 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 : mme question que Q1 si on enlve 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 dtre raisonnablement prcis.)
Exercice 3 5 points Questions avances
1 La compilation croise consiste compiler depuis une machine pour une autre machine. Par
exemple, compiler un programme C sur son PC-Intel en un excutable pour C167.
Quavez-vous dire au sujet de la compilation croise pour Java ?

La compilation dun programme Java produit un fichier .class qui est en principe portable sur nim-
porte quelle JVM. La compilation croise nexiste donc pas. (Ou, si on prfre, toute compilation
est automatiquement croise).

2 Vous tes embauch depuis six mois chez Autopilot un sous-traitant dAirbus charg du pilote
automatique. Votre chef de projet vous invite (malgr vos protestations) une runion o, parat-
il, il sera question de Java. Il vous prvient que la plupart des gens de la runion sont comptents
en C embarqu, mais sans doute pas en Java.

Ds le dbut de la runion, le responsable Airbus annonce : Nous prvoyons dsormais dutiliser


Java pour une partie du pilote automatique. Nous sommes confiant que le code obtiendra le niveau
de certification ncessaire.
Un autre participant renchrit : Je rappelle tous que le niveau de certification exig interdit
lallocation dynamique de mmoire.
Un troisime participant rplique : Aucun problme, il ny a pas dinstruction malloc en Java.
Dun discret mouvement du menton, votre chef vous invite exprimer votre avis.
Les regards se tournent vers vous.

Il ny a pas dinstruction malloc, cest vrai, mais il y a linstruction new, qui alloue dynamiquement
de la mmoire pour crer un nouvel objet
Il faudra donc veiller ce que le programme ne fasse pas de new.

Vous aimerez peut-être aussi