104
Akın Kaldıroğlu www.javaturk.org Ocak 2017 Java ile Nesne Merkezli ve Fonksiyonel Programlama 4. Bölüm Arayüzler (Interfaces) www.selsoft.academy

4. Bölüm Arayüzler (Interfaces) · ØÇünkü Java SE 1.8 ile artık arayüzlerde gerçekleştirme verilebilir! ØDolayısıyla bundan sonra aksi söylenene kadar arayüzleri,

  • Upload
    others

  • View
    3

  • Download
    0

Embed Size (px)

Citation preview

Page 1: 4. Bölüm Arayüzler (Interfaces) · ØÇünkü Java SE 1.8 ile artık arayüzlerde gerçekleştirme verilebilir! ØDolayısıyla bundan sonra aksi söylenene kadar arayüzleri,

Akın Kaldıroğluwww.javaturk.org

Ocak2017

Java ile Nesne Merkezli ve Fonksiyonel Programlama

4. BölümArayüzler

(Interfaces)

www.selso

ft.aca

demy

Page 2: 4. Bölüm Arayüzler (Interfaces) · ØÇünkü Java SE 1.8 ile artık arayüzlerde gerçekleştirme verilebilir! ØDolayısıyla bundan sonra aksi söylenene kadar arayüzleri,

2

Küçük Ama Önemli Bir KonuØ Budosyaveberaberindekitüm,dosya,kod,vb.eğitimmalzemelerinintüm

haklarıSelsoft Yazılım,Danışmanlık,EğitimveTic.Ltd.Şti.’ne aittir.Ø Bueğitimmalzemelerinikişiselbilgilenmevegelişiminizamacıyla

kullanabilirsinizveisteyenlerihttp://www.selsoft.academyadresineyönlendirip,bumalzemelerinengüncelhallerinialmalarınısağlayabilirsiniz.

Ø Yukarıdabahsedilenamaçdışında,bueğitimmalzemelerinin,ticariolsun/olmasınherhangibirşekilde,toplubireğitimfaaliyetindekullanılması,buamacayönelikolsun/olmasınbasılması,dağıtılması,gerçekyadasanal/Internetortamlarındayayınlanmasıyasaktır.Böylebirihtiyaçhalindelütfenbenimle,[email protected]şimegeçin.

Ø Buvebenzerieğitimmalzemelerinekatkıdabulunmakyadadüzeltmeveeleştirilerinizibanailetmekistersenizçoksevinirim.

Ø BolJava’lıgünlerdilerim.

www.selsoft.academywww.se

lsoft.a

cadem

y

Page 3: 4. Bölüm Arayüzler (Interfaces) · ØÇünkü Java SE 1.8 ile artık arayüzlerde gerçekleştirme verilebilir! ØDolayısıyla bundan sonra aksi söylenene kadar arayüzleri,

İçerikØBubölümde şu konular ele alınacaktır:

ØArayüz (interface)tipi,

ØArayüzlerin gerçeklenmesi,

ØYazılımtasarımındaarayüzlerin kullanımı,

Ø JavaSE8ile gelen yeniliklerve

ØGeriçağırmametotları(callbackmethods)veisimsizsınıflar(anonymousclasses)

3www.selsoft.academy

www.selso

ft.aca

demy

Page 4: 4. Bölüm Arayüzler (Interfaces) · ØÇünkü Java SE 1.8 ile artık arayüzlerde gerçekleştirme verilebilir! ØDolayısıyla bundan sonra aksi söylenene kadar arayüzleri,

4www.javaturk.org

Tanımlar

www.selso

ft.aca

demy

Page 5: 4. Bölüm Arayüzler (Interfaces) · ØÇünkü Java SE 1.8 ile artık arayüzlerde gerçekleştirme verilebilir! ØDolayısıyla bundan sonra aksi söylenene kadar arayüzleri,

Interface- Arayüz Nedir?Ø İki şeyin birbirleriyle iletişimde bulundukları ortama arayüz(yadaarabirim)(interface)denir.

ØÖrneğin dil (language),yüz, mimikler, hareketler ve tavırlarinsanlar arası iletişimin ortamıdır,yani insanlarınarayüzüdür.

ØYazılımınnesneleridebirbirleriylearayüzleriüzerindeniletişimdebulunurlar.

5www.javaturk.org

www.selso

ft.aca

demy

Page 6: 4. Bölüm Arayüzler (Interfaces) · ØÇünkü Java SE 1.8 ile artık arayüzlerde gerçekleştirme verilebilir! ØDolayısıyla bundan sonra aksi söylenene kadar arayüzleri,

İmzaveArayüz(Tekrar)ØBirmetotun,isimveparametrelistesindenoluşanbilgisineimza (signature)denir.ØDönüşdeğerivefırlatılansıradışıdurumlarimzayadahildeğildir.

ØBirmetotun,isim,parametrelistesi,dönüşdeğeritipivefırlattığısıradışıdurumlardanoluşanbilgisinearayüz(interface)denir.

6www.selsoft.academy

<niteleyici>* <dönüş tipi> <isim>(<Parametre>*) throws <exception>*

public double squared(double arg) throws IllegalArgumentException

public double squared(double arg) throws IllegalArgumentException

imza (signature) arayüz(interface)www.selso

ft.aca

demy

Page 7: 4. Bölüm Arayüzler (Interfaces) · ØÇünkü Java SE 1.8 ile artık arayüzlerde gerçekleştirme verilebilir! ØDolayısıyla bundan sonra aksi söylenene kadar arayüzleri,

MetotArayüzüØMetotarayüzü,ometodunneyaptığınıifadeedenbilgisidir.

ØArayüz,metodungörevininasılyaptığınıgösterengerçekleştirmesi(implementation)ilebirliktemetodunikiparçasındanbirisidir.

ØGerekirsearayüzbilgisidokümantasyoniledesteklenir.

7www.javaturk.org

/**

* Method that calculates the square of a double parameter.* @param Parameter whose square to be calculated.* @return Square of the parameter passed.* @throws IllegalArgumentException Thrown when a negative argument supplied.*/

public double squared(double arg) throws IllegalArgumentException{if(arg < 0)

throw new IllegalArgumentException(“Negative argument.”);else

return Math.sqrt(arg);}

www.selso

ft.aca

demy

Page 8: 4. Bölüm Arayüzler (Interfaces) · ØÇünkü Java SE 1.8 ile artık arayüzlerde gerçekleştirme verilebilir! ØDolayısıyla bundan sonra aksi söylenene kadar arayüzleri,

NesneninArayüzü(Tekrar)ØBirnesneninsahipolduğumetotarayüzlerinintamamına,onesneninarayüzüdenir.

ØDolayısıylanesnearayüzü,nesneninsınıfındatanımlananmetotarayüzlerinintoplamıdır.

8www.selsoft.academy

www.selso

ft.aca

demy

Page 9: 4. Bölüm Arayüzler (Interfaces) · ØÇünkü Java SE 1.8 ile artık arayüzlerde gerçekleştirme verilebilir! ØDolayısıyla bundan sonra aksi söylenene kadar arayüzleri,

9www.javaturk.org

Arayüz (Interface)

www.selso

ft.aca

demy

Page 10: 4. Bölüm Arayüzler (Interfaces) · ØÇünkü Java SE 1.8 ile artık arayüzlerde gerçekleştirme verilebilir! ØDolayısıyla bundan sonra aksi söylenene kadar arayüzleri,

Interface– Arayüz- IØArayüz (interface),enkısatanımıyla,tümmetotlarısoyutolansınıftır.

ØArayüzlertanımlanırkeninterfaceanahtarkelimesikullanılır.

ØArayüzlerinmetotlarıotomatikolarakhempublic hemdeabstract olur.

ØAşağıdakitanımlarbirbirlerineeşittirler.

10www.javaturk.org

public interface Worker{

public abstract void work();}

public interface Worker{

void work();} www.se

lsoft.a

cadem

y

Page 11: 4. Bölüm Arayüzler (Interfaces) · ØÇünkü Java SE 1.8 ile artık arayüzlerde gerçekleştirme verilebilir! ØDolayısıyla bundan sonra aksi söylenene kadar arayüzleri,

Interface– Arayüz- IIØArayüz (interface)sadecearayüzsağlar,nedurumnedegerçekleştirmesağlamaz.ØBubirbeyazyalandır,dolayısıylaenazındanbunuşimdilikböylekabuledelim.

ØÇünküJavaSE1.8ileartıkarayüzlerde gerçekleştirmeverilebilir!

ØDolayısıylabundansonraaksisöylenenekadararayüzleri,JavaSE1.8ilegelenyeniliklerigözönünealmadan,halaJavaSE1.7sürümündeolduğugibiişleyeceğiz.

ØYaniarayüzlerdeherhangibirgerçekleştirmeolamayacağınıfarzedeceğiz.

11www.javaturk.org

www.selso

ft.aca

demy

Page 12: 4. Bölüm Arayüzler (Interfaces) · ØÇünkü Java SE 1.8 ile artık arayüzlerde gerçekleştirme verilebilir! ØDolayısıyla bundan sonra aksi söylenene kadar arayüzleri,

Interface– Arayüz- IIIØArayüzdeki tümmetotlarabstract olmakzorundadırlar,

ØArayüzünmetotlarınagerçekleştirmeverilemez.

ØBuyüzdenbuyapılarainterface (arayüz)denilmektedir.ØArayüzlerbuanlamdasadeceform – şekil yani“ne’lik”sağlayanyapılardır,içerikyani“nasıl’lık”sağlamazlar.

ØArayüzlerin kurucusu (constructor)yokturvenesnesideoluşturulamaz.

12www.javaturk.org

www.selso

ft.aca

demy

Page 13: 4. Bölüm Arayüzler (Interfaces) · ØÇünkü Java SE 1.8 ile artık arayüzlerde gerçekleştirme verilebilir! ØDolayısıyla bundan sonra aksi söylenene kadar arayüzleri,

Implementing AnInterfaceØBundandolayıbirsınıf,birarayüzünalttipiolurken“implements”anahtarkelimesinikullanır.ØYanibirsınıf,birarayüzüimplementeder(yerinegetiriryadagerçekleştirir).

ØBirarayüzü gerçekleştirmekdemek,metotlarınıoverrideederekonlaragerçekleştirme(implementation)vermekdemektir.

13www.javaturk.org

public interface Worker{void work();

}

public class Employee implements Worker{void work(){ ... }

} public class Boss implements Worker{

void work(){ ... }} w

ww.selso

ft.aca

demy

Page 14: 4. Bölüm Arayüzler (Interfaces) · ØÇünkü Java SE 1.8 ile artık arayüzlerde gerçekleştirme verilebilir! ØDolayısıyla bundan sonra aksi söylenene kadar arayüzleri,

Worker.java veEmployee.javaØfactory1 paketi.

14www.javaturk.org

www.selso

ft.aca

demy

Page 15: 4. Bölüm Arayüzler (Interfaces) · ØÇünkü Java SE 1.8 ile artık arayüzlerde gerçekleştirme verilebilir! ØDolayısıyla bundan sonra aksi söylenene kadar arayüzleri,

ArayüzveMirasØArayüzler,sorumluluklaragerçekleştirmesağlamadıklarından,kendilerindenbuarayüzleridevralanaltsınıfların,arayüzdeki tümmetotlaragerçekleştirmevermelerigereklidir.ØÇünküarayüzdeki tümmetotlarsoyutturlar.

ØAksitaktirde,yanialtsınıf,arayüzden devraldığıbirmetodabilegerçekleştirmevermezse,altsınıfınsoyut (abstract)tanımlanmasıgereklidir.ØÇünküsınıfhalasoyutmetodasahiptir.

15www.javaturk.org

www.selso

ft.aca

demy

Page 16: 4. Bölüm Arayüzler (Interfaces) · ØÇünkü Java SE 1.8 ile artık arayüzlerde gerçekleştirme verilebilir! ØDolayısıyla bundan sonra aksi söylenene kadar arayüzleri,

SözleşmeveYükleniciØArayüz,sorumluluklarınsıralandığıbirsoyutyapıdır.

ØBirarayüzügerçekleştirenbirsınıf,arayüzdeki metotlarabirergerçekleştirmesağlamaklayükümlüdür.

ØBu,arayüzünbirsözleşme (contract)yadaprotokol(protocol),gerçekleştirensınıflarınisebireryüklenici(implementor)olaraknitelendirilmesinedeizinverir.

ØAynıarayüzügerçekleştirensınıflar,aynısözleşmeyiyerinegetirenfarklıyüklenicilerdir.

16www.javaturk.org

www.selso

ft.aca

demy

Page 17: 4. Bölüm Arayüzler (Interfaces) · ØÇünkü Java SE 1.8 ile artık arayüzlerde gerçekleştirme verilebilir! ØDolayısıyla bundan sonra aksi söylenene kadar arayüzleri,

ArayüzveIs-AØArayüzileonugerçekleştirensınıflararasındais-ailişkisitabiolarakvardır.

ØBundandolayıarayüzün,polymorphism,upcasting vedowncasting açısından,sınıflardanhiçbirfarklıyoktur.

ØBirarayüz,kendisinigerçekleştirensınıflarınüsttipidir.

ØAralarındakitemelfark, soyutluk-somutlukspektrumundakiyerleridir.

17www.javaturk.org

www.selso

ft.aca

demy

Page 18: 4. Bölüm Arayüzler (Interfaces) · ØÇünkü Java SE 1.8 ile artık arayüzlerde gerçekleştirme verilebilir! ØDolayısıyla bundan sonra aksi söylenene kadar arayüzleri,

Test.javaØfactory1 paketi.

18www.javaturk.org

www.selso

ft.aca

demy

Page 19: 4. Bölüm Arayüzler (Interfaces) · ØÇünkü Java SE 1.8 ile artık arayüzlerde gerçekleştirme verilebilir! ØDolayısıyla bundan sonra aksi söylenene kadar arayüzleri,

ArayüzveYetkinliklerØArayüzlerin“is-a”hiyerarşisindebirüsttipolarakgörülmesiyanında,yetkinlikkazandırmasıdasözkonusudur.

ØArayüzler,tanımladıklarısoyutdavranışlarilealtsınıflarınayetkinlikkazandırırlar.ØBunda,birsınıfınpekçokarayüzüyerinegetirmesideroloynar.

ØSınıfların,yerinegetirdikleripekçokarayüzilepekçokyetkinliği(ability)kazandığıdüşünülür.

19www.javaturk.org

www.selso

ft.aca

demy

Page 20: 4. Bölüm Arayüzler (Interfaces) · ØÇünkü Java SE 1.8 ile artık arayüzlerde gerçekleştirme verilebilir! ØDolayısıyla bundan sonra aksi söylenene kadar arayüzleri,

ArayüzveCan-Do- IØBusebeplezamanzamanarayüzler,“able”sontakısıylaisimlendirilirler:

ØBudurumdaaltsınıflarilearayüzleriarasındakiilişki“can-do”olarakdaokunabilir.

20www.javaturk.org

public interface Payable {

double calculatePrice();double calculateTax();void pay(double price);

}

public interface Doable{void doIt();

}

www.selso

ft.aca

demy

Page 21: 4. Bölüm Arayüzler (Interfaces) · ØÇünkü Java SE 1.8 ile artık arayüzlerde gerçekleştirme verilebilir! ØDolayısıyla bundan sonra aksi söylenene kadar arayüzleri,

ArayüzveCan-Do- II

21www.javaturk.org

www.selso

ft.aca

demy

Page 22: 4. Bölüm Arayüzler (Interfaces) · ØÇünkü Java SE 1.8 ile artık arayüzlerde gerçekleştirme verilebilir! ØDolayısıyla bundan sonra aksi söylenene kadar arayüzleri,

Doable.java vePayable.javaØcanDo paketi.

22www.javaturk.org

www.selso

ft.aca

demy

Page 23: 4. Bölüm Arayüzler (Interfaces) · ØÇünkü Java SE 1.8 ile artık arayüzlerde gerçekleştirme verilebilir! ØDolayısıyla bundan sonra aksi söylenene kadar arayüzleri,

Arayüzlerin KullanımıØArayüzler daha önce ifade ettiğimiz “programtoaninterface,notanimplementation”prensibinin uygulanmasıiçin enidealyapıdırlar.

ØÇünkü arayüzler sadece metotarayüzü sağlarlar.

23www.javaturk.org

www.selso

ft.aca

demy

Page 24: 4. Bölüm Arayüzler (Interfaces) · ØÇünkü Java SE 1.8 ile artık arayüzlerde gerçekleştirme verilebilir! ØDolayısıyla bundan sonra aksi söylenene kadar arayüzleri,

Calculator.javaØmath paketi.Ø İhtiyacagörefarklıtürdetekargümanlımatematikselfonksiyonlarasahipolabilenbirCalculator düşünün.

ØMatematikselfonksiyonların,Calculator’e eklenebilmesi(pluggable)nasılsağlanabilir?

Ø“Programto interface,notanimplementation”prensibininuygulamasınıgözlemleyin.

24www.javaturk.org

www.selso

ft.aca

demy

Page 25: 4. Bölüm Arayüzler (Interfaces) · ØÇünkü Java SE 1.8 ile artık arayüzlerde gerçekleştirme verilebilir! ØDolayısıyla bundan sonra aksi söylenene kadar arayüzleri,

UygulamaØCelcius,FahrenheitveKelvinsıcaklıkderecelendirmesistemleriarasındadönüşümyapacakbiryapıyıarayüzkullanaraktasarlayın.

25www.javaturk.org

www.selso

ft.aca

demy

Page 26: 4. Bölüm Arayüzler (Interfaces) · ØÇünkü Java SE 1.8 ile artık arayüzlerde gerçekleştirme verilebilir! ØDolayısıyla bundan sonra aksi söylenene kadar arayüzleri,

26www.javaturk.org

Arayüz ve Miras

www.selso

ft.aca

demy

Page 27: 4. Bölüm Arayüzler (Interfaces) · ØÇünkü Java SE 1.8 ile artık arayüzlerde gerçekleştirme verilebilir! ØDolayısıyla bundan sonra aksi söylenene kadar arayüzleri,

PekÇokArayüzGerçekleştirmeØBirsınıfaynıandabirdenfazlaarayüzügerçekleştirebilir.ØBununiçinsınıftanımlanırken,implements’tensonraarayüzler virgülilelistelenir.

ØBudurumdasınıfın,yerinegetirdiğiarayüzlerdendevraldığıtümmetotlaragerçekleştirmevermesigerekir.ØAksitaktirdeosınıfsoyut olmakzorundadır.

27www.javaturk.org

public class Employee implements Worker, Schedulable{

void work(){ ... }

public schedule(){ ... }} www.se

lsoft.a

cadem

y

Page 28: 4. Bölüm Arayüzler (Interfaces) · ØÇünkü Java SE 1.8 ile artık arayüzlerde gerçekleştirme verilebilir! ØDolayısıyla bundan sonra aksi söylenene kadar arayüzleri,

PekÇokArayüzGerçekleştirmeØBirsınıfhembirsınıftanmirasdeviralırkenbiryadadahaçokarayüzü yerinegetirebilir.

28www.javaturk.org

public class Employee extends Personimplements Worker, Schedulable{

public void live(){ ... }

public void work(){ ... }

public schedule(){ ... }}

www.selso

ft.aca

demy

Page 29: 4. Bölüm Arayüzler (Interfaces) · ØÇünkü Java SE 1.8 ile artık arayüzlerde gerçekleştirme verilebilir! ØDolayısıyla bundan sonra aksi söylenene kadar arayüzleri,

Employee.javaØfactory2 paketi.

29www.javaturk.org

www.selso

ft.aca

demy

Page 30: 4. Bölüm Arayüzler (Interfaces) · ØÇünkü Java SE 1.8 ile artık arayüzlerde gerçekleştirme verilebilir! ØDolayısıyla bundan sonra aksi söylenene kadar arayüzleri,

MirasaYenidenBakışØSoyutsınıfvearayüzmekanizmalarındansonramirasileilgiliolarakşuayrımyapılabilir:ØGerçekleştirmedevralma (implementationinheritance):Birsınıftan“extends”ilemirasdevralınmasıdır.Ø Budurumdahemarayüzhemdegerçekleştirmedevralınır:

� Üyedeğişkenlervemetotlar.

ØArayüzdevralma (interfaceinheritance):Birarayüzden“implements”ilemirasdevralınmasıdır.Ø Budurumdasadecearayüzdevralınır,hiçbirgerçekleştirmedevralınmaz,(enazındanşimdilikböylekabuledelim).� Üyemetotlarınarayüzleri.

30www.javaturk.org

www.selso

ft.aca

demy

Page 31: 4. Bölüm Arayüzler (Interfaces) · ØÇünkü Java SE 1.8 ile artık arayüzlerde gerçekleştirme verilebilir! ØDolayısıyla bundan sonra aksi söylenene kadar arayüzleri,

JavaAPIsindeki Arayüzler- IØJavaAPI’sindepekçokarayüzvardır.

ØBazıları:Ø java.lang.ComparableØ java.lang.RunnableØ java.util.Collection

31www.javaturk.org

www.selso

ft.aca

demy

Page 32: 4. Bölüm Arayüzler (Interfaces) · ØÇünkü Java SE 1.8 ile artık arayüzlerde gerçekleştirme verilebilir! ØDolayısıyla bundan sonra aksi söylenene kadar arayüzleri,

JavaAPIsindeki Arayüzler- IIØJavaAPI’sindekiarayüzlerdenbazılarındahiçmetotyoktur.

ØÖrneğinØ java.io.SerializableØ java.lang.CloneableØ java.util.RandomAccess

ØBirarayüzde hiçmetotolmamasınasılaçıklanabilir?

32www.javaturk.org

www.selso

ft.aca

demy

Page 33: 4. Bölüm Arayüzler (Interfaces) · ØÇünkü Java SE 1.8 ile artık arayüzlerde gerçekleştirme verilebilir! ØDolayısıyla bundan sonra aksi söylenene kadar arayüzleri,

ArayüzMetotlarınaErişimØArayüzmetotlarıpublic erişimesahiptirler.

ØDolayısıyla,bumetotlaraltsınıflardagerçekleştirilirkendepublic olmakzorundadırlar.

ØÇünkümetotlaroverrideedilirken,dahakısıtlayıcıbirerişimbelirteciiletanımlanamazlar.

ØYerinegeçebilme(substitutability)özelliğiarayüzveonunaltsınıflarıiçindegeçerlidir.

33www.javaturk.org

www.selso

ft.aca

demy

Page 34: 4. Bölüm Arayüzler (Interfaces) · ØÇünkü Java SE 1.8 ile artık arayüzlerde gerçekleştirme verilebilir! ØDolayısıyla bundan sonra aksi söylenene kadar arayüzleri,

Arayüz- DurumØArayüzler durum(state)dasağlamazlar.

Ø İlkbakıştabirarayüzde durumtanımlanıyormuşsanılır:

ØAmabualgıgeçicidir,

34www.javaturk.org

public interface Worker{

String name = "Ahmet";int year = 10;

}

www.selso

ft.aca

demy

Page 35: 4. Bölüm Arayüzler (Interfaces) · ØÇünkü Java SE 1.8 ile artık arayüzlerde gerçekleştirme verilebilir! ØDolayısıyla bundan sonra aksi söylenene kadar arayüzleri,

Arayüz– SabitelerØArayüzde tanımlanacaktümalanlarotomatikolarakpublic,statik vefinal olurlar.ØBuyüzdenalanlariçinpublic,static vefinal dışındabelirteç(modifier)kullanılamaz.

ØVetümalanlarabirilkdeğervermekzorunludur.ØBuyüzdendebüyükharflerleyazılıp,varsakelimelerarası“_”ileayrılır:NEXT_YEAR

ØBudurum,ironik birşekilde,arayüzlerisadecesabiteleritoplayanbiryapıhalindekullanılmasınasebepolur.

Øjava.io.ObjectStreamConstants böylebirarayüzdür.ØArayüzlerin buşekildekullanımınınalternatifienum tipidir.

35www.javaturk.org

www.selso

ft.aca

demy

Page 36: 4. Bölüm Arayüzler (Interfaces) · ØÇünkü Java SE 1.8 ile artık arayüzlerde gerçekleştirme verilebilir! ØDolayısıyla bundan sonra aksi söylenene kadar arayüzleri,

Months.java

36www.javaturk.org

www.selso

ft.aca

demy

Page 37: 4. Bölüm Arayüzler (Interfaces) · ØÇünkü Java SE 1.8 ile artık arayüzlerde gerçekleştirme verilebilir! ØDolayısıyla bundan sonra aksi söylenene kadar arayüzleri,

Arayüz– SoyutSınıfØArayüzlerinbirdurumasahipolmamalarındandolayı,soyutsınıflarsıklıklaarayüzlerinalttipleriolur.

ØBudurumdaarayüz hiyerarşininortakdavranışlarınıiçeriken,soyutsınıfhiyerarşiiçingereklidurumusağlar.ØSoyutsınıfgeneldedeviraldığısoyutmetotlaragerçekleştirmevermezsadeceset/get metotlarınısağlar,

ØBazensoyutsınıflarınarayüzden devraldıklarımetotlaragenel-geçerbirdavranışsağladığıdagörülür.

37www.javaturk.org

www.selso

ft.aca

demy

Page 38: 4. Bölüm Arayüzler (Interfaces) · ØÇünkü Java SE 1.8 ile artık arayüzlerde gerçekleştirme verilebilir! ØDolayısıyla bundan sonra aksi söylenene kadar arayüzleri,

Shape.javaØBuörnektebirShape hiyerarşisielealınmaktadır.

38www.javaturk.org

www.selso

ft.aca

demy

Page 39: 4. Bölüm Arayüzler (Interfaces) · ØÇünkü Java SE 1.8 ile artık arayüzlerde gerçekleştirme verilebilir! ØDolayısıyla bundan sonra aksi söylenene kadar arayüzleri,

ArayüzveKurucularØArayüzlerinkurucularıyoktur.

ØBu,arayüzlerinhiçdurumsağlamıyorolmalarındandolayıanlaşılabilir.

ØBuyüzdenarayüzügerçekleştirensınıflarınkurucularında,arayüzden kaynaklanansuper()çağrılarıbulunmaz.

ØAltsınıflarınkurucularındakisuper()çağrıları,mirasdevraldığısınıflariçindir.

39www.javaturk.org

www.selso

ft.aca

demy

Page 40: 4. Bölüm Arayüzler (Interfaces) · ØÇünkü Java SE 1.8 ile artık arayüzlerde gerçekleştirme verilebilir! ØDolayısıyla bundan sonra aksi söylenene kadar arayüzleri,

ArayüzlerArasındaMiras- IØArayüzlerdebirbirlerindenmirasdevralabilirler.

ØBudurumdabirarayüz,kendisindenmirasdevraldığıdiğerarayüzügenişletir(extends).

ØArayüzlerarasındakimirasilişkisindeextends anahtarkelimesikullanılır.

ØBudurumdaaltarayüzügerçekleştirensınıfın,arayüzündevraldığımetotlaradagerçekleştirmevermesigerekir.

40www.javaturk.org

public interface Worker{void work();

}

public interface HardWorker extends Worker{void workHard();

} www.selso

ft.aca

demy

Page 41: 4. Bölüm Arayüzler (Interfaces) · ØÇünkü Java SE 1.8 ile artık arayüzlerde gerçekleştirme verilebilir! ØDolayısıyla bundan sonra aksi söylenene kadar arayüzleri,

Worker.java veHardWorker.javaØorg.javaturk.oofp.ch03.interfaces.factory.extensionpaketi

41www.javaturk.org

www.selso

ft.aca

demy

Page 42: 4. Bölüm Arayüzler (Interfaces) · ØÇünkü Java SE 1.8 ile artık arayüzlerde gerçekleştirme verilebilir! ØDolayısıyla bundan sonra aksi söylenene kadar arayüzleri,

ArayüzlerArasındaMiras- IIØBirarayüz,aynıandanbirdenfazlaarayüzden mirasdeviralabilir.

ØBudurumdamirasalınanarayüzler,ard-ardavirgülileayrılaraksıralanır.

42www.javaturk.org

www.selso

ft.aca

demy

Page 43: 4. Bölüm Arayüzler (Interfaces) · ØÇünkü Java SE 1.8 ile artık arayüzlerde gerçekleştirme verilebilir! ØDolayısıyla bundan sonra aksi söylenene kadar arayüzleri,

ABiggerInterface.javaØorg.javaturk.oofp.ch04.extending paketi.

43www.javaturk.org

www.selso

ft.aca

demy

Page 44: 4. Bölüm Arayüzler (Interfaces) · ØÇünkü Java SE 1.8 ile artık arayüzlerde gerçekleştirme verilebilir! ØDolayısıyla bundan sonra aksi söylenene kadar arayüzleri,

Uygulama- IØBirkurumticaretiniyaptığıürünlerleilgiliolarakyazılımsistemindeşöylebiryapıkurgulamıştır:

44www.javaturk.org

www.selso

ft.aca

demy

Page 45: 4. Bölüm Arayüzler (Interfaces) · ØÇünkü Java SE 1.8 ile artık arayüzlerde gerçekleştirme verilebilir! ØDolayısıyla bundan sonra aksi söylenene kadar arayüzleri,

Uygulama- IIØSonrasında bu kurumun iş yapışında aşağıdaki değişikliklerolmuş ama var olan Productyapısının bunlara izinvermediği gözlemlenmiştir.ØDanışmanlık hizmeti sağlama (Location’u yok),ØKurumdaki eskimiş bilgisayarları satma (Productdeğil),ØÜrettikleri ürünlerden özel günlerde hediyeverme (Product’ınfiyatı var).

Ø“Kurum,bu tür değişiklikleri daha sistemi tasarlarkenöngörerek baştan daha esnek bir sistem kurgulanmalıydı”diyorsanız,bu sistemi baştan bu şekilde tasarlayın.

ØÇözümünüzünsınıfdiyagramınıçizinvekodunuyazın.

45www.javaturk.org

www.selso

ft.aca

demy

Page 46: 4. Bölüm Arayüzler (Interfaces) · ØÇünkü Java SE 1.8 ile artık arayüzlerde gerçekleştirme verilebilir! ØDolayısıyla bundan sonra aksi söylenene kadar arayüzleri,

46www.javaturk.org

Tip Kavramı (Concept of Type)

www.selso

ft.aca

demy

Page 47: 4. Bölüm Arayüzler (Interfaces) · ØÇünkü Java SE 1.8 ile artık arayüzlerde gerçekleştirme verilebilir! ØDolayısıyla bundan sonra aksi söylenene kadar arayüzleri,

TipKavramıØProgramlamadillerindetip (type),alınabilecekdeğerlerkümesidir(setofpossible values).

ØJava’dailkel (primitive)vekarmaşık yadareferans (complexyadareference)tiplervardır.

ØKarmaşıktip ilebaşındabuyanakavramıylahepsomutsınıflarıkastettik.

ØArtık,tip olaraksomutsınıflaryanındasoyutsınıflarvearayüzlere desahibiz.

47www.javaturk.org

www.selso

ft.aca

demy

Page 48: 4. Bölüm Arayüzler (Interfaces) · ØÇünkü Java SE 1.8 ile artık arayüzlerde gerçekleştirme verilebilir! ØDolayısıyla bundan sonra aksi söylenene kadar arayüzleri,

TipSpektrumuØSoyutvesomutolaraksınıflarilearayüzlerdüşünüldüğünde,birtipspektrumdanbahsedilebilir.

ØBuspektrumdafarklıtiplerfarklıyerleresahiptirler.

48www.javaturk.org

Concretion Abstraction

Type Spectrum

class interfaceabstract class

inheriting implementing

www.selso

ft.aca

demy

Page 49: 4. Bölüm Arayüzler (Interfaces) · ØÇünkü Java SE 1.8 ile artık arayüzlerde gerçekleştirme verilebilir! ØDolayısıyla bundan sonra aksi söylenene kadar arayüzleri,

ÇokTipliYapılarØBirhiyerarşide,somut-soyutsınıfvearayüzolarakbirdenfazlaüsttipesahipolanbirnesneninbirdenfazlatipivardemektir.

ØVenesne,otiplerinherbirisindenolanreferanslariletemsiledilebilir.

ØAynınesneninhangibağlamdahangitipiniortayakoyduğunubelirleyenşeydeonesneyiobağlamdatemsiledenreferanstır.

49www.javaturk.org

www.selso

ft.aca

demy

Page 50: 4. Bölüm Arayüzler (Interfaces) · ØÇünkü Java SE 1.8 ile artık arayüzlerde gerçekleştirme verilebilir! ØDolayısıyla bundan sonra aksi söylenene kadar arayüzleri,

50www.javaturk.org

SeaPlane nesnesininkaç tipi vardır?

www.selso

ft.aca

demy

Page 51: 4. Bölüm Arayüzler (Interfaces) · ØÇünkü Java SE 1.8 ile artık arayüzlerde gerçekleştirme verilebilir! ØDolayısıyla bundan sonra aksi söylenene kadar arayüzleri,

51www.javaturk.org

www.selso

ft.aca

demy

Page 52: 4. Bölüm Arayüzler (Interfaces) · ØÇünkü Java SE 1.8 ile artık arayüzlerde gerçekleştirme verilebilir! ØDolayısıyla bundan sonra aksi söylenene kadar arayüzleri,

TestFlyer.javaØorg.javaturk.oofp.ch04.flyerpaketi.

52www.javaturk.org

www.selso

ft.aca

demy

Page 53: 4. Bölüm Arayüzler (Interfaces) · ØÇünkü Java SE 1.8 ile artık arayüzlerde gerçekleştirme verilebilir! ØDolayısıyla bundan sonra aksi söylenene kadar arayüzleri,

PolymorphismØArayüzlerindemirashiyerarşisinekatılmasısayesinde,çoktiplinesneleroluşturulabilir.

ØNesneleringerçekleştirmesibirtanedir,odasınıfıdır.Amanesnelerinpekçoktipivardır.ØBusebeplebirsınıfınnesnesi,sahipolduğuhertipedönüştürülebilir(upcasting).

ØAynınesnebuşekildefarklıbağlamlardafarklıtiptegörünür.

ØBuiseçokşekilliliğin (polymorphism)tanımıdır.ØBudurum,gerçekliğidahaiyiresmetmeyeyarar.

53www.javaturk.org

www.selso

ft.aca

demy

Page 54: 4. Bölüm Arayüzler (Interfaces) · ØÇünkü Java SE 1.8 ile artık arayüzlerde gerçekleştirme verilebilir! ØDolayısıyla bundan sonra aksi söylenene kadar arayüzleri,

54www.javaturk.org

Geri Çağırma Metotları (Callback Methods)

www.selso

ft.aca

demy

Page 55: 4. Bölüm Arayüzler (Interfaces) · ØÇünkü Java SE 1.8 ile artık arayüzlerde gerçekleştirme verilebilir! ØDolayısıyla bundan sonra aksi söylenene kadar arayüzleri,

GeriÇağırma(CallBack)- IØYazılımsistemlerindesıklıkla,birbuttonuntıklanmasıyadabirkullanıcınınsistemikullanmayabaşlaması(login)gibibazıolaylarıntakibigereklidir.

ØBuamaçlagenelolarak,olayınkaynağıolannesneye,olayınolduğunubildirmesiiçinbirfonksiyongeçilir.

Ø İlgilenilendurumoluştuğundadanesne,kendisinegeçilenfonksiyonuçağırır.

ØBumekanizmayageriçağırma (callback),geriçağrılanmetodadageriçağırmametodu (callbackmethod) denir.

ØObserver (event-notificationyadapublisher-subscriber)tasarımkalıbıbuproblemiveçözümünütarifeder.

55www.javaturk.org

www.selso

ft.aca

demy

Page 56: 4. Bölüm Arayüzler (Interfaces) · ØÇünkü Java SE 1.8 ile artık arayüzlerde gerçekleştirme verilebilir! ØDolayısıyla bundan sonra aksi söylenene kadar arayüzleri,

GeriÇağırma(CallBack)- IIØGeriçağırmayıJava’dakurgulamakiçinolayınkaynağına,fonksiyondeğil,üzerindebelirlibirmetotolannesnegeçilir.ØÇünküJavanesnemerkezlidirvenesnegeçilmesidurumuçokdahagenişbirhareketalanısağlar.

ØBudurumdaolayınkaynağıolannesnenin,olayınolmasıdurumundahangimetoduçağıracağınıbilmesigerekir.

ØBusebepleJava’dageriçağırmanesneleri,üzerindegeneldebirtanegeriçağırmametodubulunduranarayüzlerdentüretilir.

56www.javaturk.org

www.selso

ft.aca

demy

Page 57: 4. Bölüm Arayüzler (Interfaces) · ØÇünkü Java SE 1.8 ile artık arayüzlerde gerçekleştirme verilebilir! ØDolayısıyla bundan sonra aksi söylenene kadar arayüzleri,

TimerExample.javaØorg.javaturk.oofp.ch04.callBack paketi.

57www.javaturk.org

www.selso

ft.aca

demy

Page 58: 4. Bölüm Arayüzler (Interfaces) · ØÇünkü Java SE 1.8 ile artık arayüzlerde gerçekleştirme verilebilir! ØDolayısıyla bundan sonra aksi söylenene kadar arayüzleri,

58www.javaturk.org

İsimsiz Sınıflar (Anonymous Classes)

www.selso

ft.aca

demy

Page 59: 4. Bölüm Arayüzler (Interfaces) · ØÇünkü Java SE 1.8 ile artık arayüzlerde gerçekleştirme verilebilir! ØDolayısıyla bundan sonra aksi söylenene kadar arayüzleri,

İsimsizSınıflarØGeneldegeriçağırmametotlarınınüzerindebulunduğusınıflarıntekkullanımlıkbirnesnesineihtiyaçduyulur.ØYaniarayüzügerçekleştirensınıfınbirteknesnesineihtiyaçvardırvebunesnesadecebiryerdekullanılır.

ØBudurumdaJava,arayüzüyerinegetirensınıfınisimsizbirşekilde,hızlıcaoluşturulmasınavebununyapıldığıyerdetekbirnesnesininyaratılıpkullanılmasınaizinverir.

ØBuşekildeoluşturulansınıflaraisimsizsınıf(anonymousclass)denir.

59www.javaturk.org

www.selso

ft.aca

demy

Page 60: 4. Bölüm Arayüzler (Interfaces) · ØÇünkü Java SE 1.8 ile artık arayüzlerde gerçekleştirme verilebilir! ØDolayısıyla bundan sonra aksi söylenene kadar arayüzleri,

İsimsizSınıflar- IØ İsimsizsınıflarsıklıklaolayları(event)yakalamadakullanılırlar.ØÇünküçoğuzamanözelbirdurumaişaretedenolaynesnesisadecebiryerdeyakalanırvegereğiyapılır.

ØÖrnektekiActionListener, sadeceactionPerformed() metodunasahipbirarayüzdür.

60www.javaturk.org

Timer t = new Timer(1_000, new ActionListener() {

@Overridepublic void actionPerformed(ActionEvent e) {

...}

});

www.selso

ft.aca

demy

Page 61: 4. Bölüm Arayüzler (Interfaces) · ØÇünkü Java SE 1.8 ile artık arayüzlerde gerçekleştirme verilebilir! ØDolayısıyla bundan sonra aksi söylenene kadar arayüzleri,

TimerExample.javaØorg.javaturk.oofp.ch04.anonymous.timer paketi.

61www.javaturk.org

www.selso

ft.aca

demy

Page 62: 4. Bölüm Arayüzler (Interfaces) · ØÇünkü Java SE 1.8 ile artık arayüzlerde gerçekleştirme verilebilir! ØDolayısıyla bundan sonra aksi söylenene kadar arayüzleri,

İsimsizSınıflar- IØYakalanansıklıklaGUIolaylarıdır..ØBenzerşekildeçoğuzamanbirGUIbileşeninindurumundakibirdeğişikliğeişaretedenolaynesnesisadecebiryerdeyakalanırvegereğiyapılır.

ØÖrnektekiEventHandler, sadecehandle() metodunasahipbirarayüzdür.

62www.javaturk.org

button.setOnAction(new EventHandler<ActionEvent>() {

@Overridepublic void handle(ActionEvent event) {

...}

});

www.selso

ft.aca

demy

Page 63: 4. Bölüm Arayüzler (Interfaces) · ØÇünkü Java SE 1.8 ile artık arayüzlerde gerçekleştirme verilebilir! ØDolayısıyla bundan sonra aksi söylenene kadar arayüzleri,

MyApplication.javaØorg.javaturk.oofp.ch04.anonymous.event paketi.

63www.javaturk.org

www.selso

ft.aca

demy

Page 64: 4. Bölüm Arayüzler (Interfaces) · ØÇünkü Java SE 1.8 ile artık arayüzlerde gerçekleştirme verilebilir! ØDolayısıyla bundan sonra aksi söylenene kadar arayüzleri,

İsimsizSınıflar- IIØSınıflar,tanımlamaya(classdeclaration)sahipolduklarıhaldeisimsizsınıflarifadedirler(expression).

Ø İsimsizsınıfifadesi,birkurucuçağrısınabenzeramaiçindetekrartanımlanan(override)metotyadametotlarvardır.

Ø İsimsizsınıflarhemarayüzlerigerçekleştirmedehemdesınıflarıgenişletmedekullanılabilirler.

Ø İsimsizsınıflargeneldesadecebirmetotasahiparayüzlerigerçekleştirmedekullanılmalarınarağmenbirdenfazlametoduyenidentanımlayacakşekildekullanılabilirler.ØOlayyapılarındaçağrılacakmetotbirtaneolduğundan,geneldetekmetodutekrartanımlamadakullanılırlar.

64www.javaturk.org

www.selso

ft.aca

demy

Page 65: 4. Bölüm Arayüzler (Interfaces) · ØÇünkü Java SE 1.8 ile artık arayüzlerde gerçekleştirme verilebilir! ØDolayısıyla bundan sonra aksi söylenene kadar arayüzleri,

İsimsizSınıflar- IIIØ İsimsizsınıfifadesişöyledir:

Ønewoperatörü,ØGerçekleştirilecekarayüzünyadagenişletileceksınıfınismi,

Ø new operatöründensonragelentipinsınıfolmasıdurumunda,kurucuyageçilecekparametrelerdesıralanabilir.

Ø Eğertiparayüzise,arayüzlerinkurucularıolmadığından,sankivarsayılankurucuçağrılıyormuşgibiiçiboşikiparantezbulunur.

ØSınıfbloğu.Ø İsimsizsınıflarbirerifadeolduklarından,bloklarındabaşkaifadelerolamaz,sadecemetotgibibaşkabloklarolabilir.

Ø İsimsizsınıfifadesi,arayüzgerçekleştirmesindenewoperatöründensonraarayüzünvarsayılankurucusunuçağırıyorbirgörüntüyesahipolduğundantuhafgörünür.

65www.javaturk.org

www.selso

ft.aca

demy

Page 66: 4. Bölüm Arayüzler (Interfaces) · ØÇünkü Java SE 1.8 ile artık arayüzlerde gerçekleştirme verilebilir! ØDolayısıyla bundan sonra aksi söylenene kadar arayüzleri,

66www.javaturk.org

public interface DoerInterface {

void doIt();

void doThat();}

new DoerInterface(){{

System.out.println(”Instance initializer block.");}

@Overridepublic void doIt(){

System.out.println(”I!ll always do it :)");}

@Overridepublic void doThat(){

System.out.println("I’ll always do that :)");}

}).doIt();www.selso

ft.aca

demy

Page 67: 4. Bölüm Arayüzler (Interfaces) · ØÇünkü Java SE 1.8 ile artık arayüzlerde gerçekleştirme verilebilir! ØDolayısıyla bundan sonra aksi söylenene kadar arayüzleri,

AnonymousDoesClassTest.javaØorg.javaturk.oofp.ch04.anonymous.doer paketi.

67www.javaturk.org

www.selso

ft.aca

demy

Page 68: 4. Bölüm Arayüzler (Interfaces) · ØÇünkü Java SE 1.8 ile artık arayüzlerde gerçekleştirme verilebilir! ØDolayısıyla bundan sonra aksi söylenene kadar arayüzleri,

İsimsizSınıflar- IVØ İsimsizsınıflar,içindebulunduklarısınıfınüyelerineerişebilir.

Ø İsimsizsınıflar,içindebulunduklarıbloğunyereldeğişkenlerinefinal yadadeğerideğişmediği(effectivelyfinal) hallerdeulaşabilir.ØBudurumdadayereldeğişkenideğiştiremez.

Ø İsimsizsınıflar,sabiteolmalarışartıylastatikalanlartanımlayabilirler.

68www.javaturk.org

www.selso

ft.aca

demy

Page 69: 4. Bölüm Arayüzler (Interfaces) · ØÇünkü Java SE 1.8 ile artık arayüzlerde gerçekleştirme verilebilir! ØDolayısıyla bundan sonra aksi söylenene kadar arayüzleri,

İsimsizSınıflar- VØ İsimsizsınıflarayrıcaşunlarıtanımlayabilirler:

ØAlanlar,ØYerelsınıflar(localclasses),ØÜsttipindeolmayanmetotlar,ØNesneilkdeğerblokları

Ø İsimsizsınıflar,statikilkdeğeratamabloklarıileüyearayüzlertanımlayamazlar.

69www.javaturk.org

www.selso

ft.aca

demy

Page 70: 4. Bölüm Arayüzler (Interfaces) · ØÇünkü Java SE 1.8 ile artık arayüzlerde gerçekleştirme verilebilir! ØDolayısıyla bundan sonra aksi söylenene kadar arayüzleri,

WeirdAnonymousDoesClassTest.javaØorg.javaturk.oofp.ch04.anonymous.doer paketi.

70www.javaturk.org

www.selso

ft.aca

demy

Page 71: 4. Bölüm Arayüzler (Interfaces) · ØÇünkü Java SE 1.8 ile artık arayüzlerde gerçekleştirme verilebilir! ØDolayısıyla bundan sonra aksi söylenene kadar arayüzleri,

71www.javaturk.org

Java SE 1.8 Yenilikleri

www.selso

ft.aca

demy

Page 72: 4. Bölüm Arayüzler (Interfaces) · ØÇünkü Java SE 1.8 ile artık arayüzlerde gerçekleştirme verilebilir! ØDolayısıyla bundan sonra aksi söylenene kadar arayüzleri,

JavaSE1.8YenilikleriØJavaSE1.8ilearayüzlere(interface)ikiciddideğişiklikyapıldı.

ØBudeğişikliklerşunlardır:Ødefault (varsayılan)metotlar,Ø static metotlar

ØBuikitürmetotda,şuanakadarsöylenen“arayüzlersadeceşekil/formsağlar,gerçekleştirmesağlamaz”prensibinidelenyeniliklerdir.

ØBuikidurumundaönemlisebeplerivardır.

72www.javaturk.org

www.selso

ft.aca

demy

Page 73: 4. Bölüm Arayüzler (Interfaces) · ØÇünkü Java SE 1.8 ile artık arayüzlerde gerçekleştirme verilebilir! ØDolayısıyla bundan sonra aksi söylenene kadar arayüzleri,

73www.javaturk.org

Varsayılan Metot (Default Method)

www.selso

ft.aca

demy

Page 74: 4. Bölüm Arayüzler (Interfaces) · ØÇünkü Java SE 1.8 ile artık arayüzlerde gerçekleştirme verilebilir! ØDolayısıyla bundan sonra aksi söylenene kadar arayüzleri,

ArayüzveGerçekleştirmeØDahaönce“Arayüzlersadeceform– şekilsağlayanyapılardır,içeriksağlamazlar.”dendi.

ØJavaSE8ilebirliktearayüzlerde ciddideğişiklikleryapıldı.

ØBudeğişikliklerdenikisiarayüzlerinsadeceşekilyanimetotarayüzüdeğilaynızamandaiçerikyanigerçekleştirmedesağlamasınaizinverdi.

74www.javaturk.org

www.selso

ft.aca

demy

Page 75: 4. Bölüm Arayüzler (Interfaces) · ØÇünkü Java SE 1.8 ile artık arayüzlerde gerçekleştirme verilebilir! ØDolayısıyla bundan sonra aksi söylenene kadar arayüzleri,

ArayüzüGüncellemekØYazılankodlardabulunanarayüzlerin,tabiolarak,sistemdekisınıflargibizamanzamandeğişmesigerekir.

ØBirarayüze yenibirmetoteklendiğinde,oarayüzden mirasdevralanbütünsınıflarınometodugerçekleştirmelerigerekir.

ØBudurumözelliklekütüphaneler(library)içinproblemlidir:ØDünyayadağılmışolanbirkütüphanedekibirarayüze metoteklemek,okütüphaneyikullananbütünkodlarıetkiler.

ØKullanıcılarınkütüphaneyiyenisürümeçekmeleri,oarayüzükullanansınıflara,yenimetotlarıeklemelerinigerektirir.

75www.javaturk.org

www.selso

ft.aca

demy

Page 76: 4. Bölüm Arayüzler (Interfaces) · ØÇünkü Java SE 1.8 ile artık arayüzlerde gerçekleştirme verilebilir! ØDolayısıyla bundan sonra aksi söylenene kadar arayüzleri,

DefaultMethod–VarsayılanMetot- IØJavaSE8ilebirliktearayüzlere defaultmethod (varsayılanmetot)eklemeimkanıgeldi.

ØDefaultmetot,“default”kelimesiyletanımlanırvearayüzdebirgerçekleştirmeyesahipolur.

76www.javaturk.org

public interface Worker{void work();double calculateSalary();

}

public interface Worker{void work();double calculateSalary();

default void newMethod(){...

}}www.se

lsoft.a

cadem

y

Page 77: 4. Bölüm Arayüzler (Interfaces) · ØÇünkü Java SE 1.8 ile artık arayüzlerde gerçekleştirme verilebilir! ØDolayısıyla bundan sonra aksi söylenene kadar arayüzleri,

DefaultMethod–VarsayılanMetot- IIØDolayısıyla,eklenenvedefault olaraktanımlananyenimetodun,arayüzünaltsınıflarındagerçekleştirilmesinegerekkalmaz.

ØDiğertümmetotlargibivarsayılanmetotlardadaimapublicolaraktanımlıdırlar.

77www.javaturk.org

www.selso

ft.aca

demy

Page 78: 4. Bölüm Arayüzler (Interfaces) · ØÇünkü Java SE 1.8 ile artık arayüzlerde gerçekleştirme verilebilir! ØDolayısıyla bundan sonra aksi söylenene kadar arayüzleri,

Binary Compatibility- IØVarsayılanmetot,birarayüzünün eskisürümünükullananbiryapıyla,yenisürümüarasındakiuyumluluğubozmamaküzereçıkarılmışbirözelliktir.

ØBinary compatibility (ikili?uyumluluk),eskidenbirlikteçalışanikiyapıdanbirisinindeğişmesinerağmen,yenisürümünündiğeryapıylahalauyumlubirşekildeçalışabilmesinedenir.ØYaniuyumluluk,derlenmişyapılar,.classdosyalarıseviyesindedir.

78www.javaturk.org

www.selso

ft.aca

demy

Page 79: 4. Bölüm Arayüzler (Interfaces) · ØÇünkü Java SE 1.8 ile artık arayüzlerde gerçekleştirme verilebilir! ØDolayısıyla bundan sonra aksi söylenene kadar arayüzleri,

Binary Compatibility- IIØEğerbirprojedekibirarayüze yenibirmetoteklediktensonraderleyipprojedeeklerseniz,varolanyapılar,arayüzünyenisürümüyleçalışmayadevamedeceklerdir.

ØAmaoyapılar,arayüze eklenenyenimetodukullanamayacaklardır.

ØBunabinary compatibility denir.

79www.javaturk.org

www.selso

ft.aca

demy

Page 80: 4. Bölüm Arayüzler (Interfaces) · ØÇünkü Java SE 1.8 ile artık arayüzlerde gerçekleştirme verilebilir! ØDolayısıyla bundan sonra aksi söylenene kadar arayüzleri,

TestCompatibility.java - IØFootballPlayer arayüzünün 1.sürümüileçalışanAverageFootballPlayer veTestCompatibility,FootballPlayer’a yenibirmetoteklenmesiyleoluşan2.sürümüiledeçalışmayadevameder.

80www.javaturk.org

1. Sürüm

public interface FootballPlayer{void play();

}

2. Sürüm

public interface FootballPlayer{void play();void behaveEthically();

}

public class TestCompatibility {public static void main(String[] args) {FootballPlayer player = new AverageFootballPlayer();player.play();

}} www.se

lsoft.a

cadem

y

Page 81: 4. Bölüm Arayüzler (Interfaces) · ØÇünkü Java SE 1.8 ile artık arayüzlerde gerçekleştirme verilebilir! ØDolayısıyla bundan sonra aksi söylenene kadar arayüzleri,

SourceCompatibilityØBiröncekiörneksource compatibility (kaynakuyumluluğu)sağlamaz, çünküyenilenenarayüzükullananyapılartekrarderlenirse,varolanmetoduimplementetmelerigerekir.

ØVarsayılanmetotlar,budurumiçingeliştirilmişlerdir.

ØEğeryenieklenenmetotvarsayılanmetotise,buyenimetodun,altsınıflartarafındangerçekleştirilmesinegerekkalmaz.

81www.javaturk.org

www.selso

ft.aca

demy

Page 82: 4. Bölüm Arayüzler (Interfaces) · ØÇünkü Java SE 1.8 ile artık arayüzlerde gerçekleştirme verilebilir! ØDolayısıyla bundan sonra aksi söylenene kadar arayüzleri,

TestCompatibility.java - IIØAmaTestCompatibility,FootballPlayer’a yenieklenenbirmetoduAverageFootballPlayer nesnesiüzerindeçağıramaz,çünküAverageFootballPlayer tekrardanderlenmelidir.

Ø AverageFootballPlayer sınıfı,yenieklenenmetodugerçekleştirmedentekrarderlenebilirçünküyenieklenenmetotvarsayılanmetottur.

82www.javaturk.org

www.selso

ft.aca

demy

Page 83: 4. Bölüm Arayüzler (Interfaces) · ØÇünkü Java SE 1.8 ile artık arayüzlerde gerçekleştirme verilebilir! ØDolayısıyla bundan sonra aksi söylenene kadar arayüzleri,

NedenVarsayılanMetot?ØVarsayılanmetot,birarayüzüneskisürümünükullananbiryapıyla,yenisürümüarasındakaynakuyumluluğusağlamaküzereçıkarılmışbirözelliktir.

ØArayüzünyenisürümündegelenyenimetotlarınvarsayılanmetotolaraktanımlanmasıhalinde,oarayüzlerigerçekleştirensınıflarıneklenenyenimetodugerçekleştirmelerinegerekkalmaz.

ØBudurumarayüzüilegerçekleştirensınıflararasında“geriyedönükuyumluluk”(backward compatibility)sağlar.

83www.javaturk.org

www.selso

ft.aca

demy

Page 84: 4. Bölüm Arayüzler (Interfaces) · ØÇünkü Java SE 1.8 ile artık arayüzlerde gerçekleştirme verilebilir! ØDolayısıyla bundan sonra aksi söylenene kadar arayüzleri,

ÇokluMiras- IØEğerbirsınıfbirdenfazlaarayüzden mirasdevralırveoarayüzleraynıdefaultmetodasahipolurlarsaneolur?

84www.javaturk.org

www.selso

ft.aca

demy

Page 85: 4. Bölüm Arayüzler (Interfaces) · ØÇünkü Java SE 1.8 ile artık arayüzlerde gerçekleştirme verilebilir! ØDolayısıyla bundan sonra aksi söylenene kadar arayüzleri,

ÇokluMiras- IIØBudurumJava’daderlemehatasıverir.

ØBudurumada“diamond problem”yada“deadlydiamond ofdeath”denir.

ØJava’dabuhatayıçözmenintekyoluvardır:ØAltsınıfındevraldığıdefault metoduimplementetmesi

85www.javaturk.org

www.selso

ft.aca

demy

Page 86: 4. Bölüm Arayüzler (Interfaces) · ØÇünkü Java SE 1.8 ile artık arayüzlerde gerçekleştirme verilebilir! ØDolayısıyla bundan sonra aksi söylenene kadar arayüzleri,

multipleInheritance Paketi

86www.javaturk.org

www.selso

ft.aca

demy

Page 87: 4. Bölüm Arayüzler (Interfaces) · ØÇünkü Java SE 1.8 ile artık arayüzlerde gerçekleştirme verilebilir! ØDolayısıyla bundan sonra aksi söylenene kadar arayüzleri,

SeçeneklerØDolayısıylavarsayılanmetodasahipbirarayüzden mirasdevralmakisteyenbirsınıfınönündeşuüçdurumvardır:

ØVarsayılanmetoduolduğugibidevralıp,overrideetmemek,dolayısıylavarsayılangerçekleştirmeyikullanmak,

ØVarsayılanmetoduabstract olaraktekrartanımlayıp,abstractbirsınıfolmak,

ØVarsayılanmetoduoverrideetmek.

87www.javaturk.org

www.selso

ft.aca

demy

Page 88: 4. Bölüm Arayüzler (Interfaces) · ØÇünkü Java SE 1.8 ile artık arayüzlerde gerçekleştirme verilebilir! ØDolayısıyla bundan sonra aksi söylenene kadar arayüzleri,

SoyutMetotDefaultGerçekleştirmeØBirarayüz,diğerarayüzden extends ilemirasyoluyladevraldığıbirmetodagerçekleştirmeveriponudefaultolaraktanımlayabilir.

ØBuşekildesoyutolarakdevralınanmetot,devralanarayüzde gerçekleştirilmişolur.

88www.javaturk.org

public interface Artist {

void play();}

public interface Actor extends Artist{

default void play(){System.out.println("Actor plays!");

}}www.se

lsoft.a

cadem

y

Page 89: 4. Bölüm Arayüzler (Interfaces) · ØÇünkü Java SE 1.8 ile artık arayüzlerde gerçekleştirme verilebilir! ØDolayısıyla bundan sonra aksi söylenene kadar arayüzleri,

DefaultGerçekleştirmeSoyutMetotØBirarayüz,diğerarayüzden extends ilemirasyoluyladevraldığıbirdefaultmetodutekrardefault yaabstractolaraktanımlayabilir.

89www.javaturk.org

public interface Artist {

default void play(){”Artist plays!"}}

public interface Musician extends Artist{

void play();}

public abstract class Pianist implements Musician{

} www.selso

ft.aca

demy

Page 90: 4. Bölüm Arayüzler (Interfaces) · ØÇünkü Java SE 1.8 ile artık arayüzlerde gerçekleştirme verilebilir! ØDolayısıyla bundan sonra aksi söylenene kadar arayüzleri,

multipleInheritance.v2Paketi

90www.javaturk.org

www.selso

ft.aca

demy

Page 91: 4. Bölüm Arayüzler (Interfaces) · ØÇünkü Java SE 1.8 ile artık arayüzlerde gerçekleştirme verilebilir! ØDolayısıyla bundan sonra aksi söylenene kadar arayüzleri,

GaripBirDurum!ØDavranışlarıntamolaraktanımlandığı(definition)yerdeğildir,davranışlararayüzlerde tanıtılır,sınıflardatanımlanır.

ØBuyüzdenbuyapılara,sadecearayüzsağladığıiçin“arayüz”yada“interface”denir.

ØAmayukarıdakidurumdatanımlamayıyapanarayüzdür,tanıtımıyapanisesınıf!

Ø“play()”metoduArtistarayüzünde tamolaraktanımlanıyoramahiyerarşininenaltındakiPianist sınıfıiseaynıdavranışıtanıtıyor,yaniüsttipiolanMucisianarayüzünden abstract olarakdevralıyoramabirgerçekleştirmevermiyor.

91www.javaturk.org

www.selso

ft.aca

demy

Page 92: 4. Bölüm Arayüzler (Interfaces) · ØÇünkü Java SE 1.8 ile artık arayüzlerde gerçekleştirme verilebilir! ØDolayısıyla bundan sonra aksi söylenene kadar arayüzleri,

BirNoktaØjava.lang.Object sınıfındaki(hashCode(),toString() vb.)metotlaraslabirarayüzüzerindevarsayılanolantanımlanamaz.

ØEğerböyleolsaydı,oarayüzüntümaltsınıflarındabugerçekleştirmekullanılırdı.

ØAmabumümkündeğildir,mümkünolanbumetotlarıhiyerarşininüstündeki sınıftaoverrideetmekvealtsınıflarınaynenkullanmasınaizinvermektir.

92www.javaturk.org

www.selso

ft.aca

demy

Page 93: 4. Bölüm Arayüzler (Interfaces) · ØÇünkü Java SE 1.8 ile artık arayüzlerde gerçekleştirme verilebilir! ØDolayısıyla bundan sonra aksi söylenene kadar arayüzleri,

JavaAPIArayüzVarsayılanMetotlarıØJavaAPI’sindevarsayılanmetotlarasahiparayüzlerdenbazılarışunlardır:

Øjava.util.CollectionsØjava.sql.Statement

93www.javaturk.org

www.selso

ft.aca

demy

Page 94: 4. Bölüm Arayüzler (Interfaces) · ØÇünkü Java SE 1.8 ile artık arayüzlerde gerçekleştirme verilebilir! ØDolayısıyla bundan sonra aksi söylenene kadar arayüzleri,

94www.javaturk.org

Statik Metot (Static Method)

www.selso

ft.aca

demy

Page 95: 4. Bölüm Arayüzler (Interfaces) · ØÇünkü Java SE 1.8 ile artık arayüzlerde gerçekleştirme verilebilir! ØDolayısıyla bundan sonra aksi söylenene kadar arayüzleri,

Arayüzde StatikMetot- IØJavaSE8ilebirliktearayüzüzerindestatikmetottanımlanabilir.ØBununiçinyine“static”anahtarkelimesikullanılır.

95www.javaturk.org

public interface Printable {

void print();

default void format(){System.out.println("Printable is being formatted.");

}

static void startPrinting(){System.out.println("Printing has been started.");

}} www.se

lsoft.a

cadem

y

Page 96: 4. Bölüm Arayüzler (Interfaces) · ØÇünkü Java SE 1.8 ile artık arayüzlerde gerçekleştirme verilebilir! ØDolayısıyla bundan sonra aksi söylenene kadar arayüzleri,

Arayüzde StatikMetot- IIØDiğertümarayüzmetotlarıgibistatikmetotlardadaimapublic olaraktanımlıdırlar.

ØArayüzüzerindekistatikmetotlararayüzü genişletenarayüzleryadagerçekleştirensınıflartarafındandevralınmazlar,buyüzdenstatikmetotlarsadecevesadecetanımlandığıarayüzüzerindeçağrılırlar.

96www.javaturk.org

www.selso

ft.aca

demy

Page 97: 4. Bölüm Arayüzler (Interfaces) · ØÇünkü Java SE 1.8 ile artık arayüzlerde gerçekleştirme verilebilir! ØDolayısıyla bundan sonra aksi söylenene kadar arayüzleri,

staticMethods Paketi

97www.javaturk.org

www.selso

ft.aca

demy

Page 98: 4. Bölüm Arayüzler (Interfaces) · ØÇünkü Java SE 1.8 ile artık arayüzlerde gerçekleştirme verilebilir! ØDolayısıyla bundan sonra aksi söylenene kadar arayüzleri,

NedenStatikMetot?- IØJavaSE8’ekadarstatikmetotlarsadecesınıflardatanımlanabilirdi.

ØBuyüzden,arayüzlerde ifadeedilensoyutnesnemetotlarınayardımcımahiyettekiaraçsal metotlar(utilitymethods),ancakaraçsal sınıflarda(utility classes)statikolaraktanımlanırdı.

ØProjelerdeaşırımiktardastatikmetodasahipolanaraçsalsınıflarçokyaygındır.

ØButüraraçsalsınıflarınbirliktelikleri(cohesion)düşük,bağımlılıkları(coupling)iseyüksekolmaktadır.

98www.javaturk.org

www.selso

ft.aca

demy

Page 99: 4. Bölüm Arayüzler (Interfaces) · ØÇünkü Java SE 1.8 ile artık arayüzlerde gerçekleştirme verilebilir! ØDolayısıyla bundan sonra aksi söylenene kadar arayüzleri,

NedenStatikMetot?- IIØÖrneğin

Øjava.util.Collection arayüzüveCollectionsaraçsal sınıfı.

Øjava.nio.file.Path arayüzüvePaths araçsal sınıfı.Øjava.util.Arrays araçsal sınıfı.

ØArayüzlerde tanımlanabilenstatikmetotlarlabudurumortadankalkacaktır.

ØStatikmetotlarartıkarayüzlerüzerindebulunabilecektir.ØBuşekildestatikmetotlarınazsayıdakiaraçsalsınıfüzerindetoplanmasıengellenecekvemoduleryapılarkurgulanabilecektir.

99www.javaturk.org

www.selso

ft.aca

demy

Page 100: 4. Bölüm Arayüzler (Interfaces) · ØÇünkü Java SE 1.8 ile artık arayüzlerde gerçekleştirme verilebilir! ØDolayısıyla bundan sonra aksi söylenene kadar arayüzleri,

JavaAPIArayüzStatikMetotlarıØJavaAPI’sindekistatikmetotlarasahiparayüzlere örnekolarakşunlarverilebilir:Øjava.util.Comparator

100www.javaturk.org

www.selso

ft.aca

demy

Page 101: 4. Bölüm Arayüzler (Interfaces) · ØÇünkü Java SE 1.8 ile artık arayüzlerde gerçekleştirme verilebilir! ØDolayısıyla bundan sonra aksi söylenene kadar arayüzleri,

ÖzetØBubölümde,birarayüz (interface)yapısıelealındı.

ØArayüzlerin yazılımıtasarımındanasılkullanılacağıincelendi.

ØÇoktipliyapılarelealındı.

Ø JavaSE8ilegelenyeniliklerincelendi.Ø Varsayılan(default)metotlarØ Statikmetotlar

101www.selsoft.academy

www.selso

ft.aca

demy

Page 102: 4. Bölüm Arayüzler (Interfaces) · ØÇünkü Java SE 1.8 ile artık arayüzlerde gerçekleştirme verilebilir! ØDolayısıyla bundan sonra aksi söylenene kadar arayüzleri,

102www.selsoft.academy

Ödevler

www.selso

ft.aca

demy

Page 103: 4. Bölüm Arayüzler (Interfaces) · ØÇünkü Java SE 1.8 ile artık arayüzlerde gerçekleştirme verilebilir! ØDolayısıyla bundan sonra aksi söylenene kadar arayüzleri,

Ödevler IØ 3.Bölümuygulamalarındakurguladığınızyandakihiyerarşiyi,Studentbirarayüzolacakşekildedeğiştirin.

ØBudurumdaAbstractStudentisimliyenibirsoyutsınıfaihtiyaçduyulacağınıgözlemleyin.

103www.javaturk.org

www.selso

ft.aca

demy

Page 104: 4. Bölüm Arayüzler (Interfaces) · ØÇünkü Java SE 1.8 ile artık arayüzlerde gerçekleştirme verilebilir! ØDolayısıyla bundan sonra aksi söylenene kadar arayüzleri,

Ödevler IIØAşağıdasıralanmışfarklıyetkinlikleresahipmühendisleri(engineers)düşünün.Ø BloggerØ ParentØ TeamFanØ InstrumentPlayerØ JavaEnthusiast

ØButüryetkinliklerefarklıkombinasyonlarlasahipolannesnelerinasıloluşturacağınızıtartışın.ØÇözümünüzünsınıfdiyagramınıçizinvekodunuyazın.

104www.javaturk.org

www.selso

ft.aca

demy