arayüz - wordpress.com© altuğ b. altıntaş2003 java ve yazılım tasarımı - bölüm 7 2...

Post on 27-Feb-2021

5 Views

Category:

Documents

0 Downloads

Preview:

Click to see full reader

TRANSCRIPT

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

Arayüz(Interface)

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

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

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

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

Örnek

BuyukIsYeri.java

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

}}

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

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

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

Örnek

Karisim2.java

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

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

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

Örnek - Hatalı

Spor.java

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

© 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

© 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

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

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

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

}

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

Örnek

Jaguar.java

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

© 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

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

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

Örnek

AyBul.java

© 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

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

© 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

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

//......}

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

© 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

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

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

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

}

//...}

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

Örnek

Hesaplama.java

© 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

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

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

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

Örnek

YarisArabasi.java

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

© 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

© 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

© 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

© 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

© 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

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

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

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

Örnek

TuretilmisSinif.java

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

Sorular ...

top related