AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

OOP--> Constructor richtig verwendet???

Ein Thema von Christian18 · begonnen am 4. Jan 2006 · letzter Beitrag vom 4. Jan 2006
Antwort Antwort
Seite 1 von 3  1 23      
Christian18

Registriert seit: 9. Dez 2003
Ort: Hamburg
1.279 Beiträge
 
#1

OOP--> Constructor richtig verwendet???

  Alt 4. Jan 2006, 12:41
Hallo,

ich bin gerade dabei mich so richtig intensiv mit OOP und Delphi zu beschäftigen. Ich habe mal versucht eine Klasse TNavi zu erzeugen. Die Klasse ist eine eigenständige klasse und wird nicht von einer anderen abgeleitet (vererbt)

dann habe ich noch einen constructor und eine Methode die einen button erzeugt. das funktioniert auch alles. meine frage ist jetzt nur, ob ich den construktor richtig verwendet habe??? ob ich seine eigentlich funktion richtig verwendet habe. Könnt ihr euch mal meinen code anschauen??? Für anregungen bin ich immer offen.

Hier mein Code:

Delphi-Quellcode:
unit UMain;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, UKlassen;

type
  TFMain = class(TForm)
    procedure FormKeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    procedure FormCreate(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  FMain: TFMain;

implementation

{$R *.dfm}

procedure TFMain.FormKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  if shift=[] then begin
    case key of
      27 : Close;
    end;
  end;
end;

procedure TFMain.FormCreate(Sender: TObject);
  var n : TNavi; // Menu
begin
  // Menu erzeugen
  n:=TNavi.Create(FMain, 'Button');
end;

end.
und hier die unit wo die klasse drinn ist.

Delphi-Quellcode:
unit UKlassen;

interface

uses
  Forms, StdCtrls;

type
  TNavi = class
    constructor Create(f : TForm; c : String);
    procedure Menu();
  private
    form : TForm;
    button : TButton;
    caption : String;
  public

  end;

implementation

constructor TNavi.Create(f : TForm; c : String);
begin
  form:=f;
  caption:=c;
  Menu();
end;

procedure TNavi.Menu();
begin
  button:=TButton.Create(nil);
  button.Caption:=caption;
  button.Top:=10;
  button.Left:=10;
  button.Parent:=form;
end;

end.
  Mit Zitat antworten Zitat
Waldteufel
(Gast)

n/a Beiträge
 
#2

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

  Alt 4. Jan 2006, 12:45
Hi.

Sieht ganz gut aus, aber im Konstruktor musst du am Anfang noch inherited; schreiben, damit der Konstruktor von TObject aufgerufen wird. Ohne den gehts nicht.
  Mit Zitat antworten Zitat
Benutzerbild von malo
malo

Registriert seit: 19. Sep 2004
2.115 Beiträge
 
#3

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

  Alt 4. Jan 2006, 12:46
Du musst den Button und die Klasse noch zerstören, wenn du fertig bist Das hast du vergessen.
  Mit Zitat antworten Zitat
Christian18

Registriert seit: 9. Dez 2003
Ort: Hamburg
1.279 Beiträge
 
#4

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

  Alt 4. Jan 2006, 12:49
Zitat von malo:
Du musst den Button und die Klasse noch zerstören, wenn du fertig bist Das hast du vergessen.

so ???


Delphi-Quellcode:
procedure TNavi.Menu();
begin
  button:=TButton.Create(nil);
  button.Caption:=caption;
  button.Top:=10;
  button.Left:=10;
  button.Parent:=form;
  button.Free;
end;
wenn ich es so mache, dann wird der button nicht angezeigt.
  Mit Zitat antworten Zitat
Christian18

Registriert seit: 9. Dez 2003
Ort: Hamburg
1.279 Beiträge
 
#5

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

  Alt 4. Jan 2006, 12:51
Zitat von Waldteufel:
Hi.

Sieht ganz gut aus, aber im Konstruktor musst du am Anfang noch inherited; schreiben, damit der Konstruktor von TObject aufgerufen wird. Ohne den gehts nicht.
Hallo Waldteufel,

es funktioniert aber auch ohne inherited; ich kann keinen unterschied feststellen. also mit oder ohne --> kein unterschied.

mfg christian18
  Mit Zitat antworten Zitat
jbg

Registriert seit: 12. Jun 2002
3.483 Beiträge
 
Delphi 10.1 Berlin Professional
 
#6

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

  Alt 4. Jan 2006, 12:59
Zitat von Christian18:
es funktioniert aber auch ohne inherited;
Aber auch nur, weil du implizit von TObject erbst und der TObject-Konstruktor leer ist. Unter .NET würde dir der Compiler einen Fehler ausgeben, weil er ein inherited benötigt.
Ich schreibe immer das inherited beim Konstruktor und Destruktor hin. Denn wenn ich oder ein Kollege mal die Basisklasse ändern sollte und dort z.B. einen eigene Konstruktor implementiert, ist man ganz schön auf der Suche nach dem Fehler.
  Mit Zitat antworten Zitat
Christian18

Registriert seit: 9. Dez 2003
Ort: Hamburg
1.279 Beiträge
 
#7

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

  Alt 4. Jan 2006, 13:00
Was hat das mit den Constructor überhaupt für einen Sinn??? man kann es doch auch so machen.

Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, Unit2;

type
  TForm1 = class(TForm)
    procedure FormCreate(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
  var n : TNavi;
begin
  n:=TNavi.Create();
  n.Erzeugen(Form1, 'Button');
  n.Free;
end;

end.
KLassen Unit:
Delphi-Quellcode:
unit Unit2;

interface

uses
  Forms, StdCtrls;

type
  TNavi = class
    procedure Erzeugen(f : TForm; c : String);
  private
    b : TButton;
  public

  end;

implementation

procedure TNavi.Erzeugen(f : TForm; c : String);
begin
  b:=TButton.Create(nil);
  b.Caption:=c;
  b.Top:=10;
  b.Left:=10;
  b.Parent:=f;
end;

end.

so funktioniert es auch und mache auch das gleiche. welche lösung ist besser??? warum???
  Mit Zitat antworten Zitat
jbg

Registriert seit: 12. Jun 2002
3.483 Beiträge
 
Delphi 10.1 Berlin Professional
 
#8

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

  Alt 4. Jan 2006, 13:02
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.
  Mit Zitat antworten Zitat
Christian18

Registriert seit: 9. Dez 2003
Ort: Hamburg
1.279 Beiträge
 
#9

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

  Alt 4. Jan 2006, 13:03
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.
öhhhhhhhhmmmm... nichts?!?!?!
  Mit Zitat antworten Zitat
Christian18

Registriert seit: 9. Dez 2003
Ort: Hamburg
1.279 Beiträge
 
#10

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

  Alt 4. Jan 2006, 13:05
Kann mir jemand das Prinzip der Kapselung erklären??? Man findet den Begriff überall und ich habe keine Ahnung was das ist oder was man damit macht.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 3  1 23      


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 +1. Es ist jetzt 00:21 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz