Modélisation des données [dx] Algorithmique et Programmation

publicité
Modélisation des données [dx]
Algorithmique et Programmation
Karine Zampieri, Stéphane Rivière, Béatrice Amerein-Soltner
Unisciel
algoprog
Version 19 septembre 2016
Table des matières
1 Se poser les bonnes questions
2
2 Les structures de données
4
3 Quelques conseils
5
4 Outils de documentation
4.1 Commenter un algorithme . . . . . . . . . . . . . . . . . . . . . . . . . .
4.2 Outils de documentation . . . . . . . . . . . . . . . . . . . . . . . . . . .
6
6
6
5 Conclusion
7
C++ - Introduction
Mots-Clés Modélisation Requis Axiomatique impérative Difficulté • ◦ ◦ (15 min) Ce module apporte une synthèse des notions vues tout au long de cette partie [Axiomatique impérative] et propose quelques pistes de réflexion quant au choix d’une bonne
modélisation des données qui se pose lors de la résolution de problèmes de programmation avancés.
1
Unisciel algoprog – dx00cours-texte, September 19, 2016
1
2
Se poser les bonnes questions
Retour à la case départ
Nous avons vu qu’un problème bien spécifié s’inscrit dans le schéma suivant (cf. @[L’algorithmique]) :
étant donné [les données] on demande [l’objectif]
Une fois le problème correctement posé, on peut partir à la recherche d’une méthode
de résolution, c.-à-d. d’un algorithme en ce qui concerne les problèmes à résoudre par
les moyens informatiques.
Démarches algorithmiques de base
Nous avons vu divers modèles et techniques algorithmiques adaptées à des structures particulières (les nombres, les chaı̂nes, les tableaux, les variables structurées, les fichiers...).
La plupart des exercices portaient directement sur ces structures (par ex. calculer la
somme des nombres d’un tableau, fusionner deux fichiers en un seul, extraire une sousliste à partir d’une liste donnée). Ces exercices d’entraı̂nement et de formation constituent
des démarches algorithmiques de base qui trouvent toutes une place dans des problèmes
plus complexes.
Problèmes de la vie courante
Mais la plupart des problèmes issus des situations de la vie courante auxquels se confronte
le programmeur s’expriment généralement de manière plus floue : par ex.
• Dresser la comptabilité des dépenses mensuelle d’une entreprise.
• Faire un tableau récapitulatif du résultat des élections par cantons électoraux.
• Faire une version informatique d’un jeu télévisé...
Les exemples sont infinis.
La représentation des données
C’est dans le cadre de ce genre de problème plus complexe que se pose le problème de
la représentation de données. Une fois le problème bien spécifié (par les données et
l’objectif) apparaissent naturellement les questions suivantes :
• Quelles données du problème sont réellement utiles à sa résolution ? (Il est fréquent
que l’énoncé d’un problème contienne des données superflues ou inutiles.)
• Y a-t-il des données plus importantes que d’autres ?
• Les données doivent-elles être consultées plusieurs fois ?
• Quelles données faut-il conserver en mémoire ?
• Sous quelle forme ?
• Faut-il utiliser un tableau ? Une liste ?
• Faut-il créer une structure ?
• Les données doivent-elles être classées selon un critère précis ?
• Ou la présentation brute des données suffit-elle pour solutionner le problème posé ?
Unisciel algoprog – dx00cours-texte, September 19, 2016
3
Flair et savoir-faire
Les réponses ne sont pas directes et les différents outils qui sont à notre disposition
peuvent être ou ne pas être utilisés. Il n’y a pas de règles précises pour répondre à ces
questions : c’est le flair et le savoir-faire développés patiemment par le programmeur
au fil de ses expériences et de son apprentissage qui le guideront vers la solution la
plus efficace. Parfois plusieurs solutions peuvent fonctionner sans pouvoir départager la
meilleure d’entre-elles.
Finalité
Ce type de questionnement est l’un des aspects le plus délicat et le plus difficile de
l’activité de programmation, car d’une réponse appropriée dépendra toute l’efficacité du
code développé. Un mauvais choix de représentation des données peut mener à un code
lourd et maladroit.
Nous donnons dans ce qui suit quelques indices et pistes de réflexion, qui seront consolidées par l’expérience acquise lors des travaux pratiques ainsi que par les techniques de
modélisation vues dans votre cours d’algorithmique.
Unisciel algoprog – dx00cours-texte, September 19, 2016
2
4
Les structures de données
Première année
Rappelons brièvement les différentes structures étudiées :
• Les données « simples » (entiers, réels, chaı̂nes, caractères, booléens).
• Les variables structurées qui regroupent en une seule entité une collection de
variables simples.
• Le tableau qui contient un nombre déterminé de variables de même type, accessibles via un indice ou plusieurs pour les tableaux multidimensionnels.
• La liste qui peut contenir un nombre indéfini d’éléments de même type.
• Le fichier séquentiel qui est un support physique permettant le stockage « à long
terme » de données.
Deuxième année
Le cours de deuxième année abordera :
• Les objets qui combinent en un tout une série d’attributs et des méthodes agissant
sur ces attributs.
• D’autres structures particulières : les listes chaı̂nées, les piles, les files.
• La récursivité.
Troisième année
Le cours de troisième année abordera :
• L’héritage et le polymorphisme des objets.
• Les structures arborescentes et les structures relationnelles.
• Les dictionnaires et les algorithmes.
Caractéristiques
Chaque structure de données possède ses spécificités propres quant à la façon d’accéder
aux valeurs, de les parcourir, de les modifier, d’ajouter ou de supprimer des éléments à
la collection.
Unisciel algoprog – dx00cours-texte, September 19, 2016
3
5
Quelques conseils
Voici quelques conseils en vrac qui pourraient vous être utiles.
Grands principes de base
Nous vous conseillons de relire le paragraphe @[Les algorithmes paramétrés – Qu’est-ce
qu’un algorithme de qualité]. Vous comprendrez certainement, sous un nouvel éclairage,
les termes de validité, d’extensibilité, de réutilisabilité, de lisibilité et d’efficience.
Parcours des données
En général, on évite de parcourir plusieurs fois le contenu d’un ensemble de données
(surtout s’il s’agit d’un fichier) sauf s’il n’y a pas d’autre solution.
Duplication des données
On évite de créer un duplicata sous quelque forme que ce soit d’une grande structure
de données. Par exemple, s’il faut trier les données d’un fichier, il est évident qu’il faut
stocker l’entièreté des données en mémoire pour pouvoir effectuer les comparaisons. Par
contre, c’est inutile si le problème est d’extraire le maximum de ces données ou de les
compter.
Les booléens
L’expérience montre que les étudiants négligent souvent leur utilisation. Les variables
booléennes permettent de décrire de façon élégante l’état de différentes situations, d’exprimer de façon concise des conditions...
Choix des boucles
Relisez attentivement le paragraphe @[Répétitives – Structures répétitives] sur le choix
des boucles. Dans un processus itératif, il est impératif de le quitter dès qu’une réponse
est connue, plutôt que de parcourir inutilement jusqu’au bout un ensemble de données. Le
bon suivi de ce principe intervient de façon primordiale dans l’efficacité d’un algorithme !
Unisciel algoprog – dx00cours-texte, September 19, 2016
4
4.1
6
Outils de documentation
Commenter un algorithme
Les commentaires
On n’insistera jamais assez sur la nécessité de documenter un programme en y insérant
des commentaires judicieux, clairs et suffisants. Ils sont destinés à faciliter la compréhension de votre programme par le lecteur (parfois une autre personne, mais aussi
l’auteur dans son propre texte lorsqu’il s’y replonge après une interruption).
Exemple
Un excès de commentaires peut être aussi nuisible qu’un trop-peu. Par exemple, un choix
judicieux de noms de variables peut s’avérer bien plus efficace que des commentaires
superflus. Ainsi, l’instruction suivante dépourvue de commentaires :
nouveauCapital = ancienCapital * (1 + taux / 100)
est préférable aux lignes suivantes :
// calcul du nouveau capital
c1 = c0 * (1 + t / 100)
// c1 est le nouveau capital, c0 l’ancien capital, t le taux
Mise en place
Prenez l’habitude de les mettre en place au fur et à mesure de l’avancement du travail.
4.2
Outils de documentation
Doxygen
Génération de la documentation C++, C, Java, Python, etc. multi-plateforme :
http://www.stack.nl/~dimitri/doxygen/
Manuel de Doxygen
cf. [doxygen-manuel]
Graphviz
Graph Visualization Software – Complément à doxygen afin de générer les graphes de
dépendances – Voir documentation doxygen :
http://www.graphviz.org/
Unisciel algoprog – dx00cours-texte, September 19, 2016
5
7
Conclusion
Modélisation des données
La modélisation consiste à identifier des entités logiques et les dépendantes logiques
entre ces entités, ce qui constitue le modèle. Le modèle des données n’organise pas seulement les données sous la forme de structures de données mais précise aussi ce que les
données veulent vraiment représenter. L’intérêt des structures de données est la simplification des traitements les concernant.
Remarque
La difficulté des exercices tient en partie dans le bon choix d’une représentation des
données et de la démarche algorithmique la plus adéquate à mettre en oeuvre pour agir
sur ces données en vue d’obtenir le résultat escompté. L’efficacité d’un algorithme est lié
étroitement au choix de la représentation.
Téléchargement