Säiliö (abstrakti tietotyyppi)

Tietojenkäsittelytieteessä säiliö on luokka tai tietorakenne, jonka ilmentymät ovat muiden olioiden kokoelmia. Toisin sanoen ne tallentavat esineitä organisoidulla tavalla, joka noudattaa tiettyjä sääntöjä.

Säiliön koko riippuu sen sisältämien olioiden määrästä. Eri tyyppisten säiliöiden taustalla olevat (perityt) toteutukset voivat vaihdella koon, monimutkaisuuden ja ohjelmointikielen tyypin mukaan, mutta monissa tapauksissa ne tarjoavat joustavuutta oikean toteutuksen valinnassa kaikissa tapauksissa.

Säiliötietorakenteita käytetään erityistesti olio-ohjelmointikielissä.

Toiminto ja ominaisuudet 
Säiliöt voidaan luonnehtia seuraavilla kolmella ominaisuudella:

 pääsy, joka on tapa päästä käsiksi säiliön olioihin. Taulukoiden tapauksessa pääsy tapahtuu taulukkoindeksin avulla. Pinojen tapauksessa pääsy tapahtuu LIFO- järjestyksen mukaan (last in, first out) ja jonojen tapauksessa FIFO (first in, first out) -järjestyksen mukaisesti;
 varastointi, tapa säilyttää säiliön esineitä.
 matkustaminen, tapa kulkea säiliön kohteiden läpi.

Säilöluokkien odotetaan toteuttavan CRUD:n kaltaisia menetelmiä tehdäkseen seuraavat:

 luoda tyhjä säiliö.
 lisätä olioita säiliöön
 poistaa olioita säiliöstä;
 poista kaikki oliot säiliöstä (tyhjennä);
 päästä käsiksi säiliössä oleviin esineisiin;
 päästä käsiksi säilössä olevien objektien määrään (määrä).

Joskus säilöitä toteutetaan yhdessä iteraattorien kanssa.

Tyypit 
Säiliöt voidaan luokitella joko yksiarvoisiin säiliöihin tai assosiatiivisiin säiliöihin.

Yhden arvon säiliöt tallentavat jokaisen objektin itsenäisesti. Objekteihin voidaan päästä käsiksi suoraan esimerkiksi silmukalla tai iteraattorilla.

Assosiatiivinen säilö käyttää assosiatiivista taulukkoa, karttaa tai sanakirjaa, joka koostuu avain-arvo-pareista siten, että kukin avain esiintyy säilössä enintään kerran. Avainta käytetään olion etsimiseen, jos se on tallennettu säiliöön. Assosiatiivisia säiliöitä käytetään ohjelmointikielissä luokkamalleina.

Abstrakteja säiliö tietotyyppejä ovat:

 FIFO-jonot
 LIFO-pinot
 Prioriteettijonot
 Hakutaulukot (LUT)
 Avaimiin liittyvät tietorakenteet
 Setit, sisältää ja indeksoi objektit arvon tai tietyn ominaisuuden mukaan;
 Kartat, joka liittää jokaiseen avaimeen "arvon" hakua varten

Yleisiä tietorakenteita, joita käytetään näiden abstraktien tyyppien toteuttamiseen, ovat:

 Taulukot ja niiden johdannaiset
 Linkitetyt listat
 Binäärihakupuut (BST), erityisesti itsetasapainottavat BST:t
 Hajautustaulut

Lähteet 

Olio-ohjelmointi
Tietorakenteet