Sobes.tech
Junior

Proqramlaşdırmada Overriding (Yenidən Yazma) nədir?

sobes.tech Süni İntellekt

AI-dan cavab

Yenidənqurma metodu (Overriding) — bu, alt sinfin artıq öz valideyn sinfində müəyyən edilmiş metodu öz tərzində təqdim etmək imkanını verir. Yenidənqurma metodunun imzası (ad, parametr sayı və növləri) alt sinifdə tamamilə valideyn sinfindəki metodun imzası ilə uyğun olmalıdır. Qaytarılan dəyərin tipi də ya eyni, ya da valideyn metodunun qaytarılan tipinin kovariant (alt tipi) olmalıdır.

Yenidənqurma ilə bağlı əsas aspektlər:

  • İrsi: Yenidənqurma yalnız irsi münasibətlər kontekstində mümkündür, burada alt sinif valideyn sinifdən metodu irsi alır.
  • Polimorfizm: Yenidənqurma, vaxtında çoxbiçimlilik (runtime polymorphism) həyata keçirmə mexanizmlərindən biridir. Bu, obyektin faktiki növünə görə, valideyn növü vasitəsilə çağırılan metodun uyğun implementasiyasının işlədiləcəyini göstərir (valideyn və ya alt sinifdən).
  • @Override açar sözü: Bəzi dillərdə (məsələn, Java) @Override annotasiyası istifadə olunur. Bu, yenidənqurma üçün zəruri deyil, lakin kodun oxunaqlığını artırmaq və yenidənqurma qaydalarına uyğun olmayan metodların tənqidini qarşısını almaq üçün tövsiyə olunur.
  • Valideyn metoduna çıxış: Yenidənqurma edilmiş metod daxilində, çox vaxt, valideyn sinifin eyni metodunu çağırmaq lazım olur. Bunun üçün super açar sözü istifadə olunur (məsələn, super.metod()).

Java nümunəsi:

// Valideyn sinfi
class Animal {
    // Valideyn sinfində metod
    void makeSound() {
        System.out.println("Heyvan səs çıxarır");
    }
}

// Animal-dən irsi alan alt sinif
class Dog extends Animal {
    // makeSound() metodunun yenidənqurulması
    @Override
    void makeSound() {
        System.out.println("Hav-hav!");
    }

    // Valideyn metodunu çağırma nümunəsi
    void eat() {
        System.out.println("İt yeyir.");
        super.makeSound(); // Valideyn sinfin metodunu çağırır
    }
}

class Main {
    public static void main(String[] args) {
        Animal myAnimal = new Animal();
        Animal myDog = new Dog(); // Polimorfizm

        myAnimal.makeSound(); // Çıxış: Heyvan səs çıxarır
        myDog.makeSound();   // Çıxış: Hav-hav! (Yenidənqurulmuş metod çağırılır)

        Dog specificDog = new Dog();
        specificDog.eat(); // Çıxış: İt yeyir. 
// Heyvan səs çıxarır
    }
}

Python nümunəsi:

# Valideyn sinfi
class Animal:
    # Valideyn sinfində metod
    def make_sound(self):
        print("Heyvan səs çıxarır")

# Animal-dən irsi alan alt sinif
class Dog(Animal):
    # make_sound() metodunun yenidənqurulması
    def make_sound(self):
        print("Hav-hav!")

    # Valideyn metodunu çağırma nümunəsi
    def eat(self):
        print("İt yeyir.")
        super().make_sound() # Valideyn sinfin metodunu çağırır

# Nümayiş
my_animal = Animal()
my_dog = Dog() # Polimorfizm

my_animal.make_sound() # Çıxış: Heyvan səs çıxarır
my_dog.make_sound()   # Çıxış: Hav-hav!

specific_dog = Dog()
specific_dog.eat() # Çıxış: İt yeyir. 
# Heyvan səs çıxarır

Yenidənqurma, əsas sinfin davranışını alt sinfinin xüsusiyyətlərinə uyğunlaşdırmaq üçün istifadə olunur və ümumi interfeysi saxlayır. Bu, obyekt yönümlü dizaynın əsas elementidir.