Et observerbart objekt er et objekt som
- har intern tilstand som kan lese og endres vha. tilgangsmetoder, f.eks. getter- og setter-metoder
- lar andre objekter registrere seg som interessert i (endringer i) tilstanden og
- sier fra til de registrerte objektene om endringer
Det første punktet er typisk for data- eller tilstandsorienterte objekter som er riktig innkapslet. De to andre punktene gjør det mulig for andre objekter å reagere på endringer og holde sin egen tilstand konsistent, som er formålet med observatør-observert-teknikken. Som navnet indikerer, så dreier denne teknikken seg om en kobling mellom to objekter: det ene objektet, observatøren, observerer den andre, den observerte. En sier gjerne at observatør og observert er to roller i et objekt-samspill. For at samspillet skal fungere, så må hvert objekt oppføre seg iht. reglene for samspillet.
Observert-rollen | Observatør-rollen |
---|---|
Det observerte objektet må være observerbart, dvs. ha metoder for å
| Observatøren må ha metoder for å
Akkurat når og hvordan observatøren blir registrert hos det observerte objektet er ikke gitt, det vesentlige er hva som skjer etterpå: at observatøren får beskjed om tilstandsendringer. |
For å gjøre teknikken konkret, så tenker vi oss at et vintersportssted, f.eks. Oppdal, tilbyr seg å sende ut varsel om større mengder nysnø, såkalt pudderalarm, slik at skientusiastiske studenter (og faglærere) vet når de skal prioritere løssnøkjøring fremfor forelesninger. Her fungerer vintersportsstedet som observert og skientusiasten som observatør. For å implementere dette definerer vi derfor klassene Vintersportssted og Person. I tillegg, og dette er viktig, så defineres grensesnittet Pudderalarmlytter, som fanger opp det å være interessert i pudderalarm. Dette gjør koblingen mellom Vintersportssted og Person litt løsere og åpner for at andre klasser, f.eks. Rutebilselskap også kan vise sin interesse for pudderalarm og sette opp ekstrabusser til det aktuelle vintersportsstedet.
Iht. observert-rollen må Vintersportssted har metoder for å registrere
For at klassen for det observerte objektet ikke skal være bundet til en spesifikk observatør, så defineres gjerne et grensesnitt som observatørene må implementere.
Registrering og oppdatering er en del av