Expand | ||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| ||||||||||||||||||||||||||||||||||||||||||||||||||
Gender-klassen (vedlegg 1) representerer kjønnet til en person, i denne oppgaven begrenset til mann og kvinne. Klassen skal kodes slik at det ikke skal være mulig å ha andre Gender-objekter enn disse to kjønnene. En Gender-instans har et forklarende ord/navn knyttet til seg, som settes når instansen lages, og som ikke skal være direkte tilgjengelig fra andre klasser. Oppgave a)Hvilke modifikatorer bør stå foran deklarasjonen av label-feltet og konstruktøren? Begrunn svaret.
Oppgave b)Hvordan er klassen kodet så det forklarende ordet/navnet vises ved utskrift, f.eks. med System.out.println(...)?
Oppgave c)Fullfør valueOf-metoden.
Person-klassen (vedlegg 1) representerer en person, med et navn (String) og et kjønn (Gender). Navnet settes kun ved opprettelsen, mens kjønnet kan settes når som helst. For å håndtere familieforhold så har et Person-objekt data om mor, far og barn. addChild-metoden brukes for å knytte et barn til en forelder, og det er ikke spesifisert andre metoder som endrer barn-forelder-koblingen. addChild både registrerer barnet og setter barnets kobling til mor eller far, avhengig av kjønnet til forelderen. Ta f.eks. kallet chris.addChild(pat), hvor pat blir registert som barnet til chris. Hvis chris er mann, så blir han registrert som pat sin far, mens hvis chris er kvinne, så blir hun registrert som pat sin mor. Oppgave d)Skriv felt, metoder og konstruktør for innkapsling av navn, kjønn, mor, og far. Bruk name, gender, mother og father som grunnlag for navngiving.
Oppgave e)Implementer getChildCount, hasChild og getChildren, med nødvendig(e) felt.
Oppgave f)Som en del av innkapslingen av barn-koblingen, så har vi valgt å la Person implementere Iterable<Person>-grensesnittet. Hva betyr dette for koden en kan skrive for å gå gjennom barna til en Person? Implementer metoden(e) som er påkrevd av dette grensesnittet.
Oppgave g)Implementer addChild-metoden, basert på kravene beskrevet over og i vedlegg 1, og kravene som implisitt testes av testAddChild i PersonTest-klassen (vedlegg 1).
Oppgave h) Nederst i testmetoden testAddChild er to linjer marker med // ??? Hvilke tilfeller eller problemer er det som kan testes på de to punktene i koden? Hvordan oppfører din kode seg, og hva mener du er riktig oppførsel i de to tilfellene? (Du trenger ikke rette på koden din)
|
Expand | ||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| ||||||||||||||||||||||||||||||||||||||||||||||||||
Family-klassen (vedlegg 1) holder rede på personer i en familie, med metoder for å legge til familiemedlemmer (Person-objekter), slå opp personer på navn, lagre familiemedlemmene og lese dem inn igjen. Oppgave a)Skriv metodene addMember og findMember (og definer nødvendige felt), som henholdsvis legger en Person til som familiemedlem og finner et familiemedlem med et angitt navn.
I vedlegg 2 beskrives et tekstformat for data om personene i en familie, inkludert foreldre-barn-koblingene. Oppgave b)I vedlegg 1 er det med en hjelpemetode tokenize, som kan være nyttig ved innlesing og som kan antas ferdig implementert. Hvilke(n) modifikator(er) burde den ha? Begrunn svaret!
Oppgave c)Skriv metodene save og load, som støtter dette tekstformatet. Begrunn hvordan du velger å behandle problemet med unntak.
Oppgave a)
Oppgave b)
Oppgave c)
Oppgave d)
Oppgave e)
Oppgave f)
|
...