Einzelnen Beitrag anzeigen

angos

Registriert seit: 26. Mai 2004
Ort: Rheine
549 Beiträge
 
Delphi 11 Alexandria
 
#17

Re: OOP--> Constructor richtig verwendet???

  Alt 4. Jan 2006, 14:36
Zitat von Christian18:
Zitat von jbg:
Mit der "neuen" Lösung musst du jedem im Team erklären, dass er nach dem Create noch deine Erzeugen Methode aufrufen soll. Vergiss einer das, kannst du dir denken was passiert.
Hallo jbg,

du hast geschriben, dann ich bei der zweiten Lösung anderen Programmierern sagen muß das man noch den Create noch die Methode aufrufen muß.

Ist das würklich so??? Ich habe mir einfach mal eine Delphi Standart Komponente angeschaut. (TOpenDialog) bei der ist es doch auch so wie in meiner zweiten Lösung oder sehe ich das falsch???

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
  var o : TOpenDialog;
begin
  o:=TOpenDialog.Create(self); --> erzeugen
  if o.Execute then --> aufruf durch Execut
    begin
      ...
    end;
end;
Ist das nicht das gleiche??? Also nochmal welche vorteile hat das ganze denn jetzt für mich wenn ich eine Constructor verwende???

MFG Christian18

PS: Meine Frage zu der Kapselung ist noch offen...
Hi Christian,

bei dem Beispiel wird der OpenDialog aufgerufen nicht erzeugt.

Deine beiden Sourcen machen genau das gleiche, aber:

du hast eine unit für die Komponente und eine Unit für dein Programm. Für jedesmal wenn du die Komponente nutzen möchtest (du kannst ja mehrere Instanzen erstellen) müsstest du folgendes Schreiben:
Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
  var n : TNavi;
begin
  n:=TNavi.Create();
  n.Erzeugen(Form1, 'Button');
  n.Free;
end;
Auch wenn du nun nur deine Komponente weitergeben möchtest müsste derjenige der sie nutzen möchte auch noch diesen Source selber schreiben. Dies kann man sich nun sparen, wenn man das einmal deklariert hat. Man hat dann nur noch den Einzeiler
n:=TNavi.Create(FMain, 'Button'); Gerade wenn man viele dieser Objekte hat, spart dies Zeit und ist übersichtlicher sowie weniger Fehleranfällig.

Hoffe geholfen zu haben
Ansgar
  Mit Zitat antworten Zitat