Het immuunsysteem is het geheel aan verdedigingsmechanismen waarmee organismen indringers kunnen bestrijden. Naast de bescherming tegen virussen, bacteriën en parasieten, wordt het immuunsysteem ook ingezet om afvalstoffen of zieke lichaamscellen (zoals kankercellen) op te ruimen. Het immuunsysteem kan onderverdeeld worden in een aspecifiek (aangeboren) en een adaptief (verworven) gedeelte. Het aspecifieke deel is snel werkzaam, maar minder specifiek voor de ziekteverwekker (pathogeen). Daarentegen past het adaptieve deel zich aan aan een bepaalde pathogeen. Dat kost tijd, maar resulteert uiteindelijk in een sterkere afweer. Bovendien is het lichaam daarna vaak langdurig beschermd tegen die specifieke ziekteverwekker.
Definieer een klasse Organisme waarmee organismen kunnen voorgesteld worden die beschikken over een vereenvoudigd model van een immuunsysteem. Dit immuunsysteem heeft zowel aspecifieke als adaptieve eigenschappen die het organisme beschermen tegen virussen — andere vormen van pathogenen worden omwille van de eenvoud achterwege gelaten. Een bepaald type virus wordt in dit model voorgesteld door een geheel getal. Het aspecifieke deel van het immuunsysteem beschermt het organisme tegen een aantal opgegeven types van virussen. Daarnaast kan het adaptieve gedeelte van het immuunsysteem er ook voor zorgen dat het organisme resistent wordt voor bijkomende virussen. Dat laatste gebeurt wanneer er zich een aantal antilichamen tegen het virus gevormd hebben. Wanneer een bepaald type virus muteert, dan verliest het organisme zijn resistentie (zowel aspecifiek als adaptief) tegen de oude vorm van het virus, en moet het indien nodig terug adaptief antilichamen tegen de nieuwe vorm van het virus aanmaken. De klasse Organisme moet hiervoor ondersteuning bieden aan de volgende methoden:
Een initialisatiemethode die ervoor zorgt dat een nieuw aangemaakt organisme initieel nog geen antilichamen heeft in het adaptieve gedeelte van het immuunsysteem. Aan deze methode kan optioneel de locatie van een tekstbestand doorgegeven worden. Dit tekstbestand bevat de lijst van virussen (een lijst van gehele getallen, elk op een afzonderlijke regel) waartegen het aspecifieke deel van het immuunsysteem het organisme beschermt. Indien er bij het aanmaken van een organisme geen bestandsnaam wordt doorgegeven, dan heeft het immuunsysteem van het organisme dus ook geen aspecifiek deel.
Een methode isresistent waaraan een virus (een geheel getal) als argument voor de parameter virus kan doorgegeven worden. Deze methode moet een Booleaanse waarde teruggeven die aangeeft of het organisme al dan niet resistent is tegen het opgegeven virus. Indien het aspecifieke deel van het immuunsysteem bescherming biedt tegen het virus dan treedt er resistentie op, anders wordt het adaptieve deel van het immuunsysteem aangesproken. In dat laatste geval wordt er in de eerste plaats een bijkomend antilichaam aangemaakt tegen het virus waarvan de resistentie getest wordt. Er treedt pas resistentie op wanneer het immuunsysteem minstens drie specifieke antilichamen heeft aangemaakt voor het opgegeven virus.
Een methode mutatie waaraan een virus (een geheel getal) als argument voor de parameter virus kan doorgeven worden. Wanneer deze methode wordt aangeroepen, verliest het immuunsysteem elke vorm van resistentie (zowel aspecifiek als adaptief) tegen (de oude vorm van) het virus. Later kan er terug resistentie optreden tegen (die nieuwe vorm van) het virus, indien het adaptieve gedeelte terug voldoende antilichamen heeft aangemaakt (door het aanroepen van de methode isresistent).
In onderstaande sessie gaan we ervan uit dat het tekstbestand immuunsysteem.txt3 zich in de huidige directory bevindt. Dit bestand bevat vijf regels met daarop de getallen 1, 2, 3, 4 en 5.
>>> organisme = Organisme('immuunsysteem.txt4')
>>> organisme.isresistent(1)
True
>>> organisme.isresistent(88)
False
>>> organisme.isresistent(virus=99)
False
>>> organisme.isresistent(2)
True
>>> organisme.isresistent(virus=99)
False
>>> organisme.isresistent(virus=99)
True
>>> organisme.isresistent(virus=99)
True
>>> organisme.mutatie(1)
>>> organisme.isresistent(1)
False
>>> organisme.isresistent(1)
False
>>> organisme.isresistent(1)
True
>>> organisme.mutatie(virus=99)
>>> organisme.isresistent(virus=99)
False
>>> organisme.isresistent(virus=99)
False
>>> organisme.isresistent(virus=99)
True