Vyšlo v týdeníku Computerworld č. 44/93 v roce 1993
Vytištěno z adresy: http://www.earchiv.cz/a93/a344c120.php3

Encapsulation

Máte-li za úkol zvládnout něco, co je opravdu velké a složité (například rozsáhlý program), pak jedním z největších problémů, na který přitom narazíte, je schopnost orientovat se ve velkém množství vzájemných závislostí a vazeb. Pak jistě náležitě doceníte, jak dobré je udržovat si ve všem pořádek.

Pokud jde o programování, zde se postupně vyvinulo více různých postupů, technik a nástrojů, které se snaží zpřehlednit velké programové celky, vnést do nich určitý řád a usnadnit jejich zvládnutí. Patří sem například strukturované programování (Structured Programming) či tzv. objektově orientované programování (zkratkou: OOP, od: Object Oriented Programming).

Jednou z hlavních myšlenek objektově orientovaného programování je zásada, že to, co logicky patří k sobě, by mělo tvořit jeden logický celek. Představme si například, že modelujeme chování nějaké soustavy, složené z více jednotlivých prvků. Kvantitativní stav každého prvku popíšeme určitým počtem proměnných a jeho chování vyjádříme operacemi (tj. procedurami či funkcemi), které budou s těmito proměnnými pracovat. Abychom si udrželi ve věcech přehled, nabízí nám objektově orientované programování mechanismus, pomocí něhož můžeme sdružit do jednoho celku proměnné, popisující daný prvek, a současně s tím i operace, které modelují jeho chování. Výsledný celek pak může velmi přirozeným a intuitivním způsobem reprezentovat modelovaný prvek jako takový.

Konkrétní mechanismus, který je objektově orientovaným programováním za tímto účelem poskytován, se v angličtině označuje jako encapsulation a v doslovném překladu znamená zapouzdření (resp. zapouzdřování). Výsledný celek, který vznikne zapouzdřením proměnných a operací (či jiných programových objektů, podle konkrétního jazyka), se nejčastěji označuje jako třída (class). Jednou z významných výjimek je objektově orientovaný Turbo Pascal firmy Borland (od verze 5.5), který místo pojmu třída používá termín objekt (object).

Další oblastí, kde se můžeme setkat s termínem encapsulation, jsou počítačové sítě a komunikace. Zde tento termín označuje techniku, která řeší poněkud jiný problém než u objektově orientovaného programování.

V počítačových sítích se mohou používat různé přenosové technologie a různé přenosové protokoly. Představme si například dvě lokální sítě A a B vzájemně propojené sítí C, která je jiného typu, a tudíž používá i jiné přenosové protokoly než sítě A a B. Mají-li pak být přenesena nějaká data ze sítě A do sítě B (přes síť C), může to být realizováno dvěma principiálně odlišnými způsoby.

První z nich spočívá v tom, že při přechodu ze sítě A do sítě C jsou přenášená data transformována (tj. jsou "přeložena" do takového tvaru, který odpovídá přenosovým protokolům používaným v síti C, a na výstupu ze sítě C do sítě B jsou zase transformována zpět do původního tvaru). Druhá varianta spočívá v tom, že přenášená data se ponechají v původním formátu a pro potřeby přenosu přes síť C se pouze vloží do takové "obálky", se kterou síť C pracuje (tj. na vstupu do sítě C se tato data vloží do přenosového rámce či paketu, se kterým síť C pracuje, a na výstupu ze sítě C se z tohoto rámce či paketu zase vyjmou).

Pokud bychom chtěli najít nějakou výstižnou analogii, pak se přímo vnucuje srovnání s přenosem textu napsaného na listu papíru. Rozdíl v přenosových protokolem mezi sítěmi A a B na jedné straně a sítí C na straně druhé by pak odpovídal například jinému jazyku, ve kterém by tento text byl napsán (včetně pokynů k doručení). První varianta by pak odpovídala tomu, že při přechodu ze sítě A do sítě C je text přeložen do jazyka používaného v síti C a přepsán na nový list papíru, který je pak skutečně přenášen sítí C. Při přechodu ze sítě C do sítě B je pak tentýž text přeložen zpět do původního jazyka a přepsán na nový list papíru. Analogií druhé varianty by byla situace, kdy je na přechodu ze sítě A do sítě C list papíru s původním textem vložen do obálky; na ni jsou v jiném jazyku (v tom, který je používán v síti C) napsány pokyny nezbytné k doručení obálky a tato obálka je pak přenesena sítí C. Na výstupu do sítě B je tato obálka rozbalena a v ní obsažený list papíru je předán do sítě B.

A právě této druhé variantě se také říká encapsulation (zapouzdřování), zatímco první varianta se většinou označuje přívlastkem překládající (translational, translating).

Velmi významný a markantní je rozdíl mezi oběma variantami například u mostů (bridges), které zajišťují převod mezi sítěmi FDDI a sítěmi typu Ethernet. Pokud takovýto most funguje jen jako tzv. encapsulating bridge (zapouzdřující most), pak příjemce i odesilatel se musí nacházet ve stejné síti (tedy např. oba v síti typu Ethernet). Pokud se příjemce i odesilatel nachází v síti jiného typu (tj. jeden v síti FDDI, a druhý v ethernetové síti), pak musí být použit tzv. translating bridge (překládající most).