Olio-ohjelmoinnissa ohjelma rakennetaan elementeistä, jotka ovat olemassa ohjelmassa (luodit, seinät, hahmot...). Olio on malli, joka voidaan kopioida, ja jonka jokainen kopio on yksilöllinen, ne ovat sovelluksen rakennuspalikoita. Olio rakentuu ominaisuuksista ja metodeista. Jokainen olion instanssi omaa erilaiset ominaisuudet, mutta sillä on käytössään samat metodit.
Tässä luvussa näytämme objektien käsittelyn ja piirrämme kaksi palloa (yksinkertaista ympyrää) ruudulle Tässä esimerkissä on pallon malli (olio) ja sen kopiot (instanssit), joista jokaisella on erilaiset oinaisuudet.
Pallon malli rakentuu ominaisuuksista (muuttujista) seuraavasti:
Malli sisältää seuraavan pallon toiminnon (metodin).
Kuinka voidaan piirtää joukko palloja ruudulle? Selkein selitys on palloa esittävien muuttujien kopiointi. Lisäksi tarvitaan ohjeet pallojen näyttämistä ja hallintaa varten. Koodin koko on suhteessa ruudulla oleviin kohteisiin. Kaksi ongelmaa ilmenee: jos tahtoo muuttaa tai monimutkaistaa kohdetta, koodi täytyy kopioida yhtä monta kertaa kuin kohteita on. Pian koodia on mahdoton pitää järjestyksessä ja se vaatii uutta rakennetta.
Välttääksemme tämän ongelman me muunnamme oliota pallo. Kun olento ohjelmassasi muuttuu liian monimutkaiseksi tai sen täytyy olla olemassa lukemattomina kopioina, sen täytyy olla olio.
Olion luominen tapahtuu kahdessa askeleessa:
Processing käyttää avainsanaa class määrittelemään olion. Sitä käytetään metodin määritelmänä: class (objektinNimi). Kaikki toiminnot ja ominaisuudet kirjoitetaan sen sisälle. Yleisesti ottaen kirjoitamme olion määritelmän koodimme lopussa. Varsinkin jos olio on monimutkainen, kannattaa luoda uusi välilehti, joka on erillään muusta koodista.
class Pallo { }
Kun malli on määritelty, meidän täytyy luoda yksittäinen kopio tästä mallista. Processing käyttää avainsanoja luodakseen uuden instanssin oliosta: new objektinNimi(). Tämä olio pitäisi varastoida muuttujaan, jotta sitä voidaan manipuloida myöhemmin.
Pallo myPallo = new Pallo();
Edellisessä esimerkissä julistamme muuttujan myPallo, joka on kopio oliosta Pallo. myPallo viittaa tähän olioon ja voi toimia myöhemmin ohjelmassa. Jotta tämä olio on käytettävissä koko ohjelmassa, laitamme sen julistuksen ohjelman alkuun.
Olioilla on ominaisuuksia, jotka määrittelevät ne ja tekevät niistä ainutlaatuisia. Nämä ovat muuttujia, jotka tehdään objektin alussa.
class Pallo { //Pallon parametrien julistus float x; float y; color col; }
Editoidaksesi ominaisuutta objektin luomisen jälkeen täytyy edetä seuraavaksi: instanssinNimi.ominaisuudenNimi = arvo. Esimerkiksi:
myPallo.x = 100;
Konstruktori on metodi, jota kutsutaan oliota luotaessa. Sitä vastaa metodi setup (). Sillä on edelleenkin sama nimi kuin oliolla. Konstruktori ottaa joukon muuttujia ja laittaa ne olion parametriin:
class Pallo { //Pallon parametrien julistus float x; float y; color col; Pallo (float newX, float newY, color newColor) { x = newX; y = newY; col = newColor; } }
Kun luomme olion instanssin, annamme sille suoraan sen omat ominaisuudet parametreinä. Esimerkki alla luo valkoisen pallon, joka on sijainnissa 100, 100.
myPallo = new Pallo(100, 100, color(255));
Varoitus! Meidän täytyy vain luoda kopio olion mallista. Sitä ei vielä näytetä ruudulla.
Olion toiminnot edustavat eri asioita, joita olio voi tehdä. Nämä metodit julistetaan olion sisällä. Olion instanssin kutsu toimintaan on seuraava: instanssinNimi.metodinNimi();
Pallollamme on vain yksi toiminto: olla näkyvillä. Käytämme komentoja fill() ja ellipse() piirtääksemme sen.
class Pallo{ //Pallon parametrien julistus float x; float y; color col; Pallo (float newX, float newY, color newColor) { x = newX; y = newY; col = newColor; } void display() { fill(col); ellipse(x, y, 40, 40); } }
Katsoaksemme palloamme voimme kutsua metodia display() sen kopiosta ohjelman metodissa draw().
void draw() { myPallo.display(); }
//Pallon instanssin ja parametrien julistus Pallo myPallo = new Pallo(100, 100, color(255)); void setup() { smooth(); size(400, 200); //Ikkunan koko } void draw() { background(0); //Mustan taustan julistus noStroke(); //Ei ääriviivoja myPallo.display(); //Pallo näkyviin } class Pallo { //Pallon parametrien julistus float x; float y; color col; //Pallon luominen Pallo (float newX, float newY, color newColor) { x = newX; y = newY; col = newColor; } //Pallon näyttäminen void display() { fill(col); ellipse(x, y, 40, 40); } }
Luo toinen pallo julistamalla se esimerkiksi nimellä myPallo2 ja laita se näkyville.
//Kahden pallo-instanssin julistus Pallo myPallo1 = new Pallo(100, 100, color(255)); Pallo myPallo2 = new Pallo(200, 100, color(128)); void setup() { smooth(); size(400, 200); //Ikkunan koko } void draw() { background(0); //Mustan taustan julistus noStroke(); //Ei ääriviivoja myPallo1.display(); //Pallo 1 näkyviin myPallo2.display(); //Pallo 2 näkyviin } class Pallo { //Pallo-luokan parametrien julistus float x; float y; color col; //Pallon konstruktori Pallo (float newX, float newY, color newColor) { x = newX; y = newY; col = newColor; } //Pallo näkyviin void display() { fill(col); ellipse(x, y, 40, 40); } }
There has been error in communication with Booktype server. Not sure right now where is the problem.
You should refresh this page.