Autor Téma: Premenna typu "object"  (Přečteno 514 krát)

Offline Daniel_Andrascik

  • Guru
  • *****
  • Příspěvků: 590
  • Karma: 20
    • Verze Delphi: D2007, D10.4
Premenna typu "object"
« kdy: 10-03-2024, 13:12:03 »
Tak ma zase raz nieco prekvapilo. Delphi ma nezivi, je to pre mna skor hobby a robim si v delphi len kadejake utilitky, nastroje a pomocky. Ale i tak, po 20tich rokoch by ma uz nieco take nemalo prekvapit ale prekvapilo ma.

Studujem jeden vzorovy projekt a najprv som si to ani nevsimol, prehliadal som to ale stale mi na tom nieco nesedelo (ale je to jeden z tych kodov kde si typek zalamuje riadky takym sposobom ze by sa mal ist dat liecit, ale aj taky medzi nami su, ale zorientovanie sa v takom kode je hodne krkolomne).

A teraz k meritu veci. Co je record a co trieda mi je jasne uz niekolko desatroci, aj zakladne rozdieli spravania, narabanie s pamatou, dedicnost, polimorfizmus atd.

Ale co je toto:

Kód: Delphi [Vybrat]
  1. type
  2.   TCacheObj = object
  3.     AllocatedNum: integer;
  4.     ItemsNum: integer;
  5.     Items: PCacheItems;
  6.     constructor Init;
  7.     destructor Done;
  8.     procedure Clear;
  9.   end;
  10.  
  11. var
  12.   Cache: TCacheObj;
  13.  


Cache je nejaky datovy typ object, ani trieda, ani record. Smejte sa mi, ale s niecim takym sa stretavam prvy krat za 20 rokov.

Pride mi to, ze sa to sprava skor ako record, ale aky je tam potom rozdiel?

Offline Mi.Chal.

  • Guru
  • *****
  • Příspěvků: 577
  • Karma: 25
Re:Premenna typu "object"
« Odpověď #1 kdy: 10-03-2024, 15:06:49 »
Excellent
Rated 1 time
Já už teda v Delphi dávno nedělám, ale jestli se nepletu, tak tohle jsou nějaké relikty z Turbo Pascalu. V podstatě record, který má metody a mohou z něčeho dědit. Narozdíl od class to je hodnotový typ (jako record), přiřazením nebo jako parametr ve funkci se předává kopie.

Proto se taky často používaly typy definované jako pointery na tyhle objekty, to pak fungovalo podobně jako se chová class... (která v Turbo Pascalu nebyla, to zavedly Delphi a pak to bylo ve Free Pascalu, který vznikl později)

type TNeco = object ...
type PNeco = ^TNeco.

Offline pf1957

  • Padawan
  • ******
  • Příspěvků: 3534
  • Karma: 139
    • Verze Delphi: D2007, XE3, DX10
Re:Premenna typu "object"
« Odpověď #2 kdy: 10-03-2024, 17:02:42 »
Excellent
Rated 1 time
po 20tich rokoch by ma uz nieco take nemalo prekvapit ale prekvapilo ma.
Na to je 20 let malo - Delphi je tu tusim od roku 1995 a jak pise Mi.chal, tohle jsou pozustatky Turbo/Borland Pascalu viz Language reference

Offline Daniel_Andrascik

  • Guru
  • *****
  • Příspěvků: 590
  • Karma: 20
    • Verze Delphi: D2007, D10.4
Re:Premenna typu "object"
« Odpověď #3 kdy: 10-03-2024, 17:29:41 »
Na to je 20 let malo - Delphi je tu tusim od roku 1995 a jak pise Mi.chal, tohle jsou pozustatky Turbo/Borland Pascalu viz Language reference

Zjavne ano 🙈, ako hovorim dnes rano som sa zobudil, zacal som kukat dalej do toho divotvorenho projektu a skusal som lahke upravy a dajak to so mnou bojovalo ked som sa k tomu objektu spraval ako k triede a najprv som ani nechapal co sa deje, lebo som si to vobec nevsimol, az potom som to zbadal a ostal som na to cumiet jak bager na tvrdu hlinu 🤷. Zjavne clovek co to pisal musi byt uz v dnesnej dobe pametnik velmi dlhej historie 🙈