You are viewing an old version of this page. View the current version.

Compare with Current View Page History

« Previous Version 8 Next »

Polymorfismi

Polymorfismilla tarkoitetaan olioiden käsittelyä kantaluokan kautta. Kantaluokka on luokka, jonka olion luokka on perinyt. Täten kantaluokka muodostaa yhteisen rajapinnan perillisten käsittelyyn.

Esimerkki 1: Olioden käsittely kantaluokan kautta.

CElain:

// Kantaluokka CElain
class CElain
{
public:
    virtual ~CElain() {}          // Hajoittimen toteutus tulee olla (tyhjäkin käy).
    virtual void Aantele() = 0;   // Aito virtuaalifunktio, pakko toteuttaa perillisissä.
};

CKissa:

// Perillinen, joka toteuttaa Aantele()-funktion
class CKissa : public CElain
{
public:
    void Aantele() { printf("Miau!\n"); }
};

CKoira:

// Perillinen, joka toteuttaa Aantele()-funktion
class CKoira : public CElain
{
public:
    void Aantele() { printf("Vuh!\n"); }
};

main:

int main()
{
    CKissa kissa;              // Luodaan uusi olio CKissa-luokasta.
    CKoira koira;              // Luodaan uusi olio CKoira-luokasta.
    CElain* elain;             // Luodaan CELain-tyyppinen osoitin eli kantaluokan tyyppinen osoitin.

    elain = &kissa;            // Pistetään CElain-tyyppinen osoitin osoittamaan olioon kissa.
    elain->Aantele();          // Kutsutaan CKissa-luokassa toteutettua Aantele()-metodia.

    elain = &koira;            // Pistetään CElain-tyyppinen osoitin osoittamaan olioon koira.
    elain->Aantele();          // Kutsutaan CKoira-luokassa toteutettua Aantele()-metodia.
};

Esimerkissä luodaan oliot CKissa- sekä CKoira-luokista. Lisäksi luodaan CElain-tyyppinen osoitin. Tämän osoittimen kautta voidaan käsitellä kaikkia CElain-luokan esittelemiä (public ja protected) metodeja, kuten Aantele()-metodia. CElain-luokka toimii yhteisenä rajapintana CKissa ja CKoira -luokille.


Kuva 1. Esimerkki 1 UML-luokkakaaviona.

Idea? polymorfismista

Yksi tapa hahmottaa polymorfismi on ajatella olioita substantiiveina. Esimerkiksi esineitä, jotka ovat pöydällä: kahvikuppi, lehti, lautanen. Kaikkiin näihin voidaan soveltaa verbejä, kuten kaataa kuppi, lukea lehti, hajoittaa lautanen, jne. On myös olemassa verbejä, jotka soveltuvat lähes kaikkiin substantiiveihin, kuten hae, aseta, siirrä. Polymorfismilla tarkoitetaan 'verbejä' eli funktioita, jotka tekevät jotain 'substantiiveille', eli erilaisille objekteille. Tämä onnistuu ohjelmointikielissä perinnän kautta, olioita voidaan käsitellä tietämättä eksaktia luokkaa, josta ne on luotu, kunhan ne kaikki omaavat saman kantaluokan.

  • No labels
You must log in to comment.