Archief - [PROG] Abstract Data Type vs Datastructuur

Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.

T0mMe

Legacy Member
Kan iemand mij eens het verschil uitleggen tussen beiden? Ik ben momenteel een boek aan het lezen over CS (Computer Science Illuminated, pagina 279-281) en dit staat daarin beschreven, maar ik snap er niks van. :)

Bedankt alvast.

T0mMe

Legacy Member
PiNgU zei:
volledig offtopic marre: Unif antwerpen, 1ste bach info?
Andere richting, maar zo ben ik idd aan het boek geraakt. Studies niet voltooid, vandaar wat zelfstudie nu. :)

Kreek

Legacy Member
Data abstractie
o Zelf gedefinieerde types (interne voorstelling,
waardenverzameling en operaties)
encapsuleren als een geheel, leidt tot
Abstracte Data Types (ADT)
o Door ADTs modulair te implementeren (type-
definitie samen met de operaties als
procedures), en maximaal de details te
verbergen (enkel de essenties exporteren)
kunnen ze gebruikt worden als een
gepredefinieerd type (op details na…)

Dus vooral het afschermen van data, information hiding, ... De gebruiker van zo'n object moet niets weten over de interne werking, maar wil de objecten gewoon gebruiken.

T0mMe

Legacy Member
Bedankt voor de poging, maar dat maakt het er niet duidelijker op. :)

killgore

Legacy Member
ADT = een bepaald type dat jij implementeert voor dataverwerking, met hierop gedefinieerde bewerkingen (zoals bijvoorbeeld een stack met pop/push operaties).

Datastructuur = een structuur zelf. Een boom, een array, linked list, ... .

Voorbeeldje: Je maakt een mapping-klasse. Hierop definieer je insertmethoden, opzoekmethoden, removemethoden, ... . Deze maakt meestal gebruik van red-black trees (speciale vorm binary trees). De red-black tree zelf is hier je datastructuur, heel je mapping is een ADT.

Dus die ADT houdt ook bewerkingen in op je datastructuur.

Reden van abstract naam is dat de datastructuur en de operaties normaal gezien onafhankelijk zijn van het type data dat erin wordt verwerkt (of enkel moeten voldoen aan een zeer beperkt aantal concrete eisen).

T0mMe

Legacy Member
Kan een ADT soms een datastructuur zijn, of andersom?

In mijn ander boek over Java staat het volgende:
An abstract data type hides the implementation of a data structure behind a well-defined interface. This characteristic makes objects a perfect way to define ADT's.
Na dit te lezen dacht ik dat ik het wel doorhad (een datastructuur wordt gebruikt om een ADT te implementeren?). Even verder in het boek worden dan enkele datastructuren opgesomd zoals stack, queue, tree, graph. Maar de auteur spreekt dan ineens over de "Stack ADT". Erg verwarrend.. Hetzelfde met "list", is een list nu een ADT of een datastructuur?

killgore

Legacy Member
mja, datastructuur is een vrij globaal concept :).

In pc's heb je eigenlijk maar 2 manieren om een blok data op te slaan, ofwel alles bijeen (cfr arrays), ofwel alles gescheiden, waarbij je pointers bijhoudt tussen objecten (cfr linked lists en boomstructuren).

De datastrctuur zelf is deze manier van opslaan. Een stack is dan bv doorgaans 1 blok data waar je enkel data kan toevoegen aan de top en iets afhalen aan de top. Dat is dus die datastructuur.

Je ADT is dan een interface (zoals een klasse) die heel deze functionaliteit (toevoegen -> push, verwijderen->pop) implementeert en de gebruiker afschermt van eigenlijk de datastructuur zelf.

Dus zoals jij "doorhad".

Jouw vraag ivm list. Valt te zien wat je bedoelt. Dit:

A->B->C->D->E->null

is een lijst dus, dat op zich is een datastructuur. Je hebt immers enkel de dataelementen (A,B,C,D,E) die naar elkaar wijzen, mooi lijstje dus.

Echter kan je nu een container definiëren, zoals:
Code:
class List
{
    public:
       add(item);
       remove(item);
       getFirstElement();
       getNextElement(currentElement);
}
(geen realistisch vb. of course).

Dit noemt nu ook een lijst, maar is duidelijk je ADT, de interne datastructuur gebruikt om voor jou de container List te leveren is afgeschermd. Het is zelfs niet 100% nodig dat intern een lijst zoals hiervoor wordt gebruikt, het kan zijn dat jouw library om diverse redenen liever een array gebruik thiervoor.

Maar dus "datastructuur" is een vrij globaal concept. Het kan dus al eens voorvallen dat je boek datastructuur gebruikt wanneer ze eigenlijk het ADT bedoelen.

T0mMe

Legacy Member
Dus, voor alle duidelijkheid: linked list = datastructuur, klasse List = container = ADT? En mijn gezegde "een datastructuur wordt gebruikt om een ADT te implementeren" klopt dus?

Je haalt aan dat een stack een datastructuur is, maar wordt deze zelf ook niet geïmplementeerd mbv andere datastructuren (linked of array)? En als ik het goed begrijp kan je dan ook zelf een stack ADT definiëren door zelf zo'n klasse te schrijven? Of zelfs een array ADT?

Daedie

Legacy Member
ja, das juist.
Stack is eigenlijk een ADT, de onderliggende linked list/array/whatever zou de datastructuur zijn. Maar die termen worden over het algemeen vrij los gebruikt.

T0mMe

Legacy Member
Dus algemener kan je een ADT (met onderliggende datastructuur) gebruiken om een andere ADT op een hoger niveau te implementeren? En dus mag je die eerste ADT gerust een datastructuur noemen? :)

Ice

Legacy Member
ja, dat is nu eenmaal de definitie van: "die termen worden over het algemeen vrij los gebruikt" ;)

killgore

Legacy Member
HC_Daedalus zei:
ja, das juist.
Stack is eigenlijk een ADT, de onderliggende linked list/array/whatever zou de datastructuur zijn. Maar die termen worden over het algemeen vrij los gebruikt.

Idd, ik zat eventjes bezig met asm toen ik die reply schreef, vandaar de "onduidelijkheid", mijn excuses :).

T0mMe

Legacy Member
Ok, ik begrijp nu wel wat een ADT is, en ook dat een linked-list en array datastructuren zijn. Maar het onderscheid blijft soms verwarrend. Mijn ene boek noemt een stack, queue, tree en graph ADT's; het andere boek noemt dit datastructuren en soms ADT's. Mijn brein kan dat blijkbaar niet goed verwerken. :crazy:

Misschien wordt het met de tijd wat duidelijker voor mij. In ieder geval bedankt voor alle respons tot hiertoe, dit heeft mij weer wat verder geholpen! :niceone:

Daedie

Legacy Member
kzou der ook niet te hard van wakker liggen. Nog belangrijker dan weten wat ADT's en datastructeren zijn, is ze kunnen implementeren en toepassen ^^.

killgore

Legacy Member
HC_Daedalus zei:
kzou der ook niet te hard van wakker liggen. Nog belangrijker dan weten wat ADT's en datastructeren zijn, is ze kunnen implementeren en toepassen ^^.

Volledig akkoord mee :).

T0mMe

Legacy Member
Da's idd de bedoeling. We zullen dit dan meer links laten liggen tot (veel) later. Heb hier eerst nog wat programmeerboeken uit te lezen. ;)
Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.
Terug
Bovenaan