Mikä on menetelmän ylikuormitus?

Metodin ylikuormitus on ominaisuus useimmissa olio-ohjelmointikielissä, joissa kahdella tai useammalla menetelmällä on sama nimi, mutta joilla on erilaiset parametrit. Erityisesti parametrien lukumäärä, tietotyyppi ja/tai järjestys ovat erilaisia. Kun koodi kootaan, oikea menetelmä valitaan automaattisesti sen mukaan, miten sitä kutsutaan. Joillakin ohjelmointikielillä menetelmiä kutsutaan myös funktioiksi, joten menetelmien ylikuormitusta kutsutaan joskus toimintojen ylikuormitukseksi.

Yksinkertainen esimerkki menetelmän ylikuormituksesta olisi menetelmä, joka laskee neliön alueen. Se voidaan määritellä getArea (neliöt). Tämä menetelmä voitaisiin ylikuormittaa laskemaan lisäksi ympyrän pinta -ala lisäämällä menetelmä getArea (ympyrä c).

Menetelmän ylikuormituksen ensisijainen vaatimus on, että menetelmillä on sama nimi. Heidän menetelmäallekirjoitustensa – menetelmän nimen, parametrien lukumäärän ja parametritietotyyppien – tulisi muuten olla yksilöllisiä. Tällä tavalla kääntäjä voi määrittää suoritettavan menetelmän.

Konstruktorit, joita käytetään objektien näyttämiseen, ovat usein ylikuormitettuja. Tämä tehdään alustamaan objekti, jolla ei ole oletusarvoja. Esimerkiksi työntekijäobjektissa, jossa on kaksi kenttää (nimi ja syntymäaika tai syntymä), voi olla seuraavat ylikuormitetut rakenteet: Työntekijä (), Työntekijä (nimi) ja Työntekijä (nimi, syntymäaika). Ensimmäinen konstruktori luo työntekijäobjektin, jossa on tyhjät nimet ja tyhjät kentät. Toinen asettaa nimikentän, mutta jättää dob -kentän tyhjäksi, ja kolmas määrittää sekä nimen että dob -kentät.

Menetelmän ylikuormitus tehdään useimmiten saadakseen useamman kuin yhden menetelmän näyttämään loogiselta yhtenä menetelmänä. Vaikka esimerkissä getArea () on fyysisesti kaksi menetelmää, soittajalle esitetään yksi looginen getArea () -menetelmä. Tällä tavalla getArea () voidaan laajentaa toimimaan muilla muodoilla – kolmioilla, puolisuunnikoilla ja niin edelleen – samalla kun se esittelee itsensä loogisesti yhtenä metodina.

Menetelmiä on myös ylikuormitettu taaksepäin yhteensopivuuden säilyttämiseksi. Menetelmälle, joka suorittaa monimutkaisen laskennan, voidaan asettaa uusi vaatimus suorittaa sama laskelma valinnaisesti pienellä muutoksella. Menetelmään lisätään uusi parametri, joka määrittää, miten laskenta suoritetaan – vanha tai uusi tapa.
Menetelmää voidaan ylikuormittaa, jotta ei tarvitse etsiä kaikkia tapauksia, joissa menetelmää kutsutaan, ja lisätä uusi parametri. Uudella menetelmällä on vanha allekirjoitus ja se kutsutaan olemassa olevalla koodilla. Se ei sisällä mitään logiikkaa, vaan kutsuu vain muutettua menetelmää ja antaa uuden parametrin oletusarvoisesti “vanha tapa”. Uusi koodi kutsuu muutettua menetelmää ja välittää uuden parametrin sopivalla arvolla, vanhalla tai uudella tavalla.
Menetelmän ylikuormitus on eräänlainen polymorfismi, jossa samaa loogista menetelmää voidaan käytännössä käyttää monin tavoin. Menetelmän ylikuormitus ei ole sama kuin menetelmän ohitus. Menetelmän ohitus on tapa, jossa aliluokka muuttaa metodin määritelmän vanhemmassa luokassa. Tässä tapauksessa molemmilla tavoilla on sama allekirjoitus.