You are viewing an old version of this page. View the current version.

Compare with Current View Page History

Version 1 Next »

Kode-eksempel som handler om representasjon tidsinterval og regler for gyldig tilstand

TimeInterval

TimeInterval-klassen skal representere et del av en dag, f.eks. en forelesning eller møtetidsrom til bruk i en avtalekalender. Klassen inneholder to tidspunkt, begge representert med to heltall for timen og minuttet. Merk at det finnes flere måter å representere dette på, f.eks. representere tidspunktene som antall minutter siden midnatt (gir enklere logikk) eller intervallet med start-tidspunkt og lengde i minutter. Disse alternativene diskuterer vi ikke her.

Her er variablene:

  • int startHour - timen intervallet starter, med 0 som første time etter midnatt
  • int startMin - minuttet innen start-timen som intervallet starter på
  • int endHour - timen intervallet slutter
  • int endMin - minuttet innen slutt-timen, som intervallet slutter på

En liten detalj må avklares: Er slutt-tidspunktet med i intervallet eller ikke? Hvis vi f.eks. setter endHour til 16 og endMin til 0, betyr det at forelesningen er ferdig til kl. 16:00 eller at vi bruker det første minuttet av 16-timen? Vi velger den første tolkningen, så slutt-tidspunktet er først minutt som ikke er med i intervallet. Dette betyr noe for hva som er gyldig tilstand, som vi skal se.

Gyldig tilstand

Før vi begynner å kode klassen, kan det være lurt å tenke litt på hvilke verdier som er gyldige for hver av variablene. Det er opplagte begrensninger på hver av tallene: De som representerer timer må være >= 0 og < 24, mens de som representerer minutter (innen en time) må være >= 0 og < 60. Dette er regler vi må sørge for at overholdes, så det ikke blir kluss i beregningene.

For et tidsintervall er det også en regel som som gjelder verdiene samlet: Vi krever at et tidsintervall ikke kan ha negativ lengde, altså må endHour:endMin-tidspunktet være etter eller det samme som startHour:startMin-tidspunktet. Det gir jo ikke mening å ha forelesning fra 16:00 - 8:00. Nå er detaljen nevnt over viktig: Slik vi har tolket slutt-tidspunktet, så kan det altså falle sammen med start-tidspunktet og gi et tidsintervall med lengde 0.

Innkapsling

Innkapsling er teknikken for å sikre tilstand og består av 1) synlighetsmodifikatorer og 2) innkapslingsmetoder.

Synlighetsmodifikatorer

Synlighetsmodifikatorer begrenser hvilke variabler (felt) og metoder som andre klasser får bruke. Den generelle regelen for å sikre gyldig tilstand er at alle felt skal være private og dermed utilgjengelig for andre klasser, mens innkapslingsmetodene skal være offentlige (public). Grunnen er jo at offentlige felt ikke kan beskyttes med kode som validerer verdier. Vi kan forøvrig også ha private metoder, f.eks. hjelpemetoder, som ikke er garantert å sikre gyldig tilstand.

Innkapslingsmetoder

Innkapslingen håndteres av et sett med metoder som gir mulighet til å sette og endre tilstanden (feltene), men som samtidig sikrer at ingen enkelt-variabler eller objektet som helhet får ugyldig tilstand (iht. reglene definert over) ved at tilstanden valideres før den settes/endres. Det er viktig å huske at også start-tilstanden må være gyldig, så konstruktørene er også en del av innkapslingen.

Det finnes ingen klare regler for hvilke metoder en klasse må ha, men det er ikke uvanlig å (vurdere å) ha såkalte gettere og settere for hvert felt. For TimeInterval-klassen betyr det å muligheten til å sette hver variablen for seg. Et alternativ er å ha metoder for å sette start-tidspunktet og slutt-tidspunktene som helhet i hver sine metoder, altså sette feltene to og to.

 

 

 

 

  • No labels