Container (informatica)
Een container in de informatica is een datastructuur die een conceptuele bak of houder implementeert die een of meer andere objecten bevat.
Een gegeven container kan voornamelijk bedoeld zijn om objecten te bevatten (zodat het een soort van verzameling wordt), maar een container kan ook voornamelijk bedoeld zijn om functionaliteit toe te voegen aan de objecten die de container bevat.
[bewerk] Kenmerken van een container
Het algemene kenmerk van een container-type is dat containers conceptueel objecten "bevatten": containers bevatten methoden om een gegeven object in de container te plaatsen, in de container terug te vinden en mogelijk ook om een object uit de container te verwijderen. Een container-type is gebaseerd op de techniek van aggregatie.
Het type object dat een container kan bevatten, wordt bepaald door de achterliggende programmeertaal en de functie van het containertype. Statisch getypeerde talen zonder geparameteriseerde polymorfie limiteren containers vaak tot een bepaald type (alhoewel in talen als Java tot versie 5.0 die "limiet" vrijwel ieder type in de taal omvat). Containers zoals de EJB-containers van het J2EE-platform limiteren de inhoud van de containers tot die objecten die EJBs zijn.
[bewerk] Containers als verzamelingen
Het meest voorkomende gebruik van een container is als een soort van verzameling van objecten. Er bestaan vele vormen van dergelijke containers, allemaal gemodelleerd door een eigen, wiskundige structuur — verzamelingen, maps, bags, lijsten, lifo's, fifo's,.... Het nut hiervan is dat ieder model geoptimaliseerd is voor een bepaald soort gebruik.
Het model achter een dergelijke container bepaalt onder meer hoe de objecten behandeld worden die de container bevat — onder meer onderlinge volgorde en positie kunnen hierdoor bepaald worden. Meestal is het noodzakelijk dat deze volgorde gerespecteerd wordt om de werking van de container te garanderen. Dergelijke containers gebruiken hun toegangsmethoden om juist gebruik te garanderen, maar verschillende programmeertalen introduceren ook het concept van een iteratortype. Een iterator is dan een hulpobject bij een container dat de verzameling in de juiste volgorde doorloopt en daarbij een bepaalde taak uitvoert.
Een container kan de eigenaar van zijn elementen. De levensduur van de elementen kan in dat geval die van de container niet overschrijden.
[bewerk] Containers als decoratoren
Een ander gebruik van een container is die toepassing waarbij een container functionaliteit "toevoegt" aan de elementen die de container bevat. Deze functionaliteit is vervat in de toegangsmethoden van de container; een dergelijke container is een voorbeeld van een Decorator-patroon.
Twee typische voorbeelden van een dergelijke container zijn de servlet- en EJB-containers gedefinieerd door de J2EE-specificaties. Een dergelijke container bevat een object die zakelijke functionaliteit bevat en voegt er technische en infrastructurele functionaliteit aan toe (zoals toegang tot databases, netwerken, bestanden en dergelijke).