Matematické Fórum

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

#1 21. 07. 2016 14:12

Gooorila
Příspěvky: 33
Reputace:   
 

Abstraktní datový typ -

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

 

#2 22. 07. 2016 13:56 — Editoval gladiator01 (22. 07. 2016 17:37)

gladiator01
Místo: Jindřichův Hradec
Příspěvky: 1587
Škola: ZČU FAV - SWI
Pozice: absolvent
Reputace:   53 
Web
 

Re: Abstraktní datový typ -

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


Naděje jako svíce jas, potěší srdce štvané, čím temnější je noční čas, tím zářivěji plane.
VIVERE - MILITARE EST (Seneca)
Vím, že nic nevím. - Sokrates

Offline

 

#3 23. 07. 2016 19:05

Gooorila
Příspěvky: 33
Reputace:   
 

Re: Abstraktní datový typ -

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

 

#4 23. 07. 2016 22:24

gladiator01
Místo: Jindřichův Hradec
Příspěvky: 1587
Škola: ZČU FAV - SWI
Pozice: absolvent
Reputace:   53 
Web
 

Re: Abstraktní datový typ -

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.


Naděje jako svíce jas, potěší srdce štvané, čím temnější je noční čas, tím zářivěji plane.
VIVERE - MILITARE EST (Seneca)
Vím, že nic nevím. - Sokrates

Offline

 

#5 16. 07. 2018 02:49

Twor21
Zelenáč
Příspěvky: 8
Reputace:   
 

Re: Abstraktní datový typ -

↑ gladiator01: to mi pripomina definiciu algebraickov strukturov.

Offline

 

#6 16. 07. 2018 15:21

MichalAld
Moderátor
Příspěvky: 5047
Reputace:   126 
 

Re: Abstraktní datový typ -

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

 

Zápatí

Powered by PunBB
© Copyright 2002–2005 Rickard Andersson