Tentauppgift OOP1 våren 2002
I filerna i /info/oop1-02/tenta-mars-02 finns allt som behövs för att lösa uppgifterna. Problemställning Ett dataföretag håller igång ett antal datorsystem hos ett antal ägare (företag), spridda över Stockholm. Till sin hjälp har företaget ett antal konsulter som sköter försäljning, återköp, akut service och rutinunderhåll. Vi har ett program som simulerar verksamheten. Den mest centrala klassen i systemet är ädministratorsom utför simulering av en arbetsdag. Administratorobjektet skapar alla andra datastrukturer som behövs. Det krävs datastrukturer för att hålla reda på kunderna, kundernas (= ägarnas) datorsystem och händelser i systemet. Alla händelser sparas på sekundärminne, i filen event.out för eventuell efterbehandling i form av statistik m.m. Som systemet ser ut nu genereras automatiskt två typer av händelser, purchase en ägare köper ett till datorsystem och sale en ägare säljer tillbaka ett datorsystem till dataföretaget. När en händelse inträffar (slumpas fram) läggs den direkt i en händelsekö. Händelsekön töms en gång i minuten i en prioritetskö (om det finns plats). Så snart en konsult är ledig för att ta ett nytt uppdrag - tar han/hon den första händelsen i kön och utför motsvarande uppdrag. Konsulten blir då upptagen i 45 ± 15 minuter (slumpas fram). För att hantera alla olika objekttyper finns ett antal dynamiska vektorer i administratorobjektet, men för enkel uppräkning i ordning lagras de också i ett binärt träd samt, slutligen, i en hashtabell för extra snabb åtkomst. För närvarande är det endast datorsystemsägare som lagras på alla tre sätten. Varje objekt som skapas i systemet (ägare, datorsystem och händelser) får genom ett objekt ur klassen "unique"en unik identitet, och kan alltså identifieras med hjälp av denna. Sid 1 av 4
Modell position consultants consultant owner model readfrompersistent Memory storable datasystem purchase eventqueue queue event sale busy free heap priorityqueue time storage binarytree Adapter binarytree administrator hashtable OBS! att associationers multiplicitet är 1 om inget annat angivits i modellen. Sid 2 av 4
Din uppgift Välj en uppgift ur vardera två av nedanstående fyra kategorier. Kategori 1: 1. Endast ägare till datorsystem lagras i det binära trädet och i hashtabellen. Ändra så att även alla datorsystem lagras på samma sätt och se till att ett datorsystems ägare kan hittas via dessa strukturer. 2. För närvarande delas uppdrag ut till den konsult som står först bland de som är lediga. Ändra denna strategi så att den konsult som är geografiskt närmast kunden får ta uppdraget. 3. Inför prioritet i händelsehanteringen så att purchase har högre prioritet än sale. 4. Skapa statistik över de händelser som inträffat men inte åtgärdats då programmet avslutas. Kategori 2: 1. På sekundärminnet finns ingen uppgift om huruvida en händelse åtgärdats eller inte. Gör en utökning som löser detta problem. 2. Då programmet startar finns inga händelser kvar från föregåendedag. Se till att köp och försäljningar som inte åtgärdats återskapas vid programstart. 3. Unique startar alltid från 1. Ändra så att unique vid programstart börjar med första ännu inte använda heltalet. Kategori 3: 1. Skapa tre ännu inte representerade händelsetyper, Failure, Repair och Service, där Failure tas om hand genom att en Repair -händelse skapas som sedan hanteras av en konsult och där Service representerar en planerad serviceåtgärd (ett normalt underhåll). 2. Dela upp konsulterna på en försäljningskader och en reparations-(service- )kader. Det måste då finnas åtminstone en kaderspecifik händelsetyp per kader. 3. För närvarande finns ingen annan information i logfilen (events.out) än en notering om en försäljning eller ett köp. Set ill att varje händelse skrivs ut med information om inblandad ägare, konsult och dator samt inforamtion om när händelsen påbörjats och när den avslutats. Sid 3 av 4
Kategori 4: 1. Utöka programmet så att man kan ge extra parametrar vid start av programmet (ex. java administrator "IBM Thinkpad" 37000.00) varvid programmet nu och fortsätningsvis ha med den nya datormodellen. 2. Ibland kan det vara bra att kunna söka på annat än objekt-id. Skapa ett extra binärt träd som skall inkluderas i programmet så att man kan söka på datormodeller (och hitta deras ägare). OBS! att detta träd måste kunna hantera dubletter. En ägare kan ha flera datorer av samma datormodell. 3. Datorsystem som köps tillbaka från ägare försvinner ur systemet. Inför en ny kategori begagnat så att man kan sälja dessa igen till hugade spekulanter, dock inte till den som en gång ägde systemet. Sid 4 av 4