1. Bölüm Nesne-Merkezli Programlamaya Giriş Sınıflar ... · Java ile Nesne Merkezli ve...

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

Transcript of 1. Bölüm Nesne-Merkezli Programlamaya Giriş Sınıflar ... · Java ile Nesne Merkezli ve...

Page 1: 1. Bölüm Nesne-Merkezli Programlamaya Giriş Sınıflar ... · Java ile Nesne Merkezli ve Fonksiyonel Programlama 1. Bölüm ... bu amaca yönelik olsun/olmasın basılması, dağıtılması,

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

Page 2: 1. Bölüm Nesne-Merkezli Programlamaya Giriş Sınıflar ... · Java ile Nesne Merkezli ve Fonksiyonel Programlama 1. Bölüm ... bu amaca yönelik olsun/olmasın basılması, dağıtılması,

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.org

www.selsoft.academy

Page 3: 1. Bölüm Nesne-Merkezli Programlamaya Giriş Sınıflar ... · Java ile Nesne Merkezli ve Fonksiyonel Programlama 1. Bölüm ... bu amaca yönelik olsun/olmasın basılması, dağıtılması,

İç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.org

www.selsoft.academy

Page 4: 1. Bölüm Nesne-Merkezli Programlamaya Giriş Sınıflar ... · Java ile Nesne Merkezli ve Fonksiyonel Programlama 1. Bölüm ... bu amaca yönelik olsun/olmasın basılması, dağıtılması,

4www.javaturk.org

Soyutlama

www.selsoft.academy

Page 5: 1. Bölüm Nesne-Merkezli Programlamaya Giriş Sınıflar ... · Java ile Nesne Merkezli ve Fonksiyonel Programlama 1. Bölüm ... bu amaca yönelik olsun/olmasın basılması, dağıtılması,

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.org

www.selsoft.academy

Page 6: 1. Bölüm Nesne-Merkezli Programlamaya Giriş Sınıflar ... · Java ile Nesne Merkezli ve Fonksiyonel Programlama 1. Bölüm ... bu amaca yönelik olsun/olmasın basılması, dağıtılması,

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.org

www.selsoft.academy

Page 7: 1. Bölüm Nesne-Merkezli Programlamaya Giriş Sınıflar ... · Java ile Nesne Merkezli ve Fonksiyonel Programlama 1. Bölüm ... bu amaca yönelik olsun/olmasın basılması, dağıtılması,

İstanbulMetroHaritası

7www.javaturk.org

www.selsoft.academy

Page 8: 1. Bölüm Nesne-Merkezli Programlamaya Giriş Sınıflar ... · Java ile Nesne Merkezli ve Fonksiyonel Programlama 1. Bölüm ... bu amaca yönelik olsun/olmasın basılması, dağıtılması,

"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.org

www.selsoft.academy

Page 9: 1. Bölüm Nesne-Merkezli Programlamaya Giriş Sınıflar ... · Java ile Nesne Merkezli ve Fonksiyonel Programlama 1. Bölüm ... bu amaca yönelik olsun/olmasın basılması, dağıtılması,

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.org

www.selsoft.academy

Page 10: 1. Bölüm Nesne-Merkezli Programlamaya Giriş Sınıflar ... · Java ile Nesne Merkezli ve Fonksiyonel Programlama 1. Bölüm ... bu amaca yönelik olsun/olmasın basılması, dağıtılması,

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

Page 11: 1. Bölüm Nesne-Merkezli Programlamaya Giriş Sınıflar ... · Java ile Nesne Merkezli ve Fonksiyonel Programlama 1. Bölüm ... bu amaca yönelik olsun/olmasın basılması, dağıtılması,

11www.javaturk.org

Sınıf ve Nesne (Kavramsal)

www.selsoft.academy

Page 12: 1. Bölüm Nesne-Merkezli Programlamaya Giriş Sınıflar ... · Java ile Nesne Merkezli ve Fonksiyonel Programlama 1. Bölüm ... bu amaca yönelik olsun/olmasın basılması, dağıtılması,

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.org

www.selsoft.academy

Page 13: 1. Bölüm Nesne-Merkezli Programlamaya Giriş Sınıflar ... · Java ile Nesne Merkezli ve Fonksiyonel Programlama 1. Bölüm ... bu amaca yönelik olsun/olmasın basılması, dağıtılması,

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.org

www.selsoft.academy

Page 14: 1. Bölüm Nesne-Merkezli Programlamaya Giriş Sınıflar ... · Java ile Nesne Merkezli ve Fonksiyonel Programlama 1. Bölüm ... bu amaca yönelik olsun/olmasın basılması, dağıtılması,

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.org

www.selsoft.academy

Page 15: 1. Bölüm Nesne-Merkezli Programlamaya Giriş Sınıflar ... · Java ile Nesne Merkezli ve Fonksiyonel Programlama 1. Bölüm ... bu amaca yönelik olsun/olmasın basılması, dağıtılması,

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.org

www.selsoft.academy

Page 16: 1. Bölüm Nesne-Merkezli Programlamaya Giriş Sınıflar ... · Java ile Nesne Merkezli ve Fonksiyonel Programlama 1. Bölüm ... bu amaca yönelik olsun/olmasın basılması, dağıtılması,

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.org

www.selsoft.academy

Page 17: 1. Bölüm Nesne-Merkezli Programlamaya Giriş Sınıflar ... · Java ile Nesne Merkezli ve Fonksiyonel Programlama 1. Bölüm ... bu amaca yönelik olsun/olmasın basılması, dağıtılması,

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.org

www.selsoft.academy

Page 18: 1. Bölüm Nesne-Merkezli Programlamaya Giriş Sınıflar ... · Java ile Nesne Merkezli ve Fonksiyonel Programlama 1. Bölüm ... bu amaca yönelik olsun/olmasın basılması, dağıtılması,

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.org

www.selsoft.academy

Page 19: 1. Bölüm Nesne-Merkezli Programlamaya Giriş Sınıflar ... · Java ile Nesne Merkezli ve Fonksiyonel Programlama 1. Bölüm ... bu amaca yönelik olsun/olmasın basılması, dağıtılması,

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.org

www.selsoft.academy

Page 20: 1. Bölüm Nesne-Merkezli Programlamaya Giriş Sınıflar ... · Java ile Nesne Merkezli ve Fonksiyonel Programlama 1. Bölüm ... bu amaca yönelik olsun/olmasın basılması, dağıtılması,

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.org

www.selsoft.academy

Page 21: 1. Bölüm Nesne-Merkezli Programlamaya Giriş Sınıflar ... · Java ile Nesne Merkezli ve Fonksiyonel Programlama 1. Bölüm ... bu amaca yönelik olsun/olmasın basılması, dağıtılması,

21www.javaturk.org

Sınıf ve Nesne (Mekanizma)

www.selsoft.academy

Page 22: 1. Bölüm Nesne-Merkezli Programlamaya Giriş Sınıflar ... · Java ile Nesne Merkezli ve Fonksiyonel Programlama 1. Bölüm ... bu amaca yönelik olsun/olmasın basılması, dağıtılması,

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.org

www.selsoft.academy

Page 23: 1. Bölüm Nesne-Merkezli Programlamaya Giriş Sınıflar ... · Java ile Nesne Merkezli ve Fonksiyonel Programlama 1. Bölüm ... bu amaca yönelik olsun/olmasın basılması, dağıtılması,

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

<niteleyici>* class <Sınıfİsmi>{<özellik>*<kurucu>*<metot>*

}

ØJava’dasınıftanımlamakiçinclass anahtarkelimesikullanılır:

www.selsoft.academy

Page 24: 1. Bölüm Nesne-Merkezli Programlamaya Giriş Sınıflar ... · Java ile Nesne Merkezli ve Fonksiyonel Programlama 1. Bölüm ... bu amaca yönelik olsun/olmasın basılması, dağıtılması,

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.org

www.selsoft.academy

Page 25: 1. Bölüm Nesne-Merkezli Programlamaya Giriş Sınıflar ... · Java ile Nesne Merkezli ve Fonksiyonel Programlama 1. Bölüm ... bu amaca yönelik olsun/olmasın basılması, dağıtılması,

ArabaØBir"Araba"soyutlamasıyapın.

ØSoyutlamadabulunmasıgerekendavranışlarnelerdir?Ø GitmekØ DurmakØ HızlanmakØ vs.

ØSoyutlamadabulunmasıgerekendurumbilgilerinelerdir?Ø MarkaØ ModelØ YılØ Hız

25www.javaturk.org

www.selsoft.academy

Page 26: 1. Bölüm Nesne-Merkezli Programlamaya Giriş Sınıflar ... · Java ile Nesne Merkezli ve Fonksiyonel Programlama 1. Bölüm ... bu amaca yönelik olsun/olmasın basılması, dağıtılması,

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

Page 27: 1. Bölüm Nesne-Merkezli Programlamaya Giriş Sınıflar ... · Java ile Nesne Merkezli ve Fonksiyonel Programlama 1. Bölüm ... bu amaca yönelik olsun/olmasın basılması, dağıtılması,

Car.java veTest1.java

27www.javaturk.org

www.selsoft.academy

Page 28: 1. Bölüm Nesne-Merkezli Programlamaya Giriş Sınıflar ... · Java ile Nesne Merkezli ve Fonksiyonel Programlama 1. Bölüm ... bu amaca yönelik olsun/olmasın basılması, dağıtılması,

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

Page 29: 1. Bölüm Nesne-Merkezli Programlamaya Giriş Sınıflar ... · Java ile Nesne Merkezli ve Fonksiyonel Programlama 1. Bölüm ... bu amaca yönelik olsun/olmasın basılması, dağıtılması,

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.org

www.selsoft.academy

Page 30: 1. Bölüm Nesne-Merkezli Programlamaya Giriş Sınıflar ... · Java ile Nesne Merkezli ve Fonksiyonel Programlama 1. Bölüm ... bu amaca yönelik olsun/olmasın basılması, dağıtılması,

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

Page 31: 1. Bölüm Nesne-Merkezli Programlamaya Giriş Sınıflar ... · Java ile Nesne Merkezli ve Fonksiyonel Programlama 1. Bölüm ... bu amaca yönelik olsun/olmasın basılması, dağıtılması,

Ö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

Page 32: 1. Bölüm Nesne-Merkezli Programlamaya Giriş Sınıflar ... · Java ile Nesne Merkezli ve Fonksiyonel Programlama 1. Bölüm ... bu amaca yönelik olsun/olmasın basılması, dağıtılması,

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.org

www.selsoft.academy

Page 33: 1. Bölüm Nesne-Merkezli Programlamaya Giriş Sınıflar ... · Java ile Nesne Merkezli ve Fonksiyonel Programlama 1. Bölüm ... bu amaca yönelik olsun/olmasın basılması, dağıtılması,

Car.java veTest2.java

33www.javaturk.org

www.selsoft.academy

Page 34: 1. Bölüm Nesne-Merkezli Programlamaya Giriş Sınıflar ... · Java ile Nesne Merkezli ve Fonksiyonel Programlama 1. Bölüm ... bu amaca yönelik olsun/olmasın basılması, dağıtılması,

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

<niteleyici>* <dönüş tipi> <isim>(<Parametre>*){<kod>*

} www.selsoft.academy

Page 35: 1. Bölüm Nesne-Merkezli Programlamaya Giriş Sınıflar ... · Java ile Nesne Merkezli ve Fonksiyonel Programlama 1. Bölüm ... bu amaca yönelik olsun/olmasın basılması, dağıtılması,

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.org

www.selsoft.academy

Page 36: 1. Bölüm Nesne-Merkezli Programlamaya Giriş Sınıflar ... · Java ile Nesne Merkezli ve Fonksiyonel Programlama 1. Bölüm ... bu amaca yönelik olsun/olmasın basılması, dağıtılması,

Calculator.java

36www.javaturk.org

www.selsoft.academy

Page 37: 1. Bölüm Nesne-Merkezli Programlamaya Giriş Sınıflar ... · Java ile Nesne Merkezli ve Fonksiyonel Programlama 1. Bölüm ... bu amaca yönelik olsun/olmasın basılması, dağıtılması,

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.org

www.selsoft.academy

Page 38: 1. Bölüm Nesne-Merkezli Programlamaya Giriş Sınıflar ... · Java ile Nesne Merkezli ve Fonksiyonel Programlama 1. Bölüm ... bu amaca yönelik olsun/olmasın basılması, dağıtılması,

CalculatorOverloaded.java

38www.javaturk.org

www.selsoft.academy

Page 39: 1. Bölüm Nesne-Merkezli Programlamaya Giriş Sınıflar ... · Java ile Nesne Merkezli ve Fonksiyonel Programlama 1. Bölüm ... bu amaca yönelik olsun/olmasın basılması, dağıtılması,

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.org

www.selsoft.academy

Page 40: 1. Bölüm Nesne-Merkezli Programlamaya Giriş Sınıflar ... · Java ile Nesne Merkezli ve Fonksiyonel Programlama 1. Bölüm ... bu amaca yönelik olsun/olmasın basılması, dağıtılması,

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.org

www.selsoft.academy

Page 41: 1. Bölüm Nesne-Merkezli Programlamaya Giriş Sınıflar ... · Java ile Nesne Merkezli ve Fonksiyonel Programlama 1. Bölüm ... bu amaca yönelik olsun/olmasın basılması, dağıtılması,

Car.java veTest3.java

41www.javaturk.org

www.selsoft.academy

Page 42: 1. Bölüm Nesne-Merkezli Programlamaya Giriş Sınıflar ... · Java ile Nesne Merkezli ve Fonksiyonel Programlama 1. Bölüm ... bu amaca yönelik olsun/olmasın basılması, dağıtılması,

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.org

www.selsoft.academy

Page 43: 1. Bölüm Nesne-Merkezli Programlamaya Giriş Sınıflar ... · Java ile Nesne Merkezli ve Fonksiyonel Programlama 1. Bölüm ... bu amaca yönelik olsun/olmasın basılması, dağıtılması,

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

Page 44: 1. Bölüm Nesne-Merkezli Programlamaya Giriş Sınıflar ... · Java ile Nesne Merkezli ve Fonksiyonel Programlama 1. Bölüm ... bu amaca yönelik olsun/olmasın basılması, dağıtılması,

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

Page 45: 1. Bölüm Nesne-Merkezli Programlamaya Giriş Sınıflar ... · Java ile Nesne Merkezli ve Fonksiyonel Programlama 1. Bölüm ... bu amaca yönelik olsun/olmasın basılması, dağıtılması,

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.org

www.selsoft.academy

Page 46: 1. Bölüm Nesne-Merkezli Programlamaya Giriş Sınıflar ... · Java ile Nesne Merkezli ve Fonksiyonel Programlama 1. Bölüm ... bu amaca yönelik olsun/olmasın basılması, dağıtılması,

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

Page 47: 1. Bölüm Nesne-Merkezli Programlamaya Giriş Sınıflar ... · Java ile Nesne Merkezli ve Fonksiyonel Programlama 1. Bölüm ... bu amaca yönelik olsun/olmasın basılması, dağıtılması,

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

Page 48: 1. Bölüm Nesne-Merkezli Programlamaya Giriş Sınıflar ... · Java ile Nesne Merkezli ve Fonksiyonel Programlama 1. Bölüm ... bu amaca yönelik olsun/olmasın basılması, dağıtılması,

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.org

www.selsoft.academy

Page 49: 1. Bölüm Nesne-Merkezli Programlamaya Giriş Sınıflar ... · Java ile Nesne Merkezli ve Fonksiyonel Programlama 1. Bölüm ... bu amaca yönelik olsun/olmasın basılması, dağıtılması,

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.org

www.selsoft.academy

Page 50: 1. Bölüm Nesne-Merkezli Programlamaya Giriş Sınıflar ... · Java ile Nesne Merkezli ve Fonksiyonel Programlama 1. Bölüm ... bu amaca yönelik olsun/olmasın basılması, dağıtılması,

ObjectPassing.java

50www.javaturk.org

www.selsoft.academy

Page 51: 1. Bölüm Nesne-Merkezli Programlamaya Giriş Sınıflar ... · Java ile Nesne Merkezli ve Fonksiyonel Programlama 1. Bölüm ... bu amaca yönelik olsun/olmasın basılması, dağıtılması,

51www.javaturk.org

static

www.selsoft.academy

Page 52: 1. Bölüm Nesne-Merkezli Programlamaya Giriş Sınıflar ... · Java ile Nesne Merkezli ve Fonksiyonel Programlama 1. Bölüm ... bu amaca yönelik olsun/olmasın basılması, dağıtılması,

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.org

www.selsoft.academy

Page 53: 1. Bölüm Nesne-Merkezli Programlamaya Giriş Sınıflar ... · Java ile Nesne Merkezli ve Fonksiyonel Programlama 1. Bölüm ... bu amaca yönelik olsun/olmasın basılması, dağıtılması,

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.org

www.selsoft.academy

Page 54: 1. Bölüm Nesne-Merkezli Programlamaya Giriş Sınıflar ... · Java ile Nesne Merkezli ve Fonksiyonel Programlama 1. Bölüm ... bu amaca yönelik olsun/olmasın basılması, dağıtılması,

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.org

www.selsoft.academy

Page 55: 1. Bölüm Nesne-Merkezli Programlamaya Giriş Sınıflar ... · Java ile Nesne Merkezli ve Fonksiyonel Programlama 1. Bölüm ... bu amaca yönelik olsun/olmasın basılması, dağıtılması,

StaticDemo.java

55www.javaturk.org

www.selsoft.academy

Page 56: 1. Bölüm Nesne-Merkezli Programlamaya Giriş Sınıflar ... · Java ile Nesne Merkezli ve Fonksiyonel Programlama 1. Bölüm ... bu amaca yönelik olsun/olmasın basılması, dağıtılması,

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.org

www.selsoft.academy

Page 57: 1. Bölüm Nesne-Merkezli Programlamaya Giriş Sınıflar ... · Java ile Nesne Merkezli ve Fonksiyonel Programlama 1. Bölüm ... bu amaca yönelik olsun/olmasın basılması, dağıtılması,

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.org

www.selsoft.academy

Page 58: 1. Bölüm Nesne-Merkezli Programlamaya Giriş Sınıflar ... · Java ile Nesne Merkezli ve Fonksiyonel Programlama 1. Bölüm ... bu amaca yönelik olsun/olmasın basılması, dağıtılması,

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.org

www.selsoft.academy

Page 59: 1. Bölüm Nesne-Merkezli Programlamaya Giriş Sınıflar ... · Java ile Nesne Merkezli ve Fonksiyonel Programlama 1. Bölüm ... bu amaca yönelik olsun/olmasın basılması, dağıtılması,

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.org

www.selsoft.academy

Page 60: 1. Bölüm Nesne-Merkezli Programlamaya Giriş Sınıflar ... · Java ile Nesne Merkezli ve Fonksiyonel Programlama 1. Bölüm ... bu amaca yönelik olsun/olmasın basılması, dağıtılması,

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

Page 61: 1. Bölüm Nesne-Merkezli Programlamaya Giriş Sınıflar ... · Java ile Nesne Merkezli ve Fonksiyonel Programlama 1. Bölüm ... bu amaca yönelik olsun/olmasın basılması, dağıtılması,

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.org

www.selsoft.academy

Page 62: 1. Bölüm Nesne-Merkezli Programlamaya Giriş Sınıflar ... · Java ile Nesne Merkezli ve Fonksiyonel Programlama 1. Bölüm ... bu amaca yönelik olsun/olmasın basılması, dağıtılması,

62www.javaturk.org

final

www.selsoft.academy

Page 63: 1. Bölüm Nesne-Merkezli Programlamaya Giriş Sınıflar ... · Java ile Nesne Merkezli ve Fonksiyonel Programlama 1. Bölüm ... bu amaca yönelik olsun/olmasın basılması, dağıtılması,

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

Page 64: 1. Bölüm Nesne-Merkezli Programlamaya Giriş Sınıflar ... · Java ile Nesne Merkezli ve Fonksiyonel Programlama 1. Bölüm ... bu amaca yönelik olsun/olmasın basılması, dağıtılması,

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

Page 65: 1. Bölüm Nesne-Merkezli Programlamaya Giriş Sınıflar ... · Java ile Nesne Merkezli ve Fonksiyonel Programlama 1. Bölüm ... bu amaca yönelik olsun/olmasın basılması, dağıtılması,

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.org

www.selsoft.academy

Page 66: 1. Bölüm Nesne-Merkezli Programlamaya Giriş Sınıflar ... · Java ile Nesne Merkezli ve Fonksiyonel Programlama 1. Bölüm ... bu amaca yönelik olsun/olmasın basılması, dağıtılması,

FinalCar.java

66www.javaturk.org

www.selsoft.academy

Page 67: 1. Bölüm Nesne-Merkezli Programlamaya Giriş Sınıflar ... · Java ile Nesne Merkezli ve Fonksiyonel Programlama 1. Bölüm ... bu amaca yönelik olsun/olmasın basılması, dağıtılması,

67www.javaturk.org

Başlatma (Initialization)

www.selsoft.academy

Page 68: 1. Bölüm Nesne-Merkezli Programlamaya Giriş Sınıflar ... · Java ile Nesne Merkezli ve Fonksiyonel Programlama 1. Bölüm ... bu amaca yönelik olsun/olmasın basılması, dağıtılması,

İ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.org

www.selsoft.academy

Page 69: 1. Bölüm Nesne-Merkezli Programlamaya Giriş Sınıflar ... · Java ile Nesne Merkezli ve Fonksiyonel Programlama 1. Bölüm ... bu amaca yönelik olsun/olmasın basılması, dağıtılması,

InitializersDemo.java

69www.javaturk.org

www.selsoft.academy

Page 70: 1. Bölüm Nesne-Merkezli Programlamaya Giriş Sınıflar ... · Java ile Nesne Merkezli ve Fonksiyonel Programlama 1. Bölüm ... bu amaca yönelik olsun/olmasın basılması, dağıtılması,

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.org

www.selsoft.academy

Page 71: 1. Bölüm Nesne-Merkezli Programlamaya Giriş Sınıflar ... · Java ile Nesne Merkezli ve Fonksiyonel Programlama 1. Bölüm ... bu amaca yönelik olsun/olmasın basılması, dağıtılması,

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.org

www.selsoft.academy

Page 72: 1. Bölüm Nesne-Merkezli Programlamaya Giriş Sınıflar ... · Java ile Nesne Merkezli ve Fonksiyonel Programlama 1. Bölüm ... bu amaca yönelik olsun/olmasın basılması, dağıtılması,

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.org

www.selsoft.academy

Page 73: 1. Bölüm Nesne-Merkezli Programlamaya Giriş Sınıflar ... · Java ile Nesne Merkezli ve Fonksiyonel Programlama 1. Bölüm ... bu amaca yönelik olsun/olmasın basılması, dağıtılması,

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.org

www.selsoft.academy

Page 74: 1. Bölüm Nesne-Merkezli Programlamaya Giriş Sınıflar ... · Java ile Nesne Merkezli ve Fonksiyonel Programlama 1. Bölüm ... bu amaca yönelik olsun/olmasın basılması, dağıtılması,

UygulamaØDahaönceyaptığınızUniversityuygulamasıüzerindebaşlamasırasınıtahminedin.

ØKurucularagerekeliprintifadeleriniyazarakbaşlamasırasınıgözlemleyin.

74www.javaturk.org

www.selsoft.academy

Page 75: 1. Bölüm Nesne-Merkezli Programlamaya Giriş Sınıflar ... · Java ile Nesne Merkezli ve Fonksiyonel Programlama 1. Bölüm ... bu amaca yönelik olsun/olmasın basılması, dağıtılması,

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.org

www.selsoft.academy

Page 76: 1. Bölüm Nesne-Merkezli Programlamaya Giriş Sınıflar ... · Java ile Nesne Merkezli ve Fonksiyonel Programlama 1. Bölüm ... bu amaca yönelik olsun/olmasın basılması, dağıtılması,

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

Page 77: 1. Bölüm Nesne-Merkezli Programlamaya Giriş Sınıflar ... · Java ile Nesne Merkezli ve Fonksiyonel Programlama 1. Bölüm ... bu amaca yönelik olsun/olmasın basılması, dağıtılması,

77www.javaturk.org

Organizasyon

www.selsoft.academy

Page 78: 1. Bölüm Nesne-Merkezli Programlamaya Giriş Sınıflar ... · Java ile Nesne Merkezli ve Fonksiyonel Programlama 1. Bölüm ... bu amaca yönelik olsun/olmasın basılması, dağıtılması,

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

Page 79: 1. Bölüm Nesne-Merkezli Programlamaya Giriş Sınıflar ... · Java ile Nesne Merkezli ve Fonksiyonel Programlama 1. Bölüm ... bu amaca yönelik olsun/olmasın basılması, dağıtılması,

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.org

www.selsoft.academy

Page 80: 1. Bölüm Nesne-Merkezli Programlamaya Giriş Sınıflar ... · Java ile Nesne Merkezli ve Fonksiyonel Programlama 1. Bölüm ... bu amaca yönelik olsun/olmasın basılması, dağıtılması,

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.org

www.selsoft.academy

Page 81: 1. Bölüm Nesne-Merkezli Programlamaya Giriş Sınıflar ... · Java ile Nesne Merkezli ve Fonksiyonel Programlama 1. Bölüm ... bu amaca yönelik olsun/olmasın basılması, dağıtılması,

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

Page 82: 1. Bölüm Nesne-Merkezli Programlamaya Giriş Sınıflar ... · Java ile Nesne Merkezli ve Fonksiyonel Programlama 1. Bölüm ... bu amaca yönelik olsun/olmasın basılması, dağıtılması,

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

Page 83: 1. Bölüm Nesne-Merkezli Programlamaya Giriş Sınıflar ... · Java ile Nesne Merkezli ve Fonksiyonel Programlama 1. Bölüm ... bu amaca yönelik olsun/olmasın basılması, dağıtılması,

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

Page 84: 1. Bölüm Nesne-Merkezli Programlamaya Giriş Sınıflar ... · Java ile Nesne Merkezli ve Fonksiyonel Programlama 1. Bölüm ... bu amaca yönelik olsun/olmasın basılması, dağıtılması,

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

Page 85: 1. Bölüm Nesne-Merkezli Programlamaya Giriş Sınıflar ... · Java ile Nesne Merkezli ve Fonksiyonel Programlama 1. Bölüm ... bu amaca yönelik olsun/olmasın basılması, dağıtılması,

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

Page 86: 1. Bölüm Nesne-Merkezli Programlamaya Giriş Sınıflar ... · Java ile Nesne Merkezli ve Fonksiyonel Programlama 1. Bölüm ... bu amaca yönelik olsun/olmasın basılması, dağıtılması,

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.org

www.selsoft.academy

Page 87: 1. Bölüm Nesne-Merkezli Programlamaya Giriş Sınıflar ... · Java ile Nesne Merkezli ve Fonksiyonel Programlama 1. Bölüm ... bu amaca yönelik olsun/olmasın basılması, dağıtılması,

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

Page 88: 1. Bölüm Nesne-Merkezli Programlamaya Giriş Sınıflar ... · Java ile Nesne Merkezli ve Fonksiyonel Programlama 1. Bölüm ... bu amaca yönelik olsun/olmasın basılması, dağıtılması,

UygulamaØAynıpaketyapısınıEclipseüzerindekurunveSelamTest’içalıştırın.

ØProjeninözelliklerinegiderekCLASSPATHayarlarınıgözlemleyin.

88www.javaturk.org

www.selsoft.academy

Page 89: 1. Bölüm Nesne-Merkezli Programlamaya Giriş Sınıflar ... · Java ile Nesne Merkezli ve Fonksiyonel Programlama 1. Bölüm ... bu amaca yönelik olsun/olmasın basılması, dağıtılması,

JavaPaketleriØJava’dapekçokpaketesahiptir:

Ø java.langØ java.utilØ java.io

ØBupaketlerden java.langherJavakaynakkodunadaimaotomatikolarak import edilir.

ØJava’nınpaketleriveiçerikleri,JavaAPI’sinioluşturur.

89www.javaturk.org

www.selsoft.academy

Page 90: 1. Bölüm Nesne-Merkezli Programlamaya Giriş Sınıflar ... · Java ile Nesne Merkezli ve Fonksiyonel Programlama 1. Bölüm ... bu amaca yönelik olsun/olmasın basılması, dağıtılması,

90www.javaturk.org

Sarmalama (Encapsulation)

www.selsoft.academy

Page 91: 1. Bölüm Nesne-Merkezli Programlamaya Giriş Sınıflar ... · Java ile Nesne Merkezli ve Fonksiyonel Programlama 1. Bölüm ... bu amaca yönelik olsun/olmasın basılması, dağıtılması,

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.org

www.selsoft.academy

Page 92: 1. Bölüm Nesne-Merkezli Programlamaya Giriş Sınıflar ... · Java ile Nesne Merkezli ve Fonksiyonel Programlama 1. Bölüm ... bu amaca yönelik olsun/olmasın basılması, dağıtılması,

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

Page 93: 1. Bölüm Nesne-Merkezli Programlamaya Giriş Sınıflar ... · Java ile Nesne Merkezli ve Fonksiyonel Programlama 1. Bölüm ... bu amaca yönelik olsun/olmasın basılması, dağıtılması,

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.org

www.selsoft.academy

Page 94: 1. Bölüm Nesne-Merkezli Programlamaya Giriş Sınıflar ... · Java ile Nesne Merkezli ve Fonksiyonel Programlama 1. Bölüm ... bu amaca yönelik olsun/olmasın basılması, dağıtılması,

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.org

www.selsoft.academy

Page 95: 1. Bölüm Nesne-Merkezli Programlamaya Giriş Sınıflar ... · Java ile Nesne Merkezli ve Fonksiyonel Programlama 1. Bölüm ... bu amaca yönelik olsun/olmasın basılması, dağıtılması,

ErişimNiteleyiciler(AccessModifiers)Ø İkitürerişimniteleyicivardır:

ØSınıferişimniteleyicileriØÜyeerişimniteleyicileri

ØErişimniteleyicileriçinaşağıdakianahtarkelimelermevcuttur:ØpublicØprivateØprotected

95www.javaturk.org

www.selsoft.academy

Page 96: 1. Bölüm Nesne-Merkezli Programlamaya Giriş Sınıflar ... · Java ile Nesne Merkezli ve Fonksiyonel Programlama 1. Bölüm ... bu amaca yönelik olsun/olmasın basılması, dağıtılması,

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.org

www.selsoft.academy

Page 97: 1. Bölüm Nesne-Merkezli Programlamaya Giriş Sınıflar ... · Java ile Nesne Merkezli ve Fonksiyonel Programlama 1. Bölüm ... bu amaca yönelik olsun/olmasın basılması, dağıtılması,

ClassA.java,ClassXX.javaveClassZZ.java

97www.javaturk.org

www.selsoft.academy

Page 98: 1. Bölüm Nesne-Merkezli Programlamaya Giriş Sınıflar ... · Java ile Nesne Merkezli ve Fonksiyonel Programlama 1. Bölüm ... bu amaca yönelik olsun/olmasın basılması, dağıtılması,

Ü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.org

www.selsoft.academy

Page 99: 1. Bölüm Nesne-Merkezli Programlamaya Giriş Sınıflar ... · Java ile Nesne Merkezli ve Fonksiyonel Programlama 1. Bölüm ... bu amaca yönelik olsun/olmasın basılması, dağıtılması,

ÜyeErişimNiteleyicileriII

Niteleyici Kendisi PaketiÇocukları

(Farklı Pakette)

Herkes (Farklı

Pakette)

public + + + +protected + + + -- (varsayılan) + + - -private + - - -

99www.javaturk.org

www.selsoft.academy

Page 100: 1. Bölüm Nesne-Merkezli Programlamaya Giriş Sınıflar ... · Java ile Nesne Merkezli ve Fonksiyonel Programlama 1. Bölüm ... bu amaca yönelik olsun/olmasın basılması, dağıtılması,

ClassP.javaveClassA.java

100www.javaturk.org

www.selsoft.academy

Page 101: 1. Bölüm Nesne-Merkezli Programlamaya Giriş Sınıflar ... · Java ile Nesne Merkezli ve Fonksiyonel Programlama 1. Bölüm ... bu amaca yönelik olsun/olmasın basılması, dağıtılması,

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.org

www.selsoft.academy

Page 102: 1. Bölüm Nesne-Merkezli Programlamaya Giriş Sınıflar ... · Java ile Nesne Merkezli ve Fonksiyonel Programlama 1. Bölüm ... bu amaca yönelik olsun/olmasın basılması, dağıtılması,

EncapsulatedElevator.java

102www.javaturk.org

www.selsoft.academy

Page 103: 1. Bölüm Nesne-Merkezli Programlamaya Giriş Sınıflar ... · Java ile Nesne Merkezli ve Fonksiyonel Programlama 1. Bölüm ... bu amaca yönelik olsun/olmasın basılması, dağıtılması,

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.org

www.selsoft.academy

Page 104: 1. Bölüm Nesne-Merkezli Programlamaya Giriş Sınıflar ... · Java ile Nesne Merkezli ve Fonksiyonel Programlama 1. Bölüm ... bu amaca yönelik olsun/olmasın basılması, dağıtılması,

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.org

www.selsoft.academy

Page 105: 1. Bölüm Nesne-Merkezli Programlamaya Giriş Sınıflar ... · Java ile Nesne Merkezli ve Fonksiyonel Programlama 1. Bölüm ... bu amaca yönelik olsun/olmasın basılması, dağıtılması,

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.org

www.selsoft.academy

Page 106: 1. Bölüm Nesne-Merkezli Programlamaya Giriş Sınıflar ... · Java ile Nesne Merkezli ve Fonksiyonel Programlama 1. Bölüm ... bu amaca yönelik olsun/olmasın basılması, dağıtılması,

106www.javaturk.org

API ve Java API’si

www.selsoft.academy

Page 107: 1. Bölüm Nesne-Merkezli Programlamaya Giriş Sınıflar ... · Java ile Nesne Merkezli ve Fonksiyonel Programlama 1. Bölüm ... bu amaca yönelik olsun/olmasın basılması, dağıtılması,

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.org

www.selsoft.academy

Page 108: 1. Bölüm Nesne-Merkezli Programlamaya Giriş Sınıflar ... · Java ile Nesne Merkezli ve Fonksiyonel Programlama 1. Bölüm ... bu amaca yönelik olsun/olmasın basılması, dağıtılması,

JavaAPIIIØJavaAPI’sindevarolanpekçoksınıfvebenzeriyapılar,tekerleğitekrardankeşfetmedenprogramlamayapmamızısağlarlar.

Ø İyibirJava’cı,JavaAPI’sinisıkveetkinbirşekildekullanır.

108www.javaturk.org

www.selsoft.academy

Page 109: 1. Bölüm Nesne-Merkezli Programlamaya Giriş Sınıflar ... · Java ile Nesne Merkezli ve Fonksiyonel Programlama 1. Bölüm ... bu amaca yönelik olsun/olmasın basılması, dağıtılması,

JDKKaynakKoduØJavaSE’ninstandartuygulamasıolanJDKaçıkkaynakkodluolduğuiçinistenirseilgilisayfadanodaindirilebilir.

Øhttp://www.oracle.com/technetwork/java/javase/downloads/index.html

109www.javaturk.org

www.selsoft.academy

Page 110: 1. Bölüm Nesne-Merkezli Programlamaya Giriş Sınıflar ... · Java ile Nesne Merkezli ve Fonksiyonel Programlama 1. Bölüm ... bu amaca yönelik olsun/olmasın basılması, dağıtılması,

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.org

www.selsoft.academy

Page 111: 1. Bölüm Nesne-Merkezli Programlamaya Giriş Sınıflar ... · Java ile Nesne Merkezli ve Fonksiyonel Programlama 1. Bölüm ... bu amaca yönelik olsun/olmasın basılması, dağıtılması,

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

Page 112: 1. Bölüm Nesne-Merkezli Programlamaya Giriş Sınıflar ... · Java ile Nesne Merkezli ve Fonksiyonel Programlama 1. Bölüm ... bu amaca yönelik olsun/olmasın basılması, dağıtılması,

UygulamaIId. Daha sonra aynı şeyi java.langpaketindeki String sınıfı

ile yapın.

112www.javaturk.org

www.selsoft.academy

Page 113: 1. Bölüm Nesne-Merkezli Programlamaya Giriş Sınıflar ... · Java ile Nesne Merkezli ve Fonksiyonel Programlama 1. Bölüm ... bu amaca yönelik olsun/olmasın basılması, dağıtılması,

113www.javaturk.org

Tekrar Kullanım (Reusability)

www.selsoft.academy

Page 114: 1. Bölüm Nesne-Merkezli Programlamaya Giriş Sınıflar ... · Java ile Nesne Merkezli ve Fonksiyonel Programlama 1. Bölüm ... bu amaca yönelik olsun/olmasın basılması, dağıtılması,

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.org

www.selsoft.academy

Page 115: 1. Bölüm Nesne-Merkezli Programlamaya Giriş Sınıflar ... · Java ile Nesne Merkezli ve Fonksiyonel Programlama 1. Bölüm ... bu amaca yönelik olsun/olmasın basılması, dağıtılması,

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.org

www.selsoft.academy

Page 116: 1. Bölüm Nesne-Merkezli Programlamaya Giriş Sınıflar ... · Java ile Nesne Merkezli ve Fonksiyonel Programlama 1. Bölüm ... bu amaca yönelik olsun/olmasın basılması, dağıtılması,

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.org

www.selsoft.academy

Page 117: 1. Bölüm Nesne-Merkezli Programlamaya Giriş Sınıflar ... · Java ile Nesne Merkezli ve Fonksiyonel Programlama 1. Bölüm ... bu amaca yönelik olsun/olmasın basılması, dağıtılması,

117www.javaturk.org

Bileşim (Composition)

www.selsoft.academy

Page 118: 1. Bölüm Nesne-Merkezli Programlamaya Giriş Sınıflar ... · Java ile Nesne Merkezli ve Fonksiyonel Programlama 1. Bölüm ... bu amaca yönelik olsun/olmasın basılması, dağıtılması,

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.org

www.selsoft.academy

Page 119: 1. Bölüm Nesne-Merkezli Programlamaya Giriş Sınıflar ... · Java ile Nesne Merkezli ve Fonksiyonel Programlama 1. Bölüm ... bu amaca yönelik olsun/olmasın basılması, dağıtılması,

CarasACompositeObject

119www.javaturk.org

www.selsoft.academy

Page 120: 1. Bölüm Nesne-Merkezli Programlamaya Giriş Sınıflar ... · Java ile Nesne Merkezli ve Fonksiyonel Programlama 1. Bölüm ... bu amaca yönelik olsun/olmasın basılması, dağıtılması,

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

Page 121: 1. Bölüm Nesne-Merkezli Programlamaya Giriş Sınıflar ... · Java ile Nesne Merkezli ve Fonksiyonel Programlama 1. Bölüm ... bu amaca yönelik olsun/olmasın basılması, dağıtılması,

CarTest.java

121www.javaturk.org

www.selsoft.academy

Page 122: 1. Bölüm Nesne-Merkezli Programlamaya Giriş Sınıflar ... · Java ile Nesne Merkezli ve Fonksiyonel Programlama 1. Bölüm ... bu amaca yönelik olsun/olmasın basılması, dağıtılması,

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.org

www.selsoft.academy

Page 123: 1. Bölüm Nesne-Merkezli Programlamaya Giriş Sınıflar ... · Java ile Nesne Merkezli ve Fonksiyonel Programlama 1. Bölüm ... bu amaca yönelik olsun/olmasın basılması, dağıtılması,

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.org

www.selsoft.academy

Page 124: 1. Bölüm Nesne-Merkezli Programlamaya Giriş Sınıflar ... · Java ile Nesne Merkezli ve Fonksiyonel Programlama 1. Bölüm ... bu amaca yönelik olsun/olmasın basılması, dağıtılması,

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.org

www.selsoft.academy

Page 125: 1. Bölüm Nesne-Merkezli Programlamaya Giriş Sınıflar ... · Java ile Nesne Merkezli ve Fonksiyonel Programlama 1. Bölüm ... bu amaca yönelik olsun/olmasın basılması, dağıtılması,

125www.javaturk.org

Miras - Kalıtım (Inheritance)

www.selsoft.academy

Page 126: 1. Bölüm Nesne-Merkezli Programlamaya Giriş Sınıflar ... · Java ile Nesne Merkezli ve Fonksiyonel Programlama 1. Bölüm ... bu amaca yönelik olsun/olmasın basılması, dağıtılması,

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.org

www.selsoft.academy

Page 127: 1. Bölüm Nesne-Merkezli Programlamaya Giriş Sınıflar ... · Java ile Nesne Merkezli ve Fonksiyonel Programlama 1. Bölüm ... bu amaca yönelik olsun/olmasın basılması, dağıtılması,

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

Page 128: 1. Bölüm Nesne-Merkezli Programlamaya Giriş Sınıflar ... · Java ile Nesne Merkezli ve Fonksiyonel Programlama 1. Bölüm ... bu amaca yönelik olsun/olmasın basılması, dağıtılması,

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.org

www.selsoft.academy

Page 129: 1. Bölüm Nesne-Merkezli Programlamaya Giriş Sınıflar ... · Java ile Nesne Merkezli ve Fonksiyonel Programlama 1. Bölüm ... bu amaca yönelik olsun/olmasın basılması, dağıtılması,

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.org

www.selsoft.academy

Page 130: 1. Bölüm Nesne-Merkezli Programlamaya Giriş Sınıflar ... · Java ile Nesne Merkezli ve Fonksiyonel Programlama 1. Bölüm ... bu amaca yönelik olsun/olmasın basılması, dağıtılması,

ÜyeErişimNiteleyicileriII(Tekrar)

Niteleyici Kendisi PaketiÇocukları

(Farklı Pakette)

Herkes (Farklı

Pakette)

public + + + +protected + + + -- (varsayılan) + + - -private + - - -

130www.javaturk.org

www.selsoft.academy

Page 131: 1. Bölüm Nesne-Merkezli Programlamaya Giriş Sınıflar ... · Java ile Nesne Merkezli ve Fonksiyonel Programlama 1. Bölüm ... bu amaca yönelik olsun/olmasın basılması, dağıtılması,

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.org

www.selsoft.academy

Page 132: 1. Bölüm Nesne-Merkezli Programlamaya Giriş Sınıflar ... · Java ile Nesne Merkezli ve Fonksiyonel Programlama 1. Bölüm ... bu amaca yönelik olsun/olmasın basılması, dağıtılması,

132www.javaturk.org

Başlatma (Initialization)

www.selsoft.academy

Page 133: 1. Bölüm Nesne-Merkezli Programlamaya Giriş Sınıflar ... · Java ile Nesne Merkezli ve Fonksiyonel Programlama 1. Bölüm ... bu amaca yönelik olsun/olmasın basılması, dağıtılması,

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.org

www.selsoft.academy

Page 134: 1. Bölüm Nesne-Merkezli Programlamaya Giriş Sınıflar ... · Java ile Nesne Merkezli ve Fonksiyonel Programlama 1. Bölüm ... bu amaca yönelik olsun/olmasın basılması, dağıtılması,

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.org

www.selsoft.academy

Page 135: 1. Bölüm Nesne-Merkezli Programlamaya Giriş Sınıflar ... · Java ile Nesne Merkezli ve Fonksiyonel Programlama 1. Bölüm ... bu amaca yönelik olsun/olmasın basılması, dağıtılması,

InitializationOrder.java

135www.javaturk.org

www.selsoft.academy

Page 136: 1. Bölüm Nesne-Merkezli Programlamaya Giriş Sınıflar ... · Java ile Nesne Merkezli ve Fonksiyonel Programlama 1. Bölüm ... bu amaca yönelik olsun/olmasın basılması, dağıtılması,

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.org

www.selsoft.academy

Page 137: 1. Bölüm Nesne-Merkezli Programlamaya Giriş Sınıflar ... · Java ile Nesne Merkezli ve Fonksiyonel Programlama 1. Bölüm ... bu amaca yönelik olsun/olmasın basılması, dağıtılması,

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.org

www.selsoft.academy

Page 138: 1. Bölüm Nesne-Merkezli Programlamaya Giriş Sınıflar ... · Java ile Nesne Merkezli ve Fonksiyonel Programlama 1. Bölüm ... bu amaca yönelik olsun/olmasın basılması, dağıtılması,

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.org

www.selsoft.academy

Page 139: 1. Bölüm Nesne-Merkezli Programlamaya Giriş Sınıflar ... · Java ile Nesne Merkezli ve Fonksiyonel Programlama 1. Bölüm ... bu amaca yönelik olsun/olmasın basılması, dağıtılması,

Employee,ManagerveDirector.javaØEmployee,ManagerveDirectorsınıflarınınkurucularınadikkatedin.

Øorg.javaturk.oop.ch09.factories.factory1.Test

139www.javaturk.org

www.selsoft.academy

Page 140: 1. Bölüm Nesne-Merkezli Programlamaya Giriş Sınıflar ... · Java ile Nesne Merkezli ve Fonksiyonel Programlama 1. Bölüm ... bu amaca yönelik olsun/olmasın basılması, dağıtılması,

InitializationOrder.java

140www.javaturk.org

www.selsoft.academy

Page 141: 1. Bölüm Nesne-Merkezli Programlamaya Giriş Sınıflar ... · Java ile Nesne Merkezli ve Fonksiyonel Programlama 1. Bölüm ... bu amaca yönelik olsun/olmasın basılması, dağıtılması,

141www.javaturk.org

Genişletme ve Yerine Geçebilme

www.selsoft.academy

Page 142: 1. Bölüm Nesne-Merkezli Programlamaya Giriş Sınıflar ... · Java ile Nesne Merkezli ve Fonksiyonel Programlama 1. Bölüm ... bu amaca yönelik olsun/olmasın basılması, dağıtılması,

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.org

www.selsoft.academy

Page 143: 1. Bölüm Nesne-Merkezli Programlamaya Giriş Sınıflar ... · Java ile Nesne Merkezli ve Fonksiyonel Programlama 1. Bölüm ... bu amaca yönelik olsun/olmasın basılması, dağıtılması,

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.org

www.selsoft.academy

Page 144: 1. Bölüm Nesne-Merkezli Programlamaya Giriş Sınıflar ... · Java ile Nesne Merkezli ve Fonksiyonel Programlama 1. Bölüm ... bu amaca yönelik olsun/olmasın basılması, dağıtılması,

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.org

www.selsoft.academy

Page 145: 1. Bölüm Nesne-Merkezli Programlamaya Giriş Sınıflar ... · Java ile Nesne Merkezli ve Fonksiyonel Programlama 1. Bölüm ... bu amaca yönelik olsun/olmasın basılması, dağıtılması,

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.org

www.selsoft.academy

Page 146: 1. Bölüm Nesne-Merkezli Programlamaya Giriş Sınıflar ... · Java ile Nesne Merkezli ve Fonksiyonel Programlama 1. Bölüm ... bu amaca yönelik olsun/olmasın basılması, dağıtılması,

Employee,ManagerveDirector.javaØorg.javaturk.oop.ch09.factories.factory2.Test

146www.javaturk.org

www.selsoft.academy

Page 147: 1. Bölüm Nesne-Merkezli Programlamaya Giriş Sınıflar ... · Java ile Nesne Merkezli ve Fonksiyonel Programlama 1. Bölüm ... bu amaca yönelik olsun/olmasın basılması, dağıtılması,

UygulamaØBirüniversitedekiöğrencileri,aralarındakimirasilişkisinigözönünealarakmodelleyin.

ØHangidurumlardagenişletmesözkonusudurtartışın.

147www.javaturk.org

www.selsoft.academy

Page 148: 1. Bölüm Nesne-Merkezli Programlamaya Giriş Sınıflar ... · Java ile Nesne Merkezli ve Fonksiyonel Programlama 1. Bölüm ... bu amaca yönelik olsun/olmasın basılması, dağıtılması,

148www.javaturk.org

Overriding (Ezme)

www.selsoft.academy

Page 149: 1. Bölüm Nesne-Merkezli Programlamaya Giriş Sınıflar ... · Java ile Nesne Merkezli ve Fonksiyonel Programlama 1. Bölüm ... bu amaca yönelik olsun/olmasın basılması, dağıtılması,

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.org

www.selsoft.academy

Page 150: 1. Bölüm Nesne-Merkezli Programlamaya Giriş Sınıflar ... · Java ile Nesne Merkezli ve Fonksiyonel Programlama 1. Bölüm ... bu amaca yönelik olsun/olmasın basılması, dağıtılması,

Overriding – Ezme- IIØBuşekildeoverrideedilenmetotlarapolymorphic (çokşekilli)metotlardenir.

ØÇünküsorumlulukbirtanedirçünküarayüzbirtanedirveebeveyndetanımlanır.

ØAmasorumluluğuyerinegetirmeyanimetotbirdenfazladır.

ØBuyüzdenoverrideedilebilenmetotlarapolymorphic denir.

150www.javaturk.org

www.selsoft.academy

Page 151: 1. Bölüm Nesne-Merkezli Programlamaya Giriş Sınıflar ... · Java ile Nesne Merkezli ve Fonksiyonel Programlama 1. Bölüm ... bu amaca yönelik olsun/olmasın basılması, dağıtılması,

Employee,ManagerveDirector.javaEmployee üzerindetanımlananprintInfo()ve calculateSalary()metotlarınınManager veDirector içinoverrideedildiğinigözlemleyin.

151www.javaturk.org

www.selsoft.academy

Page 152: 1. Bölüm Nesne-Merkezli Programlamaya Giriş Sınıflar ... · Java ile Nesne Merkezli ve Fonksiyonel Programlama 1. Bölüm ... bu amaca yönelik olsun/olmasın basılması, dağıtılması,

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.org

www.selsoft.academy

Page 153: 1. Bölüm Nesne-Merkezli Programlamaya Giriş Sınıflar ... · Java ile Nesne Merkezli ve Fonksiyonel Programlama 1. Bölüm ... bu amaca yönelik olsun/olmasın basılması, dağıtılması,

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

Page 154: 1. Bölüm Nesne-Merkezli Programlamaya Giriş Sınıflar ... · Java ile Nesne Merkezli ve Fonksiyonel Programlama 1. Bölüm ... bu amaca yönelik olsun/olmasın basılması, dağıtılması,

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.org

www.selsoft.academy

Page 155: 1. Bölüm Nesne-Merkezli Programlamaya Giriş Sınıflar ... · Java ile Nesne Merkezli ve Fonksiyonel Programlama 1. Bölüm ... bu amaca yönelik olsun/olmasın basılması, dağıtılması,

OverrideEderkenAltTipParametreØJavaSE’nin 1.5sürümündenitibaren,overrideederken,devralınanmetodunparametreleri,alttipleriyleyerdeğiştirebilir.

155www.javaturk.org

www.selsoft.academy

Page 156: 1. Bölüm Nesne-Merkezli Programlamaya Giriş Sınıflar ... · Java ile Nesne Merkezli ve Fonksiyonel Programlama 1. Bölüm ... bu amaca yönelik olsun/olmasın basılması, dağıtılması,

ÖzetØBubölümde,JavaileNesneMerkezliProgramlama’ya Giirşeğitimininnesneileilgilikonularıözetlendi.

156www.selsoft.academy

www.selsoft.academy

Page 157: 1. Bölüm Nesne-Merkezli Programlamaya Giriş Sınıflar ... · Java ile Nesne Merkezli ve Fonksiyonel Programlama 1. Bölüm ... bu amaca yönelik olsun/olmasın basılması, dağıtılması,

157www.selsoft.academy

Ödevler

www.selsoft.academy

Page 158: 1. Bölüm Nesne-Merkezli Programlamaya Giriş Sınıflar ... · Java ile Nesne Merkezli ve Fonksiyonel Programlama 1. Bölüm ... bu amaca yönelik olsun/olmasın basılması, dağıtılması,

Ödevler

158www.selsoft.academy

www.selsoft.academy