Witam, mam problem z zapisem hierarchi mojej klasy. Klasa i hierarchia obiektów ma być zgodna z naturą i jest to przykład który ma mi pomóc zrozumieć zapis obiektów i zależności między nimi w OOP. Chcę aby każde utworzone "drzewo" miało tablice elementow "owoc" któro miało by tablice elementów "robak". Oto kilka moich prototypów :
- Tutaj zapisałem jedynie 3 różne klasy, niestety nie udało mi się uzyskać hierarchi. Jedynie dziedzicze z elementu nadrzędnego co wydaje mi się bezcelowe. Programista któy miał by używać takiej klasy musi sam dopilnować aby nie pomieszać przynależności owoców do drzew oraz robaków do owoców (bez sensu).
type
TDrzewo = class
wysokosc : integer;
wiek : integer;
typ : string;
iloscOwocow : integer;
//f i p
constructor Create(wysokoscD, wiekD : integer; typD : string);
destructor Destroy; override;
end;
type
TOwoc = class(TDrzewo)
typ : string;
waga : double;
iloscRobakow : integer;
//f i p
constructor Create(wagaO : integer; typO : string);
destructor Destroy; override;
end;
type
TRobak = class(TOwoc)
typ : string;
waga : double;
//f i p
constructor Create(wagaR : integer; typR : string);
destructor Destroy; override;
end;
- Podejście drugie, od szczegółu do ogółu. Wydaje mi się że za dużo konstruktorów. Nie potrzebnie dziedzicze, ale za to działają mi tablice i mogę je zadeklarować co w kolejnym przykładzie nie jest możliwe.
type
TRobak1 = class
public
typ : string;
waga : double;
//f i p
constructor Create(wagaR : integer; typR : string);
destructor Destroy; override;
type
TOwoc1 = class(TRobak1)
public
typ : string;
waga : double;
iloscRobakow : integer;
RobakiA : array of TRobak1;
//f i p
constructor Create(wagaO : integer; typO : string);
destructor Destroy; override;
type
TDrzewo1 = class(TOwoc1)
public
wysokosc : integer;
wiek : integer;
typ : string;
iloscOwocow : integer;
OwoceA : array of TOwoc1;
//f i p
constructor Create(wysokoscD, wiekD : integer; typD : string);
destructor Destroy; override;
end;
end;
end;
- Od ogółu do szczegółu. Nie mogę zadeklarować tablicy elementów z klasy podrzędnej. Zapis wydaje mi się najbardziej właściwy.
type
TDrzewo2 = class
public
wysokosc : integer;
wiek : integer;
typ : string;
iloscOwocow : integer;
tab1 : array of TOwoc2; //<--- blad
//f i p
constructor Create(wysokoscD, wiekD : integer; typD : string);
destructor Destroy; override;
type
TOwoc2 = class
public
typ : string;
waga : double;
iloscRobakow : integer;
//f i p
type
TRobak2 = class
public
typ : string;
waga : double;
//f i p
end;
end;
end;
Niestety nie wiem jak rozwiązać tak prosty problem. Czy ktoś mógłby mnie naprowadzić i powiedzieć jak to miało by wyglądać. Mam w zamyśle poprawić swoje programy i napisać nowe zgodnie z OOP i to mnie bardzo blokuje.