Activité Mise en route

Objectifs

À la fin de ce travail, vous devez :

  1. Connaître la notion de type enregistrement.
  2. Connaitre la notion de type référence en Java
  3. Être capable de réaliser un type enregistrement en Java.
  4. Être capable d’expliquer ce que fait l’opérateur new.
  5. Être capable de créer des objets à l’aide de l’opérateur new.
  6. Connaître le type ArrayList<T> et savoir qu’il permet de réaliser une liste d’objet de taille variable.
  7. Être capable d’ajouter un élément à une liste, d’accéder à un élément par sa position (indice) et de demander la taille d’une liste.
  8. Être capable d’itérer les éléments d’une liste à l’aide d’une boucle for et à l’aide d’une boucle «for each».

Consigne

Le but de cet activité est de se remettre au Java après la pause estivale.

Dans un premier temps, nous vous proposons de faire ou refaire la dernière activité module 404 afin de réactiver vos connaissances.

Dans un second temps, vous êtes invité à prendre connaissance de la situation et à réaliser les tâches décrites ci-après. Si vous ne parvenez pas à terminer le travail en classe, nous vous conseillons de le terminer à la maison.

Sauf instruction contraire, le code que vous recevez et en particulier les tests unitaires doit être utilisé tel quel et ne doit pas être modifié.

Le travail est individuel. Si vous rencontrez des difficultés que vous ne parvenez pas à surmonter seul, vous pouvez communiquer avec vos camarades en respectant le code d’honneur, ou demander de l’aide à votre enseignant. En dehors des heures de cours, il est également possible de poser des questions par courriel ou à l’aide de la messagerie instantanée de Teams.

Lorsque vous avez terminé l’activité, assurez-vous d’avoir atteint tous les objectifs.

Résultat attendu

Un projet Maven qui réalise les fonctionnalités demandées.

Ressources

Logiciel :

  • Maven
  • Visual Studio Code

Documents :

Situation

Vous venez d’être intégré à une équipe chargée du développement d’un logiciel de gestion de bibliothèque. On vous confie la tâche d’améliorer un programme qui affiche le catalogue des livres.

Mise en route

Pour commencer, vous devez obtenir le projet Maven de cette activité. Lancez la machine virtuelle de développement avec Vagrant. Lancez Visual Studio Code, connectez-vous à la machine virtuelle et ouvez la fenêtre de terminal intégré.

Rendez-vous dans le répertoire de projets (~/projects) et lancez la commande suivante :

1
git clone https://gitlab.epai-ict.ch/m226/mise-en-route.git --single-branch

Déplacez-vous dans le répertoire mise-en-route et lancer la commande code -r . pour ouvrir le projet dans la fenêtre courante.

Toujours, dans la fenêtre de terminal intégré lancez les commandes suivantes pour créer la base de données SQL et charger des données.

1
2
3
mysql -u root -pepai123 -e 'drop database book_catalog;' 2> /dev/null
mysql -u root -pepai123 < data/book-catalog.sql 
mysql -u root -pepai123 < data/data-dump.sql 

Vous pouvez maintenant exécuter le programme pour vous assurer qu’il fonctionne sans erreur.

À vous de jouer !

Tâches

Votre première tâche est reprendre les classes Book et BookOperations que vous avez réalisé précédemment, ainsi que les tests correspondants (BookTest et BookOperationTests) et de les ajouter au projet. Assurez-vous d’adapter le nom du package pour qu’il corresponde à la nouvelle structure de répertoire et que les tests s’exécutent tous avec succès.

Ajoutez ensuite à la classe Book, un deuxième constructeur qui prend un paramètre pour chaque variable membre. Ce constructeur doit avoir la signature suivante :

1
2
3
4
   public Book(
       long id, String title, int numberOfPages, 
       String year, String publisher, String isbn, 
       String authorFirstname, String authorLastname)

Votre seconde tâche consiste à modifier le programme de telle sorte que le code de la procédure main soit identique au modèle ci-après.

1
2
3
4
    public static void main(String[] args) {
        ArrayList<Book> books = loadBooks();
        printBookCatalog(books);
    }

Vous pouvez utiliser le code ci-après pour vous aider à réaliser la méthode loadBook. Attention, la méthode loadBook ne doit rien afficher dans la sortie standard.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
    public static ArrayList<Book> loadBooks() {
        
        // TODO : déclarer et créer une nouvelle liste de livre (ArrayList<Book>) à
        // l'aide de l'opérateur new.

        String selectAuthorQuery = "SELECT * FROM simple_book;";

        try {
            Connection connection = DriverManager.getConnection(
                App.DB_URL, 
                App.DB_USER,
                App.DB_PASSWORD);
    
            Statement statement = connection.createStatement();
            ResultSet recordSet = statement.executeQuery(selectAuthorQuery);
        
            while (recordSet.next()) {

                // TODO : REMPLACER l'appel de la méthode printBook par la création d'un
                // nouvel objet de type Book et l'ajout de ce nouvel objet à la liste qui a été
                // crée plus haut (utiliser le nouveau constructeur de Book).
                
                printBook(
                        recordSet.getLong("id"), 
                        recordSet.getString("title"), 
                        recordSet.getInt("number_of_pages"),
                        recordSet.getString("publication_year"),
                        recordSet.getString("publisher_name"),
                        recordSet.getString("isbn"),
                        recordSet.getString("author_firstname"),
                        recordSet.getString("author_lastname"));
            }

        } catch (SQLException ex) {
            // Intercepte une éventuelle exception SQL et 
            // la transforme en runtime exception.
            throw new RuntimeException(ex);
        }

        // TODO : renvoie la liste remplie.
        return null;
    }

La méthode printBookCatalog doit afficher dans la sortie standard la liste de livre passée en paramètre. Cette méthode doit parcourir la liste à l’aide d’une boucle et pour chaque élément de la liste appeler la méthode printBook. Modifiez la méthode printBook de manière à ce qu’elle n’ait qu’un seul paramètre de type Book. Utilisez les méthodes définies dans BookOperations pour obtenir les valeurs des variables membres des objets de type Book.

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