Du hast dann aber nur eine Instanz! Das ist das Singleton-Prinzip und geht mit OOP auch!
Stimmt, da hast du recht. Vielleicht bist du mit der Annahme, dass mir der Unterschied zwischen Klasse, Objekt und Instanz noch nicht 100% klar ist, weniger falsch, als ich denke und mir wünsche.
Also wenn ich mich doch mal an C++ zurückerinnere, dann war das ja grob so:
Folgendes ist meine Klasse:
class Foo {
// Irgendwas halt...
}
Meine Instanz ist:
Foo Bar = new Foo();
Logischerweise kann ich mehrere Variablen vom Typ Foo erzeugen, die pro Variable eine Instanz darstellen. Also meinetwegen:
Foo Bar2 = new Foo();
Bar2 wäre eine Instanz, Bar eine andere.
Nun zwei Dinge, die mich daran nun noch irritieren:
1. Mein Quellcode ist falsch, wenn ich mich richtig erinnere. Korrekt müsste es heißen:
Foo* Bar = new Foo();
und
Foo* Bar2 = new Foo();
Warum sind Instanzen Zeiger und auf was zeigen Sie eigentlich? Wenn ich jetzt Bar2 ändere, ändere ich ja
nicht Bar... hä?
2. Um nochmal zurück auf die Grafikprogramme zu kommen: Dort erstelle ich ein Grafikgedöngs (in 3D Programmen nennt man das dann Mesh, in 2d Programmen weiß ich es nicht). Davon kann ich dann sog. "Instanzen" erzeugen. Im Prinzip sind Instanzen Kopien von dem Mesh/..., die eine eigene Position, Skalierung und Rotation haben können, aber alle anderen Eigenschaften (Oberfläche, Textur, Form etc.) blind von dem Original kopieren. Der Vorteil ist nun: Wenn ich das Original verändere, änderen sich alle Instanzen automatisch mit. Eine Instanz kann ich aber (bis auf Position, Rotation und Skalierung) nicht ändern. Die Frage lautet nun: Was wäre das für einen Programmierer? Wenn ich das gerade beschreibe, hat das mehr mit Zeigern zu tun als mit Instanzen. Aber auch wieder nicht, weil ja Position, Rotation und Skalierung nicht identisch sind. Wie würdet ihr das nun verwirklichen? (also nur mal theoretisch, so vom Ansatz her)
3. Anderes Beispiel aus Grafikprogrammen (konkret: Flash), was mir gerade einfällt, was mMn gut ins Thema passt: In Flash gibt es Symbole (das sind Objekte, z.B. ein Viereck, ein Button, ein Charakter etc.), die man in die Bibliothek legen kann. Diese Symbole haben einen Namen, z.B. Bernd. Um diese Symbole nun auf dem Bildschirm zu sehen, ziehe ich es auf meine Bühne (=der Bildschirm). Damit erzeuge ich eine "Instanz" (so nennt es Flash). Das Objekt "Bernd" liegt immernoch in der Bibliothek, das Dinges auf meiner Bühne bekommt einen neuen Namen, z.B. dasBrot (dieser Name heißt in Flash übrigens "Instanzname"). Ich kann auch mehrere "Instanzen" erzeugen, die alle Unterschiedliche Eigenschaften (Farben, Ränder etc) haben können. Was passiert, wenn ich das Objekt in der Bibliothek ändere, weiß ich so spontan gar nicht.
Kann man das eher mit Klassen und Instanz vergleichen? Ist das Dinges in der Bibliothek "Bernd" eine Klasse und das auf der Bühne (=Bildschirm) "dasBrot" eine Instanz?