Das Forentreffen 2018 findet am 20./21. April in Dresden statt. Weitere Infos hier
Zur Homepage des Deutschsprachige Xbase-Entwickler e. V.
Xbase++-Wiki des Deutschsprachige Xbase-Entwickler e. V.

SUPER [ERLEDIGT]

Klassen, Objekte, Methoden, Instanzen

Moderator: Moderatoren

Antworten
Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 16942
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel

SUPER [ERLEDIGT]

Beitrag von Manfred » Mo, 13. Aug 2012 18:05

Hm,

irgendwie habe ich das wohl in den falschen Hals bekommen. Ich war bis gerade der Meinung, dass man mit SUPER: die oberste Klasse aufrufen kann. Ich möchte gerne eine Methode überschreiben, aber zwischendurch die überschriebene Methode benutzen. Geht das unter Xbase++, oder bringe ich was durcheinander? Ich stehe derzeit wirklich auf dem Schlauch.
Gruß Manfred
Mitglied der XUG Leverkusen
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.

UliTs
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2449
Registriert: Fr, 10. Feb 2006 9:51
Wohnort: Aachen
Kontaktdaten:

Re: SUPER

Beitrag von UliTs » Mo, 13. Aug 2012 22:26

Hallo Manfred,

mit SUPER werden bei xBase 1.90355 (vorher gab es SUPER noch nicht) bei abgeleiteten Methoden die entsprechenden Methoden der Superklassen aufgerufen.
Achtung!
Bei

Code: Alles auswählen

CLASS A
...
CLASS B FROM A
...
CLASS C FROM B
ist B eine Superklasse von C, A jedoch KEINE Superklasse von C!
Also wird mit SUPER in einer abgeleiteten Methode von C auch NUR die entsprechende Methode in B (mit den gleichen Parametern) aufgerufen!

Alternativ könnte man auch selbst die Methode der Superklasse aufrufen (geht auch in xBase 1.90331):

Code: Alles auswählen

METHOD C:Linie()
LOCAL xResult
  ...
  xResult := ::B:Linie()
  ...
RETURN( xResult )
Im letzteren Fall kann man auch die Methode der Klasse A aufrufen (sicher nur sehr selten sinnvoll):

Code: Alles auswählen

METHOD C:Linie()
LOCAL xResult
  ...
  xResult := ::B:Linie()
  ::A:Linie()
  ...
RETURN( xResult )
Uli
-------
Mitglied XuG Cologne
Mitglied XuG Osnabrück

Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 13765
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Kontaktdaten:

Re: SUPER

Beitrag von brandelh » Di, 14. Aug 2012 0:09

Manfred hat geschrieben:Ich war bis gerade der Meinung, dass man mit SUPER: die oberste Klasse aufrufen kann.
nicht die oberSTE (also Basis-Klasse) sondern nur eine Ebene also die direkte Super-Klasse.

Angenommen

XbpSle() => MySuperSle() => MyKleinSle() => MeineAktuelleKlasse()
SUPER:.... steht hier für
::MyKleinSle:....

Laut DOKU kann man auch einfach

SUPER

also ohne etwas danach schreiben, bei meinen Tests ist dann aber der Debugger um eine Zeile verrutscht.
Möglich dass dies mittlerweile korrigiert wurde :wink:
Gruß
Hubert

Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 16942
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel

Re: SUPER

Beitrag von Manfred » Di, 14. Aug 2012 7:55

Ja,

das denke ich doch auch so, aber irgendwas mache ich da wohl verkehrt.

Code: Alles auswählen

oDialog := haupt():new()
oDialog:machedas()
SUPER:oDialog:machedas()
SUPER wird als Fehler, bzw. undeklariert angemeckert und wenn das Programm dann an die Stelle kommt steigt es mit einer Fehlermeldung aus. Muß denn oDialog weggelassen werden? Kann ich mir nicht vorstellen, woher soll denn dann der Compiler wissen, was ich aufrufen will?
Gruß Manfred
Mitglied der XUG Leverkusen
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.

Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 13765
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Kontaktdaten:

Re: SUPER

Beitrag von brandelh » Di, 14. Aug 2012 8:09

Manfred :!:

:: / SELF und SUPER funktionieren immer nur INNERHALB der Methode ...

Normale Variablen (LOCAL, PUBLIC, PRIVATE) haben kein SUPER :D
Gruß
Hubert

Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 16942
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel

Re: SUPER

Beitrag von Manfred » Di, 14. Aug 2012 8:11

Hm,

dachte ich mir. Aber wie komme ich an die überschriebene Methode dran?
Gruß Manfred
Mitglied der XUG Leverkusen
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.

Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 13765
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Kontaktdaten:

Re: SUPER

Beitrag von brandelh » Di, 14. Aug 2012 8:16

Nachdem du das so fragst, bin ich mir fast ein bischen unsicher ... vorausgesetzt, die Methoden sind exported (sonst geht gar nix von außen):

oDlg:IrgendEineMethode() ...
oDlg:SUPER:IrgendEineMethode() ... das sollte gehen, habe es aber nicht probiert
oDlg:XbpDialog:IrgendEineMethode() ... sowas geht, z.B. bei combobox braucht man das um zum SLE zu kommen ...
Gruß
Hubert

Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 16942
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel

Re: SUPER

Beitrag von Manfred » Di, 14. Aug 2012 8:19

Nö,

wird auch angemeckert als unbekannte Variable.

also oDialog:super:machwas()
Gruß Manfred
Mitglied der XUG Leverkusen
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.

Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 13765
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Kontaktdaten:

Re: SUPER

Beitrag von brandelh » Di, 14. Aug 2012 8:21

Dann musst du halt tatsächlich die SUPER Klasse beim Namen nennen ;-)
Gruß
Hubert

Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 16942
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel

Re: SUPER

Beitrag von Manfred » Di, 14. Aug 2012 8:22

Aaaber,

wenn man

Code: Alles auswählen

oDialog:namedereigenensuperklasse:machewas() 
aufruft, dann geht es.

Hubert war schneller.

Wäre mit Super aber einfacher, denn evtl. weiß man ja nicht immer, wie die Superklasse heißen könnte, wenn es was Fremdes ist.
Gruß Manfred
Mitglied der XUG Leverkusen
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.

UliTs
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2449
Registriert: Fr, 10. Feb 2006 9:51
Wohnort: Aachen
Kontaktdaten:

Re: SUPER [ERLEDIGT]

Beitrag von UliTs » Di, 14. Aug 2012 10:50

Diese Vorgehensweise widerspricht der Kapselung von Klassen!
Es wundert mich, das xBase++ so etwas erlaubt. Meines Erachtens handelt es sich um einen Compilerfehler :) .

Uli
-------
Mitglied XuG Cologne
Mitglied XuG Osnabrück

Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 13765
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Kontaktdaten:

Re: SUPER [ERLEDIGT]

Beitrag von brandelh » Di, 14. Aug 2012 11:30

Exportierte Methoden wurden ja genau deswegen exportiert, weil der Endanwender etwas mit denen machen will ;-)
Ansonsten hätte der Ersteller protected oder gar hidden gewählt 8)
Gruß
Hubert

UliTs
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2449
Registriert: Fr, 10. Feb 2006 9:51
Wohnort: Aachen
Kontaktdaten:

Re: SUPER [ERLEDIGT]

Beitrag von UliTs » Di, 14. Aug 2012 11:58

brandelh hat geschrieben:Exportierte Methoden wurden ja genau deswegen exportiert, weil der Endanwender etwas mit denen machen will ;-)
Ansonsten hätte der Ersteller protected oder gar hidden gewählt 8)
Hallo Hubert,
das verstehst Du falsch!
Wenn Du eine Klasse ableitest und eine bereits bestehende Methode neu schreibst, wird die bisherige Methode dadurch gekapselt!
Wenn Du "protected" oder "hidden" wählst, kann außerhalb der Klasse nicht mehr auf die Methode zugegriffen werden. Und das will der Ersteller in diesem Fall ja NICHT.
ABER der Ersteller MUSS eine Möglichkeit haben, in einer abgeleiteten Klasse den Zugriff auf die Methode der SUPER-Klasse zu verhindern! Und das ist sonst nicht möglich!

Uli
-------
Mitglied XuG Cologne
Mitglied XuG Osnabrück

Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 6797
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Kontaktdaten:

Re: SUPER [ERLEDIGT]

Beitrag von Tom » Di, 14. Aug 2012 12:04

Kleiner Tipp: Einfach mal "Das Konzept von SUPER" in der Doku lesen! :wink:
Herzlich,
Tom

UliTs
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2449
Registriert: Fr, 10. Feb 2006 9:51
Wohnort: Aachen
Kontaktdaten:

Re: SUPER [ERLEDIGT]

Beitrag von UliTs » Di, 14. Aug 2012 12:15

Tom hat geschrieben:Kleiner Tipp: Einfach mal "Das Konzept von SUPER" in der Doku lesen! :wink:
Hallo Tom,
irgendwie bin ich zu blöd, in der Dokumentation etwas über "SUPER" zu finden.
Wie heißt die Hilfe-Datei, die Du benutzt und welches Datum hat sie?

Uli
-------
Mitglied XuG Cologne
Mitglied XuG Osnabrück

Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 16942
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel

Re: SUPER [ERLEDIGT]

Beitrag von Manfred » Di, 14. Aug 2012 12:18

Uli,

ich kam auch erst darauf, als ich unter SUCHEn ging und da SUPER eintippte
Gruß Manfred
Mitglied der XUG Leverkusen
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.

Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 6797
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Kontaktdaten:

Re: SUPER [ERLEDIGT]

Beitrag von Tom » Di, 14. Aug 2012 12:19

Hallo, Uli.

Ich benutze die Referenzdoku zu 1.9 SL1 (10.4.2009). Tatsächlich gibt es im Index keine Treffer zu "SUPER", aber die Suchanfrage "Das Konzept von SUPER" sollte Dich zum entsprechenden Thema führen.
Herzlich,
Tom

UliTs
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2449
Registriert: Fr, 10. Feb 2006 9:51
Wohnort: Aachen
Kontaktdaten:

Re: SUPER [ERLEDIGT]

Beitrag von UliTs » Di, 14. Aug 2012 12:29

Hallo Tom,

die meisten Dateien haben bei mir auch das Datum 10.04.2009.
Aber die Hilfedatei xpplang20.chm im Verzeichnis Alaska/xppw32/help hat das Datum 03.05.2006. Ich finde auch nichts anderes :-(
Heißt die Hilfedatei bei Euch auch so?

Uli
-------
Mitglied XuG Cologne
Mitglied XuG Osnabrück

Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 16942
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel

Re: SUPER [ERLEDIGT]

Beitrag von Manfred » Di, 14. Aug 2012 12:32

Uli,

im verzeichnis Book und dann xppref.hlp
Gruß Manfred
Mitglied der XUG Leverkusen
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.

UliTs
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2449
Registriert: Fr, 10. Feb 2006 9:51
Wohnort: Aachen
Kontaktdaten:

Re: SUPER [ERLEDIGT]

Beitrag von UliTs » Di, 14. Aug 2012 13:00

Danke!
Nichts desto trotz ist die Datei bei mir leider von 2006 :-( .
Ich mach mich mal auf die Suche ...

Uli
-------
Mitglied XuG Cologne
Mitglied XuG Osnabrück

Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 6797
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Kontaktdaten:

Re: SUPER [ERLEDIGT]

Beitrag von Tom » Di, 14. Aug 2012 13:09

Hassu 1.9 ohne Ess-Ell-Eins, Uli? :wink:
Herzlich,
Tom

Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 13765
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Kontaktdaten:

Re: SUPER [ERLEDIGT]

Beitrag von brandelh » Di, 14. Aug 2012 13:23

UliTs hat geschrieben:das verstehst Du falsch!
immer wieder erfrischend solche Kommentare zu lesen :D
Gruß
Hubert

UliTs
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2449
Registriert: Fr, 10. Feb 2006 9:51
Wohnort: Aachen
Kontaktdaten:

Re: SUPER [ERLEDIGT]

Beitrag von UliTs » Di, 14. Aug 2012 13:47

Tom hat geschrieben:Hassu 1.9 ohne Ess-Ell-Eins, Uli? :wink:
Ich arbeite damit bisher zwangsweise nur selten sondern mit der 1.90.311.
Die 1.90.355 ist doch SL1 oder meinst Du noch etwas anderes?

Uli
-------
Mitglied XuG Cologne
Mitglied XuG Osnabrück

UliTs
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2449
Registriert: Fr, 10. Feb 2006 9:51
Wohnort: Aachen
Kontaktdaten:

Re: SUPER [ERLEDIGT]

Beitrag von UliTs » Di, 14. Aug 2012 13:48

brandelh hat geschrieben:immer wieder erfrischend solche Kommentare zu lesen :D
Oh Sorry...
Ich wollte Dir nicht auf die Füße treten :shock: . Hätte wohl besser "Ich bin anderer Meinung" schreiben sollen :) .
Uli
-------
Mitglied XuG Cologne
Mitglied XuG Osnabrück

Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 6797
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Kontaktdaten:

Re: SUPER [ERLEDIGT]

Beitrag von Tom » Di, 14. Aug 2012 14:59

Hallo, Uli.

Ob das SUPER-Konzept erst mit SL1 (355) eingeführt wurde oder schon vorher, kann ich Dir nicht sagen (die Doku tut's nämlich auch nicht), aber ich finde in der Hilfe der 331 den entsprechenden Hilfetext auch nicht.
Herzlich,
Tom

Antworten