Expand | |||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| |||||||||||||||||||||||||||||
Oppgave a)Hva er hensikten med innkapsling?
Se også Innkapsling Oppgave b)Lag en Date-klasse med metoder for å lese og endre informasjon om dag, måned og år, slik at denne informasjonen blir ordentlig innkapslet og validert. Velg selv konstruktør(er) og metoder som inngår i innkapslingen, egnet intern representasjon og evt. interne hjelpemetoder. Du kan anta det finnes en hjelpemetode som sier om et år er et skuddår. Gjør kort rede for dine valg og husk at det finnes flere fullgode løsninger.
Se også Koding av valideringsmetoder Oppgave c)Implementer metoder for å endre datoen til neste og forrige dag. Merk at disse metodene skal endre Date-objektet selv, ikke lage nye Date-objekter.
Lenke til løsningskode: Date.java |
Expand | ||||||||||
---|---|---|---|---|---|---|---|---|---|---|
| ||||||||||
Anta følgende klasser, grensesnitt og metoder: Lenke til koden: A.java, B.java, C.java, G.java og Main.java Oppgave a) Hvilke av følgende deklarasjoner/initialiseringer vil gi feil i editoren/ved kompilering: B b = new A(); G g1 = new A(), g2 = new B(), g3 = new C();
Oppgave b)Anta i det følgende at variablene a, b og c er deklarert til å være av klassene A, B og C. Hvilke av følgende uttrykk vil gi feil i editoren/ved kompilering og hvorfor: a.methodA() == c.methodC(a) b.methodG(new B()) ((G) a).methodG(a) ((B) a).methodG(b) ((C) a).methodG(a)
|
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) Se også Observatør-observert-teknikken |