Polümorfism (informaatika)

Polümorfism on tehnika, mille puhul on võimalik kasutada sama koodi ja funktsioone erinevate andmetüüpidega, mille tulemuseks on rohkem üldised ning abstraktsed implementatsioonid.

Polümorfismi võib esineda nii funktsioonide puhul kui ka andmetüüpide korral. Polümorfne funktsioon on funktsioon, mida saab kutsuda välja erinevate andmetüüpidega või mis väljastab erinevaid andmetüüpe. Polümorfne andmetüüp on andmetüüp, mille tüüp on spetsifitseerimata või mis võib osutuda teiseks andmetüübiks kui näidatud.

On olemas põhimõtteliselt kahte tüüpi polümorfismi:

  • Kui kasutatavate andmetüüpide hulk on lõplik ja nende kombinatsioonid tuleb määratleda enne kasutamist, nimetatakse seda oodatud polümorfismiks (ad-hoc).
  • Kui kogu lähtekood on kirjutatud ilma konkreetsele tüüpidele viitamata ja seega võib seda kasutada suvaliste uute andmetüüpidega, nimetatakse seda parametriseeritud polümorfismiks (parametric).

Viimase mooduse abil programmeerimist nimetatakse üldistavaks programmeerimiseks (generic programming).

Näide muuda

Järgnevas C++ näites on printNumber polümorfne funktsioon. Selle argumendi tüüp võib olla mis tahes klassist Number pärinev alamklass (Integer või Float).

class Number {
  public:
    virtual void print() = 0;
};

class Integer : public Number {
  public:
    virtual void print() { /* print Integer */ }
};

class Float : public Number {
  public:
    virtual void print() { /* print Float */ }
};

void printNumber(Number& obj) {
    obj.print();
}

int main()
{
    Integer i;
    Float f;
    printNumber(i);
    printNumber(f);
}