Abstraktní datový typ: Porovnání verzí

Smazaný obsah Přidaný obsah
→‎Příklady: doplněna halda
Dinybot (diskuse | příspěvky)
m robot: typografické a kódové korekce a náhrady přesměrování podle specifikace
Řádek 3:
==Definice==
'''Datový typ''' je rozsah hodnot, které může proměnná tohoto datovému typu přijmout, a množina operací (funkce, metody nebo procedury),které jsou pro tento datový typ specifikovány. "+" je například definován pro numerické typy, a v některých programovacích jazycích pro typ string (řetězec). "-" je naproti tomu zpravidla definován jen pro numerické typy dat. Množina operací je uvedena v interface.
Abstraktní datový typ může mít odlišnou specifikaci. Ta se skládá z příznaků a sémantiky. Když vyřkneme matematickou definici, jedná se většinou o vztah mezi označením, zdroji a [[axiom|axiomy]]y. Z toho plyne první způsob specifikace ADT - Matematicko-axiomatický. Další možností specifikace je Matematicko-algebraická, která se odlišuje pouze sémantikou. Po obsahové stránce budou operace popsány matematicky pomocí [[matice|matic]], [[vektor|vektorů]]ů, [[posloupnost|posloupností]]í atd. Existují i jiné formy specifikace - přes deklaraci rozhraní v programovacím jazyku.
 
Krátká definice: Abstraktní datový typ je implementačně závislá specifikace struktury dat s operacemi povolenými na této struktuře.
Řádek 27:
Robustnost ADT spočívá v tom, že implementace je skrytá a programátorovi jsou nabídnuty pouze ovládací prvky. Vlastní implementaci ale lze změnit.
 
Je rozdíl mezi abstraktním datovým typem a datovou strukturou použitou pro jeho implementaci. Například seznam jako ADT může být implementován jako pole, nebo jako spojový seznam. Seznam je ADT s definovanými operacemi (jako vložit_prvek, smazat_prvek atd.), ale spojový seznam je datová struktura, která používá [[ukazatel|ukazatele]]e a může být použita k vytvoření seznamu jako ADT.
 
==Zabudované ADT==
Protože některé abstraktní datové typy jsou velmi užitečné a běžně používané, některé programovací jazyky používají tyto ADT jako primitivní datové typy, které jsou přidány do jejich [[Knihovna (programování)|knihoven]]. Například v [[Perl|Perlu]]u je možné pole považovat za implementaci seznamu, standardní knihovny [[C++]] a [[Java|Javy]] zase nabízejí implementaci seznamu, zásobníku, fronty a řetězců.
 
==Abstraktní datová struktura==
Řádek 46:
* '''Zapouzdření''': rozhraní by mělo být pojato jako uzavřená část. Uživatel by měl vědět přesně co ADT dělá, ale ne jak to dělá.
* '''Integrita''': uživatel nemůže zasahovat do vnitřní struktury dat. Tím se výrazně sníží riziko nechtěného smazání nebo změna již uložených dat.
* '''Modularita''': "stavebnicový"„stavebnicový“ princip programování je přehledný a umožňuje snadnou výměnu části kódu. Při hledání chyb mohou být jednotlivé moduly považovány za kompaktní celky. Při zlepšování ADT není nutné zasahovat do celého programu.
 
Pokud je ADT programován objektově, jsou většinou tyto vlastnosti splněny.