Vererbung

Klassen, Objekte, Methoden, Instanzen

Moderator: Moderatoren

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

Beitrag von Manfred »

und weiter gehts...

ich arbeite mich langsam voran.

Wenn ich ein SLE von SLEPic erben lasse, dann wird doch die Keyboard Methode des XBPSLE von der von SLEPic überladen!?

Wenn ich jetzt auch noch meinem von SLEPic erbenden Objekt ein

Code: Alles auswählen

objekt := SLEPic():new()
objekt:create()
objekt:keyboard := {|nKey,x,o| tasten(o)}
überlade ich dann noch was, oder was passiert dann? Ich habe gerade festgestellt, dass zuerst die SLEPic Methode und danach die von mir geschriebene aufgerufen wird. Das paßt mir natürlich jetzt gut in den Kram, aber was geht da vor sich? Oder verwechsel ich hier etwas?
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
Martin Altmann
Foren-Administrator
Foren-Administrator
Beiträge: 16502
Registriert: Fr, 23. Sep 2005 4:58
Wohnort: Berlin
Hat sich bedankt: 111 Mal
Danksagung erhalten: 48 Mal
Kontaktdaten:

Beitrag von Martin Altmann »

Hallo Manfred,
eigentlich müsste Dein :keyboard-slot vor dem :create zugewiesen werden.
Und wenn Du dann auch den :keyboard-slot Deiner Superklasse aufrufen willst, so müsstest Du das dann in Deiner Funktion tasten() machen...

Viele Grüße,
Martin
:grommit:
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.
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

Beitrag von Manfred »

Sorry Martin,

wird auch vor dem create() zugewiesen.

Aber die Reihenfolge ist wirklich so, wie ich es schrieb. Erst kommt der von SLEPic und dann mein eigener. Ohne etwas extra anzugeben.
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
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

Beitrag von Manfred »

Hi,

es geht weiter.

Mit dem HIDDEN, das verstehe ich auch noch nicht bis ins kleinste Detail.
1) Deklaration einer HIDDEN VAR in der Superklasse
2) Aufruf einer Superklassenmethode über eine Instanz
3) dann Aufruf aus dieser Methode einer Superklassenmethode
4) die HIDDEN Var ist nicht bekannt.

Wo denke ich hier falsch? Ruft die Superklassenmethode nicht eine Superklassenmethode auf und sollte deshalb die HIDDEN Var kennen?
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: 15689
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Beitrag von brandelh »

Hallo Manfred,

HIDDEN ist genau dafür da, dass NUR genau diese Ebene darauf zugreifen kann. Keine SUPER und keine ABGELEITETEN !

Im Prinzip wie eine LOCAL, nur dass die eigenen Methoden darauf zugreifen können.
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

Beitrag von Manfred »

Hi Hubert,

eigentlich alles klar, aber ich kriege es nicht unter einen Hut.

Code: Alles auswählen

class test
   HIDDEN
   VAR iVar

   EXPORTED:
    method eins, zwei
endclass

method test:eins()
      ::zwei()
return self

method test:zwei()
       ::iVar := 1
return self

procedure main()
     probe := test():new()

     probe:eins()
return
So müßte es sein, was ich in etwa machen möchte. Das klappt aber nicht. Wie soll ich denn sonst die Methode aufrufen, wenn nicht so? Irgendwer muß doch das Recht haben iVar anzusprechen.

Es ist jetzt nur ein Test, die Lösung mit iVar muß jetzt nicht so sein. Ich wollte nur testen was passiert. Und jetzt verstehe ich das Ergebnis nicht so ganz.
Zuletzt geändert von Manfred am Di, 22. Jul 2008 14:41, insgesamt 1-mal geändert.
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: 15689
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Beitrag von brandelh »

Hallo Manfred,

ich vermute du erhälst die Fehlermeldung in dieser Zeile:

Code: Alles auswählen

procedure main() 
     probe := test():new() 

[color=red]     probe:eins() [/color]
return 
und warum ?

Code: Alles auswählen

class test 
   HIDDEN 
   VAR iVar 

    method eins, zwei 
endclass 
Erstens ist nicht nur deine iVar hidden, sondern auch deine Methoden ...
wer in MAIN oder sonst wo

Code: Alles auswählen

oObject:Methode()  
oder

Code: Alles auswählen

oObject:iVar
aufrufen will, muss diese von außen zugänglich machen, also EXPORTED !

Der Code z.B. ist völlig OK:

Code: Alles auswählen

method test:zwei() 
       ::iVar := 1 
return self 
innerhalb von einer Methode von test darf man auf hidden Variablen und Methoden zugreifen. Auch z.B. das wäre OK:

Code: Alles auswählen

method test:zwei() 
       ::iVar := 1 
       ::eins()
return self 
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

Beitrag von Manfred »

Sorry Hubert,

ich Pappnase. Habe es 3x durchgelesen und 3x überlesen. Natürlich sind die Methoden Exported.

Ich habe es geändert.
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: 15689
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Beitrag von brandelh »

Hi,

laut DOKU ist HIDDEN standard, also wenn du nichts reinschreibst, wirds auch HIDDEN.
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

Beitrag von Manfred »

ja, öhm,

aber ich verstehe die Aussage von Dir jetzt nicht.

Die Var ist Hidden, die Methoden nicht.
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: 15689
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Beitrag von brandelh »

Hallo Manfred,

ich meinte folgendes:

Code: Alles auswählen

class test 
   HIDDEN:
   VAR iVar 

   EXPORTED: 
    method eins, zwei 
endclass
und

Code: Alles auswählen

class test 
   VAR iVar 

   EXPORTED: 
    method eins, zwei 
endclass
sind identisch, da weder EXPORTED: noch PROTECTED: definiert wurde, nimmt der compiler HIDDEN: an.
Das wäre z.B. alles HIDDEN:

Code: Alles auswählen

class test 
   VAR iVar 
    method eins, zwei 
endclass
nun sehe ich aber auch, dass du oben dein Beispiel geändert hast ... damit versteht natürlich niemand mehr um was es hier eigentlich ging ;-)
und ich weiß nun auch nicht ob deine Frage geklärt oder immer noch offen ist :?
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

Beitrag von Manfred »

Hi Hubert,

wir sind wie ein altes Ehepaar: wir reden gerne aneinander vorbei :lol: :lol:

Ich hatte ja erwähnt, dass ich es falsch aufgeschrieben hatte. Und selbst bei mehrmaligem Lesen es mir nicht aufgefallen war, das ich es vergessen habe.

Also das Problem ist nicht aus der Welt. Ich verstehe nicht, warum es nicht klappt.
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: 15689
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Beitrag von brandelh »

Hallo Manfred,

dann solltest du mal die Fehlermeldung und den Quellcode der dazu führt (inkl. Zeilennummern) veröffentlichen, damit wir sehen können was er anmeckert.
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

Beitrag von Manfred »

Hi Hubert,

Du hast Recht. Es ist mir entfallen, weil es in einer eigenen Routine landet und die sagt nur, das es gekracht hat. Aber die Meldung besagt: Zugriff auf Member Variable nicht erlaubt.
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!!
Antworten