39
© Altuğ B. Altıntaş 2003 Java ve Yazılım Tasarımı - Bölüm 6 1 Polimorfizm

Polimorfizm - TD Software€¢ Eski Yunanca bir sözcük olup "bir çok şekil" anlamına gelmektedir . • Polimorfizm ile kalıtım konusu iç içedir. © Altuğ B. Altıntaş2003

  • Upload
    trantu

  • View
    228

  • Download
    4

Embed Size (px)

Citation preview

Page 1: Polimorfizm - TD Software€¢ Eski Yunanca bir sözcük olup "bir çok şekil" anlamına gelmektedir . • Polimorfizm ile kalıtım konusu iç içedir. © Altuğ B. Altıntaş2003

© Altuğ B. Altıntaş 2003 Java ve Yazılım Tasarımı - Bölüm 6 1

Polimorfizm

Page 2: Polimorfizm - TD Software€¢ Eski Yunanca bir sözcük olup "bir çok şekil" anlamına gelmektedir . • Polimorfizm ile kalıtım konusu iç içedir. © Altuğ B. Altıntaş2003

© Altuğ B. Altıntaş 2003 Java ve Yazılım Tasarımı - Bölüm 6 2

Polimorfizm

• Polimorfizm, nesneye yönelikprogramlamanın (OOP) önemliözelliklerinden biridir.

• Eski Yunanca bir sözcük olup "bir çokşekil" anlamına gelmektedir .

• Polimorfizm ile kalıtım konusu iç içedir.

Page 3: Polimorfizm - TD Software€¢ Eski Yunanca bir sözcük olup "bir çok şekil" anlamına gelmektedir . • Polimorfizm ile kalıtım konusu iç içedir. © Altuğ B. Altıntaş2003

© Altuğ B. Altıntaş 2003 Java ve Yazılım Tasarımı - Bölüm 6 3

Örnek

PolimorfizmOrnekBir.java

Page 4: Polimorfizm - TD Software€¢ Eski Yunanca bir sözcük olup "bir çok şekil" anlamına gelmektedir . • Polimorfizm ile kalıtım konusu iç içedir. © Altuğ B. Altıntaş2003

© Altuğ B. Altıntaş 2003 Java ve Yazılım Tasarımı - Bölüm 6 4

Asker

Er Yuzbasi

Page 5: Polimorfizm - TD Software€¢ Eski Yunanca bir sözcük olup "bir çok şekil" anlamına gelmektedir . • Polimorfizm ile kalıtım konusu iç içedir. © Altuğ B. Altıntaş2003

© Altuğ B. Altıntaş 2003 Java ve Yazılım Tasarımı - Bölüm 6 5

Polimorfizm

• Asker a = new Asker() ;• Asker a = new Er();• Asker a = new Yuzbasi();

Page 6: Polimorfizm - TD Software€¢ Eski Yunanca bir sözcük olup "bir çok şekil" anlamına gelmektedir . • Polimorfizm ile kalıtım konusu iç içedir. © Altuğ B. Altıntaş2003

© Altuğ B. Altıntaş 2003 Java ve Yazılım Tasarımı - Bölüm 6 6

Geç bağlama (late binding) - I

• Polimorfizm olmadan geç bağlamaözelliğinden bahsedilemez.

PolimorfizmOrnekIki.java

Page 7: Polimorfizm - TD Software€¢ Eski Yunanca bir sözcük olup "bir çok şekil" anlamına gelmektedir . • Polimorfizm ile kalıtım konusu iç içedir. © Altuğ B. Altıntaş2003

© Altuğ B. Altıntaş 2003 Java ve Yazılım Tasarımı - Bölüm 6 7

Page 8: Polimorfizm - TD Software€¢ Eski Yunanca bir sözcük olup "bir çok şekil" anlamına gelmektedir . • Polimorfizm ile kalıtım konusu iç içedir. © Altuğ B. Altıntaş2003

© Altuğ B. Altıntaş 2003 Java ve Yazılım Tasarımı - Bölüm 6 8

java PolimorfizmIki

Kartal avYakalaHayvan avYakalaKartal avYakala

java PolimorfizmIki

Timsah avYakalaTimsah avYakalaHayvan avYakala

java PolimorfizmIki

Timsah avYakalaHayvan avYakalaKartal avYakala

Page 9: Polimorfizm - TD Software€¢ Eski Yunanca bir sözcük olup "bir çok şekil" anlamına gelmektedir . • Polimorfizm ile kalıtım konusu iç içedir. © Altuğ B. Altıntaş2003

© Altuğ B. Altıntaş 2003 Java ve Yazılım Tasarımı - Bölüm 6 9

Geç bağlama (late binding) - II

• Derleme anında (compile-time) hangi nesneye ait yordamın çağrılacağını bilinemiyorsa buna geçbağlama denir.

• Geç bağlamanın diğer isimleri– Dinamik bağlama (Dynamic binding)– Çalışma anında bağlama (Run-time binding)

• Bunun tam tersi ise erken bağlamadır (early binding).

Page 10: Polimorfizm - TD Software€¢ Eski Yunanca bir sözcük olup "bir çok şekil" anlamına gelmektedir . • Polimorfizm ile kalıtım konusu iç içedir. © Altuğ B. Altıntaş2003

© Altuğ B. Altıntaş 2003 Java ve Yazılım Tasarımı - Bölüm 6 10

final ve Geç bağlama

• final özelliğinin kullanılmasının ikisebebi olabilir.– tasarım .– verimlilik .

Page 11: Polimorfizm - TD Software€¢ Eski Yunanca bir sözcük olup "bir çok şekil" anlamına gelmektedir . • Polimorfizm ile kalıtım konusu iç içedir. © Altuğ B. Altıntaş2003

© Altuğ B. Altıntaş 2003 Java ve Yazılım Tasarımı - Bölüm 6 11

Cevap

• Uygulama içerisinde herhangi bir nesneye ait normal biryordam (final olmayan) çağrıldığında :– Java, acaba doğru nesnenin uygun yordamımı

çağrılıyor diye bir kontrol yapar.

• Daha doğrusu geç bağlamaya (late-binding) ihtiyaç varmı kontrolü yapılır.

Page 12: Polimorfizm - TD Software€¢ Eski Yunanca bir sözcük olup "bir çok şekil" anlamına gelmektedir . • Polimorfizm ile kalıtım konusu iç içedir. © Altuğ B. Altıntaş2003

© Altuğ B. Altıntaş 2003 Java ve Yazılım Tasarımı - Bölüm 6 12

Örnek

KediKaplan.java (on)

KediKaplan2.java (off)

Page 13: Polimorfizm - TD Software€¢ Eski Yunanca bir sözcük olup "bir çok şekil" anlamına gelmektedir . • Polimorfizm ile kalıtım konusu iç içedir. © Altuğ B. Altıntaş2003

© Altuğ B. Altıntaş 2003 Java ve Yazılım Tasarımı - Bölüm 6 13

Neden Polimorfizm ?

• Polimorfizm olmasaydı neler olurdu ?

IsYeriNon.java

Page 14: Polimorfizm - TD Software€¢ Eski Yunanca bir sözcük olup "bir çok şekil" anlamına gelmektedir . • Polimorfizm ile kalıtım konusu iç içedir. © Altuğ B. Altıntaş2003

© Altuğ B. Altıntaş 2003 Java ve Yazılım Tasarımı - Bölüm 6 14

Page 15: Polimorfizm - TD Software€¢ Eski Yunanca bir sözcük olup "bir çok şekil" anlamına gelmektedir . • Polimorfizm ile kalıtım konusu iç içedir. © Altuğ B. Altıntaş2003

© Altuğ B. Altıntaş 2003 Java ve Yazılım Tasarımı - Bölüm 6 15

Neden Polimorfizm ?

• IsYeriNon.java örneğimizi nesneye yönelikprogramlama çerçevesinde tekrar yazarsak :

IsYeri.java

Page 16: Polimorfizm - TD Software€¢ Eski Yunanca bir sözcük olup "bir çok şekil" anlamına gelmektedir . • Polimorfizm ile kalıtım konusu iç içedir. © Altuğ B. Altıntaş2003

© Altuğ B. Altıntaş 2003 Java ve Yazılım Tasarımı - Bölüm 6 16

Nesnelerden oluşan bir dizi

Page 17: Polimorfizm - TD Software€¢ Eski Yunanca bir sözcük olup "bir çok şekil" anlamına gelmektedir . • Polimorfizm ile kalıtım konusu iç içedir. © Altuğ B. Altıntaş2003

© Altuğ B. Altıntaş 2003 Java ve Yazılım Tasarımı - Bölüm 6 17

Genişletilebilirlik (Extensibility)

• Genişletilebilirlik, mevcut kalıtımsal hiyerarşiyi genişletmektir.

• Polimorfizm özelliği sayesinde genişletebilirlikçok basite indirgenmiş bulunmaktadır .

Page 18: Polimorfizm - TD Software€¢ Eski Yunanca bir sözcük olup "bir çok şekil" anlamına gelmektedir . • Polimorfizm ile kalıtım konusu iç içedir. © Altuğ B. Altıntaş2003

© Altuğ B. Altıntaş 2003 Java ve Yazılım Tasarımı - Bölüm 6 18

Sınıf hiyerarşisi – IsYeri.java

Page 19: Polimorfizm - TD Software€¢ Eski Yunanca bir sözcük olup "bir çok şekil" anlamına gelmektedir . • Polimorfizm ile kalıtım konusu iç içedir. © Altuğ B. Altıntaş2003

© Altuğ B. Altıntaş 2003 Java ve Yazılım Tasarımı - Bölüm 6 19

Sınıf hiyerarşisi – BuyukIsYeri.java

Page 20: Polimorfizm - TD Software€¢ Eski Yunanca bir sözcük olup "bir çok şekil" anlamına gelmektedir . • Polimorfizm ile kalıtım konusu iç içedir. © Altuğ B. Altıntaş2003

© Altuğ B. Altıntaş 2003 Java ve Yazılım Tasarımı - Bölüm 6 20

Genişletilebilirlik (Extensibility)-2

• Polimorfizm sayesinde, mevcut hiyerarşik yapı ne kadar genişletilirse genişletilsin, yordam (method) çağırma yapısı hep aynı kalır.

BuyukIsyeri.java

Page 21: Polimorfizm - TD Software€¢ Eski Yunanca bir sözcük olup "bir çok şekil" anlamına gelmektedir . • Polimorfizm ile kalıtım konusu iç içedir. © Altuğ B. Altıntaş2003

© Altuğ B. Altıntaş 2003 Java ve Yazılım Tasarımı - Bölüm 6 21

Soyut sınıflar ve Yordamlarlar(Abstract Classes and Methods )

Page 22: Polimorfizm - TD Software€¢ Eski Yunanca bir sözcük olup "bir çok şekil" anlamına gelmektedir . • Polimorfizm ile kalıtım konusu iç içedir. © Altuğ B. Altıntaş2003

© Altuğ B. Altıntaş 2003 Java ve Yazılım Tasarımı - Bölüm 6 22

Page 23: Polimorfizm - TD Software€¢ Eski Yunanca bir sözcük olup "bir çok şekil" anlamına gelmektedir . • Polimorfizm ile kalıtım konusu iç içedir. © Altuğ B. Altıntaş2003

© Altuğ B. Altıntaş 2003 Java ve Yazılım Tasarımı - Bölüm 6 23

Örnek

BuyukIsyeri.java

Page 24: Polimorfizm - TD Software€¢ Eski Yunanca bir sözcük olup "bir çok şekil" anlamına gelmektedir . • Polimorfizm ile kalıtım konusu iç içedir. © Altuğ B. Altıntaş2003

© Altuğ B. Altıntaş 2003 Java ve Yazılım Tasarımı - Bölüm 6 24

class Calisan { public String pozisyon = "Calisan"; public void calis() {}

}

Page 25: Polimorfizm - TD Software€¢ Eski Yunanca bir sözcük olup "bir çok şekil" anlamına gelmektedir . • Polimorfizm ile kalıtım konusu iç içedir. © Altuğ B. Altıntaş2003

© Altuğ B. Altıntaş 2003 Java ve Yazılım Tasarımı - Bölüm 6 25

Soyut Sınıflar (Abstract classes)

• Soyut sınıfların içerisinde en az bir tane gövdesiz (soyut) yordam bulunur.

• Soyut sınıfları direk new() anahtar kelimesi ile oluşturamayız.

Page 26: Polimorfizm - TD Software€¢ Eski Yunanca bir sözcük olup "bir çok şekil" anlamına gelmektedir . • Polimorfizm ile kalıtım konusu iç içedir. © Altuğ B. Altıntaş2003

© Altuğ B. Altıntaş 2003 Java ve Yazılım Tasarımı - Bölüm 6 26

abstract void calis(); // gövdesi olmayan soyut yordam

Page 27: Polimorfizm - TD Software€¢ Eski Yunanca bir sözcük olup "bir çok şekil" anlamına gelmektedir . • Polimorfizm ile kalıtım konusu iç içedir. © Altuğ B. Altıntaş2003

© Altuğ B. Altıntaş 2003 Java ve Yazılım Tasarımı - Bölüm 6 27

Page 28: Polimorfizm - TD Software€¢ Eski Yunanca bir sözcük olup "bir çok şekil" anlamına gelmektedir . • Polimorfizm ile kalıtım konusu iç içedir. © Altuğ B. Altıntaş2003

© Altuğ B. Altıntaş 2003 Java ve Yazılım Tasarımı - Bölüm 6 28

Örnek

AbIsYeri.java

Page 29: Polimorfizm - TD Software€¢ Eski Yunanca bir sözcük olup "bir çok şekil" anlamına gelmektedir . • Polimorfizm ile kalıtım konusu iç içedir. © Altuğ B. Altıntaş2003

© Altuğ B. Altıntaş 2003 Java ve Yazılım Tasarımı - Bölüm 6 29

Niye soyut sınıf ve yordamlara ihtiyaç duyarız ?

• Eğer bir işlem değişik verilere ihtiyaç duyup aynıişi yapıyorsa, bu işlem soyut (abstract) sınıflarıniçerisinde tanımlanmalıdır.

Page 30: Polimorfizm - TD Software€¢ Eski Yunanca bir sözcük olup "bir çok şekil" anlamına gelmektedir . • Polimorfizm ile kalıtım konusu iç içedir. © Altuğ B. Altıntaş2003

© Altuğ B. Altıntaş 2003 Java ve Yazılım Tasarımı - Bölüm 6 30

Page 31: Polimorfizm - TD Software€¢ Eski Yunanca bir sözcük olup "bir çok şekil" anlamına gelmektedir . • Polimorfizm ile kalıtım konusu iç içedir. © Altuğ B. Altıntaş2003

© Altuğ B. Altıntaş 2003 Java ve Yazılım Tasarımı - Bölüm 6 31

Örnek

CizimProgrami.java

Page 32: Polimorfizm - TD Software€¢ Eski Yunanca bir sözcük olup "bir çok şekil" anlamına gelmektedir . • Polimorfizm ile kalıtım konusu iç içedir. © Altuğ B. Altıntaş2003

© Altuğ B. Altıntaş 2003 Java ve Yazılım Tasarımı - Bölüm 6 32

Yapılandırıcılar içerisindeki ilginç durumlar...

Spor.java

Page 33: Polimorfizm - TD Software€¢ Eski Yunanca bir sözcük olup "bir çok şekil" anlamına gelmektedir . • Polimorfizm ile kalıtım konusu iç içedir. © Altuğ B. Altıntaş2003

© Altuğ B. Altıntaş 2003 Java ve Yazılım Tasarımı - Bölüm 6 33

Ekran Çıktısı

calis() cagrilmadan evvelFutbolcu calis() 0 dikkatcalis() cagrildiktan sonraFutbolcu yapilandiriciFutbolcu calis() 4

Page 34: Polimorfizm - TD Software€¢ Eski Yunanca bir sözcük olup "bir çok şekil" anlamına gelmektedir . • Polimorfizm ile kalıtım konusu iç içedir. © Altuğ B. Altıntaş2003

© Altuğ B. Altıntaş 2003 Java ve Yazılım Tasarımı - Bölüm 6 34

Page 35: Polimorfizm - TD Software€¢ Eski Yunanca bir sözcük olup "bir çok şekil" anlamına gelmektedir . • Polimorfizm ile kalıtım konusu iç içedir. © Altuğ B. Altıntaş2003

© Altuğ B. Altıntaş 2003 Java ve Yazılım Tasarımı - Bölüm 6 35

Örnek

Televizyon.java

Page 36: Polimorfizm - TD Software€¢ Eski Yunanca bir sözcük olup "bir çok şekil" anlamına gelmektedir . • Polimorfizm ile kalıtım konusu iç içedir. © Altuğ B. Altıntaş2003

© Altuğ B. Altıntaş 2003 Java ve Yazılım Tasarımı - Bölüm 6 36

Page 37: Polimorfizm - TD Software€¢ Eski Yunanca bir sözcük olup "bir çok şekil" anlamına gelmektedir . • Polimorfizm ile kalıtım konusu iç içedir. © Altuğ B. Altıntaş2003

© Altuğ B. Altıntaş 2003 Java ve Yazılım Tasarımı - Bölüm 6 37

Aşağıya Çevirim (Downcasting)

• Aşağıya çevirim tehlikelidir.– Daha genel bir tipden daha özellikli bir tipe

doğru çevirim vardır.– Yanlış bir çevirim yapıldığında, çalışma

anından (run-time) istisna (exception) fırlatılır.

Televizyon2.java

Page 38: Polimorfizm - TD Software€¢ Eski Yunanca bir sözcük olup "bir çok şekil" anlamına gelmektedir . • Polimorfizm ile kalıtım konusu iç içedir. © Altuğ B. Altıntaş2003

© Altuğ B. Altıntaş 2003 Java ve Yazılım Tasarımı - Bölüm 6 38

Sınıf tiplerinin çalışma anından tanımlanması (RTTI : Run Time Type Identification)

Televizyon3.java

Page 39: Polimorfizm - TD Software€¢ Eski Yunanca bir sözcük olup "bir çok şekil" anlamına gelmektedir . • Polimorfizm ile kalıtım konusu iç içedir. © Altuğ B. Altıntaş2003

© Altuğ B. Altıntaş 2003 Java ve Yazılım Tasarımı - Bölüm 6 39

Sorular ...