SUPER [ERLEDIGT]

Klassen, Objekte, Methoden, Instanzen

Moderator: Moderatoren

Antworten
Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 21165
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 206 Mal
Danksagung erhalten: 67 Mal

SUPER [ERLEDIGT]

Beitrag von Manfred »

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 Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
UliTs
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2828
Registriert: Fr, 10. Feb 2006 9:51
Wohnort: Aachen
Hat sich bedankt: 259 Mal
Danksagung erhalten: 12 Mal
Kontaktdaten:

Re: SUPER

Beitrag von UliTs »

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: 15688
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: SUPER

Beitrag von brandelh »

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: 21165
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 206 Mal
Danksagung erhalten: 67 Mal

Re: SUPER

Beitrag von Manfred »

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 Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15688
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: SUPER

Beitrag von brandelh »

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: 21165
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 206 Mal
Danksagung erhalten: 67 Mal

Re: SUPER

Beitrag von Manfred »

Hm,

dachte ich mir. Aber wie komme ich an die überschriebene Methode dran?
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15688
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: SUPER

Beitrag von brandelh »

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: 21165
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 206 Mal
Danksagung erhalten: 67 Mal

Re: SUPER

Beitrag von Manfred »

Nö,

wird auch angemeckert als unbekannte Variable.

also oDialog:super:machwas()
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15688
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: SUPER

Beitrag von brandelh »

Dann musst du halt tatsächlich die SUPER Klasse beim Namen nennen ;-)
Gruß
Hubert
Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 21165
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 206 Mal
Danksagung erhalten: 67 Mal

Re: SUPER

Beitrag von Manfred »

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 Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
UliTs
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2828
Registriert: Fr, 10. Feb 2006 9:51
Wohnort: Aachen
Hat sich bedankt: 259 Mal
Danksagung erhalten: 12 Mal
Kontaktdaten:

Re: SUPER [ERLEDIGT]

Beitrag von UliTs »

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: 15688
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: SUPER [ERLEDIGT]

Beitrag von brandelh »

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: 2828
Registriert: Fr, 10. Feb 2006 9:51
Wohnort: Aachen
Hat sich bedankt: 259 Mal
Danksagung erhalten: 12 Mal
Kontaktdaten:

Re: SUPER [ERLEDIGT]

Beitrag von UliTs »

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: 9345
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 100 Mal
Danksagung erhalten: 359 Mal
Kontaktdaten:

Re: SUPER [ERLEDIGT]

Beitrag von Tom »

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: 2828
Registriert: Fr, 10. Feb 2006 9:51
Wohnort: Aachen
Hat sich bedankt: 259 Mal
Danksagung erhalten: 12 Mal
Kontaktdaten:

Re: SUPER [ERLEDIGT]

Beitrag von UliTs »

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: 21165
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 206 Mal
Danksagung erhalten: 67 Mal

Re: SUPER [ERLEDIGT]

Beitrag von Manfred »

Uli,

ich kam auch erst darauf, als ich unter SUCHEn ging und da SUPER eintippte
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 9345
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 100 Mal
Danksagung erhalten: 359 Mal
Kontaktdaten:

Re: SUPER [ERLEDIGT]

Beitrag von Tom »

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: 2828
Registriert: Fr, 10. Feb 2006 9:51
Wohnort: Aachen
Hat sich bedankt: 259 Mal
Danksagung erhalten: 12 Mal
Kontaktdaten:

Re: SUPER [ERLEDIGT]

Beitrag von UliTs »

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: 21165
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 206 Mal
Danksagung erhalten: 67 Mal

Re: SUPER [ERLEDIGT]

Beitrag von Manfred »

Uli,

im verzeichnis Book und dann xppref.hlp
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
UliTs
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2828
Registriert: Fr, 10. Feb 2006 9:51
Wohnort: Aachen
Hat sich bedankt: 259 Mal
Danksagung erhalten: 12 Mal
Kontaktdaten:

Re: SUPER [ERLEDIGT]

Beitrag von UliTs »

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: 9345
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 100 Mal
Danksagung erhalten: 359 Mal
Kontaktdaten:

Re: SUPER [ERLEDIGT]

Beitrag von Tom »

Hassu 1.9 ohne Ess-Ell-Eins, Uli? :wink:
Herzlich,
Tom
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15688
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: SUPER [ERLEDIGT]

Beitrag von brandelh »

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: 2828
Registriert: Fr, 10. Feb 2006 9:51
Wohnort: Aachen
Hat sich bedankt: 259 Mal
Danksagung erhalten: 12 Mal
Kontaktdaten:

Re: SUPER [ERLEDIGT]

Beitrag von UliTs »

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: 2828
Registriert: Fr, 10. Feb 2006 9:51
Wohnort: Aachen
Hat sich bedankt: 259 Mal
Danksagung erhalten: 12 Mal
Kontaktdaten:

Re: SUPER [ERLEDIGT]

Beitrag von UliTs »

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: 9345
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 100 Mal
Danksagung erhalten: 359 Mal
Kontaktdaten:

Re: SUPER [ERLEDIGT]

Beitrag von Tom »

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