158
Akın Kaldıroğlu www.javaturk.org Kasım 2015 Java ile Nesne Merkezli ve Fonksiyonel Programlama 1. Bölüm Nesne-Merkezli Programlamaya Giriş: Sınıflar, Nesneler ve Tekrar Kullanım www.selsoft.academy

1. Bölüm Nesne-Merkezli Programlamaya Giriş Sınıflar ......Akın Kaldıroğlu Kasım 2015 Java ile Nesne Merkezli ve Fonksiyonel Programlama 1. Bölüm Nesne-Merkezli Programlamaya

  • Upload
    others

  • View
    22

  • Download
    0

Embed Size (px)

Citation preview

  • 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,[email protected]ş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