Middle
Кай вақт аст, ки усул (Overriding) иваз мешавад?
sobes.tech AI
Ҷавоб аз AI
Баррасии усули (Overriding) дар барномаи объектӣ-ҳуқуқӣ вақте рух медиҳад, ки синфи зерӣ усули бо номи ҳамон, рӯйхати параметрҳо (ё сигнатура) ва навъи баргардонидашавӣ дорад, ки усули дар синфи падарии он. Ин имкон медиҳад, ки синфи зерӣ иҷрои худро барои усули меросгирифта пешниҳод кунад.
Шартҳои асосӣ барои баррасӣ:
- Мураббият: Синфи зерӣ бояд аз синфи падарӣ мерос гирад.
- Сигнатураи усул: Усули баррасишаванда дар синфи зерӣ бояд ҳамон сигнатураро дошта бошад (номи усул ва рӯйхати намудҳои параметрҳо, тартиб ва миқдори онҳо), ки усули дар синфи падарӣ. Дар баъзе забонҳо (масалан, Java) инчунин талаб карда мешавад, ки навъи баргардонидашавӣ ё коварианти он мувофиқ бошад.
- Модификаторҳои дастрасӣ: Модификатори дастрасии усули баррасишаванда дар синфи зерӣ набояд маҳдудтар аз он дар синфи падарӣ.
- Наметавонад баррасӣ шавад: Усулҳои статикӣ (
static), ниҳоӣ (finalдар Java,sealedдар C#) ва хусусӣ (private) — онҳо дар полиморфизм тавассути мерос иштирок намекунанд.
Масалан дар Java:
// Синфи падар
class Animal {
public void sound() {
// Иҷрои пешфарз
System.out.println("Ҳайвонот садо мебароранд");
}
}
// Синфи зерӣ, ки усули sound()-ро баррасӣ мекунад
class Dog extends Animal {
@Override // Анотация барои санҷиши компилятор
public void sound() {
// Иҷрои махсус барои Dog
System.out.println("Саг мехонад");
}
}
class Main {
public static void main(String[] args) {
Animal myAnimal = new Animal();
Animal myDogAsAnimal = new Dog(); // Полиморфизм
Dog myDog = new Dog();
myAnimal.sound(); // Методаи sound() аз Animal-ро даъват мекунад
myDogAsAnimal.sound(); // Методаи баррасишаванда аз Dog-ро даъват мекунад (баъ thanks полиморфизм)
myDog.sound(); // Методаи баррасишаванда аз Dog-ро даъват мекунад
}
}
Масалан дар Python:
# Синфи падар
class Animal:
def sound(self):
# Иҷрои пешфарз
print("Ҳайвонот садо мебароранд")
# Синфи зерӣ, ки усули sound()-ро баррасӣ мекунад
class Dog(Animal):
def sound(self):
# Иҷрои махсус барои Dog
print("Саг мехонад")
# Истифода
my_animal = Animal()
my_dog_as_animal = Dog() # Полиморфизм
my_dog = Dog()
my_animal.sound() # Методаи sound() аз Animal-ро даъват мекунад
my_dog_as_animal.sound() # Методаи баррасишаванда аз Dog-ро даъват мекунад (баъ thanks полиморфизм)
my_dog.sound() # Методаи баррасишаванда аз Dog-ро даъват мекунад
Баррасӣ барои расидан ба полиморфизми вақти иҷро, истифода мешавад, ки имкон медиҳад, ки амалҳои гуногунро вобаста ба навъи воқеии объект иҷро кард, новобаста аз истифодаи истинод ба синфи падар. Ин принсипи асосии OOP барои сохтани системаҳои чандир ва васеъшаванда мебошад.