2010-12-06 31 views
0

Je ne suis pas nouveau à la POO mais je ne comprends jamais pourquoi les variables ne peuvent JAMAIS contenir l'objet entier (comme en C++, java et php). Alors, quel est l'avantage de travailler avec des pointeurs tout le temps en règle générale?Pourquoi les variables stockent-elles des références aux objets et non à l'objet lui-même?

merci, je suis juste essayer d'apprendre ici ...

+4

Les variables en C++ * peuvent * contenir des objets entiers. Les variables dans Java ne peuvent pas. Les variables en C# ne peuvent contenir des objets que si leur classe hérite de 'System.ValueType'. – cdhowie

Répondre

1

Il s'agit d'une gestion automatique ou manuelle de la mémoire. Des plates-formes telles que Java et .NET s'exécutent sur une machine virtuelle qui implémente un garbage collector. Ceci gère automatiquement l'allocation et la destruction de la mémoire. Dans ces systèmes, toutes les variables dérivent d'un seul type de base Object.

C++ est-ce que permet d'avoir une instance d'objet stockée sur la pile (c'est-à-dire non allouée par pointeur et sur le tas). C++, au contraire, a beaucoup de types primitifs (int, float, etc.) qui ne prolongent pas un type de base.

+0

zourtney a déclaré: "Dans ces systèmes, toutes les variables dérivent d'un seul type d'objet de base." Cela peut être déroutant. Dans .NET, même si les types de valeur héritent en fin de compte d'Object, leur contenu est stocké sur la pile plutôt qu'une "référence". –

1

Le point est la gestion de la mémoire; En utilisant des pointeurs, votre programme ne fait pas toujours une copie de la variable qu'il pointe vers lui.

Why C Pointers

+0

http://stackoverflow.com/questions/162941/why-use-pointers –

2

Ce n'est pas une exigence de la POO. Il est juste plus efficace de stocker une référence à certains types plutôt que le contenu lui-même. Il peut être très fastidieux de faire circuler des objets complexes, mais très efficace pour simplement passer une référence ou une adresse de l'objet. La plupart des langages de programmation supportent à la fois (les types de valeur et de référence) de ces concepts (les créateurs de Java choisissent de tout hériter d'un objet).

De nombreuses plates-formes, telles que .NET, fournissent des structures qui ressemblent un peu à des objets légers. Ils ne supportent pas l'héritage, mais peuvent avoir des structures assez complexes avec beaucoup de membres. Même si les structures supportent des types de données complexes, ce sont des types de valeurs. Bien sûr, si une structure est trop complexe, elle devient inefficace et il vaut mieux en faire une classe.

+0

Je n'ai pas compris la partie "les créateurs de Java choisissent de tout hériter d'un objet". n'est pas un objet une classe? – fabio

+0

@ user532722 Oui. Ainsi, tous les types finissent par utiliser des références. –