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 |

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 (resp. struktura), ke které jsou (v závislosti na její třídě) asociované nějaké metody — funkce a procedury. Tomu odpovídá i syntaxe definice (resp. rozhraní a implementace) třídy objektů:


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.

Viditelnost složek objektu

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 třídy (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, konstruktor

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.


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číme metodu slovem abstract a už ji nemusíme 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ář)]