AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Frage zu Propertys

Ein Thema von ByTheTime · begonnen am 2. Jun 2014 · letzter Beitrag vom 4. Jun 2014
Antwort Antwort
Seite 1 von 2  1 2      
Dejan Vu
(Gast)

n/a Beiträge
 
#1

AW: Frage zu Propertys

  Alt 3. Jun 2014, 14:46
Welchen Unterschied macht es für den Benutzer einer Klasse, ob eine Property so deklariert ist
property SomeProp: integer read FSomeProp write FSomeProp; oder so
property SomeProp: integer read GetSomeProp write SetSomeProp; ?
Bis auf die Geschwindigkeit, keinen
Doch. Der Leser der Klasse muss ständig zur Implementierung scrollen, nur um zu sehen, das sie nichts macht, außer das Feld zu liefern/zu beschreiben. Vollkommen überflüssig also. Eine Implementierung sollte auch etwas implementieren und man sollte i.a. die kürzeste Variante nehmen, die für die Implementierung einer Aufgabe zur Verfügung steht (vorbehaltlich der Lesbarkeit). Wenn die Intention des Setters/Getters eine zusätzliche Funktionalität ist, dann kann man so einen quasi leeren Getter/Setter durchaus anlegen. Es soll ja noch etwas hinzukommen (Kommentare durchaus erwünscht). Aber nur, um Code zu produzieren... Also ich weiß nicht.

...das gehört für mich einfach mit zum objektorientierten Design
Das *produzieren* von überflüssigem Code????
Zitat:
Nach der Argumentation könnte man doch theoretisch auch fragen
Kann man. Aber wenn man seinen Kopf einschaltet, fragt man das nicht

Zitat:
Und was C# angeht: Soweit ich mich erinnere kann ich da auch nicht direkt auf eine Variable verweisen, sondern habe lediglich die Möglichkeit, Getter und Setter in "verkürzter" Form zu implementieren - muss aber trotzdem einen Wert rausgeben (Result := FBla) und einen Wert verarbeiten (FBla := AValue), was dann wiederum einer Kapselung in eine Methode entspricht.
Nope.
Code:
public int Var {get;set;}
Nennt sich Autoproperty und ist einfach die Konsequenz aus dem, was Du ablehnst.
  Mit Zitat antworten Zitat
alda

Registriert seit: 24. Mär 2014
Ort: Karlsruhe
93 Beiträge
 
Delphi XE6 Architect
 
#2

AW: Frage zu Propertys

  Alt 3. Jun 2014, 15:06
Zitat:
public int Var {get;set;}
Merci, das kannte ich nicht.

Zitat:
Das *produzieren* von überflüssigem Code????
Wie gesagt, wer definiert was überflüssig ist. Da ich ausschließlich über Interfaces arbeite, habe ich auch immer (wie Ihr Sie nennt, "leere") Getter und Setter und keine Variablennamen in den Properties. Sollte ich in irgendeinem Fall was ohne Interfaces hinklatschen, verwende ich es in seltenen Fällen auch über die Angabe einer Variablen. Hätte auch nicht gedacht (oder nie darüber nachgedacht), dass man das als "überflüssigen" Code ansieht, aber man lernt ja nie aus

Zitat:
Kann man. Aber wenn man seinen Kopf einschaltet, fragt man das nicht
Das liegt wohl im Auge des Betrachters und seiner Arbeitsweise/Kenntnisstandes. Wenn ich lese, dass es in Delphi elegant sein soll eine Variable direkt über eine Property zu veröffentlichen, dann frag ich mich auch ob derjenige seinen Kopf eingeschaltet hat, würde das aber nicht so kommunizieren, weil es a) einfach nicht konstruktiv ist und es b) immer Ausnahmen gibt.

Wenn ich eine Property property SomeProp: integer read FSomeProp write FSomeProp; verwende, dann verwende ich kein Interface für den Zugriff darauf. Wenn ich kein Interface verwende, habe ich keinen definierten Zugriff auf eine Klasse und kann diese in Delphi entsprechend nicht so einfach für den Test mocken. (außer ich mache es Quick and Dirty und erstelle mir im Testprojekt eine Kopie der Unit und implementiere dort meinen Stubcode). Und das ist eben der Grund warum ich den "überflüssigen" Code bevorzuge.
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.880 Beiträge
 
Delphi 11 Alexandria
 
#3

AW: Frage zu Propertys

  Alt 3. Jun 2014, 15:34
Zitat:
Wie gesagt, wer definiert was überflüssig ist. Da ich ausschließlich über Interfaces arbeite, habe ich auch immer (wie Ihr Sie nennt, "leere") Getter und Setter und keine Variablennamen in den Properties.
Delphi-Quellcode:
type
TPerson = class
 private
  FVorname, FNachname: string;
 published
  property Vorname: string read FVorname write FVorname;
end;

TPerson2 = class
 private
  FVorname, FNachname: string;
 public
  proedure setVorname( AValue: string);
 published
  property Vorname: string read FVorname write setVorname;
end;
...
var
  p1: TPerson;
  p2: TPerson2;
...

//Kein Unterschied bei der Verwendung, nur mehr Code
  p1.Vorname := 'Franz';
  p2.Vorname := 'Otto';
Aber der wahre Unterschied sieht man im Erzeugten Laufzeitcode
p1.Vorname := 'Franz'; wird zu p1.FVorname := 'Franz'; p2.Vorname := 'Otto'; wird zu p2.setVorname( 'Otto'); -> p2.FVorname := 'Otto'; Im Endeffekt wird das selber gemacht nur hat man anstatt einer normalen Wertzuweisung noch einen Methodenaufruf dazwischen.

Und dieser ist imho überflüssig.

Interfaces sind sinnvoll aber nicht immer und für Alles.
Markus Kinzler
  Mit Zitat antworten Zitat
Dejan Vu
(Gast)

n/a Beiträge
 
#4

AW: Frage zu Propertys

  Alt 3. Jun 2014, 15:41
Da ich ausschließlich über Interfaces arbeite....Und das ist eben der Grund warum ich den "überflüssigen" Code bevorzuge.
Jo. Bei Delphi ist das dann so. Blöd, aber isso. Hauptsache testbar und -so wie Du das machst- klare Zugriffe über Interfaces.

Geändert von Dejan Vu ( 3. Jun 2014 um 16:32 Uhr)
  Mit Zitat antworten Zitat
alda

Registriert seit: 24. Mär 2014
Ort: Karlsruhe
93 Beiträge
 
Delphi XE6 Architect
 
#5

AW: Frage zu Propertys

  Alt 3. Jun 2014, 16:15
Zitat:
Und dieser ist imho überflüssig. Interfaces sind sinnvoll aber nicht immer und für Alles.
Klar, Ausnahmen bestätigen die Regel. Worauf ich hinaus will ist, dass man eben nicht sagen kann, dass es pauschal "überflüssig" ist, sofern man den Verwendungszweck nicht kennt.

Die Frage die der TE stellte, war:
"Aber was spricht denn gegen property Name: String read FName write FName; ?"

Und mein geschilderter Anwendungsfall wäre somit ein Punkt, der m.E. dagegen spricht :>
  Mit Zitat antworten Zitat
Popov
(Gast)

n/a Beiträge
 
#6

AW: Frage zu Propertys

  Alt 3. Jun 2014, 19:44
@alda

Ich will jetzt nicht mit dem Spruch kommen, dass alles was Delphi-Entwickler vormachen gleich richtig ist, aber guckt man sich die Delphi-Units an, wird nirgendwo über Setter oder Getter auf eine Feldvariable zugegriffen. Die Regel ist property SomeProp: integer read FSomeProp write FSomeProp; . Nur wenn noch etwas Code dazukommt wird es anders gemacht.

Der Entwickler macht es also vor, warum soll man es anders machen?
  Mit Zitat antworten Zitat
ByTheTime

Registriert seit: 24. Sep 2011
Ort: Frankfurt
297 Beiträge
 
Delphi XE2 Architect
 
#7

AW: Frage zu Propertys

  Alt 3. Jun 2014, 23:57
So stell ich mir eine lebhafte Diskussion vor
Lukas
  Mit Zitat antworten Zitat
Jumpy

Registriert seit: 9. Dez 2010
Ort: Mönchengladbach
1.740 Beiträge
 
Delphi 6 Enterprise
 
#8

AW: Frage zu Propertys

  Alt 4. Jun 2014, 09:01
Da ich ausschließlich über Interfaces arbeite....Und das ist eben der Grund warum ich den "überflüssigen" Code bevorzuge.
Jo. Bei Delphi ist das dann so. Blöd, aber isso. Hauptsache testbar und -so wie Du das machst- klare Zugriffe über Interfaces.
Hallo und guten Morgen,

kann mir jemand mal erklären wie das gemeint ist mit den Interfaces und der Testbarkeit?

Eine Klasse mit einer Property, die direkt auf die Feldvariable schreibt/liest, kann man nicht testen? Und es geht doch um eine Klasse, wie kommen da jetzt Interfaces ins Spiel?
Ralph
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.880 Beiträge
 
Delphi 11 Alexandria
 
#9

AW: Frage zu Propertys

  Alt 4. Jun 2014, 09:08
Er meint keine Properties und dafür nur Getter/Setter, die er durch Interfaces definiert. ( Die Implementierung/Attribute ist/sind dann black box)
Markus Kinzler
  Mit Zitat antworten Zitat
OlafSt

Registriert seit: 2. Mär 2007
Ort: Hamburg
284 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#10

AW: Frage zu Propertys

  Alt 4. Jun 2014, 10:58
Ist es nicht letztlich eine Frage des Anwendungsfalles - wie so oft ?

Ich persönlich benutze absolut überhaupt keine Interfaces, weil es schlicht keine Notwendigkeit bisher dazu gab (Faulheit in Sachen Speicher nicht mehr freigeben ist keine für mich ). Ergo sind für mich Getter/Setter, die nichts weiter tun, als Werte einzuschreiben bzw. wieder auszulesen absolut überflüssiger Code, der nur Platz und Laufzeit kostet. Folglich habe ich faktisch nur "propf"'s im Code.

Ganz anders unser Interface-Mensch, der alles und jeden in ein Interface steckt - der ist gezwungen, Getter/Setter zu haben, selbst wenn sie nur einschreiben bzw. auslesen (was für mich bereits ein Grund ist, Interfaces möglichst zu meiden - unnötigen Code produzieren zu müssen).

So hat jeder sein Kreuz zu tragen
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:32 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz