Hallo zusammen,
ich habe (mal wieder) eine Grundsatzfrage, (der Post wird also wieder etwas länger)
Delphi-Quellcode:
type TBookShelf = class(TObject)
private
FSavePath : string;
FBooks : TObjectList;
public
end;
type TBook = class(TObject)
private
FBookTitle : string;
FChapters : TObjectList;
end;
type TChapter = class(TObject)
private
FChapterTitle : string;
public
procedure OpenChapter;
end;
Die Klasse TChapter hat nun eine Methode namens OpenChapter, die dieses Chapter (das als PDF File existiert) mit dem zugehörigen Programm (per Shell-Execute o.Ä.) öffnen soll
Nun das eigentliche Problem: Wie bekomme ich
in TChapter den gesamten Dateinamen heraus, der sich folgendermaßen zusammensetzt:
"TBookShelf".FSavePath\"TBook".FBookTitle\"TChapte r".FChapterTitle.pdf
Die einzige Möglichkeit,
die ich kenne, wie es zu machen geht, wäre, dass ich über die Konstruktoren den Instanzen von TBook & TChapter eine Referenz auf deren "Parent" mitgebe:
Delphi-Quellcode:
constructor TBook.Create(bks : TBookShelf)
constructor TChaoter.Create(bk : TBook)
[...]
in TBookShelf:
FBooks.Add(TBook.Create(self));
[...]
in TBook:
FChapters.Add(TChapter.Create(self));
Somit also am Beispiel von TChapter (TBook analog: FBookShelf : TBookShelf)
Delphi-Quellcode:
type TChapter = class(TObject)
private
FChapterTitle : string;
FBook : TBook;
public
constructor Create(bk : TBook);
procedure OpenChapter;
end;
constructor TChapter.Create(bk : TBook);
begin
inherited Create;
FBook := bk;
end;
procedure TChapter.OpenChapter;
var completePath : string;
begin
completePath := bk.FBookShelf.SavePath + bk.BookTitle + FChapterTitle;
end;
Ich habe dabei das Gefühl, den
OOP Ansatz nicht wirklich umzusetzen / verstanden zu haben, wenn ich jedem Element eine Referenz auf seinen "Parent" mitgebe.
Um diesen langen und zugegebenermaßen verwirrenden Post zusammenzufassen:
Gibt es eine andere Möglichkeit, in TChapter auf Felder aus TBook und TBookShelf zuzugreifen, als jedem Element eine Referenz auf seinen "Parent" zu geben
p.s. mir ist so, als ob ich diese Frage schon mal gestellt hätte, aber ich habe bei einer Suche nichts gefunden. Falls dem tatsächlich so ist, tut's mit leid.