Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.
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 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
Excerpt Include
Gyldig tilstand
Gyldig tilstand
nopaneltrue
Innkapsling
Excerpt Include
Innkapsling
Innkapsling
nopaneltrue
Koding av valideringsmetoder
Excerpt Include
Koding av valideringsmetoder
Koding av valideringsmetoder
nopaneltrue
String-klassen
Excerpt Include
java.lang.String
java.lang.String
nopaneltrue

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 av divisjonen er 0 blir kontrollsifferet 0 og ikke 11.kontrollsifferne i personnummeret gyldig
 12345678910
F376189452 
G5432765432

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
Bunntekst for JExercise- oppgaver
Bunntekst for JExercise- oppgaver