Changes between Version 4 and Version 5 of 2010CaoTme3
- Timestamp:
- Mar 20, 2010, 8:00:39 PM (15 years ago)
Legend:
- Unmodified
- Added
- Removed
- Modified
-
2010CaoTme3
v4 v5 177 177 En conclusion, la fonction récursive aura la structure générale suivante: 178 178 179 {{{ 180 LITTERALS(e) 181 IF e IS_A variable: 182 RETURN 1 183 ELSE 184 sum = 0 185 FOR EACH operand OF e: 186 sum += LITTERALS(operand) 187 RETURN sum 188 }}} 189 179 190 [[Image(Ebm-1.png)]] 191 192 La figure suivante représente l'ordre dans lequel les noeud de l'arbre de l'{{{EBM}}} 193 sont parcourus lors d'une récursion. 194 180 195 [[Image(Ebm-2.png)]] 196 197 État de la pile d'appel des fonctions a un instant donné du parcours récursif. 198 Le chemin actullement parcouru est {{{(e4,e1,a)}}} 199 181 200 [[Image(Ebm-3.png)]] 201 202 La pile d'appel des fonctions membres à un instant donné. 203 204 ''Attention'' : il est très important de bien distinguer le code la fonction, 205 qui est écrit une fois (dans {{{Ebm}}}) et l' ''objet'' auquel elle s'applique. 206 Nous avons ainsi la même fonction membre {{display()}} mais sur trois objets 207 différents : {{{e4}}}, {{{e1}}} et {{{a}}}. 208 182 209 [[Image(Ebm-4.png)]] 183 210 … … 186 213 187 214 215 Dans la présentation de la récursion, nous avons vu qu'il était nécessaire, 216 pour choisir entre la récursion et l'arrêt, de savoir distinguer une variable 217 ({{{EbmVar}}}) d'une expression ({{{EbmExpr}}}). 218 219 Pour cela nous allons implanter la fonction {{{getType()}}}. 220 221 La fonction {{{getType()}}} a les caractéristiques suivantes: 222 * Elle est déclarée virtuelle pure dans la classe {{{Ebm}}}, c'est à dire 223 qu'elle '''doit''' être sur-définie dans les classes dérivées '''et''' 224 qu'elle n'a aucune implémentation au niveau de la classe {{{Ebm}}}. 225 * Dans la classe {{{EbmVar}}} elle retourne '''Variable'''. 226 * Dans la classe {{{EbmExpr}}} elle retourne '''Expression'''. 227 228 De cette façon, lorsqu'elle est appelée dans les fonctions récursives définies 229 dans {{{Ebm}}}, elle retournera la valeur associée au ''type dynamique'' de 230 l'{{{Ebm}}} en cours de traitement. C'est à dire {{{EbmVar}}} ou {{{EbmExpr}}}. 231 188 232 [[Image(Ebm-5.png)]] 189 233 190 234 191 235 == Les ''templates'' {{{map<>}}} et {{{set<>}}} == 236