Nevíte-li si rady s jakýmkoliv matematickým problémem, toto místo je pro vás jako dělané.
Nástěnka
❗22. 8. 2021 (L) Přecházíme zpět na doménu forum.matweb.cz!
❗04.11.2016 (Jel.) Čtete, prosím, před vložení dotazu, děkuji!
❗23.10.2013 (Jel.) Zkuste před zadáním dotazu použít některý z online-nástrojů, konzultovat použití můžete v sekci CAS.
Nejste přihlášen(a). Přihlásit
Zdravím
Řeším mimo jiné Abstraktní datový typ. Znám jednoduché datové typy (celočíselné, reálné, logické znakové) a strukturované (pole, text, záznam, množina). U ADT jsem se dočetl, že mluvíme o seznamu, zásobníku, frontě, stromu, množině a slovníku.
Uměl by nějak v jedné větě napsat, co to vlastně ten Abstraktní datový typ je?
Offline
ADT je matematický model dat společně s operacemi nad tímto modelem. Abstrahujeme (provádíme abstrakci) od konkrétní reprezentace dat a implementace operací na těmito daty (a vytváříme tím vlastní datový typ). Operace jsou přístupné přes rozhraní. Návrh je nezávislý na programovacím jazyku.
V podstatě děláme zapouzdření jako u třídy.
V jedné třídě/modulu (souboru)/pevně odděleném bloku definuješ způsob uložení dat a operace (metody/funkce) pro přidání, smazání, hledání prvku, apod. Tyto operace jsou přístupné zvenčí. Jaká je použita implementace zvenku není vidět. Je jedno jestli je je zásobník implementován pomocí pole nebo spojového seznamu, navenek budou operace fungovat stejně.
https://edux.fit.cvut.cz/oppa/BI-PA2/pr … A2-p10.pdf
Offline
Děkuji za reakci.
Protože nejsem, ani nikdy nebudu, programátor, nedocvaklo mi to ještě úplně.
Při popisu ADT mi hned vyskočilo, že podobný princip je také u knihoven. Knihovna je v podstatě také rozdělena na dve části, z nichž jedno je jakési rozhraní a v druhé je samotná implementace. Také zapouzdřím nějakou operaci a umožním jí komunikovat "s ostatním světem" pomocí mnou zadaných pravidel.
Asi píšu blbosti, no :o)
Offline
Ano, můžeš si z toho udělat i knihovnu. A ano u knihovny také neznáš to co je uvnitř, jenom používáš to co ti autor umožnil.
Prostě jde o to, že chceš použít např. seznam. A aby jsi ho mohl použít vícekrát nebo pro různé datové typy, tak si pohromadě sepíšeš jak budeš ukládat data (třeba čísla) a k tomu metody pro založení nového seznamu, vložení prvku, smazání prvku, vyhledání prvku. A dohromady to nazveš ADT seznam.
Ten datový prvek seznamu bude privátní a metody public - ty metody jsou to rozhraní pro přístup, to co máš dostupné když to chceš použít. Data můžeš měnit, získat jenom těma metodama, ne přímo.
Zkus si projít to pdf nebo jinde na internetu je plno přednášek z různých škol.
Offline
↑ gladiator01: to mi pripomina definiciu algebraickov strukturov.
Offline
Teoretické definice neznám, ale prakticky je to o tom, že třeba u fronty je implementovaná ta funkcionalita fronty (FIFO - první dovnitř první ven), tj funkce Enque(), Deque(), případně smazání celé fronty atd, a přitom ten kód, co to řeší neví, jaký datový typ budeš do fronty vkládat.
Můžeš mít frontu proměnných typu int, nebo frontu nějakých struktur, nebo obecně čehokoliv - a to si zvolíš až když píšeš svůj kód. Kód, jež implementuje tu frontu to neví, a musí být udělaný tak, aby nezávisel na tom, co do fronty dáváš.
Pokud znáš nějaký konkrétní jazyk, tak napiš jaký, a můžu (pokud jej budu znát) uvést nějaký příklad.
Seznam např. je vlastně skoro to samé, jako pole. V jednoduchých jazycích (jako jazyk c) je pole prostě to, že je N stejných proměnných poskládáno za sebe (i ve fyzické paměti), ale třeba v jazyce C# je pole a seznam skoro to samé. Nevím, jestli je mezi tím vůbec nějaký rozdíl, jen se s tím trochu jinak pracuje, a seznam má k dispozici více funkcí.
Rozdíl je asi jen v tom, že pole se vytváří při překládání tvého zdrojového kódu, zatímco seznam je hotový, je to nějaký knihovní modul, který dostane informace o tom, jaký datový typ používá.
Offline