4. bölüm arayüzler (interfaces) · ØÇünkü java se 1.8 ile artık arayüzlerde...
TRANSCRIPT
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
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
İç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
4www.javaturk.org
Tanımlar
www.selso
ft.aca
demy
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
İ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
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
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
9www.javaturk.org
Arayüz (Interface)
www.selso
ft.aca
demy
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
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
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
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
Worker.java veEmployee.javaØfactory1 paketi.
14www.javaturk.org
www.selso
ft.aca
demy
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
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
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
Test.javaØfactory1 paketi.
18www.javaturk.org
www.selso
ft.aca
demy
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
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
ArayüzveCan-Do- II
21www.javaturk.org
www.selso
ft.aca
demy
Doable.java vePayable.javaØcanDo paketi.
22www.javaturk.org
www.selso
ft.aca
demy
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
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
UygulamaØCelcius,FahrenheitveKelvinsıcaklıkderecelendirmesistemleriarasındadönüşümyapacakbiryapıyıarayüzkullanaraktasarlayın.
25www.javaturk.org
www.selso
ft.aca
demy
26www.javaturk.org
Arayüz ve Miras
www.selso
ft.aca
demy
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
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
Employee.javaØfactory2 paketi.
29www.javaturk.org
www.selso
ft.aca
demy
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
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
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
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
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
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
Months.java
36www.javaturk.org
www.selso
ft.aca
demy
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
Shape.javaØBuörnektebirShape hiyerarşisielealınmaktadır.
38www.javaturk.org
www.selso
ft.aca
demy
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
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
Worker.java veHardWorker.javaØorg.javaturk.oofp.ch03.interfaces.factory.extensionpaketi
41www.javaturk.org
www.selso
ft.aca
demy
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
ABiggerInterface.javaØorg.javaturk.oofp.ch04.extending paketi.
43www.javaturk.org
www.selso
ft.aca
demy
Uygulama- IØBirkurumticaretiniyaptığıürünlerleilgiliolarakyazılımsistemindeşöylebiryapıkurgulamıştır:
44www.javaturk.org
www.selso
ft.aca
demy
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
46www.javaturk.org
Tip Kavramı (Concept of Type)
www.selso
ft.aca
demy
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
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
Ç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
50www.javaturk.org
SeaPlane nesnesininkaç tipi vardır?
www.selso
ft.aca
demy
51www.javaturk.org
www.selso
ft.aca
demy
TestFlyer.javaØorg.javaturk.oofp.ch04.flyerpaketi.
52www.javaturk.org
www.selso
ft.aca
demy
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
54www.javaturk.org
Geri Çağırma Metotları (Callback Methods)
www.selso
ft.aca
demy
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
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
TimerExample.javaØorg.javaturk.oofp.ch04.callBack paketi.
57www.javaturk.org
www.selso
ft.aca
demy
58www.javaturk.org
İsimsiz Sınıflar (Anonymous Classes)
www.selso
ft.aca
demy
İ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
İ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
TimerExample.javaØorg.javaturk.oofp.ch04.anonymous.timer paketi.
61www.javaturk.org
www.selso
ft.aca
demy
İ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
MyApplication.javaØorg.javaturk.oofp.ch04.anonymous.event paketi.
63www.javaturk.org
www.selso
ft.aca
demy
İ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
İ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
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
AnonymousDoesClassTest.javaØorg.javaturk.oofp.ch04.anonymous.doer paketi.
67www.javaturk.org
www.selso
ft.aca
demy
İ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
İ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
WeirdAnonymousDoesClassTest.javaØorg.javaturk.oofp.ch04.anonymous.doer paketi.
70www.javaturk.org
www.selso
ft.aca
demy
71www.javaturk.org
Java SE 1.8 Yenilikleri
www.selso
ft.aca
demy
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
73www.javaturk.org
Varsayılan Metot (Default Method)
www.selso
ft.aca
demy
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
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
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
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
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
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
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
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
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
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
ÇokluMiras- IØEğerbirsınıfbirdenfazlaarayüzden mirasdevralırveoarayüzleraynıdefaultmetodasahipolurlarsaneolur?
84www.javaturk.org
www.selso
ft.aca
demy
Ç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
multipleInheritance Paketi
86www.javaturk.org
www.selso
ft.aca
demy
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
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
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
multipleInheritance.v2Paketi
90www.javaturk.org
www.selso
ft.aca
demy
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
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
JavaAPIArayüzVarsayılanMetotlarıØJavaAPI’sindevarsayılanmetotlarasahiparayüzlerdenbazılarışunlardır:
Øjava.util.CollectionsØjava.sql.Statement
93www.javaturk.org
www.selso
ft.aca
demy
94www.javaturk.org
Statik Metot (Static Method)
www.selso
ft.aca
demy
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
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
staticMethods Paketi
97www.javaturk.org
www.selso
ft.aca
demy
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
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
JavaAPIArayüzStatikMetotlarıØJavaAPI’sindekistatikmetotlarasahiparayüzlere örnekolarakşunlarverilebilir:Øjava.util.Comparator
100www.javaturk.org
www.selso
ft.aca
demy
Ö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
102www.selsoft.academy
Ödevler
www.selso
ft.aca
demy
Ö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
Ö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