151 lines
6.2 KiB
Plaintext
151 lines
6.2 KiB
Plaintext
|
|
export CLASSPATH=".:/usr/share/java/junit.jar:/usr/share/java/hamcrest-core.jar:$CLASSPATH"
|
|||
|
|
|
|||
|
|
|
|||
|
|
assertThows
|
|||
|
|
assertTrue
|
|||
|
|
assertFalse
|
|||
|
|
assertEquals
|
|||
|
|
assertNotEquals
|
|||
|
|
|
|||
|
|
|
|||
|
|
Voici une réponse détaillée pour chaque question et une explication de ce qu'il faut compléter :
|
|||
|
|
|
|||
|
|
1) [3 points en tout]
|
|||
|
|
a) Quel patron de conception est à l'œuvre ici ?
|
|||
|
|
Réponse :
|
|||
|
|
Le patron de conception utilisé est l'adaptateur (Adapter Pattern). Cette classe agit comme une enveloppe autour d'une implémentation existante de Deque (comme celle dans java.util) pour qu'elle corresponde à l'interface MinimalDeque demandée.
|
|||
|
|
|
|||
|
|
b) Comment fonctionne cette classe ?
|
|||
|
|
Réponse :
|
|||
|
|
La classe SimpleDequeThatsNotCricket délègue toutes ses opérations directement à une instance interne de Deque fournie par java.util. Elle ne réimplémente pas les fonctionnalités mais agit comme une passerelle pour adapter une implémentation existante à une interface spécifique.
|
|||
|
|
|
|||
|
|
2) [-6 à 4 points en tout]
|
|||
|
|
a)
|
|||
|
|
a1) Il est possible de décider si un programme Java va s’arrêter quelle que soit son entrée.
|
|||
|
|
Réponse : F (C'est le problème de l'arrêt, qui est indécidable).
|
|||
|
|
|
|||
|
|
a2) Il est possible de décider si un programme C va s’arrêter quelle que soit son entrée.
|
|||
|
|
Réponse : F (Même raison que pour Java).
|
|||
|
|
|
|||
|
|
a3) Il est possible de décider si un programme Python ne va pas s’arrêter pour certaines entrées.
|
|||
|
|
Réponse : F (Le problème de l'arrêt est indécidable pour tous les langages Turing-complets).
|
|||
|
|
|
|||
|
|
b)
|
|||
|
|
b1) Il est possible de décrire les propriétés souhaitées d'un programme en utilisant des langages de spécifications inspirés de la logique du premier ordre.
|
|||
|
|
Réponse : V
|
|||
|
|
|
|||
|
|
b2) Il existe des logiciels qui, étant donné une spécification et un programme, peuvent décider à coup sûr que le programme satisfait la spécification ou pas.
|
|||
|
|
Réponse : F (C'est une généralisation trop forte, en raison des limitations de la vérification formelle).
|
|||
|
|
|
|||
|
|
b3) Il existe des logiciels qui, étant donné une spécification et un programme, peuvent décider si le programme satisfait la spécification ou pas en demandant à un logiciel d'IA générative (comme ChatGPT) pour générer une preuve.
|
|||
|
|
Réponse : F (Bien que l'IA puisse assister, elle ne garantit pas une vérification formelle).
|
|||
|
|
|
|||
|
|
3) [1 point en tout]
|
|||
|
|
a) Commande pour lancer les tests si junit.jar et hamcrest-core.jar sont dans le même répertoire :
|
|||
|
|
bash
|
|||
|
|
Copier le code
|
|||
|
|
javac -cp .:junit.jar:hamcrest-core.jar TestSimpleDeque.java
|
|||
|
|
java -cp .:junit.jar:hamcrest-core.jar org.junit.runner.JUnitCore TestSimpleDeque
|
|||
|
|
b) Commande pour lancer les tests si les archives sont dans le CLASSPATH :
|
|||
|
|
bash
|
|||
|
|
Copier le code
|
|||
|
|
javac TestSimpleDeque.java
|
|||
|
|
java org.junit.runner.JUnitCore TestSimpleDeque
|
|||
|
|
4) [12 points en tout]
|
|||
|
|
Complétez le fichier TestSimpleDeque.java en fonction des descriptions des tests.
|
|||
|
|
Test addFirstNull:
|
|||
|
|
Ajoutez une assertion pour vérifier qu'une exception est levée. Exemple :
|
|||
|
|
java
|
|||
|
|
Copier le code
|
|||
|
|
@Test(expected = NullPointerException.class)
|
|||
|
|
public void addFirstNull() {
|
|||
|
|
MinimalDeque<String> d = new SimpleDeque<>();
|
|||
|
|
d.addFirst(null);
|
|||
|
|
}
|
|||
|
|
Test addLastNull:
|
|||
|
|
Pareil que pour addFirstNull.
|
|||
|
|
|
|||
|
|
Test addNoneIsEmpty:
|
|||
|
|
Vérifiez qu'un Deque vide est effectivement vide. Exemple :
|
|||
|
|
|
|||
|
|
java
|
|||
|
|
Copier le code
|
|||
|
|
@Test
|
|||
|
|
public void addNoneIsEmpty() {
|
|||
|
|
MinimalDeque<String> d = new SimpleDeque<>();
|
|||
|
|
assertTrue(d.isEmpty());
|
|||
|
|
}
|
|||
|
|
Test addOneIsNotEmpty:
|
|||
|
|
Vérifiez qu'un Deque avec un élément n'est pas vide.
|
|||
|
|
|
|||
|
|
Test pasDeResquilleur:
|
|||
|
|
Ajoutez des éléments devant, enlevez-les derrière, et vérifiez l'ordre.
|
|||
|
|
|
|||
|
|
Test pasDeResquilleurQuantique:
|
|||
|
|
Ajoutez des éléments derrière, enlevez-les devant, et vérifiez l'ordre.
|
|||
|
|
|
|||
|
|
Test removeFirstFromEmpty:
|
|||
|
|
Vérifiez qu'une exception est levée lorsqu'on essaie de retirer un élément d'un Deque vide.
|
|||
|
|
|
|||
|
|
Test removeLastFromEmpty:
|
|||
|
|
Même logique que removeFirstFromEmpty.
|
|||
|
|
|
|||
|
|
Test mangerLaBananeParLesDeuxBouts:
|
|||
|
|
Ajoutez un élément, enlevez-le des deux côtés, et vérifiez.
|
|||
|
|
|
|||
|
|
Test invariantTaille:
|
|||
|
|
Implémentez le test aléatoire avec ajout/suppression jusqu'à ce que le Deque soit vide.
|
|||
|
|
|
|||
|
|
|
|||
|
|
Chain of Responsibility
|
|||
|
|
|
|||
|
|
But : Permet à plusieurs objets de traiter une requête, chaque objet ayant la possibilité de la traiter ou de la transmettre.
|
|||
|
|
Exemple : Système de support technique avec plusieurs niveaux d'escalade.
|
|||
|
|
Command
|
|||
|
|
|
|||
|
|
But : Encapsule une requête en un objet pour paramétrer des actions, les annuler ou les enregistrer.
|
|||
|
|
Exemple : Boutons Annuler/Refaire dans un éditeur de texte.
|
|||
|
|
Interpreter
|
|||
|
|
|
|||
|
|
But : Fournit une représentation grammaticale d'un langage et un interprète pour traiter ses instructions.
|
|||
|
|
Exemple : Interprétation de scripts dans un moteur de jeu.
|
|||
|
|
Iterator
|
|||
|
|
|
|||
|
|
But : Fournit un moyen d'accéder séquentiellement aux éléments d'une collection sans exposer sa représentation.
|
|||
|
|
Exemple : Parcours des éléments d'une liste.
|
|||
|
|
Mediator
|
|||
|
|
|
|||
|
|
But : Définit un objet pour centraliser la communication entre plusieurs objets.
|
|||
|
|
Exemple : Gestionnaire de chat dans une application de messagerie.
|
|||
|
|
Memento
|
|||
|
|
|
|||
|
|
But : Capture l'état interne d'un objet pour pouvoir le restaurer ultérieurement.
|
|||
|
|
Exemple : Sauvegarde dans un jeu vidéo.
|
|||
|
|
Observer
|
|||
|
|
|
|||
|
|
But : Définit une relation 1-n où les objets sont notifiés automatiquement lorsqu'un autre objet change d'état.
|
|||
|
|
Exemple : Notifications pour les abonnés dans un système de messagerie.
|
|||
|
|
State
|
|||
|
|
|
|||
|
|
But : Permet à un objet de changer son comportement lorsqu'il change d'état.
|
|||
|
|
Exemple : Système de verrouillage/déverrouillage dans une application.
|
|||
|
|
Strategy
|
|||
|
|
|
|||
|
|
But : Définit une famille d'algorithmes, les encapsule, et permet de les interchanger dynamiquement.
|
|||
|
|
Exemple : Algorithmes de tri dans une application.
|
|||
|
|
Template Method
|
|||
|
|
|
|||
|
|
But : Définit la structure d'un algorithme tout en laissant certaines étapes spécifiques aux sous-classes.
|
|||
|
|
Exemple : Méthode de rendu dans un moteur de jeu.
|
|||
|
|
Visitor
|
|||
|
|
|
|||
|
|
But : Sépare un algorithme de la structure des objets sur lesquels il opère.
|
|||
|
|
Exemple : Calcul de taxes dans un système de commerce électronique.
|
|||
|
|
|
|||
|
|
java org.junit.runner.JUnitCore TestSimpleDeque
|
|||
|
|
|
|||
|
|
javac -cp .:junit.jar:hamcrest-core.jar TestSimpleDeque.java
|
|||
|
|
java -cp .:junit.jar:hamcrest-core.jar org.junit.runner.JUnitCore TestSimpleDeque
|
|||
|
|
|
|||
|
|
javac TestSimpleDeque.java
|
|||
|
|
java org.junit.runner.JUnitCore TestSimpleDeque
|