Ja tiež nie. O class function som si niečo prečítal, ale to neznamená, že som pochopil ich podstatu
Pokud používáš metody třídy nad objektem, tak při jejím volání předáváš skrytě i odkaz na ten objekt. U class metod tam nic takového není, metoda se dá používat bez existujícího objektu.
Samozrejme že každá zostava má vlastnú triedu. Tu som dal len minimum, ktoré som považoval za potrebné.
To vysvetlenie od Delfina mi plne stačí.
To si nejsem právě jist, že ti to stačí. V to tvém kódu je následující řádek:
oBasePrintFR := TBasePrintFR.Create(ATypeReport);
Ten se mi právě nelíbí. Třída, která vytváří tiskovou sestavu přeci ví s jakou tiskovou sestavou bude pracovat a ten parametr je tam zbytečný. Podle mě patří do nějaké tovární třídy, nikoliv sem. Maximálně patří jako návratová hodnota metody GetTypeReport.
Tovární třída musí podle něčeho rozhodnout jakou třídu má použít. Delfin ti tam pro zjednodušení jako parametr napsal typ třídy, ale takto to volat napřímo nemůžeš, protože pak celá ta logika továrny padá. To si tam pak můžu napsat TPrintFRxxx.create a nemusím se babrat s továrnou.
Továrna má smysl ve chvíli, kdy vedle ní mám nějaký katalog produktů (na továrně nezávislý) a podle nějakého parametru (výčtový typ, celočíselné konstanty, řetězec) požaduju po továrně, aby příslušný produkt vytvořila. A zase je asi proti principu továrny, aby měla přímo v nějaké metodě natvrdo napsaný case, který bude říkat, co se vyrobí. Protože s přidáním nového produktu musíš neustále upravovat továrnu.
Řešením je mít součástí továrny nějaký slovník (třeba TDictionary), který ukládá typ produktu a zároveň třídu produktu. Vedle toho tam musí být nějaká metoda, která umožní ten slovník plnit.
Dále musí být v programu někde možnost si ten katalog produktů v továrně naplnit. Osobně to řeším v sekci initialization v unitách, kde si vytvářím potomka té základní třídy. Hm, píšu nezávislý katalog produktů a mám jej přímo v továrně. Správně bych měl ten katalog v podobě slovníku předávat jako parametr, čímž bych mohl prostou výměnou katalogu místo aut třeba vyrábět koloběžky.