Arayüz - TD Software

advertisement
Arayüz
(Interface)
© Altuğ B. Altıntaş 2003
Java ve Yazılım Tasarımı - Bölüm 7
1
Arayüz (Interface)
• Arayüzler, soyut sınıfların bir üst modeli
gibi düşünülebilir.
• Arayüzler tamamen birleştirici bir rol
oynamaları için tasarlanmışlardır.
© Altuğ B. Altıntaş 2003
Java ve Yazılım Tasarımı - Bölüm 7
2
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
3
© Altuğ B. Altıntaş 2003
Java ve Yazılım Tasarımı - Bölüm 7
4
Örnek
BuyukIsYeri.java
© Altuğ B. Altıntaş 2003
Java ve Yazılım Tasarımı - Bölüm 7
5
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
6
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
7
© Altuğ B. Altıntaş 2003
Java ve Yazılım Tasarımı - Bölüm 7
8
Örnek
Karisim2.java
© Altuğ B. Altıntaş 2003
Java ve Yazılım Tasarımı - Bölüm 7
9
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
10
© Altuğ B. Altıntaş 2003
Java ve Yazılım Tasarımı - Bölüm 7
11
Örnek - Hatalı
Spor.java
© Altuğ B. Altıntaş 2003
Java ve Yazılım Tasarımı - Bölüm 7
12
Sebep
Sporcu s = new SportmenMehmet(); // yukari cevirim
s.calis(); // ??
© Altuğ B. Altıntaş 2003
Java ve Yazılım Tasarımı - Bölüm 7
13
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
14
Örnek
• SportmenMehmet belki hem BuzPatenci
hem 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
15
Arayüzlerin kalıtım (inheritance) yoluyla genişletilmesi
• Bir arayüz başka bir arayüzünden
türetilebilir.
• Böylece arayüzler kalıtım yoluyla
genişletilmiş olur.
© Altuğ B. Altıntaş 2003
Java ve Yazılım Tasarımı - Bölüm 7
16
© Altuğ B. Altıntaş 2003
Java ve Yazılım Tasarımı - Bölüm 7
17
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
18
Örnek
Jaguar.java
© Altuğ B. Altıntaş 2003
Java ve Yazılım Tasarımı - Bölüm 7
19
Çakışmalar
• Arayüzlerin içerisinde dönüş tipleri
haricinde 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
20
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
21
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 olarak
kullanılabilir.
• Arayüzün içerisinde tanımlanan bir alan (ilkel
tipte 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
22
Örnek
AyBul.java
© Altuğ B. Altıntaş 2003
Java ve Yazılım Tasarımı - Bölüm 7
23
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 (runtime) da verilebilir.
Test.java
© Altuğ B. Altıntaş 2003
Java ve Yazılım Tasarımı - Bölüm 7
24
Genel Bakış
• Arayüzler (interface) ve soyut (abstract)
sınıfların bizlere sağlamak istedigi
fayda nedir ?
© Altuğ B. Altıntaş 2003
Java ve Yazılım Tasarımı - Bölüm 7
25
Genel Bakış
• Aslında ulaşılmak istenen amaç çoklu
yukarı çevirimdir (upcasting).
GenelBakis.java
© Altuğ B. Altıntaş 2003
Java ve Yazılım Tasarımı - Bölüm 7
26
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
27
© Altuğ B. Altıntaş 2003
Java ve Yazılım Tasarımı - Bölüm 7
28
Soyut1
Arayuz1
Arayuz2
soyut_1
arayuz_1
arayuz_2
© Altuğ B. Altıntaş 2003
=
=
=
new A();
(Arayuz1) soyut_1; // tip degisimi
(Arayuz2) soyut_1; // tip degisimi
Java ve Yazılım Tasarımı - Bölüm 7
29
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
30
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
31
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
32
Örnek
Hesaplama.java
© Altuğ B. Altıntaş 2003
Java ve Yazılım Tasarımı - Bölüm 7
33
Dahili Üye Sınıflar ve Erişim
• Dahili üye sınıflara
– public
– friendly
– protected
– private
erişim belirleyicileri atanabilir.
Hesaplama1.java
Hesaplama2Kullan.java
© Altuğ B. Altıntaş 2003
Java ve Yazılım Tasarımı - Bölüm 7
34
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
35
© Altuğ B. Altıntaş 2003
Java ve Yazılım Tasarımı - Bölüm 7
36
Örnek
YarisArabasi.java
© Altuğ B. Altıntaş 2003
Java ve Yazılım Tasarımı - Bölüm 7
37
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
38
Yerel Sınıflar
public class Sinif {
public void yordam() {
public class YerelSinif {
//...
}
}
}
© Altuğ B. Altıntaş 2003
Java ve Yazılım Tasarımı - Bölüm 7
39
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
40
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 olmayan
yordamları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
41
İ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
42
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
43
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
44
© Altuğ B. Altıntaş 2003
Java ve Yazılım Tasarımı - Bölüm 7
45
Örnek
TuretilmisSinif.java
© Altuğ B. Altıntaş 2003
Java ve Yazılım Tasarımı - Bölüm 7
46
Sorular ...
© Altuğ B. Altıntaş 2003
Java ve Yazılım Tasarımı - Bölüm 7
47
Download