...
Expand | |||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| |||||||||||||||||||||||||||||
For å kunne stave ord over en dårlig kommunikasjonslinje er det vanlig å bruke et ord-basert alfabet, hvor første bokstav i ordet tilsvarer bokstaven som sies. Nato har standardisert dette i sitt fonetiske alfabet, som begynner med ”alfa”, ”bravo”, ”charlie”, ”delta”, ”echo”, ”foxtrot”. Dersom ordet ”java” staves med dette alfabetet blir det ”juliet alfa viktor alfa”. Du skal implementere en klasse RadioAlphabet for å konvertere bokstaver og ord vha. denne teknikken. Du velger selv hvordan alfabetet representeres, f.eks. kan en String, String-tabell, List eller Map brukes for å representere alfabetet. Merk at det kan være lurt å lese gjennom hele oppgaven og ta en titt på oppgave 5, før du velger mellom en av disse og evt. andre alternativer. Oppgave a)Først skal du implementere én konstruktør og to metoder, som følger:
Oppgave b)Hvorfor kan ikke disse metodene være deklarert med static-modifikatoren?
Oppgave c)Hva kalles det når metoder i samme klasse (som convert-metodene) har samme navn? Hva er regelen for å skille dem fra hverandre/velge mellom dem, når de brukes/kalles?
Oppgave d)Utvid klassen med metodene setWord(String) som endrer ordet som brukes for en bestemt bokstav (første bokstav i ordet), og removeWord(char) som fjerner ordet for en bestemt bokstav fra alfabetet. Merk at setWord skal kun kunne endre ordet for en bokstav som allerede finnes i alfabetet.
Lenke til løsningskode: RadioAlphabet.java
|
Expand | ||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| ||||||||||||||||||||||||
Oppgave a)Skriv en JUnit-testklasse som tester begge convert-metodene i RadioAlphabet-klassen. Du kan anta at konstruktøren virker. Vi er ikke så nøye på detaljene, bare den generelle testeteknikken er riktig.
Oppgave b)Forklar hvordan du vil teste setWord- og removeWord-metodene i RadioAlphabet-klassen vha. JUnit-teknikken. Hva er en vesentlig (kompliserende) forskjell mellom å teste disse metodene og å teste convert-metodene?
Lenke til løsningskode: RadioAlphabetTest.java
|
Expand | |||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| |||||||||||||||||||||||||||||||
Oppgave a)Morse-alfabetet er et alfabet hvor bokstaver (og andre tegn) representeres med sekvenser av prikker og streker. F.eks. skrives det internasjonale nødsignalet ”SOS” som ”... --- ...” fordi ’s’ skrives som ”...” og ’o’ som ”---”. Du skal lage en subklasse av RadioAlphabet-klassen kalt MorseAlphabet, som støtter dette alfabetet. F.eks. skal new MorseAlphabet() gi et ferdig-initialisert objekt som kan konvertere ”sos” til ”... --- ...” og ”test” til ”- . ... -". convert-metodene og removeWord skal virke som spesifisert i del 3. setWord-metoden må nødvendigvis endres slik at den tar inn tegnet som første argument og ordet som andre. Det er et mål å utnytte arv slik at det blir mest mulig gjenbruk av kode, f.eks. ved at en eller flere av de arvede metodene ikke trenger å redefineres. Forklar med tekst og kode hvordan du vil gjøre dette. Forklar om nødvendig hvordan du må endre på RadioAlphabet-klassen for å få det til, men merk at den må fortsatt virke slik det er beskrevet i del 3.
Oppgave b)Du skal gjøre RadioAlphabet-klassen (og dermed også subklassen) såkalt ”observerbar”, vha. følgende lyttergrensesnitt: public interface RadioAlphabetListener { Dersom en RadioAlphabet-instans endres, skal altså metoden radioAlphabetChanged kalles på alle lytterne, med RadioAlphabet-instansen som første argument og tegnet viss’ ord ble endret/fjernet som det andre. Beskriv hvordan RadioAlphabet og evt. MorseAlphabet må endres for å implementere denne oppførselen.
Lenke til løsningskode: RadioAlphabetListener.java, RadioAlphabet.java (RadioAlphabetTest.java)
|