SUPER [ERLEDIGT]

Klassen, Objekte, Methoden, Instanzen

Moderator: Moderatoren

SUPER [ERLEDIGT]

Beitragvon Manfred » Mo, 13. Aug 2012 17: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.
Benutzeravatar
Manfred
Foren-Moderator
Foren-Moderator
 
Beiträge: 15841
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel

Re: SUPER

Beitragvon UliTs » Mo, 13. Aug 2012 21: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
UliTs
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
 
Beiträge: 2345
Registriert: Fr, 10. Feb 2006 9:51
Wohnort: Aachen

Re: SUPER

Beitragvon brandelh » Mo, 13. Aug 2012 23: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
brandelh
Foren-Moderator
Foren-Moderator
 
Beiträge: 13197
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim

Re: SUPER

Beitragvon Manfred » Di, 14. Aug 2012 6: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
Manfred
Foren-Moderator
Foren-Moderator
 
Beiträge: 15841
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel

Re: SUPER

Beitragvon brandelh » Di, 14. Aug 2012 7:09

Manfred :!:

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

Normale Variablen (LOCAL, PUBLIC, PRIVATE) haben kein SUPER :D
Gruß
Hubert
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
 
Beiträge: 13197
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim

Re: SUPER

Beitragvon Manfred » Di, 14. Aug 2012 7: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
Manfred
Foren-Moderator
Foren-Moderator
 
Beiträge: 15841
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel

Re: SUPER

Beitragvon brandelh » Di, 14. Aug 2012 7: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
brandelh
Foren-Moderator
Foren-Moderator
 
Beiträge: 13197
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim

Re: SUPER

Beitragvon Manfred » Di, 14. Aug 2012 7: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
Manfred
Foren-Moderator
Foren-Moderator
 
Beiträge: 15841
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel

Re: SUPER

Beitragvon brandelh » Di, 14. Aug 2012 7:21

Dann musst du halt tatsächlich die SUPER Klasse beim Namen nennen ;-)
Gruß
Hubert
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
 
Beiträge: 13197
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim

Re: SUPER

Beitragvon Manfred » Di, 14. Aug 2012 7: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.
Benutzeravatar
Manfred
Foren-Moderator
Foren-Moderator
 
Beiträge: 15841
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel

Re: SUPER [ERLEDIGT]

Beitragvon UliTs » Di, 14. Aug 2012 9: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
UliTs
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
 
Beiträge: 2345
Registriert: Fr, 10. Feb 2006 9:51
Wohnort: Aachen

Re: SUPER [ERLEDIGT]

Beitragvon brandelh » Di, 14. Aug 2012 10: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
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
 
Beiträge: 13197
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim

Re: SUPER [ERLEDIGT]

Beitragvon UliTs » Di, 14. Aug 2012 10: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
UliTs
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
 
Beiträge: 2345
Registriert: Fr, 10. Feb 2006 9:51
Wohnort: Aachen

Re: SUPER [ERLEDIGT]

Beitragvon Tom » Di, 14. Aug 2012 11:04

Kleiner Tipp: Einfach mal "Das Konzept von SUPER" in der Doku lesen! :wink:
Herzlich,
Tom
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
 
Beiträge: 6656
Registriert: Do, 22. Sep 2005 22:11
Wohnort: Berlin

Re: SUPER [ERLEDIGT]

Beitragvon UliTs » Di, 14. Aug 2012 11: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
UliTs
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
 
Beiträge: 2345
Registriert: Fr, 10. Feb 2006 9:51
Wohnort: Aachen

Re: SUPER [ERLEDIGT]

Beitragvon Manfred » Di, 14. Aug 2012 11: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
Manfred
Foren-Moderator
Foren-Moderator
 
Beiträge: 15841
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel

Re: SUPER [ERLEDIGT]

Beitragvon Tom » Di, 14. Aug 2012 11: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
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
 
Beiträge: 6656
Registriert: Do, 22. Sep 2005 22:11
Wohnort: Berlin

Re: SUPER [ERLEDIGT]

Beitragvon UliTs » Di, 14. Aug 2012 11: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
UliTs
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
 
Beiträge: 2345
Registriert: Fr, 10. Feb 2006 9:51
Wohnort: Aachen

Re: SUPER [ERLEDIGT]

Beitragvon Manfred » Di, 14. Aug 2012 11: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.
Benutzeravatar
Manfred
Foren-Moderator
Foren-Moderator
 
Beiträge: 15841
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel

Re: SUPER [ERLEDIGT]

Beitragvon UliTs » Di, 14. Aug 2012 12: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
UliTs
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
 
Beiträge: 2345
Registriert: Fr, 10. Feb 2006 9:51
Wohnort: Aachen

Re: SUPER [ERLEDIGT]

Beitragvon Tom » Di, 14. Aug 2012 12:09

Hassu 1.9 ohne Ess-Ell-Eins, Uli? :wink:
Herzlich,
Tom
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
 
Beiträge: 6656
Registriert: Do, 22. Sep 2005 22:11
Wohnort: Berlin

Re: SUPER [ERLEDIGT]

Beitragvon brandelh » Di, 14. Aug 2012 12:23

UliTs hat geschrieben:das verstehst Du falsch!

immer wieder erfrischend solche Kommentare zu lesen :D
Gruß
Hubert
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
 
Beiträge: 13197
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim

Re: SUPER [ERLEDIGT]

Beitragvon UliTs » Di, 14. Aug 2012 12: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: 2345
Registriert: Fr, 10. Feb 2006 9:51
Wohnort: Aachen

Re: SUPER [ERLEDIGT]

Beitragvon UliTs » Di, 14. Aug 2012 12: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
UliTs
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
 
Beiträge: 2345
Registriert: Fr, 10. Feb 2006 9:51
Wohnort: Aachen

Re: SUPER [ERLEDIGT]

Beitragvon Tom » Di, 14. Aug 2012 13: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
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
 
Beiträge: 6656
Registriert: Do, 22. Sep 2005 22:11
Wohnort: Berlin


Zurück zu OOP

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast