Genericiteit: verschil tussen versies

12 bytes toegevoegd ,  6 maanden geleden
k
Bot: Vervang de verouderde <source> tag
k (Bot: Replace deprecated <source> tag)
k (Bot: Vervang de verouderde <source> tag)
 
=== Geparametriseerde klasse ===
Een veelgebruikte toepassing van generiek programmeren is het schrijven van 'container'-[[klasse (informatica)|klassen]], waarin allerlei objecten kunnen worden opgeslagen. Tijdens het schrijven van de container (bijvoorbeeld een lijst, een [[hashtable]] of een [[associatieve array]]) hoeft het ''type'' object dat wordt opgeslagen niet bekend te zijn. Een voorbeeld in C++:
<syntaxhighlight lang="cpp">
template<typename T>
class List
=== Geparametriseerde functie ===
Een voorbeeld van een generiek algoritme in C++ is het volgende:
<syntaxhighlight lang="cpp">
template<typename T>
T& highest(const T& a, const T& b)
</syntaxhighlight>
Hierbij is nog niet bekend wat het ''type'' is van de parameters ''a'' en ''b'', maar wordt wel het algoritme beschreven. Als we bovenstaande functie willen gebruiken voor getallen, dan kan dat simpelweg zo:
<syntaxhighlight lang="cpp">
int x = 10;
int y = 50;
=== Geparametriseerde superklasse ===
Een derde manier van generiek programmeren die vaak wordt toegepast (in Java en C++) is het parametrizeren van de superklasse. Stel, we hebben een [[Interface (Java)|interface]] ''Comparable'', die een [[Methodes en technieken in de informatica|methode]] ''compare'' definieert:
<syntaxhighlight lang="java">
interface Comparable {
public int compare(Object b);
</syntaxhighlight>
De ''compare''-methode kan nu alle objecten vergelijken die subklassen zijn van ''Object'' (In Java zijn alle klassen dat). Als de parameter ''b'' van type ''Integer'' is, gaat de vergelijking goed. Het probleem is alleen dat het mogelijk is voor ''b'' een instantie van een compleet ander type dan Integer te geven. De methode zal dus moeten controleren of ''b'' van het juiste type is (namelijk Integer):
<syntaxhighlight lang="java">
public int compare(Object b)
{
Met generiek programmeren kan dit probleem op een nette manier opgelost worden:
 
<syntaxhighlight lang="java">
interface Comparable<T> {
public int compare(T b);
325.668

bewerkingen