Deprecated: Function set_magic_quotes_runtime() is deprecated in /DISK2/WWW/lokiware.info/mff/wakka.php on line 35 Matfiz : Objekty V Pascalu
Přihlášení:  Heslo:  
Matfiz: ObjektyVPascalu ...
Hlavní Stránka | Seznam Stránek | Poslední Změny | Poslední Komentované | Uživatelé | Registrace |
Toto je stará verze stránky ObjektyVPascalu z 2007-03-19 21:20:54..

Objekty v Pascalu


Podle přednášky z Programování II 19. 3. 2007:


Objekt je podobně jako často v jiných objektově orientovaných jazycích záznam (struktura), ke které jsou (v závislosti na její třídě) asociované nějaké metody — funkce a procedury. Tomu odpovídá i syntaxe definice objektové třídy:


type JmenoTridy = object { nebo object(JmenoNadtridy) }
    {jako vnitrek definice}
    procedure JmenoProcedury1;
    procedure JmenoProcedury2;
    {... a obdobne funkce, strednik za deklaraci metody je povinny }
  end;

procedure JmenoTridy.JmenoNejakeProcedury;
begin
  { jako vnitrek obycejne procedury, k instancnim promennym se pristupuje jako k lokalnim }
end;


Poznámka: V Delphi class místo object.


Rozšíření syntaxe pro definici třídy


Složky třídy mohou být odděleny klíčovým slovem private (před a po nejsou žádné středníky, dvojtečky). To znamená v Turbo Pascalu přístupné z téže jednotky, v Delphi z metod objektu (a protected z třídy a podtříd, public veřejné, published i z inspektoru objektů).


V každé části oddělené klíčovým slovem pněco jsou nejdříve instanční proměnné, pak metody.

Virtuální a statické metody


Implementace statických metod jsou vždy vyhodnoceny při kompilaci (tzn. při kompilaci se rozhoduje, implementace které třídy se v daném místě zavolá). Metody, které nejsou explicitně virtuální jsou statické. Deklarace virtuální metody (procedury v tomto případě):


procedure DoSomething; virtual;


Virtuální musí být metoda konsistentně i u všech potomků (a musí to tam být i napsané). Aby virtuální metody fungovaly, je třeba zavolat na objektu konstruktor (ten jako vedlejší efekt nastaví odkaz na tabulku virtuálních metod, takže objekt ví, co je), žádná inicializace objektu tedy neproběhne implicitně. Konstruktor se od procedury liší klíčovým slovem constructor místo procedure (v deklaraci i definici).


Další otravná věc je, že pokud potřebujeme volat metody třídy Y na objektech, o nichž víme jen, že náleží její nadtřídě X, musíme je už v třídě X deklarovat jako virtuální a implementovat třeba tak, aby vyvolaly běhovou chybu (RunError(211), kde 211 kód chyby volání abstraktní metody). V Delphi označím metodu slovem abstract a již ji nemusím implementovat.

Dynamická alokace objektů

o : UkazatelNaObjektNejakeTridy;
{ ... }
o := New ( UkazatelNaObjektNejakeTridy, Konstruktor { s pripadnymi parametry jako u obycejneho volani} );


 
Na stránce nejsou žádné soubory. [Zobrazit soubory (formulář)]
Na stránce nejsou žádné komentáře. [Zobrazit komentáře (formulář)]