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

Compare with Current View Page History

« Previous Version 4 Next »

De fleste objekter har en tilstand og når en skal forklare oppførselen til objektet, dvs. hva operasjonene til objektet gjør, så er det naturlig å referere til hvordan disse leser og endrer tilstanden. Ta som eksempel et teller-objekt med metodene void count() og int getCounter(). Hvis oppførselen skal forklares er det naturlig å si at count() øker telleren og at getCounter() returnerer tellerverdien, altså en beskrivelse basert på objektets interne tilstand. Bildet vi gir av objektet er en kombinasjon av tilstand (attributter) og oppførsel (operasjoner), som vist til venstre i figuren under. Dette lekker på en måte informasjon om hvordan oppførselen er realisert, og bryter prinsippet om innkapsling, hvor kun operasjonene skal være offentlig kjent. En innkapslet versjon av telleren er vist i midten, og her får en frem at det kun er operasjonene som er ment å være kjent. Men for at innkapslingen skal være effektiv som skjuling av informasjon om intern tilstand og implementasjonsdetaljer, ønsker en egentlig kun å fokusere på objektets grensesnitt mot utenomverdenen, som er de operasjonene og attributtene med offentlig synlighet (se figur til høyre).

Counterint counterint getCounter()void count()

Attributter og operasjoner

Counterint counterint getCounter()void count()

Innkapsling av tilstand

Counterint getCounter()void count()

Grensesnitt, bare operasjoner

Grensesnittet til et objekt består altså av det som er åpent tilgjengelig, og ved beskrivelse av oppførselen ønsker en å unngå å trekke inn en evt. intern tilstand, siden denne uansett er ment å være skjult. Dersom vi forsøker å gjøre dette for Counter, så ser vi at oppførselen til count() og getCounter() er koblet, så beskrivelsen av count() må referere til getCounter(): Dersom getCounter() returnerer n, så vil et kall til count() gjøre at getCounter() returnerer n+1. Dette er typisk for operasjoner som leser og endrer samme underliggende tilstand, slik tilfellet er for getter- og setter-par.

Counterint getCounter()void count()CounterImpl 

 

 

  • No labels