Merhabalar.

Kalıtım konusuna Polimorfizm ile devam ediyoruz.

Polymorphism kelimesi “birçok forma sahip olmak” anlamına gelir.
Genellikle polymorphism, bir sınıf hiyerarşisi olduğunda ve ortak bir taban sınıftan inheritance(miras) yoluyla ilişkilendirildiğinde oluşur.
polymorphism, bir üye metot çağrısının, metodu çağıran nesnenin türüne bağlı olarak farklı bir işlemi gerçekleştirilmesine neden olacağı anlamına gelir.

Basitçe polymorphism, tek bir metodun farklı uygulamalara sahip olabileceği anlamına gelir.

Şimdi bunu canlı bir örnekle daha iyi anlamaya çalışalım.

3 Adet metod yazacağım.

void main(){

  Printer print = Printer();
  PDF pdf = PDF();
  Word word = Word();
  
  print.PrintPDF(pdf);
  print.PrintWord(word);

}

class Printer{

  void PrintPDF(PDF pdf){
    pdf.PDFPrint();
  }
  void PrintWord(Word word){
    word.WordPrint();
  }

}

class PDF{

  void PDFPrint(){
    print("PDF Yazdırılıyor");
  }

}

class Word{

  void WordPrint(){
    print("Word Yazdırılıyor");
  }

}

PDF ve Word diye iki sınıfım var ve içerisinde iki metodla beraber yazdırma işlemi yapıyoruz. Görüldüğü üzere benzer iki işlem.

Ve bu iki sınıfın yaptığı işlemi Printer diye bir üst sınıfın içinde çağırıyorum.

Görüldüğü üzere her yeni eklenen doküman yazdırma işleminde sınıfını yaratıp Printer içinde de metodunu tanımlamam gerekecek.

Düşünüyorum, burada yapılan bu işlemleri bir üst sınıf yaratarak kalıtabilirim. Document diye bir sınıf oluştursam ve yazdırma işlemini burada yaptırsam.

Daha sonra alt sınıfların tamamını bu document sınıfından extends etsem.

Ve sonrasında yapmam gereken alt sınıflarda ortak metodları override etmek olacaktır.

Şimdi bunu yapalım.

class Document {
  void PrintDocument() {
    
    print("Doküman Yazdırılıyor");
    
  }
}

Böyle ortak bir üst sınıf yaratıp metodumu yazdım. Şimdi PDF ve Word sınıfımızı buradan kalıtalım.

class PDF extends Document{
  
}

class Word extends Document{
 
}

Şimdi Document sınıfında var olan ve özelleştirmek istediğim metodumu override edelim.

class PDF extends Document{

  @override
  void PrintDocument() {
   print("PDF Yazılıyor");
  }
  
}

class Word extends Document{

  @override
  void PrintDocument() {
    print("Word Yazılıyor");
  }
  
}

Artık Print Class’ımda ayrı ayrı tanımlar yapmama gerek kalmayacak.

Sadece Document sınıfından parametre alarak tek satır kod yazmam yeterli olacaktır. Word ve Pdf, Document sınıfından türediği için artık onlarda birer Document gibi davranabileceklerdir. İşte tam olarak buna polimorfizm diyoruz.

class Printer {
  void PrintDocument(Document Doc){
    Doc.PrintDocument();
  }
}

Çıktımızı görebilmek için main metodu içine ise şunları yazıyoruz.

void main() {

  Printer print = Printer();
  PDF pdf = PDF();
  Word word = Word();

  print.PrintDocument(pdf);
  print.PrintDocument(word);
}

Printer sınıfından türettiğim nesnem print ile PrintDocument metoduna ulaştığımda benden Document tipinde bir sınıf nesnesi istediğini söylüyor.

PDF ve Word Document’tan türediği için aynı zamanda artık bir document nesnesi gibi davranabiliyorlar. Doğal olarak pdf ve word nesnelerini parametre olarak gönderebiliyoruz artık.

Sonuca bakalım.

H:\Dart_Tutorial\hello_dart\bin>dart 29_polymorphism.dart
PDF Yazılıyor
Word Yazılıyor

H:\Dart_Tutorial\hello_dart\bin>

Polimorfizm kavramı da bu kadardı.

Bir sonraki yazımda görüşmek üzere.


What's Your Reaction?

hate hate
0
hate
fail fail
0
fail
fun fun
0
fun
geeky geeky
0
geeky
love love
0
love
lol lol
0
lol
omg omg
0
omg
win win
0
win
Murat Bilginer
21 Şubat 1992 Doğumlu. Endüstri Mühendisi olarak Lisansını 2016 yılında tamamlamıştır. Industryolog Akademi - NGenius oluşumlarının kurucusudur. Şu anda kendi şirketi Brainy Tech ile hem Yazılım Hizmetleri Sunmakta Hem de Online Eğitimler Vermektedir.