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. |