Strategia -mallin idea ja toteutus

Kirppusirkus! (particle demonstration)

Paina nappeja muuttaaksesi kirppujen (particles) käyttäytymistä. Klikkaa itse kuvaa paluttaaksesi satunnaisjärjestyksen kirpuille.

alt="Tässä tulisi näkyä appletti"

Kirppujen keskinäinen vuorovaikutus päätetään lennossa. Vanhoissa proseduraalisissa kielissä (C, Pascal) ratkaisuna olisi voinut olla switch-case lauseet tai funktio-osoittimet. Olioperustaisissa kielissä on mahdollista kapseloida vaihtuvat algoritmit omaksi luokakseen. Metodien kapseloinnilla voi lisätä uusia, melko monimutkaisiakin funktioita järjestelmään helposti. Tässä ohjelmassa kirppujen välisten vuorovaikutuksten laskemistavat ovat kapseloitu omiin luokkiinsa. Toisena esimerkkinä kävisi vaikkapa erilaisten järjestämisalgoritmien kapselointi omiin luokkaansa. Algoritmiryhmillä tulee kuitenkin olla yhtenäinen tarkoitus joka ilmenee yhtenäisinä rajapintoina.

Suunnittelumallien maailmassa tämänlaista ratkaisua kuvataan nimellä Strategia(Strategy). Alla on strategian kaavio, joka on miltei identtinen Design Patterns(Gamma,Helm,Johnson,Vlissides,1995,Addison Wesley,sivu 316) -kirjan osoittaman kaavion kanssa. Kirjan kymmenvuotias painos on kestänyt hyvin ikää, sillä oliomallit ovat aika käsitteellisiä. Design Patterns on suunnittelumallien klassikko.

Alla on kaavio Strategian sovelluksesta Kirppusirkuksessa. Kantastrategia voisi olla vaikkapa tavallinenkin luokka(NullStrategy?), mutta strategian abstraktio toteutettiin pelkkänä interfacena yksinkertaisuuden vuoksi.

Lähdekoodi

Olen ParticlePanel -luokkaa tehdessäni kierrättänyt paljon kamaa omasta ohjelmoinnin harjoitustyöstäni sekä edellisen tehtävän käyttöliittymäjuttuja StarMakerista. Kämpälläni oli käytössä vain JDK 1.4.2, joten 1.5:n hienoudet jäivät hyödyntämättä -Ilkka.