In so gut wie jeder dynamischen Sprache kann man Objekte zur Laufzeit manipulieren. Selbst in Java geht das. Mit ging es jetzt auch nicht darum einen Anfänger mit irgendwelchen Feinheiten zu erschlagen, oder auf Definitionen herumzuhacken aber gerade deine Definition fand ich zu speziell. Die Unterscheidung zwischen Programmcode und dem Code der zur Laufzeit ausgeführt wird finde ich bei der Grunddefinition von OOP-Begriffen etwas zu weitgehend, das das wie gesagt nur Implementierungsdetails sind.
Und gerade bei dynamischen Sprachen mit JIT-compiler kann man sich nicht sicher sein, dass das was im Programmcode festgehalten ist, auch wirklich das ist, was später zur Laufzeit erzeugt wird(s. hidden classes bei Googles V8).
Und gerade bei dynamischen Sprachen mit JIT-compiler kann man sich nicht sicher sein, dass das was im Programmcode festgehalten ist, auch wirklich das ist, was später zur Laufzeit erzeugt wird(s. hidden classes bei Googles V8).
Da sind wir wohl anderer Meinung.Eine Quelle muss ich nicht liefern, da selbst dein Zitat aus dem Smalltalk-Buch meine Definitionen bestätigt.
Alle Objekte sind Instanzen ihrer Klasse. Das dient nur zur Unterscheidung ob man gerade von irgendwelchen Objekten spricht oder von denen die zu der Klasse gehören die man gerade erwähnt hat.Edit: Einziger Unterschied: deine Quelle unterscheidet nicht zwischen Objekt und Objektinstanz bzw finde ich die Beschreibung sehr unsauber. Was unterscheidet hier Objekt und Instanz? Wozu eine sprachliche Unterscheidung, wenn es eigentlich das gleiche ist?
Da alles in Smalltalk ein Objekt ist und alle Objekte Instanzen ihrer Klasse sind, gibt es demnach nichts im Programmcode, das nicht instanziiert wurde (zumindest theoretisch, aus Geschwindigkeitsgründen wird die eine oder andere Optimierung vorgenommen allerdings hat man bei Bedarf Zugriff auf jeden einzelnen Bytecode einer Methode). Und Klassen sind wie gesagt Instanzen ihrer Metaklasse.Was ist das Ding im Programmcode, das noch nicht instanziiert wurde? Ist das eine Klasse? Ist das ein Objekt. Beides passt nicht so recht.
Bis auf Ausnahmen(z.B. GNU Smalltalk) sind die Implementierungen vom Smalltalk meist Image-basiert. Die Images sind nichts weiter als Speicherabbilder der Virtuellen Maschine in denen das Programm abläuft, also ja, alle Objekte haben einen Zustand und wenn das Programm nicht läuft wird er im Image gespeichert.Edit2: Nimmt man an, dass Private Memory Speicher des Programms ist, welches nicht "aktiv" (sprich ohne Zustand) ist, stimmt auch meine Definition wieder. Instanzen sind dann eine Kopie der Objekte mit Zustand. Übersehe ich etwas?