Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.
Comment: Migration of unmigrated content due to installation of a new plugin

...

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.