Mis on meetodi ülekoormamine?

Meetodi ülekoormus on enamiku objektorienteeritud programmeerimiskeelte funktsioon, milles kahel või enamal meetodil on sama nimi, kuid neil on erinevad parameetrid. Täpsemalt on parameetrite arv, andmetüüp ja/või järjekord erinev. Kui kood on koostatud, valitakse selle kutsumise järgi automaatselt õige meetod. Meetodeid tuntakse mõnes programmeerimiskeeles ka funktsioonidena, seetõttu nimetatakse meetodi ülekoormamist mõnikord funktsioonide ülekoormamiseks.

Meetodi ülekoormamise lihtne näide oleks meetod, mis arvutab ruudu pindala. Seda võib määratleda kui getArea (Ruut s). Seda meetodit saab üle koormata, et lisaks arvutada ringi pindala, lisades meetodi getArea(Circle c).

Meetodi ülekoormamise peamine nõue on, et meetodid jagaksid sama nime. Nende meetodi allkirjad – meetodi nimi, parameetrite arv ja parameetrite andmetüübid – peaksid muidu olema kordumatud. Sel viisil saab kompilaator määrata, millist meetodit käivitada.

Konstruktorid, objektide loomiseks kasutatavad meetodid, on sageli ülekoormatud. Seda tehakse objekti lähtestamiseks mittevaikeväärtustega. Näiteks kahe väljaga (nimi ja sünnikuupäev või sünnikuupäev) töötaja objektil võivad olla järgmised ülekoormatud konstruktorid: Töötaja(), Töötaja(nimi) ja Töötaja(nimi, sünnikuupäev). Esimene konstruktor loob töötaja objekti tühja nime ja väljadega. Teine määrab nimevälja, kuid jätab dob välja tühjaks ja kolmas määratleb nii nime kui ka dob väljad.

Meetodi ülekoormamine toimub enamasti selleks, et rohkem kui üks meetod näiks loogiliselt ühe meetodina. GetArea() näites, kuigi füüsiliselt on kaks meetodit, esitatakse helistajale üks loogiline getArea() meetod. Sel viisil saab getArea() laiendada, et see töötaks ka muude kujunditega – kolmnurgad, trapetsid ja nii edasi –, esitades samal ajal end loogiliselt ühe meetodina.

Meetodid on ka tagasiühilduvuse säilitamiseks ülekoormatud. Keerulist arvutust tegevale meetodile võiks anda uue nõude teha valikuliselt sama arvutus koos väikese muudatusega. Meetodile lisatakse uus parameeter, mis määrab, kuidas arvutada – vana või uus viis.
Et vältida kõigi meetodi väljakutsumise juhtumite leidmist ja uue parameetri lisamist, võib meetodi üle koormata. Uuel meetodil on vana allkiri ja seda kutsutakse olemasoleva koodiga. See ei sisalda ise loogikat ja kutsub lihtsalt välja muudetud meetodi ja edastab uue parameetri vaikimisi “vana viisi”. Uus kood kutsub välja muudetud meetodi ja edastab uue parameetri sobiva väärtusega, vana või uut moodi.
Meetodi ülekoormus on teatud tüüpi polümorfism, mille puhul saab sama loogilist meetodit praktikas kasutada mitmel viisil. Meetodi ülekoormamine ei ole sama, mis meetodi alistamine. Meetodi alistamine on see, kui alamklassi meetodi määratlust põhiklassis muudab. Sel juhul on mõlemal meetodil sama allkiri.