Polimorfizm

Frontend SELF AZ
Səviyyə , Dərs
Mövcuddur

10.1 Polimorfizmin əsasları

Polimorfizm obyekt yönümlü proqramlaşdırmanın (OYP) əsas konsepsiyalarından biridir. Ümumi mənada, polimorfizm müxtəlif siniflərin obyektlərinə eyni interfeysdən istifadə edərək məlumatları emal etməyə imkan verir. JavaScript kontekstində bu o deməkdir ki, müxtəlif obyektlər eyni adda metodlara sahib ola bilər və həmin metodlar obyektlərin konkret tipi bilinmədən çağırılabilir.

Polimorfizm tipləri

JavaScript-də əsas polimorfizm tipləri bunlardır:

1. Ad-hoc polimorfizm (ad-hoc polymorphism):

  • Metodların polimorfizmi, müxtəlif tiplərdən olan obyektlər üçün eyni adla metodların çağırılması
  • Misallara funksiya və operatorların overload-u daxildir (JavaScript-də birbaşa dəstəklənmir, amma simulyasiya oluna bilər)

2. Subtip polimorfizmi (Subtype polymorphism):

  • Subtip və ya daxiletmə polimorfizmi, eyni baz sinifdən irs alınmış müxtəlif siniflərin obyektləri baz sinif obyektləri kimi işlənə bilər
  • Bu, əsas polimorfizm növüdür və irs alma və interfeyslər vasitəsilə həyata keçirilir

Polimorfizmin üstünlükləri:

  1. Kodun sadələşdirilməsi: polimorfizm daha çevik və ümumi kod yazmağa imkan verir, hansı ki, müxtəlif obyekt tipləri ilə işləyə bilər və onların konkret tiplərini bilməyə ehtiyac duymaz.
  2. Genişləndirmə: polimorfizm sistemə yeni tiplər və davranışlar əlavə etməyi asanlaşdırır, mövcud kodu dəyişməyə ehtiyac qalmır.
  3. Dəstək: polimorfizm daha yaxşı vəzifə bölgüsünü təmin edir və kodu daha oxunaqlı və dəstək göstərilməsi asan edir.

10.2 Polimorfizm nümunələri JavaScript-də

İrsi əlaqə vasitəsilə alt növlərin polimorfizmi

Nümunə 1: Müxtəlif obyekt növlərinin bir interfeys vasitəsilə işlənməsi

Bu nümunədə playWithAnimal funksiyası Animal tipində obyekt qəbul edir və makeSound metodunu çağırır. DogCat obyektləri, hansı ki Animal-dan irs alır, makeSound metodunu özlərinə uyğun şəkildə təyin edir və hər obyektin metodu çağırıldıqda fərqli nəticə alınır.

JavaScript
    
      class Animal {
        makeSound() {
          console.log('Hansısa ümumi səs');
        }
      }

      class Dog extends Animal {
        makeSound() {
          console.log('Hav-hav!');
        }
      }

      class Cat extends Animal {
        makeSound() {
          console.log('Miyov!');
        }
      }

      function playWithAnimal(animal) {
        animal.makeSound();
      }

      const dog = new Dog();
      const cat = new Cat();

      playWithAnimal(dog); // Çap edir: Hav-hav!
      playWithAnimal(cat); // Çap edir: Miyov!
    
  

10.3 Polimorfizm interfeyslər vasitəsilə (Duck Typing)

JavaScript-də TypeScript və ya Java kimi digər proqramlaşdırma dillərində olduğu kimi interfeyslər üçün daxili dəstək yoxdur. Bunun əvəzinə "ördəkləmə" (Duck Typing) adı verilən yanaşma istifadə olunur. Bu o deməkdir ki, obyekt müvafiq interfeysə uyğun hesab edilir, əgər onda tələb olunan metodlar və xüsusiyyətlər varsa, onun konkret tipi və ya irsiyyəti nəzərə alınmadan.

Ördək qaydası (duck): əgər nəsə ördək kimi görünürsə, ördək kimi üzürsə və ördək kimi quak edirsə, bu, çox güman ki, ördəkdir.

Misal 2: Ördək yanaşmasının istifadəsi

Bu nümunədə takeOff funksiyası, istənilən sinfi qəbul edir əlbəttəində sinfi vərsiye####

10.4 Funksiyalar vasitəsilə polimorfizm

JavaScript-də funksiyalar birinci sinif obyektlərdir və onları ötürmək və polimorf davranışı reallaşdırmaq üçün istifadə etmək mümkündür.

Nümunə 3: Funksiyalar vasitəsilə polimorfizm

Bu nümunədə greet funksiyası başqa bir funksiyanı arqument kimi qəbul edir və onu çağırır. Bu, müxtəlif funksiyalardan fərqli hərəkətlərin həyata keçirilməsi üçün istifadə etməyə imkan verir.

JavaScript
    
      function greetMorning() {
        console.log('Sabahınız xeyir!');
      }

      function greetEvening() {
        console.log('Axşamınız xeyir!');
      }

      function greet(greetingFunction) {
        greetingFunction();
      }

      greet(greetMorning); // Çıxaracaq: Sabahınız xeyir!
      greet(greetEvening); // Çıxaracaq: Axşamınız xeyir!
    
  

10.5 Metodun yükləməsini polimorfizm ilə simulyasiya etmək

JavaScript digər proqramlaşdırma dilləri kimi birbaşa metodların yükləməsini dəstəkləmir. Amma metodların yüklənməsini funksiyaların arqumentlərindən və onların növlərinin yoxlanmasından istifadə edərək simulyasiya etmək olar.

Nümunə 4: Metodların yüklənməsinin simulyasiyası

Bu nümunədə add metodu iki arqument qəbul edir və onların növlərinə uyğun müxtəlif əməliyyatlar yerinə yetirir. Əgər arqumentlər rəqəmdirsə, metod onları toplar. Əgər arqumentlər massivdirsə, metod onları birləşdirir.

JavaScript
    
      class Calculator {
        add(a, b) {
          if (typeof a === 'number' && typeof b === 'number') {
            return a + b;
          } else if (Array.isArray(a) && Array.isArray(b)) {
            return a.concat(b);
          } else {
            throw new Error('Yanlış arqumentlər');
          }
        }
      }

      const calc = new Calculator();
      console.log(calc.add(1, 2));           // Çap edəcək: 3
      console.log(calc.add([1, 2], [3, 4])); // Çap edəcək: [1, 2, 3, 4]
    
  
Şərhlər
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION