Autor Thema: eigene Klasse zeigt private Variablen  (Gelesen 2248 mal)

Offline bikerboy

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.155
  • Geschlecht: Männlich
eigene Klasse zeigt private Variablen
« am: 01.08.08 - 12:03:10 »
Hallo bin gerade ein bisschen verwirrt.

Habe ich doch in der Schule gelernt, dass ich auf Private Deklarierte Variablen keinen Zugriff habe.

Nun habe ich mal meine erste eigene Klasse geschrieben ( Versuche mal richtig zu programmieren und nicht immer nur Klassen zu benutzen), Habe einen Satz Öffentliche Variablen geschrieben und einen Private.

Code
' Functions which are public 
	
' Variables which are Public and read only
Declare Public Property Get Comment As String
Declare Public Property Get Error As Boolean
Declare Public Property Get ErrorCode As String
Declare Public Property Get ErrorMessage As String
Declare Public Property Get Number As Integer
Declare Public Property Get RequestType As String
Declare Public Property Get State As String	
Declare Public Property Get Status As String
Declare Public Property Get isReady As Boolean
	
	' Variables which are only used by the object himself
	Private docRequest As NotesDocument
	Private docENDRARequest As NotesDocument
	
	Private strComment As String				' comment
	Private strErrorCode As String				' errorCode
	Private strErrorMessage As String		' errorMessage 
	Private strRequestType As String			' type oh the request
	Private strRequestState As String			' the state for tester, like 1 for waiting , 2 for active, 3 for ready
	Private strRequestStatus As String		' the status of the request, like 50 waiting for adminP
	
	Private intRequestNumber As Integer	
	
	Private bolError As Boolean
	Private bolIsReady As Boolean

So , warum sehe ich nun im Debugger, die Privaten Variablen und nicht die Öffentlichen ? ???


Ahso habe auch diesen Block geschrieben

Code
	' this block sets the public information 4 the object
	Public Property Get isReady  As Boolean
		isReady = bolIsReady
	End Property
	
	Public Property Get Comment As String
		Comment = strComment
	End Property
	
	Public Property Get ErrorCode As String
		ErrorCode = strErrorCode
	End Property
	
	Public Property Get ErrorMessage As String
		ErrorMessage = strErrorMessage
	End Property
	
	Public Property Get Number As Integer
		Number = intRequestNumber
	End Property
	
	Public Property Get RequestType As String
		RequestType = strRequestType
	End Property
	
	Public Property Get State As String
		State = strRequestState
	End Property
	
	Public Property Get Status As String
		Status = strRequestStatus
	End Property
Robert Kreutzer

Anwendungsentwicklung

"Jeder Idiot kann was kompliziertes bauen, es Bedarf eines Genie für etwas einfaches"

Offline DerAndre

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.655
  • Geschlecht: Männlich
  • Keep cool!
Re: eigene Klasse zeigt private Variablen
« Antwort #1 am: 01.08.08 - 12:24:18 »
Aus der Hilfe

Public and Private class members 

When you define a class, you can make members Public (so members can be referred to by statements outside the class definition) or Private (so members can be referred to only by properties and methods defined in that class). Member variables are Private by default; and properties, subs, and functions are Public by default.
It is good programming practice to keep class member variables Private, and to use Public properties and methods to manipulate the private data stored in member variables. Keeping member variables Private is often called data hiding or encapsulation because private data is hidden from subs and functions defined outside the class. Keeping properties and methods Public provides public access to the users of the class.

Desweiteren schau Dir mal die Property Get und Set Methoden an.
Nur mit Get kommst Du nicht weit... weil da steht noch nichts drin, die Variabelen müsse erst mir der Property Set Mehode gefüllt werden
André

Elterninitiative diabetischer Kinder und Jugendlicher e.V.
-----------------------------------------------------------------------------
Fliegen ist die Kunst auf den Boden zu Fallen, aber daneben.
-----------------------------------------------------------------------------
Etwas mehr Hardware dazu zu kaufen ist viel billiger als
Software besser zu machen. ( Niklaus Wirth )

Offline Axel

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 8.658
  • Geschlecht: Männlich
  • It's not a bug, it's Notes
Re: eigene Klasse zeigt private Variablen
« Antwort #2 am: 01.08.08 - 12:27:02 »
Habe ich doch in der Schule gelernt, dass ich auf Private Deklarierte Variablen keinen Zugriff habe.

Warum solltest du auf private Variablen keinen Zugriff haben? Was genau hat man denn dir in der Schule gelernt?   ???

Private Variablen bedeutet, dass sie außerhalb des Moduls, Klasse usw. in der sie deklariert wurden nicht sichtbar sind. innerhalb aber schon.

Axel
Ohne Computer wären wir noch lange nicht hinterm Mond!

Offline bikerboy

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.155
  • Geschlecht: Männlich
Re: eigene Klasse zeigt private Variablen
« Antwort #3 am: 01.08.08 - 13:27:40 »
Habe ich doch in der Schule gelernt, dass ich auf Private Deklarierte Variablen keinen Zugriff habe.

Private Variablen bedeutet, dass sie außerhalb des Moduls, Klasse usw. in der sie deklariert wurden nicht sichtbar sind. innerhalb aber schon.

Axel

Genau, ich habe sie Private Deklariert, heisst sie sollten nur auftauchen wenn ich mit dem Debugger innerhalb der Klasse unterwegs bin.

Wenn ich aber ausserhalb der Klasse bin, sollte das Object mir nicht die Privaten Variablen anzeigen.
Robert Kreutzer

Anwendungsentwicklung

"Jeder Idiot kann was kompliziertes bauen, es Bedarf eines Genie für etwas einfaches"

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re: eigene Klasse zeigt private Variablen
« Antwort #4 am: 01.08.08 - 13:31:18 »
Der Debugger zeigt an, was im Speicher ist. Aus diesem Grunde tickt er manchmal etwas anders als das, was dann tatsächlich zur Laufzeit passiert.
Dass der Debugger die Privates anzeigt, ist also vollkommen in Ordnung.

Bernhard

Offline MadMetzger

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.052
  • Geschlecht: Männlich
  • f.k.a. Alexis Pyromanis
Re: eigene Klasse zeigt private Variablen
« Antwort #5 am: 01.08.08 - 13:41:50 »
Vor allen Dingen ist diese Tatsache eine große Erleichterung beim Debuggen... Stell dir mal vor, du könntest beim Debuggen nicht in die Struktur der Klassen schauen... Neee... das wäre überhaupt nicht gut.

Offline bikerboy

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.155
  • Geschlecht: Männlich
Re: eigene Klasse zeigt private Variablen
« Antwort #6 am: 01.08.08 - 13:46:03 »
also alles in Ordnung ?? Variablen richtig deklariert.

Nur um mir die Arbeit zu helfen, hat IBM gesagt, er sieht alles ?
Robert Kreutzer

Anwendungsentwicklung

"Jeder Idiot kann was kompliziertes bauen, es Bedarf eines Genie für etwas einfaches"

Offline MadMetzger

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.052
  • Geschlecht: Männlich
  • f.k.a. Alexis Pyromanis
Re: eigene Klasse zeigt private Variablen
« Antwort #7 am: 01.08.08 - 13:51:29 »
Genau, alles in Ordnung so. Aber das ist bestimmt nicht nur, um das Debuggen zu erleichtern, wurde das aber bestimmt nicht so gemacht. Aber zumindest ist die Sichtbarkeit an der Stelle für mich nur ein Hilfsmittel. Und im Grunde siehst du möglicherweise nicht einmal die "tatsächlichen" Attribute, sondern siehst andere Objekte im Debugger, die sich so darstellen, dass sie dir die innere Struktur der vorhandenen Objekte aufbereiten.

Offline flaite

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.966
    • mein del.icio.us
Re: eigene Klasse zeigt private Variablen
« Antwort #8 am: 01.08.08 - 16:01:06 »
Die Zugriffs-Modifier regeln die Sichtbarkeit von.
Wenn ich mich recht erinnere sind private Members in Notes Klassen aus allen Funktionen, Methoden, derselben Scriptbibliothek, Agent, etc. sichtbar.
Das ist eine höhere Sichtbarkeit als etwa private in Java oder C++.
Die Zugriffs-Modifizierer sind ein Hilfsmittel, um Code übersichtlich zu strukturieren. Kein Sicherheitsfeature.
In Java sind private Methoden und Properties tatsächlich nur aus einem Objekt dieser Klasse sichtbar. Debugger zeigen es trotzdem an. Man kann nämlich mittels ein paar "Tricks" (introspection, reflection) die private members sozusagen auf public umschiessen. Genau so ist das auch in den Java-Debuggern implementiert. 
Der Notes-Debugger zeigt keine Properties an. Sowas würde er natürlich anzeigen.
Code
Public strComment As String	
Nur eben keine Properties.

Wenn du in einer Script-Bibliothek eine Klasse hast, kannst du aus z.B. Agenten (oder andere ScriptLibraries), die diese Scriptbibliothek benutzen, nicht auf die privaten Member der Klasse direkt zugreifen.
Aber aus einer anderen Klasse oder Funktion dieser Scriptbibliothek schon. Private in Notes entspricht etwa "package-private" in Java (wo kein Zugriffsmodifier steht) nicht private. 
« Letzte Änderung: 01.08.08 - 16:04:18 von Axel Janssen »
Ich stimm nicht mit allen überein, aber mit vielen und sowieso unterhaltsam -> https://www.youtube.com/channel/UCr9qCdqXLm2SU0BIs6d_68Q

---

Aquí no se respeta ni la ley de la selva.
(Hier respektiert man nicht einmal das Gesetz des Dschungels)

Nicanor Parra, San Fabian, Región del Bio Bio, República de Chile

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz