Pourquoi une fonction n'est pas un objet? Comment est-il différent?
Pour comprendre cela, nous allons déplacer de bas en haut en termes d'abstractions impliqués. Donc, vous avez votre adresse espace à travers lequel vous pouvez définir l'état de la mémoire et nous devons nous rappeler que, fondamentalement, il est tout au sujet de cet état de fonctionnement sur.
Ok, nous allons passer un peu plus élevés en termes d'abstractions. Je ne suis pas prise au sujet de toutes les abstractions imposées par un langage de programmation encore (comme l'objet, tableau, etc.) mais tout simplement en tant que profane, je veux garder un enregistrement d'une partie de la mémoire, permet de l'appeler Ab1
et un autre appelé Ab2
.
Les deux ont un état fondamentalement, mais j'ai l'intention de manipuler/faire usage de l'état différemment.
De la même façon...Pourquoi et Comment?
Pourquoi ?
En raison de mes exigences (pour effectuer une addition de 2 nombres et stocker le résultat en arrière, par exemple). Je serai d'utilisation) Ab1
comme un long usage de l'état et de l' Ab2
comme relativement courte de l'utilisation de l'état. Donc, je vais créer un état pour Ab1
(avec les 2 nombres à ajouter), puis utiliser cet état pour remplir certains d'état d' Ab2
(copier temporairement) et effectuer d'autres manipulations d' Ab2
(ajouter) et sauver une partie de la résultante Ab2
de Ab1
(la conséquence). Post qu' Ab2
devient inutile et nous réinitialisation de son état.
Comment?
Je vais avoir besoin de quelques de gestion de portions de garder une trace de ce que les mots à choisir à partir d' Ab1
et copie d' Ab2
et ainsi de suite. À ce stade, je me rends compte que je peux le faire fonctionner pour effectuer quelques opérations simples, mais quelque chose de grave, exigent une énoncés spécification de la gestion de cette mémoire.
Donc, je regarde pour de telles spécifications de gestion et il s'avère qu'il y existe une variété de ces spécifications (certains ayant intégré dans la mémoire de modèle, d'autres offrent de la flexibilité pour gérer la mémoire vous-même) avec un meilleur design. En fait, parce qu'ils(sans même de dicter la façon de gérer la mémoire directement) ont permis de définir l'encapsulation pour cette longue période de stockage et les règles de quand et comment cela peut être créée et détruite.
Il en va de même pour l' Ab2
mais la façon de les présenter, il me fait me sentir comme ce est très différente de l' Ab1
. Et en effet, il s'avère être. Ils utilisent une pile pour la manipulation de l'état de l' Ab2
et de réserver de la mémoire de tas pour Ab1
. Ab2
meurt après un certain temps.(après avoir fini de s'exécuter).
Aussi, la façon dont vous définissez quoi faire avec Ab2
se fait à travers encore une autre partie appelée Ab2_Code
et de spécification Ab1
implique de même, Ab1_Code
Je dirais, c'est fantastique! Je reçois beaucoup de confort, ce qui me permet de résoudre beaucoup de problèmes.
Maintenant, je suis toujours à la recherche d'un profane, du point de vue donc je ne me sens pas vraiment surpris d'avoir passé par le processus de pensée de tout cela, mais si vous les choses en question de haut en bas, les choses peuvent devenir un peu difficile à mettre en perspective.(Je pense que c'est ce qui s'est passé dans votre cas)
BTW, j'ai oublié de mentionner qu' Ab1
est appelé un objet et officiellement Ab2
d'une pile de fonction alors qu' Ab1_Code
est la définition de la classe et de l' Ab2_Code
est la définition de la fonction de code.
Et c'est à cause de ces différences imposées par le PL, vous trouvez qu'ils sont tellement différents.(votre question)
Remarque: Ne prenez pas mon représentation de l' Ab1
/Object
comme un long stockage de l'abstraction comme une règle ou d'un béton chose - c'est du point de vue profane. Le langage de programmation fournit beaucoup plus de flexibilité en termes de gestion du cycle de vie d'un objet. Ainsi, un objet peut être déployé comme Ab1
, mais il peut être beaucoup plus.
Et est ce que cela a un rapport avec les foncteurs (objets de fonction)?
Notez que la première partie de réponse est valable pour de nombreux langages de programmation en général(y compris C++), cette partie a à voir spécifiquement avec C++ (dont les spec que vous avez cité). Vous avez donc le pointeur à une fonction, vous pouvez avoir un pointeur sur un objet trop. Juste une autre construction de programmation C++ définit. Notez que c'est pour avoir un pointeur à l' Ab1
, Ab2
pour les manipuler plutôt que d'avoir un autre distincts abstraction pour agir.
Vous pouvez lire au sujet de sa définition, utilisation ici:
C++ Foncteurs et leurs utilisations