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

Compare with Current View Page History

« Previous Version 6 Next »

Et objekt har både tilstand og oppførsel. Tilstanden til et objekt er alle dataene den inneholder, mens oppførselen er hva objektet kan gjøre av beregninger og operasjoner på dataene og hvordan disse potensielt endrer tilstanden over tid.

Ta som eksempel et Counter-objekt som teller fra en start-verdi til en slutt-verdi. Slutt-verdien angis når objektet opprettes og kan variere fra objekt til objekt. Objektet må altså huske både teller-verdien og slutt-verdien (begge er heltall), så disse utgjør objektets tilstand. Objektet har to operasjoner, int getCounter(), som returnerer nåværende teller-verdi, og void count(), som øker telleren med 1 inntil den når slutt-verdien. Oppførselen defineres av disse to operasjonene, først og fremst ved hvordan count evt. endrer tilstanden, men også hvordan tilstanden leses av getCounter og dermed påvirkes av count.

En måte å illustrere oppførselen på er et diagram hvordan tilstanden til objektet utvikler seg over tid, når ulike metoder blir kalt.

Figuren viser hvordan samme Counter-objekt går fra én tilstand (verdiene til counter og end) til en annen, når getCounter- og count-operasjonene utføres. Kallene til getCounter endrer ikke noen verdier, så derfor leder den til samme tilstand. Kallene til count, derimot, endrer telleren inntil den når slutt-verdien og gir en (heldigvis endelig) kjede med tilstander (se fotnote 1).

Det er helt vesentlig å tenke gjennom hvilken oppførsel objektene skal ha, før en begynner å programmere den tilsvarende klassen, og eksempler som den i figuren er ofte nyttige, både for å tenke gjennom problemet før en koder og for å forklare andre hvordan koden virker (eller er ment å virke). Slike eksempler hjelper en også å skrive tester, som forklart i Oppførsel og enhetstesting.

 


1) For så enkel oppførsel som denne går det greit å lage et komplett diagram, men generelt kan det bli veldig mange tilstander (noen ganger uendelig) og veldig mange kombinasjoner/rekkefølger av kall. Derfor er et slikt diagram greit som illustrasjon på et eksempel, men ikke som en komplett beskrivelse av oppførklsen.

  • No labels