Autor Beitrag
Hein Blöd
ontopic starontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic star
Beiträge: 51



BeitragVerfasst: Mo 04.12.06 12:51 
Das gleiche gilt für destructor. Irgendwie verstehe ich den Sinn nicht wieso ich hier constructor und da destructor schreiben soll. Und wieso nicht einfach procedure?

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
constructor TIrgendwas.Create(AOwner: TComponent);
begin
  inherited Create(AOwner);
  Width := 20;
  Height := 20;
end;


Wieso reicht es nicht einfach das zu schreiben?

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
procedure TIrgendwas.Create(AOwner: TComponent);
begin
  inherited Create(AOwner);
  Width := 20;
  Height := 20;
end;


Also inherited rufe ich sowieso auf. Was passiert zusätzlich bei constructor? Und wenn da was passiert, wieso muß ich noch inherited schreiben? Das ist ja eine doppelte Pflege. Wiso wird das nicht in einem Rutsch miterledigt?

_________________
nix
mkinzler
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 4106
Erhaltene Danke: 13


Delphi 2010 Pro; Delphi.Prism 2011 pro
BeitragVerfasst: Mo 04.12.06 13:11 
Der Konstruktor dient zum Erzeugen des Objekts, und hat deshalb eine andere Aufgabe wie die Prozeduren/Funktionen.

_________________
Markus Kinzler.
Stefan.Buchholtz
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 612

WIN 2000, WIN XP, Mac OS X
D7 Enterprise, XCode, Eclipse, Ruby On Rails
BeitragVerfasst: Mo 04.12.06 13:28 
Konstruktor und Destruktor sind spezielle Methoden: Der Konstruktor erzeugt ein Objekt, der Destruktor zerstört es wieder.
Die meisten OOP-Sprachen haben eine festgelegte Syntax um Konstruktor und Destruktor zu festzulegen. In C++ hat beispielsweise der Konstruktor immer den gleichen Namen wie die Klasse selbst und der Destruktor den Klassennamen mit einer vorangestellten Tilde. Bei Object Pascal sind es eben die Schlüsselwörter constructor und destructor.

Stefan

_________________
Ein Computer ohne Windows ist wie eine Schokoladentorte ohne Senf.
Allesquarks
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 510

Win XP Prof
Delphi 7 E
BeitragVerfasst: Mo 04.12.06 13:36 
Normalerweise werden deine lokalen Variablen einfach auf dem Stack abgelegt und verlieren ihre Gültigkeit nach verlassen der Prozedur. Natürlich kann man auch globale nehmen.
Der Kasus knaxus aber ist (Grundlage der Objektorientierten Programmierung): Man möchte verschieden viele Objekte während des Programmes verwenden und weiß zur Kompilierzeit noch gar nicht wie viele. Dann weiß ich aber auch nicht wie viel Speicher ich brauche und muss diesen dynamisch anfordern und natürlich auch wieder freigeben. Dies sind die wesentlichen Punkte, die die Construktoren und Destruktoren ausführen sollen. Die Initialisierung des Objektes ist nicht wirklich Aufgabe des Construktors und kann eine einfache Prozedur sein. Nimm einfach den Standardconstruktor

myobject:=Tmyobject.create;
initialize(myobject);
Stefan.Buchholtz
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 612

WIN 2000, WIN XP, Mac OS X
D7 Enterprise, XCode, Eclipse, Ruby On Rails
BeitragVerfasst: Mo 04.12.06 16:09 
user profile iconAllesquarks hat folgendes geschrieben:
myobject:=Tmyobject.create;
initialize(myobject);


Das halte ich aber für keinen guten Stil. In Object Pascal gehört Speicherallokation und Initialisierung schon zusammen - bei sowas sollte man sich meiner Meinung nach immer an die Konventionen der jeweiligen Sprache halten.

Und wenn man den nun unbedingt eine eigene Initalisierungsmethode haben will, sollte es auch wirklich eine Methode sein. Eine normale Prozedur hat in Objektinterna nichts verloren - man gibt sonst alle Vorteile der OOP auf.

Stefan

_________________
Ein Computer ohne Windows ist wie eine Schokoladentorte ohne Senf.
Allesquarks
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 510

Win XP Prof
Delphi 7 E
BeitragVerfasst: Mo 04.12.06 17:01 
meinte auch eine Methode
Hein Blöd Threadstarter
ontopic starontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic star
Beiträge: 51



BeitragVerfasst: Fr 08.12.06 14:51 
Ich danke euch.

_________________
nix