AGB  ·  Datenschutz  ·  Impressum  







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

Klassenkonzept

Ein Thema von bucada · begonnen am 30. Mär 2009 · letzter Beitrag vom 31. Mär 2009
Antwort Antwort
bucada

Registriert seit: 25. Okt 2007
4 Beiträge
 
#1

Klassenkonzept

  Alt 30. Mär 2009, 18:02
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:
 
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;
Nun möchte ich im Hauptprogramm die Personen benutzen.
Dabei soll beispielsweise nach den Deklarationen von 2 Personen folgendes funktionieren (hoffe ich )
Delphi-Quellcode:
  Person1 := TPersonenClass.create('Peter', 16);
  Person2 := TPersonenClass.create('Anna', 38);
  Person2.Mutter := Person1;
Leider meldet Delphi mir einen Fehler bereits bei der Kreierung der Person 1, dass er hinter 16 ein Komma vermisst.
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
  Mit Zitat antworten Zitat
quendolineDD

Registriert seit: 19. Apr 2007
Ort: Dresden
781 Beiträge
 
Turbo Delphi für Win32
 
#2

Re: Klassenkonzept

  Alt 30. Mär 2009, 18:19
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:
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;
Dekliniert werden die Personen jeweils wie folgt:
Delphi-Quellcode:
Person1 := TPersonenClass.create('Peter', 16, nil, nil);
  Person2 := TPersonenClass.create('Anna', 38, Person1, nil);
Interessant, dass die Mutter deiner Person2 Peter heißt

Du solltest dir hier wirklich ein anderes Klassenkonzept aussuchen.
Lars S.
Wer nicht mit der Zeit geht, geht mit der Zeit.
  Mit Zitat antworten Zitat
mjustin

Registriert seit: 14. Apr 2008
3.004 Beiträge
 
Delphi 2009 Professional
 
#3

Re: Klassenkonzept

  Alt 30. Mär 2009, 18:42
Zitat von quendolineDD:
Du verwendest hier das sogenannte Containment.
Man könnte es auch einfach 'Baumstruktur' nennen. So wie in Baumkuchen, oder wie in Stammbaum
Michael Justin
habarisoft.com
  Mit Zitat antworten Zitat
bucada

Registriert seit: 25. Okt 2007
4 Beiträge
 
#4

Re: Klassenkonzept

  Alt 30. Mär 2009, 20:33
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.
  Mit Zitat antworten Zitat
quendolineDD

Registriert seit: 19. Apr 2007
Ort: Dresden
781 Beiträge
 
Turbo Delphi für Win32
 
#5

Re: Klassenkonzept

  Alt 30. Mär 2009, 20:49
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
Lars S.
Wer nicht mit der Zeit geht, geht mit der Zeit.
  Mit Zitat antworten Zitat
guidok

Registriert seit: 28. Jun 2007
417 Beiträge
 
#6

Re: Klassenkonzept

  Alt 31. Mär 2009, 06:50
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.
  Mit Zitat antworten Zitat
Namenloser

Registriert seit: 7. Jun 2006
Ort: Karlsruhe
3.724 Beiträge
 
FreePascal / Lazarus
 
#7

Re: Klassenkonzept

  Alt 31. Mär 2009, 21:07
Kleine Anmerkung zum Stil: Normalerweise wird "self" weggelassen, wenn es nicht unbedingt benötigt wird.
  Mit Zitat antworten Zitat
quendolineDD

Registriert seit: 19. Apr 2007
Ort: Dresden
781 Beiträge
 
Turbo Delphi für Win32
 
#8

Re: Klassenkonzept

  Alt 31. Mär 2009, 21:13
Hier ist es aber unbedingt notwendig, da die Klassenmember von den Parametern des Konstruktors nicht direkt unterscheidbar sind. Heißen ja beide zB "name".
Lars S.
Wer nicht mit der Zeit geht, geht mit der Zeit.
  Mit Zitat antworten Zitat
Antwort Antwort


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 10:45 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