Mikä on toimintojen ylikuormitus?

Toimintojen ylikuormitus on ominaisuus monille ohjelmointikielille, joissa voidaan luoda useita menetelmiä samalla nimellä, mutta eri syöttöparametreilla tai paluutyypeillä. Tämä on yhteinen piirre olio-ohjelmoinnissa; erityisesti rakentajilla voi olla useita erilaisia ​​ylikuormitettuja variantteja. Pohjimmiltaan toimintojen ylikuormitus on hyödyllinen, kun kaksi toimintoa tekevät hyvin samankaltaisia ​​asioita ja voivat vaatia monentyyppisiä syötteitä. Konstruktorit voidaan ylikuormittaa helposti, koska niille ei ole määritetty nimenomaista palautustyyppiä, joten pelkkä konstruktorin syöttöparametrien muuttaminen olisi pätevä ylikuormitus.

Ensimmäinen tapa, jolla toiminto voidaan ylikuormittaa, on muuttaa sen syöttöparametreja. Voidaan esimerkiksi harkita funktiota nimeltä “add”, joka syöttää kaksi kokonaislukua. Tämän toiminnon tarkoitus on melko ilmeinen; sen on tarkoitus löytää kahden kokonaisluvun summa.

Jos halutaan löytää kahden kellukkeen tai desimaaliluvun summa, tämä toiminto ei kuitenkaan ole käytettävissä. Joten toinen ylikuormitettu funktio olisi välttämätön, määriteltynä funktiona nimeltä “add”, joka ottaa syöttökseen kaksi kelluketta. Toiminnot toimivat olennaisesti samalla tavalla, mutta toimintojen ylikuormitus on välttämätöntä, koska niiden tulot ovat merkittävästi erilaisia.

Toinen tapa, jolla toiminto voidaan ylikuormittaa, on muuttaa sekä sen syöttöparametreja että paluutyyppiä. Edellisen esimerkin avulla voidaan harkita, oliko molemmilla ylikuormitetuilla “lisää” -toiminnoilla tyhjä paluutyyppi; eli he eivät palauttaneet mitään. Tämä olisi edelleen pätevä toimintojen ylikuormitus, mutta molempien menetelmien palautustyyppejä voitaisiin myös muuttaa. Toisessa pätevässä ylikuormitustilanteessa kaksi kokonaislukua sisältävä “lisäys” -funktio voi palauttaa kyseisen kokonaislukusumman ja “lisää” -funktio, joka ottaa kaksi desimaalilukua, voi palauttaa kyseisen desimaaliluvun summan.

Yksinkertaisesti funktion palautustyypin muuttamista ei kuitenkaan pidetä kelvollisena funktion ylikuormituksena. Vain funktion palautustyypin muuttaminen johtaa epäselvyyteen, koska menetelmän allekirjoituksesta ei käy selväksi, mikä palautustyyppi halutaan. Parametrit voidaan myös määrittää epäselvästi, joten on erittäin tärkeää, että ylikuormitetut toiminnot kutsutaan oikein. Jos esimerkiksi jollakin on ylikuormitettu funktio, jonka syöttöparametrilla on kokonaisluku, ja toisella, jolla on desimaaliluku parametrina, jonkun olisi helppo soittaa vahingossa desimaalilukutoimintoon kokonaislukutoiminnon sijasta tai päinvastoin, koska niillä on sama nimi. Tällaisia ​​epäselviä parametreja tulisi välttää, jos mahdollista, ja jos niitä ei voida tehdä, on huolehdittava siitä, että oikea ylikuormitettu toiminto kutsutaan oikeaan aikaan.

Toimintojen ylikuormitus on hyödyllinen aiheeseen liittyvien toimintojen luomisessa erilaisilla syöttötyypeillä, ja se antaa koodille paljon joustavuutta. Viimeinen huomio ylikuormitetuista toiminnoista on, että riittävä kommentointi on välttämätöntä. Vaikka eri syöttöparametreilla saattaa olla selvää, mikä versio ylikuormitetusta toiminnosta on sopiva tiettyyn tilanteeseen, ei välttämättä aina ole selvää, mitä toiminto tekee eri tavalla kuin muut ylikuormitetut kumppanit.