Aller au contenu

Modularité

Lorsqu'on doit développer un « gros » projet informatique, il faut séparer proprement les différentes parties de ce projet :

  • Structure(s) de Donnée(s) ;
  • Interface graphique ;
  • Base de Données ;
  • Autre...
  • Programme principal

Chacune des parties autre que le programme principal constitue un fichier indépendant appelé un module.

Dans la suite du cours, on considère que le module créé contient une structure de données (c'est-à-dire une ou plusieurs classes d'objets).

Interface et encapsulation

L'encapsulation est le principe interdisant l'accés direct à la structure de données. Le programme principal utilise cette structure à travers une interface, c'est-à-dire en utilisant les méthodes permettant de manipuler et d'accéder à la structure de données.

Il n'est alors pas nécessaire de savoir comment cet objet a été programmé.

encapsulation

Important

L'interface d'un module doit être explicitée dans la documentation de ce module :

  • elle liste les méthodes utilisables ;
  • elle indique comment et pour quoi les utiliser.

Cette liste est souvent accompagnée d'exemples.

Exemple

Une structure de données implémente des dates au format jj/mm/aaaa.

Le tableau ci-dessous propose un exemple d'interface, c'est-à-dire liste les méthodes que pourra utiliser le programme principal afin de manipuler des objets de la classe Date.

Méthode/Opérateur Description
d = Date(j, m, a) Initialisation sous forme de date jj/mm/aaaa.
Valeur 01/01/0000 par défaut.
== ou < Comparaison d'objets de la classe Date.
d.getJour()
d.getMois()
d.getAnnee()
Renvoie respectivement la valeur du jour, du mois et de l'année de la date d considérée.
d.setJour(entier)
d.setMois(entier)
d.setAnnee(entier)
Modifie la valeur du jour, du mois ou de l'année de la date d considérée.

Remarque

Une méthode de normalisation de la classe Date ne serait donc (en principe) pas accessible d'après cette interface. On fait ainsi la distinction entre méthode privée (comment a été programmée la classe) et méthode publique (comment utiliser cette classe depuis l'extérieur).

Métaphore
  • Une interface, c'est le bouton :
    « régler la température de la maison sur 20°C ».

  • L'implémentation, c'est le climatiseur en lui-même.
    On peut changer de climatiseur, le bouton reste le même, avec la même consigne : obtenir 20°C (et le climatiseur en question doit le faire !).

Test du module

Le module a pour but d'être appelé par un autre programme. Dans le fichier contenant le module, il est (fortement) recommandé d'ajouter une partie testant toutes les méthodes de l'interface.

Pour que ces tests se déclenchent uniquement lorsque le module est exécuté (pas lorsqu'il est importé), il faudra les placer dans l'instruction conditionnelle :

1
if __name__ == "__main__":