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

Post on 06-May-2018

224 Views

Category:

Documents

4 Downloads

Preview:

Click to see full reader

Transcript

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

Polimorfizm

© 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.

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

Örnek

PolimorfizmOrnekBir.java

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

Asker

Er Yuzbasi

© 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();

© 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

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

© 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

© 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).

© 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 .

© 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.

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

Örnek

KediKaplan.java (on)

KediKaplan2.java (off)

© 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

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

© 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

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

Nesnelerden oluşan bir dizi

© 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 .

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

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

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

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

© 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

© 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 )

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

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

Örnek

BuyukIsyeri.java

© 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() {}

}

© 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.

© 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

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

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

Örnek

AbIsYeri.java

© 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.

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

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

Örnek

CizimProgrami.java

© 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

© 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

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

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

Örnek

Televizyon.java

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

© 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

© 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

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

Sorular ...

top related