AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Class -->Error

Ein Thema von Teekeks · begonnen am 9. Jan 2009 · letzter Beitrag vom 10. Jan 2009
Antwort Antwort
Seite 2 von 2     12
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.798 Beiträge
 
Delphi 10.4 Sydney
 
#11

Re: Class -->Error

  Alt 9. Jan 2009, 17:56
Du verwechselst Properties mit Getter/Setter
Delphi-Quellcode:
published
    property Tierart:string read pArt write pArt;
...
Markus Kinzler
  Mit Zitat antworten Zitat
Teekeks

Registriert seit: 19. Okt 2008
Ort: Dresden
765 Beiträge
 
FreePascal / Lazarus
 
#12

Re: Class -->Error

  Alt 9. Jan 2009, 18:26
Zitat von mkinzler:
Du verwechselst Properties mit Getter/Setter
Delphi-Quellcode:
published
    property Tierart:string read pArt write pArt;
...
aber, tut das nicht das selbe wie meins?
Peter
"Div by zero Error" oder auch: "Es geht auch ohne Signatur!".
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.270 Beiträge
 
Delphi 11 Alexandria
 
#13

Re: Class -->Error

  Alt 9. Jan 2009, 18:29
Das ist der Direktzugriff auf ein privates Feld ohne explizite Getter/Setter.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Der_Unwissende

Registriert seit: 13. Dez 2003
Ort: Berlin
1.756 Beiträge
 
#14

Re: Class -->Error

  Alt 9. Jan 2009, 18:29
Zitat von DeddyH:
Das ist so nicht im Sinne der OOP. Du hast eine Property (z.B. Name), welche über einen sog. Getter (z.B. GetName) ausgelesen und einen sog. Setter (z.B. SetName) gesetzt wird. Den Getter kannst Du meist auch weglassen und gleich den Feldinhalt zurückgeben, aber ein Setter kann zur Überprüfung ganz nützlich sein.
Natürlich können auch Getter mal ganz sinnvoll sein So können Getter dyn. einen Wert berechnen und zurückgeben, statt dass man diesen immer in einer Variable speichert und aktuell hält. Als Beispiel könntest Du hier eine Liste von Zahlen implementieren, welche eine Methode zum hinzufügen von Werten besitzt. Eine mögliche Eigenschaft wäre dann der Mittelwert der eingefügten Zahlen. Den kannst Du halt nach jedem Einfügen berechnen und in einer Variable speichern oder Du verwendest einen Getter.

Delphi-Quellcode:
TMyList = class(TObject)
  private
    values: TIntegerDynArray;
  protected
    function getMean(): Integer;
  public
    procedure addValue(const value: Integer);
  published
    property mean: Integer read getMean;
end;
Für den Nutzer ist von "außen" nur das Property mean sichtbar, ob dies nun auf eine Variable zurückgreift oder wie hier eine Methode bemüht bleibt völlig transparent. Damit siehst Du schon eine wichtige Eigenschaft der Properties, Du kannst einfach leicht umstellen. Wird z.B. häufig auf den Mittelwert zugegriffen und nur sehr sehr selten (im Verhältnis dazu) ein neuer Wert eingefügt, dann wäre es wohl effizienter den Wert vorzuberechnen und in einer Variable zu speichern. Umgekehrt würde häufiges Hinzufügen von Werten und seltenes Lesen des Mittelwerts von der dyn. Berechnung profitieren. Somit kannst Du hier die Implementierung transparent austauschen. Für den Nutzer der Klasse gibt es immer nur ein Property, wo der zurückgelieferte Wert herkommt ist ihm egal.

Eine weitere wichtige Eigenschaft siehst Du auch noch, es gibt keine Möglichkeit von außen den Wert zu setzen. Das macht bei einem Mittelwert auch keinen Sinn, immerhin ist der ziemlich klar definiert und hängt allein von den Werten in der Liste ab. Da das Property mean hier nur eine read Eigenschaft besitzt verhält sich das Property wie eine Variable, die man eben nur lesen kann.

Natürlich gibt es auch Properties, die man sowohl Lesen als auch Setzen können muss, da hattest Du ja schon Beispiele gesehen. Die Vorteile sind natürlich die Gleichen. Insbesondere kann man (wie DeddyH ja sagte) eben auch die Gültigkeit prüfen. Z.B. könntest Du sicherstellen, dass das Alter >= 0 Jahre ist (ein Integer kann auch kleiner werden).
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.270 Beiträge
 
Delphi 11 Alexandria
 
#15

Re: Class -->Error

  Alt 9. Jan 2009, 18:35
Ich hatte ja auch nicht behauptet, dass Getter generell sinnlos sind . Nochmal ein Beispiel:
Delphi-Quellcode:
type
  TMyClass = class
  private
    FAge: integer;
    procedure SetAge(const value: integer);
    function GetAge: integer;
  public
    property Age: integer read GetAge write SetAge;
  end;

...

procedure TMyClass.SetAge(const value: integer);
begin
  if value > 0 then
    FAge := value
  else
    raise Exception.Create('Ungeborene gelten nicht.');
end;

function TMyClass.GetAge: integer;
begin
  Result := FAge; //einfacher Fall, könnte auch z.B. das Ergebnis einer Berechnung sein
end;
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Teekeks

Registriert seit: 19. Okt 2008
Ort: Dresden
765 Beiträge
 
FreePascal / Lazarus
 
#16

Re: Class -->Error

  Alt 9. Jan 2009, 18:39
hmm. ihr habt mich überzeugt.
Bringen wir das mal ein. ^^
Peter
"Div by zero Error" oder auch: "Es geht auch ohne Signatur!".
  Mit Zitat antworten Zitat
Benutzerbild von Fussball-Robby
Fussball-Robby

Registriert seit: 22. Okt 2007
Ort: Nähe Köln
1.063 Beiträge
 
Delphi 7 Enterprise
 
#17

Re: Class -->Error

  Alt 9. Jan 2009, 19:05
Anhängig von deiner Delphiversion(in D7 gehts, in D5 noch nicht) kann Delphi dir auch helfen: Du erstellst zunächst die Klasse mir propertys:
Delphi-Quellcode:
type
  TMyClass = class
  private
    //
  published
    property Anzahl: Integer;
  end;
Und drückst dann Strg + Shift + C. Das private Feld mit dem führenden 'F' und die Setter-Methode werden dann automatisch erstellt.
Robert L.
Der folgende Satz ist richtig!
Der vorherige Satz ist falsch!

Paradox
  Mit Zitat antworten Zitat
Teekeks

Registriert seit: 19. Okt 2008
Ort: Dresden
765 Beiträge
 
FreePascal / Lazarus
 
#18

Re: Class -->Error

  Alt 10. Jan 2009, 07:06
hmmm. Ich verwende Lazarus. aber die haben da auch irgentsowas in der art... Ich guck mal.
Danke!
Peter
"Div by zero Error" oder auch: "Es geht auch ohne Signatur!".
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 +2. Es ist jetzt 23:04 Uhr.
Powered by vBulletin® Copyright ©2000 - 2021, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2021 by Daniel R. Wolf