Introduction to Polymorphism
Pyyhkäise näyttääksesi valikon
Polymorfismi on keskeinen käsite. Sana tulee kreikasta ja tarkoittaa "monta muotoa"; se mahdollistaa eri classes olioiden käsittelyn yhteisen yliluokan oliona. Merkittävin piirre on, että eri oliot voivat vastata samalla tavalla annettuun viestiin tai metodikutsuun omalla tavallaan.
Polymorfismin tyypit
Polymorfismia on kahta päätyyppiä: kääntöaikainen (staattinen) ja ajoaikainen (dynaaminen). On tärkeää ymmärtää, miten ja milloin kumpaakin käytetään, jotta koodi olisi joustavaa ja tehokasta.
-
Kääntöaikainen polymorfismi: toteutetaan funktioiden tai operaattoreiden ylikuormituksella, jolloin suoritettava metodi määräytyy käännösvaiheessa.
-
Ajoaikainen polymorfismi: käyttää virtuaalifunktioita, jolloin perityt luokat voivat korvata kantaluokan metodeja ja oikea metodi valitaan ajonaikaisesti.
Polymorfismin soveltaminen ja tarve
Hyvä tapa ymmärtää polymorfismia on käyttää esimerkkiä todellisesta maailmasta. Kuvittele graafinen käyttöliittymä, jossa on painike. Tämä painike voi käyttäytyä eri tavoin tilanteesta riippuen—se voi toimia esimerkiksi lähetyspainikkeena, nollauspainikkeena tai peruuta-painikkeena.
Jokainen painike suorittaa erilaisen toiminnon, kun sitä klikataan, mutta kaikki toimivat pohjimmiltaan painikkeina. Tarkastele tämän käsitteen teoreettista toteutusta.
UploadButton.h
ResetButton.h
CancelButton.h
1234class UploadButton : public Button { public: void onClick() { std::cout << "Upload" << std::endl; } };
Koska kaikilla painikkeilla on sama onClick()-metodi eri toteutuksilla, tarkastellaan asiaa tarkemmin. Entä jos tarvitsemme funktion, joka ottaa olion, joka kuuluu johonkin painikkeen classes, parametrina?
main.cpp
1234567891011void user_clicked_upload_button(const UploadButton& btn) { btn.onClick(); } void user_clicked_reset_button(const ResetButton& btn) { btn.onClick(); } void user_clicked_cancel_button(const CancelButton& btn) { btn.onClick(); }
Kuten huomaat, erillisten funktioiden luominen jokaiselle painikkeelle lisää monimutkaisuutta, erityisesti muutosten yhteydessä, sillä jokainen funktio on muokattava erikseen, jos ongelmia ilmenee. Lisäksi pääfunktiossa tarvitaan lisätarkistuksia sen määrittämiseksi, mitä funktiota kutsutaan. Polymorfismi mahdollistaa näiden ongelmien helpon ratkaisun.
Kiitos palautteestasi!
Kysy tekoälyä
Kysy tekoälyä
Kysy mitä tahansa tai kokeile jotakin ehdotetuista kysymyksistä aloittaaksesi keskustelumme