Zapouzdřenost

Systém je tvořen z jednotlivých objektů. Objekt je tvořen lokálními datovými strukturami a procedurami/funkcemi, které jediné zabezpečují přístup k datům. Nazývají se metody. Zapouzdřenost též slouží k identifikaci: objekt ví, jaká data obsahuje, jaký je jejich formát a jaké je jejich jméno.

V souvislosti se zapouzdřením hovoříme o granularitě. Granularita objektů vyjadřuje, jak velké jsou objekty. (Příklad: jsou-li objektem jen velké datové struktury, pole, záznamy - jde o velkou granularitu. Jsou-li za samostatné objekty brány např. i znaky a čísla, jde o jemnou granularitu).

Často se do souvislosti se zapouzdřeností dává posílání zpráv: v extrémním případě objekty vůbec nekomunikují přímo, tzn. nevolají navzájem své metody, ale jen nepřímo - navzájem si posílají zprávy. V takovém případě objekt koná činnost na základě nějaké události, např. události, že mu přišla určitá zpráva. V takovém případě hovoříme o událostmi řízeném programování (event-driven programming).

Zapouzdřenost je v prostředí Delphi realizována dvěma mechanismy:

  1. Zapouzdřenost na úrovni jednotek - UNITs. Základním celkem, ze kterých se skládá rozsáhlejší program v Delphi, je jednotka - UNIT. Každý formulář má svou UNITu, další UNITy se k programu připojují jako knihovny. Jenotka obsahuje dvě základní části: část INTERFACE obsahuje všechny prvky programu, které se zveřejňují, tzn. které jsou k dispozici ostatním částem programu. Naproti tomu část IMPLEMENTATION obsahuje implementační detaily, které jsou před zbytkem programu skryté, neviditelné. K částem ukrytým v IMPLEMENTATION nelze přistoupit jinak, než pomocí tříd, procedur a funkcí zveřejněných v části INTERFACE.
  2. Zapouzdřenost na úrovni tříd. Jestliže je nějaký objekt (patřící do nějaké třídy) zveřejněn v části IMPLEMENTATION, pak je tento objekt ze zbytku programu, tzn. z ostatních jednotek, viditelný. To ovšem ještě neznamená, že jsou přístupné všechny části takového objektu, že jsou viditelné. O tom, zda budou či nebudou viditelné, rozhodují specifikátory viditelnosti třídy. Tyto specifikátory mohou být:
    1. public - všechna data a metody, uvedené v části public, jsou viditelné ze všech ostatních jednotek.
    2. private - žádná data ani metoda, uvedené v této části, nejsou zvnějšku objektu viditelné.
    3. protected - data a metody jsou viditelné, ale jen pro potomky dané třídy. Pro ostatní třídy jsou neviditelné.
    4. published - data a metody uvedené v této části mají viditelnost stejnou jako kdyby byly public, ale navíc mají ještě další vlastnost - je k nim připojena RTTI (Real Time Type Information), informace o typu přístupná za běhu programu. Typickým příkladem použití jsou vlastnosti (properties) komponent, které jsou přístupné prostřednictvím Object Inspectoru i v době návrhu, tzn. když aplikace zaručeně neběží.

Není-li uveden žádný specifikátor, defaultně se rozumí public. Podrobnosti o specifikátorech viditelnosti zájemce nalezne v učebnici na str. 78 a 80. RTTI je popsána na straně 96.

Povšimněte si, že při deklaraci třídy je vždy potřeba datové prvky zapsat před metodami; toto pořadí se při použití specifikátorů přístupu modifikuje tak, že platí v každé sekci zvlášť. To znamená, že v každé sekci je třeba zapsat data té sekce před metodami sekce.

Důležité také je, že Delphi si v řadě objektových tříd (typické to je u formulářů Form) poznamenávají určité údaje ještě před specifikátory public či private. Lze vypozorovat, že např. u třídy Form to jsou komponenty a hlavičky metod, které se během návrhu vkládají do formuláře. Tyto údaje si obhospodařují Delphi samy a programátor do nich nesmí nijak zasahovat, resp. pokud zasahuje, nesmí se pak ničemu divit.

Vlastnosti - properties