Expand | |||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| |||||||||||||||||||||||||||||||||||||||||||||||
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.
Oppgave a) Innkapsling av navn og beskrivelseCourse- 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 MealI 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-metodenInitialiseringskoden 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-feltetI 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
Oppgave f) Initialisering av courses-feltet forts.Begrunn/forklar ditt valg i forrige deloppgave!
Oppgave g) Innkapsling av Course-objekter i Meal-klassenSkriv 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) {
Oppgave h) Menu-klassenMenu-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-klassenTable-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.
|
Expand | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|
| ||||||||||||
Denne delen handler om hvordan arv kan utnytte at Course og Meal har en del felles.
Oppgave a) MenuItem-klassenCourse- og Meal-klassene har en del felles egenskaper, som kan samles i en felles superklasse kalt MenuItem. Skriv koden til MenuItem.
Oppgave b) Bruk av MenuItemIntroduksjonen av MenuItem-klassen gjør det nødvendig å endre de eksisterende klassene. Skriv ny kode for Course-, Meal-, Menu- og Bill-klassene, slik at de virker med og utnytter mulighetene som MenuItem-superklassen gir. Vurder spesielt om felt og metoder kan forenkles/slås sammen. Flett gjerne inn kommentarer til endringene og valg du gjør i koden.
|
...