Das Forentreffen 2018 findet am 20./21. April in Dresden statt. Weitere Infos hier
Anmeldungen zum Forentreffen 2018 sind auf der Anmeldeseite möglich
Zur Homepage des Deutschsprachige Xbase-Entwickler e. V.
Xbase++-Wiki des Deutschsprachige Xbase-Entwickler e. V.

HIDDEN vs. PROTECT [erledigt]

Klassen, Objekte, Methoden, Instanzen

Moderator: Moderatoren

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

HIDDEN vs. PROTECT [erledigt]

Beitrag von AUGE_OHR » Do, 17. Sep 2015 9:27

hi,

ich habe in meiner DXE LIB "aufgeräumt" und die internen Methoden umdeklariert von EXPORTED nach PROTECT.
Es ging mir darum das die "internen" Methoden nicht vom User genutzt werden sollten ... auch nicht wenn er eine Sub Class erstellt !

nun steht unter PROTECT
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.
Frage : bedeutet das, mit Sub Classing, die PROTECT Methoden "sichtbar" werden ?

nun gibt es ja noch HIDDEN
Die Member-Variablen und Methoden, welche nach HIDDEN: deklariert sind, sind nur innerhalb des Programmcodes für die Methoden der deklarierten Klasse sichtbar und können nur innerhalb von diesen Methoden abgefragt bzw. aufgerufen werden.
Sie sind weder in Subklassen noch im restlichen Programm sichtbar.
Frage : wäre also HIDDEN noch restriktiver als PROTECT ?

nun habe ich mir den Demo Code angesehen

Code: Alles auswählen

    CLASS classA 
      VAR varA                         // Sichtbarkeit ist HIDDEN: 
 
      EXPORTED: 
      VAR varB, varC                   // Global sichtbar 
      METHOD methodA, methodB 
 
      HIDDEN: 
      VAR varD, varE                   // Nur in Methoden von ClassA 
      METHOD methodC, methodD          // sichtbar 

    ENDCLASS 
Frage : wieso wurde "varA" nicht unter HIDDEN plaziert ... wenn es doch HIDDEN sein soll ?
Zuletzt geändert von AUGE_OHR am Sa, 19. Sep 2015 3:28, insgesamt 1-mal geändert.
gruss by OHR
Jimmy

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

Re: HIDDEN vs. PROTECT

Beitrag von brandelh » Do, 17. Sep 2015 11:27

Code: Alles auswählen

Frage : bedeutet das, mit Sub Classing, die PROTECT Methoden "sichtbar" werden ?
genau das bedeutet das, wenn man möchte dass die OBJEKTE von außen eine Mehtode nicht nutzen können, aber in der (abgeleiten) die Methoden genutzt werden sollen, dann ist PROTECT die richtige Auswahl.

Wenn du willst, dass NIEMAND diese nutzen kann - für interne Sachen sicher ab und an sinnvoll - dann nutzt man HIDDEN ...

Warum dies unten HIDDEN ist, wenn NIX dasteht ... schauen wir ins Handbuch:
Handbuch hat geschrieben:Wenn kein allgemeines Sichtbarkeitsattribut angegeben ist, werden alle Member-Variablen und Methoden standardmäßig als HIDDEN: angelegt,
d.h. sie sind außerhalb des Programmcodes von Methoden der Klasse nicht sichtbar.
das Beispiel stimmt, da HIDDEN der DEFAULT Wert ist.
Gruß
Hubert

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

Re: HIDDEN vs. PROTECT

Beitrag von Tom » Do, 17. Sep 2015 13:20

HIDDEN bedeutet nach meinem Dafürhalten, dass Methoden und Variablen protected sind und zugleich nicht vererbt werden. Methoden mit diesem Attribut können also innerhalb des Codes der Superklasse selbst verwendet werden, nicht jedoch von außen (oObject:MachWas() schlägt fehl, aber ::MachWas im Klassencode geht), aber im Code der abgeleiteten Klasse gibt es sie schlicht überhaupt nicht.
Herzlich,
Tom

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

Re: HIDDEN vs. PROTECT

Beitrag von brandelh » Do, 17. Sep 2015 14:36

Tom hat geschrieben:HIDDEN bedeutet nach meinem Dafürhalten, dass Methoden und Variablen protected sind und zugleich nicht vererbt werden.
das ist eine gute Frage ... ob versteckt oder nicht, kann man in einer abgeleiteten Klasse eine neue "Protected" Methode / Objekt neu anlegen,
das den gleichen Namen wie eine HIDDEN Methode/var der darüberliegenden hat ... ?

Wenn JA, dann hat Tom recht und sie wurde gar nicht weitervererbt,
Wenn Nein, dann wird sie zwar vererbt, ist aber unsichtbar ;-)
Gruß
Hubert

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

Re: HIDDEN vs. PROTECT

Beitrag von Tom » Do, 17. Sep 2015 14:50

Sie wäre aber dennoch weiterhin in der Superklasse verfügbar. Ruft man also in der abgeleiteten Klasse eine Methode der Superklasse auf, die eine HIDDEN-Methode der Superklasse aufruft, müsste das gehen.
Herzlich,
Tom

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

Re: HIDDEN vs. PROTECT

Beitrag von AUGE_OHR » Sa, 19. Sep 2015 3:27

hi,

Danke euch das ihr es noch mal klar gestellt habt wozu HIDDEN verwendet werden soll.

es geht mir bei HIDDEN weniger darum den Anwender "einzuschränken" als darum "aufzuräumen" was der User tatsächlich braucht.
was übrig bleibt sind die EXPORTED: welche ich dann dokumentieren muss ;)
gruss by OHR
Jimmy

Antworten