Einzelnen Beitrag anzeigen

Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#5

Re: Wozu CREATE zur Instantiirung eigener Objektklassen?

  Alt 13. Nov 2006, 23:07
Also, da fehlen wirklich die (theoretischen) Grundlagen. Eine Ausbildung macht doch irgendwie Sinn.

Grundsätzlich stellen sich hier drei Fragen:
  1. Was ist eine Klasse?
  2. Welche Funktion hat sie?
  3. Was ist ein Objekt?
1. Eine Klasse beschreibt eine Menge (von irgendwas) welche gleichartige Attribute und Methoden besitzen.

2. Eine Klasse ist ein Bauplan, der beschreibt, wie etwas auszusehen hat. Oder mann kann auch sagen, ein Vordruck für ein Formular.

3. Ein Objekt ist eine Instanz einer Klasse. Oder anders gesagt ein Abbild der Klasse im Speicher mit dem man arbeiten kann.


Geht man von dem Vergleich mit einem Formular aus, dann ist es ja so, dass man auch nicht in den Vordruck des Formulars direkt reinschreibt, sondern man macht sich eine Kopie und füllt dann die Kopie aus. Genauso ist es auch mit einer Klasse und einem Objekt. Um eine Klasse benutzen zu können, muss man eine Instanz (Kopie) von ihr im Speicher anlegen. Diese Kopie der Klasse im Speicher nennt man Objekt.

Die Delphi Syntax dafür lautet:
Delphi-Quellcode:
var
  Objekt: TKlasse;
begin
  Objekt := TKlasse.Create;
Objekt ist jetzt ein Zeiger auf den Speicherbereich, in dem sich die Kopie der Klasse befindet. Natürlich muss man auch Speicher den man selber reserviert hat auch wieder frei geben. Dies macht man mit der Methode Free.

Ein vollständiges Beispiel:

Delphi-Quellcode:
var
  Objekt: TKlasse;
begin
  Objekt := TKlasse.Create;
  try
    // irgendwas machen mit dem Object
  finally
    Objekt.Free;
  end;
Das Konstrukt try-finally-end ist ein sogenannter Ressourcenschutzblock. Der Code-Block zwischen finally und end wir in jeden Fall ausgeführt, ob es nun zu einer Exception kommt oder nicht. So wird sicher gestellt, dass der Speicher für das Objekt auf alle Fälle wieder freigegeben wird.

Kommen wir zu deiner Frage. Was du gemacht hast ist folgendes. Du hast in den Vordruck des Formulares direkt reingeschrieben. Nur gibt es auf dem Vordruck eigentlich keinen Platz, um etwas reinzuschreiben, also hast du irgendwo auf einem belibiegen Stück Papier rumgekritzelt. Dass es bei dir trotzdem funktioniert hat, ist Zufall. Denn glücklicherweise hat sich kein anderer Teil deines Programmes diese Stück Papier reserviert, um es zu nutzen. Wäre das der Fall, hätte der andere Programmteil dein gekritzel überschrieben und wenn du das nächste mal dein Gekritzel lesen wolltest, hättest du für dich nur unverständliche Daten gelesen, mit denen du ichts anfangen kannst. Ein Absturz wäre die Folge gewesen.




Kommen wir zum Sender. Methoden einer Klasse haben als unsichtbaren Paramter immer den Self-Parameter. Dieser Self-Parameter ist nichts anderes als ein Zeiger auf die Instanz der Klasse selber. Damit kan nman innerhalb der Klasse auf Attribute und Methoden der eigenen Klasse zugreifen. Meist läßt an ihn aber weg, um Schreibarbeit zu sparen. Beispiel:

Code:
prozedure TKlasse.DoSomething([color=#00ff00]Self: TObject[/color]; i: Integer);
begin
  [color=#00ff00]Self[/color].FIndex := i; // FIndex ist eine privates Attribut der Klasse.
end;
Der grüne Code-Teil ist der Sef-Paramter, der auch weggelassen werden kann.


Ich hoffe, meine Erklärung beantwortet deine Frage und du hast es verstanden.

Als weiterführende Literatur könnte ich dirmein Klassen Tutorial für Delphi empfehlen: http://delphitutorials.michael-puff.de
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat