...
Expand | ||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| ||||||||||||||||||||||||||
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 metoder inkl. nødvendige deklarasjoner av felt og hjelpemetoder: - boolean containsWord(String word): returnerer om word finnes i denne ordlista. - Collection<String> getWordsStartingWith(String prefix): returnerer en samling av alle ordene i denne ordlista som begynner med bokstavene i prefix. Dersom prefix selv finnes i ordlista, så skal den også være med. Denne metoden er nyttig for å kunne foreslå ord som passer til det en har begynt å skrive. F.eks. kan den kalle metoden med ordet ”program” og få tilbake en liste som bl.a. inneholder ordene ”program”, ”programmer”, ”programmerer” og ”programmering” (forutsatt at disse faktisk er lagt inn i denne ordlista på forhånd). - boolean addWord(String word): Legger word til denne ordlista, dersom word ikke finnes i ordlista fra før. Mellomrom foran og bak skal fjernes og tomme ord skal ikke legges inn. Returverdien skal angi om ordlista faktisk ble endret. - boolean removeWord(String word): Fjerner word fra denne ordlista. Returverdien skal angi om ordlista faktisk ble endret. - boolean removeWordsStartingWith(String prefix): Fjerner alle ord som begynner på prefix fra denne ordlista. Dersom den kalles med med ordet ”program” så skal bl.a. ordene ”program”, ”programmer”, ”programmerer” og ”programmering” fjernes fra denne ordlista. Som for removeWord skal returverdien angi om noen ord i ordlista faktisk ble fjernet.
Oppgave b)
Det er noen ganger nyttig å kunne finne alle ord som har et gitt sett med endelser. Implementer følgende metoder, som er til hjelp for dette. - String getPrefix(String word, String suffix): Dersom word ender på suffix så skal prefikset frem til suffix-endelsen returneres. Ellers skal null returneres. F.eks. skal getPrefix(”java-program”, ”program”) returnere ”java-”, mens getPrefix(”java-program”, ”programmering”) skal returnere null. - boolean hasSuffixes(String prefix, List<String> suffixes): Returnerer true dersom prefix finnes i denne ordlista med alle endelsene i suffixes-lista. Dersom du legger ”tjue-en” og ”tjue-to” inn i ordlista og kaller metoden med argumentene ”tjue-” og en liste med ordene ”en” og ”to”, så skal metoden altså returnere true. - List<String> findPrefixes(List<String> suffixes): Returnerer lista av alle prefiks som forekommer (i denne ordlista) med alle endelsene i suffixes. Merk at prefikset selv trenger ikke å være et ord i ordlista. Dersom du legger ”tjue-en”, ”tjue-to”, ”tretti-en”, ”tretti-to” og ”førti-en” (og ingen andre ord) inn i ordlista og kaller metoden med en liste med ordene ”en” og ”to” som argument, så skal det returneres en liste med ordene ”tjue-” og ”tretti-” (men ikke med ”førti-”)konstruktører og metoder:
Oppgave b)Implementer følgende metoder:
Oppgave c)Hvilke(n) av de tre metodene i deloppgave b) kunne vært deklarert som static og hvorfor?
|
Expand | |||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| |||||||||||||||||||
Oppgave a)Det innføres et interface Words, som deklarerer de fire første metodene spesifisert i 2 a), altså containsWord, getWordsStartingWith, addWord og removeWord. WordList endres til å deklarere at dette grensesnittet implementeres, altså class WordList implements Words { … }. Anta så at en deklarerer to variabler som følger: … wordList2.??? <= hva kan stå her? … Hvordan bestemmer deklarasjonene hvordan wordList1 og wordList2 kan brukes lenger ned i koden?
Oppgave b)Hva blir verdiene av de fire uttrykkene wordList1 instanceof Word, wordList1 instanceof WordList , wordList2 instanceof Word og wordList2 instanceof WordList?
Oppgave c)Du skal lage en ny Words-implementasjon kalt DelegatingWordList, som kombinerer to andre (interne) ordlister med delegeringsteknikken. DelegatingWordList skal altså oppføre seg om den inneholder alle ordene i de to interne ordlistene. Ta utgangspunkt i følgende felt-deklarasjoner og konstruktør:
Forklar med tekst og (pseudo)kode hvordan du vil implementere Words-metodene med logikken som angitt i deloppgave 2 a) og basert på de interne ordlistene. Prøv å unngå å endre de interne ordlistene mer enn nødvendig.
Se også Delegeringsteknikken |
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.
|
Expand | |||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| |||||||||||||||||||||||||
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 |
Expand | |||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| |||||||||||||||||
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?
| |||||||||||||||||
Expand | |||||||||||||||||
| |||||||||||||||||
Oppgave a)Lag en metode void read(InputStream input) i WordList som fyller ordlista med ord lest fra den angitte input-strømmen. Du kan anta at input-strømmen er fra en tekstfil eller tekstlig nettressurs. Hver tekstlinje består enten av et enkeltord eller et prefiks etterfulgt av bindestrek (‘-‘) og så en liste med endelser med komma (‘,’) mellom. Merk at ekstra mellomrom rundt skilletegnene ‘-‘ og ‘,’ må utelates fra prefiks og endelser. Du trenger ikke sjekke om ordene inneholder rare tegn. I tillegg kan en linje inneholde en ‘#’, som betyr at alt fra og med ‘#’-tegnet regnes som en kommentar som skal ignoreres. Alle unntak skal overlates til kalleren av metoden. Eksempler: java # enkeltordformat: legger “java” inn i lista # kommentarlinje, ingen ord 2-1,2,3 # prefiks og liste med endelser, legger “21”, “22” og “23” inn i lista tretti- # prefiks med tom liste av endelser: legger “tretti” inn i lista
Oppgave b)Hva er en checked exception? Anta at metoden m2 bruker metoden m1 og m1 (muligens) utløser en checked exception. Da er det to måter å kode m2 på som gjør at den kompilerer, hvilke?
Oppgave c)Anta at metoden m2 bruker metoden m1 og m1 (muligens) utløser en checked exception. Hvordan kan en kode m2 slik at den utløser en unchecked exception når m1 utløser en checked exception?
|