La questione dell'astratto è strettamente correlata al linguaggio in cui è implementata.
In Java, C # e simili, una struttura di dati astratta è veramente astratta. Non è possibile creare un'istanza direttamente. Questo può essere perché è un'interfaccia o una classe astratta. È un concetto con alcune cose sottostanti ad esso. LinkedList
non è astratto: è un'implementazione concreta di List
(è una struttura di dati astratta in Java), che a sua volta è un Collection
(per un insieme più astratto di operazioni su di esso).
In C, tuttavia, non hai i generici. A meno che tu non stia facendo tutto con tipi void*
in una data struttura dati, non esiste realmente nel abstract . E così concetti come le tabelle hash (un tipo concreto in Java) e le liste concatenate rimangono nel regno astratto fino a quando non si crea una "struttura con questa struttura dati che consente di implementare un elenco collegato".
Quindi, è astratto o no? In alcune lingue lo è, in altre no.
Consente di confondere un po 'le cose.
Un elenco collegato è un Pattern: è uno strumento che usi o implementa quando un particolare problema lo richiede. Alcuni hanno sostenuto che le i modelli di progettazione mancano delle funzionalità linguistiche . Che sia astratto in una lingua e concreto in un'altra è perché è una caratteristica del linguaggio "mancante" in C e non in Java (ma c'è la sua parte della libreria di classi piuttosto che essere una parte fondamentale del linguaggio come in Lisp).
Alla fine della giornata, non preoccuparti se è astratto o meno. È qualcosa. E tu lo realizzi o lo usi in qualche modo. Quando un programmatore C e un programmatore Java parlano di una lista collegata, stanno parlando della stessa cosa (solo il programmatore C ha fatto più lavoro). Questo è tutto ciò che conta. È un modo comune di parlare di una cosa comune, ed è di questo che sono i Pattern.