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 |