4. Bölüm Arayüzler (Interfaces)

advertisement
y
ca
de
m
Java ile Nesne Merkezli ve Fonksiyonel
Programlama
w
w
w
.s
el
so
f
t.a
4. Bölüm
Arayüzler
(Interfaces)
Akın Kaldıroğlu
www.javaturk.org
Ocak2017
ca
de
m
y
Küçük Ama Önemli Bir Konu
Ø Budosyaveberaberindekitüm,dosya,kod,vb.eğitimmalzemelerinintüm
w
Ø
w
Ø
w
.s
el
so
f
Ø
t.a
Ø
haklarıSelsoft Yazılım,Danışmanlık,EğitimveTic.Ltd.Şti.’ne aittir.
Bueğitimmalzemelerinikişiselbilgilenmevegelişiminizamacıyla
kullanabilirsinizveisteyenlerihttp://www.selsoft.academy adresine
yönlendirip,bumalzemelerinengüncelhallerinialmalarınısağlayabilirsiniz.
Yukarıdabahsedilenamaçdışında,bueğitimmalzemelerinin,ticari
olsun/olmasınherhangibirşekilde,toplubireğitimfaaliyetindekullanılması,
buamacayönelikolsun/olmasınbasılması,dağıtılması,gerçekyada
sanal/Internetortamlarındayayınlanmasıyasaktır.Böylebirihtiyaçhalinde
lütfenbenimle,[email protected] adresindeniletişimegeçin.
Buvebenzerieğitimmalzemelerinekatkıdabulunmakyadadüzeltmeve
eleştirilerinizibanailetmekistersenizçoksevinirim.
BolJava’lıgünlerdilerim.
www.selsoft.academy
2
ca
de
m
y
İçerik
Ø Bubölümde şu konular ele alınacaktır:
Ø Arayüz (interface)tipi,
so
f
t.a
Ø Arayüzlerin gerçeklenmesi,
el
Ø Yazılımtasarımındaarayüzlerin kullanımı,
w
.s
Ø JavaSE8ile gelen yenilikler ve
w
Ø Geriçağırmametotları(callbackmethods)veisimsizsınıflar
w
(anonymousclasses)
www.selsoft.academy
3
y
ca
de
m
t.a
w
w
w
.s
el
so
f
Tanımlar
www.javaturk.org
4
y
ca
de
m
Interface- Arayüz Nedir?
Ø İki şeyin birbirleriyle iletişimde bulundukları ortama arayüz
(yadaarabirim)(interface)denir.
el
so
f
t.a
Ø Örneğin dil (language),yüz, mimikler, hareketler ve tavırlar
insanlar arası iletişimin ortamıdır,yani insanların
arayüzüdür.
w
w
w
.s
Ø Yazılımınnesneleridebirbirleriylearayüzleriüzerinden
iletişimdebulunurlar.
www.javaturk.org
5
y
ca
de
m
İmzaveArayüz(Tekrar)
el
so
f
t.a
Ø Birmetotun,isimveparametrelistesindenoluşanbilgisine
imza (signature)denir.
Ø Dönüşdeğerivefırlatılansıradışıdurumlarimzayadahil
değildir.
Ø Birmetotun,isim,parametrelistesi,dönüşdeğeritipive
fırlattığısıradışıdurumlardanoluşanbilgisinearayüz
(interface)denir.
w
.s
<niteleyici>* <dönüş tipi> <isim>(<Parametre>*) throws <exception>*
public double squared(double arg) throws IllegalArgumentException
w
w
public double squared(double arg) throws IllegalArgumentException
imza
(signature)
arayüz(interface)
www.selsoft.academy
6
ca
de
m
y
MetotArayüzü
t.a
Ø Metotarayüzü,ometodunneyaptığınıifadeedenbilgisidir.
Ø Arayüz,metodungörevininasılyaptığınıgösteren
gerçekleştirmesi(implementation)ilebirliktemetoduniki
parçasındanbirisidir.
Ø Gerekirsearayüzbilgisidokümantasyoniledesteklenir.
w
.s
el
so
f
/**
* 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.
*/
w
w
public double squared(double arg) throws IllegalArgumentException{
if(arg < 0)
throw new IllegalArgumentException(“Negative argument.”);
else
return Math.sqrt(arg);
}
www.javaturk.org
7
y
ca
de
m
NesneninArayüzü(Tekrar)
Ø Birnesneninsahipolduğumetotarayüzlerinintamamına,o
nesneninarayüzüdenir.
w
w
w
.s
el
so
f
t.a
Ø Dolayısıylanesnearayüzü,nesneninsınıfındatanımlanan
metotarayüzlerinintoplamıdır.
www.selsoft.academy
8
y
ca
de
m
t.a
w
w
w
.s
el
so
f
Arayüz (Interface)
www.javaturk.org
9
ca
de
m
y
Interface– Arayüz- I
t.a
Ø Arayüz (interface),enkısatanımıyla,tümmetotlarısoyut
olansınıftır.
Ø Arayüzlertanımlanırkeninterfaceanahtarkelimesi
kullanılır.
w
.s
el
so
f
Ø Arayüzlerinmetotlarıotomatikolarakhempublic hemde
abstract olur.
Ø Aşağıdakitanımlarbirbirlerineeşittirler.
w
public interface Worker{
public interface Worker{
public abstract void work();
}
w
}
void work();
www.javaturk.org
10
y
ca
de
m
Interface– Arayüz- II
w
.s
el
so
f
t.a
Ø Arayüz (interface)sadecearayüzsağlar,nedurumnede
gerçekleştirmesağlamaz.
Ø Bubirbeyazyalandır,dolayısıylaenazındanbunuşimdilik
böylekabuledelim.
Ø ÇünküJavaSE1.8ileartıkarayüzlerde gerçekleştirme
verilebilir!
Ø Dolayısıylabundansonraaksisöylenenekadararayüzleri,
JavaSE1.8ilegelenyeniliklerigözönünealmadan,hala
JavaSE1.7sürümündeolduğugibiişleyeceğiz.
w
w
Ø Yaniarayüzlerdeherhangibirgerçekleştirmeolamayacağını
farzedeceğiz.
www.javaturk.org
11
y
ca
de
m
Interface– Arayüz- III
t.a
Ø Arayüzdeki tümmetotlarabstract olmakzorundadırlar,
Ø Arayüzünmetotlarınagerçekleştirmeverilemez.
el
so
f
Ø Buyüzdenbuyapılarainterface (arayüz)denilmektedir.
Ø Arayüzlerbuanlamdasadeceform – şekil yani“ne’lik”
sağlayanyapılardır,içerikyani“nasıl’lık”sağlamazlar.
w
w
w
.s
Ø Arayüzlerin kurucusu (constructor)yokturvenesneside
oluşturulamaz.
www.javaturk.org
12
y
ca
de
m
Implementing AnInterface
so
f
t.a
Ø Bundandolayıbirsınıf,birarayüzünalttipiolurken
“implements”anahtarkelimesinikullanır.
Ø Yanibirsınıf,birarayüzüimplement eder(yerinegetiriryada
gerçekleştirir).
Ø Birarayüzü gerçekleştirmekdemek,metotlarınıoverride
ederekonlaragerçekleştirme(implementation)vermek
demektir. public interface Worker{
w
.s
}
el
void work();
w
w
public class Employee implements Worker{
void work(){ ... }
}
public class Boss implements Worker{
void work(){ ... }
}
www.javaturk.org
13
ca
de
m
y
Worker.java veEmployee.java
w
w
w
.s
el
so
f
t.a
Ø factory1 paketi.
www.javaturk.org
14
ca
de
m
y
ArayüzveMiras
so
f
t.a
Ø Arayüzler,sorumluluklaragerçekleştirme
sağlamadıklarından,kendilerindenbuarayüzleridevralan
altsınıfların,arayüzdeki tümmetotlaragerçekleştirme
vermelerigereklidir.
Ø Çünküarayüzdeki tümmetotlarsoyutturlar.
w
w
w
.s
el
Ø Aksitaktirde,yanialtsınıf,arayüzden devraldığıbirmetoda
bilegerçekleştirmevermezse,altsınıfınsoyut (abstract)
tanımlanmasıgereklidir.
Ø Çünküsınıfhalasoyutmetodasahiptir.
www.javaturk.org
15
y
ca
de
m
SözleşmeveYüklenici
Ø Arayüz,sorumluluklarınsıralandığıbirsoyutyapıdır.
Ø Birarayüzügerçekleştirenbirsınıf,arayüzdeki metotlarabirer
so
f
t.a
gerçekleştirmesağlamaklayükümlüdür.
w
.s
el
Ø Bu,arayüzünbirsözleşme (contract)yadaprotokol
(protocol),gerçekleştirensınıflarınisebireryüklenici
(implementor)olaraknitelendirilmesinedeizinverir.
w
w
Ø Aynıarayüzügerçekleştirensınıflar,aynısözleşmeyiyerine
getirenfarklıyüklenicilerdir.
www.javaturk.org
16
ca
de
m
y
ArayüzveIs-A
Ø Arayüzileonugerçekleştirensınıflararasındais-ailişkisi
tabiolarakvardır.
so
f
t.a
Ø Bundandolayıarayüzün,polymorphism,upcasting ve
downcasting açısından,sınıflardanhiçbirfarklıyoktur.
w
.s
el
Ø Birarayüz,kendisinigerçekleştirensınıflarınüsttipidir.
w
w
Ø Aralarındakitemelfark, soyutluk-somutlukspektrumundaki
yerleridir.
www.javaturk.org
17
ca
de
m
y
Test.java
w
w
w
.s
el
so
f
t.a
Ø factory1 paketi.
www.javaturk.org
18
y
ca
de
m
ArayüzveYetkinlikler
Ø Arayüzlerin“is-a”hiyerarşisindebirüsttipolarakgörülmesi
yanında,yetkinlikkazandırmasıdasözkonusudur.
w
.s
el
so
f
t.a
Ø Arayüzler,tanımladıklarısoyutdavranışlarilealtsınıflarına
yetkinlikkazandırırlar.
Ø Bunda,birsınıfınpekçokarayüzüyerinegetirmesiderol
oynar.
w
w
Ø Sınıfların,yerinegetirdikleripekçokarayüzilepekçok
yetkinliği(ability)kazandığıdüşünülür.
www.javaturk.org
19
y
ca
de
m
ArayüzveCan-Do- I
t.a
Ø Busebeplezamanzamanarayüzler,“able”sontakısıyla
isimlendirilirler:
Ø Budurumdaaltsınıflarilearayüzleriarasındakiilişki“cando”olarakdaokunabilir.
el
so
f
public interface Doable{
void doIt();
}
w
w
w
.s
public interface Payable {
double calculatePrice();
double calculateTax();
void pay(double price);
}
www.javaturk.org
20
y
w
w
w
.s
el
so
f
t.a
ca
de
m
ArayüzveCan-Do- II
www.javaturk.org
21
ca
de
m
y
Doable.java vePayable.java
w
w
w
.s
el
so
f
t.a
Ø canDo paketi.
www.javaturk.org
22
y
ca
de
m
Arayüzlerin Kullanımı
metotarayüzü sağlarlar.
w
w
w
.s
el
so
f
Ø Çünkü arayüzler sadece
t.a
Ø Arayüzler daha önce ifade ettiğimiz “programtoan
interface,notanimplementation”prensibinin uygulanması
için enidealyapıdırlar.
www.javaturk.org
23
ca
de
m
y
Calculator.java
Ø math paketi.
t.a
Ø İhtiyacagörefarklıtürdetekargümanlımatematiksel
fonksiyonlarasahipolabilenbirCalculator düşünün.
el
so
f
Ø Matematikselfonksiyonların,Calculator’e eklenebilmesi
(pluggable)nasılsağlanabilir?
w
w
w
.s
Ø “Programto interface,notanimplementation”prensibinin
uygulamasınıgözlemleyin.
www.javaturk.org
24
ca
de
m
y
Uygulama
w
w
w
.s
el
so
f
t.a
Ø Celcius,FahrenheitveKelvinsıcaklıkderecelendirme
sistemleriarasındadönüşümyapacakbiryapıyıarayüz
kullanaraktasarlayın.
www.javaturk.org
25
y
ca
de
m
t.a
w
w
w
.s
el
so
f
Arayüz ve Miras
www.javaturk.org
26
ca
de
m
y
PekÇokArayüzGerçekleştirme
Ø Birsınıfaynıandabirdenfazlaarayüzügerçekleştirebilir.
el
so
f
t.a
Ø Bununiçinsınıftanımlanırken,implements’tensonra
arayüzler virgülilelistelenir.
Ø Budurumdasınıfın,yerinegetirdiğiarayüzlerdendevraldığı
tümmetotlaragerçekleştirmevermesigerekir.
Ø Aksitaktirdeosınıfsoyut olmakzorundadır.
w
.s
public class Employee implements Worker, Schedulable{
void work(){ ... }
w
}
w
public schedule(){ ... }
www.javaturk.org
27
ca
de
m
y
PekÇokArayüzGerçekleştirme
t.a
Ø Birsınıfhembirsınıftanmirasdeviralırkenbiryadadaha
çokarayüzü yerinegetirebilir.
so
f
public class Employee extends Person
implements Worker, Schedulable{
el
public void live(){ ... }
w
.s
public void work(){ ... }
w
}
w
public schedule(){ ... }
www.javaturk.org
28
ca
de
m
y
Employee.java
w
w
w
.s
el
so
f
t.a
Ø factory2 paketi.
www.javaturk.org
29
y
ca
de
m
MirasaYenidenBakış
Budurumdahemarayüzhemdegerçekleştirmedevralınır:
— Üyedeğişkenlervemetotlar.
so
f
Ø
t.a
Ø Soyutsınıfvearayüzmekanizmalarındansonramirasile
ilgiliolarakşuayrımyapılabilir:
Ø Gerçekleştirmedevralma (implementationinheritance):Bir
sınıftan“extends”ilemirasdevralınmasıdır.
Ø Arayüzdevralma (interfaceinheritance):Birarayüzden
el
“implements”ilemirasdevralınmasıdır.
w
.s
Budurumdasadecearayüzdevralınır,hiçbirgerçekleştirme
devralınmaz,(enazındanşimdilikböylekabuledelim).
— Üyemetotlarınarayüzleri.
w
w
Ø
www.javaturk.org
30
ca
de
m
y
JavaAPIsindeki Arayüzler- I
w
w
w
.s
el
so
f
Ø Bazıları:
Ø java.lang.Comparable
Ø java.lang.Runnable
Ø java.util.Collection
t.a
Ø JavaAPI’sindepekçokarayüzvardır.
www.javaturk.org
31
ca
de
m
y
JavaAPIsindeki Arayüzler- II
w
.s
el
so
f
Ø Örneğin
Ø java.io.Serializable
Ø java.lang.Cloneable
Ø java.util.RandomAccess
t.a
Ø JavaAPI’sindekiarayüzlerdenbazılarındahiçmetotyoktur.
w
w
Ø Birarayüzde hiçmetotolmamasınasılaçıklanabilir?
www.javaturk.org
32
y
ca
de
m
ArayüzMetotlarınaErişim
Ø Arayüzmetotlarıpublic erişimesahiptirler.
so
f
t.a
Ø Dolayısıyla,bumetotlaraltsınıflardagerçekleştirilirkende
public olmakzorundadırlar.
w
.s
el
Ø Çünkümetotlaroverrideedilirken,dahakısıtlayıcıbirerişim
belirteciiletanımlanamazlar.
w
w
Ø Yerinegeçebilme(substitutability)özelliğiarayüzveonun
altsınıflarıiçindegeçerlidir.
www.javaturk.org
33
ca
de
m
y
Arayüz- Durum
Ø Arayüzler durum(state)dasağlamazlar.
t.a
Ø İlkbakıştabirarayüzde durumtanımlanıyormuşsanılır:
so
f
public interface Worker{
w
.s
}
el
String name = "Ahmet";
int year = 10;
w
w
Ø Amabualgıgeçicidir,
www.javaturk.org
34
y
ca
de
m
Arayüz– Sabiteler
w
w
.s
el
so
f
t.a
Ø 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üzlerisadecesabiteleri
toplayanbiryapıhalindekullanılmasınasebepolur.
Ø java.io.ObjectStreamConstants böylebirarayüzdür.
w
Ø Arayüzlerin buşekildekullanımınınalternatifienum tipidir.
www.javaturk.org
35
w
w
w
.s
el
so
f
t.a
ca
de
m
y
Months.java
www.javaturk.org
36
y
ca
de
m
Arayüz– SoyutSınıf
Ø Arayüzlerinbirdurumasahipolmamalarındandolayı,soyut
sınıflarsıklıklaarayüzlerinalttipleriolur.
w
w
w
.s
el
so
f
t.a
Ø Budurumdaarayüz hiyerarşininortakdavranışlarını
içeriken,soyutsınıfhiyerarşiiçingereklidurumusağlar.
Ø Soyutsınıfgeneldedeviraldığısoyutmetotlara
gerçekleştirmevermezsadeceset/get metotlarınısağlar,
Ø Bazensoyutsınıflarınarayüzden devraldıklarımetotlara
genel-geçerbirdavranışsağladığıdagörülür.
www.javaturk.org
37
ca
de
m
y
Shape.java
w
w
w
.s
el
so
f
t.a
Ø BuörnektebirShape hiyerarşisielealınmaktadır.
www.javaturk.org
38
y
ca
de
m
ArayüzveKurucular
t.a
Ø Arayüzlerinkurucularıyoktur.
Ø Bu,arayüzlerinhiçdurumsağlamıyorolmalarındandolayı
anlaşılabilir.
el
so
f
Ø Buyüzdenarayüzügerçekleştirensınıflarınkurucularında,
arayüzden kaynaklanansuper()çağrılarıbulunmaz.
w
w
w
.s
Ø Altsınıflarınkurucularındakisuper()çağrıları,miras
devraldığısınıflariçindir.
www.javaturk.org
39
ca
de
m
y
ArayüzlerArasındaMiras- I
so
f
t.a
Ø Arayüzlerdebirbirlerindenmirasdevralabilirler.
Ø Budurumdabirarayüz,kendisindenmirasdevraldığıdiğer
arayüzügenişletir(extends).
Ø Arayüzlerarasındakimirasilişkisindeextends anahtar
kelimesikullanılır.
el
Ø Budurumdaaltarayüzügerçekleştirensınıfın,arayüzün
devraldığımetotlaradagerçekleştirmevermesigerekir.
w
.s
public interface Worker{
void work();
}
w
w
public interface HardWorker extends Worker{
void workHard();
}
www.javaturk.org
40
ca
de
m
y
Worker.java veHardWorker.java
w
w
w
.s
el
so
f
t.a
Ø org.javaturk.oofp.ch03.interfaces.factory.extensionpaketi
www.javaturk.org
41
ca
de
m
y
ArayüzlerArasındaMiras- II
Ø Birarayüz,aynıandanbirdenfazlaarayüzden mirasdevir
alabilir.
w
w
w
.s
el
so
f
t.a
Ø Budurumdamirasalınanarayüzler,ard-ardavirgülile
ayrılaraksıralanır.
www.javaturk.org
42
y
ca
de
m
ABiggerInterface.java
w
w
w
.s
el
so
f
t.a
Ø org.javaturk.oofp.ch04.
extending paketi.
www.javaturk.org
43
ca
de
m
y
Uygulama- I
w
w
w
.s
el
so
f
t.a
Ø Birkurumticaretiniyaptığıürünlerleilgiliolarakyazılım
sistemindeşöylebiryapıkurgulamıştır:
www.javaturk.org
44
ca
de
m
y
Uygulama- II
w
w
.s
el
so
f
t.a
Ø Sonrasında bu kurumun iş yapışında aşağıdaki değişiklikler
olmuş ama var olan Productyapısının bunlara izin
vermediğ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 hediye verme (Product’ın
fiyatı 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.
w
Ø Çözümünüzünsınıfdiyagramınıçizinvekodunuyazın.
www.javaturk.org
45
y
ca
de
m
t.a
w
w
w
.s
el
so
f
Tip Kavramı (Concept of Type)
www.javaturk.org
46
ca
de
m
y
TipKavramı
Ø Programlamadillerindetip (type),alınabilecekdeğerler
kümesidir(setofpossible values).
so
f
t.a
Ø Java’dailkel (primitive)vekarmaşık yadareferans (complex
yadareference)tiplervardır.
w
.s
el
Ø Karmaşıktip ilebaşındabuyanakavramıylahepsomut
sınıflarıkastettik.
w
w
Ø Artık,tip olaraksomutsınıflaryanındasoyutsınıflarve
arayüzlere desahibiz.
www.javaturk.org
47
ca
de
m
y
TipSpektrumu
t.a
Ø Soyutvesomutolaraksınıflarilearayüzler
düşünüldüğünde,birtipspektrumdanbahsedilebilir.
Ø Buspektrumdafarklıtiplerfarklıyerleresahiptirler.
el
class
w
.s
Concretion
so
f
Type Spectrum
abstract class
interface
implementing
w
w
inheriting
Abstraction
www.javaturk.org
48
ca
de
m
y
ÇokTipliYapılar
t.a
Ø Birhiyerarşide,somut-soyutsınıfvearayüzolarakbirden
fazlaüsttipesahipolanbirnesneninbirdenfazlatipivar
demektir.
el
so
f
Ø Venesne,otiplerinherbirisindenolanreferanslariletemsil
edilebilir.
w
w
w
.s
Ø Aynınesneninhangibağlamdahangitipiniortaya
koyduğunubelirleyenşeydeonesneyiobağlamdatemsil
edenreferanstır.
www.javaturk.org
49
y
ca
de
m
t.a
so
f
el
w
.s
w
w
SeaPlane nesnesinin
kaç tipi vardır?
www.javaturk.org
50
www.javaturk.org
51
w
el
w
.s
w
ca
de
m
t.a
so
f
y
ca
de
m
y
TestFlyer.java
w
w
w
.s
el
so
f
t.a
Ø org.javaturk.oofp.ch04.flyerpaketi.
www.javaturk.org
52
ca
de
m
y
Polymorphism
Ø Arayüzlerindemirashiyerarşisinekatılmasısayesinde,çok
tiplinesneleroluşturulabilir.
w
.s
el
so
f
t.a
Ø Nesneleringerçekleştirmesibirtanedir,odasınıfıdır.Ama
nesnelerinpekçoktipivardır.
Ø Busebeplebirsınıfınnesnesi,sahipolduğuhertipe
dönüştürülebilir(upcasting).
Ø Aynınesnebuşekildefarklıbağlamlardafarklıtiptegörünür.
w
Ø Buiseçokşekilliliğin (polymorphism)tanımıdır.
w
Ø Budurum,gerçekliğidahaiyiresmetmeyeyarar.
www.javaturk.org
53
y
ca
de
m
t.a
w
w
w
.s
el
so
f
Geri Çağırma Metotları (Callback Methods)
www.javaturk.org
54
y
ca
de
m
GeriÇağırma(CallBack)- I
so
f
t.a
Ø Yazılımsistemlerindesıklıkla,birbuttonuntıklanmasıyada
birkullanıcınınsistemikullanmayabaşlaması(login)gibi
bazıolaylarıntakibigereklidir.
Ø Buamaçlagenelolarak,olayınkaynağıolannesneye,olayın
olduğunubildirmesiiçinbirfonksiyongeçilir.
w
w
w
.s
el
Ø İlgilenilendurumoluştuğundadanesne,kendisinegeçilen
fonksiyonuçağırır.
Ø Bumekanizmayageriçağırma (callback),geriçağrılan
metodadageriçağırmametodu (callbackmethod) denir.
Ø Observer (event-notificationyadapublisher-subscriber)
tasarımkalıbıbuproblemiveçözümünütarifeder.
www.javaturk.org
55
ca
de
m
y
GeriÇağırma(CallBack)- II
so
f
t.a
Ø GeriçağırmayıJava’dakurgulamakiçinolayınkaynağına,
fonksiyondeğil,üzerindebelirlibirmetotolannesnegeçilir.
Ø ÇünküJavanesnemerkezlidirvenesnegeçilmesidurumuçok
dahagenişbirhareketalanısağlar.
w
.s
el
Ø Budurumdaolayınkaynağıolannesnenin,olayınolması
durumundahangimetoduçağıracağınıbilmesigerekir.
w
w
Ø BusebepleJava’dageriçağırmanesneleri,üzerindegenelde
birtanegeriçağırmametodubulunduranarayüzlerden
türetilir.
www.javaturk.org
56
y
ca
de
m
TimerExample.java
w
w
w
.s
el
so
f
t.a
Ø org.javaturk.oofp.ch04.callBack paketi.
www.javaturk.org
57
y
ca
de
m
t.a
w
w
w
.s
el
so
f
İsimsiz Sınıflar (Anonymous Classes)
www.javaturk.org
58
ca
de
m
y
İsimsizSınıflar
so
f
t.a
Ø Geneldegeriçağırmametotlarınınüzerindebulunduğu
sınıflarıntekkullanımlıkbirnesnesineihtiyaçduyulur.
Ø Yaniarayüzügerçekleştirensınıfınbirteknesnesineihtiyaç
vardırvebunesnesadecebiryerdekullanılır.
w
.s
el
Ø BudurumdaJava,arayüzüyerinegetirensınıfınisimsizbir
şekilde,hızlıcaoluşturulmasınavebununyapıldığıyerde
tekbirnesnesininyaratılıpkullanılmasınaizinverir.
w
w
Ø Buşekildeoluşturulansınıflaraisimsizsınıf(anonymous
class)denir.
www.javaturk.org
59
y
ca
de
m
İsimsizSınıflar- I
t.a
Ø İsimsizsınıflarsıklıklaolayları(event)yakalamada
kullanılırlar.
Ø Çünküçoğuzamanözelbirdurumaişaretedenolaynesnesi
sadecebiryerdeyakalanırvegereğiyapılır.
so
f
Timer t = new Timer(1_000, new ActionListener() {
});
w
.s
el
@Override
public void actionPerformed(ActionEvent e) {
...
}
w
w
Ø ÖrnektekiActionListener, sadece
actionPerformed() metodunasahipbirarayüzdür.
www.javaturk.org
60
y
ca
de
m
TimerExample.java
w
w
w
.s
el
so
f
t.a
Ø org.javaturk.oofp.ch04.anonymous.timer paketi.
www.javaturk.org
61
y
ca
de
m
İsimsizSınıflar- I
t.a
Ø YakalanansıklıklaGUIolaylarıdır..
Ø BenzerşekildeçoğuzamanbirGUIbileşeninin
durumundakibirdeğişikliğeişaretedenolaynesnesisadece
biryerdeyakalanırvegereğiyapılır.
so
f
button.setOnAction(new EventHandler<ActionEvent>() {
w
});
w
.s
el
@Override
public void handle(ActionEvent event) {
...
}
w
Ø ÖrnektekiEventHandler, sadecehandle() metoduna
sahipbirarayüzdür.
www.javaturk.org
62
y
ca
de
m
MyApplication.java
w
w
w
.s
el
so
f
t.a
Ø org.javaturk.oofp.ch04.anonymous.event paketi.
www.javaturk.org
63
y
ca
de
m
İsimsizSınıflar- II
t.a
Ø Sınıflar,tanımlamaya(classdeclaration)sahipoldukları
haldeisimsizsınıflarifadedirler(expression).
Ø İsimsizsınıfifadesi,birkurucuçağrısınabenzeramaiçinde
tekrartanımlanan(override)metotyadametotlarvardır.
w
w
w
.s
el
so
f
Ø İsimsizsınıflarhemarayüzlerigerçekleştirmedehemde
sınıflarıgenişletmedekullanılabilirler.
Ø İsimsizsınıflargeneldesadecebirmetotasahiparayüzleri
gerçekleştirmedekullanılmalarınarağmenbirdenfazla
metoduyenidentanımlayacakşekildekullanılabilirler.
Ø Olayyapılarındaçağrılacakmetotbirtaneolduğundan,
geneldetekmetodutekrartanımlamadakullanılırlar.
www.javaturk.org
64
y
ca
de
m
İsimsizSınıflar- III
Ø İsimsizsınıfifadesişöyledir:
Ø new operatörü,
Ø Gerçekleştirilecekarayüzünyadagenişletileceksınıfınismi,
t.a
Ø Sınıfbloğu.
so
f
Ø
new operatöründensonragelentipinsınıfolmasıdurumunda,
kurucuyageçilecekparametreler desıralanabilir.
Eğertiparayüzise,arayüzlerinkurucularıolmadığından,sanki
varsayılankurucuçağrılıyormuşgibiiçiboşikiparantezbulunur.
el
Ø
w
w
w
.s
Ø İsimsizsınıflarbirerifadeolduklarından,bloklarındabaşka
ifadelerolamaz,sadecemetotgibibaşkabloklarolabilir.
Ø İsimsizsınıfifadesi,arayüzgerçekleştirmesindenew
operatöründensonraarayüzünvarsayılankurucusunu
çağırıyorbirgörüntüyesahipolduğundantuhafgörünür.
www.javaturk.org
65
ca
de
m
void doIt();
y
public interface DoerInterface {
void doThat();
}
so
f
t.a
new DoerInterface(){
{
System.out.println(”Instance initializer block.");
}
w
.s
el
@Override
public void doIt(){
System.out.println(”I!ll always do it :)");
}
w
w
@Override
public void doThat(){
System.out.println("I’ll always do that :)");
}
}).doIt();
www.javaturk.org
66
ca
de
m
y
AnonymousDoesClassTest.java
w
w
w
.s
el
so
f
t.a
Ø org.javaturk.oofp.ch04.anonymous.doer paketi.
www.javaturk.org
67
y
ca
de
m
İsimsizSınıflar- IV
Ø İsimsizsınıflar,içindebulunduklarısınıfınüyelerine
erişebilir.
w
.s
el
so
f
t.a
Ø İsimsizsınıflar,içindebulunduklarıbloğunyerel
değişkenlerinefinal yadadeğerideğişmediği(effectively
final) hallerdeulaşabilir.
Ø Budurumdadayereldeğişkenideğiştiremez.
w
w
Ø İsimsizsınıflar,sabiteolmalarışartıylastatikalanlar
tanımlayabilirler.
www.javaturk.org
68
y
ca
de
m
İsimsizSınıflar- V
so
f
t.a
Ø İsimsizsınıflarayrıcaşunlarıtanımlayabilirler:
Ø Alanlar,
Ø Yerelsınıflar(localclasses),
Ø Üsttipindeolmayanmetotlar,
Ø Nesneilkdeğerblokları
w
w
w
.s
el
Ø İsimsizsınıflar,statikilkdeğeratamabloklarıileüye
arayüzlertanımlayamazlar.
www.javaturk.org
69
ca
de
m
y
WeirdAnonymousDoesClassTest.java
w
w
w
.s
el
so
f
t.a
Ø org.javaturk.oofp.ch04.anonymous.doer paketi.
www.javaturk.org
70
y
ca
de
m
t.a
w
w
w
.s
el
so
f
Java SE 1.8 Yenilikleri
www.javaturk.org
71
y
ca
de
m
JavaSE1.8Yenilikleri
so
f
t.a
Ø JavaSE1.8ilearayüzlere(interface)ikiciddideğişiklik
yapıldı.
Ø Budeğişikliklerşunlardır:
Ø default (varsayılan)metotlar,
Ø static metotlar
w
w
.s
el
Ø Buikitürmetotda,şuanakadarsöylenen“arayüzler
sadeceşekil/formsağlar,gerçekleştirmesağlamaz”
prensibinidelenyeniliklerdir.
w
Ø Buikidurumundaönemlisebeplerivardır.
www.javaturk.org
72
y
ca
de
m
t.a
w
w
w
.s
el
so
f
Varsayılan Metot (Default Method)
www.javaturk.org
73
y
ca
de
m
ArayüzveGerçekleştirme
Ø Dahaönce“Arayüzlersadeceform– şekilsağlayan
yapılardır,içeriksağlamazlar.” dendi.
so
f
t.a
Ø JavaSE8ilebirliktearayüzlerde ciddideğişiklikleryapıldı.
w
w
w
.s
el
Ø Budeğişikliklerdenikisiarayüzlerinsadeceşekilyanimetot
arayüzüdeğilaynızamandaiçerikyanigerçekleştirmede
sağlamasınaizinverdi.
www.javaturk.org
74
y
ca
de
m
ArayüzüGüncellemek
so
f
t.a
Ø Yazılankodlardabulunanarayüzlerin,tabiolarak,
sistemdekisınıflargibizamanzamandeğişmesigerekir.
Ø Birarayüze yenibirmetoteklendiğinde,oarayüzden miras
devralanbütünsınıflarınometodugerçekleştirmeleri
gerekir.
w
w
w
.s
el
Ø Budurumözelliklekütüphaneler(library)içinproblemlidir:
Ø Dünyayadağılmışolanbirkütüphanedekibirarayüze metot
eklemek,okütüphaneyikullananbütünkodlarıetkiler.
Ø Kullanıcılarınkütüphaneyiyenisürümeçekmeleri,oarayüzü
kullanansınıflara,yenimetotlarıeklemelerinigerektirir.
www.javaturk.org
75
ca
de
m
y
DefaultMethod–VarsayılanMetot- I
Ø JavaSE8ilebirliktearayüzlere defaultmethod (varsayılan
metot)eklemeimkanıgeldi.
w
.s
el
so
f
t.a
Ø Defaultmetot,“default”kelimesiyletanımlanırvearayüzde
birgerçekleştirmeyesahipolur.
default void newMethod(){
...
}
w
w
public interface Worker{
void work();
double calculateSalary();
}
public interface Worker{
void work();
double calculateSalary();
}
www.javaturk.org
76
ca
de
m
y
DefaultMethod–VarsayılanMetot- II
t.a
Ø Dolayısıyla,eklenenvedefault olaraktanımlananyeni
metodun,arayüzünaltsınıflarındagerçekleştirilmesine
gerekkalmaz.
w
w
w
.s
el
so
f
Ø Diğertümmetotlargibivarsayılanmetotlardadaimapublic
olaraktanımlıdırlar.
www.javaturk.org
77
y
ca
de
m
Binary Compatibility- I
t.a
Ø Varsayılanmetot,birarayüzünün eskisürümünükullanan
biryapıyla,yenisürümüarasındakiuyumluluğubozmamak
üzereçıkarılmışbirözelliktir.
w
w
w
.s
el
so
f
Ø Binary compatibility (ikili?uyumluluk),eskidenbirlikte
çalışanikiyapıdanbirisinindeğişmesinerağmen,yeni
sürümünündiğeryapıylahalauyumlubirşekilde
çalışabilmesinedenir.
Ø Yaniuyumluluk,derlenmişyapılar,.classdosyaları
seviyesindedir.
www.javaturk.org
78
y
ca
de
m
Binary Compatibility- II
t.a
Ø Eğerbirprojedekibirarayüze yenibirmetotekledikten
sonraderleyipprojedeeklerseniz,varolanyapılar,arayüzün
yenisürümüyleçalışmayadevamedeceklerdir.
el
so
f
Ø Amaoyapılar,arayüze eklenenyenimetodu
kullanamayacaklardır.
w
w
w
.s
Ø Bunabinary compatibility denir.
www.javaturk.org
79
y
ca
de
m
TestCompatibility.java - I
so
f
1. Sürüm
t.a
Ø FootballPlayer arayüzünün 1.sürümüileçalışan
AverageFootballPlayer veTestCompatibility,
FootballPlayer’a yenibirmetoteklenmesiyleoluşan2.
sürümüiledeçalışmayadevameder.
w
.s
el
public interface FootballPlayer{
void play();
}
2. Sürüm
public interface FootballPlayer{
void play();
void behaveEthically();
}
w
w
public class TestCompatibility {
public static void main(String[] args) {
FootballPlayer player = new AverageFootballPlayer();
player.play();
}
}
www.javaturk.org
80
y
ca
de
m
SourceCompatibility
so
f
t.a
Ø Biröncekiörneksource compatibility (kaynak
uyumluluğu)sağlamaz, çünküyenilenenarayüzükullanan
yapılartekrarderlenirse,varolanmetoduimplement
etmelerigerekir.
el
Ø Varsayılanmetotlar,budurumiçingeliştirilmişlerdir.
w
w
w
.s
Ø Eğeryenieklenenmetotvarsayılanmetotise,buyeni
metodun,altsınıflartarafındangerçekleştirilmesinegerek
kalmaz.
www.javaturk.org
81
y
ca
de
m
TestCompatibility.java - II
t.a
Ø AmaTestCompatibility,FootballPlayer’a yenieklenenbir
metoduAverageFootballPlayer nesnesiüzerindeçağıramaz,
çünküAverageFootballPlayer tekrardanderlenmelidir.
w
w
w
.s
el
so
f
Ø AverageFootballPlayer sınıfı,yenieklenenmetodu
gerçekleştirmedentekrarderlenebilirçünküyenieklenen
metotvarsayılanmetottur.
www.javaturk.org
82
y
ca
de
m
NedenVarsayılanMetot?
t.a
Ø Varsayılanmetot,birarayüzüneskisürümünükullananbir
yapıyla,yenisürümüarasındakaynakuyumluluğusağlamak
üzereçıkarılmışbirözelliktir.
w
.s
el
so
f
Ø Arayüzünyenisürümündegelenyenimetotlarınvarsayılan
metotolaraktanımlanmasıhalinde,oarayüzleri
gerçekleştirensınıflarıneklenenyenimetodu
gerçekleştirmelerinegerekkalmaz.
w
w
Ø Budurumarayüzüilegerçekleştirensınıflararasında“geriye
dönükuyumluluk”(backward compatibility)sağlar.
www.javaturk.org
83
ca
de
m
y
ÇokluMiras- I
w
w
w
.s
el
so
f
t.a
Ø Eğerbirsınıfbirdenfazlaarayüzden mirasdevralırveo
arayüzleraynıdefaultmetodasahipolurlarsaneolur?
www.javaturk.org
84
ca
de
m
y
ÇokluMiras- II
Ø BudurumJava’daderlemehatasıverir.
so
f
t.a
Ø Budurumada“diamond problem”yada“deadly
diamond ofdeath”denir.
w
w
w
.s
el
Ø Java’dabuhatayıçözmenintekyoluvardır:
Ø Altsınıfındevraldığıdefault metoduimplement etmesi
www.javaturk.org
85
w
w
w
.s
el
so
f
t.a
ca
de
m
y
multipleInheritance Paketi
www.javaturk.org
86
ca
de
m
y
Seçenekler
Ø Dolayısıylavarsayılanmetodasahipbirarayüzden miras
devralmakisteyenbirsınıfınönündeşuüçdurumvardır:
t.a
Ø Varsayılanmetoduolduğugibidevralıp,overrideetmemek,
so
f
dolayısıylavarsayılangerçekleştirmeyikullanmak,
el
Ø Varsayılanmetoduabstract olaraktekrartanımlayıp,abstract
w
.s
birsınıfolmak,
w
w
Ø Varsayılanmetoduoverrideetmek.
www.javaturk.org
87
ca
de
m
y
SoyutMetotDefaultGerçekleştirme
so
f
t.a
Ø Birarayüz,diğerarayüzden extends ilemirasyoluyla
devraldığıbirmetodagerçekleştirmeveriponudefault
olaraktanımlayabilir.
Ø Buşekildesoyutolarakdevralınanmetot,devralan
arayüzde gerçekleştirilmişolur.
public interface Artist {
el
void play();
w
.s
}
public interface Actor extends Artist{
w
w
default void play(){
System.out.println("Actor plays!");
}
}
www.javaturk.org
88
ca
de
m
y
DefaultGerçekleştirmeSoyutMetot
t.a
Ø Birarayüz,diğerarayüzden extends ilemirasyoluyla
devraldığıbirdefault metodutekrardefault yaabstract
olaraktanımlayabilir.
public interface Artist {
so
f
default void play(){”Artist plays!"}
el
}
w
.s
public interface Musician extends Artist{
void play();
w
}
w
public abstract class Pianist implements Musician{
}
www.javaturk.org
89
w
w
w
.s
el
so
f
t.a
ca
de
m
y
multipleInheritance.v2Paketi
www.javaturk.org
90
y
ca
de
m
GaripBirDurum!
so
f
t.a
Ø Davranışlarıntamolaraktanımlandığı(definition)yer
değildir,davranışlararayüzlerde tanıtılır,sınıflarda
tanımlanır.
Ø Buyüzdenbuyapılara,sadecearayüzsağladığıiçin“arayüz”
yada“interface”denir.
w
w
w
.s
el
Ø Amayukarıdakidurumdatanımlamayıyapanarayüzdür,
tanıtımıyapanisesınıf!
Ø “play()”metoduArtistarayüzünde tamolarak
tanımlanıyoramahiyerarşininenaltındakiPianist sınıfıise
aynıdavranışıtanıtıyor,yaniüsttipiolanMucisian
arayüzünden abstract olarakdevralıyoramabir
gerçekleştirmevermiyor.
www.javaturk.org
91
ca
de
m
y
BirNokta
Ø java.lang.Object sınıfındaki(hashCode(),
toString() vb.)metotlaraslabirarayüzüzerinde
t.a
varsayılanolantanımlanamaz.
el
so
f
Ø Eğerböyleolsaydı,oarayüzüntümaltsınıflarındabu
gerçekleştirmekullanılırdı.
w
w
w
.s
Ø Amabumümkündeğildir,mümkünolanbumetotları
hiyerarşininüstündeki sınıftaoverrideetmekvealt
sınıflarınaynenkullanmasınaizinvermektir.
www.javaturk.org
92
ca
de
m
y
JavaAPIArayüzVarsayılanMetotları
Ø JavaAPI’sindevarsayılanmetotlarasahiparayüzlerden
bazılarışunlardır:
t.a
Ø java.util.Collections
w
w
w
.s
el
so
f
Ø java.sql.Statement
www.javaturk.org
93
y
ca
de
m
t.a
w
w
w
.s
el
so
f
Statik Metot (Static Method)
www.javaturk.org
94
y
ca
de
m
Arayüzde StatikMetot- I
t.a
Ø JavaSE8ilebirliktearayüzüzerindestatikmetot
tanımlanabilir.
Ø Bununiçinyine“static”anahtarkelimesikullanılır.
void print();
so
f
public interface Printable {
w
.s
el
default void format(){
System.out.println("Printable is being formatted.");
}
w
}
w
static void startPrinting(){
System.out.println("Printing has been started.");
}
www.javaturk.org
95
y
ca
de
m
Arayüzde StatikMetot- II
Ø Diğertümarayüzmetotlarıgibistatikmetotlardadaima
public olaraktanımlıdırlar.
w
w
w
.s
el
so
f
t.a
Ø Arayüzüzerindekistatikmetotlararayüzü genişleten
arayüzleryadagerçekleştirensınıflartarafından
devralınmazlar,buyüzdenstatikmetotlarsadecevesadece
tanımlandığıarayüzüzerindeçağrılırlar.
www.javaturk.org
96
y
w
w
w
.s
el
so
f
t.a
ca
de
m
staticMethods Paketi
www.javaturk.org
97
y
ca
de
m
NedenStatikMetot?- I
Ø JavaSE8’ekadarstatikmetotlarsadecesınıflarda
tanımlanabilirdi.
w
.s
el
so
f
t.a
Ø Buyüzden,arayüzlerde ifadeedilensoyutnesne
metotlarınayardımcımahiyettekiaraçsal metotlar(utility
methods),ancakaraçsal sınıflarda(utility classes)statik
olaraktanımlanırdı.
Ø Projelerdeaşırımiktardastatikmetodasahipolanaraçsal
w
w
sınıflarçokyaygındır.
Ø Butüraraçsalsınıflarınbirliktelikleri(cohesion)düşük,
bağımlılıkları(coupling)iseyüksekolmaktadır.
www.javaturk.org
98
y
ca
de
m
NedenStatikMetot?- II
so
f
t.a
Ø Örneğin
Ø java.util.Collection arayüzüveCollections
araçsal sınıfı.
Ø java.nio.file.Path arayüzüvePaths araçsal sınıfı.
Ø java.util.Arrays araçsal sınıfı.
el
Ø Arayüzlerde tanımlanabilenstatikmetotlarlabudurum
ortadankalkacaktır.
w
w
w
.s
Ø Statikmetotlarartıkarayüzlerüzerindebulunabilecektir.
Ø Buşekildestatikmetotlarınazsayıdakiaraçsalsınıf
üzerindetoplanmasıengellenecekvemoduleryapılar
kurgulanabilecektir.
www.javaturk.org
99
ca
de
m
y
JavaAPIArayüzStatikMetotları
w
w
w
.s
el
so
f
t.a
Ø JavaAPI’sindekistatikmetotlarasahiparayüzlere örnek
olarakşunlarverilebilir:
Ø java.util.Comparator
www.javaturk.org
100
ca
de
m
y
Özet
Ø Bubölümde,birarayüz (interface)yapısıelealındı.
t.a
Ø Arayüzlerin yazılımıtasarımındanasılkullanılacağıincelendi.
so
f
Ø Çoktipliyapılarelealındı.
w
w
Ø
Varsayılan(default)metotlar
Statikmetotlar
w
.s
Ø
el
Ø JavaSE8ilegelenyeniliklerincelendi.
www.selsoft.academy
101
y
ca
de
m
t.a
w
w
w
.s
el
so
f
Ödevler
www.selsoft.academy
102
t.a
so
f
el
Ø 3.Bölüm
uygulamalarında
kurguladığınız
yandaki
hiyerarşiyi,
Student bir
arayüzolacak
şekildedeğiştirin.
Ø Budurumda
ca
de
m
y
Ödevler I
w
.s
AbstractStudent
w
w
isimliyenibir
soyutsınıfaihtiyaç
duyulacağını
gözlemleyin.
www.javaturk.org
103
ca
de
m
y
Ödevler II
w
.s
el
so
f
t.a
Ø Aşağıdasıralanmışfarklıyetkinlikleresahipmühendisleri
(engineers)düşünün.
Ø Blogger
Ø Parent
Ø TeamFan
Ø InstrumentPlayer
Ø JavaEnthusiast
w
w
Ø Butüryetkinliklerefarklıkombinasyonlarlasahipolan
nesnelerinasıloluşturacağınızıtartışın.
Ø Çözümünüzünsınıfdiyagramınıçizinvekodunuyazın.
www.javaturk.org
104
Download