Tom: Constructor in einer Methode der Klasse erneut aufrufen?

Beitrag lesen

Hello Hotti,

das scheint ja langsam ein philosophisches oder archäoligisches Problem zu werden. Graben wir doch mal in den Bits.

Meiner Meinung nach könnte es so zusammenhängen:

Eine Klasse ist nur ein Baumuster. Das liegt statisch vor, wenn das Programm läuft. Nun wird eine neue Instanz angefordert. Das geschieht durch

newinstance = new(baumuster);

Was passiert hier?
Ich sag mal so: es kommt darauf an, nämlich ob es ein generisches Klassensystem (C++), ein typisierendes Klassensystem (Delphi) oder ein Interpretersystem (z.B. PHP) ist. Was in allen aber gleich ist:

es wird Speicherplatz für die Klassenvariable allokiert, egal, wieviel daws jetzt ist.
   Darüberhinaus wird i.a. auch Speicherplatz für die statischen Teile der Klasse allokiert
   und diese werden dort hineinkopiert. Das sind einfache Variablen und z.B. die Adressen zu
   den Methoden.

Damit ist die (Kern-)Instanz gebildet, noch bevor irgendwelche Initialisierungen stattgefunden haben, mit Ausnahem der statischen Werte. Die stehen jetzt bereits hardcoded im Speicher.

und jetzt kommt die Philosophie

für standadisierte dynamische Teile der Klasse könnte bereits jetzt Speicherplatz allokiert
   werden, aber vielleicht auch erst dann, wenn er tatsächlich angefordert wird von der Klasse

Damit ist aber klar, der Konstruktor war noch gar nicht tätig. Dieser kann nämlich erst ins Spiel kommen, wenn er selber abgebildet worden ist, entweder durch Codekopie, oder durch Referenz auf den Standardkonstruktor.

Wenn jetzt als nächstes die Kontrolle an den Konstruktor übergeben wird, kann er für neue Speicherall0kation sorgen und diese Fragmente innerhalb der statisch vorbereiteten Teile der Instanz eintragen. Wohin sollte der Konstruktor denn die Referenzen schreiben, wenn noch kein Variablenplatz ("Ankeradresse") dafür vorgesehen wäre?

Ich mag OOP-Programmierung nicht, weil alle Systeme es "innen drin" anders machen. Aber das hat Bjarne Stroustup auch selber schon eingeräumt. Wenn er C++ nochmal entwickeln könnte, würd er es wieder ganz anders machen...

Das große Problem ist jetzt nur, dass man wissen muss, welches System dem anderen (teilweise) zugrunde liegt. PHP ist nunmal in C programmier und das hat auch schon ein paar Eigenarten.

So! Nun haben wir genügend Stoff, damit sich auch noch ein paar Andere über uns hermachen können :-)

Liebe Grüße aus dem schönen Oberharz

Tom vom Berg

--
 ☻_
/▌
/ \ Nur selber lernen macht schlau
http://bergpost.annerschbarrich.de