Einzelnen Beitrag anzeigen

Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#14

AW: Problem mit einfügen einer function in procedure

  Alt 14. Jan 2011, 15:12
Oder hier als abstraktes Beispiel drei Methoden zum Berechnen:
Delphi-Quellcode:
unit uFoo;

interface

type
  // Der Preis kann von beliebiger Stelle geändert werden
  TCalcClass1 = class
  private
    FPreis : Extended;
    procedure SetPreis( const Value : Extended );

  public
    property Preis : Extended read FPreis write SetPreis;
    function Calc( Menge : Extended ) : Extended;
  end;

  // Der Preis wird bei der Erzeugung festgelegt
  TCalcClass2 = class
  private
    FPreis : Extended;

  public
    property Preis : Extended read FPreis;
    function Calc( Menge : Extended ) : Extended;
    constructor Create( Preis : Extended );
  end;

  // Der Preis muss bei jeder Berechnung mit angegeben werden
function Calc( Menge, Preis : Extended ) : Extended;

implementation

function Calc( Menge, Preis : Extended ) : Extended;
  begin
    Result := Menge * Preis;
  end;

{ TCalcClass1 }

function TCalcClass1.Calc( Menge : Extended ) : Extended;
  begin
    Result := Calc( Menge, Preis );
  end;

procedure TCalcClass1.SetPreis( const Value : Extended );
  begin
    FPreis := Value;
  end;

{ TCalcClass2 }

function TCalcClass2.Calc( Menge : Extended ) : Extended;
  begin
    Result := Calc( Menge, Preis );
  end;

constructor TCalcClass2.Create( Preis : Extended );
  begin
    inherited Create;
    FPreis := Preis;
  end;

end.
Für welches Modell der Umsetzung man sich entscheidet, hängt davon ab, was man erreichen möchte.
Ist bei der Berechnung der Preis auch an dem Ort bekannt, von wo aus die Berechnung angestossen wird, dann bietet sich eine einfache function Calc( Menge, Preis : Extended ):Extended; an.

Ist der Preis nur einer völlig anderen Stelle bekannt und sind dort Änderungen zu erwarten (erlaubt), dann wie TCalcClass1 .

Darf der Preis sich nicht ändern, dann wie TCalcClass2 .

Werden diese Berechnungsklassen jetzt weiterverwendet, so ist durch das Design schon klar, wie diese verwendet werden dürfen.
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)

Geändert von Sir Rufo (14. Jan 2011 um 15:21 Uhr)
  Mit Zitat antworten Zitat