Université de Limoges
Faculté des Sciences et Techniques
Master 1 Informatique
Semestre 7 – première session
2011
Examen J...
Université de Limoges
Faculté des Sciences et Techniques
Master 1 Informatique
Semestre 7 – première session
2011
Nous acc...
Université de Limoges
Faculté des Sciences et Techniques
Master 1 Informatique
Semestre 7 – première session
2011
if (bree...
Université de Limoges
Faculté des Sciences et Techniques
Master 1 Informatique
Semestre 7 – première session
2011
Nous att...
Université de Limoges
Faculté des Sciences et Techniques
Master 1 Informatique
Semestre 7 – première session
2011
Cette qu...
Université de Limoges
Faculté des Sciences et Techniques
Master 1 Informatique
Semestre 7 – première session
2011
Consigne...
Université de Limoges
Faculté des Sciences et Techniques
Master 1 Informatique
Semestre 7 – première session
2011
<? xml v...
Université de Limoges
Faculté des Sciences et Techniques
Master 1 Informatique
Semestre 7 – première session
2011
package ...
Université de Limoges
Faculté des Sciences et Techniques
Master 1 Informatique
Semestre 7 – première session
2011
android:...
Université de Limoges
Faculté des Sciences et Techniques
Master 1 Informatique
Semestre 7 – première session
2011
android:...
Université de Limoges
Faculté des Sciences et Techniques
Master 1 Informatique
Semestre 7 – première session
2011
android:...
Université de Limoges
Faculté des Sciences et Techniques
Master 1 Informatique
Semestre 7 – première session
2011
android:...
Université de Limoges
Faculté des Sciences et Techniques
Master 1 Informatique
Semestre 7 – première session
2011
<TextVie...
Prochain SlideShare
Chargement dans…5
×

Correction examen-java-avancé-1

597 vues

Publié le

TD

Publié dans : Technologie
0 commentaire
0 j’aime
Statistiques
Remarques
  • Soyez le premier à commenter

  • Soyez le premier à aimer ceci

Aucun téléchargement
Vues
Nombre de vues
597
Sur SlideShare
0
Issues des intégrations
0
Intégrations
4
Actions
Partages
0
Téléchargements
23
Commentaires
0
J’aime
0
Intégrations 0
Aucune incorporation

Aucune remarque pour cette diapositive

Correction examen-java-avancé-1

  1. 1. Université de Limoges Faculté des Sciences et Techniques Master 1 Informatique Semestre 7 – première session 2011 Examen Java Avancé - Correction Support de cours et notes manuscrites sur papier blanc autorisés. I - Les réseaux téléphoniques (1 point) Question 1) Quels sont les deux technologies qui sont en concurrence pour la 4G ? Citez au moins une caractéristique principale de la technologie 4G. Réponse : Les deux technologies en concurrence pour la 4G sont le Long Term Evolution Advanced (LTE-A) et le WiMax. En caractéristiques, nous acceptions : ● Tout IP ; ● Moins coûteux (que l’UTMS) ; ● Rapidité. II - Les design patterns (4.5 points) Question 2) Expliquez, de façon précise, l’intérêt et les enjeux du modèle MVC. Évidemment, il ne s’agit pas de recopier les diapositives du cours. (1 point) Réponse : Nous vous demandions de mettre en avant les trois composants du patron de conception, en expliquant ce que chacun des composants réalise comme tâche. Ce patron de conception est très utilisé dans la réalisation d’interfaces homme-machine. D’autre part, nous souhaitions que vous parliez de l’indépendance de la vue par rapport au modèle : ainsi, il est aisé de changer la vue sans toucher aux couches plus basses du modèle. Question 3) Que se passe-t-il si une tâche longue est directement exécutée dans le thread de l’interface utilisateur ? (1 point) Réponse : Si une tâche longue est directement exécutée dans le thread de l’interface, l’affichage va se bloquer le temps de la tâche. Question 4) Comment y remédier ? (1 point) Réponse : Il faut faire exécuter la tâche longue dans un thread dédié. Attention à bien utiliser les threads dédiés aux IHMs, comme SwingWorker dans Swing. Question 5) Comment adapteriez-vous le design pattern Factory afin de ne fournir qu’une seule instance d’un objet lorsqu’il est demandé, au lieu d’en fournir une nouvelle à chaque fois ? Illustrez votre réponse à l'aide d'un exemple en Java. (1.5 point) Réponse : 1/13
  2. 2. Université de Limoges Faculté des Sciences et Techniques Master 1 Informatique Semestre 7 – première session 2011 Nous acceptions toute implémentation et idée basée sur la description de la question : ● utiliser une variable dans la Factory qui stockerait les instances ; ● utiliser le patron de conception Singleton pour les instances fournies par la Factory. ● Exemple 1 : Utiliser une variable pour stocker les instances public class MyAnimalFactory { public static Map<String, Animal> instances = new HashMap<String, Animal>(); public MyAnimalFactory() { } public Animal instantitateAnimal(String breed) throws IllegalArgumentException { if (instances.containsKey(breed)) { return (Animal) instances.get(breed); } else if (breed.equals(“cat”)) { return new Cat(); } else if (breed.equals(“dog”)) { return new Dog(); } else { throw new IllegalArgumentException( breed + “ breed not implemented”); } } } public interface Animal { // Methods } public class Cat implements Animal { // Methods } public class Dog implements Animal { // Methods } ● Exemple 2 : Les objets manipulés par la Factory sont des Singletons Cette solution est moins élégante, mais acceptée. public class MyAnimalFactory { public MyAnimalFactory() { } public Animal instantitateAnimal(String breed) throws IllegalArgumentException { 2/13
  3. 3. Université de Limoges Faculté des Sciences et Techniques Master 1 Informatique Semestre 7 – première session 2011 if (breed.equals(“cat”)) { return Cat.getInstance(); } else if (breed.equals(“dog”)) { return Dog.getInstance(); } else { throw new IllegalArgumentException( breed + “ breed not implemented”); } } } public interface Animal { // Methods } public class Cat implements Animal { private static Cat instance; private Cat() { } private static Cat getInstance() { if (instance == null) { instance = new Cat(); } return instance; } // Methods } public class Dog implements Animal { private static Dog instance; private Dog() { } private static Dog getInstance() { if (instance == null) { instance = new Dog(); } return instance; } // Methods } III - J2ME (2.5 points) Question 6) Dans MIDP, quel est l’intérêt d’utiliser l’API de haut niveau (Screen), plutôt que l’API de bas niveau (Canvas) ? Soyez précis dans votre réponse et ne recopiez pas simplement vos diapositives. (1.5 point) Réponse : 3/13
  4. 4. Université de Limoges Faculté des Sciences et Techniques Master 1 Informatique Semestre 7 – première session 2011 Nous attendions de vous que vous expliquiez le principe de ces deux APIs : ● l’API Screen permettant de créer des formulaires et interface basiques rapidement ; ● l’API Canvas permettant de créer des interfaces plus complexes, mais avec un code plus conséquent. Nous souhaitions que vous nous disiez, avec vos mots, ce que vous avez compris de ces APIs. Question 7) Quels sont les quatre domaines de sécurité vus dans le cours J2ME, et quelles sont leurs caractéristiques ? (1 point) Réponse : Les domaines de sécurité sont appliqués à une MIDlet. Chaque domaine bénéficie d’un ensemble de permissions sur l’API : ● Les Manufacturer et Operator domains possèdent toutes les permissions ; ● Le Third-Party domain où les permissions vont être demandées à l’utilisateur ; ● Les MIDlets de Untrusted domain ne vont pouvoir effectuer que les opérations ne nécessitant pas de permissions particulières. IV - Android (12 points) A - Fonctionnement général Question 8) Expliquez comment se passent les phases de compilation, de conversion et de packaging d'une application Android, et le lien entre les différents étapes. (1 point) Réponse : Nous vous demandions le cycle de vie de votre application pendant le processus de développement. C’est à dire à minima : * développement de l’application avec du code source Java utilisant l’API Android ; * compilation de l’application avec le compilateur java ; * conversion de chaque fichier “class” au format “dex” adapté à la machine virtuelle Android ; * packaging des fichiers “dex” dans un Android PacKage (APK) ; * éventuellement la signature pour la mise en production. En résumé : java -> class -> dex -> apk (-> apk signé) Question 9) Expliquez, au niveau système, comment est gérée une application Android vis- à-vis du système Dalvik et de l’environnement Linux. (1 point) Réponse : Ici, il était essentiellement nécessaire de dire que chaque application Android se retrouve isolée des autres. Chaque instance d’application s’exécute dans un processus avec sa propre instance de machine virtuelle de Dalvik. Bref un processus et une machine virtuelle Dalvik par application. Question 10) Comment sont gérées les activités lorsqu'on utilise Context.startActivity() et le bouton retour ? (1 point) Réponse : 4/13
  5. 5. Université de Limoges Faculté des Sciences et Techniques Master 1 Informatique Semestre 7 – première session 2011 Cette question vous demandait d’expliciter la slide 28 du cours sur Android. Le fait de lancer une nouvelle activité avec Context.startActivity() va la mettre dans la stack des activités Android ; le fait d’appuyer sur le bouton retour va détruire l’activité la plus récente de la stack des activités et repasser à l’activité précédente. B - IHM Question 11) À partir de l’image suivante, écrire le fichier “layout.xml” correspondant (et bien évidemment tous les autres fichiers dont vous aurez besoin en précisant leurs chemins d'accès). Écrivez également l’activité permettant d’utiliser et d’afficher ce layout. (5 points) Veillez également à respecter les consignes. Réponse : Le contenu du fichier layout.xml est donné à la fin de ce document. L’activité permettant d’utiliser ce layout peut tout simplement être : public class MarouActivity extends Activity { /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.oncreate(savedInstanceState); setContentView(R.layout.main); } } 5/13
  6. 6. Université de Limoges Faculté des Sciences et Techniques Master 1 Informatique Semestre 7 – première session 2011 Consignes : ● L’affichage peut être plus grand que la taille de l’écran. À vous de trouver une solution afin de permettre à l’utilisateur de voir tout le contenu ; ● Utilisez le système d’internationalisation d’Android pour stocker les chaînes de caractères (nous ne vous demandons pas de gérer le français) ; ● Images : ○ la première image a pour chemin d’accès : res/drawable/chatmignon.jpg ○ la seconde image : res/drawable/homeworkcat.jpg ● Le cadre à côté de la première image est en rouge, vous pouvez utiliser le code hexadécimal #aa0000 ; ● Dans le fichier res/values/strings.xml, vous avez accès à cette définition : 6/13
  7. 7. Université de Limoges Faculté des Sciences et Techniques Master 1 Informatique Semestre 7 – première session 2011 <? xml version="1.0" encoding="utf-8"?> <resources> <string name="app_name">Java Avance Examen</string> <string name="lorem">Accedebant enim eius asperitati, ubi inminuta vel laesa amplitudo imperii dicebatur, et iracundae suspicionum quantitati proximorum cruentae blanditiae exaggerantium incidentia et dolere inpendio simulantium, si principis periclitetur vita, a cuius salute velut filo pendere statum orbis terrarum fictis vocibus exclamabant.</string> </resources> res/values/strings.xml C - Android pratique Question 12) Le programme Android suivant comporte 6 erreurs (bien qu'il compile), corrigez les. (4 points) Réponses : 1-2 Il manque l’appel à super.onCreate(savedInstanceState) dans les deux activités (deux erreurs) ; 3 Il manque l’appel à setContentView(R.layout.main) dans la première activité afin de définir l’interface ; 4 Il manque l’appel à setContentView(R.layout.kitteh) dans la seconde activité afin de définir l’interface ; 5 Il manque l’accès aux permissions réseau dans le fichier AndroidManifest.xml : <uses-permission android:name=”android.permission.INTERNET”/> 6 La déclaration de l’activité KittehActivity dans le fichier AndroidManifest.xml. package fr.unilim.hellocat; import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.view.View; import android.widget.Button; public class HellocatActivity extends Activity { /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { final Button button = (Button) findViewById(R.id.seeKitteh); button.setOnClickListener(new View.OnClickListener() { public void onClick(View v) { startActivity(new Intent(v.getContext(), KittehActivity.class)); } }); } } HellocatActivity.java 7/13
  8. 8. Université de Limoges Faculté des Sciences et Techniques Master 1 Informatique Semestre 7 – première session 2011 package fr.unilim.hellocat; import android.app.Activity; import android.os.Bundle; import android.webkit.WebView; public class KittehActivity extends Activity { WebView wv; @Override public void onCreate(Bundle savedInstanceState) { wv = (WebView) findViewById(R.id.kittehWebView); wv.getSettings().setJavaScriptEnabled(true); wv.loadUrl("http://bit.ly/oKwSY5"); } } KittehActivity.java <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent"> <WebView android:layout_width="match_parent" android:layout_height="match_parent" android:id="@+id/kittehWebView"></WebView> </LinearLayout> kitteh.xml <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent"> <Button android:layout_height="wrap_content" android:id="@+id/seeKitteh" android:layout_width="wrap_content" android:text="Button"></Button> </LinearLayout> main.xml <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="fr.unilim.hellocat" 8/13
  9. 9. Université de Limoges Faculté des Sciences et Techniques Master 1 Informatique Semestre 7 – première session 2011 android:versionCode="1" android:versionName="1.0"> <uses-sdk android:minSdkVersion="10" /> <application android:icon="@drawable/icon" android:label="@string/app_name"> <activity android:name=".HellocatActivity" android:label="@string/app_name"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application> </manifest> AndroidManifest.xml Annexe Attributs XML relatifs au RelativeLayout Attribute Name Related Method Description android:layout_above Positions the bottom edge of this view above the given anchor view ID. android:layout_alignBaseline Positions the baseline of this view on the baseline of the given anchor view ID. android:layout_alignBottom Makes the bottom edge of this view match the bottom edge of the given anchor view ID. android:layout_alignLeft Makes the left edge of this view match the left edge of the given anchor view ID. android:layout_alignParentBottom If true, makes the bottom edge of this view match the bottom edge of the parent. android:layout_alignParentLeft If true, makes the left edge of this view match the left edge of the parent. android:layout_alignParentRight If true, makes the right edge of this view match the right edge of the parent. android:layout_alignParentTop If true, makes the top edge of this view match the top edge of the parent. android:layout_alignRight Makes the right edge of this view match the right edge of the given anchor view ID. android:layout_alignTop Makes the top edge of this view match the top edge of the given anchor view ID. 9/13
  10. 10. Université de Limoges Faculté des Sciences et Techniques Master 1 Informatique Semestre 7 – première session 2011 android:layout_below Positions the top edge of this view below the given anchor view ID. android:layout_centerHorizontal If true, centers this child horizontally within its parent. android:layout_centerInParent If true, centers this child horizontally and vertically within its parent. android:layout_centerVertical If true, centers this child vertically within its parent. android:layout_toLeftOf Positions the right edge of this view to the left of the given anchor view ID. android:layout_toRightOf Positions the left edge of this view to the right of the given anchor view ID. V - Question bonus (0 point) COBAGBTDBCOIAGT ! Question 11 : layout.xml <?xml version="1.0" encoding="utf-8"?> <ScrollView xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="wrap_content" > <LinearLayout android:layout_width="fill_parent" android:layout_height="fill_parent" 10/13
  11. 11. Université de Limoges Faculté des Sciences et Techniques Master 1 Informatique Semestre 7 – première session 2011 android:orientation="vertical" > <RelativeLayout android:layout_width="fill_parent" android:layout_height="wrap_content" > <TextView android:id="@+id/formlabel" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="Authentication form" /> <TextView android:id="@+id/login" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignRight="@+id/password" android:layout_below="@+id/formlabel" android:text="Login:" android:textSize="25px" /> <EditText android:id="@+id/loginentry" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_alignBottom="@+id/login" android:layout_alignTop="@+id/login" android:layout_toRightOf="@+id/login" android:paddingBottom="0px" android:paddingTop="0px" android:text="Type your login here" /> <TextView android:id="@+id/password" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_below="@+id/login" android:text="Password:" android:textSize="25px" /> <EditText android:id="@+id/passwordentry" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_alignBottom="@+id/password" 11/13
  12. 12. Université de Limoges Faculté des Sciences et Techniques Master 1 Informatique Semestre 7 – première session 2011 android:layout_alignLeft="@+id/loginentry" android:layout_alignTop="@+id/password" android:inputType="textPassword" android:paddingBottom="0px" android:paddingTop="0px" android:text="Type your password here" > </EditText> <Button android:id="@+id/okbutton" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentRight="true" android:layout_below="@+id/passwordentry" android:layout_marginLeft="10px" android:text="OK" /> <Button android:id="@+id/cancelbutton" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignTop="@+id/okbutton" android:layout_marginLeft="10px" android:layout_toLeftOf="@+id/okbutton" android:text="Cancel" /> <Button android:id="@+id/helpbutton" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignTop="@+id/cancelbutton" android:layout_marginLeft="10px" android:layout_toLeftOf="@+id/cancelbutton" android:text="Help" /> </RelativeLayout> <LinearLayout android:layout_width="fill_parent" android:layout_height="wrap_content" android:orientation="horizontal" > <ImageView android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/chatmignon" /> 12/13
  13. 13. Université de Limoges Faculté des Sciences et Techniques Master 1 Informatique Semestre 7 – première session 2011 <TextView android:layout_width="fill_parent" android:layout_height="fill_parent" android:background="#aa0000" android:gravity="center_horizontal" android:text="Please... Give me your password..." /> </LinearLayout> <ImageView android:layout_width="fill_parent" android:layout_height="360px" android:scaleType="fitStart" android:src="@drawable/homeworkcat" /> <TextView android:layout_width="fill_parent" android:layout_height="fill_parent" android:text="@string/lorem"/>" </LinearLayout> </ScrollView> 13/13

×