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.