Expand | |||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| |||||||||||||||||||||||||||||||
Oppgave a)Gitt følgende klasse:
Tegn et objekttilstandsdiagram for et MysticalObject-objekt som er instansiert med new MysticalObject(3), som viser oppførselen til getNumber- og step-metodene.
Se også Objekttilstandsdiagrammer Oppgave b)Objekttilstandsdiagrammer kan brukes til å beskrive oppførselen til et objekt. Angi en viktig fordel og en ulempe/begrensning ved slik bruk.
Oppgave c)Java krever at en deklarerer typen til alle felt, variabler og parametre (i motsetning f.eks. Python, Javascript og Matlab). Hva er de viktigste fordelene dette gir?
Oppgave d)I koden over så står det (int) foran kallet til Math.signum. Hva kalles dette (denne typen uttrykk) og hvordan virker det (påvirker det utførelsen) i dette tilfellet? Den samme syntaksen kan også brukes i tilfeller hvor typen er en klasse eller et grensesnitt. Hvordan virker det da?
Se også Casting
|
Expand | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
I denne oppgaven skal du implementere klasser og metoder for en quiz, altså sekvenser med spørsmål og svar. Et eksempel på spørsmål og svar-sekvens er vist under. Et eksempel på spørsmål og svar-sekvens er vist under. Som eksemplet viser, så kan det kan være ulike typer svar og en kan ha svar-alternativer.
Du skal implementere én klasse for spørsmål og tilhørende svar kalt Question og én klasse for quiz-en kalt Quiz. Oppgaven videreføres i resten av oppgavesettet, så det kan være greit å lese gjennom alle delene før du begynner å jobbe med din løsning. Oppgave a)Du skal først implementere Question-klassen. Klassen skal støtte spørsmål, svar og eventuelle svar-alternativer, som alle er tekster. Definer felt for disse og skriv en (eller flere) konstruktør(er) som initialiserer dem. Merk at et spørsmål må ha et svar, men trenger ikke ha svar-alternativer. Utløs unntak for tilfeller som du synes er relevante.
Oppgave b)Lag følgende metoder i Question-klassen for å stille spørsmål og sjekke svar:
Oppgave c)Det er ofte et skjønnspørsmål om en trenger get- og set-metoder og evt. andre metoder for å lese og endre tilstanden i et objekt. Begrunn hvilke slike metoder som trengs (om noen) i Question-klassen og implementer dem.
Oppgave d)Quiz-klassen representerer en sekvens med spørsmål. Skriv kode for klassen med metoder for å:
Oppgave e)Skriv nødvendige metoder for å kunne kjøre Quiz-klassen (med noen eksempelspørsmål) som et hovedprogram iht. reglene som Java har for dette. Når man kjører Quiz-klassen, skal altså brukeren bli stilt spørsmålene og få anledning til å svare, omtrent som vist i eksemplet i innledningen.
Lenke til løsningskode: Question.java, Quiz.java
|
Expand | ||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| ||||||||||||||||
Utvid Quiz-klassen med en metode for å initialisere Quiz-objektet med spørsmål (og tilhørende svar og evt. svar-alternativ) fra fil. Følgende format skal støttes:
Eksempelfil tilvarende eksemplet i innledningen, med kommentarer (som ikke er en del av filinnholdet) i høyre kolonne:
Lenke til løsningskode: Quiz.java (samme Question.java) (og eksempelfila sample.txt) Se også Lesing fra og skriving til fil |
Expand | |||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| |||||||||||||||||||||||||||||||||||||||||||||||||||
I denne delen skal du bruke arv for å håndtere ulike typer svar på en ryddigere måte. Det skal være én klasse for frie tekst-svar kalt StringQuestion, en klasse for tekst-svar med svar-alternativer kalt StringOptionsQuestion, og en klasse for ja/nei-spørsmål kalt BooleanQuestion. Det som er felles for disse klassene, f.eks. håndtering av selve spørsmålsteksten, skal samles i Question-superklassen. Bortsett fra at Question-klassen ikke skal kunne instansieres, så skal bruken av den være som i del 3, inkludert de to askQuestion- og checkQuestion-metodene fra del 2. Prøv å strukturere klassene dine, så det blir minst mulig duplisert kode. Du står selvsagt fritt til å definere andre metoder som trengs i løsningen din. En del av koden vil være lik tidligere kode. Du kan selv velge om du vil skrive den på nytt, eller beskrive presist hvordan tidligere skrevet kode(tekst) kopieres inn i de nye klassene. Oppgave a)Implementer først Question-superklassen og de tre klassene StringQuestion, StringOptionsQuestion og BooleanQuestion kun med konstruktører.
Oppgave b)Implementer de to metodene askQuestion og checkAnswer, slik at alle Question-objekter (egentlig instanser av en av de tre andre klassene) i praksis virker som i del 2.
Oppgave c)Reimplementer metoden i Quiz for for innlesing av spørsmål fra fil, slik at den virker med de nye Question-subklassene.
Lenke til løsningskode: Question.java, BooleanQuestion.java, StringQuestion.java, StringOptionsQuestion.java, Quiz.java (og eksempelfila sample.txt)
|
Expand | ||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| ||||||||||||||||
I denne delen skal Quiz-klassen endres slik at den holder rede på tilstanden til en runde med spørsmål og svar, men lar en annen (hovedprogram)klasse styre fremdriften. Følgende tre metoder skal brukes til å styre fremdriften:
Følgende kode eksemplifiserer hvordan (denne versjonen av) Quiz-klassen er ment å bli brukt:
Implementer start-, doQuestion- og stop-metodene.
Lenke til løsningskode: Quiz.java
|
Expand | |||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| |||||||||||||||||||||||
Det er ønskelig å kunne støtte ulike filformat for quiz-er. Forklar med tekst og kode hvordan du vil bruke Java-grensesnitt for å gjøre det enkelt å bytte mellom ulike format og hvordan filinnlesingskoden du allerede har skrevet kan utgjøre (implementasjonen av) standardformatet. Merk at du ikke skal implementere nye format, kun vise hvordan det lett kan gjøres.
Lenke til løsningskode: Quiz.java, QuizFormat.java, StandardQuizFormat.java
|
...