Alistamine vs ülekoormamine
Meetod Ületamine ja meetod Ülekoormus on kaks mõistet/tehnikat/funktsiooni, mida leidub mõnes programmeerimiskeeles. Mõlemad kontseptsioonid võimaldavad programmeerijal pakkuda sama nimega meetodite jaoks erinevaid rakendusi. Meetodi alistamine võimaldab programmeerijal pakkuda alamklassis alternatiivset rakendust juba selle superklassis määratletud meetodile. Meetodi ülekoormus võimaldab programmeerijal pakkuda mitmele sama nimega meetodile erinevaid rakendusi (samas klassis).
Mis on alistamine?
Nagu eespool mainitud, saab klass objektorienteeritud programmeerimiskeeltes laiendada superklassi või emaklassi. Alamklassil võivad olla oma meetodid või valikuliselt oma juurutused meetoditele, mis on juba defineeritud tema ülemklassis (või ühes selle vanemklassis). Nii et kui viimane juhtub, nimetatakse seda meetodi alistamiseks. Teisisõnu, kui alamklass pakub juurutuse sama allkirja ja tagastustüübiga meetodile, mis on juba defineeritud ühes selle ülemklassis, siis öeldakse, et alamklassi rakendamine alistab (asendab) selle meetodi.. Seega, kui klassis on tühistatud meetod, peab käitussüsteem otsustama, millist meetodi rakendamist kasutatakse. See probleem lahendatakse, vaadates selle väljakutsumiseks kasutatava objekti täpset tüüpi. Kui alistatud meetodi esilekutsumiseks kasutatakse vanemklassi objekti, siis kasutatakse vanemklassis olevat teostust. Samamoodi, kui kasutatakse alamklassi objekti, kasutatakse alamklassi teostust. Kaasaegsed programmeerimiskeeled nagu Java, Eifell, C++ ja Python võimaldavad meetodi alistamist.
Mis on ülekoormamine?
Meetodi ülekoormamine on mõne programmeerimiskeele funktsioon, mis võimaldab luua rohkem kui ühe meetodi sama nimega, kuid erinevate sisend- ja väljundtüüpidega. Kaasaegsetes programmeerimiskeeltes, nagu Java, C, C++ ja VB. NET, on see funktsioon saadaval. Saate meetodi üle koormata, luues teise meetodi sama nimega, kuid erineva meetodi allkirja või erineva tagastustüübiga (või mõlemaga). Näiteks kui teil on samas klassis meetod1(tüüp1 t1) ja meetod1(tüüp2 t2), siis on need ülekoormatud. Seejärel peab süsteem otsustama, kumba käivitada, kui seda kutsutakse. See eristamine toimub meetodile edastatud parameetri(te) tüübi järgi. Kui argument on tüüp1, kutsutakse välja esimene teostus, kui aga tüüp2, siis kutsutakse teist teostust.
Mis vahe on alistamise ja ülekoormamise vahel?
Kuigi erinevate rakendustega meetodi pakkumiseks kasutatakse meetodi alistamist ja meetodi ülekoormust, on nende kahe mõiste/tehnika vahel peamised erinevused. Esiteks jäävad meetodi alistamise teemad alati erinevatesse klassidesse, meetodi ülekoormuse teemad aga samas klassis. See tähendab, et alistamine on võimalik ainult objektorienteeritud programmeerimiskeeltes, mis võimaldab pärimist, samas kui ülekoormus võib olla saadaval ka mitteobjektorienteeritud keeles. Teisisõnu alistate meetodi superklassis, kuid koormate oma klassi meetodi üle.
Teine erinevus on see, et tühistatud meetoditel on sama meetodi nimi, meetodi allkiri ja tagastustüüp, kuid ülekoormatud meetodid peavad erinema kas signatuuri või tagastustüübi poolest (nimi peaks olema sama). Kahe ülekoormatud meetodi eristamiseks kasutatakse täpset objekti tüüpi, mida kasutatakse kasutatavate meetodite ID kutsumiseks, samas kui kahe ülekoormatud meetodi eristamiseks kasutatakse parameetrite tüüpe. Teine oluline erinevus on see, et ülekoormus lahendatakse kompileerimise ajal, alistamine aga käitusajal.