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).