Activité : Gérons nos livres, responsabilité unique (rev. 1)

Consigne

Le but de cette activité est de vous familiariser avec le principe de responsabilité unique qui est l’un des principes essentiels de la programmation orientée objet. Afin de respecter ce principe, vous allez être amené à modifier la classe Copy et à créer une nouvelle classe.

Pour ce travail on vous demande de prendre connaissance de la situation et de réaliser les tâches proposées. Si vous ne parvenez pas à terminer le travail en classe, il vous appartient de prendre sur votre temps pour l’achever.

Le code des tests unitaires doit être utilisé tel quel et ne doit pas être modifié. Le code des classes doit être conforme à la spécification fournie sous forme de tests unitaires et de diagramme UML.

Le travail est individuel. Vous pouvez communiquer, mais en respectant le code d’honneur.

Situation

Vous êtes développeur dans un projet de logiciel de gestion de bibliothèque. Après avoir modifié la classe Copy pour gérer les emprunts, vous vous rendez compte que l’implémentation de l’historique des emprunts est difficile et les solutions envisagées ne sont pas élégantes. Vous vous tournez donc vers l’architecte logiciel pour avoir son avis.

Après avoir passé votre code en revue, il vous dit que la difficulté vient du fait que la classe Copy ne respecte pas le principe de responsabilité unique (single responsibility principle). Il vous explique que Robert C. Martin, l’homme à l’origine de ce principe, définit une responsabilité comme étant une raison de changer. Une classe ne devrait donc avoir qu’une seule et unique raison de changer. Or, la classe Copy contient à la fois des attributs et des méthodes liés à la gestion des documents de la bibliothèque et à la gestion des emprunts. On pourrait donc avoir à modifier cette classe à cause d’un changement dans la gestion des documents ou à cause d’un changement dans la gestion des emprunts, ce qui fait au moins deux raisons. La solution consiste donc à diviser la classe Copy en autant de classes qu’elle a de responsabilités.

Avant de vous laisser à votre tâche, il vous indique encore que le principe de responsabilité unique est l’un des cinq principes essentiels de la programmation orientée objet référencés par l’acronyme SOLID.

Résultat attendu

Un projet Maven contenant les classes suivantes :

  • Book, Author, Copy, FormatCopy, LoanManager et Loan
  • BookTest, AuthorTest, CopyTest, LoanManagerTest et LoanTest

Objectifs

À la fin de ce travail, vous devez :

  1. Connaître le principe de responsabilité unique

Ressources

Logiciel :

  • maven
  • Visual Studio Code

Documents :

Mise en route

Pour commencer, vous devez télécharger le projet de cette activité depuis le dépôt git. Si vous n’avez encore jamais utilisé le gestionnaire de dépôt GitLab de l’EPAI, vous devez d’abord vous y connecter pour initialiser votre compte utilisateur. Pour cela, cliquez sur le lien ci-dessous et connectez-vous en utilisant votre nom d’utilisateur et votre mot de passe I-FR.

GitLab EPAI Fribourg

Rendez-vous ensuite dans le répertoire de vos projets, lancez la commande ci-après et lorsque le système vous le demande, saisissez votre nom et votre mot de passe I-FR.

1
git clone https://gitlab.epai-ict.ch/m226/gerons-nos-livres-responsabilite-unique.git --single-branch

Déplacez-vous dans le répertoire gerons-nos-livres-responsabilite-unique et lancer la commande code . pour ouvrir le projet dans VSC (Visual Studio Code).

À vous de jouer !

Tâche

On vous demande de modifier la classe Copy qui représente les exemplaires physiques des livres de la bibliothèque, de compléter la classe Loan qui représente les emprunts et, pour finir, de créer la classe LoanManager qui va nous permettre de gérer les emprunts conformément à la spécification ainsi qu’au diagramme de classes de la figure 1.

Chaque classe et chaque méthode doit être documentée à l’aide de commentaires javadoc.

Attention :

  • Commencez par créer les classes et les méthodes sans les implémenter de telle manière à ce qu’il n’y ai plus d’erreur de syntaxe dans les tests.
  • Implémentez ensuite la classe Loan. Pour cette classe, on vous demande d’appeler votre enseignant lorsque vous l’avez terminé afin qu’il puisse vérifier qu’elle fonctionne correctement.
  • Implémentez enfin la classe la classe LoanManager. Les méthodes de cette classe sont un peu plus compliquées à réaliser. On vous demande donc d’appeler votre enseignant pour chacune d’elle.
Fig. 1 – Diagramme de classe à réaliser
Fig. 1 – Diagramme de classes à réaliser

Demandez de l’aide en cas de besoin, mais essayez d’abord par vous-même et respectez toujours le code d’honneur !