7 | | en mémoire. Les attributs des différents objets constituants cette structure ont |
8 | | été présentés en cours. Nous allons maintenant compléter avec les déclarations |
9 | | des fonctions membres. |
10 | | |
11 | | |
12 | | == Fonctions membres de la class Locon == |
| 7 | en mémoire. Les attributs et les méthodes des différents objets constituants |
| 8 | cette structure ont été présentés en cours. |
| 9 | |
| 10 | Compte tenu du volume de travail demandé, ce TME sera réalisé en deux séances |
| 11 | (4 & 5). |
| 12 | |
| 13 | |
| 14 | == Programmation Modulaire == |
| 15 | |
| 16 | La structure de données est trop grosse pour pouvoir être implantée dans un |
| 17 | unique fichier. Nous allons donc la découper en plusieurs fichiers, en suivant |
| 18 | la règle '''«une paire de fichiers ({{{.h}}},{{{.cpp}}}) par classe de la |
| 19 | base. |
| 20 | |
| 21 | Ce qui donne: |
| 22 | * {{{Locon}}} : {{{Locon.h}}} et {{{Locon.cpp}}}. |
| 23 | * {{{Losig}}} : {{{Losig.h}}} et {{{Losig.cpp}}}. |
| 24 | * {{{Loins}}} : {{{Loins.h}}} et {{{Loins.cpp}}}. |
| 25 | * {{{Lofig}}} : {{{Lofig.h}}} et {{{Lofig.cpp}}}. |
| 26 | |
| 27 | |
| 28 | == Structure Complète du TME == |
| 29 | |
| 30 | En plus des fichiers directement liés à l'implantation de la base de donnée, |
| 31 | le projet comprend une petite bibliothèque de modèles prédifinis ({{{Library}}} |
| 32 | et une classe {{{Indentation}}} pour gérer l'indentation de l'affichage dans |
| 33 | un flux. |
| 34 | |
| 35 | {{{Library}}} et {{{Indentation}}} vous sont founis, ainsi qu'un {{{main}}} de |
| 36 | démonstration implantant l'{{{halfadder}}}. |
| 37 | |
| 38 | Afin de pouvoir vérifier la validité des ''netlists'' que vous devrez décrire, |
| 39 | une méthode {{{xmlDrive(std::cout&)}}} (non présentée en cours) est fournie |
| 40 | pour chaque classe de la base, dans des squelettes de fichiers. |
| 41 | |
| 42 | Fichiers Fournis: |
| 43 | * [attachment:Locon-Skeleton.cpp Locon.cpp] |
| 44 | * [attachment:Losig-Skeleton.cpp Losig.cpp] |
| 45 | * [attachment:Loins-Skeleton.cpp Loins.cpp] |
| 46 | * [attachment:Lofig-Skeleton.cpp Lofig.cpp] |
| 47 | * [attachment:Library.h] |
| 48 | * [attachment:Library.cpp] |
| 49 | * [attachment:Indentation.h] |
| 50 | * [attachment:Indentation.cpp] |
| 51 | * [attachment:Main.cpp] |
| 52 | |
| 53 | |
| 54 | == Compilation du Programme == |
| 55 | |
| 56 | Lorsque l'on fait de la programmation modulaire, il est hors de question de |
| 57 | compiler «à la main» tous les fichiers. On passe obligatoirement par un |
| 58 | {{{Makefile}}}. Ce fichier devra obligatoirement accompagner votre compte- |
| 59 | rendu. |
| 60 | |
| 61 | |
| 62 | == La Mini Bibliothèque de Modèles == |
| 63 | |
| 64 | La bibliothèque vous fourni trois modèles ({{{Lofig}}}), {{{And2}}}, |
| 65 | {{{Xor2}}} et {{{Or2}}}. |
| 66 | |
| 67 | Interface simplifiée de la bibliothèque : |
| 68 | {{{ |
| 69 | class Library { |
| 70 | public: |
| 71 | enum ModelType { And2=0, Or2, Xor2, ModelTypeSize }; |
| 72 | public: |
| 73 | static void destroy (); |
| 74 | static Lofig* getModel ( unsigned int modelType ); |
| 75 | }; |
| 76 | }}} |
| 77 | |
| 78 | [[Image(Library-1.png,50%,align=center)]] |
| 79 | |
| 80 | |
| 81 | == Objets de la Base de Données == |
| 82 | |
| 83 | === Fonctions membres de la class Locon === |
242 | | Implanter la structure de donnée {{{Lofig}}} à partir la spécification |
243 | | ci-dessus. |
| 300 | Plutôt que d'implanter la totalité de la base en une seule fois, puis tout |
| 301 | compiler et enfin tout déboguer, il est préférable d'adopter une approche |
| 302 | par étape. |
| 303 | |
| 304 | == Question 1 == |
| 305 | |
| 306 | Création de d'une base de donnée vide: écrire les déclarations des différentes |
| 307 | classes, mais ne créer que des fonctions membre aux corps vide. |
| 308 | |
| 309 | Créer le {{{Makefile}}} de compilation du projet. |
| 310 | |
| 311 | Compiler et vérifier qu'il n'y a pas d'erreur. |
| 312 | |
| 313 | |
| 314 | == Question 2 == |
| 315 | |
| 316 | Implanter, classe par classe les métodes de {{{Locon}}}, {{{Losig}}}, |
| 317 | {{{Loins}}} et {{{Lofig}}}. Compiler systématiquement entre chaque |
| 318 | classe. On utilisera le {{{Main}}} fourni (de l'{{{halfadder}}}). |
| 319 | |
| 320 | |
| 321 | == Question 3 == |
258 | | == La Mini Bibliothèque de Modèles == |
259 | | |
260 | | La bibliothèque vous fourni trois modèles ({{{Lofig}}}), {{{And2}}}, |
261 | | {{{Xor2}}} et {{{Or2}}}. |
262 | | |
263 | | Interface simplifiée de la bibliothèque : |
264 | | {{{ |
265 | | class Library { |
266 | | public: |
267 | | enum ModelType { And2=0, Or2, Xor2, ModelTypeSize }; |
268 | | public: |
269 | | static void destroy (); |
270 | | static Lofig* getModel ( unsigned int modelType ); |
271 | | }; |
272 | | }}} |
273 | | |
274 | | Code de la bibliothèque : |
275 | | [attachment:Library.h Library.h] [attachment:Library.cpp Library.cpp] |
276 | | |
277 | | [[Image(Library-1.png,50%,align=center)]] |
| 336 | == Question 4 == |
| 337 | |
| 338 | En analysant le chaînage des objets entre eux, proposer les séquences de |
| 339 | destruction appropriées pour chaque objet, puis les implanter dans les |
| 340 | destructeurs. |