Excerpt |
---|
Oppgaven handler om en Person-klasse, som håndterer informasjon om en person |
...
(navn, e-post, fødselsdato og kjønn) og implementerer innkapslingsmetoder med validering. |
Et Person-objekt har følgende tilstander:
...
inneholder navn (både fornavn og etternavn), e-post, fødselsdag og kjønn:
- Navnet inneholder både . Både fornavn og etternavn (og ingen mellomnavn), som begge må være på minst to bokstaver langt og skilles med mellomrom. Et navn kan , navnene må være skilt med ett mellomrom og kun inneholde bokstaver.
- email – en persons epost-adresse. En epost må inneholde en alfakrøll. I tillegg må en av karakterene etter alfakrøllen være et punktum. Minimumslengden for en epost er 6 karakterer.
- birthday – en persons fødselsdag. Tilstanden bør lagres som en streng i formatet ”DDMMÅÅ”. Dag, måned og år må alle ha gyldige verdier. Dvs. at ”420293” ikke skal godtas som en gyldig fødselsdag.
- E-post-adressen (hvis den ikke er null) må være på formen fornavn.etternavn@domene.landskode, f.eks. hallvard.trætteberg@ntnu.no (en liste over landskoder finner du her).
- Fødselsdagen skal være et dato-objekt (java.util.Date) og kan ikke være frem i tid.
- En persons kjønn skal kunne returneres som 'M', 'F' eller '\0' (null-tegnet)gender – en persons kjønn. Tilstanden bør representeres som 'M' eller 'F'.
Person-klassen har tilgangsmetoder for å hente og sette tilstandene. Metodene for å sette tilstandene må validere at navn og epost som settes er gyldige.Dersom et argument er ugyldig i seg selv, så skal unntaket IllegalArgumentException utløses.
- setName(String) - oppdaterer navnet (fornavn og etternavn med mellomrom mellom), dersom det er gyldig i henhold til kravene over. Det er greit om navnet som settes, ikke stemmer med e-post-adressen.
- setEmail(String) - oppdaterer e-post-adressen, etter å ha sjekket at den stemmer med navnet.
- setBirthday(Date) - oppdaterer fødselsdatoen
- setGender(char) - oppdaterer kjønnet
I tillegg til disse såkalte setter-metodene, så må Person-klassen ha tilsvarende getter-metoder.
Leseliste
Gyldig tilstand |
| ||||||||
Innkapsling |
| ||||||||
Koding av valideringsmetoder |
| ||||||||
String-klassen |
|
Del 1 – Java-kode
Implementer Person-klassen med stram innkapsling. Eventuelle hjelpemetoder for validering bør også ha stram innkapsling. Det kan være lurt å lese om String-klassen og dens metoder før du setter i gang.
Testkode for denne oppgaven finner du her: encapsulation/PersonTest.java
Merk at din implementasjon må ligge i en pakke med samme navn som testkodens pakke. Pass derfor på at Person-klassen ligger i pakken "encapsulation".
Del
...
2 - Spørsmål om innkapsling
Foreslå en alternativ innkapsling av navnet. Hint: del opp.
Foreslå to alternative strategier for å kapsle inn tilstand som er koblet slik navn og e-post er. Hint: 1) samtidig og 2) dekoble.
Ekstraoppgave: Personnummer
Utvid klassen med en tilstand socialSec, som representerer en persons fødselsnummerpersonnummer. Et fødselsnummer Personnummeret kan ikke settes før kjønn og fødselsdag er satt.
...
- Et personnummer består av 11 siffer, med følgende struktur: D1D2M1M2Y1Y2N1N2N3K1K2 (fargen illustrerer siffergruppene).
- De seks første sifrene, D1D2M1M2Y1Y2, tilsvarer fødselsdatoens dag (1-31), måned (1-12) og år (0-99).
- De tre neste sifrene, N1N2N3, kan antas å være vilkårlige, men N3 må være partall for kvinner og oddetall for menn.
- De to siste sifrene, K1K2, er kontrollsifre, som hver for seg beregnes ut fra de foregående sifrene. Formelen for dem begge er 11 – (VS % 11), hvor VS (veid sum) for K1 er D1*F1 + D2*F2 + … + N2*F8 + N3*F9 og VS for K2 er D1*G1 + D2*G2 + … + N3*G9 + K1*G10. F’ene og G’ene er oppgitt i tabellen under. Dersom formelen gir et ett-sifret resultat for tallet 11 så skal verdien 0 brukes isteden. Om både K1 og K2 stemmer med kontrollsifferne generert basert på formlene over, så er personnummeret gyldig, mens gir formelen et to-sifret resultat for K1 og/eller K2, så er personnummeret ugyldig. Ett unntak gjelder; dersom resten er 0 er kontrollsifferet 11 og ikke 0.kontrollsifferne i personnummeret gyldig
1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | |
---|---|---|---|---|---|---|---|---|---|---|
F | 3 | 7 | 6 | 1 | 8 | 9 | 4 | 5 | 2 | |
G | 5 | 4 | 3 | 2 | 7 | 6 | 5 | 4 | 3 | 2 |
Implementer kode for å sette (med metoden setSSN(String) og validere et gyldig personnummer.
JExercise-testkode Testkode for denne oppgaven finner du her: stateandbehaviorencapsulation/PersonTestPersonTest2.java.
Include Page | ||||
---|---|---|---|---|
|