Zapouzdření (programování): Porovnání verzí
Smazaný obsah Přidaný obsah
Robot: Opravuji 1 zdrojů and označuji 0 zdrojů jako nefunkční #IABot (v2.0beta15) |
m Robot: -zastaralá značka HTML; kosmetické úpravy |
||
Řádek 1:
'''Zapouzdření''' může být vysvětleno jako zabalení dat a metod do jedné komponenty. Funkce zapouzdření jsou dostupné skrze třídy ve většině objektově orientovaných programovacích jazyků. Zapouzdření rovněž umožňuje ukrytí atributů a metod v objektu pomocí stavby nepropustné zdi, která brání kód proti nechtěným změnám.
V programovacích jazycích je '''zapouzdření''' přirovnáváno k jednomu z dvou pojmů a někdy i jejich kombinací,<ref>Michael Lee Scott, ''Programming language pragmatics'', Edition 2, Morgan Kaufmann, 2006, ISBN 0-12-633951-1, p. 481:
* Nástroj programovacího jazyka, který je určen pro znepřístupnění jistých komponent [[Instance třídy|objektů]].<ref>[[John C. Mitchell]], ''Concepts in programming languages'', Cambridge University Press, 2003, ISBN 0-521-78098-5, p.522</ref><ref name=Pierce>{{cite book|last=Pierce|first=Benjamin|authorlink=Benjamin C. Pierce|title=[[Types and Programming Languages]]|publisher=MIT Press|year=2002|isbn=0-262-16209-1}} p. 266</ref>
* Konstrukce jazyka, která váže data s [[Metoda (objektově orientované programování)|metodami]], které pracují nad danými daty.<ref>Wm. Paul Rogers, [http://www.javaworld.com/javaworld/jw-05-2001/jw-0518-encapsulation.html?page=9 ''Encapsulation is not information hiding''], JavaWorld.com, 05/18/01</ref><ref>Thomas M. Connolly, Carolyn E. Begg, ''Database systems: a practical approach to design, implementation, and management'', Edition 4, Pearson Education, 2005, ISBN 0-321-21025-5, Chapter 25, "Introduction to Object DMBS", section "Object-oriented concepts", p. 814</ref>
Řádek 12:
Ukrytí jakýkoliv interních informací objektu chrání jeho integritu proti uživatelům tak, aby je nebylo možné nastavit do invalidního či nekonzistentního stavu. Předpokládaná výhoda zapouzdření je ve zmenšení složitosti systému a tedy ve zvýšení robustnosti.
Jako skoro všude a vždy zde existuje cesta, jak zapouzdření obejít - obvykle skrz [[Reflexe (programování)|reflexní]] API ([[Ruby (programovací jazyk)|Ruby]], [[Java (programovací jazyk)|Java]], [[C Sharp|C#]] a další), někdy ale i skrz mechanismy mandlování (Python) či skrz speciální klíčová slova jako <code>friend</code> v C++.
Následuje ukázka v jazyce [[C Sharp|C#]], která ukazuje, jakým způsobem se dá zakázat přístup k datovým polím pomocí využití klíčového slova <code>private</code>:
<
class Program {
public class Ucet {
Řádek 30:
/* Metoda Main může zjistit zůstatek na účtě skrz veřejnou (public)
}
}
</syntaxhighlight>
Následuje ukázka v jazyce [[Java (programovací jazyk)|Java]]:
<
public class Zamestnanec {
private BigDecimal mzda = new BigDecimal(50000.00);
Řádek 50:
}
}
</syntaxhighlight>
Následuje ukázka v jazyce [[PHP]]:
<
class Ucet
{
Řádek 124:
// Kód zabraňuje rovněž vybírání více, než máme v daném účtě
$mujUcet->vybrat(600.00); // Vyhodí výjimku
</syntaxhighlight>
Zapouzdření je rovněž možné využívat ve starších jazycích, které nejsou objektově orientované. Například v [[C (programovací jazyk)|C]] – struktura může být deklarována ve veřejně přístupné části (hlavičkový soubor) pro množinu funkcí, které operují nad danými daty, které obsahují členské proměnné, které nejsou přístupné klientům skrz hlavičku:
<
// Hlavička "api.h"
struct Entity;
// Hlavičkové funkce, které operují nad strukturou Entity a jejími členy
extern struct Entity *
extern int
extern void
</syntaxhighlight>
Klient pak volá hlavičkové funkce k alokování, provádění operací a dealokování struktur typu „Entity“. Obsah tohoto typu je znám a přístupný pouze implementovaným hlavičkovým funkcím. Klienti nemohou k tomuto obsahu přímo přistoupit. Následuje zdrojový kód pro funkce, které definují vlastní obsah již zmíněné struktury:
<
// Implementace "api.c"
Řádek 159:
void close_entity(struct Entity *info)
{ ... }
</syntaxhighlight>
== Historický význam ==
Řádek 175:
== Externí odkazy ==
[https://web.archive.org/web/20150325234946/http://www.soapatterns.org/service_encapsulation.php SOA Patterns.org]
[[Kategorie:Objektově orientované programování]]
|