Changes between Version 8 and Version 9 of 2010CaoTme2


Ignore:
Timestamp:
Feb 25, 2010, 3:58:29 PM (15 years ago)
Author:
jpc
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • 2010CaoTme2

    v8 v9  
    7070== Fonctions membres de la classe Loins ==
    7171
    72 Le constructeur :
     72__Le constructeur__ :
    7373 * {{{Loins ( Lofig* owner, Lofig* model, const std::string& );}}}
    7474
     
    7878du modèle {{{model}}} dans l'instance.
    7979
    80 Les accesseurs :
     80
     81__Le destructeur__ :
     82 * {{{~Loins ()}}}
     83
     84Il entrainera la destruction de ses connecteurs {{{Locon}}}.
     85
     86
     87__Les accesseurs__ :
    8188 * {{{std::string&       getName       ();}}}
    8289 * {{{Lofig*             getModel      ();}}}
     
    8592 * {{{Locon*             getConnector  ( const std::string& );}}}
    8693
    87 Les modifieurs :
     94__Les modificateurs__ :
    8895  * {{{bool  connect ( const std::string& name, Losig* );}}}
    8996
     
    103110nom de la {{{Lofig}}}, tous les autres attributs sont ''vides''.
    104111
     112
    105113__Le destructeur__ :
    106114 * {{{~Lofig ()}}}
    107115
     116Il entrainera la destruction~:
     117 * De ses instances.
     118 * De ses signaux.
     119 * De ses connecteurs.
     120''Mais pas'' de ses modèles, qui sont autant de {{{Lofig}}} pouvant apparaître
     121comme modèles dans d'autres {{{Lofig}}}
    108122Voir les considération spécifiques sur la destruction de la base de données.
     123
     124Voir les considération spécifiques sur la destruction de la base de données.
     125
    109126
    110127__Les accesseurs__ :
     
    118135__Les modificateurs__ :
    119136 * {{{setMode ( unsigned int );}}}
     137
    120138
    121139__Les modificateurs relatifs aux modèles__ :
     
    167185
    168186
     187__Les modificateurs relatifs aux signaux__ :
     188 * Ajout d'un signal. Faire une vérification de cohérence, on ne doit pas
     189   avoir deux signaux de même nom.
     190   * {{{void         addSignal    ( const std::string&, unsigned int type );}}}
     191 * Destruction d'un signal, par nom ou diectement par pointeur.
     192   * {{{void         removeSignal ( const std::string& );}}}
     193   * {{{void         removeSignal ( Losig* );}}}
     194 * Recherche d'un signal, par nom ou par identificateur. Si le signal
     195   n'existe pas, renvoyer {{{NULL}}}.
     196   * {{{Losig*       findSignal   ( const std::string& );}}}
     197   * {{{Losig*       findSignal   ( unsigned int id );}}}
     198 * Renvoie un nouvel identificateur de signal. Il doit avoir la garentie
     199   d'être unique.
     200   * {{{unsigned int _newSignalId ();}}}
     201
     202
     203__Fonctions statiques__ :
     204 * Retourne la liste de toutes les {{{Lofig}}} présentent en mémoire.
     205   * {{{static  std::list<Lofig*>& getAll          ();}}}
     206 * Recherche une {{{Lofig}}} dans la liste générale.
     207   * {{{static  Lofig*             findFromAll     ( const std::string& );}}}
     208 * Désalloue la totalité des {{{Lofig}}}.
     209   * {{{static  void               destroyAll      ();}}}
     210 * Ajoute une {{{Lofig}}} à la liste générale (vérifier l'unicité).
     211   * {{{static  void               _addToAll       ( Lofig* );}}}
     212 * Retire une {{{Lofig}}} de la liste générale (par nom ou directement par
     213   pointeur).
     214   * {{{static  void               _removeFromAll  ( Lofig* );}}}
     215   * {{{static  void               _removeFromAll  ( const std::string& );}}}
     216
     217
     218De plus, le code de deux fonctions membres vous sont fournies pour pouvoir
     219afficher l'objet dans un flux. Dans {{{Lofig.h}}} :
     220{{{
     221class Lofig {
     222  public:
     223    static std::string   modeToString ( unsigned int );
     224  public:
     225           void          xmlDrive     ( std::ostream& );
     226};
     227}}}
     228
     229Le code de la fonction utilitaire d'affichage dans un flux :
     230[attachment:Lofig-Skeleton.cpp]
     231
     232
     233== Destruction de la Base de Données ==
     234
     235Cette base de donnée est composées d'objets contenant des pointeurs sur
     236différents autres objets. La destruction de l'un de ces objets doit donc
     237se faire de façon à préserver la cohérence de la base de données.
     238
     239Par exemple, la destruction d'un signal ''devrait'' entrainer son retrait
     240des différents {{{Locon}}} qui pointent sur lui. De même, la destruction
     241d'une {{{Lofig}}} devrait entraîner sa suppression de toutes les listes
     242de modèles.
     243
     244Cette gestion est beaucoup trop compliquée à implanter dans le cadre d'un
     245TME, nous ne le ferons donc pas.
     246
     247En revanche, la fonction {{{Lofig:destroyAll}}} détruisant la totalité
     248de la base de données sera implantée.
     249
     250
     251= Travail à réaliser =
     252
     253Implanter la structure de donnée {{{Lofig}}} à partir la spécification
     254ci-dessus.
     255
     256Pour valider votre travail, il vous est demandé de décrire la ''netlist''
     257ci dessous, représentant un ''full adder'' (brique de base des additionneurs).
     258
     259[[Image(fulladder-1.png)]]
     260
     261Un ''full adder'' se décompose en deux ''half adder''. A titre d'exemple, la
     262construction du ''half adder'' vous est fournie [attachment::Main-Skeleton.cpp].
     263La représentation compléte du ''full adder'' sous forme de structure {{{Lofig}}}
     264est présentée figure 2.
     265
     266[[Image(fulladder-2.png)]]
     267
     268
     269[[Image(Library-1.png)]]
     270
    169271
    170272[[Image(fulladder-1.png)]]