![]() |
Klassenkonzept
Hallo,
ich bin noch recht neu in der OOP und habe ein kleines Problem. Ich möchte innerhalb der Klasse eine Instanz derselben Klasse haben. Ich habe mir das so gedacht:
Delphi-Quellcode:
Nun möchte ich im Hauptprogramm die Personen benutzen.TPersonenClass = class name : String; alter : Integer; Mutter, Vater : TPersonenClass; constructor create(name : String; alter : Integer; Mutter, Vater : TPersonClass); end; implementation constructor TPersonClass.create(name : String; alter : Integer; Mutter, Vater : TPersonClass); begin self.name := name; self.alter := alter; // Was muss ich hier eingeben damit es klappt mit Mutter und Vater? end; Dabei soll beispielsweise nach den Deklarationen von 2 Personen folgendes funktionieren (hoffe ich ;) )
Delphi-Quellcode:
Leider meldet Delphi mir einen Fehler bereits bei der Kreierung der Person 1, dass er hinter 16 ein Komma vermisst.
Person1 := TPersonenClass.create('Peter', 16);
Person2 := TPersonenClass.create('Anna', 38); Person2.Mutter := Person1; Ich verstehe leider nicht was ich falsch mache. Es wäre nett, wenn mir jemand erklären könnte woran es liegt, oder mir ein Link auf eine Seite, oder Tutorial geben könnte, wo ich das nachlesen könnte. Ich habe in der Suche leider nichts gefunden. :( (Vielleicht habe ich aber auch falsche Begriffe eingegeben...) Vielen Dank im Voraus |
Re: Klassenkonzept
Du verwendest hier das sogenannte Containment. Du hast eine Klasse, welche eine weitere Klasse beinhaltet.
Ich persönlich finde es so nicht gut. Da du ja nun auch wiederum von Vater und Mutter die jeweiligen Eltern benennen musst. Ansonsten bekommst du ja inkonsistente Daten. Aber sei es drum. Du hast einen Constructor, welcher 4 Parameter erwartet: Den Namen, das Alter und Vater und Mutter. Im Implementationsteil muss das dann wie folgt lauten:
Delphi-Quellcode:
Dekliniert werden die Personen jeweils wie folgt:
implementation
constructor TPersonClass.create(name : String; alter : Integer; Mutter, Vater : TPersonClass); begin self.name := name; self.alter := alter; self.Mutter := Mutter; self.Vater := Vater; end;
Delphi-Quellcode:
Interessant, dass die Mutter deiner Person2 Peter heißt ;-)
Person1 := TPersonenClass.create('Peter', 16, nil, nil);
Person2 := TPersonenClass.create('Anna', 38, Person1, nil); Du solltest dir hier wirklich ein anderes Klassenkonzept aussuchen. |
Re: Klassenkonzept
Zitat:
|
Re: Klassenkonzept
Vielen Dank für Eure Hilfe. :)
Ich glaube, ich habe es richtig verstanden. Das mit NIL stellt ja dann quasi einen Zeiger auf die andere Person zur Verfügung, der aber noch nirgendwo zeigt. Ok, in dem Beispiel müsste es der Zeiger andersherum sein. ;) |
Re: Klassenkonzept
nil entspricht dem C/C++-Derivat null. Es steht für einen leeren Zeiger. Ich nutzte es, da keine Personen für diese Daten zu vergeben waren :-)
|
Re: Klassenkonzept
Ich persönlich würde die Namen der Personen nicht im Constructor zuweisen, sondern als normale Propertys implementieren. Du wirst ggf. auch nach dem "Erzeugen" der Person noch einmal einen Namen ändern wollen (falls das eine Stammbaumverwaltung wird und sich der Benutzer mal vertippt hat, z.B.) und dazu brauchst du eh die Propertys.
|
Re: Klassenkonzept
Kleine Anmerkung zum Stil: Normalerweise wird "self" weggelassen, wenn es nicht unbedingt benötigt wird.
|
Re: Klassenkonzept
Hier ist es aber unbedingt notwendig, da die Klassenmember von den Parametern des Konstruktors nicht direkt unterscheidbar sind. Heißen ja beide zB "name".
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:19 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz