Een groot aantal OOP docenten gamed wel eens als ze niet te druk zijn met lesgeven.. Een van de spellen die de laatste jaren erg populair was is Prison Architect. Deze opdracht is gebaseerd op dit spel.
Stuxion is een gevangenis waar mensen vastzitten die (soms) onbeschrijfbare fouten hebben begaan. Helaas heeft het beheersysteem gefaald en produceert nu fouten. Stuxion heeft daarom opdracht gegeven om een nieuwe management_applicatie te ontwikkelen.
Eerst wat informatie over het systeem dat je moet maken:
Stuxion heeft momenteel slechts 3 kleine celblokken, maar zorg ervoor dat het systeem meer celblokken aankan.
Name | Condition | Number of cells |
---|---|---|
The Nerd Cave | hacking | 2 |
The Amsterdam zone | drug | 3 |
The Principals Office | skip | 2 |
Telkens als een gevangene aankomt, vraagt een bewaker (niet letterlijk) wat de misdaad was, en kijkt dan in het systeem of er een celblok voor die misdaad beschikbaar is (door te controleren of de condition van het celblok voorkomt in de beschrijving van de misdaad van de gevangene). Bijvoorbeeld als je het woord “drugs” in je misdaadbeschrijving hebt staan, dan moet je in ons voorbeeld naar “The Amsterdam zone”. Als er geen celblok kon worden gevonden voor de misdaad, geeft het systeem een foutmelding.
Na het vinden van een geschikt celblok, controleert de bewaker of er een vrije cel is in dat blok. Als dat het geval is, kan de gevangene in die cel worden geplaatst. Anders moet weer een foutmelding worden gegeven.
Het systeem kan de volgende foutmelding geven (gooi hiervoor exceptions op de juiste plaatsen):
Bericht | Reden |
---|---|
A cell block can only have 4 cells | Deze melding krijg je al te veel cellen aan een celblok probeert toe te voegen. |
No cell block for crime “??” can be found | Deze melding krijg je als er geen geschikt celblok gevonden wordt voor de gevangene. Vervang ?? door de voorwaarde waar naar gezocht is. |
Cell block “??” is full | Deze melding krijg je als het celblok vol zit. Vervang ?? door de naam van het celblok. |
We stellen voor om het volgende te doen om dit systeem te bouwen:
Prison
heeft slechts drie methoden: addCellBlock
, addPrisoner
en toString
.Voel je vrij om onderstaande code als voorbeeld te gebruiken, maar we moedigen vooral aan dat je je studiegenoten gaat opsluiten.
Note: Onderstaande code bevat regels die er voor zorgen dat er foutmeldingen gegeven worden. Het is een deel van de opdracht om uit te zoeken welke regels dat zijn (en waarom). We raden daarom sterk aan om try-catch blokken te zetten om onderstaande code, maar waar en hoe mag je zelf uitzoeken.
public static void main(String[] args) {
Prison prison = new Prison();
try {
//Create cell blocks
prison.addCellBlock("The Nerd Cave", "hack", 2);
prison.addCellBlock("The Amsterdam zone", "drug", 3);
prison.addCellBlock("The Principals Office", "skip", 2);
prison.addCellBlock("Students home", "drinking", 10);
// Create famous prisoners
Prisoner ruud = new Prisoner("Ruud Greven", "hacking the OOP course");
Prisoner tristan = new Prisoner("Tristan Pothoven", "hacking back Ruud Greven");
Prisoner paul = new Prisoner("Paul de Groot", "hacking Tristan and Ruud out of Saxion");
Prisoner janWillem = new Prisoner("Jan Willem Boer", "Baking cake for students");
Prisoner craig = new Prisoner("Craig Bradley", "Trying to do OO properly in VBA");
// Create lesser known prisoners
Prisoner anna = new Prisoner("Anna Alcohol", "taking drugs to program better");
Prisoner clay = new Prisoner("Clay Cannabis ", "smoking drugs");
Prisoner martin = new Prisoner("Martin Meth", "hosting a drugslab");
Prisoner carmen = new Prisoner("Carmen Class", "skipping OOP classes");
Prisoner travis = new Prisoner("Travis Tired", "skipping assignments");
Prisoner john = new Prisoner("John Lennon", "Skipping Imagine classes");
// Add prisoners to the system
prison.addPrisoner(ruud);
prison.addPrisoner(tristan);
prison.addPrisoner(paul);
prison.addPrisoner(janWillem);
prison.addPrisoner(craig);
prison.addPrisoner(anna);
prison.addPrisoner(clay);
prison.addPrisoner(martin);
prison.addPrisoner(carmen);
prison.addPrisoner(travis);
prison.addPrisoner(john);
} catch (IllegalArgumentException iae) {
System.err.println("IllegalArgumentException: " + iae);
} catch (IllegalStateException ise) {
System.err.println("IllegalStateException: " + ise);
}
System.out.println(prison);
}
Als je alles goed geimplementeerd hebt moet je het volgende te zien krijgen. Merk op dat we alle berichten die door exceptions worden veroorzaakt niet getoond hebben. (Dit zou de opdracht immers een stuk eenvoudiger maken!)
Cellblock 'The Nerd Cave':
Cell 1) Ruud Greven, Crime: hacking the OOP course
Cell 2) Tristan Pothoven, Crime: hacking back Ruud Greven
Cellblock 'The Amsterdam zone':
Cell 1) Anna Alcohol, Crime: taking drugs to program better
Cell 2) Clay Cannabis , Crime: smoking drugs
Cell 3) Martin Meth, Crime: hosting a drugslab
Cellblock 'The Principals Office':
Cell 1) Carmen Class, Crime: skipping OOP classes
Cell 2) Travis Tired, Crime: skipping assignments
Dit vereenvoudigde sequence diagram geeft de basis flow van het toevoegen van iemand aan het systeem. Detail zijn met opzet vaag gehouden, vooral concentrerend op interactie tussen classes.