Laboration 4

Kioskkön

 

Innehåll och syfte

Efter denna laboration ska du kunna kunna förstå, förklara och tillämpa grundläggande idéer inom objektorienterad programmering.

Uppgift

Studera uppgiften om kiosken, som den presenterades på föreläsningen.
Koden från föreläsningen.

Din uppgift är att ändra klassen Ko,så att klassen inte ärver från Vector, utan istället innehåller en array av kunder. Du får anta att ett visst fixt maximalt antal kunder samtidigt kan stå i kö, exempelvis 100 kunder. Din köklass får dock inte vara begränsad i fråga om hur många kunder som kan passera genom kön under en dag. Det innebär att du ska skriva klassen så att den skulle kunna användas även för kiosk, vars kunder kommer allteftersom under kioskens öppettider.

En bra idé kan vara att låta ett objekt ur Ko både innehålla en array av kunder och ett heltal som anger det aktuella antalet kunder i kön. Din uppgiftslösning behöver inte ta hänsyn till specialfall eller innehålla felhantering. Den ska dock fungera bra tillsammans med de övriga klasserna för kiosken, såsom de har presenterats. Undvik komplicerade lösningar - en rimlig lösning är kodmässigt enkel och innehåller inga större begreppsmässiga svårigheter.

Gränssnitt

Din klass ska följa en mall. Mer exakt, så ska din klass implementera ett gränssnitt.

Gränssnitt är ett verktyg för standardisering (generalisering).
Idéen är att ett gränssnitt deklarerar ett antal metoder. Alla klasser som följer gränssnittet måste definiera de metoderna. Man kan alltså säga att gränssnitt är mallar, som kräver något av de implementerande klasserna. (För mer information, se Skansholm s. 347-350.)

Man vet något om klasser som implementerar ett visst gränssnitt, nämligen att de kan göra det som gränssnittet deklarerar! I den meningen kan de behandlas lika.
T.ex. kan alla klasser som implementerar gränssnittet Ritbar (Skansholm s. 350) "ritas", i meningen att de har en metod rita.

Gränssnittet du ska implementera är GpKo ("Gp" som i "grundläggande programmering" - ingen djupare innebörd i namnet). Det ser ut som följer.
GpKo ställer krav på hur en kö ska se ut. Alla implementerande klasser, speciellt din Kö, måste definiera ställSist, första och ärTom.
GpKo är alltså färdig; du behöver inte ändra det. I stället ska du skriva en version av Kö enligt anvisningarna nedan. För detaljer om hur du implementerar GpKo, se "Tips".

public interface GpKo {
   
  /*
    Lägg till en kund sist i kön.
   */
  public void ställSist(Kund nyKund);

  /*
    Tag bort kunden som står först i kön.
    Konvention: om kön är tom så returnera null.
  */
  public Kund första();

  /*
    Testar om kön är tom.
  */
   public boolean ärTom();
  
}

Varför gränssnitt?
Vi använder gränssnitt av en speciell anledning. Vi kommer att använda elektronisk inlämning som en del av rättningen av denna lab (se nedan).
Gränssnitt används av rättningssystemet för att jämföra olika implementationer av samma gränssnitt, nämligen din och min! :).
Rättningssystemet jämför implementationernas beteende med avseende på ställSist, första och ärTom.

Tips

För att implementera gränssnittet ska du göra följande. Jag antar att din Javakatalog är ~/java.
  1. Skapa en katalog gp i din Javakatalog (mkdir gp).
  2. Kopiera gränssnittet GpKo och alla Kiosk-klasser utom Ko.java till gp.
  3. Skriv en klass Ko i din Javakatalog (inte i gp) som implementerar ställSist, första och ärTom, med följande struktur.
  4. // Ko.java
    
    import gp.*; // notera att GpKo måste ligga i underkatalogen gp
    
    public class Ko implements GpKo { // deklarerar att vi implementerar GpKo
    
       // attribut etc.
    
       public Ko() {
       ...
       }
    
       public void ställSist(Kund nyKund) {
       ...
       }
    
       public Kund första() {
       ...
       } 
    
       public void skriv() {
       ...
       }
    
       public boolean ärTom() {
       ...
       }
      
    }
    
  5. Jag rekommenderar att du kompilerar och kör från din gp-katalog.
    För att kompilera din kö från gp: javac -classpath .:../extra.jar:.. ../Ko.java
    För att testköra din kö med kiosken från gp: java -classpath .:../extra.jar:.. Kiosk

Genomförande

Labben ska genomföras och redovisas i grupper om två studenter. Muntligt samarbete mellan grupper är tillåtet och rekommenderat.Vi rekommenderar att du inför labben har skissat på papper på programkoden för de olika metoderna, eller att du har tänkt igenom uppgifterna i syfte att komma med förberedda frågor till Mayank.

Examination

Uppgiften ska redovisas på två sätt:

  1. Genom elektronisk inlämning (uppladdning av fil via webbsida). Se instruktionerna.
  2. Genom en rapport som ska lämnas på papper till Mayank, i hans postfack, hus 1, plan 4, bredvid kopiatorerna.

Rapporten ska åtminstone innehålla:

Följande regler gäller: