Les modules ============ Il s'agit de décomposer un grand programme en morceaux (**modules**) connectés entre eux par des **interfaces** bien définies. Ces modules doivent être aussi indépendants que possible. module ensemble de ressources liées sémantiquement interface mode d’emploi du module, avec en plus un principe de masquage des informations (partie publique, partie secrète) Exemples d'interface -------------------- :: type: son type arguments arg1 : description de l'argument 1 arg2 : description de l'argument 2 préconditions: arg1 > 10 postconditions: result < 19 raises: TypeError, AssertionError, SystemError... test: tests nominaux pour chaque cas spécifié - L'interface racine carrée :: racine: type: float -> float arguments x: float, flottant dont on veut calculer la racine pré: x >= 0 test: racine 25.0 -> 5.0 ; racine (-25) -> raises TypeError - L'interface `lendemain` Il faut définir auparavant un type spécifique appelé `date` :: lendemain: le lendemain est la date qui désigne le jour suivant de la date passée en argument type: date -> date arguments : d: date description: la date dont on veut calculer le lendemain