Gitt følgende klasse, som representerer et tidspunkt på dagen:
Oppgave a) Hva betyr final-nøkkelordet slik det er brukt her? På hva slags måte(r) ivaretar denne klassen formålet med innkapsling og på hva slags måte(r) ikke?
Oppgave b)Beskriv den generelle teknikken og navnekonvensjonen(e) for å representere og kapsle inn en enkel verdi, f.eks. tall eller objektreferanse, som skal kunne endres etter at objektet er opprettet.
Oppgave c)I hva slags metode(r) brukes unntak ifm. innkapsling, og hvordan? Vis gjerne med et eksempel!
Oppgave d)Mange klasser inneholder et List<X>-felt og definerer addX, removeX og andre metoder som tilsvarer og bruker metodene i List-grensesnittet. En alternativ løsning kunne vært å arve fra en List<X>-implementasjon, f.eks. ArrayList<X>. Hvorfor brukes aldri denne løsningen i praksis?
Se også Innkapsling |
I denne oppgaven skal du implementere klasser og metoder for å håndtere en dagsplan med tidsrom, f.eks. avtaler. Klassen oppgitt i oppgave 1 a) kan brukes som en del av implementasjonen din. Husk at alle metoder kan brukes i implementasjonen av andre. Oppgave a)Du skal implementere en klasse TimeSlot for å representere et tidsrom innenfor en dag, f.eks. en avtale. Et TimeSlot-objekt har en beskrivelse (tekst), et start- og sluttidspunkt (time og minutt) og en varighet (minutter). Ingen av disse dataene skal kunne endres etter at TimeSlot-objektet er opprettet. Du velger selv hvordan disse dataene skal representeres og hvilke hjelpemetoder som evt. trengs. Merk at varighet kan beregnes fra starttidspunkt og sluttidspunkt, evt. at sluttidspunkt kan beregnes fra starttidspunkt og varighet. Implementer følgende konstruktører og metoder:
Oppgave b)Implementer følgende metoder:
Oppgave c)TimeSlot-klassen skal støtte sortering. TimeSlot-objektet med tidligst starttidspunkt sorteres først, og dersom starttidspunktene er like, så skal det med tidligst sluttidspunkt sorteres først. Forklar og implementer nødvendig kode.
Oppgave d)Du skal implementere en klasse DayPlan, for å holde oversikt over alle avtalene (altså TimeSlot-objekter) for en dag, bl.a. gi muligheten til å legge til og fjerne TimeSlot-objekter. Velg selv hvilke felt og evt. hjelpemetoder som trengs. Implementer følgende metoder:
Oppgave e)Implementer følgende to metoder for tidsplanlegging:
For begge disse metodene kan det være lurt å definere hjelpemetoder for å gjøre løsningen ryddigere.
|
Oppgave a)Du skal implementere støtte for TDT4100-forelesninger, som et spesielt tidsrom som alltid er fra 10:15 til 12:00. Vis hvordan en klasse TDT4100Lecture kan implementere dette vha. arv fra TimeSlot.
Oppgave b)Du skal implementere støtte for en dagsplan som alltid inneholder et TDT4100Lecture-objekt, dvs. en TDT4100-forelesning fra 10:15-12:00. Det skal ikke være mulig å fjerne TDT4100-forelesningen eller legge inn andre tidsrom som overlapper med den. Følgende kode illustrerer hvordan det skal virke:
Vis hvordan dette kan implementeres i en TDT4100DayPlan-klasse vha. arv fra DayPlan.
Oppgave c)Det er ofte nyttig å kunne la én dagsplan bygge på eller inkludere en eller flere andre, f.eks. la dagsplanen for en bestemt tirsdag inkludere tirsdagsplanen som gjelder for hele semesteret (hvor bl.a. TDT4100-forelesningen ligger). Følgende kode illustrerer hvordan det skal virke:
Skisser med tekst og kode hvordan delegeringsteknikken og arv fra DayPlan kan brukes for å implementere denne oppførselen, inkludert hvordan du evt. vil modifisere DayPlan for å gjøre løsningen ryddigere.
Se også Delegeringsteknikken |
Oppgave a)Hva er den grunnleggende forskjellen på input/output-klassene InputStream/OutputStream og deres subklasser ift. Reader/Writer og deres subklasser?
Oppgave b)Ifm. input/output brukes en egen type unntak, hvilken? På hva slags måte påvirker det kode som driver med input/output?
Oppgave c)Hvorfor må vi lukke input- og output-“strømmer” med close()-metoden når vi er ferdige med dem? Hvordan sikrer man at det skjer også i tilfelle unntak?
|