Junior
Ի՞նչ է վերագրանցումը (Overriding) ծրագրավորման մեջ։
sobes.tech AI
Պատասխան AI-ից
Overriding (Ավելացնել) — դա հնարավոր է ենթասինֆում տալ իր սեփական իրականացման մեթոդը, որը արդեն սահմանված է նրա ծնողական դասում: Օգտագործելով վերագրած մեթոդի սինտաքսը (անունը, պարամետրերի քանակը և տեսակները) ենթասինֆում պետք է լրիվ համընկնի ծնողական դասի մեթոդի սինտաքսին: Վերադարձվող արժեքի տիպը նույնպես պետք է լինի կամ նույնը, կամ կովարիանտ (մասնույն) տիպը ծնողական մեթոդի վերադարձվող տիպի:
Հիմնական կողմերը վերագրումից.
- Ներառում: Վերագրումը հնարավոր է միայն ժառանգության հարաբերությունների շրջանակում, որտեղ ենթասինֆը ժառանգում է մեթոդը վերին դասից:
- Պոլիմորֆիզմ: Վերագրումը հանդիսանում է ժամանակի ռնտիմ պոլիմորֆիզմի (runtime polymorphism) իրականացման մի մեխանիզմ: Դա նշանակում է, որ կախված օբյեկտի իրական տիպից, որը կանչվում է ծնողական տիպի հղումով, կիրականացվի համապատասխան մեթոդի իրականացումը (կամ ծնողականից կամ ենթասինֆից):
@Overrideբանալի բառը: Որոշ լեզուներում (օրինակ, Java) օգտագործվում է@Overrideնշումը: Դա պարտադիր չէ վերագրումի ճիշտ աշխատանքի համար, բայց խորհուրդ է տրվում կոդի ընթեռնելիությունը բարելավելու և սխալների կանխարգելման համար, եթե մեթոդը չի համապատասխանում վերագրումի կանոններին:- Ծնող մեթոդին մուտք գործելու հնարավորություն: Վերագրած մեթոդի ներսում հաճախ անհրաժեշտ է կանչել նույն մեթոդի իրականացումը ծնողական դասից: Դրա համար օգտագործվում է
superբանալի բառը (օրինակ,super.metod()).
Java-ի օրինակ:
// Ծնող դաս
class Animal {
// Մեթոդ ծնողական դասում
void makeSound() {
System.out.println("Համայն կենդանին հանում է ձայն");
}
}
// Որդական դաս, որը ժառանգում է Animal-ից
class Dog extends Animal {
// Overriding մեթոդ makeSound()
@Override
void makeSound() {
System.out.println("Վաու վաու!");
}
// Օրինակ ծնողական մեթոդի կանչի
void eat() {
System.out.println("Կենդանին ուտում է.");
super.makeSound(); // Ծնող դասի մեթոդի կանչ
}
}
class Main {
public static void main(String[] args) {
Animal myAnimal = new Animal();
Animal myDog = new Dog(); // Պոլիմորֆիզմ
myAnimal.makeSound(); // Արդյունք: Համայն կենդանին հանում է ձայն
myDog.makeSound(); // Արդյունք: Վաու վաու! (Վերագրած մեթոդը կանչվում է)
Dog specificDog = new Dog();
specificDog.eat(); // Արդյունք: Կենդանին ուտում է.
// Համայն կենդանին հանում է ձայն
}
}
Python-ի օրինակ:
# Ծնող դաս
class Animal:
# Մեթոդ ծնողական դասում
def make_sound(self):
print("Համայն կենդանին հանում է ձայն")
# Որդական դաս, որը ժառանգում է Animal-ից
class Dog(Animal):
# Overriding մեթոդ make_sound()
def make_sound(self):
print("Վաու վաու!")
# Օրինակ ծնողական մեթոդի կանչի
def eat(self):
print("Կենդանին ուտում է.")
super().make_sound() # Ծնող դասի մեթոդի կանչ
# Դիտարկում
my_animal = Animal()
my_dog = Dog() # Պոլիմորֆիզմ
my_animal.make_sound() # Արդյունք: Համայն կենդանին հանում է ձայն
my_dog.make_sound() # Արդյունք: Վաու վաու!
specific_dog = Dog()
specific_dog.eat() # Արդյունք: Կենդանին ուտում է.
# Համայն կենդանին հանում է ձայն
Վերագրումը օգտագործվում է հիմնական դասի վարքագծին համապատասխանեցնելու համար ենթասինֆի առանձնահատկություններին, միաժամանակ պահելով ընդհանուր ինտերֆեյսը: Սա օբյեկտ-կենտրոնացված նախագծման հիմնական տարրերից է։