...
Joskus
...
halutaan
...
piilottaa
...
luokan
...
jäsenmuuttujat
...
niin,
...
ettei
...
niitä
...
voi
...
muokata
...
luokan
...
ulkopuolelta
...
muuta
...
kuin
...
luokan
...
metodien
...
kautta.
...
Tälläistä
...
piilottamista
...
kutsutaan
...
kapseloinniksi.
...
Tämä tehdään,
...
jotta
...
luokan
...
jäsenmuuttujiin
...
ei
...
sijoitettaisi
...
vääränlaisia
...
arvoja.
...
Metodien
...
avulla
...
voidaan
...
varmistaa,
...
että
...
luokan
...
sisäisiä
...
tietoja
...
käsitellään
...
oikein.
...
Tämä
...
ei
...
ole
...
välttämätöntä,
...
mutta
...
tekee
...
ohjelman
...
toiminnasta
...
selkeämpää
...
kun
...
olioiden
...
tiedot
...
muuttuvat
...
vain
...
ennaltamäärätyllä
...
tavalla.
Toinen syy on erottaa käyttöliittymä toteutuksesta - tätä kutsutaan abstraktisoinniksi. Abstraktisointia käytetään kätkemään tietokoneessa yksityiskohtaiset ja monimutkaiset alemman tason toiminnot havainnollisemman käyttöliittymän alle.
Pythonissa jäsenmuuttujista tehdään yksityisiä aloittamalla muuttujan nimi alaviivalla. Yksityisiä muuttujia ei voi muuttaa kuin luokan sisällä eli sen metodeissa.
Tässä on esimerkki monimutkaisemmasta luokasta lpFilter, joka toimii alipäästösuodattimena. Alipäästösuodin on yksi perussuodattimista; se suodattaa signaalista korkeat taajuudet pois. Sille syötetään arvo metodin insertValue avulla, joka palauttaa suodatetun arvon. Suodatus tehdään ottamalla liukuvakeskiarvo suodattimelle syötetyistä arvoista. Keskiarvon laskemiseen käytettävistä jäsenmuuttujista tehdään yksityisiä, jotta niitä ei muuteltaisi luokan ulkopuolelta.
Code Block |
---|
Toinen syy on erottaa käyttöliittymä toteutuksesta - tätä kutsutaan abstraktisoinniksi. Abstraktisointia käytetään kätkemään tietokoneessa yksityiskohtaiset ja monimutkaiset alemman tason toiminnot havainnollisemman käyttöliittymän alle. Pythonissa jäsenmuuttujista tehdään yksityisiä aloittamalla muuttujan nimi alaviivalla. Yksityisiä muuttujia ei voi muuttaa kuin luokan sisällä eli sen metodeissa. Tässä on esimerkki monimutkaisemmasta luokasta lpFilter, joka toimii alipäästösuodattimena. Alipäästösuodin on yksi perussuodattimista; se suodattaa signaalista korkeat taajuudet pois. Sille syötetään arvo metodin insertValue avulla, joka palauttaa suodatetun arvon. Suodatus tehdään ottamalla liukuvakeskiarvo suodattimelle syötetyistä arvoista. Keskiarvon laskemiseen käytettävistä jäsenmuuttujista tehdään yksityisiä, jotta niitä ei muuteltaisi luokan ulkopuolelta. {code} class lpFilter: _numberOfValues = 10 _values = [0.0] * 10 _pointer = 0 _output = 0.0 def getValue(self): return self._output def insertValue(self, x): self._values[self._pointer] = x self._pointer = (self._pointer + 1) % self._numberOfValues self._calculateOutput() return self._output def _calculateOutput(self): sum = 0.0 for i in self._values: sum += i self._output = sum / self._numberOfValues {code} |
Tämän
...
luokan
...
olion
...
jäsenmuuttujia
...
_numberOfValues,
...
_values,
...
_pointer
...
ja
...
_output
...
ei
...
voida
...
muuttaa
...
luokan
...
ulkopuolelta,
...
mutta
...
metodit
...
getValue
...
ja
...
insertValue
...
palauttavat
...
kutsuttaessa
...
muuttujan
...
_output
...
arvon.
...
Myös
...
metodi
...
_calculateOutput
...
on
...
myös
...
yksityinen;
...
metodien
...
muuttamien
...
yksityiseksi
...
tapahtuu
...
samaan
...
tapaan
...
kuin
...
jäsenmuuttujien
...
muuttaminen
...
yksityisiksi.