Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Oppiskele Polymorfismin Esittely | Polymorfismin Yleiskatsaus
C++ OOP
course content

Kurssisisältö

C++ OOP

C++ OOP

1. C++:n OOP:n Perusteet
2. Konstruktorit ja Destruktorit
3. Kapseloinnin Yleiskatsaus
4. Perinnän Yleiskatsaus
5. Polymorfismin Yleiskatsaus

book
Polymorfismin Esittely

Note
Määritelmä

Polymorfismi on keskeinen käsite. Sana tulee kreikan kielestä ja tarkoittaa "monta muotoa"; se mahdollistaa eri classes olioiden käsittelyn yhteisen yliluokan oliona. Merkittävin ominaisuus on, että eri oliot voivat vastata samalla viestille tai metodikutsulle omalla tavallaan.

Polymorfismin tyypit

Polymorfismia on kahta päätyyppiä: käännösaikainen (staattinen) ja ajoaikainen (dynaaminen). On tärkeää ymmärtää, miten ja milloin kumpaakin käytetään, jotta koodi olisi joustavaa ja tehokasta.

  • Käännösaikainen polymorfismi: toteutetaan funktioiden tai operaattoreiden ylikuormituksella, jolloin suoritettava metodi määräytyy käännösaikana.

  • Ajoaikainen polymorfismi: käyttää virtuaalifunktioita, jolloin perityt luokat voivat korvata kantaluokan metodeja ja oikea metodi valitaan ajoaikana.

Polymorfismin soveltaminen ja tarve

Hyvä tapa ymmärtää polymorfismia on todellisen maailman analogia. 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, palautuspainikkeena tai peruutuspainikkeena.

Jokainen painike suorittaa erilaisen toiminnon napsautettaessa, mutta kaikki toimivat pohjimmiltaan painikkeina. Tarkastele tämän käsitteen teoreettista toteutusta.

UploadButton.h

UploadButton.h

ResetButton.h

ResetButton.h

CancelButton.h

CancelButton.h

copy
1234
class 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

main.cpp

copy
1234567891011
void 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 täytyy muokata 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.

question mark

Mikä on termin polymorfismi kirjaimellinen merkitys?

Select the correct answer

Oliko kaikki selvää?

Miten voimme parantaa sitä?

Kiitos palautteestasi!

Osio 5. Luku 1

Kysy tekoälyä

expand

Kysy tekoälyä

ChatGPT

Kysy mitä tahansa tai kokeile jotakin ehdotetuista kysymyksistä aloittaaksesi keskustelumme

course content

Kurssisisältö

C++ OOP

C++ OOP

1. C++:n OOP:n Perusteet
2. Konstruktorit ja Destruktorit
3. Kapseloinnin Yleiskatsaus
4. Perinnän Yleiskatsaus
5. Polymorfismin Yleiskatsaus

book
Polymorfismin Esittely

Note
Määritelmä

Polymorfismi on keskeinen käsite. Sana tulee kreikan kielestä ja tarkoittaa "monta muotoa"; se mahdollistaa eri classes olioiden käsittelyn yhteisen yliluokan oliona. Merkittävin ominaisuus on, että eri oliot voivat vastata samalla viestille tai metodikutsulle omalla tavallaan.

Polymorfismin tyypit

Polymorfismia on kahta päätyyppiä: käännösaikainen (staattinen) ja ajoaikainen (dynaaminen). On tärkeää ymmärtää, miten ja milloin kumpaakin käytetään, jotta koodi olisi joustavaa ja tehokasta.

  • Käännösaikainen polymorfismi: toteutetaan funktioiden tai operaattoreiden ylikuormituksella, jolloin suoritettava metodi määräytyy käännösaikana.

  • Ajoaikainen polymorfismi: käyttää virtuaalifunktioita, jolloin perityt luokat voivat korvata kantaluokan metodeja ja oikea metodi valitaan ajoaikana.

Polymorfismin soveltaminen ja tarve

Hyvä tapa ymmärtää polymorfismia on todellisen maailman analogia. 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, palautuspainikkeena tai peruutuspainikkeena.

Jokainen painike suorittaa erilaisen toiminnon napsautettaessa, mutta kaikki toimivat pohjimmiltaan painikkeina. Tarkastele tämän käsitteen teoreettista toteutusta.

UploadButton.h

UploadButton.h

ResetButton.h

ResetButton.h

CancelButton.h

CancelButton.h

copy
1234
class 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

main.cpp

copy
1234567891011
void 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 täytyy muokata 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.

question mark

Mikä on termin polymorfismi kirjaimellinen merkitys?

Select the correct answer

Oliko kaikki selvää?

Miten voimme parantaa sitä?

Kiitos palautteestasi!

Osio 5. Luku 1
some-alt