Einzelnen Beitrag anzeigen

silver-moon-2000

Registriert seit: 18. Feb 2007
Ort: Schweinfurt
170 Beiträge
 
Delphi XE Professional
 
#1

Auf Feld der übergeordneten Klasse zugreifen

  Alt 18. Mär 2009, 22:08
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.
Tobias
Bitte nicht hauen , ich weiß es nicht besser
  Mit Zitat antworten Zitat