Hi,
momentan beschäftige ich mich relativ viel mit Javascript und bin auf das Konzept der Protoypes gestoßen:
OOP in JavaScript || Prototype
Dabei habe ich mich gefragt: Wie wird der Speicher eigentlich in anderen Sprachen wie eben Java organisiert?
Felder werden exklusiv für jede Instanz verwaltet, statische Variablen "zentral" in einem "Klassenregister" (Man verzeihe mir den etwas holprigen Begriff, mir fällt nur kein besserer ein).
Was aber ist z.B. mit Methoden? Bekommt jede Instanz nur eine Referenz auf das Klassenregister oder werden die Methoden ebenfalls für jede Instanz einzeln angelegt?
Was ist mit konstanten primitiven Datentypen? Werden diese auch für jede Instanz angelegt oder im Klassenregister?
Was ist mit vererbten Feldern/Methoden, die ich aber nicht benutze? Existiert da "im Hintergrund" trotzdem ein Verweis auf die parent-Felder? So nach dem Motto "Wenn dus brauchen solltest: Da isses"?
Vom Speicherbedarf her fände ich es logisch, beispielsweise Methoden zentral zu verwalten, aber dann wären es ja wieder Klassen- und keine Instanzmethoden, was aber imho die Objektorientierung verletzt... I don't know.
momentan beschäftige ich mich relativ viel mit Javascript und bin auf das Konzept der Protoypes gestoßen:
OOP in JavaScript || Prototype
Es ist also sinnvoller konstante Werte im Prototypen zu definieren anstatt Sie in jeder Instanz zu hinterlegen, denn dort belegen Sie wesentlich mehr Speicher. Aus dem selben Grund sollte man sofern kein Zugriff auf private Eigenschaften benötigt wird öffentliche Methoden an Stelle von privilegierten verwenden.
Java:
/* bad way */
Car = function(){
this.doors = 4;
this.getDoors = function(){ // privileged method
return this.doors;
}
}
myCar = new Car();
alert(myCar.getDoors()); // 4
/* better way */
Car = function(){
}
Car.prototype.doors = 4;
Car.prototype.getDoors = function(){ // public method
return this.doors;
}
myCar = new Car();
alert(myCar.getDoors()); // 4
Dabei habe ich mich gefragt: Wie wird der Speicher eigentlich in anderen Sprachen wie eben Java organisiert?
Felder werden exklusiv für jede Instanz verwaltet, statische Variablen "zentral" in einem "Klassenregister" (Man verzeihe mir den etwas holprigen Begriff, mir fällt nur kein besserer ein).
Was aber ist z.B. mit Methoden? Bekommt jede Instanz nur eine Referenz auf das Klassenregister oder werden die Methoden ebenfalls für jede Instanz einzeln angelegt?
Was ist mit konstanten primitiven Datentypen? Werden diese auch für jede Instanz angelegt oder im Klassenregister?
Was ist mit vererbten Feldern/Methoden, die ich aber nicht benutze? Existiert da "im Hintergrund" trotzdem ein Verweis auf die parent-Felder? So nach dem Motto "Wenn dus brauchen solltest: Da isses"?
Vom Speicherbedarf her fände ich es logisch, beispielsweise Methoden zentral zu verwalten, aber dann wären es ja wieder Klassen- und keine Instanzmethoden, was aber imho die Objektorientierung verletzt... I don't know.