Examen 4h sur machine


L'examen est composé de 3 exercices qui doivent être traités dans l'ordre proposé. Il faut au moins avoir essayé de faire l'exercice 1 (même s'il n'est pas indispensable d'avoir répondu à toutes les questions pour poursuivre) avant de passer à l'exercice 2, etc


Rappel : vous devez configurer le workspace d'Eclipse (File > Switch WorkSpace) pour qu'il corresponde au répertoire EXAM présent dans le home de votre session de TP noté.

Vérifiez que tous vos fichiers sont bien dans le répertoire EXAM. Tout ce qui n'est pas dans ce répertoire est perdu quand vous vous déconnectez (ou en cas de panne).

Vous avez le droit de consulter les transparents du cours.

Site web de location de films et de jeux vidéos

Le but de ce sujet est de réaliser l'architecture d'un site d'achat de films et de jeux vidéos (version simpliste et naïve).

Le sujet est composé comme suit:

D'un point de vue fonctionnel, le code demandé est très simple. Vous allez être évalué sur vos choix dans l'architecture du code: organisation des classes, choix des visibilités pour les champs et les méthodes, absences de duplication de code, respect des principes SOLID, choix des design-patterns...

Représentations des films et des jeux vidéos

Toutes vos classes pour cet exercice doivent être dans le package fr.uge.poo.amanet.items.

Le site AmaNet propose à la vente des DVD, Blu-Ray et des jeux vidéos.

Tous ces articles seront manipulés par une interface Item qui contriendra (au moins) les deux méthodes suivantes:

DVD : Avatar (2009)
Audio : FRENCH, ENGLISH
Zone : 1

BLU-RAY : Avatar (2009)
Audio : FRENCH, ENGLISH, SPANISH
3D : true

GAME : Doom 2020 (2020)
Plateform : PC

Ecrivez une hiérarchie de classes permettant de représenter les différents objets vendus. Vous serez en particulier évalué sur l'absence de duplication de code.

Chez AmaNet, on fait dans la quantité pas dans la qualité. Le prix d'un article est calculé comme suit:

Modifier votre hiérarchie pour avoir accès au prix des articles.

Sur chaque article, on veut pouvoir définir des restrictions sur les clients qui peuvent l'acheter.

Par exemple, on veut pouvoir exprimer que le jeu Doom ne peut être acheté que par des clients de plus de 18 ans. Ou encore, on veut pouvoir dire que le film Avatar ne peut pas être acheté par les clients résidant en France.

Toutes contraintes sur les clients sont fixées à la création de l'Item. Les Item offriront une méthode boolean isAllowedForClient(Client client).

Faites évoluer vos classes pour pouvoir exprimer ces contraintes et toutes celles du même genre. Dans la classe Application, codez les deux exemples ci-dessus. En commentaire dans votre classe donnez le nom du design-pattern implémenté.

Dans la classe Application, on veut maintenant écrire 2 méthodes:

On prévoit qu'il y aura de nombreuses fonctions du même genre.

Faites évoluer votre code pour pouvoir réaliser ces méthodes et d'autres du même genre, tout en respectant le Open-Close principle.

Client

Sauf mention explicite du contraire, vos classes pour cet exercice doivent être dans le package fr.uge.poo.amanet.client.

Pour le site AmaNet, on stockera les informations suivantes sur un client:

Ces informations ne pourront pas être modifiées. Note: ce n'est pas très réaliste mais cela va simplifier le code que vous aurez à écrire.

Ecrire une classe Client correspondant à ces caractéristiques. Dans la suite des exercices, il sera peut-être nécessaire d'ajouter des accesseurs. Pensez bien aux principes vus en cours.

Mettez en oeuvre un design-pattern permettant de rendre plus lisible la création d'un objet Client. Donnez son nom en commentaire dans le code.

Dans le main d'une classe Application se trouvant dans le package fr.uge.poo.amanet, créez un client de votre choix et faites quelques tests.
Cette classe Application va servir à montrer que vous savez utiliser le code qui vous écrivez. C'est aussi pour vous l'occasion de tester votre code. Vous pouvez mettre du code en commentaire mais n'effacez rien (pensez au correcteur!).

On veut maintenant pouvoir envoyer des messages aux clients. Pour cela, on dispose de la librairie Connect qui permet d'envoyer des messages par mail, Twitter ou SMS. Vous pouvez télécharger la libraire ici.

Les contraintes sont les suivantes:

Mettez en place les messages pour les clients et décrivez en commentaire le design-pattern que vous avez utilisé. Pour les emails, le sujet du mail sera Nofication from AmaNet.

Avez vous géré le cas où l'on essaie de choisir la notification par SMS pour un client n'ayant pas de numéro de téléphone enregistré?

Dans le main de la classe Application, donnez un exemple d'utilisation des notifications et du changement du type de notifications (SMS, Email,...).

Gestion de l'inventaire

Sauf mention explicite du contraire, vos classes pour cet exercice doivent être dans le package fr.uge.poo.amanet.inventory.

Dans cet exercice, on modélise l'inventaire du site AmaNet. La classe Inventory maintient pour chaque article en stock, le nombre de copies de cet article.

La classe Inventory fournira (au moins) les méthodes suivantes:

Ecrivez la classe Inventory.

En plus de la gestion de l'inventaire, on aimerait:

En commentaire dans votre code, expliquez quel(s) principe(s) SOLID ne serai(en)t pas respecté(s) si on ajoutait ces traitements dans la méthode retrieve.

Implémentez une architecture logicielle qui permette d'implémenter ces traitements tout en respectant les principes SOLID. Bien entendu, vous devez aussi coder les 4 traitements demandés.

Dans la main de la classe Application, codez un exemple d'Inventory et testez les nouveaux traitements.