Als Antwort auf Aaronaught's Antwort auf die Frage unter:
Kann ich nicht einfach alle statischen Methoden verwenden?
Wird für eine statische Methode nicht weniger Speicher verwendet? Ich habe den Eindruck, dass jede Objektinstanz ihre eigene ausführbare Version einer nicht statischen Elementfunktion enthält.
Unabhängig davon, wie viel Overhead mit dem Aufrufen einer statischen Methode verbunden ist, unabhängig vom schlechten OO-Design und möglichen Kopfschmerzen, verbraucht sie zur Laufzeit nicht weniger Speicher?
Hier ist ein Beispiel:
Ich mache einen Vektor aus nullinitialisierten Objekten. Jedes Objekt enthält ein Datenelement (ein Dreieck aus neun Doppeln). Jedes Objekt wird nacheinander aus Daten gefüllt, die aus einer STL-Datei gelesen wurden. Es wird nur eine statische Methode benötigt. Das richtige OO-Design schreibt vor, dass eine Methode, die sich direkt mit den Daten befasst, auf jedes Objekt verteilt werden soll. Hier ist die Standard-OO-Lösung:
foreach(obj in vec) {
obj.readFromFile(fileName);
}
Jedes Objekt trägt readFromFile
den kompilierten Code neben den Daten!
Der Speicher ist in diesem Fall eher ein Problem als die Leistung, und auf einem eingeschränkten System befinden sich viele Daten.
Lösungen:
- Namespace-Methode (ideal für C ++, aber in Java nicht möglich)
- Eine statische Methode in der Klasse von obj. Ausführbarer Code wird zur Laufzeit an einem Ort gespeichert. Das Aufrufen der Methode ist mit einem geringen Aufwand verbunden.
- Eine übergeordnete Klasse, von der obj abgeleitet ist und die die private Methode enthält
readFromFile
. Anruf mitsuper.callPrivateMethod()
welchen AnrufenreadFromFile
. Chaotisch und immer noch etwas Speicheraufwand in jedem Objekt. - Implementieren Sie
readFromFile
außerhalb des Bereichs von obj, also in der vec-Klasse oder in der aufrufenden Klasse. Dies unterbricht meiner Meinung nach die Datenkapselung.
Mir ist klar, dass für große Datenmengen ein explizites Objekt für jedes Dreieck nicht der beste Ansatz ist. Dies ist nur ein Beispiel.