Encapsulation
Qu'est-ce qu'elle protège exactement : les données, ou la liberté de les changer ?
Coding Week
Le coût du changement · A1, Coding Week 1A
Hermann Agossou
École Centrale Casablanca • 2026 • Casablanca, Maroc
Doctorant, UTER MID@S, ECC / UH2C
Coding Week
1A · Coding Week · A1 Programmation structurée · H. Agossou
Section
Coding Week
1A · Coding Week · A1 Programmation structurée · H. Agossou
Le critère
Trois questions avant de commencer
Qu'est-ce qu'elle protège exactement : les données, ou la liberté de les changer ?
Une classe fille peut-elle toujours remplacer sa classe mère ?
Pourquoi la rendre privée ? Contre qui la protège-t-on ?
Ces trois réponses fixent le niveau du module suivant. Celles qui sont fausses aujourd'hui reviendront en A2, et c'est voulu.
Coding Week
1A · Coding Week · A1 Programmation structurée · H. Agossou
Le critère
Elles font exactement la même chose
Left
`flat_report.py` formate dans `render_invoice`.
Right
`hidden_report.py` nomme les décisions.
Levez la main : laquelle préférez-vous maintenir ? Gardez votre raison en tête.
Coding Week
1A · Coding Week · A1 Programmation structurée · H. Agossou
Le critère
Nommer les choses avant de les mesurer
Tout ce qui rend un système difficile à comprendre ou à modifier.
Du code qui ne peut pas être compris ou changé isolément.
Une information nécessaire qui n'est pas visible là où on en a besoin.
Aucun de ces mots n'est un défaut en soi. Ce sont des grandeurs, pas des jugements.
Coding Week
1A · Coding Week · A1 Programmation structurée · H. Agossou
Le critère
Une définition opérationnelle, pas une opinion
La complexité est tout ce qui, dans la structure d'un système, le rend difficile à comprendre ou à modifier. Elle se juge au coût du changement, pas au nombre de lignes.
Voir: [2] Ousterhout (2018)
Conséquence immédiate : « meilleur » devient une question à laquelle on peut répondre. On choisit un changement, et on compte ce qu'il touche.
Coding Week
1A · Coding Week · A1 Programmation structurée · H. Agossou
Le critère
Amplification, charge cognitive, inconnues inconnues
Aucun changement isolé ne crée la complexité. C'est pour cela qu'on ne la corrige pas en une fois, et qu'il faut un critère appliqué en continu.
Coding Week
1A · Coding Week · A1 Programmation structurée · H. Agossou
Le critère
Exemple entièrement traité
Left
Deux expressions possèdent la décision de formatage.
Right
Une seule frontière possède la décision de formatage.
Appliquez le changement dans les deux fichiers, exécutez `verify.py` après avoir adapté l'attendu, puis comparez le diff à la prédiction.
Coding Week
1A · Coding Week · A1 Programmation structurée · H. Agossou
Le critère
La moitié du raisonnement est donnée
Changement demandé : séparer le code et le montant par une espace insécable.
| Endroit à modifier | Version A | Version B |
|---|---|---|
| Lignes de facture | oui | via `format_money` |
| Affichage du total | ? | ? |
| Interface publique | ? | ? |
| Total des endroits | ? | ? |
Quelle version choisiriez-vous, et pour quelle raison exprimée en coût de changement ?
Coding Week
1A · Coding Week · A1 Programmation structurée · H. Agossou
Section
Coding Week
1A · Coding Week · A1 Programmation structurée · H. Agossou
Le découpage
Le critère de découpage, énoncé en 1972
Découper un système autour des décisions de conception que chaque module cache aux autres, et non autour des étapes du traitement. Une décision qui change reste alors confinée dans un seul module.
Voir: [1] Parnas (1972)
Un article sur un critère, pas sur une technologie. C'est pour cela qu'il a survécu à tous ses outils.
Coding Week
1A · Coding Week · A1 Programmation structurée · H. Agossou
Le découpage
Le découpage par flux est le piège courant
Left
Une fonction par étape du traitement.
Right
Un module par décision cachée.
Les deux découpages ont le même nombre de fonctions. Un seul confine le changement.
Coding Week
1A · Coding Week · A1 Programmation structurée · H. Agossou
Le découpage
Ce que l'interface coûte par rapport à ce qu'elle cache
Left
Interface étroite, implémentation substantielle.
Right
Interface presque aussi complexe que ce qu'elle cache.
La taille ne décide de rien. Ce qui compte est le rapport entre ce que l'interface exige et ce qu'elle épargne.
Coding Week
1A · Coding Week · A1 Programmation structurée · H. Agossou
Le découpage
Et nommer ce que chaque partie cache
La même fonction connaît le format CSV, la colonne à sommer et la présentation monétaire en EUR.
01
Cache : comment les données sont stockées et lues.
02
Cache : ce que « total » signifie ici.
03
Cache : devise, format d'affichage, langue.
Changez une décision cachée, par exemple le format, et confirmez que la modification reste dans une seule partie. Si elle se répand, le découpage était par flux.
Coding Week
1A · Coding Week · A1 Programmation structurée · H. Agossou
Le découpage
Sans aide, puis défense à l'oral
Découpez la fonction distribuée en autant de parties que nécessaire, puis écrivez pour chacune la décision de conception qu'elle cache.
5 minutes. Deux groupes passent au tableau.
Coding Week
1A · Coding Week · A1 Programmation structurée · H. Agossou
Le découpage
Signature propre, appelants qui savent tout
Left
`store.load()` renvoie des lignes.
Right
L'appelant teste encore `store.kind == csv`.
Il se mesure à ce que l'appelant est obligé de savoir. Ici, tout appelant doit connaître le format. La décision n'a jamais été cachée, elle a seulement été déplacée.
On y revient en A2 : un contrat rend explicite ce que l'appelant a le droit de supposer.
Coding Week
1A · Coding Week · A1 Programmation structurée · H. Agossou
Le découpage
Un critère, pas une liste de règles
Les fonctions, les modules, les imports. Les outils changeront ; le critère qui vous a servi à les juger, non.
Coding Week
1A · Coding Week · A1 Programmation structurée · H. Agossou
Appendix