Modularité et paquets

Découper un logiciel en modules : paquets, interface publique et détails cachés, visibilité entre paquets en Java, découpage par couche ou par fonctionnalité, dépendances sans cycle.

  • 25 cartes
  • 4 thèmes
  • Gratuit

Le programme, thème par thème

Le poids de chaque thème suit celui que lui donne l'examen.

  1. Notions
  2. Questions
  3. Ranger et relier
  4. Mises en situation

Quelques cartes du deck

  • Module : de quoi s'agit-il ?

    Voir la réponse

    Partie d'un logiciel qui regroupe des éléments liés, offre aux autres une interface restreinte et peut être comprise, testée et modifiée séparément.

    Le but est qu'un changement reste local : on modifie l'intérieur d'un module sans toucher aux autres tant que son interface ne bouge pas.

  • javac refuse de compiler ce code et affiche l'erreur ci-dessous. Quelle correction respecte la modularité ?

    ```java
    package fr.iut.tarif;
    class Remise { static double taux() { return 0.1; } }

    package fr.iut.app;
    import fr.iut.tarif.Remise;

    Main.java:2: error: Remise is not public in fr.iut.tarif;
    cannot be accessed from outside package
    `

    • Exposer ce dont Main a besoin dans une classe publique du paquet tarif, et laisser Remise cachée
    • Remplacer l'import précis par import fr.iut.tarif.* pour importer toutes les classes du paquet
    • Écrire protected devant la déclaration de la classe Remise
    • Copier la classe Remise dans le paquet de Main
    Voir la réponse

    Exposer ce dont Main a besoin dans une classe publique du paquet tarif, et laisser Remise cachée

    Une classe sans modificateur est cachée aux autres paquets, et c'est voulu. Le paquet décide de son interface publique ; import fr.iut.tarif.* ne change pas la visibilité, protected n'est pas permis sur une classe de premier niveau, et une copie duplique le code.

  • En Java, une classe déclarée sans modificateur n'est visible que dans son … ; seul le mot … l'ouvre aux autres paquets.

    Voir la réponse

    En Java, une classe déclarée sans modificateur n'est visible que dans son paquet ; seul le mot public l'ouvre aux autres paquets.

    C'est ce qui produit l'erreur Remise is not public in fr.iut.tarif; cannot be accessed from outside package quand un autre paquet l'importe.

  • Paquet : de quoi s'agit-il ?

    Voir la réponse

    Espace de noms qui range des classes liées ensemble ; en Java, il correspond à un dossier et se déclare en tête de fichier.

    package fr.iut.tarif; place la classe dans fr/iut/tarif/. Le paquet est à la fois l'unité de rangement et une frontière de visibilité.

  • Pour ajouter un champ à Client, tu modifies un contrôleur, un service, un dépôt et une vue, rangés dans quatre paquets distincts. Quelle cause, et quelle solution ?

    • Dépendance cyclique : supprimer l'un des quatre paquets et répartir ses classes entre les trois autres
    • Masquage insuffisant : rendre toutes les classes privées dans leur paquet
    • Interface trop petite : rendre publiques toutes les méthodes
    • Découpage par couche : regrouper les classes qui changent ensemble dans un paquet clients
    Voir la réponse

    Découpage par couche : regrouper les classes qui changent ensemble dans un paquet clients

    Quand un changement de métier traverse tous les paquets, le découpage suit la technique, pas le métier. Un paquet par fonctionnalité rapproche ce qui change ensemble.