Menu
Coddy logo textTech

Çok Biçimlilik Nedir?

Coddy'nin JavaScript Journey'sinin Nesne Yönelimli Programlama bölümünün bir parçası — ders 35 / 56.

Çok biçimlilik (Polymorphism), farklı sınıfların nesnelerinin aynı metoda farklı şekillerde yanıt vermesine olanak tanıyan, nesne yönelimli programlamanın temel bir ilkesidir.

JavaScript'te polimorfizm, en yaygın olarak alt sınıfların üst sınıflardan gelen metotları geçersiz kılmasıyla (override etmesiyle) görülür.

speak() metoduna sahip basit bir üst sınıf oluşturalım:

class Animal {
  constructor(name) {
    this.name = name;
  }
  
  speak() {
    return `${this.name} makes a sound`;
  }
}

Şimdi, Animal sınıfını genişleten bir alt sınıf oluşturalım:

class Dog extends Animal {
  speak() {
    return `${this.name} barks`;
  }
}

İşte başka bir alt sınıf:

class Cat extends Animal {
  speak() {
    return `${this.name} meows`;
  }
}

Her alt sınıf speak() metodunu farklı şekilde uygular. Bu, iş başındaki polimorfizmdir!

Artık farklı nesneler oluşturabilir ve her biri üzerinde aynı metodu çağırabiliriz:

const animal = new Animal("Some animal");
const dog = new Dog("Rex");
const cat = new Cat("Whiskers");

console.log(animal.speak()); // Some animal bir ses çıkarır
console.log(dog.speak());    // Rex havlar
console.log(cat.speak());    // Whiskers miyavlar

Her üç nesne de speak() metoduna yanıt verir, ancak her biri bunu kendi yöntemiyle yapar.

challenge icon

Görev

Bir üst sınıf olan Notification ve iki alt sınıfa sahip bir bildirim sisteminiz var. Göreviniz, her bir alt sınıfa farklı uygulamalarla send(message) metodunu eklemektir.

  1. EmailNotification sınıfında, metod şu dizeyi döndürmelidir: "Sending '(message)' via Email"
  2. SMSNotification sınıfında, metod şu dizeyi döndürmelidir: "Sending '(message)' via SMS"

Kopya kağıdı

Polimorfizm (çok biçimlilik), farklı sınıflara ait nesnelerin aynı metoda farklı şekillerde yanıt vermesine olanak tanır. JavaScript'te bu, genellikle alt sınıfların üst sınıflardan gelen metotları geçersiz kılmasıyla (override) elde edilir.

Metodu olan bir üst sınıf oluşturun:

class Animal {
  constructor(name) {
    this.name = name;
  }
  
  speak() {
    return `${this.name} makes a sound`;
  }
}

Alt sınıflar, üst sınıf metodunu kendi uygulamalarıyla geçersiz kılabilir:

class Dog extends Animal {
  speak() {
    return `${this.name} barks`;
  }
}

class Cat extends Animal {
  speak() {
    return `${this.name} meows`;
  }
}

Her nesne aynı metoda farklı şekilde yanıt verir:

const animal = new Animal("Some animal");
const dog = new Dog("Rex");
const cat = new Cat("Whiskers");

console.log(animal.speak()); // Some animal makes a sound
console.log(dog.speak());    // Rex barks
console.log(cat.speak());    // Whiskers meows

Kendin dene

import { EmailNotification } from './email-notification.js';
import { SMSNotification } from './sms-notification.js';

// Test kodu - değiştirmeyin
const email = new EmailNotification();
const sms = new SMSNotification();

console.log(email.send("Hello!"));  // EmailNotification'ın send() metodunu kullanmalı
console.log(sms.send("Hello!"));    // SMSNotification'ın send() metodunu kullanmalı
quiz iconKendini test et

Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.

Nesne Yönelimli Programlama bölümündeki tüm dersler