überschreiben verhindern ?

Klassen, Objekte, Methoden, Instanzen

Moderator: Moderatoren

Antworten
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 11929
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg

überschreiben verhindern ?

Beitrag von AUGE_OHR » Mi, 15. Jun 2011 5:46

hi,

üblicherweise schreibt man ja eine "eigene" Method um das "original" zu "überschreiben".
wie kann ich aber nun verhindern das ich "unwissentlich" den selben Namen für "meine" Method verwende ?

der Linker gibt mir da keine "Warnung" ... oder ?
gruss by OHR
Jimmy

Benutzeravatar
Herbert
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 1932
Registriert: Do, 14. Aug 2008 0:22
Wohnort: Gmunden am Traunsee, Österreich
Kontaktdaten:

Re: überschreiben verhindern ?

Beitrag von Herbert » Mi, 15. Jun 2011 12:56

Deshalb kannst du PROTECTED Variablen und Methoden erstellen! So ist's egal, ob eine gleichnamige Methode in einer der Superklassen besteht.
Stefen hat irgendwann doch darüber erzählt. Sollten noch Folien darüber auffindbar sein.
Grüsse Herbert
Immer in Bewegung...

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

Re: überschreiben verhindern ?

Beitrag von brandelh » Mi, 15. Jun 2011 15:13

Hallo Herbert,
ich denke, dass dies so nicht stimmt.
Auch eine Protected Methode / iVAR der Basisklasse kann man in einer abgeleiteten durch eigene ersetzen oder erweitern
Protected schützt nur vor dem Zugriff von außen auf das Objekt.

Vermutlich meintest du aber was anderes, in der Hilfe zu CLASS steht (ab welcher Version weiß ich nicht ?)

FREEZE - Durch die Verwendung von FREEZE wird verhindert, daß eine Klasse durch eine andere Klasse mit dem gleichen Namen ersetzt wird ... Subclassing ist erlaubt.
FINAL - endgültig, kein Subclassing und kein ableiten.

Da aber normalerweise in Xbase++ subclassing genauso erlaubt ist, wie komplettes ersetzen (ob es sinnvoll ist, ist eine andere Frage !!!) helfen beide nicht bei Jimmys Absicht.
Gruß
Hubert

J.Renseler
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 151
Registriert: Do, 15. Nov 2007 11:40
Wohnort: Krefeld
Kontaktdaten:

Re: überschreiben verhindern ?

Beitrag von J.Renseler » Do, 16. Jun 2011 10:53

Hallo,

dafür gibt es auch bei Methoden ein FINAL Attribut !

Code: Alles auswählen

CLASS Test

EXPORTED:
     METHOD init()
     FINAL METHOD test_final()
ENDCLASS
Diese Methode kann auch in Subklassen nicht "überschrieben" werden. Das Attribut kann jedoch durch "Override" in der Subklasse igoriert werden.
Kassensysteme für den Einzelhande http://ab-software.de
Mitglied der XUG-Cologne http://www.xug-cologne.de

Benutzeravatar
Herbert
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 1932
Registriert: Do, 14. Aug 2008 0:22
Wohnort: Gmunden am Traunsee, Österreich
Kontaktdaten:

Re: überschreiben verhindern ?

Beitrag von Herbert » Do, 16. Jun 2011 14:55

brandelh hat geschrieben:Hallo Herbert,
ich denke, dass dies so nicht stimmt.
Auch eine Protected Methode / iVAR der Basisklasse kann man in einer abgeleiteten durch eigene ersetzen oder erweitern
Protected schützt nur vor dem Zugriff von außen auf das Objekt.
hmm. Laut Hilfe mit richtigem Ensetzen im Code, sollte es aber klappen.
"Die Member-Variablen und Methoden, welche nach PROTECTED: deklariert sind, sind nur innerhalb des Programmcodes für die Methoden der deklarierten Klasse und ihrer zukünftigen Subklassen sichtbar und können nur innerhalb von diesen Methoden benutzt werden. "
Ok, wenn ich bei FINAL resp. OVERRIDE lese (da dämmerts, was Steffen in Rösrath im MAi 2009 sagte), hast du recht. Es ging um diese beiden Schlüsselworte. Wer die Unterlagen noch findet, weiss dann wie's läuft.
Grüsse Herbert
Immer in Bewegung...

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

Re: überschreiben verhindern ?

Beitrag von brandelh » Fr, 17. Jun 2011 8:52

Genau, aber JIMMY möchte eine Fehlermeldung sehen sobald er eine vorhandene Xbp-Klassen Methode in einer Subclasse ableitet.
Dies ist nicht möglich, da bei diesen - ZUM GLÜCK - eine Ableitung ausdrücklich vorgesehen ist.
Ehrlich gesagt wäre ICH ziemlich verärgert, wenn ich für alle überladenen Methoden Warnungen bekommen würde :wink:
Gruß
Hubert

Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 11929
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg

Re: überschreiben verhindern ?

Beitrag von AUGE_OHR » Fr, 17. Jun 2011 9:17

brandelh hat geschrieben:Genau, aber JIMMY möchte eine Fehlermeldung sehen sobald er eine vorhandene Xbp-Klassen Methode in einer Subclasse ableitet.
yup ... doppelte Function oder Procedure Name bekommt man angezeigt ... wenn die nicht STATIC sind.
auch doppelte #define werden doch angemeckert ... deshalb dachte ich frage doch mal
brandelh hat geschrieben:Dies ist nicht möglich, da bei diesen - ZUM GLÜCK - eine Ableitung ausdrücklich vorgesehen ist.
Ehrlich gesagt wäre ICH ziemlich verärgert, wenn ich für alle überladenen Methoden Warnungen bekommen würde :wink:
wenn es eine "Schalter" beim linken gäbe der einen in "unbeabsichtigten" Fall warnen könnte ... dann hätte ich eher eine Idee gehabt wo ich hätte suchen müssen.

ok, danke für euer Kommentare. dann werde ich bis zur "FINAL" DLL / LIB warten und dann noch mal testen wie man in einen solchen Fall darauf reagiert.
gruss by OHR
Jimmy

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

Re: überschreiben verhindern ?

Beitrag von brandelh » Fr, 17. Jun 2011 9:21

Hi,

eigene Methoden zum Ende mit /* ...*/ auskommentieren, und kompilieren.
Wenn sie NICHT als fehlend gemeldet werden, gibt es sie schon in der Basisklasse ;-)
Oder aber einfach eigenen Methoden ein Kürzel voranstellen:

Method MyXYZ() oder AO_XYZ() ... so kann jeder sofort erkennen, das sollte eine eigene sein.
Gruß
Hubert

Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 11929
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg

Re: überschreiben verhindern ?

Beitrag von AUGE_OHR » Fr, 17. Jun 2011 9:31

brandelh hat geschrieben:Method MyXYZ() oder AO_XYZ() ... so kann jeder sofort erkennen, das sollte eine eigene sein.
ja ich sollte wieder zur "volle" Schreibweise zurück kehren.
ich habe nun den Stil von Pablo mit "INLINE METHOD abcd" übernommen und es in der falschen Class gehabt
... und den Fehler nicht verstanden ... und gesucht ... bis ich merkte was ich gemacht hab :banghead:
gruss by OHR
Jimmy

Antworten