1. bölüm nesne-merkezli programlamaya giriş sınıflar ......akın kaldıroğlu kasım 2015 java...
Post on 26-Jan-2021
22 Views
Preview:
TRANSCRIPT
-
Akın Kaldıroğluwww.javaturk.org
Kasım2015
Java ile Nesne Merkezli ve Fonksiyonel Programlama
1. BölümNesne-Merkezli Programlamaya
Giriş: Sınıflar, Nesneler ve Tekrar Kullanım
www.selsoft.academy
-
KüçükAmaÖnemliBirKonuØ Budosyaveberaberindekitüm,dosya,kod,vb.eğitimmalzemelerinintüm
haklarıAkınKaldıroğlu’naaittir.Ø Bueğitimmalzemelerinikişiselbilgilenmevegelişiminizamacıyla
kullanabilirsinizveisteyenlerihttp://www.javaturk.orgadresineyö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,akin@javaturk.orgadresindeniletişimegeçin.
Ø Buvebenzerieğitimmalzemelerinekatkıdabulunmakyadadüzeltmeveeleştirilerinizibanailetmekistersenizçoksevinirim.
Ø BolJava’lıgünlerdilerim.
2www.javaturk.orgwww.selsoft.academy
-
İçerikØBubölüm,nesne-merkezliprogramlamanınentemelkavramlarınabirgiriştir:ØSoyutlama(abstraction)ØSınıfvenesne(classand object)ØSınıfınbileşenleri:Üyedeğişkenlervemetotlar(membervariablesand methods),kurucular(constructors)
ØNesnebaşlatmaØSarmalama (encapsulation),bilgisaklama(informationhiding)veerişimniteleyiciler(access modifiers)
ØBileşim(composition)vekalıtım(inheritance)Ø java.lang.Object sınıfıvemetotları
3www.javaturk.orgwww.selsoft.academy
-
4www.javaturk.org
Soyutlama
www.selsoft.academy
-
SoyutlamaØSoyutlama,birşeyin,sahipolunanbakışaçısıitibariyle,enönemliözellikleriniönplanaçıkarırken,önemliolmayanözelliklerinibastırmaktır,görmezdengelmektir:ØÖnemliolanözellikler,genelolarakoşeyidiğerşeylerdenayırtedenunsurlardıryadaana,asliözelliklerdir,
ØAyırtediciolmayanlaraiseikincilyadaariziözelliklerdenir.
ØZihnimizkarşılaştığıhernesneyitektekalgılamakyerine,nesneleri,karekteristiközellikleriylealgılar,sonradayazihindevarolankavramsalbirkategoriyleörtüştürüryadaböylebirkategoriyoksa,bunesnedenyolaçıkarakyenibirkategorioluşturur.
5www.javaturk.orgwww.selsoft.academy
-
NedenSoyutlama?ØÇünküzihnimizbuhaliylesoyutlamayapmadanbirnesneyitümyönleriylekavrayamaz.
ØDolayısıylasoyutlama,birindirgemedir,basitleştirmediryadagenellemedir.
ØSoyutlamalar,birbebeğindünyayıalgılamaşeklindeapaçıkgörülür:ØKöpek:4ayaklı,havlayanvekuyruğunusallayancanlı
6www.javaturk.orgwww.selsoft.academy
-
İstanbulMetroHaritası
7www.javaturk.orgwww.selsoft.academy
-
"Ne"likve"Nasıl"lıkØSoyutlamalar,birşeyin"ne"liğiüzerineyoğunlaşır,"nasıl"lıküzerineeğilmez.
ØYanitemelözellikleri,oözelliklerinoluşumundan,nasılmeydanageldiğindenbağımsızolarakelealır:ØAraba’yıalgılamakiçin,motoryapısınıbilmeyegerekyoktur,ØYadabirinsanlaortaklıkkurmakiçinonunDNAdizilerinibilmeyedegerekyoktur.
8www.javaturk.orgwww.selsoft.academy
-
SınıflandırmaØZihin,sonsuzsayıdasoyutlamaileuğraşır,ØVebusoyutlamalarlaeldeedilengenellemelerbirerkategorioluşturur,
ØSoyutlamayıyönlendirenilgialanlarıyadakriterlerçerçevesindekategorioluşturmayasınıflandırma(classification)denir.
ØBöylecenesneler,olgular,duygularvs.hepsibellisınıflaraaithalegelirler.ØSınıflar,kavramsalgenellemeleri,nesnelerisesınıflarıngerçekliktevarolanörneklerinioluşturur.
9www.javaturk.orgwww.selsoft.academy
-
SınıflandırmaÖrneği
10www.javaturk.org
Natural Objects
Plant Animal Mineral
Mammal Fish Bird Reptile Amphibian Insect
Dog Cow Monkey . . .www.selsoft.academy
-
11www.javaturk.org
Sınıf ve Nesne (Kavramsal)
www.selsoft.academy
-
SınıfveNesneØKonuşmalarımızda"Köpekdediğinsadıkolmalı."yada"Köpeklerçoksadıkhayvanlardır."diyorsak,komşununköpeğindenyadasokaktaazöncekarşılaştığımızköpektendeğildekavramsalolarakköpeksınıfındanbahsediyoruzdemektirvesöylediklerimiz,varolmuşveolacakbütünköpekleriçingeçerlidir.
Ø"Komşununköpeğiçoksadık."dediğimizdeiseköpeksınıfınınbirörneğiyadanesnesiolan,soyutolmayıpsomutolanbircanlıdanbahsediyoruzdemektir.
Ø İlkdurumda"köpek"birsınıfı,"komşununköpeği”nde iseköpekbirnesneyi(objectyadainstance)temsileder.
12www.javaturk.orgwww.selsoft.academy
-
Nesne(Object)ØNesne,insanzihnininalgıladığıherhangibirkavramsalyadafizikselşeydir:ØÖğrenciler, derslere devamediyorlar.ØÖğretmen,sınıfta öğrencileri dinliyor.ØDersler yarınbaşlıyor.
ØNesnelerinözelliklerivardırvebuözellikler,nesnelerindurumlarını (state)ve davranışlarını (behavior)ifadeeder:ØSarıboyalısınıftaöğrencişiirokuyor.ØKırmızı topsuyayuvarlandı.
13www.javaturk.orgwww.selsoft.academy
-
SınıfIØSınıf,benzernesnelerinkategorisidir.Ø Sınıf,nesneleriçinbirkalıptır,şablondur,yanikendisindenüretilecekolannesnelerinsahipolacağıözellikleriledavranışlarıtarifeder.
ØSınıf,nesnelerininözelliklerideğişiktiplerdedeğişkenlerleyadabirbaşkadeyişleveriyapılarıyla(datastructures),davranışlarınıisemetotlarla (method)(fonksiyon(function)/prosedür(procedure))ifadeeder.
ØNesneninözelliklerininbütününedurum (state),metotlarınbütününedearayüz (interface)denir.
14www.javaturk.orgwww.selsoft.academy
-
SınıfIIØBöylece,aynısınıftanüretilennesneleraynıtipteolurlar,yani:ØAynıözellikleresahiptiramaözelliklerindeğerlerideğişebilir,ØAynıdavranışlarasahiptir,
Ø Davranışlargeneldedurumabağlıolduğundan,farklıdurumdakinesnelerindavranışlarıdafarklıolur.
15www.javaturk.orgwww.selsoft.academy
-
YazılımınNesnesiØYazılımınnesnesiisegerçekdünyadaki,kavramsalyadafiziksel,birnesneyitemsiletmeküzere,onunözelliklerinivedavranışlarınıifadeedenyapıdır:
ØYazılımınnesnesi,temsilettiğigerçekdünyadakinesnenindurumunu,sınıfındatanımlanandeğişkenlerle,davranışlarınıdametotlarla yerinegetirir.
ØYaninesne,sınıfınınifadeettiğisoyutyapınınhayatbulmuş,gerçekleşmişhalidir.
16www.javaturk.orgwww.selsoft.academy
-
DurumØNesnelerindurumu iledahaçokdurağan(static),görülenvehissedilen,özelliklerikastedilirveprogramlamadillerindefarklıtiplerdebirgrupdeğişkenileifadeedilir.
ØNesnenindurumunuoluşturanherbirayrıkbilgiyeiseözellik (attribute) denir:
ØÖğrenciØ No,isim,soyisim,doğumtarihi,cinsiyet,adres,bölüm,aldığıdersler,vs.
ØDersØ No,isim,bölüm,verenkişi,kredisayısı,vs.
17www.javaturk.orgwww.selsoft.academy
-
DavranışØNesnelerdavranırlar,hareketederler,belliişleriyerinegetirirler.
ØYazılımnesnelerinindavranışlarına,yerinegetirdiğisorumluluk (responsibility), verdiğihizmet (service)yadaaldığımesaj (message)olarakbakmak,işimizikolaylaştırır:ØÖğrenci
Ø KayıtolurØ DersalırØ Sınavagirer,vs.
ØDersØ Öğrencininkaydolmasına/bırakmasınaizinverirØ Önşartderslerihakkındabilgiverir, vs.
18www.javaturk.orgwww.selsoft.academy
-
MesajlaşmaØBirnesneşu4şekildenbiriilebirsorumlulukyerinegetirir:
ØNesne,kendidurumuhakkındabilgiverir,ØNesne,kendidurumunudeğiştirir,ØNesne,birişiyadafaaliyetiyerinegetirirvezorunluolmamaklabirliktebufaaliyetsonucundabizebirşeylergeriverir,
ØNesne,bizimondanistediğimizi,birbaşkanesneyehavaleeder:Ø Havaleedilennesnebuseferyukarıdaki3durumdanbirisiyleistenileniyerinegetirir.
ØNesnelerinbirbirlerindenbirsorumluluk/hizmetyerinegetirmesiniistemeyemesajlaşma (messaging)denir.
19www.javaturk.orgwww.selsoft.academy
-
Nesne-MerkezliYazılımØNesne-merkezliyazılımsistemiise,birbirleriylemesajlaşanvebuşekildeişsüreçleriniyerinegetirenbirgrupnesnedenbaşkabirşeydeğildir.
ØNesneler,yazılımsistemininyerinegetireceğisorumluluklarıpaylaşırlaröylekiherbirnesne,temsilettiğikavramlailgilisorumluluklarıyerinegetirir.
20www.javaturk.orgwww.selsoft.academy
-
21www.javaturk.org
Sınıf ve Nesne (Mekanizma)
www.selsoft.academy
-
SınıfØSınıf,kendisindenüretileceknesnelerinkalıbıdır-şablonudur.ØAynısınıftanüretilennesnelerintipi,aynıdır.
ØSınıf,nesnelerininözelliklerini (attributes)vedavranışlarını(behavior)tanımlar.ØNesnelerinözellikleri,değişkenlerle (variables),ØNesnelerindavranışlarıisemetotlarla (methods)tanımlanır.
ØNesneninözelliklerininbütününedurum (state),metotlarınbütününedearayüz (interface)denir.
22www.javaturk.orgwww.selsoft.academy
-
Java’daSınıfTanımlamaI(Tekrar)
ØSınıfıntanımı,Java’daengenişblokolansınıfblokuylayapılır.
ØSınıfın,sıfıryadadahafazlaniteleyicisi(modifier)olabilir.ØSınıfın,geçerliveanlamlıbirismiolmalıdır.
23www.javaturk.org
* class {***
}
ØJava’dasınıftanımlamakiçinclass anahtarkelimesikullanılır:
www.selsoft.academy
-
Java’daSınıfTanımlamaII(Tekrar)ØKurucu yadayapılandırıcı (constructor),nesneyaratırkençağrılanözelbirmetotdur.
ØZorunluolmamaklabirliktesınıfınöğeleri,fizikselolaraksınıfiçinde,özellikler,kurucular vemetotlar olaraksıralanır.ØÖzellikler,farklıtiplerdeolannesne değişkenleridir(instancevariables).
ØMetotlarisenesnelerinsorumluluklarınıyerinegetirennesnefonksiyonlarıdır(instancemethods).
24www.javaturk.orgwww.selsoft.academy
-
ArabaØBir"Araba"soyutlamasıyapın.
ØSoyutlamadabulunmasıgerekendavranışlarnelerdir?Ø GitmekØ DurmakØ HızlanmakØ vs.
ØSoyutlamadabulunmasıgerekendurumbilgilerinelerdir?Ø MarkaØ ModelØ YılØ Hız
25www.javaturk.orgwww.selsoft.academy
-
26www.javaturk.org
public class Car {String make;String model;String year;int speed;int distance;
public Car(String make, String model, String year, int speed, int distance) {this.make = make;this.model = model;this.year = year;this.speed = speed;this.distance = distance;
}
public void go(int newDistance){distance += newDistance;
}
public void accelerate(int newSpeed){speed = newSpeed;
}
public void stop(){speed = 0;
}
public String getInfo(){return "Car Info: " + year + " " + make +...;
}} ww
w.selsoft.academy
-
Car.java veTest1.java
27www.javaturk.orgwww.selsoft.academy
-
DeğişkenlerinRolleri(Tekrar)ØJava’dadeğişkenler,basitolsunreferansolsun,fonksiyonellikyadarolaçısındanüçeayrılırlar:ØNesnedeğişkenleri (instance (object)variables):Nesnenindurumunuoluşturandeğişkenlerdir.
ØSınıf değişkenleri (class variables):Nesnelerinortakdurumunuifadeedendeğişkenlerdir.Değerlerinesnedennesneyedeğişmez.
ØYerel değişkenler (local variables):Geçicideğişkenlerdir.Ø İlkikisineüyedeğişkenleri (membervariables), veriüyeleri(datamembers)yadaalanlar (fields)denirvesınıfblokundatanımlanır.
ØBubölümdeöncenesnevesınıfdeğişkenlerinielealacağız.28www.javaturk.org
www.selsoft.academy
-
NesneDeğişkenleriØNesnedeğişkenleri(instancevariablesyadafields),fonksiyonelolarak,nesneninözellikleriniifadeederler.ØNesnedeğişkenleri,yapısalolarakreferansdeğişkeniolabildiğigibibasitdeğişkendeolabilir.
ØNesnedeğişkenleri,sınıfıniçindeamametotyadabaşlatmabloğu(initializer block)gibiherhangibiraltblokdışında,herhangibiryerdetanıtılmalıdır,Ø Geneldesınıfınenbaşındatanıtılırlar.
ØNesnedeğişkenleriilkdeğerlerinitanıtılırkenalabildiklerigibidahasonrabirmetotiçinde,geneldekurucumetottadaalabilirler.
ØTanımlanacaknesnedeğişkenisayısındabirkısıtlamayoktur.
29www.javaturk.orgwww.selsoft.academy
-
NesneYaratmakIØNesneyaratmakdörtadımdagerçekleşir:
ØTanıtım(Declaration):Önceyaratılacaknesneyigösterecekreferansdeğişkenitanıtılır.
ØYaratma(Instantiation):İkinciadımdanew anahtarkelimesikullanılaraknesneyaratılır.new operatörü,nesneyaratıldığında,onugösterenbirreferansıgeriyedöndürür.
ØBaşlangıçdurumunagetirme(Initialization):Kurucuçağrısıyapılarak,nesne,başlangıçdurumunagetirilir.
ØAtama(Assignment):Başlangıçdurumunagetirilennesneninreferansı,kenditipindenbirreferansdeğişkenineatanır.
30www.javaturk.org
Car car = new Car();
www.selsoft.academy
-
ÖzelliklereErişimØYaratılannesneninözelliklerine vedavranışlarınanesneninreferansıyoluylaerişilir.
ØErişim"."notasyonuylaolur:
31www.javaturk.org
reference.attributereference.method()
car.speed = 60;System.out.println(car.speed);car.go(100)
www.selsoft.academy
-
NesneveReferansØNesnevereferans,farklıkavramlardır.
Ø İkisinindetipivardır.ØNesne,sınıftantüretilenvebirdurumavebirgrupdavranışasahipolup,heapisimlibellekalanındayaşayanyapıdır.
ØReferansise,nesneyeulaşmamızısağlayanvebellektebulunanbirdeğişkendir.
ØBirreferans,zamanınfarklıanlarında,kenditipindenfarklınesnelerigösterebilir.ØFakatbirandasadecetekbirnesneyigösterir.
ØBirnesneyebirdenfazlareferansolabilir.ØBazenreferansolmadannesne,bazendenesneolmadanreferansvardır.
32www.javaturk.orgwww.selsoft.academy
-
Car.java veTest2.java
33www.javaturk.orgwww.selsoft.academy
-
MetotØJava’dabirmetotunbeşanaparçasıvardır:
Ø İsim:Anlamlıvegeneldeemirkipindebirisim.ØParametreler (parameters): Dışarıdangeçilenparametreler.ØDönüşdeğeritipi (returntype):Çağrıldığıortamadöndüreceğideğerintipi.
ØKod (body,implementation):İfadelerdenoluşançalışankısım.
ØNiteleyiciler (modifiers):Farklıamaçlariçindeğişikniteleyicianahtarkelimelerikullanılabilir.
34www.javaturk.org
* (*){*
} www.selsoft.academy
-
GerçekveFormalParametrelerØGerçekparametre(actualparameter),metotçağrıldığındaonageçilenparametreleredenir.ØGerçekparametreleredahasıklıklaargüman dadenir.
Ø Formalparametre(formalparameter),metottanımındaolanparametreleredenir.
ØKarşılıkgelengerçekparametrelerileformalparametrelertipbakımındanuyumluolmalıdır.ØOtomatikyükseltmelerçevirme(cast)operatörüneihtiyaçduymadanyapılır.
ØDönüştürülebilengerçekparametreleriçinçevirme (cast)operatörükullanılmalıdır.
35www.javaturk.orgwww.selsoft.academy
-
Calculator.java
36www.javaturk.orgwww.selsoft.academy
-
OverloadingØBirisim,birsınıftakibirdenfazlametottakullanılabilir.
ØBudurumaçoklukullanım(overloading)denir.
ØOverloadedilenmetotlarınparametrelistesi,sayıve/veyatipbakımındanfarklıolmalıdır.ØBirsınıftaimzasıaynıolanikitanemetotolamaz.
ØOverloading,genelde,aynıişifarklıparametrelerleyapanmetotlariçinkullanılır.ØSystem.out.println()metotları
37www.javaturk.orgwww.selsoft.academy
-
CalculatorOverloaded.java
38www.javaturk.orgwww.selsoft.academy
-
KurucuIØNesneoluşturulurkençağrılanözelmetotakurucu/yapılandırıcı (constructor)denir.
ØKurucumetotlar,bazıaçılardanözelmetotlardırvesadecenesneoluşturukençağrılırlar.
ØKurucular,new anahtarkelimesiylekullanılırlar.Ø Java’dakurucuçağrısıyapmadanoluşturulabilensadece2tipvardır:Stringvedizi(array)
ØDiğerhertürlünesne,ancakveancakkurucuileoluşturulur.ØKurucumetotlarıilenesnenindurumununilkhalinialmasısağlanır.
ØBuamaçlakurucumetotlarparametretanımlayabilirvebudurumdaonlaradeğergeçilir.
39www.javaturk.orgwww.selsoft.academy
-
KurucuIIØKurucununismi,içindetanımlandığısınıfınismiyleaynıolmalıdır.
ØKurucunundönüştipi,dolayısıyladadönüşdeğeriyoktur.
ØKurucularoverloadedilebilirler.ØBudurum,farklınesneoluşturmaşekillerinekarşılıkgelir.
ØHiçbirargümanalmayankurucuyavarsayılankurucu(defaultconstructoryadano-argconstructor)denir.
ØArgümanalankurucularaakıllıkurucu(smartconstructor)denir.
40www.javaturk.orgwww.selsoft.academy
-
Car.java veTest3.java
41www.javaturk.orgwww.selsoft.academy
-
UygulamaØDahaönceoluşturduğunuzCircle(yadaDaire)isimlisınıfaikitanekurucukoyun:ØVarsayılankurucuyarıçapı10olanbirCirclenesnesioluşturur.
ØArgümanalankurucuisegeçilendeğeri,yarıçapaatar.
ØSonraCircleTest(yadaDaireTest)sınıfında,buikikurucuileoluşturulannesnelerinizinalanveçevrelerinihesaplayıpekranabasın.
42www.javaturk.orgwww.selsoft.academy
-
KurucularınBirbirleriniÇağırmalarıØKurucular,bazenyapacaklarıişi,diğerkurucularınyardımıylayapabilirler.
ØBudurumdakurucularınbirbirleriniçağırmalarıgerekir.ØBuise"this"anahtarkelimesiileyapılır.
43www.javaturk.org
public TreeWithThis(String newType, float newHeight) {type = newType;height = newHeight;
}public TreeWithThis(String newType) {
type = newType;height = 1.0f;
}public TreeWithThis(float newHeight) {
type = "Pine";height = newHeight;
} www.selsoft.academy
-
TreeWithThis.javaØthis ile,aynımetotlardaolduğugibi,imzasıuyankurucumetotçağrılır.
Øthisçağrısı,birkurucudailkçalışansatırolmalıdır.Neden?
44www.javaturk.org
public TreeWithThis(String newType, float newHeight) {type = newType;height = newHeight;
}public TreeWithThis(String newType) {
this(newType, 1.0f);}public TreeWithThis(float newHeight) {
this("Pine", newHeight);} ww
w.selsoft.academy
-
UygulamaØDahaönceoluşturduğunuzCircle(yadaDaire)isimlisınıftakivarsayılankurucuyayapacağıızdeğişiklikle,onunthis(...)çağrısıile,argümanalankurucuyuçağıraraknesneoluşturmasınısağlayın.
45www.javaturk.orgwww.selsoft.academy
-
this AnahtarKelimesiØthis,anahtarkelimeolarakgenelolarakşu2yerdekullanılır:
ØKurucuyadabirnesnemetotunda,aynıisimdebiryereldeğişkenolduğunda,nesnedeğişkenineulaşmakiçin.ØBudurum,geneldeaynıisim,hemnesnehemdeyereldeğişkendekullanıldığındasözkonusuolur.
ØBöylebirdurumyoksathiskullanmayadagerekyoktur.
46www.javaturk.org
public class Tree{String type;float height;public Tree(String type, float height){
this.type = type;this.height = height;
} } ww
w.selsoft.academy
-
this AnahtarKelimesiIIØHerhangibirsebeple,üzerindemetotunüzerindeçağrıldığınesneyeulaşmakiçin.
47www.javaturk.org
public class Tree{String type;float height;
public Tree grow(){height++;return this;
} }
www.selsoft.academy
-
UygulamaØDahaönceoluşturduğunuzCircle(yadaDaire)isimlisınıftakikurucularageçilenparametreleri,nesnedeğişkenleriyleaynıisimdeyapınvekurucuiçindekiatamlardanesnedeğişkenlerineulaşmakiçin"this"referansınıkullanın.
ØBenzerşeyisetmetotlarıiçindeyapın.
48www.javaturk.orgwww.selsoft.academy
-
ParametreGeçmeØJava’daparametreler,değerleri ile geçilirler(pass-by-value).
ØBirmetodabirbasitdeğişkengeçilirken,parametrenindeğeri,gerçekdeğişkenindeğeriolarakbelirlenir,
ØBenzerşekildegeçilenbirnesneise,budurumdaonesneninreferansınındeğeri,parametredeğeriolarakbelirlenir.(Aslında“nesnegeçme”ifadesidoğrudeğildir,çünkühiçbirzamannesneyedoğrudanulaşamayız,sadecereferansınaulaşabiliriz.Dolayısıylageçilennesnedeğil,referansıdır.)Referansındeğeriisezatennesneninadresidir.
ØDolayısıyla,herhalükardageçilenşey,gerçekargümanındeğeridir.
49www.javaturk.orgwww.selsoft.academy
-
ObjectPassing.java
50www.javaturk.orgwww.selsoft.academy
-
51www.javaturk.org
static
www.selsoft.academy
-
static AnahtarKelimesiØHernesnebellekte,kendidurumunuifadeedendeğişkenkümesinesahiptirvebukümedebulunandeğişkenlerindeğerleri,diğernesnelerdekilerdenbağımsızolarakdeğiştirilebilir.ØÜyeveriler(datamembers)
ØBazennesnelerinöyleözellikleriolurkideğerinesnedennesneyedeğişmez,bütünnesneleriçinaynıdır.ØBudurumdaobilgiyi,hernesnedeayrıayrısaklanacakşekildenesnedeğişkeniolaraktanımlamakuygundeğildir.
ØBuşekilde,aldığıdeğerinesneyebağlıolmayandeğişkenler"static"anahtarkelimesiylenitelendirilirler.
52www.javaturk.orgwww.selsoft.academy
-
static DeğişkenlerØStatikdeğişkenler,nesnedenbağımsızolduklarındannesnelerindeğil,nesnelerinsınıflarının parçasıdırlar.
ØBuyüzden,static olaraknitelendirilendeğişkenleresınıfdeğişkenleri (classvariables) dedenir.
ØStatikdeğişkenlerinsadecebirkopyasıvardır,odasınıftadır.
ØSınıfdeğişkenlerinehemsınıfhemdenesnelerüzerindenerişilebilinir.ØUygunolansınıfüzerindenerişmektir;çünkünesneüzerindenerişildiğinde,nesnedeğişkeniizlenimivermektedir.
53www.javaturk.orgwww.selsoft.academy
-
staticMetotlarØSınıflar,statikdeğişkenlergibistatikmetotlaradasahipolabilirler,ØBunlaradastatikmetotlardenir.
ØStatikmetotlardastatic değişkenlergibisınıfınbirparçasındırlar,ØHemsınıfhemdenesneüzerindeçağrılabilirler.
Ø Uygunolansınıfüzerindenerişmektir.
54www.javaturk.orgwww.selsoft.academy
-
StaticDemo.java
55www.javaturk.orgwww.selsoft.academy
-
NeZamanstatic?IØStatiközellikler,sınıfınbirparçasıolduklarından,çağrılmalarıiçinbirnesneyeihtiyaçyoktur.
ØDolayısıylaeğerbirbilgibirsınıftanoluşturulannesnelerindurumununbirparçasıolup,değerinesnedennesneyedeğişmiyorsa,birbaşkadeğişle,değeritümnesneleriçinherzamanaynıolacaksa,budeğişkenstatic yapılır.
ØBenzerşekildebirmetoteğerbirsınıfınstatikolandeğişkenlerinikullanıyor,nesnelerindeğişkenlerinikullanmıyoriseometotdastatic yapılır.
56www.javaturk.orgwww.selsoft.academy
-
NeZamanstatic?IIØZatenstatikmetotlardoğrudanancakstatikdeğişkenlereulaşabilir,nesnedeğişkenlerine,nesnesizolarakulaşamaz.
ØÇünküstatikmetotlarbirnesneyeihtiyaçduymazlarvebirnesneüzerindeçağrılsalarbilesınıfüzerindeçalışırlarvesadecesınıfdeğişkenlerineulaşırlar.
ØStatikmetotlariçinthis deyoktur.
57www.javaturk.orgwww.selsoft.academy
-
NeZamanstatic Değil?IØStatikkullanımı,tamamenmarjinalvesıradışıbirdurumdur.ØAslolandaimanesnedir,yaninesnedeğişkenlerivemetotlarıdır.
ØÇünkünesneler,problemimizimodellemeyeyararlar.ØStatikdeğişkenvemetotlarisebumodeldeçoközeldurumlardaortayaçıkarlarvekullanımlarıancakbuözeldurumlarahasolmalıdır.
ØNesneoluşturmanıngereksiz olduğudurumlarınçözümüstatic değildir.ØBudurumunçözümügereksiznesneoluşturmamaktır.
58www.javaturk.orgwww.selsoft.academy
-
NeZamanstatic Değil?IIØBirsınıftakitümdeğişkenlerivedolayısıyladametotlarıstaticyapmanınsebebiolsaolsaosınıftannesneoluşturmanınteorikvepratikolarakanlamlıolmamasıdır.Ø java.lang.Math sınıfındavarolanE vePI alanlarıiletümmetotlarstatiktir,çünküMath sınıfınınnesnelerininolmasıteorikaçıdanmuhaldir.Pratikaçıdandazatensınıfı,muhtemelteknesneolarakgörülebilir.
ØBenzerşekildejava.lang.System sınıfıdastatikalanvemetotlarasahiptir.
Ø İşalanınımodellemeyebirkatkısıolmayanutilitysınıflarından,çoğuzamanbusınıflarınnesnelerinioluşturmadan,statikmetotlarla,hizmetalırız.
59www.javaturk.orgwww.selsoft.academy
-
MainMetotØJava’dapekçoksınıfınızolsabileenazbirtanesimain isimliözelbirmetotasahipolmalıdır.
Ømain metotasahipolansınıfJVM’egeçilerekçalıştırılabilir.Ømainmetot,sisteminçalışmayabaşladığıyerdir.ØNeredetanımlandığınınpekönemiyoktur.
ØDolayısıyladiğersınıflarınnesneleribumetottaoluşturulurveüzerindekimetotlarburadaçağrılaraksistemçalışmayabaşlar.
Ømain metotunarayüzü(interface)aşağıdakigibidir:
60www.javaturk.org
public static void main(String[] args)www.selsoft.academy
-
UygulamaØBirsınıftankaçtanenesneoluşturulduğununasılbulursunuz?
ØBirsınıfyapınvebusınıfınherhangibirkurucusunuçağırarakoluşturulantümnesnelerisayın.
ØBusayıyıtutacakdeğişkeninnesnemiyoksasınıfdeğişkenimiolmasıgerekir?
61www.javaturk.orgwww.selsoft.academy
-
62www.javaturk.org
final
www.selsoft.academy
-
final AnahtarKelimesiØfinal anahtarkelimesiiledahaöncebirbasitdeğişkeninnasılbirsabitehalinegetirilebileceğinigörmüştük.
Ø final kullanılaraktanıtılanbasitdeğişkenlerindeğerideğiştirilemez.
63www.javaturk.org
final int i = 5;i = 8; // Compile-time error.
www.selsoft.academy
-
final ReferansØNesnelerdoğrudanfinal yapılamaz,ancaknesnelerinalanlarıfinal yapılabilir.ØBuşekildedurumudeğişmeyennesneeldeedilir.
ØReferansınfinal olmasınınanlamı,basitdeğişkenleregörebirazfarklıdır.
Øfinal referanslar,gösterdiklerinesnedenbaşkabirnesneyigösteremezler.
64www.javaturk.org
final Car c = new Car();c = new Car(); // Compile-time error.
www.selsoft.academy
-
final DeğişkenlerØfinal olandeğişkenin,basitolsunreferansolsun,tanıtıldığıyerdebirilkdeğeralmasınınzorunluolduğunubelirtmiştik.
ØBudurumunikiistisnasıvardır:ØTanıtıldıktansonra,ilkerişimdebirilkdeğervermekØKurucumetottabirilkdeğeratamakØBaşlatmablokundabirilkdeğeratamak(ileridegelecek)
ØYanifinal olandeğişkenlerekurucudayadailkulaşımdabirilkdeğeratarsanız,tanıtıldığıyerdeatamazorunluluğukalkar.
65www.javaturk.orgwww.selsoft.academy
-
FinalCar.java
66www.javaturk.orgwww.selsoft.academy
-
67www.javaturk.org
Başlatma (Initialization)
www.selsoft.academy
-
İlkDeğerAtamaØJava’daüyedeğişkenler(membervariables)içinilkdeğervermeaşağıdabelirtilen5yoldanherhangibirisiyleyapılabilir:ØTanımlamacümleleri(definitionstatements)ØKurucular (constrcutors)ØMetotçağrılarıØNesne (ilkdeğeratama)başlatmablokları(initializationblocks)
ØStatik (ilkdeğeratama)başlatmablokları (staticinitializationblocks)
68www.javaturk.orgwww.selsoft.academy
-
InitializersDemo.java
69www.javaturk.orgwww.selsoft.academy
-
BaşlamaSırasıIØBirsınıfta,pekçoksınıfvenesnedeğişkeni,ilkdeğeratamabloklarıvekurucularolduğunugözönünealındığında,budeğişkenlerinoluşturulmalarıvekurucularınçağrılmasıhangisıradaolur?
Ø InitializationOrder.java
70www.javaturk.orgwww.selsoft.academy
-
BaşlamaSırasıIIØBirsınıfailkdefaulaşıldığındaönceosınıfın.classdosyasıJVM’eyüklenir.ØBirsınıfaulaşmanınyollarıiseşunlardır:
Ø StatikbirdeğişkenineulaşmakØ StatikbirmetotunuçağırmakØ Nesnesinioluşturmakiçinkurucuçağrısıyapmak
ØDahasonrasınıfınstatikdeğişkenleribaşlatılır.ØSınıfınbirnesnesioluşturulmasabile,sınıfaulaşıldığındastatikdeğişkenleriyüklenirveilkdeğeratamasıyapılır.
ØDeğişkenlerinbaşlatılmasına,varsastatikbaşlatmabloklarıdadahildir.
71www.javaturk.orgwww.selsoft.academy
-
BaşlamaSırasıIIIØSonraeğersınıfınbirnesnesioluşturuluyorsa,nesnedeğişkenleridebaşlatılır.ØDeğişkenlerinbaşlatılmasına,varsanesnebaşlatmabloklarıdadahildir.
ØDahasonrakurucuçağrısıyapılır.ØHeryeninesneiçinbuişlemler,yaninesnedeğişkenlerininbaşlatılmasıvekurucuçağrısıtekrarlanır.
ØSınıfdeğişkenleri,nekadarnesneoluşturulursaoluşturulsun,sadecevesadecebirdefabaşlatılır.
ØFakatnesneoluşturulurken,herhalukarda,sınıfdeğişkenlerinesnedeğişkenlerindenöncebaşlatılır.
72www.javaturk.orgwww.selsoft.academy
-
BaşlamaSırasıIVØDolayısıylabaşlamasırası
ØSınıfdeğişkenleri(statikbaşlatmabloklarıdahil)ØNesneoluşturuluyorsa
Ø Nesnedeğişkenleri(nesnebaşlatmabloklarıdahil)Ø Kurucuçağrısı
şeklindedir.
ØBirdenfazlasınıfvenesnedeğişkeniolduğudurumdabaşlatmasırası,fizikselsıraylabelirlenir,öncegelenöncebaşlatılır.
73www.javaturk.orgwww.selsoft.academy
-
UygulamaØDahaönceyaptığınızUniversityuygulamasıüzerindebaşlamasırasınıtahminedin.
ØKurucularagerekeliprintifadeleriniyazarakbaşlamasırasınıgözlemleyin.
74www.javaturk.orgwww.selsoft.academy
-
nullIØnull,biranahtarkelimedir,sadecereferansdeğişkenlerineatanabilirvereferansınhiçbirnesneyigöstermediğiniifadeeder.Ønull’ıntipiyoktur,herreferanstipeatanabiliryadaçevrilebilir(cast).
ØYanireferansvardıramabellektekihiçbirnesneyeişaretetmiyordur.
ØBuşekildekireferanslara"nullpointer"denir.ØBellektekihiçbirnesneyigöstermeyenrefereranslarüzerindenherhangibirerişimdaima"NullPointerException"a sebepolur.ØÇünküerişilecekdeğişkenlerevemetotlarasahipbirnesneyoktur.
75www.javaturk.orgwww.selsoft.academy
-
nullIIØBirreferans,ikihaldenull olur:
ØReferanssadecetanımlanıpdaherhangibirnesneatamasıyapılmadığında,
ØReferansaözelolaraknull atandığında.ØNedenbirreferansanull atanır?
ØReferansilegösterdiğinesnearasındakiilişkikesildiğindevenihayetindebirnesneyigösterenhiçbirreferanskalmadığında,onesneÇöpToplayıcı(GarbageCollector)tarafındantoplanıpişgalettiğialandabelleğegerikazandırılır.
76www.javaturk.org
Car myCar; // null referencemyCar.make = "Mercedes" // NullPointerExceptionmyCar = new Car(); // Not a null reference anymoremyCar = null; // null referenceww
w.selsoft.academy
-
77www.javaturk.org
Organizasyon
www.selsoft.academy
-
KodOrganizasyonu:PaketlerØJava’daoluşturulansınıfları(vearayüzleri),mantıksalaçıdankategorizeetmek,bukategorilerarasındaerişimkurallarıkoymakveisimuzayıoluşturupçakışmalarıönlemekamacıylapaketlervardır.
ØPaket"package"anahtarkelimesiyleoluşturulur.ØHersınıftanımındanönceyazılacakbirpackage cümlesiyleopaketeaitolur.
78www.javaturk.org
package myPackage;
ya da
package org.javaturk.oofp.ch01.car;www.selsoft.academy
-
packageIØBirJavakaynakkodundaancakbirtanepaketifadesiolabilir.ØHersınıf,arayüzyadaenumın sadecebirtanepaketiolabilir.ØBirkaynakdosyasındabirdenfazlasınıf/arayüzvarsahepsiaynıpaketedahilolur.
Øpackage ifadesibirJavakaynakkodundaçalışanilkcümleolmalıdır.Øpackage ifadesindenönceboşlukveyorumsatırlarıolabilir.
ØPaketyapısı,.classdosyalarıiçingeçerlivegereklidir,.javakaynakkodlarıiçindeğil!
ØFakatgeneldekaynakkodlarıdapaketleriyledüzenlenir.
79www.javaturk.orgwww.selsoft.academy
-
packageIIØ İçiçepaketlerlepakethiyerarşisioluşturulabilir.
ØBöylecebirkökten(root)başlayarakdallananaltpaketlerle,çoksayıdasınıfvearayüzdenoluşanyapılar,anlamlıkategorizasyonavebunakarşılıkgelenfizikselorganizasyonasahipolur.
ØPaketler,işletimsistemindekidizinlere(directory)karşılıkgelir.ØDolayısıylaaynıpakettekiyapılaraynıdizindebulunurlar.
80www.javaturk.orgwww.selsoft.academy
-
package IIIØPaketinbirdiğeramacıdabirisimuzayı(namespace)oluşturarak,muhtemelçakışmalarıönlemektir.
ØBirprojedeyazılanbirkaçtanefarklıPrinter yadaDatesınıfının,birbileriyleyadasatınalınanbileşenlerdekiaynıisimdekisınıflarlakarışmasınıönlemeninyolu,herbirPrinter yadaDate sınıfınınapayrıpaketesahipolmasıdır.
ØBuamaçla,Internetdomainadresinitersindenkullanarakpaketleroluşturduğundaçakışmaolmayacaktır.
81www.javaturk.org
com.myCompany.myProject.mySubPackageorg.javaturk.ooporg.javaturk.advancedJavaorg.javaturk.javaeeorg.javaturk.dpww
w.selsoft.academy
-
TamİsimØBirpaketesahipolanbirsınıfıntamismi(fullyqualifiedname)artık"paket.sınıfİsmi" olarakdeğişmiştir.
ØJVM’e(java)geçilirkenartıktamismiylegeçilmesigereklidir.ØDahaöncedebelirtildiğigibibudurum .classdosyalarıyaniderlenmişsınıflariçingeçerlidir, .javadosyalarındakikaynakkodlariçingeçerlideğildir.
82www.javaturk.org
package shipping.domain; // Company.javajavac Company.java // Compilingjava shipping.domain.Company // Running
package shipping.gui; // MainMenu.javajavac MainMenu.java // Compilingjava shipping.gui.MainMenu // Runningww
w.selsoft.academy
-
PaketlerArasıErişimØAynıpaketlerdekiyapılarbirbirlerinedoğrudanerişebilirler.ØFarklıpaketlerdekiyapılarınbirbirlerinedoğrudanerişebilmeleri,ancaktamisimkullanmaklagerçekleşir:
83www.javaturk.org
package org.javaturk.oop.ch08.packaging.packageA;
public class ClassA {org.javaturk.oop.ch08.packaging.packageX.ClassX x;
public ClassA(org.javaturk.oop.ch08.packaging.packageX.ClassX x) {this.x = x;
}}
package org.javaturk.oop.ch08.packaging.packageX;
public class ClassX {}
www.selsoft.academy
-
import IØTamisimkullanarakerişiminsıkıntılıolduğuaçıktır:
ØBudurumdafarklıpaketlerdekiyapılarbirbirleriniimportederler.
Ø import cümlesi,Javakaynakkodundavarsapackagecümlesindensonragelir.
84www.javaturk.org
package org.javaturk.oop.ch08.packaging.packageB;
import org.javaturk.oop.ch08.packaging.packageX.ClassX;
public class ClassB {ClassX x;public ClassB(ClassX x) {
this.x = x;}
} www.selsoft.academy
-
import IIØBirkaynakkoddabirdenfazlayapıimport edilebilir.ØBudurumdayapılartektekimportedilebileceğigibi,"*"iletoptanimport edilebilir.Ø "*"ilealtpaketlerimport edilemez.
85www.javaturk.org
package org.javaturk.oop.ch08.packaging.packageB;
import org.javaturk.oop.ch08.packaging.packageX.ClassX;import org.javaturk.oop.ch08.packaging.packageX.ClassZ;// ya daimport org.javaturk.oop.ch08.packaging.packageX.*;
public class ClassB {ClassX x;ClassZ z;public ClassB(ClassX x, ClassZ z) {
this.x = x;this.z = z;
}} ww
w.selsoft.academy
-
PaketlerveDizinlerØPaketler,işletimsistemindekidizinlerekarşılıkgelir.ØDolayısıylabiryapınınpaketininorg.javaturk.oop.ch02olmasıörneğinWindowsişletimsisteminebiryerde fizikselolarakorg\javaturk\oop\ch02\ şeklindebirdizinyapısınınbulunduğunugösterir.
ØBelirtilenpaketesahipolansınıfın.classdosyasınınfizikselolarak,paketekarşılıkgelendizindeolmasışarttır.
ØBuşart .javakaynakkoduiçingeçerlideğildir.ØDolayısıylapaketaslındabirçalışmazamanıyapısıdırve.classdosyalarınıilgilendirir.Ø .javakaynakkodlarıtamamenfarklıbirdizinyapısındaolabilir.
86www.javaturk.orgwww.selsoft.academy
-
BirDizineDerlemekØJavakaynakkodlarıderlenirken"-d"seçeneğiilebirdizingeçilirse,javac,paketyapısınauygunolarak.classdosyalarınıbelirtilendizinekoyacaktır.
87www.javaturk.org
C:> javac –d C:\classes Bulp.java
package org.javaturk.oop.ch08;...public class Bulp{...}
www.selsoft.academy
-
UygulamaØAynıpaketyapısınıEclipseüzerindekurunveSelamTest’içalıştırın.
ØProjeninözelliklerinegiderekCLASSPATHayarlarınıgözlemleyin.
88www.javaturk.orgwww.selsoft.academy
-
JavaPaketleriØJava’dapekçokpaketesahiptir:
Ø java.langØ java.utilØ java.io
ØBupaketlerden java.langherJavakaynakkodunadaimaotomatikolarak import edilir.
ØJava’nınpaketleriveiçerikleri,JavaAPI’sinioluşturur.
89www.javaturk.orgwww.selsoft.academy
-
90www.javaturk.org
Sarmalama (Encapsulation)
www.selsoft.academy
-
Sarmalama(Encapsulation)IØVerinin,overiüzerindeçalışacakmetotlarlabirliktebiryapıaltındatoplanmasınasarmalama yadaencapsulationdenir.ØSarmalama, soyutlamayıtasarlanmışhalidir.
ØProgramlamadillerindeeskidenbuyana,soyutveriyapısı(abstractdatatype)yadakullanıcıtarafındanoluşturulmuşveritipi (user-defineddatatype)adlarıaltındavarolanbirkavramdır.
ØFakatbuyapılar,sarmalamaörneğiolmaklabirliktenesne-merkezlidillerin“nesne”kavramındanfarklıolarakdahateknikbirçıkışnoktasınasahiptirler.
91www.javaturk.orgwww.selsoft.academy
-
Sarmalama(Encapsulation)IIØNesne-merkezlidillerdeentemelsarmalamamekanizmasısınıftır(class).ØSınıflar,soyutlamalarıngerçekleştirildiğiyapılardır.
ØNesnelerisesoyutlamalarıngerçekörnekleri,sınıflarınnesneleridir.
ØSarmalamailebirsınıftanüretilecekolannesnelerinveriyapılarıiledavranışları,mantıksalbirbirimhalinegetirilir.
92www.javaturk.org
Soyutlama
Sarmalama
Sınıf
Somut
Soyut
www.selsoft.academy
-
BilgiSaklama(InformationHiding)IØBuyapıyasarmalama yadaencapsulation denmesininsebebi,buteknikilesarmalananyapınıniçmekanizmasınındışarıdansaklanmasıdır.
ØBudurum,bilgisaklama(informationhiding)ileifadeedilirvebazılarıncasarmalamanıniçindebirteknikolarakgörülürken,bazılarıncasarmalamayaek,tamamlayıcıbirteknikolarakelealınır.ØBazengerçekleştirmesaklama(implementationhiding)ilebirlikteanılır.
ØSarmalama,bilgisaklamaprensibiylebirlikte,birsınıfıniçyapısınıdışarıdansaklarken,arayüzüüzerindendışarıyayaniistemcilerinehizmetvermesinisağlar.
93www.javaturk.orgwww.selsoft.academy
-
BilgiSaklama(InformationHiding)IIØBağımlılığıdüşükveiçtutarlılığı(lowly-coupledandhighly-cohesive)yükseksınıflaroluşturmakiçinnesnemerkezlidillerdebilgivegerçekleştirmesaklamayı(informationandimplementationhiding)sağlayanerişimniteleyiciler(accessmodifiers)vardır.
ØBuyapılarsayesindesınıflarvesınıflarıniçyapıları,dışarıdandoğrudanerişimdensaklanabilir.
ØLaw ofDemeterhttp://en.wikipedia.org/wiki/Law_of_Demeter
94www.javaturk.orgwww.selsoft.academy
-
ErişimNiteleyiciler(AccessModifiers)Ø İkitürerişimniteleyicivardır:
ØSınıferişimniteleyicileriØÜyeerişimniteleyicileri
ØErişimniteleyicileriçinaşağıdakianahtarkelimelermevcuttur:ØpublicØprivateØprotected
95www.javaturk.orgwww.selsoft.academy
-
SınıfErişimNiteleyicileriØSınıflariçin2seviyelierişimsözkonusudur.ØBuikiseviyepublicanahtarkelimesininvaroluduğuveolmadığı2durumlabelirlenir:Øpublic:Publicsınıflaraheryerdenerişilebilir.
Ø publicsınıflar,kendiisminesahip .javakaynakdosyalarındabulunmalıdırlar.
ØVarsayılan (publickelimesiyok):Budurumdasınıfasadeceiçindebulunduğupakettenulaşılabilinir.Ø Buerişimepaketerişimi (package accessibility),varsayılanerişim(defaultaccessibility)yadaarkadaşçaerişim(friendly access)denir.
96www.javaturk.orgwww.selsoft.academy
-
ClassA.java,ClassXX.javaveClassZZ.java
97www.javaturk.orgwww.selsoft.academy
-
ÜyeErişimNiteleyicileriIØÜyelereerişimiçin4seviyevardır:
ØpublicØprotectedØVarsayılan (default),hiçbirniteleyicininkullanılmadığıdurumdur.
ØprivateØpublic olanüyelereheryerdenerişilir.Øprivate olanüyelere,sadeceiçindebulunduğusınıftanerişilir,dışarıdanerişimetamamenkapalıdır.
ØVarsayılan haldeerişimsadecepaketiçindekisınıflaraaçıktır.
Øprotected,devralanaltsınıflarcaerişimeaçıktır.
98www.javaturk.orgwww.selsoft.academy
-
ÜyeErişimNiteleyicileriII
Niteleyici Kendisi PaketiÇocukları
(Farklı Pakette)
Herkes (Farklı
Pakette)
public + + + +protected + + + -- (varsayılan) + + - -private + - - -
99www.javaturk.orgwww.selsoft.academy
-
ClassP.javaveClassA.java
100www.javaturk.orgwww.selsoft.academy
-
public,protected,VarsayılanveprivateØpublic:Genelolarakmetotlarpublic yapılır.Çünkümetotlarnesneninarayüzüdür.Ø static vefinal olandeğişkenlerdegeneldepublicolurlar.
Øprotected:Başkasınınulaşamayıp,sadecedevralansınıflarınulaşabilecekleriprotected yapılır.Øprotected,farklıpakettekidevralmayansınıflaraprivate’dır.
ØVarsayılan:Sadeceaynıpakettekilerinulaşabileceğişeyler,varsayılanerişimetabiolur.
Øprivate:Bütünüyeverilerlesadeceiççalışmaiçinoluşturulmuşmetotlarprivate yapılır.
101www.javaturk.orgwww.selsoft.academy
-
EncapsulatedElevator.java
102www.javaturk.orgwww.selsoft.academy
-
UygulamaØSadecebirnesnesiolansınıflara"singleton"denir.Budurumdabütünbilgivehizmetsadece,singletonolansınıfınvarolanteknesnesiüzerindenverilir.Bununiçindediğernesnelerintekolanbirnesneyeulaşmalarıgereklidir.
ØBirsınıftansadecebirnesneoluşturulabilmesiiçingerekliyapıyıkurunvedahafazlaoluşturulmasınıengelleyin.Sonradaoluşturulanbunesneyegenelbirerişimnoktasısağlayın.
ØSingleton sınıfyapmakyerinestatikmetotlarıolanbirsınıfyapmayıdüşünürmüsünüz?Tartışın.
103www.javaturk.orgwww.selsoft.academy
-
publicErişimveAPIØAPI,ApplicationProgrammingInterface’inkısaltmasıdır.
ØAPI,birsınıfınyadasistemin(bileşen,çerçevevs.)publicolanüyelerinedenir.ØMirasamacıylaprotectedolanüyelerdeAPI’yedahildirler.
ØAPI,biryazılımyapısınınarayüzüdür,tekiletişimnoktasıdır.
ØSınıflaryadasistemler,ancakarayüzleriyaniAPI’leriileulaşılırvehizmetalınır.
104www.javaturk.orgwww.selsoft.academy
-
ArayüzveGerçekleştirmeØ İyibirsoyutlama,sadecebasitbirkavramıyadafizikselnesneyisoyutlamalıdır.ØOşeyileilgilihertürlügereklibilgiyibilmelivesorumluluğuyerinegetirmeli,oşeyleilgiliolmayanhiçbirbilgiyibilmemelivesorumluluğuyerinegetirmemelidir.
ØSoyutlamalarınkarmaşıklaşmayabaşladığıhernoktadayenisoyutlamalaroluşturulmalıdır.
ØKarmaşıkbirsisteminhiçbirparçası,birdiğerparçanıniçyapısınabağımlıolmamalıdır.
ØNesnelerbirbirlerininarayüzlerinebağlıolmalılar,veriyapılarıilegerçekleştirmelerinebağlıolmamalıdırlar.
ØProgramtoaninterface,notanimplementation.
105www.javaturk.orgwww.selsoft.academy
-
106www.javaturk.org
API ve Java API’si
www.selsoft.academy
-
JavaAPIIØAPI,ApplicationProgrammingInterface’inkısaltmasıdır.ØJavaAPI’si,Java’nınsanalmakinasınınvestandartkütüphanelerininarayüzüdür:ØpublicveØprotected üyeleridir.
ØWindowsiçinJDKkurulumundakijre dizinindekilibdizinindekirt.jar dosyasındakiyapılarınarayüzleriniiçerir.ØSadeceJREkurulmuşsalib dizinindebulunur.
ØMaciçinJDK1.6’da"classes.zip”1.7’dert.jar’dır.ØJavaSEDocumentationolarakhttp://www.oracle.com/technetwork/java/javase/downloads/index.html adresindenindirilebilir.
107www.javaturk.orgwww.selsoft.academy
-
JavaAPIIIØJavaAPI’sindevarolanpekçoksınıfvebenzeriyapılar,tekerleğitekrardankeşfetmedenprogramlamayapmamızısağlarlar.
Ø İyibirJava’cı,JavaAPI’sinisıkveetkinbirşekildekullanır.
108www.javaturk.orgwww.selsoft.academy
-
JDKKaynakKoduØJavaSE’ninstandartuygulamasıolanJDKaçıkkaynakkodluolduğuiçinistenirseilgilisayfadanodaindirilebilir.
Øhttp://www.oracle.com/technetwork/java/javase/downloads/index.html
109www.javaturk.orgwww.selsoft.academy
-
UygulamaØJavaSE’nin API’siniInternet’tenindiripaçın.
ØJavaAPI’sindevarolanpaketleriveiçerikleriniinceleyin.
ØJavaAPI’sindeaşağıdakisınıflarıinceleyin:Øjava.lang.SystemØjava.lang.MathØjava.lang.String
110www.javaturk.orgwww.selsoft.academy
-
UygulamaIØJavaAPI’sindebulunanbirsınıfıkullanarak,birmetindegeçentümkelimeleribulun,yadaİngilizceolarak:
Ø Find allofthetokensinastringusingaclassfoundinJavaAPI.ØBununiçinJavaAPI’sindenbuişiçinjava.util paketindenuygunbirsınıfbulup,API’sinikullanarakuygunkurucuvemetotlarınnelerolduklarınıbelirleyin.a. Dahasonrabukurucuvemetotlarıçağırarakverilenbir
Stringnesnesininkelimelerinitektekbulupekranayazın.b. Dahasonraayıraçolarak‘a’harfinikullanarakString
nesnesiniparçalayın.c. Stringnesnesini,ayıraçolan‘a’harfinidebasacakşekilde
parçalayın.111www.javaturk.org
www.selsoft.academy
-
UygulamaIId. Daha sonra aynı şeyi java.langpaketindeki String sınıfı
ile yapın.
112www.javaturk.orgwww.selsoft.academy
-
113www.javaturk.org
Tekrar Kullanım (Reusability)
www.selsoft.academy
-
TekrarKullanım(Reusability)ØTekrarkullanım (reusability),varolanyazılımyapılarındanyararlanarak, legobloklarınıkullanırgibi,yeniyazılımsistemlerigeliştirmektir.ØTekrarkullanım,YazılımMühendisliği’ninnirvanasıdır.
ØAmayazılımların,soyut,aşırıkarmaşıkvedeğişimezorunludoğası,biryazılımyapısının,kendisiiçingeliştirildiğisistemdenbaşkabiryerdekullanılabilmesinisonderecezorlaştırmaktadır.
ØYinedenesnemerkezlidiller,entemelseviyedetekrarkullanımıamaçlayanmekanizmalarasahiptirler.
114www.javaturk.orgwww.selsoft.academy
-
FarklıSeviyelerdeTekrarKullanımØYazılımda,çokfarklışeylertekrarkullanımakonuolabilir:
ØMetotlar,tekrarkullanımınenbasitvesıkuygulandığıyapılardır.
ØSınıflarıntekrarkullanımıdahagenişolmaklabirliktedahazordur.
ØDahakarmaşıkolanbileşenler(components)veçerçeveler(frameworks)iletekrarkullanımçokdahayüksekseviyedeeldeediliramabaşarılmasıbirokadardazordur.
ØAyrıcaişsüreçlerianalizi,mimariyaklaşımlar,tasarım,testyapılarıvs.heptekrarkullanımakonudurlar.ØTasarım kalıpları,çoktipiktasarımtekrarkullanımınaörnektir.
115www.javaturk.orgwww.selsoft.academy
-
YeniBirSınıfØYenibirsınıfaihtiyaçduyulduğundaalternatiflerşunlardır:
ØPazardanbirtanesatınalmak,ØSıfırdanyazmak,ØVarolansınıflardanyararlanarakbileşik(composite)birsınıfoluşturmak,
ØVarolanbirsınıftandevralarakbiraltsınıf(sub-class)oluşturmak.
Ø İdealveaynızamandaenazmuhtemelolanilkseçenektir.Ø İlkbaştakolaygözüküpdeuzunvadedeensıkıntılıolanikinciseçenektir.
Ø3.ve4.seçeneklerisesırasıylatekrarkullanımın,bileşiknesneoluşturma(composition) vekalıtım (inheritance)şekilleridir.
116www.javaturk.orgwww.selsoft.academy
-
117www.javaturk.org
Bileşim (Composition)
www.selsoft.academy
-
BileşikNesnelerØNesnebirleştirme(objectcomposition),birdenfazlanesneyibirarayagetirilerekdahakarmaşıknesneleroluşturmaktır.ØBileşiknesneler (compositeobject)genelolarak,başkasınıflarınnesnelerini,nesnedeğişkeniolarakkendindebarındıranyapılardır.
ØBuilişkisahipolma(has-a)ilişkisiolarakifadeedilir.ØUnutulmamalıdırkisahipolma,referanslarüzerindengerçekleşmektedir.
ØNesnebirleştirmeilenesnelerarasındabirilişki(association)veaynızamandabirbağımlılık (coupling)oluşturulur.ØBudurum,nesnelerarasındakienyaygınilişkikalıbıdır.
118www.javaturk.orgwww.selsoft.academy
-
CarasACompositeObject
119www.javaturk.orgwww.selsoft.academy
-
120www.javaturk.org
public class Car {private String make;private String model;private String year;private int distance;private int speed;public Engine engine;private Transmission tx;private Door[] doors;private Wheel[] wheels;
public Car(..., int doorCount,...){engine = new Engine(...);tx = new Transmission(...);doors = new Door[doorCount];wheels = new Wheel[4];...}
public void start(){engine.start();
}...}
public class Engine{private String make;private int cc;private int horsePower;private int rpm;...
}
public class Door {private boolean closed;...
}
public class Wheel{private int size;...
}
public class Transmission {private boolean manual;...
}
www.selsoft.academy
-
CarTest.java
121www.javaturk.orgwww.selsoft.academy
-
BileşikNesneveBileşenlerØBileşiknesneler,bileşenlerindenhizmetalırlar:
ØBileşiknesne,kendisindenisteneni,bileşenlerindenhizmetalarakyerinegetirir.
ØBuna,yönlendirme (delegation)denir.
ØBileşiknesnelerinarayüzleri,bileşenlerindenbağımsızdır.ØBileşiknesne,bileşenlerininarayüzlerini toplayıp,farklıbirarayüzle kulanıma açar.
122www.javaturk.orgwww.selsoft.academy
-
BileşenlerinYaratılmasıØBileşiknesnelerde,bileşenlerinnezamanoluşturulacağıkararverilmesigerekenbirkonudur:ØTanıtıldığıyerdeyadakuruculardaoluşturulabilir.ØBirbaşkayerdeoluşturulupbileşiknesneyegeçilebilir.
Ø İlkdurumgenelolarakdahasıkı(composition),ikincidurumisedahagevşekbirilişkiyi(aggregation)ifadeedebilir.
123www.javaturk.orgwww.selsoft.academy
-
UygulamaØSelesi,önvearkatekerleğiilepedaltakımıolanbirbisikletsınıfıoluşturun.ØBisikletsınıfı,belirtilensınıflardannesnedeğişkenlerinesahipolmalıvekendisindenistenenhizmetlere,nesnedeğişkenleriyardımıylacevapvermelidir.
124www.javaturk.orgwww.selsoft.academy
-
125www.javaturk.org
Miras - Kalıtım (Inheritance)
www.selsoft.academy
-
MirasIØMiras yadakalıtım (inheritance),aralarındayapısalbenzerlikbulunannesneleriifadeetmektekullanılan,enyaygınikincitekrarkullanımkalıbıdır.
ØMiras, is-a (olma)yadais-like-a (gibi olma)ilişkisidir.ØKendisindenmirasalınansınıfaebeveyn (parent/base),mirasalansınıfaiseçocuk (child/sub-class)sınıfdenir.
ØTüretilenyadaçocuksınıf,ebeveyninden,mirasolarakalınabileceküyedeğişkenlerileüyemetotlarıdevralır.
ØDolayısıyla,çocuksınıflar,ebeveynlerine,durumvedavranışaçısındanbenzerler.
126www.javaturk.orgwww.selsoft.academy
-
MirasIIØMirasyapısınıkurmakiçinJava’daextends anahtarkelimesikullanılır:
127www.javaturk.org
public class Employee{protected int no;protected String name;protected int year;protected String department;...
}
public class Manager extends Employee{protected String departmentManaged;...
} www.selsoft.academy
-
Mirasİlişkisi- IØBuilişkiaşağıdakiokumaşekillerineimkanverir:
ØHerManager/BütünManagerlaraynızamandabirEmployee’dir.
ØHerManager/BütünManagerlarbirEmployeegibidirler.
ØÇocuksınıf,ebeveynindeprivate olanyapılarıdevralamaz, ancakprotected ,publicyadaaynıpaketteisevarsayılanolanlarıdevralır.
Øprotected olanüyedeğişkenlerhalendışdünyayakapalıdırlaramageneldepublic olanmetotlarherhalükardadevralınırlar.
128www.javaturk.orgwww.selsoft.academy
-
Mirasİlişkisi- IIØMirasilişkisiiletümdevralınabilecekolanebeveynüyeleri,çocuksınıflartarafındandevralınır:ØNesnedeğişkenlerivemetotlarıØSınıfdeğişkenlerivemetotları
ØEbeveyninkurucularıiseçocuklarıtarafındandevralınmaz.
129www.javaturk.orgwww.selsoft.academy
-
ÜyeErişimNiteleyicileriII(Tekrar)
Niteleyici Kendisi PaketiÇocukları
(Farklı Pakette)
Herkes (Farklı
Pakette)
public + + + +protected + + + -- (varsayılan) + + - -private + - - -
130www.javaturk.orgwww.selsoft.academy
-
InheritanceExample.javaØÖnce,aynı paketteki ParentClass1sınıfından devralmayısonra daotherPakage paketindeki ParentClass2sınıfındandevralmayı deneyin,protected olan üyelerin davranışınıgözlemleyin.
131www.javaturk.orgwww.selsoft.academy
-
132www.javaturk.org
Başlatma (Initialization)
www.selsoft.academy
-
MirastaBaşlatmaØHiyerarşidealttabulunanhersınıf,ebeveynindekibirkurucuyuçağırmakzorundadır.ØBuda“herçocuksınıfınnesnesininiçinde,gizlideolsabirebeveynnesnesivar”anlamınagelmektedir.
ØBirsınıfın,ebeveynindekibirkurucuyuçağırmasısuper()ileolur.
Øsuper()yoluylayapılankurucuçağrılarıhiyerarşininentepesindekisınıfakadardevameder.
ØDolayısıylaenöncehiyerarşininentepesindekisınıfınkurucusuçağrılırvenesnesioluşur.
ØBunundışındabaşlamasırasındadeğişenbirşeyyoktur.
133www.javaturk.orgwww.selsoft.academy
-
BaşlamaSırasıØDolayısıylabaşlamasırası,sınıfhiyerarşisindekienyukarıdakisınıftanaşağıyadoğruolur.HersınıftakibaşlamasırasıiseØSınıfdeğişkenleri(statikbaşlatmabloklarıdahil)ØNesneoluşturuluyorsa
Ø Nesnedeğişkenleri(nesnebaşlatmabloklarıdahil)Ø Kurucuçağrısı
şeklindedir.ØBirdenfazlasınıfvenesnedeğişkeniolduğudurumdabaşlatmasırası,fizikselsıraylabelirlenir,öncegelenöncebaşlatılır.
134www.javaturk.orgwww.selsoft.academy
-
InitializationOrder.java
135www.javaturk.orgwww.selsoft.academy
-
Kurucular(Constructors)ØMirassözkonusuolduğundakurucularlailgiliikiönemlinoktasözkonusudur:
ØKuruculardevralınmazlar.Ø Dolayısıylahertüretilensınıfkendikurucusunutanımlamakzorundadır.
ØHiyerarşidealttabulunanhersınıf,ebeveynindekibirkurucuyuçağırmakzorundadır.Ø Buda“herçocuksınıfınnesnesininiçinde,gizlideolsabirebeveynnesnesivar”anlamınagelmektedir.
136www.javaturk.orgwww.selsoft.academy
-
super()Çağrısı- IØBirsınıfın,ebeveynindekibirkurucuyuçağırmasısuper()ileolur.
Øsuper()çağrısıparametregeçmezse,ebeveyndekiargümansızkurucuçağrılmışolur.
Øsuper()çağrısıtabiolarakparametregeçebilir,budurumdaebeveyndekibirakıllıkurucuçağrılmışolur.ØTipikolarak,ebeveynintanımladığıdurumbilgisiçocuknesneoluşturulurkenkurucusunageçilirvebukurucudabudurumbilgisinisuper()ileebeveynindekiakıllıbirkurucuyageçerkiatamalarebeveyninkurucusundayapılsın.
ØÇocuknesneninkurucusunageçilenveonahasolandurumbilgisiiseebeveynegeçilmez.
137www.javaturk.orgwww.selsoft.academy
-
super()Çağrısı- IIØsuper()çağrısıiçindebulunduğukurucudailkçalışankodolmalıdır.ØDolayısıyla,çocuknesneoluşmadanönce,içindekigizliolanebeveynnesneoluşmalıdır.
138www.javaturk.orgwww.selsoft.academy
-
Employee,ManagerveDirector.javaØEmployee,ManagerveDirectorsınıflarınınkurucularınadikkatedin.
Øorg.javaturk.oop.ch09.factories.factory1.Test
139www.javaturk.orgwww.selsoft.academy
-
InitializationOrder.java
140www.javaturk.orgwww.selsoft.academy
-
141www.javaturk.org
Genişletme ve Yerine Geçebilme
www.selsoft.academy
-
GenişletmeØÇocuksınıflar,ebeveynlerindenmirasolarakdevraldıklarıyapılaraeklemeyapabilirler:ØÇocuksınıflar,genelolarak,ebeveynlerindeolmayan,yeniüyedeğişkenlereveyenimetotlarasahipolurlar.
Øextends anahtarkelimesizatenbugenişletmeyiifadeetmektedir.
ØBudurumdatüretilençocuksınıf,yeniüyedeğişkenlerledahazenginbiryapıya,yenimetotlarladadahagenişbirarayüze sahipolur.
142www.javaturk.orgwww.selsoft.academy
-
YerineGeçebilmeIØMirasilişkisindeçocuksınıfınarayüzü,enazındanebeveynininarayüzüdür.ØÇocuksınıflar,ebeveynlerinden devraldıklarıarayüze eklemeleryaparakdahagenişbirarayüzesahipolup,dahaçokişyaparhalegelselerbile,ebeveynlerinin arayüzünüdesteklemeyedevamederler.
ØBudurum,üyedeğişkenler içindeböyledir,yaniebeveyndeerişilenherdeğişkene, çocuklardadaerişilir.Ø Amaprensipolarakdeğişkenlerinprotected olduğunuvedışarıdan
ulaşılamadığınıvarsayıyoruz.
ØDolayısıyla,çocuksınıflar,ebeveynlerininsağladığıherözelliği,değişkenyadaarayüz,sağlamakzorundadırlar.
143www.javaturk.orgwww.selsoft.academy
-
YerineGeçebilmeIIØBudurum,yerinegeçebilme(substitutability)olarakifadeedilirvehiyerarşideaşağıdanyukarıyadoğruçalışır.ØYani,ebeveyninolduğuheryerde,ebeveyninçocuklarındanbirisiolabilir.Ø HerManageraynızamandabirEmployee’dir.Ø Yani,patron,“banabirçalışançağırın”dediğinde,onabirManagergelirse,patronunisteğiyerinegelmişolur.
Ø Yadapatron,tümçalışanlartoplansındediğinde,Manager “beniçağırmıyor”diyemez.
144www.javaturk.orgwww.selsoft.academy
-
Genelleştirme-ÖzelleştirmeØMirasilişkisi,birgenelleştirme-özelleştirme (generalization-specialization)yadagenel-özel(generic-specific) ilişkisidir.
ØYanihiyerarşideyukarıçıkıldıkçadahagenelnesneler,aşağıinildikçe,onesnelerindahaözelhalleribulunur.
ØAmayerinegeçebilmeözelliğiherzamangeçerlidir:ØHerDirector aynızamandahembirManager hemdebirEmployee’dir.
145www.javaturk.orgwww.selsoft.academy
-
Employee,ManagerveDirector.javaØorg.javaturk.oop.ch09.factories.factory2.Test
146www.javaturk.orgwww.selsoft.academy
-
UygulamaØBirüniversitedekiöğrencileri,aralarındakimirasilişkisinigözönünealarakmodelleyin.
ØHangidurumlardagenişletmesözkonusudurtartışın.
147www.javaturk.orgwww.selsoft.academy
-
148www.javaturk.org
Overriding (Ezme)
www.selsoft.academy
-
Overriding – Ezme- IØNesneler,ebeveynlerindendevraldıklarımetotlarınarayüzlerini değiştirmeden,kodunudeğiştirebilirler.
ØBunaoverriding yadaezme denir.ØYaniçocuknesneler,ebeveynlerindekisorumluluğu,farklıbirşekildeyerinegetirmeyitercihedebilirler.
ØOverriding ileaynısorumlulukfarklışekillerdeyerinegetirilir:ØSorumlulukaynıdır,çünküarayüz(interface)aynıdır,amasorumluluğuyerinegetirmeşekli(implementation)farklıdır.
ØBuşekildeoverrideedilenmetotlarapolymorphic (çokşekilli)metotlardenir.
149www.javaturk.orgwww.selsoft.academy
-
Overriding – Ezme- IIØBuşekildeoverrideedilenmetotlarapolymorphic (çokşekilli)metotlardenir.
ØÇünküsorumlulukbirtanedirçünküarayüzbirtanedirveebeveyndetanımlanır.
ØAmasorumluluğuyerinegetirmeyanimetotbirdenfazladır.
ØBuyüzdenoverrideedilebilenmetotlarapolymorphic denir.
150www.javaturk.orgwww.selsoft.academy
-
Employee,ManagerveDirector.javaEmployee üzerindetanımlananprintInfo()ve calculateSalary()metotlarınınManager veDirector içinoverrideedildiğinigözlemleyin.
151www.javaturk.orgwww.selsoft.academy
-
Overriding – Ezme- IIIØOverride,sadecenesnemetotlarıiçingeçerlidir.
ØNesnemetotlarınıaynıarayüzle altsınıflardatekrartanımlarsanız,onlarıoverrideetmiş(ezmiş)olursunuz.
ØÜyedeğişkenleriaynıisimlealtsınıflardatekrartanımlarsanız,ebeveyndekileridevralmamış,sadecesaklamışolursunuz.Ø Çünküoverriding değişkenler içintanımlıdeğildir.
ØStatikmetotlardaoverrideedilemezler.ØPolymorphic davranışsadecenesnemetotlarıiçingeçerlidir,üyedeğişkenlervestatikmetotlarpolymorphicdeğildirler.
ØPolymorphismi ilerideelealacağız.
152www.javaturk.orgwww.selsoft.academy
-
BirNokta!
ØYukarıdakikodderlemehatasıverecektir?ØNeden?
153www.javaturk.org
public class SubClass extends ParentClass{private int i;void f(){}
}
class ParentClass{public int i;public void f(){}
}
www.selsoft.academy
-
DahaKısıtlayıcıOlarakOverrideØOverrideederken,devralınanmetodudahakısıtlayıcıbirerişimbelirteciyletanımlayamazsınız.
ØAksitaktirde,ebeveynüzerindenulaşılanbirmetodun,çocuknesnelerüzerindenulaşılamamasısözkonusuolurdu!
154www.javaturk.orgwww.selsoft.academy
-
OverrideEderkenAltTipParametreØJavaSE’nin 1.5sürümündenitibaren,overrideederken,devralınanmetodunparametreleri,alttipleriyleyerdeğiştirebilir.
155www.javaturk.orgwww.selsoft.academy
-
ÖzetØBubölümde,JavaileNesneMerkezliProgramlama’ya Giirşeğitimininnesneileilgilikonularıözetlendi.
156www.selsoft.academywww.selsoft.academy
-
157www.selsoft.academy
Ödevler
www.selsoft.academy
-
Ödevler
158www.selsoft.academywww.selsoft.academy
top related