« Programmation Pascal/Dépendances mutuelles et références circulaires » : différence entre les versions
Contenu supprimé Contenu ajouté
Aucun résumé des modifications |
m <source> -> <syntaxhighlight> (phab:T237267) |
||
Ligne 21 :
Sinon, c'est généralement que certains objets définis dans une unité A contiennent des champs ou des méthodes utilisant des objets définis dans une unité B, qui eux-même contiennent des champs ou des méthodes utilisant des objets définis dans l'unité A. Par exemple :
<
{ dans l'unité A }
type
Ligne 32 :
function DonneObjetA: TObjetA;
end;
</syntaxhighlight>
===== Solution par la fusion =====
On peut régler le problème de la référence circulaire en mettant les deux objets dans une seule et même unité et en prédéclarant les types. Cela se fait de la manière suivante :
<
{ dans l'unité fusionnée AB }
type
Ligne 49 :
function DonneObjetA: TObjetA;
end;
</syntaxhighlight>
Bien entendu, il se peut que, de fil en aiguille, on obtiennent des fichiers de code très gros, ce qui est l'inconvénient de cette méthode.
Ligne 55 :
Enfin, on peut résoudre le problème en ne typant pas les champs ou les paramètres et les valeurs de retour des procédures et des fonctions.
<
{ dans l'unité A }
type
Ligne 66 :
function DonneObjetA: TObject;
end;
</syntaxhighlight>
Bien que la solution ne soit pas très élégante, elle permet de contourner le problème. Lors de l'appel des fonctions DonneObjetA et DonneObjetB, il faudra faire un transtypage pour avoir un objet bel et bien identifié comme étant de type TObjetA ou TObjetB. Par exemple :
<
procedure UtiliseObjetA;
var objA : TObjetA;
Ligne 76 :
objA.Affiche;
end;
</syntaxhighlight>
[[Catégorie:Programmation Pascal (livre)|Dépendances mutuelles et références circulaires]]
|