You are viewing an old version of this page. View the current version.

Compare with Current View Page History

Version 1 Next »

Tema for alle oppgavene er en restaurant, med fokus på menyen. Course-klassen representerer en enkeltrett, f.eks. laksemousse, biffsnadder eller karamellpudding. Meal representerer et ferdig sammensatt måltid som bestilles som et hele, f.eks. en tre-retters med laksemousse, biffsnadder og karamellpudding. Menu er menyen med utvalget av retter og måltider og deres priser. Table representerer bordet, i denne sammenheng bestillingene.

 

Under finner du utgitt kode, som fungerer som kontekst for oppgavene. Merk spesielt kommentarene til metoder, som inneholder krav til metodene, og linjer med ..., som indikerer manglende kode.

 

public class Course {
 
    public final String name, description;
 
    public Course(String name, String description) {
        super();
        ... initialization ...
    }
}
 
/**
 * Represents a set of (pre-defined) Courses that are ordered as a whole
 */
public class Meal {
 
    private final String name, description;
 
    public Meal(String name, String description, Course[] courses) {
        super();
        ... initialization ...
        this.courses = Arrays.asList(courses);
    }
    
    public String getName() {
        return name;
    }
    
    public String getDescription() {
        return description;
    }
}
 
/**
 * Manages the set of Courses and Meals offered and their prices.
 */
public class Menu {
 
    ... fields and methods ...
 
    /**
     * Gets the price for a Course.
     * @param course
     * @return the price
     * @throws IllegalArgumentException if this Menu doesn't include the provided Course
     */
    public double getPrice(Course course) throws IllegalArgumentException {
        ....
    }
 
    /**
     * Sets/changes the price of the provided Course.
     * @param course
     * @param price
     */
    public void updatePrice(Course course, double price) {
        ...
    }
    
    /**
     * Gets the price for a Meal. If the registered price is 0.0,
     * the price is computed as the sum of the prices of the Meal's courses.
     * @param meal
     * @return
     * @throws IllegalArgumentException if this Menu doesn't include the provided Meal,
     *  or if a price of a Course is needed, but is missing
     */
    public double getPrice(Meal meal) throws IllegalArgumentException {
        ...
    }    
 
    /**
     * Sets/changes the price of the provided Meal.
     * @param meal
     * @param price
     */
    public void updatePrice(Meal meal, double price) {
        ...
    }
}
 
 
 
/**
 * Manages the set of ordered items for a table (set of guests).
 */
public class Table {
 
    ... fields and methods ...
 
    /**
     * Initializes a new Table with a Menu that provides the prices for the Courses and Meals
     * @param menu
     */
    public Table(Menu menu) {
        ...
    }
    /**
     * Computes the total price for all the added items. Prices are provided by the Menu.
     * @return the total price
     * @throws IllegalStateException when the price of an item cannot be provided by the Menu
     */
    public double getPrice() throws IllegalStateException {
        ...
    }
}

 

Oppgave a) Innkapsling av navn og beskrivelse

Course- og Meal-klassene representerer henholdsvis enkeltretter og måltider sammensatt av flere retter, slik vi finner i menyer på spisesteder.

 

Både Course og Meal skal initialiseres med navn og beskrivelse, som siden ikke skal kunne endres. I den utgitte koden er det brukt to varianter for å håndtere dette. Course har public-felt og ingen get- eller set-metoder, mens Meal har private-felt og public get-metoder. Angi fordeler og ulemper med hver kodingsteknikk. Hvilken anbefaler du? Begrunn svaret!

 

Oppgave b) super()

I konstruktørene til Course og Meal står det super() i første linje. Hva betyr/gjør denne linja? Hva ville skjedd om den ble fjernet?

 
Oppgave c) courses-feltet i Meal

I konstruktøren for Meal er det lagt til ei linje for initialisering av feltet courses, som lagrer matrettene som måltidet er satt sammen av. Skriv en passende deklarasjon for courses, slik at feltet er egnet til formålet og initialiseringslinja blir riktig.

 
Oppgave d) Arrays.asList-metoden

Initialiseringskoden bruker metoden Arrays.asList. Skriv en (mulig) metodedeklarasjon (altså den første linja i koden for metoden, med modifikatorer og alt som trengs) for denne metoden, som passer til slik metoden brukes.

 
Oppgave e) Initialisering av courses-feltet

I initialiseringskoden brukes this.courses = ... Hva ville skjedd om vi utelot this-nøkkelordet, altså bare skrev courses = ... ? Ta i betraktning dine svar på tidligere delspørsmål!

Velg ett alternativ
  • varsel om mulig feil (gul strek i editoren) 
  • kræsj (unntak) ved kjøring
  • logisk feil ved kjøring
  • det virker som det skal
 
Oppgave f) Initialisering av courses-feltet forts.

Begrunn/forklar ditt valg i forrige deloppgave!

 

 

Oppgave g) Innkapsling av Course-objekter i Meal-klassen

Skriv nødvendig kode for å innkapsle Course-objektene i Meal-klassen. Det skal være mulig å legge til og fjerne Course-objekter, samt iterere (løpe gjennom) alle Course-objektene i et Meal-objekt med kode slik som dette:

for (Course course : meal) {
   ... gjør noe med course her ...
}

 
Oppgave h) Menu-klassen

Menu-klassen skal kunne lagre et sett Course- og Meal-objekter og deres priser. Skriv ferdig klassen, med nødvendige felt og metoder for dette.

 
Oppgave i) Table-klassen

Table-klassen representerer alle retter (Course) og måltider (Meal) som gjestene ved et bord har bestilt. For å kunne beregne (total)prisen, er Table-klassen knyttet til en Menu.

Skriv ferdig klassen.

 
Oppgave a)

 

 

Oppgave b)

 

 
Oppgave c)

 

 
Oppgave d)

 

 
Oppgave e)

 

 
Oppgave f)

 

 
Oppgave a)

 

 

Oppgave b)

 

 
Oppgave c)

 

 
Oppgave d)

 

 
Oppgave e)

 

 
Oppgave f)

 

 

 

 

  • No labels