Aloitussivu (Raimo Jormalainen - Suunnittelumalleja)


Johdanto

Tämä ohjelmointiharjoitus on tehty esittelemään yhtä lukuisista suunnittelumalleista, ehkäpä jopa kaikkein tärkeintä mallia nimeltään "tarkkailija" (Observer). Tämä malli tulee suunnittelijoille tutuksi lähes kaikissa projekteissa mm MVC- ja MVVM-arkkitehtuurien yhteydessä. Tämä lyhyt ohjelma on hyvä demonstraatio myös esittelemään graafisten käyttöliittymien viestivälitysmekanismeja: event, signal/slot, property changed jne.
Lisäksi tässä oli hyvä tilaisuus arvioida muutamia ohjelmistosuunnittelun työkaluja.

Wikipedia:n määritelmä Observer-suunnittelumallille

"Ohjelmistosuunnittelumalli, jossa "subjekti"-olio pitää yllä listaa viittauksista "observer"-olioihin, ja huomauttaa niitä automaattisesti tilamuutoksista kutsumalla Observer-olioiden vastaavia metodeja"

Object Oriented Design -määritelmä


OODesign määrittelee mallin näin: (huom. diagrammin luokkanimissä copy/paste-virheitä)
"Yhden suhde moneen riippuvuus objektien välillä niin, että objektin muuttaessa tilaansa, kaikki muutkin siitä riippuvat objektit saavat tiedon muutoksesta" 


Tarvittavat komponentit

Oleellisia komponentteja suunnittelumallissa on:
  •  - Observable-interface (joissakin kirjoissa "Subject") perusluokka, joka hallinnoi listaa seurattavista olioista. Tarjoaa keinot lisätä ja poistaa listalta komponentteja (register/attach).
  •  - Observer-perusluokka, josta johdetaan konkreettisia Observer-olioita lisättäväksi edellisen komponentin listalle
  •  - Observable-/Subject-luokalla on palvelu (NotifyObservers), joka tarvittaessa lähettää viestin listalla oleville Observer-olioille (= kutsuu niiden metodia)
  •  - Edellisen kohdan "tarvittaessa" tarkoittaa tilamuutosta missä tahansa järjestelmän osassa - usein jopa Observer-olioissa itsessään (esim tilanne, jossa Observer-oliot edustavat esimerkiksi saman tietomallin eri näkymiä (graafinen/tekstimuotoinen) ja muutos toisessa pitää välittää kaikille muillekin riippuvuuksille)