Files
DEV/DEV3.2/ancien_controle/controle_unit/class.txt

151 lines
6.2 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
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 sarrê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 sarrê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 sarrê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