47
© Altuğ B. Altıntaş 2003 Java ve Yazılım Tasarımı - Bölüm 7 1 Arayüz (Interface)

Arayüz - WordPress.com© Altuğ B. Altıntaş2003 Java ve Yazılım Tasarımı - Bölüm 7 2 Arayüz(Interface) • Arayüzler, soyut sınıfların bir üst modeli gibi düşünülebilir

  • Upload
    others

  • View
    5

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Arayüz - WordPress.com© Altuğ B. Altıntaş2003 Java ve Yazılım Tasarımı - Bölüm 7 2 Arayüz(Interface) • Arayüzler, soyut sınıfların bir üst modeli gibi düşünülebilir

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

Arayüz(Interface)

Page 2: Arayüz - WordPress.com© Altuğ B. Altıntaş2003 Java ve Yazılım Tasarımı - Bölüm 7 2 Arayüz(Interface) • Arayüzler, soyut sınıfların bir üst modeli gibi düşünülebilir

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

Arayüz (Interface)

• Arayüzler, soyut sınıfların bir üst modeli gibi düşünülebilir.

• Arayüzler tamamen birleştirici bir roloynamaları için tasarlanmışlardır.

Page 3: Arayüz - WordPress.com© Altuğ B. Altıntaş2003 Java ve Yazılım Tasarımı - Bölüm 7 2 Arayüz(Interface) • Arayüzler, soyut sınıfların bir üst modeli gibi düşünülebilir

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

Arayüz (Interface)

• Arayüzlerin içerisindeki gövdesiz (soyut) yordamlar (methods) otomatik olarak public erişim belirleyicisine sahip olurlar.

Page 4: Arayüz - WordPress.com© Altuğ B. Altıntaş2003 Java ve Yazılım Tasarımı - Bölüm 7 2 Arayüz(Interface) • Arayüzler, soyut sınıfların bir üst modeli gibi düşünülebilir

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

Page 5: Arayüz - WordPress.com© Altuğ B. Altıntaş2003 Java ve Yazılım Tasarımı - Bölüm 7 2 Arayüz(Interface) • Arayüzler, soyut sınıfların bir üst modeli gibi düşünülebilir

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

Örnek

BuyukIsYeri.java

Page 6: Arayüz - WordPress.com© Altuğ B. Altıntaş2003 Java ve Yazılım Tasarımı - Bölüm 7 2 Arayüz(Interface) • Arayüzler, soyut sınıfların bir üst modeli gibi düşünülebilir

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

class Mudur implements Calisan {public void calis() { // iptal etti (override) System.out.println("Mudur Calisiyor");

}}

Page 7: Arayüz - WordPress.com© Altuğ B. Altıntaş2003 Java ve Yazılım Tasarımı - Bölüm 7 2 Arayüz(Interface) • Arayüzler, soyut sınıfların bir üst modeli gibi düşünülebilir

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

Arayüz(Interface) ve Soyut sınıflar(Abstract classes)

interface Hayvan {public void avlan() ;

}

abstract class Kedi implements Hayvan {

}

Bu örnek derlenir mi ?

Page 8: Arayüz - WordPress.com© Altuğ B. Altıntaş2003 Java ve Yazılım Tasarımı - Bölüm 7 2 Arayüz(Interface) • Arayüzler, soyut sınıfların bir üst modeli gibi düşünülebilir

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

Page 9: Arayüz - WordPress.com© Altuğ B. Altıntaş2003 Java ve Yazılım Tasarımı - Bölüm 7 2 Arayüz(Interface) • Arayüzler, soyut sınıfların bir üst modeli gibi düşünülebilir

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

Örnek

Karisim2.java

Page 10: Arayüz - WordPress.com© Altuğ B. Altıntaş2003 Java ve Yazılım Tasarımı - Bölüm 7 2 Arayüz(Interface) • Arayüzler, soyut sınıfların bir üst modeli gibi düşünülebilir

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

Arayüz(Interface) ile çoklu kalıtım(Multiple inheritance)

• Java Programlama dili çoklu kalıtımı (multiple inheritance) desteklemez.

Page 11: Arayüz - WordPress.com© Altuğ B. Altıntaş2003 Java ve Yazılım Tasarımı - Bölüm 7 2 Arayüz(Interface) • Arayüzler, soyut sınıfların bir üst modeli gibi düşünülebilir

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

Page 12: Arayüz - WordPress.com© Altuğ B. Altıntaş2003 Java ve Yazılım Tasarımı - Bölüm 7 2 Arayüz(Interface) • Arayüzler, soyut sınıfların bir üst modeli gibi düşünülebilir

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

Örnek - Hatalı

Spor.java

Page 13: Arayüz - WordPress.com© Altuğ B. Altıntaş2003 Java ve Yazılım Tasarımı - Bölüm 7 2 Arayüz(Interface) • Arayüzler, soyut sınıfların bir üst modeli gibi düşünülebilir

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

Sebep

Sporcu s = new SportmenMehmet(); // yukari cevirims.calis(); // ??

Page 14: Arayüz - WordPress.com© Altuğ B. Altıntaş2003 Java ve Yazılım Tasarımı - Bölüm 7 2 Arayüz(Interface) • Arayüzler, soyut sınıfların bir üst modeli gibi düşünülebilir

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

Arayüz (Interface) ile çoklu kalıtıma destek

Page 15: Arayüz - WordPress.com© Altuğ B. Altıntaş2003 Java ve Yazılım Tasarımı - Bölüm 7 2 Arayüz(Interface) • Arayüzler, soyut sınıfların bir üst modeli gibi düşünülebilir

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

Örnek

• SportmenMehmet belki hem BuzPatencihem de Basketbolcu olamayabilir ama bunlara ait özellikleri alabilir.

Spor2.java

Page 16: Arayüz - WordPress.com© Altuğ B. Altıntaş2003 Java ve Yazılım Tasarımı - Bölüm 7 2 Arayüz(Interface) • Arayüzler, soyut sınıfların bir üst modeli gibi düşünülebilir

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

Arayüzlerin kalıtım (inheritance) yoluyla genişletilmesi

• Bir arayüz başka bir arayüzündentüretilebilir.

• Böylece arayüzler kalıtım yoluylagenişletilmiş olur.

Page 17: Arayüz - WordPress.com© Altuğ B. Altıntaş2003 Java ve Yazılım Tasarımı - Bölüm 7 2 Arayüz(Interface) • Arayüzler, soyut sınıfların bir üst modeli gibi düşünülebilir

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

Page 18: Arayüz - WordPress.com© Altuğ B. Altıntaş2003 Java ve Yazılım Tasarımı - Bölüm 7 2 Arayüz(Interface) • Arayüzler, soyut sınıfların bir üst modeli gibi düşünülebilir

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

Yakından bakılırsı

interface Avlanabilme extends DahaHizliKosabilme,Kosabilme {//..

}

Page 19: Arayüz - WordPress.com© Altuğ B. Altıntaş2003 Java ve Yazılım Tasarımı - Bölüm 7 2 Arayüz(Interface) • Arayüzler, soyut sınıfların bir üst modeli gibi düşünülebilir

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

Örnek

Jaguar.java

Page 20: Arayüz - WordPress.com© Altuğ B. Altıntaş2003 Java ve Yazılım Tasarımı - Bölüm 7 2 Arayüz(Interface) • Arayüzler, soyut sınıfların bir üst modeli gibi düşünülebilir

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

Çakışmalar

• Arayüzlerin içerisinde dönüş tipleriharicinde herşeyleri aynı olan gövdesiz(soyut) yordamlar varsa bu durum beklenmedik sorunlara yol açabilir.

Cakisma.java (derlemeye çalışılırsa...)

Page 21: Arayüz - WordPress.com© Altuğ B. Altıntaş2003 Java ve Yazılım Tasarımı - Bölüm 7 2 Arayüz(Interface) • Arayüzler, soyut sınıfların bir üst modeli gibi düşünülebilir

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

public void hesapla(); // A1 arayüzüne ait

public int hesapla(); // A3 arayüzüne ait

Page 22: Arayüz - WordPress.com© Altuğ B. Altıntaş2003 Java ve Yazılım Tasarımı - Bölüm 7 2 Arayüz(Interface) • Arayüzler, soyut sınıfların bir üst modeli gibi düşünülebilir

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

Arayüzün(Interface) içerisinde alan tanımlama

• Arayüzlerin içerisinde gövdesiz (soyut) yordamların dışında alanlar da bulunabilir.

• Bu alanlar, diğer uygulamalarda sabit olarakkullanılabilir.

• Arayüzün içerisinde tanımlanan bir alan (ilkeltipte veya sınıf tipinde olsun) otomatik olarak hem public erişim belirleyicisine hem de final ve static özelliğine sahip olur.

Page 23: Arayüz - WordPress.com© Altuğ B. Altıntaş2003 Java ve Yazılım Tasarımı - Bölüm 7 2 Arayüz(Interface) • Arayüzler, soyut sınıfların bir üst modeli gibi düşünülebilir

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

Örnek

AyBul.java

Page 24: Arayüz - WordPress.com© Altuğ B. Altıntaş2003 Java ve Yazılım Tasarımı - Bölüm 7 2 Arayüz(Interface) • Arayüzler, soyut sınıfların bir üst modeli gibi düşünülebilir

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

Arayüzün içerisinde tanımlanmış alanlara ilk değerlerinin verilmesi

• Arayüzlerin içerisinde tanımlanmışalanların ilk değerleri, çalışma anında (run-time) da verilebilir.

Test.java

Page 25: Arayüz - WordPress.com© Altuğ B. Altıntaş2003 Java ve Yazılım Tasarımı - Bölüm 7 2 Arayüz(Interface) • Arayüzler, soyut sınıfların bir üst modeli gibi düşünülebilir

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

Genel Bakış

• Arayüzler (interface) ve soyut (abstract) sınıfların bizlere sağlamak istedigifayda nedir ?

Page 26: Arayüz - WordPress.com© Altuğ B. Altıntaş2003 Java ve Yazılım Tasarımı - Bölüm 7 2 Arayüz(Interface) • Arayüzler, soyut sınıfların bir üst modeli gibi düşünülebilir

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

Genel Bakış

• Aslında ulaşılmak istenen amaç çokluyukarı çevirimdir (upcasting).

GenelBakis.java

Page 27: Arayüz - WordPress.com© Altuğ B. Altıntaş2003 Java ve Yazılım Tasarımı - Bölüm 7 2 Arayüz(Interface) • Arayüzler, soyut sınıfların bir üst modeli gibi düşünülebilir

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

Yakından bakarsak

class A extends Soyut1 implements Arayuz1, Arayuz2 {

//......}

Page 28: Arayüz - WordPress.com© Altuğ B. Altıntaş2003 Java ve Yazılım Tasarımı - Bölüm 7 2 Arayüz(Interface) • Arayüzler, soyut sınıfların bir üst modeli gibi düşünülebilir

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

Page 29: Arayüz - WordPress.com© Altuğ B. Altıntaş2003 Java ve Yazılım Tasarımı - Bölüm 7 2 Arayüz(Interface) • Arayüzler, soyut sınıfların bir üst modeli gibi düşünülebilir

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

Soyut1 soyut_1 = new A();Arayuz1 arayuz_1 = (Arayuz1) soyut_1; // tip degisimiArayuz2 arayuz_2 = (Arayuz2) soyut_1; // tip degisimi

Page 30: Arayüz - WordPress.com© Altuğ B. Altıntaş2003 Java ve Yazılım Tasarımı - Bölüm 7 2 Arayüz(Interface) • Arayüzler, soyut sınıfların bir üst modeli gibi düşünülebilir

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

Veya

Soyut1 soyut_1 = new A();Arayuz1 arayuz_1 = new A();Arayuz2 arayuz_2 = new A();

Page 31: Arayüz - WordPress.com© Altuğ B. Altıntaş2003 Java ve Yazılım Tasarımı - Bölüm 7 2 Arayüz(Interface) • Arayüzler, soyut sınıfların bir üst modeli gibi düşünülebilir

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

Dahili Sınıflar (Inner Classes)

• Dahili üye sınıflar• Yerel sınıflar (Local classes) • İsimsiz sınıflar (Anonymous classes)

Page 32: Arayüz - WordPress.com© Altuğ B. Altıntaş2003 Java ve Yazılım Tasarımı - Bölüm 7 2 Arayüz(Interface) • Arayüzler, soyut sınıfların bir üst modeli gibi düşünülebilir

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

Dahili Üye Sınıflar

class CevreliyiciSinif {

class DahiliSinif {//....

}

//...}

Page 33: Arayüz - WordPress.com© Altuğ B. Altıntaş2003 Java ve Yazılım Tasarımı - Bölüm 7 2 Arayüz(Interface) • Arayüzler, soyut sınıfların bir üst modeli gibi düşünülebilir

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

Örnek

Hesaplama.java

Page 34: Arayüz - WordPress.com© Altuğ B. Altıntaş2003 Java ve Yazılım Tasarımı - Bölüm 7 2 Arayüz(Interface) • Arayüzler, soyut sınıfların bir üst modeli gibi düşünülebilir

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

Dahili Üye Sınıflar ve Erişim

• Dahili üye sınıflara– public– friendly– protected– privateerişim belirleyicileri atanabilir.

Hesaplama1.java

Hesaplama2Kullan.java

Page 35: Arayüz - WordPress.com© Altuğ B. Altıntaş2003 Java ve Yazılım Tasarımı - Bölüm 7 2 Arayüz(Interface) • Arayüzler, soyut sınıfların bir üst modeli gibi düşünülebilir

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

Türetilebilen Dahili Üye Sınıflar

• Dahili üye sınıflar, aynı normal sınıflar gibi başka sınıflardan türetilebilirler.

• Böylece çoklu kalıtım desteğinin bir benzerini (güvenli), Java programlama dilinde de bulabiliriz.

Page 36: Arayüz - WordPress.com© Altuğ B. Altıntaş2003 Java ve Yazılım Tasarımı - Bölüm 7 2 Arayüz(Interface) • Arayüzler, soyut sınıfların bir üst modeli gibi düşünülebilir

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

Page 37: Arayüz - WordPress.com© Altuğ B. Altıntaş2003 Java ve Yazılım Tasarımı - Bölüm 7 2 Arayüz(Interface) • Arayüzler, soyut sınıfların bir üst modeli gibi düşünülebilir

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

Örnek

YarisArabasi.java

Page 38: Arayüz - WordPress.com© Altuğ B. Altıntaş2003 Java ve Yazılım Tasarımı - Bölüm 7 2 Arayüz(Interface) • Arayüzler, soyut sınıfların bir üst modeli gibi düşünülebilir

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

Yerel Sınıflar (Local Classes)

• Yerel sınıflar– Yapılandırıcıların (constructor)– Sınıf yordamlarının (statik yordam)– Nesne yordamlarının– Statik alanlara toplu değer vermek için kullandığımız

statik bloğun – Statik olmayan alanlara toplu değer vermek için

kullandığımız bloğun içerisinde tanımlanabilir.

Page 39: Arayüz - WordPress.com© Altuğ B. Altıntaş2003 Java ve Yazılım Tasarımı - Bölüm 7 2 Arayüz(Interface) • Arayüzler, soyut sınıfların bir üst modeli gibi düşünülebilir

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

public class Sinif { public void yordam() {

public class YerelSinif { //...

} }

}

Yerel Sınıflar

Page 40: Arayüz - WordPress.com© Altuğ B. Altıntaş2003 Java ve Yazılım Tasarımı - Bölüm 7 2 Arayüz(Interface) • Arayüzler, soyut sınıfların bir üst modeli gibi düşünülebilir

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

Yerel sınıflara ait ilk özellikler

• Yerel sınıflar tanımlandıkları yordamın veya bloğun dışından erişilemezler.

• Yerel sınıflar başka sınıflardan türetilebilir veya arayüzlere (interface) erişebilir.

• Yerel sınıfların yapılandırıcıları olabilir.

Hesaplama6.java

Page 41: Arayüz - WordPress.com© Altuğ B. Altıntaş2003 Java ve Yazılım Tasarımı - Bölüm 7 2 Arayüz(Interface) • Arayüzler, soyut sınıfların bir üst modeli gibi düşünülebilir

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

Yerel Sınıflara Ait İlk Özellikler - Devam

• Yerel sınıflar, içinde bulundukları yordamın sadece final olan değişkenlerine ulaşabilirler.

• Yerel sınıflar, statik veya statik olmayanyordamların içerisinde tanımlanabilirler.

• Yerel sınıflar, private, protected ve public erişim belirleyicisine sahip olamazlar sadece friendly erişim belirleyicisine sahip olabilirler.

• Yerel sınıflar, statik olarak tanımlanamaz.Hesaplama7.java

Page 42: Arayüz - WordPress.com© Altuğ B. Altıntaş2003 Java ve Yazılım Tasarımı - Bölüm 7 2 Arayüz(Interface) • Arayüzler, soyut sınıfların bir üst modeli gibi düşünülebilir

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

İsimsiz Sınıflar (Anonymous Classes)

• Diğer dahili sınıf çeşitlerinde olduğu gibi, isimsiz sınıflar direk extends ve implements anahtar kelimelerini kullanarak diğer sınıflardan türetilemez ve arayüzlere erişemez.

• İsimsiz sınıfların herhangi bir ismi olmadığı için yapılandırıcısı da (constructor) olamaz.

Hesaplama8.java

Page 43: Arayüz - WordPress.com© Altuğ B. Altıntaş2003 Java ve Yazılım Tasarımı - Bölüm 7 2 Arayüz(Interface) • Arayüzler, soyut sınıfların bir üst modeli gibi düşünülebilir

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

Yakından bir bakış

return new Toplayici() { public int hesaplamaYap() {

// final olan yerel degiskenlere ulasabilir. return a + b ; }

}; // noktali virgül sart

Page 44: Arayüz - WordPress.com© Altuğ B. Altıntaş2003 Java ve Yazılım Tasarımı - Bölüm 7 2 Arayüz(Interface) • Arayüzler, soyut sınıfların bir üst modeli gibi düşünülebilir

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

Neden Dahili sınıflar?

• Arayüzler ile çoklu kalıtım (multiple inheritance)desteğini kısmen bulabiliyorduk ama bu tam değildi.

• Dahili sınıfların var olmasındaki neden çoklu kalıtıma tam desteği sağlamaktır.

Page 45: Arayüz - WordPress.com© Altuğ B. Altıntaş2003 Java ve Yazılım Tasarımı - Bölüm 7 2 Arayüz(Interface) • Arayüzler, soyut sınıfların bir üst modeli gibi düşünülebilir

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

Page 46: Arayüz - WordPress.com© Altuğ B. Altıntaş2003 Java ve Yazılım Tasarımı - Bölüm 7 2 Arayüz(Interface) • Arayüzler, soyut sınıfların bir üst modeli gibi düşünülebilir

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

Örnek

TuretilmisSinif.java

Page 47: Arayüz - WordPress.com© Altuğ B. Altıntaş2003 Java ve Yazılım Tasarımı - Bölüm 7 2 Arayüz(Interface) • Arayüzler, soyut sınıfların bir üst modeli gibi düşünülebilir

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

Sorular ...