In Superklasse Methoden der Childklasse ausführen
Moderator: Moderatoren
-
- Rekursionen-Architekt
- Beiträge: 151
- Registriert: Do, 15. Nov 2007 11:40
- Wohnort: Krefeld
- Kontaktdaten:
In Superklasse Methoden der Childklasse ausführen
Hallo,
wie der Titel schon sagt muss ich in einer meiner Superklassen (die für die Behandlung der Keyboard Events zuständig ist) auf eine Methode zugreifen die erst in einer von ihr abgeleiteten Klasse existiert.
Wenn ich versuche in der Superklasse auf das ClassObjekt zuzugreifen über die in der "Abstract" Klasse definierte Methode :classObjekt() bekomme ich auch das Klassenobjekt meiner Subklasse zurück.
Bekomme jedoch folgende Fehlermeldung im Debugger: "Zugriff auf Instanz-Methode in Klassen-Objekt nicht erlaubt".
Gibt es eine andere Möglichkeit auf das Klassenobjekt meiner Subklasse zuzugreifen? Oder widerspricht das was ich da versuche jeglicher Klassenstruktur?
Gruß,
Jannik
wie der Titel schon sagt muss ich in einer meiner Superklassen (die für die Behandlung der Keyboard Events zuständig ist) auf eine Methode zugreifen die erst in einer von ihr abgeleiteten Klasse existiert.
Wenn ich versuche in der Superklasse auf das ClassObjekt zuzugreifen über die in der "Abstract" Klasse definierte Methode :classObjekt() bekomme ich auch das Klassenobjekt meiner Subklasse zurück.
Bekomme jedoch folgende Fehlermeldung im Debugger: "Zugriff auf Instanz-Methode in Klassen-Objekt nicht erlaubt".
Gibt es eine andere Möglichkeit auf das Klassenobjekt meiner Subklasse zuzugreifen? Oder widerspricht das was ich da versuche jeglicher Klassenstruktur?
Gruß,
Jannik
Kassensysteme für den Einzelhande http://ab-software.de
Mitglied der XUG-Cologne http://www.xug-cologne.de
Mitglied der XUG-Cologne http://www.xug-cologne.de
-
- Rekursionen-Architekt
- Beiträge: 417
- Registriert: Mo, 17. Sep 2007 18:20
- Wohnort: Senftenberg
- Kontaktdaten:
Re: In Superklasse Methoden der Childklasse ausführen
Wieso benutzt du die Keyboard-Methode nicht in der Unterklasse. Ehrlich gesagt, finde ich, dass das nicht gerade der eigentlichen Klassenstruktur entspricht. Und wenn du mit deinem Keyboard ne Funktion aufrufst, die dirJ.Renseler hat geschrieben:Hallo,
wie der Titel schon sagt muss ich in einer meiner Superklassen (die für die Behandlung der Keyboard Events zuständig ist) auf eine Methode zugreifen die erst in einer von ihr abgeleiteten Klasse existiert.
Wenn ich versuche in der Superklasse auf das ClassObjekt zuzugreifen über die in der "Abstract" Klasse definierte Methode :classObjekt() bekomme ich auch das Klassenobjekt meiner Subklasse zurück.
Bekomme jedoch folgende Fehlermeldung im Debugger: "Zugriff auf Instanz-Methode in Klassen-Objekt nicht erlaubt".
Gibt es eine andere Möglichkeit auf das Klassenobjekt meiner Subklasse zuzugreifen? Oder widerspricht das was ich da versuche jeglicher Klassenstruktur?
Gruß,
Jannik
die Subklasse ruft?
-
- Rekursionen-Architekt
- Beiträge: 151
- Registriert: Do, 15. Nov 2007 11:40
- Wohnort: Krefeld
- Kontaktdaten:
Grund ist folgender ...
Alle "meine" Fensterklassen leiten sich von einer Basisklasse ab die u.a. die Behandlung der Hotkeys , die für alle Fenstertypen gleich ist, übernimmt.
In der Keyboard Methode der Superklasse findet also die Behandlung der Hotkeys statt.
Wird aber ein Hotkey nicht gefunden möchte ich das wieder die standart Keyboard Methode der Subklasse genutzt wird, bzw. je nach Dialog andere Aktionen ausgeführt werden. (Aber halt auch nur dann wenn der Taste kein Hotkey hinterlegt ist).
Deshalb muss ich halt aus der Superklasse auf die Methoden Subklasse zurückgreifen können.
Gruß,
Jannik
Alle "meine" Fensterklassen leiten sich von einer Basisklasse ab die u.a. die Behandlung der Hotkeys , die für alle Fenstertypen gleich ist, übernimmt.
In der Keyboard Methode der Superklasse findet also die Behandlung der Hotkeys statt.
Wird aber ein Hotkey nicht gefunden möchte ich das wieder die standart Keyboard Methode der Subklasse genutzt wird, bzw. je nach Dialog andere Aktionen ausgeführt werden. (Aber halt auch nur dann wenn der Taste kein Hotkey hinterlegt ist).
Deshalb muss ich halt aus der Superklasse auf die Methoden Subklasse zurückgreifen können.
Gruß,
Jannik
Kassensysteme für den Einzelhande http://ab-software.de
Mitglied der XUG-Cologne http://www.xug-cologne.de
Mitglied der XUG-Cologne http://www.xug-cologne.de
- brandelh
- Foren-Moderator
- Beiträge: 15695
- Registriert: Mo, 23. Jan 2006 20:54
- Wohnort: Germersheim
- Hat sich bedankt: 65 Mal
- Danksagung erhalten: 33 Mal
- Kontaktdaten:
Hi,
eigentlich dürfte das kein Problem sein, denn zur Programmausführung bist du doch in der unteren Ebene. Angenommen deine Superklasse hat eine keyboard-Methode und deine untere Klasse auch ....
Die Oberklasse ruft also nicht die Unterklasse sondern die Unterklasse die Oberklasse. Von der Syntax wüßte ich jetzt auch gar nicht wie die Oberklasse in Unterklassen zugreifen sollte, denn :: startet ja mit SELF also dem Objekt der aktuellen Klasse.
eigentlich dürfte das kein Problem sein, denn zur Programmausführung bist du doch in der unteren Ebene. Angenommen deine Superklasse hat eine keyboard-Methode und deine untere Klasse auch ....
Code: Alles auswählen
Unterklasse:keyboard(...)
local xReturn
xReturn := ::OberKlasse:keyboard(...) // erstmal in oberklasse abarbeiten lassen.
... eventuell brauchst du Flagvariablen die anzeigen ob
... die Oberklasse den Event verarbeitet hat oder nicht.
if NichtVerarbeitet
... mach was damit.
Die Oberklasse ruft also nicht die Unterklasse sondern die Unterklasse die Oberklasse. Von der Syntax wüßte ich jetzt auch gar nicht wie die Oberklasse in Unterklassen zugreifen sollte, denn :: startet ja mit SELF also dem Objekt der aktuellen Klasse.
Gruß
Hubert
Hubert
-
- Rekursionen-Architekt
- Beiträge: 151
- Registriert: Do, 15. Nov 2007 11:40
- Wohnort: Krefeld
- Kontaktdaten:
Hallo,
so habe ich mir bis jetzt auch beholfen ... nur ist die Sache so ... die Methoden die von der Subklasse ausgeführt werden müssen sind immer die gleichen!
Ich möchte ganz gerne Vermeiden das ich bei jedem Fenster (bzw. bei jedem von mir abgeleitete und modifizierten Xbase Part), die Methoden unnötig ableiten muss wenn das ganze ja eigentlich auch die Superklasse erledigen könnte , wenn Sie Zugriff auf die Methoden der Subklasse hätte.
Möchte halt keinen unnötigen Sourcecode haben, das gibt nur wieder Probleme beim Pflegen.
Gruß,
Jannik
so habe ich mir bis jetzt auch beholfen ... nur ist die Sache so ... die Methoden die von der Subklasse ausgeführt werden müssen sind immer die gleichen!
Ich möchte ganz gerne Vermeiden das ich bei jedem Fenster (bzw. bei jedem von mir abgeleitete und modifizierten Xbase Part), die Methoden unnötig ableiten muss wenn das ganze ja eigentlich auch die Superklasse erledigen könnte , wenn Sie Zugriff auf die Methoden der Subklasse hätte.
Möchte halt keinen unnötigen Sourcecode haben, das gibt nur wieder Probleme beim Pflegen.
Gruß,
Jannik
Kassensysteme für den Einzelhande http://ab-software.de
Mitglied der XUG-Cologne http://www.xug-cologne.de
Mitglied der XUG-Cologne http://www.xug-cologne.de
-
- Rekursionen-Architekt
- Beiträge: 417
- Registriert: Mo, 17. Sep 2007 18:20
- Wohnort: Senftenberg
- Kontaktdaten:
Du kannst doch auch erst sämtliche Hotkeys in der Unterklasse abfragen und falls sie nicht vorhanden sind, auf die Oberklasse verweisen.J.Renseler hat geschrieben:Grund ist folgender ...
Alle "meine" Fensterklassen leiten sich von einer Basisklasse ab die u.a. die Behandlung der Hotkeys , die für alle Fenstertypen gleich ist, übernimmt.
In der Keyboard Methode der Superklasse findet also die Behandlung der Hotkeys statt.
Wird aber ein Hotkey nicht gefunden möchte ich das wieder die standart Keyboard Methode der Subklasse genutzt wird, bzw. je nach Dialog andere Aktionen ausgeführt werden. (Aber halt auch nur dann wenn der Taste kein Hotkey hinterlegt ist).
Deshalb muss ich halt aus der Superklasse auf die Methoden Subklasse zurückgreifen können.
Gruß,
Jannik
-
- Rekursionen-Architekt
- Beiträge: 151
- Registriert: Do, 15. Nov 2007 11:40
- Wohnort: Krefeld
- Kontaktdaten:
die Abfrage der Hotkeys sollte aber in der Basisklasse geschehen da sie immer identisch ist und nur für den Fall das kein Hotkey vergeben ist soll Sie den Key an den jeweiligen Keyhandler der Subklasse weitergeben und das ganze halt möglichst allgemein gültig.
Kassensysteme für den Einzelhande http://ab-software.de
Mitglied der XUG-Cologne http://www.xug-cologne.de
Mitglied der XUG-Cologne http://www.xug-cologne.de
- Martin Altmann
- Foren-Administrator
- Beiträge: 16508
- Registriert: Fr, 23. Sep 2005 4:58
- Wohnort: Berlin
- Hat sich bedankt: 111 Mal
- Danksagung erhalten: 48 Mal
- Kontaktdaten:
Hallo Jannik,
wenn Du von einer Superklasse erbst, sind in der Subklasse alle in der Superklasse definierten Methoden bekannt und vorhanden (es gibt nur wenige Ausnahmen, die aber nur ziehen, wenn Du dies beim Definieren der Superklasse explizit angibst)!
Du brauchst also in der Subklasse nie die Methoden erneut definieren, die sind dort eh' bekannt.
Viele Grüße,
Martin
wenn Du von einer Superklasse erbst, sind in der Subklasse alle in der Superklasse definierten Methoden bekannt und vorhanden (es gibt nur wenige Ausnahmen, die aber nur ziehen, wenn Du dies beim Definieren der Superklasse explizit angibst)!
Du brauchst also in der Subklasse nie die Methoden erneut definieren, die sind dort eh' bekannt.
Viele Grüße,
Martin
Webseite mit XB2.NET und ausschließlich statischem Content in Form von HTML-Dateien: https://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: https://meldungen.altem.de/
Mitglied der XUG Osnabrück
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
-
- Rekursionen-Architekt
- Beiträge: 151
- Registriert: Do, 15. Nov 2007 11:40
- Wohnort: Krefeld
- Kontaktdaten:
Um das ganze mal etwas besser darzustellen was ich will
Code: Alles auswählen
CLASS MySuperclass
EXPORTED:
METHOD;
keyboard( nKey)
ENDCLASS
METHOD MySuperclass:keyboard( nKey)
// Hotkey behandlung
IF Hotkey gefunden
// Hotkey ausführen
ELSE
Keyhandler der jeweiligen Subklasse ausführen
END
RETURN (SELF)
CLASS MySLE FROM MySuperclass, XbpSLE
// Geänderte Methoden
ENDCLASS
CLASS MyComboBox FROM MySuperclass, XbpComboBox
// Geänderte Methoden
ENDCLASS
Kassensysteme für den Einzelhande http://ab-software.de
Mitglied der XUG-Cologne http://www.xug-cologne.de
Mitglied der XUG-Cologne http://www.xug-cologne.de
- brandelh
- Foren-Moderator
- Beiträge: 15695
- Registriert: Mo, 23. Jan 2006 20:54
- Wohnort: Germersheim
- Hat sich bedankt: 65 Mal
- Danksagung erhalten: 33 Mal
- Kontaktdaten:
Hallo Jannik,
aus einer SUPER Klasse kann man keine tiefere Ebene aufrufen - zumindest soweit ich weiß.
Aber du kannst in der SUPER Klasse ein Array mit Tastencodes und aufzurufenden codeblöcken abarbeiten. Ähnlich wie bei den Menüs würdest du die Abarbeitung inder Super Klasse programieren und das Array mit den Infos über die Sondertasten der aktuellen Klasse in das Array einstellen ... somit wäre die Verarbeitung aller Events in der SUPER Klasse ohne die Notwendigkeit auf SUBCLassen zurückzugreifen.
aus einer SUPER Klasse kann man keine tiefere Ebene aufrufen - zumindest soweit ich weiß.
Aber du kannst in der SUPER Klasse ein Array mit Tastencodes und aufzurufenden codeblöcken abarbeiten. Ähnlich wie bei den Menüs würdest du die Abarbeitung inder Super Klasse programieren und das Array mit den Infos über die Sondertasten der aktuellen Klasse in das Array einstellen ... somit wäre die Verarbeitung aller Events in der SUPER Klasse ohne die Notwendigkeit auf SUBCLassen zurückzugreifen.
Code: Alles auswählen
SuperKlasse:KeyBoard(...)
... zuerst die eigenen oder die von der Subclass prüfen ?
if len(aShortKeys)>0
x := ascan(...) // Ist die aktuelle Taste eine Sondertaste ?
if x > 0
eval(aShortKeys[x,2])
...
UnterKlasse:KeyBoard(...)
aadd(::SuperKlasse:aShortKeys, { MyKey, bMyAction } )
...
::SuperKlasse:KeyBoard(...)
Gruß
Hubert
Hubert
-
- Cut&Paste-Entwickler
- Beiträge: 21
- Registriert: Do, 20. Dez 2007 13:29
Hi Jannik;J.Renseler hat geschrieben:Um das ganze mal etwas besser darzustellen was ich will
Code: Alles auswählen
CLASS MySuperclass EXPORTED: METHOD; keyboard( nKey) ENDCLASS METHOD MySuperclass:keyboard( nKey) // Hotkey behandlung IF Hotkey gefunden // Hotkey ausführen ELSE Keyhandler der jeweiligen Subklasse ausführen END RETURN (SELF) CLASS MySLE FROM MySuperclass, XbpSLE // Geänderte Methoden ENDCLASS CLASS MyComboBox FROM MySuperclass, XbpComboBox // Geänderte Methoden ENDCLASS
ich glaube so müsste es gehen
CLASS MySuperclass
EXPORTED:
VAR self
INLINE METHOD init()
::self := ::self()
RETURN self
INLINE METHOD self()
RETURN ::&(self:className())
METHOD;
keyboard( nKey)
ENDCLASS
Wenn Du jetzt ::self:keyboard() aufrufst, hast Du die Methode aus dem obersten Kontext.
Gruß Dirk
-
- Rekursionen-Architekt
- Beiträge: 151
- Registriert: Do, 15. Nov 2007 11:40
- Wohnort: Krefeld
- Kontaktdaten:
Hallo,
danke so funktioniert es.
Ich verstehe nur noch nicht so ganz warum?
Meine Idee wäre das, die Methode className() durch den Makrooperator erst zur Laufzeit ausgeführt wird, und damit eigentlich nicht mehr in der Superklasse sondern in der Instanz meiner Subklasse.
Liege ich damit richtig??
Danke an alle und Gruß,
Jannik
danke so funktioniert es.
Ich verstehe nur noch nicht so ganz warum?
Meine Idee wäre das, die Methode className() durch den Makrooperator erst zur Laufzeit ausgeführt wird, und damit eigentlich nicht mehr in der Superklasse sondern in der Instanz meiner Subklasse.
Liege ich damit richtig??
Danke an alle und Gruß,
Jannik
Kassensysteme für den Einzelhande http://ab-software.de
Mitglied der XUG-Cologne http://www.xug-cologne.de
Mitglied der XUG-Cologne http://www.xug-cologne.de
-
- Cut&Paste-Entwickler
- Beiträge: 21
- Registriert: Do, 20. Dez 2007 13:29
-
- Rekursionen-Architekt
- Beiträge: 151
- Registriert: Do, 15. Nov 2007 11:40
- Wohnort: Krefeld
- Kontaktdaten:
Danke ... hat mir gerade ein ganzes Stück weitergeholfen.
Achja und Wilkommen im Forum
Achja und Wilkommen im Forum
Kassensysteme für den Einzelhande http://ab-software.de
Mitglied der XUG-Cologne http://www.xug-cologne.de
Mitglied der XUG-Cologne http://www.xug-cologne.de
-
- Cut&Paste-Entwickler
- Beiträge: 21
- Registriert: Do, 20. Dez 2007 13:29
-
- Rekursionen-Architekt
- Beiträge: 417
- Registriert: Mo, 17. Sep 2007 18:20
- Wohnort: Senftenberg
- Kontaktdaten:
Dafür gibt es den Vorstellungsthread http://xbaseforum.de/viewforum.php?f=9.Dirk Jucknies hat geschrieben:Vielen Dank, hab nur den richtigen Einstieg gesucht.