Objectpascal mit FPC, Funktion erstellt Objekt und gibt dieses zurück

05/08/2008 - 12:44 von Michael Fuchs | Report spam
Hallo,

ich überlege gerade, welches die beste Methode ist Objekte aus
Prozeduren/Funktionen zurückzugeben. Passieren soll folgendes:
Eine Funktion/Prozedur liest einen Datensatz aus einer Datenbank und
mappt die Daten in ein Objekt welches sie zurückgibt. Zwei mögliche
Lösungsansàtze habe ich dafür:

type
TMyObject = class
private
_a: Integer;
public
property A: Integer read _a write _a;
end;

function GetObject: TMyObject;
var
resultObject: TMyObject;
begin
resultObject:= TMyObject.Create;
// Quellcode der das Objekt mit Daten füllt
Result:= resultObject;
end;

procedure GetObject(resultObject: TMyObject);
begin
// Quellcode der das Objekt mit Daten füllt
end;

Die Funktion erstellt das Objekt und gibt es als Rückgabewert nach
außen. Wàre meine bevorzugte Lösung, dann kann ich auch falls ein
Datensatz gefunden wurde auch einfach nil zurückgeben. Wichtig ist dann
bloss, dass der Quellcode, der die Funktion aufruft, das Objekt auch
wieder freigibt wenn er fertig ist. Auch kein Problem, es seid denn,
dass es da irgendwelche Einschrànkungen gibt, weil dieses Objekt ja in
der Funktion erzeugt wurde. Ist dem so?

Alternativ müsste ich dann die Variante mit der Prozedur wàhlen. Also
Objekt erzeugen, als Parameter an die Prozedure und die füllt das Ding
dann nur noch mit Daten. Aber was mache ich dann, wenn ich spàter mal
eine Liste zurückgeben muss, dann muss ich die Objekte wieder innerhalb
der Funktion erzeugen. Gefàllt mir nicht so recht.

Spricht etwas gegen die Variante 'Funktion erzeugt Objekt, gibt es nach
außen und der "àußere" Code kümmert sich um das Vernichten'?


mfg
Micha

Meine Wanderungen durch Realitàt und Cyberspace

auf --> http://www.michael-fuchs.net <--
 

Lesen sie die antworten

#1 Vinzent Hoefler
05/08/2008 - 13:52 | Warnen spam
Michael Fuchs wrote:

Spricht etwas gegen die Variante 'Funktion erzeugt Objekt, gibt es nach
außen und der "àußere" Code kümmert sich um das Vernichten'?



Nein.

wiki Factor_method_pattern ;)


Vinzent.

Ähnliche fragen