Polimorfizm nedir, ne işe yarar ve nasıl kullanılır?

Polimorfizm nedir, ne işe yarar ve nasıl kullanılır?

Çok biçimlilik, bir nesne sınıfına ana sınıfmış gibi davranma yeteneğidir.

Örneğin, Animal adında bir sınıf ve Animal'dan miras alan Dog adında bir sınıf olduğunu varsayalım. Çok biçimlilik, herhangi bir Köpek nesnesini bir Hayvan nesnesi olarak ele alma yeteneğidir:

Dog* dog = new Dog;
Animal* animal = dog;
Yorumlar (3)

Genellikle bu, A tipindeki bir nesnenin B tipindeki bir nesne gibi davranabilmesi anlamına gelir. Nesne yönelimli programlamada bu genellikle kalıtım yoluyla elde edilir. Daha fazla okumak için bazı wikipedia bağlantıları:

DÜZENLEME: bozuk bağlantılar düzeltildi.

Yorumlar (4)

Bir benzetme yapalım. Belirli bir müzikal metin için, onu çalan her müzisyen yorumda kendi dokunuşunu verir.

Müzisyen arayüzlerle soyutlanabilir, müzisyenin ait olduğu tür bazı global yorumlama kurallarını tanımlayan bir abstrak sınıf olabilir ve çalan her müzisyen somut bir sınıfla modellenebilir.

Eğer bir müzik eseri dinleyicisiyseniz, örneğin Bach'ın 'Fuga ve Tocata'sına bir referansınız vardır ve onu icra eden her müzisyen bunu kendi tarzında polimorfik olarak yapar.

Bu sadece olası bir tasarım örneğidir (Java'da):

public interface Musician {
  public void play(Work work);
}

public interface Work {
  public String getScript();
}

public class FugaAndToccata implements Work {
  public String getScript() {
    return Bach.getFugaAndToccataScript();
  }
}

public class AnnHalloway implements Musician {
  public void play(Work work) {
    // plays in her own style, strict, disciplined
    String script = work.getScript()
  }
}

public class VictorBorga implements Musician {
  public void play(Work work) {
    // goofing while playing with superb style
    String script = work.getScript()
  }
}

public class Listener {
  public void main(String[] args) {
    Musician musician;
    if (args!=null && args.length > 0 && args[0].equals("C")) {
      musician = new AnnHalloway();
    } else {
      musician = new TerryGilliam();
    }
    musician.play(new FugaAndToccata());
}
Yorumlar (1)