Gegeben sei eine schon existierende Klasse, welche einen Sack voll abgeleiteter Klassen besitzt, die nicht alle meiner Kontrolle unterliegen.
Jetzt soll für diese (Grund)klasse eine neue Methode eingeführt werden, mit welcher man z.B. eine Versionsinformation der Klasse auslesen kann. Diese Methode soll dann schlauerweise KLASSE=>GET_VERSION heißen und einfach einen Versionsstring zurückgeben ( z.B. V1.0.0 als default ).
Bis hierhin kein Problem. Aber zukünftig soll diese Methode auch für jede Klasse ( auch die abgeleiteten ) die aktuelle Versionsinformation zurückgeben. Wenn die Hauptklasse einen Versionssprung macht, soll diese ab dann Ver. 2.1.0 zurückgeben, wohingegen die Unterklassen weiterhin 1.0.0 zurückgeben sollen. Andererseits dürfen die Unterklassen Versionen selber für sich vergeben.
Wenn es sich hier um Instanzmethoden handeln würde wäre das Ganze ja gar kein Problem (evtl. bei der Hauptklasse etwas komplizierter wg. der momentan nicht vorhandenen Redefinitionen der Unterklassen). Aber wie bekomme ich so etwas bei statischen Methoden hin, da SAP ja keine Redefinition statischer Methoden vorsieht?
Die Autoren der Haupt- und Unterklassen haben jeweils nicht unbedingt Zugriff auf die anderen Klassen, so dass jede Klasse für sich selber diese Information bereitstellen muss.
Mein aktueller Ansatz:
1 Instanzmethode (redefinierbar), welche mir genau diese Information zurückgibt ( Ohne importparameter, nur einen Returnparameter )
1 statische Methode mit Importparameter iv_klassenname mit der ich eine Instanz der (evtl. Unter-)klasse erzeuge und dann die oben angesprochene (Instanz)methode die Info zurückgeben lasse.
Aber das scheint mir zu kompliziert.
Hat jemand einen schicken Ansatz für dieses Problem?
hmm... nicht so einfach zu lösen.
Fällt mir im Momen auch nichts anderes ein, als deine Lösung.
Vielleicht könnte die Methode aber auch in jeder Klasse extra implementiert werden und einen bestimmten Aufbau vom Namen her haben:
GET_VERSION_<Klassenname>
Ich weiß nicht in wie weit du das Klassenmodell ändern kannst, aber normalerweise braucht man keine "Versionsinformation":
Aus den Anfängen der Internetbrowser ist dir sicherlich "best viewed with xxx" bekannt. Das hat sich mittlerweile ja zum Glück geändert. Der neue, bessere Ansatz lautet "Feature-Detetction". Alle JavaScript Libraries (z.B. jQuery) gehen in diese Richtung. Vielleicht kannst du ja in deinen Klassenhierarchie eine zweite Interface-Hierarchie implementieren die dir Auskunft über die zur Verfügung stehenden Funktionen der Klassen liefert.
lg ADT
Theory is when you know something, but it doesn't work.
Practice is when something works, but you don't know why.
Programmers combine theory and practice: Nothing works and they don't know why.