Dark Mode

Preskocit na obsah

Handle

Z Wikipedie, otevrene encyklopedie

Handle (prekladano tez jako madlo nebo rukojet) oznacuje v programovani pomocny objekt bez zname vnitrni struktury, ktery reprezentuje nejaky slozitejsi objekt spravovany cizim kodem. Vnitrne muze byt handle reprezentovan ukazatelem nebo referenci na cilovy objekt, cislem odkazujicim do tabulky, struktura primo obsahujici prislusna data atd., z hlediska aplikacniho programu vsak tato vnitrni struktura neni znama a handle je ,,nepruhledny objekt", ktery je pouze predavan mezi volanymi funkcemi API. Prikladem pouziti je handle otevreneho souboru - pri otevreni souboru ziska program od operacniho systemu handle na tento soubor, ktery predava vsem funkcim pracujicim s timto souborem. Pro program handle tento otevreny soubor reprezentuje a jeho prostrednictvim muze ziskat o tomto souboru informace, ci se souborem pracovat; presny obsah a struktura informaci ulozenych v handlu samem vsak programu nejsou znamy.

Ucel a vyhody

[editovat | editovat zdroj]

Existuje nekolik duvodu, proc byla tato technika vubec zavedena. Jeji hlavni vyhodou je tzv. zapouzdreni (tento koncept byl o neco pozdeji rozvinut v tzv. objektove orientovanem programovani) - oddeleni vnejsiho chovani a rozhrani nejakeho objektu od jeho vnitrni struktury. Toto striktni oddeleni umoznuje v pripade potreby zmenit ,,vnitrek objektu" - jeho vnitrni reprezentaci a implementaci - aniz by na takovou zmenu museli uzivatele objektu jakkoli reagovat, ba dokonce si uzivatele nemusi teto zmeny ani vsimnout.

Treba v prikladu handle na otevreny soubor si lze predstavit, ze presna struktura informaci, ktere si operacni system potrebuje udrzovat, muze zaviset na konkretnim systemu souboru, na kterem se soubor nachazi. Pokud by se tedy nepouzival handle, musel by program konkretne podporovat vsechny pozadovane souborove systemy.

Mezi typicka vyuziti handlu patri:

Vnitrni reprezentace a prace s handly

[editovat | editovat zdroj]

Handle je zpravidla jen maly objekt, nejcasteji se jedna o 32bitovou hodnotu; v nekterych pripadech se vsak formalne jako handle muze pouzivat cela datova struktura, u ktere pouze neni dovoleno jeji prime pouziti programem. Implementaci handlu muze byt obvykle bud primo ukazatel na odpovidajici vetsi datovou strukturu, nebo identifikacni cislo polozky v tabulce spravovanych objektu. V silne typovanych jazycich muze byt i sama vnitrni struktura handlu pred programem skryta (a jedine, co programovaci jazyk dovoli, je hodnotu opravdu jen predavat volanym funkcim).

Handle obvykle plati jen pro proces, kteremu byl pridelen, v nekterych pripadech je dokonce dovoleno handle vyuzivat jen z vlakna, kteremu bylo prideleno. Operacni system ci prislusna knihovna vsak mohou poskytovat prostredky, jak jinemu procesu umoznit pracovat se stejnym objektem - jak handle zduplikovat. Nektere handly take muze proces zdedit od procesu, ktery jej vytvoril.

Pomoci zpetneho inzenyrstvi se casto programatorovi muze podarit zjistit vnitrni reprezentaci handlu, coz pote muze vyuzit k primemu pristupu k reprezentovanemu objektu a pripadne s nim pracovat zpusobem, ktery jinak poskytovane rozhrani nenabizi. Takove vyuziti vsak neguje vsechny vyse zminene vyhody a vede k nefunkcnosti programu ve chvili, kdy knihovna tuto vnitrni reprezentaci zmeni.

Souvisejici clanky

[editovat | editovat zdroj]