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ındışında alanlar da bulunabilir. Bu alanlar, diğer uygulamalarda sabit olarak kullanılabilir. Arayüzün içerisinde tanımlanan bir alan (ilkel tipteveyası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 soyut_1 = new A(); Arayuz1 arayuz_1 = (Arayuz1) soyut_1; // tip degisimi Arayuz2 arayuz_2 = (Arayuz2) soyut_1; // tip degisimi Altuğ B. Altıntaş 2003 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