91 votes

Différence entre objet et instance

Je sais que ce genre de question a été demandé avant, mais j'ai toujours l'impression que la réponse est trop ambigu pour moi (et, par extension, certains de/la plupart des débutants) à saisir.

J'ai essayé de m'enseigner concepts plus larges de la programmation que de procédure et de base de la programmation orientée objet. Je comprends le béton concepts de la programmation orientée objet (vous faire une classe qui possède des données (membres) et des fonctions (méthodes) et ensuite instancier la classe au moment de l'exécution de réellement faire des choses, ce genre de chose).

Je pense avoir une poignée sur ce qu'est une classe (une sorte de conception de plan pour une instance d'être créé à sa ressemblance au moment de la compilation). Mais si c'est le cas, qu'est ce qu'un objet? Je sais aussi que dans le prototype de langues, cela peut muck les choses encore plus, mais c'est peut-être pourquoi il doit y avoir une distinction claire entre l'objet de l'instance et dans mon esprit.

Au-delà de ça, j'ai du mal avec les concepts de "l'objet" et "instance". Beaucoup de ressources que j'ai lu (y compris les réponses, DONC) disent qu'ils sont en grande partie les mêmes et que la différence est dans la sémantique. D'autres disent qu'il y a une vraie différence conceptuelle entre les deux.

Peut les experts ici à DONC aider un débutant d'avoir cette "révélation" pour aller de l'avant dans le monde de la programmation orientée objet?

Merci encore.

Remarque: ce n'est pas de devoirs, je n'ai pas aller à l'école, cependant, je pense que ça pourrait aider les gens qui sont à la recherche de l'aide aux devoirs.

140voto

joe snyder Points 2273

Un plan pour la conception d'une maison est comme une description de classe. Toutes les maisons construites à partir de ce plan sont des objets de cette classe. Une maison donnée est un exemple.

43voto

Rambly John Points 51

La vérité est que la programmation orientée objet crée souvent la confusion en créant un décalage entre le côté philosophique du développement et de la mécanique actuelle du fonctionnement de l'ordinateur. Je vais essayer de mettre en contraste les deux pour vous:

Le concept de base de la programmation orientée objet est ceci: Class >> Objet >> Exemple.

La classe = le blue print. L'Objet est une chose réelle qui est construit sur la base de la "blue print" (comme la maison). Une instance est une copie virtuelle (mais pas une copie réelle de l'objet.

L'explication plus technique d'une "instance", c'est que c'est une "mémoire de référence" ou une variable de référence. Cela signifie qu'une "instance" est une variable en mémoire que seulement a une adresse mémoire d'un objet en elle. L'objet qu'il aborde est l'objet même de l'instance est "une instance de". Si vous avez plusieurs instances d'un objet, vous venez de nombreuses variables en différence endroits dans votre mémoire que tous ont la même adresse mémoire en elle - qui sont tous à l'adresse du même objet. Vous ne pouvez jamais changer un exemple, bien qu'il semble que vous pouvez dans votre code. Vraiment ce que vous faites lorsque vous 'modifier' une instance est vous modifiez l'objet original directement. Par voie électronique, le processeur passe par une plus de place dans la mémoire (de la variable de référence/de l'instance) avant de modifier les données de l'objet d'origine.

Le processus est: processeur >> l'emplacement de la mémoire de l'instance >> l'emplacement de la mémoire de l'objet d'origine.

Notez qu'il n'est pas question que exemple, vous utilisez le résultat final sera toujours le même. TOUTES les instances de continuer à maintenir, exactement la même information dans leurs emplacements de mémoire - de l'objet de la mémoire d'adresse et que l'objet va changer.

La relation entre la classe et l'objet est un peu plus confuse, bien que philosophiquement son le plus facile à comprendre (blue print >> de la maison). Si l'objet est réel les données qui se trouvent quelque part dans la mémoire, ce qui est "classe"? Il s'avère que mécaniquement l'objet est une copie exacte de la classe. Si la classe est juste une autre variable quelque part d'autre dans le mémoire qui contient exactement les mêmes informations que l'objet n'. Notez la différence entre les relations:

L'objet est une copie de la classe. Instance est une variable qui contient l'adresse mémoire de l'objet.

Vous pouvez également avoir plusieurs objets de la même classe, puis plusieurs instances de chacun de ces objets. Dans ces cas, chaque objet de l'ensemble des instances de valeur équivalente, mais les instances entre les objets ne le sont pas. Par exemple:

Laissez-Classe A De la Classe A laisser Objet1, Objet2, et Objet3.

//Objet1 a exactement la même valeur que l'objet2 et objet3, mais sont dans des endroits différents dans la mémoire.

à partir de l'Objet1>> laissez-obj1_Instance1, obj1_Instace2 , obj1_Instance3

//toutes ces instances sont également équivalent en valeur et dans différents lieux de mémoire. Leurs valeurs = Objet1.MemoryAddress.

etc.

Les choses se messier lorsque vous démarrez l'introduction de types. Voici un exemple d'utilisation des types de c#:

//assumer la classe Personne existe Personne de john = new Personne();

En fait, ce code est plus facile à analyser si vous le décomposer en deux parties:

Person john;
john = new Person();

Dans la technique de parler, la première ligne déclare une variable de type Personne. Mais ça veut dire quoi?? L'explication générale est que maintenant j'ai une variable vide qui ne peut contenir qu'un objet Personne. Mais attendez une minute - c'est une variable vide! Il n'y a rien que les variables d'emplacement de mémoire. Il s'avère que les "types" sont mécaniquement pas de sens. Les Types ont été conçue à l'origine comme un moyen de gérer les données et rien d'autre. Même lorsque vous déclarez les types primitifs tels que int, str, chr (w/o initialisation), rien ne se passe à l'intérieur de l'ordinateur. Cette étrange aspect syntaxique de la programmation fait partie de ceux où les gens l'idée que les classes sont le modèle d'objets. OOP ont obtenu encore plus de confusion, avec des types avec des types délégués, les gestionnaires d'événements, etc. Je voudrais essayer de ne pas se concentrer sur eux beaucoup trop et n'oubliez pas qu'ils sont tous un abus de langage. Rien ne change avec la variable jusqu'à sa devient un objet ou a une adresse mémoire d'un objet.

La deuxième ligne est aussi un peu à confusion, car il fait deux choses à la fois:

La droite "new Personne()" est évalué en premier. Il crée une nouvelle copie de la classe Personne - qui est, il crée un nouvel objet.

Le côté gauche "jean -=", est ensuite évalué par la suite. Il s'avère jean dans une variable de référence en lui donnant l'adresse mémoire de l'objet qui vient d'être créé sur le côté droit de la même ligne.

Si vous voulez devenir un bon développeur, il est important de comprendre qu'aucun ordinateur de l'environnement jamais œuvres basées sur des idéaux philosophiques. Les ordinateurs ne sont même pas logique, ils sont vraiment une grande collection de fils qui sont collées ensemble à l'aide de la base boolean circuits (pour la plupart non-et et OU).

15voto

Truong Ha Points 1691

texte alternatif

Les objets sont des choses en mémoire, tandis que les instances sont des choses qui y font référence. Dans l'image ci-dessus: std (instance) -> Objet étudiant (droite)

std1 (instance) -> Objet étudiant (gauche)

std2 (instance) -> Objet étudiant (gauche)

std3 (instance) -> aucun objet (null)

7voto

sukru Points 1702

Un objet est une instance d'une classe (pour les langages basés sur la classe).

Je pense que c'est l'explication la plus simple que je puisse trouver.

6voto

Derek Litz Points 3074

Une classe définit un objet. Vous pouvez aller encore plus loin dans de nombreuses langues et de dire une interface définit des attributs communs et de méthodes entre les objets.

Un objet est quelque chose qui peut représenter quelque chose dans le monde réel. Lorsque vous souhaitez que l'objet fait représenter quelque chose dans le monde réel que l'objet doit être instancié. L'instanciation signifie que vous devez définir les caractéristiques (attributs) de cet objet spécifique, généralement par le biais d'un constructeur.

Une fois que vous avez défini ces caractéristiques, vous avez maintenant une instance d'un objet.

Espérons que cela efface les choses.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X