Autor Thema: Wofür Property Set/Get?  (Gelesen 6345 mal)

Offline Mok

  • Frischling
  • *
  • Beiträge: 23
Wofür Property Set/Get?
« am: 05.08.09 - 09:04:38 »
Hallo zusammen!

Ich habe nun eine Zeit lang hier im Forum nach einer Antwort auf meine Frage gesucht, aber leider nicht finden können.
Ich würde lediglich gerne wissen, worin der prägnante Vorteil liegt die Property Set/Get - Anweisungen zu verwenden?!
Ich kann meine Eigenschaften doch auch genauso gut mit einem Einzeiler definieren, oder nicht?
Bisher halte ich diese Properties für überfüssigen Code. Vielleicht kann mich hier ja jemand vom Gegenteil überzeugen   ;) ?!

Hier ein kurzes Beispiel:
Code
' simple definition of "properties"
Class simple
	Private var1 As String
	Public var2 As String
End Class

' extended definition of properties
Class extended
	Private prop_var1 As String
	Private prop_var2 As String

	Private Property Get var1 As String
		var1 = prop_var1
	End Property
	Private Property Set var1 As String
		prop_var1 = var1
	End Property

	Public Property Get var2 As String
		var2 = prop_var2
	End Property
	Public Property Set var2 As String
		prop_var2 = var2
	End Property
End Class

Ich sag schon mal Danke im Voraus und freue mich auf eine Erleuchtung  :)

Grüße,

Mok
« Letzte Änderung: 06.08.09 - 14:48:08 von Mok »

Offline ZaLudtske

  • Senior Mitglied
  • ****
  • Beiträge: 319
  • Geschlecht: Männlich
  • carpe diem
Re: Wofür Property Set/Get?
« Antwort #1 am: 05.08.09 - 09:13:07 »
Vielleicht überzeugt dich dieser Wikipedia-Artikel.

http://de.wikipedia.org/wiki/Datenkapselung_(Programmierung)

... und außerden geht die saubere Programmierung über Eigenschaften.

mfg

Rainer
Rainer Zaske

MCSD - C#

Offline thomson666

  • Senior Mitglied
  • ****
  • Beiträge: 285
  • Geschlecht: Männlich
  • niemand hats leicht, aber leicht hats oan...
Re: Wofür Property Set/Get?
« Antwort #2 am: 05.08.09 - 09:15:54 »
naja property set und get sind ja nur Bezeichnungen die du für Funktionen die du dir selber schreibst vergeben kannst bzw. vorhanden Funktionen.

zum Beispiel:

wenn du abfragst ob eine Datenbank IsOpen ist, könntest du dir eine Funktion machen
setDBOpen die die Datenbank Öffnet und dann True retour gibt.

Meinst du sowas!?
Bzw. kannst du dir auch zum Beispiel eine Funktion machen die dir bestimmte Benutzer als Array retour liefert.

zum Beispiel getAllUserfromOrganisation

Function getallUserfromOrganisation as variant
Hier würdest du einfach einen Code programmieren der alle ausliest und dann mit

 getAllUserfromOrganisation = Arrayresult
End Function

Der Aufruf im Code würde dann so aussehen...

alleBenutzer = getallUserfromOrganisation

somit hättest du ein Result einer Funktion in einer Sub...

Ich hoff das ist irgendwie verständlich, im erklären bin ich nicht der Meister...

Tommy


Offline ascabg

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 3.697
  • Geschlecht: Männlich
Re: Wofür Property Set/Get?
« Antwort #3 am: 05.08.09 - 09:34:18 »
Zitat
naja property set und get sind ja nur Bezeichnungen die du für Funktionen die du dir selber schreibst vergeben kannst bzw. vorhanden Funktionen
  ???

Seit wann denn das.


Andreas

Offline Mok

  • Frischling
  • *
  • Beiträge: 23
Re: Wofür Property Set/Get?
« Antwort #4 am: 05.08.09 - 10:25:44 »
Zitat
Vielleicht überzeugt dich dieser Wikipedia-Artikel.

http://de.wikipedia.org/wiki/Datenkapselung_(Programmierung)
Was Datenkapselung ist, weiß ich  ;)

Zitat
... und außerden geht die saubere Programmierung über Eigenschaften.
Und, dass es auf diese Art und Weise sauberer ist, zu Programmieren, möchte ich auch nicht abstreiten (und üblicherweise halte ich mich auch daran).

Ich beschreibe es nun ein wenig anders:
Ich hatte hier als Beispiel eine Klasse mit 2 Properties. Das ist nicht viel und die Übersichtlichkeit ist gewährt.
Nun stellt sich mir aber die Frage, in wie weit es noch überschaubar ist, wenn ich 50 Properties in meiner Klasse habe. Wer schaut sich gerne 300 Zeilen Code an, und sucht nach der passenden Property, wenn sich das Ganze auch auf 50 Zeilen komprimieren lässt?!

Ich stelle die Frage einmal anders:
Enstehen mir funktionelle Nachteile, wenn ich ohne Property Get/Set arbeite?

Noch als Anmerkung:
Für mich ist es momentan eine Gradwanderung zwischen sauberer Programmierung und der Übersichtlichkeit in der Klasse (und der daraus resultierenden Doku).

Offline ZaLudtske

  • Senior Mitglied
  • ****
  • Beiträge: 319
  • Geschlecht: Männlich
  • carpe diem
Re: Wofür Property Set/Get?
« Antwort #5 am: 05.08.09 - 10:27:52 »
Saubere Programmierung = Wartbarkeit = Qualität

meine persönliche Meinung

Rainer
Rainer Zaske

MCSD - C#

Offline joringel

  • Aktives Mitglied
  • ***
  • Beiträge: 105
  • Geschlecht: Männlich
Re: Wofür Property Set/Get?
« Antwort #6 am: 05.08.09 - 18:24:17 »
Noch ein hoffentlich hilfreicher link:

http://de.wikipedia.org/wiki/Zugriffsfunktion

Habe so mein Problem mit dem Begriff 'Sauber programmieren' und den dazu gehörigen Gurus. Bedeutet das, dass wir zuvor alle nur Mist produziert haben, wenn irgendein neues Paradigma auftaucht?

Die Sache ist nicht unumstritten, wer Zeit hat, lese unter den folgenden links nach:

http://www.google.de/search?hl=de&q=getter+setter+warum&btnG=Google-Suche&meta=&aq=f&oq=

Gruß
Peter
Nenne nie einen Server 'Lokal'...

Offline thomson666

  • Senior Mitglied
  • ****
  • Beiträge: 285
  • Geschlecht: Männlich
  • niemand hats leicht, aber leicht hats oan...
Re: Wofür Property Set/Get?
« Antwort #7 am: 06.08.09 - 08:44:16 »
ich bin zu faul um richtig zu antworten auf ascabg, nur so viel...

wie gesagt erklären ist nicht meins. ich weiss für was ich die set und get Properties brauchen kann...

Tommy

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: Wofür Property Set/Get?
« Antwort #8 am: 06.08.09 - 10:38:15 »
Hier ein Auszug aus der Designer-Hilfe:

Zitat
Properties

A property is a language element whose main purpose is to allow the indirect manipulation of variables that you don’t want to expose to the application as a whole.  This is especially useful in object-oriented programming. To the application, a property looks like a variable to which you can assign and from which you can retrieve a value, but it is actually more than that.
You create a property by defining two procedures: Property Set assigns the value of the property to a variable you want to manipulate, and Property Get assigns the current value of that variable to the property. You execute the Property Set procedure by assigning the property a value, and you execute the Property Get procedure by including the property in a statement that uses its value. The application operates on the property (which operates on the variable) rather than on the variable itself. Because Property Set and Property Get are procedures, you can make them perform operations in addition to assigning and retrieving values.

Am interessantesten sind meines Erachtens die letzten beiden Sätze.


naja property set und get sind ja nur Bezeichnungen die du für Funktionen die du dir selber schreibst vergeben kannst bzw. vorhanden Funktionen.

zum Beispiel:

wenn du abfragst ob eine Datenbank IsOpen ist, könntest du dir eine Funktion machen
setDBOpen die die Datenbank Öffnet und dann True retour gibt.

Meinst du sowas!?
Bzw. kannst du dir auch zum Beispiel eine Funktion machen die dir bestimmte Benutzer als Array retour liefert.

zum Beispiel getAllUserfromOrganisation

Function getallUserfromOrganisation as variant
Hier würdest du einfach einen Code programmieren der alle ausliest und dann mit

 getAllUserfromOrganisation = Arrayresult
End Function

Der Aufruf im Code würde dann so aussehen...

alleBenutzer = getallUserfromOrganisation

somit hättest du ein Result einer Funktion in einer Sub...

Ich hoff das ist irgendwie verständlich, im erklären bin ich nicht der Meister...

Tommy



Ich bin im erklären auch nicht gerade der Weltmeister, aber das was du da schreibst, hat mit der Ausgangsfrage nach Property Set/Get überhaupt nichts zu tun. Was du meinst ist lediglich eine sprechendere Bezeichnung von eigengestrickten Funktionen.

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

Offline Mok

  • Frischling
  • *
  • Beiträge: 23
Re: Wofür Property Set/Get?
« Antwort #9 am: 06.08.09 - 10:51:53 »
Danke für die bisherigen Beiträge.
Überzeugt davon, Property Set/Get bei einer Anzahl von 50 oder mehr Eigenschaften in einer Klasse zu benutzen, bin ich jedoch noch nicht. Ich sehe leider immer noch keinen Sinn darin so viele Zeilen Code zu schreiben, die dann natürlich auch dokumentiert werden müssen, wenn es auch wesentlich einfacher geht.

Ich frage daher nochmals:
Entstehen mir funktionelle Nachteile, wenn ich ohne Property Get/Set arbeite?

Wenn ich auf eine Private-Eigenschaft von außen zugreifen möchte, kann ich mir doch genauso gut eine Public-Funktion schreiben, die mir diese liefert. Das mache ich aber auch nur dann wenn ich die Eigenschaft wirklich nach außen hin brauche und schreibe nicht jede einzelne Variable mit 6 Zeilen Set und Get nieder.
(finde ich persönlich wesentlich einfacher)

Offline Pyewacket

  • Senior Mitglied
  • ****
  • Beiträge: 310
  • Geschlecht: Männlich
Re: Wofür Property Set/Get?
« Antwort #10 am: 06.08.09 - 11:00:59 »
Mit Property Set kannst du z.B. das Setzen von unsinnigen Werten erkennen und unterbinden.

Private Property Set Monat  As integer
                if (Monat < 1) or (Monat > 12) then
                   Error 666,"Ungültiger Monat, muss zwischen 1 und 12 liegen"
                else
                   priv_Monat = Monat
                end if
End Property

Auf diese Weise kannst du nur Werte zwischen 1 und 12 reinschreiben, ansonsten springt deine Fehlerroutine, sofern vorhanden,an.
ATOS.org - Feel the music!

Offline ascabg

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 3.697
  • Geschlecht: Männlich
Re: Wofür Property Set/Get?
« Antwort #11 am: 06.08.09 - 11:08:27 »
Hallo,

Zitat
Ich frage daher nochmals:
Entstehen mir funktionelle Nachteile, wenn ich ohne Property Get/Set arbeite?
Nein.
Ob Du damit arbeitest oder nicht ist einzig und allein Dir bzw. dem Entwickler ueberlassen.

Zitat
Wenn ich auf eine Private-Eigenschaft von außen zugreifen möchte, kann ich mir doch genauso gut eine Public-Funktion schreiben, die mir diese liefert. Das mache ich aber auch nur dann wenn ich die Eigenschaft wirklich nach außen hin brauche und schreibe nicht jede einzelne Variable mit 6 Zeilen Set und Get nieder.
(finde ich persönlich wesentlich einfacher)
Du must doch nicht fuer jede einzelnen als "Private" deklarierte Variable auch noch gleich die entsprechenden Get und Set Varianten erstellen. Das machst Du doch nur fuer die, auf die du von Aussen zugreifen moechtest.

Auch must Du nicht immer Get und Set verwenden.
Du kannst z.B. auch nur die Get-Variante erstellen.
Somit kannst Du von aussen die "private"-Variable zwar auslesen, hast aber keine Moeglichkeit von aussen den Wert zu manipulieren.

Ist nun mal so bei der OOP.


Andreas

Offline Mok

  • Frischling
  • *
  • Beiträge: 23
Re: Wofür Property Set/Get?
« Antwort #12 am: 06.08.09 - 14:47:47 »
Danke vielmals.

Ihr habt mir weiterholfen.
Ich denke, ich werde dann nur die nötigen Properties definieren.

Grüße,

Mok

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz