Գերբեռնում ընդդեմ գերբեռնվածության
Մեթոդը Overriding-ը և մեթոդը Overloading-ը երկու հասկացություններ/տեխնիկա/հատկանիշ են, որոնք հայտնաբերվել են որոշ ծրագրավորման լեզուներում: Երկու հասկացություններն էլ թույլ են տալիս ծրագրավորողին տրամադրել տարբեր իրականացումներ նույն անունով մեթոդների համար: Մեթոդների գերակայումը թույլ է տալիս ծրագրավորողին այլընտրանքային իրականացում ապահովել ենթադասի ներսում՝ իր սուպեր դասի ներսում արդեն սահմանված մեթոդին: Մեթոդների գերբեռնվածությունը ծրագրավորողին թույլ է տալիս տարբեր իրականացումներ տրամադրել նույն անունով մի քանի մեթոդների (նույն դասի շրջանակներում):
Ի՞նչ է գերակայությունը:
Ինչպես նշվեց վերևում, դասը կարող է ընդլայնել գերծանրքաշային դասը կամ ծնող դասը օբյեկտ կողմնորոշված ծրագրավորման լեզուներում:Երեխաների դասը կարող է ունենալ իր սեփական մեթոդները կամ կարող է կամայականորեն ունենալ իր սեփական ներդրումը իր մայր դասում (կամ իր մեծ ծնող դասերից մեկում) արդեն սահմանված մեթոդների համար: Այսպիսով, երբ վերջինս տեղի է ունենում, այն կոչվում է մեթոդի գերակայություն: Այլ կերպ ասած, եթե երեխա դասը միևնույն ստորագրությամբ և վերադարձի տիպով մեթոդի իրականացում է տալիս, ինչ մեթոդն արդեն սահմանված է իր մայր դասերից մեկում, ապա այդ մեթոդը համարվում է փոխարինված (փոխարինված) երեխայի դասի իրականացմամբ:. Այսպիսով, եթե դասում կա գերագնահատված մեթոդ, գործարկման ժամանակի համակարգը պետք է որոշի, թե որ մեթոդի իրականացումն է օգտագործվում: Այս խնդիրը լուծվում է՝ դիտարկելով օբյեկտի ճշգրիտ տեսակը, որն օգտագործվում է այն կանչելու համար: Եթե մայր դասի օբյեկտը օգտագործվում է վերագրանցված մեթոդը կանչելու համար, ապա օգտագործվում է ծնող դասում իրականացումը: Նմանապես, եթե դա երեխայի դասի օբյեկտ է, որն օգտագործվում է, ապա օգտագործվում է երեխայի դասի իրականացումը: Ժամանակակից ծրագրավորման լեզուները, ինչպիսիք են Java-ն, Eiffel-ը, C++-ը և Python-ը, թույլ են տալիս գերակայել մեթոդը:
Ի՞նչ է գերբեռնումը:
Մեթոդի գերբեռնումը որոշ ծրագրավորման լեզուների կողմից տրամադրված հատկություն է՝ նույն անունով, բայց տարբեր մուտքային և ելքային տեսակներով մեկից ավելի մեթոդներ ստեղծելու համար: Ծրագրավորման ժամանակակից լեզուներում, ինչպիսիք են Java-ը, C-ը, C++-ը և VB. NET-ը, այս հատկությունը հասանելի է: Դուք կարող եք ծանրաբեռնել մեթոդը՝ ստեղծելով մեկ այլ մեթոդ նույն անունով, բայց այլ մեթոդի ստորագրությամբ կամ վերադարձի այլ տեսակով (կամ երկուսն էլ): Օրինակ, եթե դուք ունեք մեթոդ1 (տիպ 1 t1) և մեթոդ1 (տիպ 2 t2) նույն դասի ներսում, ապա դրանք գերբեռնված են: Այնուհետև համակարգը պետք է որոշի, թե որ մեկը պետք է կատարվի, երբ այն կանչվի: Այս տարբերակումը կատարվում է՝ դիտարկելով մեթոդին փոխանցված պարամետր(ներ)ի տեսակը: Եթե արգումենտը տիպի 1 է, ապա կանչվում է առաջին իրականացումը, իսկ եթե այն տիպի 2 է, ապա կոչվում է երկրորդ իրականացումը։
Ո՞րն է տարբերությունը Overriding-ի և Overloading-ի միջև:
Չնայած մեթոդի գերակայումը և մեթոդի գերբեռնումը օգտագործվում են տարբեր իրականացումներով մեթոդ ապահովելու համար, այս երկու հասկացությունների/տեխնիկայի միջև կան հիմնական տարբերություններ:Նախ, մեթոդի գերբեռնման առարկաները միշտ մնում են տարբեր դասերի մեջ, մինչդեռ մեթոդի գերբեռնման առարկաները մնում են նույն դասում: Դա նշանակում է, որ գերակայումը հնարավոր է միայն օբյեկտ կողմնորոշված ծրագրավորման լեզուներում, որոնք թույլ են տալիս ժառանգականություն, մինչդեռ գերբեռնումը կարող է հասանելի լինել նաև ոչ օբյեկտ կողմնորոշված լեզվով: Այլ կերպ ասած, դուք գերակայում եք մեթոդը սուպեր դասում, բայց ծանրաբեռնում եք մեթոդը ձեր սեփական դասում:
Մեկ այլ տարբերություն այն է, որ վերագրանցված մեթոդներն ունեն նույն մեթոդի անունը, մեթոդի ստորագրությունը և վերադարձի տեսակը, բայց գերբեռնված մեթոդները պետք է տարբերվեն կամ ստորագրության կամ վերադարձի տեսակի մեջ (անունը պետք է լինի նույնը): Երկու գերբեռնված մեթոդները տարբերելու համար օբյեկտի ճշգրիտ տեսակը, որն օգտագործվում է օգտագործված մեթոդները id կանչելու համար, մինչդեռ երկու գերբեռնված մեթոդները տարբերելու համար օգտագործվում են պարամետրերի տեսակները: Մեկ այլ հիմնական տարբերությունն այն է, որ գերբեռնումը լուծվում է կոմպիլյացիայի ժամանակ, մինչդեռ գերբեռնումը լուծվում է գործարկման ժամանակ: