Plus facile à lire avec un fond crème, une teinte, plus de contraste ou un texte plus grand ? Choisissez vos couleurs et votre texte, une fois pour toutes les pages.

Leçon gratuite

Couplage et cohésion en conception logicielle

Après cette leçon: Je peux juger une conception avec le couplage et la cohésion.

Leçon de 60 min9 commandesLab PostgreSQL et PostgREST : une base de données et une API REST dans le navigateur

Pourquoi un petit changement casse tout

Le couplage mesure à quel point les parties d'un logiciel dépendent les unes des autres. La cohésion mesure à quel point ce qu'une partie contient va ensemble. Un bon logiciel a peu de couplage et beaucoup de cohésion.

Une salle change de nom, et six écrans cessent de marcher. Voyons pourquoi, et comment le voir avant que cela arrive.

À la fin de cette leçon

Remarque

Je peux juger une conception avec le couplage et la cohésion.

Mots clés

MotCe que ça veut direExemple
Moduleune partie du logiciel qui a un rôle à elleRéservations
Dépendanceun lien : un module en utilise un autre
Couplagele degré de dépendance entre des modules
Cohésionle degré auquel le contenu d'un module va ensemble
Interfacela partie d'un module que les autres ont le droit d'utiliser
Raison de changerun besoin qui oblige à modifier le module

Les cellules que les étudiants remplissent restent vides dans cet aperçu.

Un module est une partie du logiciel

On découpe un logiciel en modules : l'écran, les réservations, les comptes, les rapports. Chacun a un rôle. Quand un module en utilise un autre, on dit qu'il en dépend.

Chaque dépendance est un lien. Plus il y a de liens, plus un changement peut se propager.

Exemple : compter les liens de chaque module

ModuleIl utiliseIl est utilisé par
ÉcranRéservations, UtilisateursPersonne
RéservationsBaseÉcran, Rapports
UtilisateursBaseÉcran
RapportsRéservations, BasePersonne
BasePersonneRéservations, Utilisateurs, Rapports

Les cellules que les étudiants remplissent restent vides dans cet aperçu.

Un module cohérent change pour une raison

Un module est cohérent quand tout ce qu'il contient sert le même rôle. Une bonne question : combien de raisons y a-t-il de le modifier ?

Si on le change pour un tarif, pour un courriel et pour un fichier, il fait trop de choses. Il vaut mieux le couper en trois.

Exemple : juger la cohésion

ModuleContenuRaisons de changerCohésion
RéservationsCréer, annuler, listerUne règle de réservationForte
DiversCourriels, tarifs, fichiersTrois besoins sans rapportFaible

Les cellules que les étudiants remplissent restent vides dans cet aperçu.

Une erreur fréquente

Attention

Beaucoup pensent qu'un bon logiciel n'a aucune dépendance. C'est impossible : les modules doivent se parler. Le but est d'avoir peu de liens, simples, et qui passent par une interface connue.

Le laboratoire rend le couplage visible

L'API du laboratoire montre les noms de colonnes tels quels. Un client qui demande la colonne creneau dépend donc de ce nom.

Vous allez demander la colonne, la renommer dans la base, puis redemander. Préparez la table avec les cinq premiers Runs.

Donner le mot de passe à psql

Commande
export PGPASSWORD=shop

Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.

Repartir de zéro

Commande
psql -h db -U shop -c "drop table if exists reservations"

Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.

Créer la table reservations

Commande
psql -h db -U shop -c "create table reservations (id serial primary key, salle text not null, demandeur text not null, creneau text not null, statut text not null default 'demandee')"

Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.

Ajouter trois réservations

Commande
psql -h db -U shop -c "insert into reservations (salle, demandeur, creneau) values ('B102', 'Claire Dupuis', 'lundi 10h'), ('A201', 'Marc Lefebvre', 'lundi 10h'), ('B102', 'Sophie Martin', 'mardi 14h')"

Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.

Dire à l'API de relire la base

Commande
psql -h db -U shop -c "notify pgrst, 'reload schema'"

Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.

Demander la colonne creneau

Commande
curl -s -o /dev/null -w "%{http_code}\n" "http://api:3000/reservations?select=creneau&limit=1"

Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.

Renommer la colonne en horaire

Commande
psql -h db -U shop -c "alter table reservations rename column creneau to horaire"

Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.

Dire à l'API de relire la base

Commande
psql -h db -U shop -c "notify pgrst, 'reload schema'"

Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.

Redemander la même colonne

Commande
curl -s -o /dev/null -w "%{http_code}\n" "http://api:3000/reservations?select=creneau&limit=1"

Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.

Un changement interne a cassé le client

La base a changé un nom, et la demande du client a échoué. Le client et la base étaient fortement couplés : le client connaissait un détail interne.

Pour réduire ce couplage, on place une interface stable entre eux. Elle garde l'ancien nom pour le client, même quand la base change.

À propos de ce labo et de sa source: Lab PostgreSQL et PostgREST : une base de données et une API REST dans le navigateur

Vous enseignez à une classe ? Proposez ce module à vos étudiants avec un guide de l'enseignant, des devoirs corrigés et un laboratoire pour chaque étudiant.