3 Eylül 2014 Çarşamba

Nesne yönelimli programlama polymorphism(OOP)

Türkçe’de çok biçimlilik olarak anılır.Örnek göstererek anlatmaya çalışacağım arkadaşlar.
 Bu sayede daha kolay  kavranabileceğine  inanıyorum.
Örnek olarak   Word  ve Excel  belgelerini yazdıracak bir Printer'a sahip olduğumuzu varsayalım.
Bunu sınıf (class) olarak aşağıdaki gibi gösterelim...
Excel ve Word sınıfları(class)    print()  metodu kullanıyor olsun.
public class Excel {
    public void print()
    {
  }
}
1
2
3
4
5
6
7
public class Word {
    public void print()
    {
   }
}
      Printer sınıfımızda aşağıdaki gibi olsun.
1
2
3
4
5
6
7
8
9
10
11
12
public class Printer {
  public void printExcel(Excel excel)
    {
        excel.print();
    }
    public void printWord(Word word)
    {
        word.print();
    }
}
Yukarıda gördüğünüz gibi her birini class olarak yazdık.
Ve bunları print edecek olan Printer sınıfımız herbirini ayrı ayrı
printExcel() ve printWord() diye metod kullandık..

Soru şu: Ya PDF olarak da Print etmek isteseydik?
CVP_1: PDF sınıfı (class) oluştur.Sonra Printer sınıfının içine PDF sınıfı için 
yeniden printPdf() metodu oluştur.

İYİDE kardeşim!!! Ya yeni bir document formatında daha yazdırmak isteseydik!
Ozaman aynı hamallığı yeniden herbiri için tekrar Printer içinde aynı işi
yapmasına rağmen printX() deyip metod eklmemiz gerekecek

CVP_2: Öyleyse yeni bir document format için sınıfımı oluşturur.Daha sonra
Printer içersinde polymorphism uygularız!!
 Nasıl mı şöyle!

Öncelikle Word,execel, vs. bunların ortak özelligi document ' dır.
Kalıtım(inheritance) kullanacagız ve böylece alt sınıfların 
mirasına da ortak olacağız.
Kodunu görelim....
public class Document {
    public void print()
    {
  System.out.println(" Yazdırılacak.");
    }
}
             Word ve Excel sınıfları   Document sınıfına extend ederek genişletilmiş oldu
1
2
3
4
5
6
7
8
public class Excel extends Document{
    @Override
    public void print()
    {
   System.out.println("excel yazdırılacak.");
    }
}
1
2
3
4
5
6
7
8
public class Word extends Document{
    @Override
    public void print()
    {
 System.out.println("word yazdırılacak.");
    }
}

Şimdi Pinter sınıfımızı bakın yazacagız!!

Tüm olay buraki print() metodunun aldıgı document sınıfı tipinde
document örnegi bu zaten alt sınıfların mirasçısıdır
Öyleyse gerektiğinde onlar gibi olmalı!!

public class Printer {
//document sınıfı alt sınıfların mirasına ortakdı..
  public void print(Document document)
    {
        document.print();
    }
}
ŞİMDİ PDF eklemek istersek ne yapmak gerekir. Artık iş çok kolay..
PDF sınıfı oluşturulur ve document sınıfa extend edip mira verecez.. :))

Aşağıdaki gibi;
public class PDF extends Document{
    @Override
    public void print()
    {
        System.out.println("PDF yazdırılacak.");
    }
}

ŞİMDİ TEST EMEK İSTERSEK..



public class Main {
    public static void main(String[] args) {

        Printer printer = new Printer();

        printer.print(new Document());  //document yazar.

  printer.print(new Word()); //Word yazar.

  Burayada sadece bunu ekledik  printer.print(new PDF());
// PDF yazar 
    }
 }

Umarız faydalı olmuştur........


Hiç yorum yok:

Yorum Gönder