Ohittaminen vs ylikuormitus
Menetelmä Overriding ja method Overloading ovat kaksi käsitettä/tekniikkaa/ominaisuutta, joita löytyy joistakin ohjelmointikielistä. Molemmat konseptit antavat ohjelmoijalle mahdollisuuden tarjota erilaisia toteutuksia samannimisille menetelmille. Metodin ohituksen avulla ohjelmoija voi tarjota vaihtoehtoisen toteutuksen aliluokassa menetelmälle, joka on jo määritetty superluokan sisällä. Menetelmien ylikuormitus antaa ohjelmoijalle mahdollisuuden tarjota erilaisia toteutuksia useille menetelmille samalla nimellä (samassa luokassa).
Mikä on ohitus?
Kuten edellä mainittiin, luokka voi laajentaa superluokkaa tai yläluokkaa olioohjelmointikielillä. Aliluokalla voi olla omat menetelmänsä tai valinnaisesti omat toteutukset menetelmille, jotka on jo määritetty sen yläluokassa (tai yhdessä sen pääluokassa). Joten kun jälkimmäinen tapahtuu, sitä kutsutaan menetelmän ohittamiseksi. Toisin sanoen, jos aliluokka tarjoaa toteutuksen menetelmälle, jolla on sama allekirjoitus ja palautustyyppi kuin jossakin sen yläluokassa jo määritetty menetelmä, tämän menetelmän sanotaan ohittavan (korvaavan) aliluokan toteutuksen.. Joten jos luokassa on ohitettu menetelmä, ajonaikaisen järjestelmän on päätettävä, mitä menetelmän toteutusta käytetään. Tämä ongelma ratkaistaan tarkastelemalla tarkkaa objektityyppiä, jota käytetään sen kutsumiseen. Jos emoluokan objektia käytetään ohitetun menetelmän kutsumiseen, käytetään emoluokan toteutusta. Vastaavasti, jos kyseessä on aliluokan objekti, jota käytetään, käytetään aliluokan toteutusta. Nykyaikaiset ohjelmointikielet, kuten Java, Eifell, C++ ja Python, mahdollistavat menetelmän ohituksen.
Mitä on ylikuormitus?
Menetelmien ylikuormitus on joidenkin ohjelmointikielten tarjoama ominaisuus, jolla voidaan luoda useampi kuin yksi menetelmä samalla nimellä, mutta eri tulo- ja lähtötyypeillä. Nykyaikaisilla ohjelmointikielillä, kuten Java, C, C++ ja VB. NET, tämä ominaisuus on saatavilla. Voit ylikuormittaa menetelmän luomalla toisen menetelmän samalla nimellä, mutta jolla on erilainen menetelmän allekirjoitus tai eri palautustyyppi (tai molemmat). Jos sinulla on esimerkiksi metodi1(tyyppi1 t1) ja metodi1(tyyppi2 t2) samassa luokassa, ne ovat ylikuormitettuja. Sitten järjestelmän on päätettävä, kumpi se suoritetaan, kun sitä kutsutaan. Tämä erotus tehdään tarkastelemalla menetelmään välitettyjen parametrien tyyppiä. Jos argumentti on tyyppiä1, kutsutaan ensimmäistä toteutusta, kun taas jos se on tyyppiä2, kutsutaan toista toteutusta.
Mitä eroa on ohituksen ja ylikuormituksen välillä?
Vaikka menetelmän ohittamista ja menetelmän ylikuormitusta käytetään tarjoamaan menetelmä erilaisilla toteutuksilla, näiden kahden käsitteen/tekniikan välillä on keskeisiä eroja. Ensinnäkin menetelmän ohituksen aiheet pysyvät aina eri luokissa, kun taas menetelmän ylikuormituksen aiheet pysyvät samassa luokassa. Tämä tarkoittaa, että ohittaminen on mahdollista vain olio-ohjelmointikielissä, jotka mahdollistavat periytymisen, kun taas ylikuormitus voi olla saatavilla myös ei-olio-kielillä. Toisin sanoen ohitat menetelmän superluokassa, mutta ylikuormitat menetelmän omassa luokassasi.
Toinen ero on, että ohitetuilla menetelmillä on sama menetelmän nimi, menetelmän allekirjoitus ja palautustyyppi, mutta ylikuormitettujen menetelmien on erottava joko allekirjoituksen tai palautustyypin os alta (nimen tulee olla sama). Kahden ohitetun menetelmän erottamiseksi käytetään tarkkaa objektityyppiä, jota käytetään käytettyjen menetelmien id kutsumiseen, kun taas kahden ylikuormitetun menetelmän erottamiseen käytetään parametrien tyyppejä. Toinen keskeinen ero on se, että ylikuormitus ratkaistaan käännösaikana, kun taas ohitus ratkaistaan suorituksen aikana.