ƒƒƒƒƒƒƒƒƒProgrammation modulaire1Algorithmique et Programmation C++ 2IntroductionLors de la réalisation du premier projet technologique de Data-Mining, la plupart des groupesont utilisé un seul fichier source, considérant que pour un programme donné, un fichier sourcesuffisait. Mais cette technique a de nombreux inconvénients : Impossible de travailler à plusieurs sur un seul fichier source ; Réutilisabilité quasiment nulle et reste faible si on dispose des sources ; Inefficacité pour la compilation : il faut recompiler systématiquement tout le projet à chaquemodification ; Correction et maintenances difficiles.Modules et librairiesLes modulesL’objectif des modules est de structurer les sources : faire des composants logiciels autonomes indépendance des composants (dépendances explicites) séparation claire de l’interface et de l’implémentation. L’implémentation sera compilée, etl’interface servira aux développeurs pour utiliser l’implémentation dont les détails sontinutiles.Un module est un fichier d’implémentation, d’extension .cc, accompagné d’un ou plusieursfichiers d’en-tête (interface). C’est une unité de compilation, c’est-à-dire qu’il ne peut être compilépar morceaux.En C++, on confond interface et déclaration, mais ce n’est pas la même chose dans d’autreslangages. Ainsi, en C++, la déclaration d’une classe inclut les membres privés, alors que, commeleur nom l’indique, ils ne font pas partie de l’interface, puisqu’ils ne sont pas ...
Lors de la réalisation du premier projet technologique deData-Mining, la plupart des groupes ont utilisé un seul fichier source, considérant que pour un programme donné, un fichier source suffisait. Mais cette technique a de nombreux inconvénients : Impossible de travailler à plusieurs sur un seul fichier source ; si on dispose des sources ;Réutilisabilité quasiment nulle et reste faible Inefficacité pour la compilation : il faut recompiler systématiquement tout le projet à chaque modification ; Correction et maintenances difficiles.
Modules et librairies
Les modules
Lobjectif des modules est destructurerles sources : faire des composants logiciels autonomes indépendance des composants (dépendances explicites) séparation claire de linterface et de limplémentation. Limplémentation sera compilée, et linterface servira aux développeurs pour utiliser limplémentation dont les détails sont inutiles.
Unmodule est un fichier dimplémentation, dextension.cc, accompagné dun ou plusieurs fichiers den-tête (interface). Cest une unité de compilation, cest-à-dire quil ne peut être compilé par morceaux.
En C++, on confond interface et déclaration, mais ce nest pas la même chose dans dautres langages. Ainsi, en C++, la déclaration dune classe inclut les membres privés, alors que, comme leur nom lindique, ils ne font pas partie de linterface, puisquils ne sont pas accessibles de lextérieur.
On distingue : linterface (fichiers.h ou.hh ce sont uniquement les déclarations, sans code, sans) : définitions de variables globales, sans création dobjet. Un fichier den-tête est seulement composé des déclarations de types, de classes, de macros, de déclarations de variables et de fonctions externes. limplémentation (fichiers.cc) : le code, sans oublier linclusion des fichiers den tête.
Exemple : Imaginons que nous travaillons avec un composant pour la manipulation des fichiers sons pour Unix, composé de 4 modules : _ -son io : entrée-sortie _ sp : traitements acoustiques -son d - son gui : interface graphique _ -son main : programme principal _
http://www.chez.com/jeyland/iup
1/5
Dépendances :
_ son gui.hh
son gui.cc _
Les librairies
Programmation modulaire
déclarations communes
son io.hh _
son io.cc _
son dec.h _
_ son main.cc
_ son dsp.hh
_ son dsp.cc
Leslibrairies un ensemble de modules. Dans une implémentation complète de regroupent C++, on trouve un certain nombre de librairies : librairies C++ standard (libc) ; librairies mathématiques ; etc.
Il y a différents types de librairies : les archives (fichiers.a) qui sont statiques les librairies dynamiques dont le code est partagé entre les différents utilisateurs, et dont le code estréentrant, cest-à-dire exécutable simultanément par plusieurs utilisateurs.
Regroupement des modules : ar <commande> <nom librairie> <liste des modules> Création de la table des matières (optionnelle) : ranlib <nom librairie>
Les librairies sont utilisées en incluant les en-têtes des modules utilisés, ce qui provoque le linkage de la librairie.
Exemple : aCC son main.cc –lson _ Ceci provoque linclusion delibson.a
*.hh .cc *
.i *
*.s
*.o
EXECUTABLE
http://www.chez.com/jeyland/iup
Préprocesseur
Compilation
Assemblage
Edition de liens
ro
Du code source au ramme exécutable
2/5
Programmation modulaire
Quelques outils de développement dans un environnement Unix
Make
Génération de commandes à partir de fichiers de dépendances. Cet outil nest pas spécifique à la compilation Gestion des mises à jour basée sur lheure système (synchronisation des serveurs, etc.)
Forme générale dun fichier de dépendance : <cible> : <liste de fichiers> <tab> <commande>
Exemple de Makefile :
_ _ _ _ son : son io.o son gui.o son dsp.o son main.cc aCC –o son son main.cc son gui.o son dsp.o son io.o _ _ _ _
On compilesonaprès avoir vérifié les mises à jour des dépendances, et si une des dépendances possède une date de dernière modification plus récente queson, alors le fichier est recompilé, en exécutant la ligne située juste en dessous.
_ _ _ _ son io.o : son io.h son io.cc son dec.h aCC –c son io.cc _ son gui.o : son gui.h son gui.cc son dex.h _ _ _ _ _ aCC –c son gui.cc _ _ _ _ son dsp.o : son dsp.h son dsp.cc son dec.h _ aCC –c son dsp.cc
Utilisation de la commande Make : make –f <nom de fichier>
Si on tapemaketout court, cela revient a tapermake –f makefile.
Déclaration et initialisation : <id>=<valeur> Utilisation (évaluation) : $(<id>)
Exemple :
Sous Unix : CC=aCC OPTS=-or
Sous Linux : CC=g++ OPTS=-04 –m pentiumpro
Partie commune : _ _ _ _ son : son io.o son gui.o son dsp.o son main.cc _ _ _ _ $(CC) $(OPTS) son main.cc son gui.o son io.o son dsp.o
Remarque :Makelangage C et à une plate-forme de type Unix.nest pas forcément associé au On peut lutiliser par exemple pour compiler des programmes Java sur nimporte quelle type de plate-forme, notamment sous Linux.
http://www.chez.com/jeyland/iup
3/5
Le Debugger
Programmation modulaire
Sur un projet, la partie correction des bugs peut prendre du temps. Undebugger permet daccélérer grâce à ses fonctionnalités : aide à la correction du programme mode pas à pas trace du contenu des variables retour arrière : revenir en arrière dans lexécution nest pas toujours possible interruption de lexécution par des breakpoints, qui peuvent être en fonction de la valeur dune expression (pas à pas dans une passage donné dune itération, par exemple) analyse des fichiers core (segmentation fault) pour retrouver létat du programme au moment du plantage
Le Debugger sutilise en compilant avec loption–g:aCC –g –o exemple exemple.c
Le Profiler
Cest un outil qui permet danalyser les performances dun programme : temps consommé par les différentes fonctions, nombre dappels.
Principe : inclusion de traces dans le code compilé, production automatique dun rapport.
Utilisation :
aCC –G –o exemple exemple.cc g++ -p –o exemple exemple.cc
Exécution : analyse à posteriori ; dépendante des paramètres du programme (entrés par lutilisateur parfois) ; production du rapportgmon.out
Pour la mise en forme du rapport, utiliser par exempleGprof.
Exemple :
gmon.out > exemple.gprof
Importantoptimisations du code que lon fera, elles seront toujours: Quelque soient les fortement négligeables par rapport aux optimisations algorithmiques qui pourront être effectuées.
Gestionnaire de versions
Legestionnaire de versionspermet de : conserver et restituer les différentes versions des composants, maintenir lhistorique des modifications, gérer les conflits daccès distribuer les versions (avec un accès éventuellement sécurisé)
Citons par exemple des outils tels que :rCS,cVS, ouSCCS.
http://www.chez.com/jeyland/iup
4/5
Outils de configuration
Programmation modulaire
autoconfla configuration de lordinateur sur à peu près nimporte quelle: Recherche plateforme.
automakeA partir du fichier de configuration, crée un makefile:
Principe : au contexte de compilation et dexécution,adaptation génération automatique de fichiers de configuration et de makefiles.
Divers
Documentation (àde lanalyse des sources et des commentaires) partir génération : automatique enlatex, enhtml, ensgml, citonsdoc++,doxygen++sous C etidlsous C++ ; Mise en page du code:lclint(formatte les codes C++) ; Générateurs dinterfaces(comme sousVisual Basic) ; Outils de modélisation(génère le code en fonction du schéma de dépendance).