7. bölüm java nesneleri - temeller

Click here to load reader

Post on 03-Jul-2015

3.360 views

Category:

Documents

1 download

Embed Size (px)

DESCRIPTION

Nesne Merkezli Java Programlama'nın 7. bölümü

TRANSCRIPT

Akn KaldroluJava le Nesne Merkezli Programlama

www.javaturk.orgNisan 2011

Kk Bir Konu Bu dosya ve beraberindeki tm, dosya, kod, vb. eitim malzemelerinin tm

hakk Akn Kaldroluna aittir. Bu eitim malzemelerini kiisel bilgilenme ve geliiminiz amacyla kullanabilirsiniz ve isteyenleri http://www.javaturk.org adresine ynlendirip, bu malzemelerin en gncel hallerini almalarn salayabilirsiniz. Yukarda bahsedilen ama dnda, bu eitim malzemelerinin, ticari olsun/olmasn herhangi bir ekilde, toplu bir eitim faaliyetinde kullanlmas, bu amaca ynelik olsun/olmasn baslmas, datlmas, gerek ya da sanal/Internet ortamlarnda yaynlanmas yasaktr. Byle bir ihtiya halinde ltfen benimle, [email protected] adresinden iletiime gein. Bu ve benzeri eitim malzemelerine katkda bulunmak ya da dzeltme ve eletirilerinizi bana iletmek isterseniz, ok sevinirim. Yukarda verdiim adresten bana ulaabilirsiniz. Bol elenceli ve bol Javal gnler dilerim.www.javaturk.org

2

Snflar ve Nesneler

www.javaturk.org

3

Snf Snf, kendisinden retilecek nesnelerin ablonudur. Ayn snftan retilen nesnelerin tipi, ayndr. Snf, nesnelerinin zelliklerini (attributes) ve davranlarn

(behavior) tanmlar. Nesnelerin zellikleri, deikenlerle (variables), Nesnelerin davranlar ise metotlarla (methods) tanmlanr.

Nesnenin zelliklerinin btnne durum (state), metotlarn

btnne de arayz (interface) denir.www.javaturk.org

4

Javada Snf Tanmlama I (Tekrar) Javada snf tanmlamak iin class anahtar kelimesi

kullanlr:* class { * * * }

Snfn tanm, Javada en geni blok olan snf blokuyla

yaplr. Snfn, sfr ya da daha fazla niteleyicisi (modifier) olabilir. Snfn, geerli ve anlaml bir ismi olmaldr.www.javaturk.org

5

Javada Snf Tanmlama II (Tekrar) Kurucu ya da yaplandrc (constructor), nesne yaratrken

arlan zel metotdur. Zorunlu olmamakla birlikte snfn eleri, fiziksel olarak

snf iinde, zellikler, kurucular ve metotlar olarak sralanr. zellikler farkl tiplerde olan nesne deikenleridir (instance

variables). Metotlar ise nesnelerin sorumluluklarn yerine getiren nesne fonksiyonlardr (instance methods).

www.javaturk.org

6

Deikenlerin Rolleri (Tekrar) Javada deikenler, basit olsun referans olsun,

fonksiyonellik ya da rol asndan e ayrlrlar: Nesne deikenleri (instance (object) variables): Nesnenin

durumunu oluturan deikenlerdir. Snf deikenleri (class variables): Nesnelerin ortak durumunu ifade eden deikenlerdir. Deerleri nesneden nesneye deimez. Yerel deikenler (local variables): Geici deikenlerdir.

lk ikisine ye deikenleri (member variables), veri yeleri

(data members) ya da alanlar (fields) denir ve snf blokunda tanmlanr. Bu blmde nce nesne ve snf deikenlerini ele alacaz.www.javaturk.org

7

Nesne Deikenleri Nesne deikenleri (instance variables ya da fields),

fonksiyonel olarak, nesnenin zelliklerini ifade ederler. Nesne deikenleri, yapsal olarak referans deikeni

olabildii gibi basit deiken de olabilir. Nesne deikenleri, snfn iinde ama metotlarn dnda herhangi bir yerde tantlmaldr,

Genelde snfn en banda tantlrlar.

Nesne deikenleri ilk deerlerini tantlrken alabildikleri gibi

daha sonra bir metot iinde, genelde kurucu metotta da alabilirler. Tanmlanacak nesne deikeni saysnda bir kstlama yoktur.www.javaturk.org

8

Car Snf Aada sadece zelliklerden oluan, herhangi bir davrana

sahip olmayan bir CarAttributeOnly snf tanmlanmtr. CarAttributeOnlynin zellikleri, snf kapsamnda, karmak ve basit veri tiplerinden deikenlerle betimlenmitir. CarAttributeOnlynin nesne deikenleri sadece tantlmlardr, bir ilk deer almamlardr.public class CarAttributeOnly { String make; String model; String year; int speed; int distance; }www.javaturk.org

9

Nesne Yaratmak I Nesne yaratmak drt admda gerekleir: Tantm (Declaration): nce yaratlacak nesneyi gsterecek referans deikeni tantlr. Yaratma (Instantiation): kinci admda new anahtar kelimesi kullanlarak nesne yaratlr. new operatr, nesne yaratldnda, onu gsteren bir referans geriye dndrr. Balang durumuna getirme (Initialization): Kurucu ars yaplarak, nesne, balang durumuna getirilir. Atama (Assignment): Balang durumuna getirilen nesnenin referans, kendi tipinden bir referans deikenine atanr.CarAttributeOnly carObject = new CarAttributeOnly();

www.javaturk.org

10

Nesne Yaratmak II Bu drt adm, tek bir yerde, hep beraber yaplabilecei gibi,

nce tantm, daha sonra da yaratma, balang durumuna getirme ve atama hep birlikte, baka bir yerde yaplabilir.CarAttributeOnly carObject; carObject = new CarAttributeOnly(); // Step 1 // Step 2, 3 & 4

Her nesne, bellekte ayr bir alana sahiptir. Her nesnenin zellikleri, kendi bellek alannda tutulur. Referansn tipi, gsterecei nesnenin tipidir. En azndan imdilik bunu bu basitlikte dnebiliriz.www.javaturk.org

11

Nesne Referans I Nesneler, heap ad verilen ve RAMin JVM tarafndan dinamik

olarak kullanlabilen alannda oluturulurlar: Nesnelerin zellikleri olan deikenler bu alanda yaarlar.

Javada, bu bellek alanna dorudan ulamamz ya da mdahele

etmemiz mmkn deildir. Javada, nesnelere, onlarn referanslaryla (reference) ulalr. Referansa aadaki isimler de verilir: Tuta (handle): Nesneye soyut bir eriim mekanizmasdr. areti (pointer): Nesnenin bellekteki adresini tutar.

Javadaki referanslar, C/C++ pointerlarnn daha soyut halidir. C/C++ta, pointerlarla yoluyla nesnesin fiziksel adresine ulalabilir ve pointer aritmetii yaplabilir.www.javaturk.org

12

zelliklere Eriim Yaratlan nesnenin zelliklerine, nesnenin referans yoluyla

eriilir. Eriim "." notasyonuyla olur:reference.attribute

Bu ekilde eriilen zelliin deerine ulalabilecei gibi, ona

uygun atamalar da yaplabilir:carObject.speed = 60; System.out.println(carObject.speed);www.javaturk.org

13

public class CarAttributeOnly { String make; String model; String year; int speed; int distance; public static void main(String[] args) { CarAttributeOnly myCar = new CarAttributeOnly(); myCar.make = "Mercedes"; myCar.model = "E200"; myCar.year = "2011"; myCar.speed = 80; myCar.distance = 3; System.out.println("My Car: " + myCar.year + " " + myCar.make + " " + myCar.model); CarAttributeOnly yourCar = new CarAttributeOnly(); yourCar.make = "Toyota"; yourCar.model = "Camry"; yourCar.year = "2011"; yourCar.speed = 0; yourCar.distance = 0; System.out.println("Your Car: " + yourCar.year + " " + yourCar.make + " " + yourCar.model); } }www.javaturk.org

14

Nesne Deikenlerinin lk Deeri Javada bir deikene ilk deer atamadan, yani onu

tanmlamadan, kullanamayacamz daha nce belirtmitik. nk deikenlere bir ilk deer atanmazsa Java, otomatik

olarak atamyordu. Bu durum sadece yerel deikenler iin geerlidir.

Javada nesne deikenlerine bir ilk deer atamazsak bile,

derleyici onlara bir ilk deer atar. Bu ilk deerler, deikenlerin tipleriyle uyumlu ve en az bilgi

ile verilen deerlerdir.

Sizce, Java, yerel deikenlere bir ilk deer vermezken

neden nesne deikenlerine bir ilk deer veriyor?www.javaturk.org

15

InstanceVariablesInitialValues.java

www.javaturk.org

16

Nesne ve Referans Nesne ve referans, farkl kavramlardr. kisinin de tipi vardr. Nesne, snftan tretilen ve bir duruma ve bir grup davrana sahip olup, heap isimli bellek alannda yaayan yapdr. Referans ise, nesneye ulamamz salayan ve bellekte bulunan bir deikendir. Bir referans, zamann farkl anlarnda, kendi tipinden farkl

nesneleri gsterebilir. Fakat bir anda sadece tek bir nesneyi gsterir.

Bir nesneye birden fazla referans olabilir. Bazen referans olmadan nesne, bazen de nesne olmadan

referans vardr.www.javaturk.org

17

Nesne Referans II Referans ile nesne kavramlarnn farkllna gzel bir rnek

de referansn, farkl zamanlarda kendi tipinden farkl nesneleri gsterebilmesidir:CarAttributeOnly myCar = new CarAttributeOnly(); myCar.make = "Mercedes"; ... CarAttributeOnly yourCar = new CarAttributeOnly(); yourCar.make = "Toyota"; ... CarAttributeOnly tmpCar = myCar; myCar = yourCar; yourCar = tmpCar; System.out.println("My Car: " + myCar.year + " " + myCar.make + " " + myCar.model); System.out.println("Your Car: " + yourCar.year + " " + yourCar.make + " " + yourCar.model);

www.javaturk.org

18

Nesneler Belleiniz elverdii lde, ayn snftan pek ok nesne

oluturabilirsiniz. nemli olan her bir nesnenin, programladnz i

alanndaki i nesnelerine (business objects) karlk gelmesidir. Genel olarak nesnelerin farkl durumlara sahip olmas

beklenir: zellikle veri tabannda anahtar alan (primary key) olan

veriler, her nesne iin farkl bir deer almak zorundadrlar.www.javaturk.org

19

Bileik (Composite) Nesneler Farkl trden nesnelerden oluan nesnelere, bileik nesne

(composite object) denir. Bu durumda bir snf, dier snfn tipinden nesne deikenlerine sahip olur. Daha doru ifade ile bir nesne, dier nesnenin referansna

sahip olur.

Daha nce tanmladmz CarAttributeOnly de String

tipinden deikenlere sahipti ve bu yzden de bir bileik nesne idi. Fakat bileik nesne ile biz, daha ok, bizim oluturduumuz

tiplerden nesnelere sahip bileik nesneleri kastederiz.www.javaturk.org

20

Snf m Nesne mi? Sizin de farkettiiniz gibi "snf" dememiz gereken

durumlarda bile "nesne" terimini kullanmamz, ok sk rastlanan bir durumdur. Dolaysyla "nesne" kelimesi ile ne zaman nesneyi ne zaman

snf kastettiimiz cmlenin geliinden anlalr. lk balarda kark gibi grnse de gittike zihniniz buna

alacaktr.

www.javaturk.org

21

TestAttributeOnlyComposite.java Nesneler arasndaki ilikilerin, nesnelerin referanslar

zerinden kurulduuna dikkat edin! Aadaki rnekte "person1" ve "car1.owner" ayn

PersonAttributeOnlyComposite nesnesine, "car1" ile "person1.car" da ayn CarAttributeOnlyComposite nesnesine referanstrlar:PersonAttributeOnlyComposite person1 = new PersonAttributeOnlyComposite(); ... CarAttributeOnlyComposite car1 = new CarAttributeOnlyComposite(); ... car1.owner = person1; person1.car = car1; System.out.println("Make of owner1's car: " + person1.car.make); System.out.println("First name of car1's owner: " + car1.owner.firstName);www.javaturk.org

22

Nesneler Aras liki Nesneler arasndaki ilikilerin, nesnelerin referanslar

zerinden kurulmas, ayn nesnenin birden fazla yerde olmasnn gerektii durumlarda, aslnda nesnenin bir tane olup, gerekte farkl yerlerde bulunan eyin, o nesneye olan deiik referanslarn olmasn salar. Aksi taktirde bellekte rnein ayn Student nesnesinden birden fazla olurdu ve nesnelerden birine bir deiiklik yapldnda dierleri geersiz duruma derdi. Gerekteki tek bir nesnenin, bellekte durumlar farkl birden

fazla kopyasnn olmas pek de ho bir durum oluturmazd.

Nesne-merkezli yazlm, birbirleriyle referanslar zerinden

haberleen nesnelerden olumaktadr.www.javaturk.org

23

University Example

www.javaturk.org

24

Metotlar (Methods)

www.javaturk.org

25

Metotlar Metotlar, nesnelerin sorumluluklarn yerine getiren

fonksiyonlardr. Eskiden bu yana programlama dillerinde subroutine,

procedure vb. isimlerle ifade edilmitirler.

Metotlar, bir nesnenin darya verdii hizmeti ya da bir

baka deyile, bir nesnenin alabilecei mesajlar ifade eder. Metotlar, sadece bir snfn iinde tanmlanabilir. Bir snfn tanmlamad metot, o snfn nesnelerinde

arlamaz.

Bir snfta istenildii kadar metot tanmlanabilir. Bir snftan yaratlan btn nesneler, o snfta tanmlanan

metotlar yerine getirir, yani hepsi ayn mesajlar alr.www.javaturk.org

26

Metot I Javada bir metotun be ana paras vardr: sim: Anlaml ve genelde emir kipinde bir isim. Parametreler (parameters): Dardan geilen parametreler. Dn deeri tipi (return type): arld ortama dndrecei deerin tipi. Kod (body, implementation): fadelerden oluan alan ksm. Niteleyiciler (modifiers): Farkl amalar iin deiik niteleyici anahtar kelimeleri kullanlabilir.* (*){ * }www.javaturk.org

27

Metot rneimethod name

parameter list

int square(int x){ int y = x*x; return type method body return y; }

return value

www.javaturk.org

28

Parametreler Parametre listesi, virglle ayrlm, "tip, isim" listesidir. Parametreler, basit tip olabilecei gibi referans tipler de

olabilirler. Bir metot dardan arzu edildii kadar parametre alabilir. Bir metot dardan parametre almak zorunda deildir. Referans parametresi olarak "null" da geilebilir. Basit tipler iin "null" geilemez.

www.javaturk.org

29

Gerek ve Formal Parametreler Gerek parametre (actual parameter), metot arldnda ona

geilen parametrelere denir. Gerek parametrelere daha sklkla argman da denir.

Formal parametre (formal parameter), metot tanmnda olan

parametrelere denir. Karlk gelen gerek parametreler ile formal parametreler tip

bakmndan uyumlu olmaldr. Otomatik ykseltmeler evirme (cast) operatrne ihtiya

duymadan yaplr. Dntrlebilen gerek parametreler iin evirme (cast) operatr kullanlmaldr.www.javaturk.org

30

Gerek ve Formal Parametre Uyumupublic void f(Student s, int i, boolean b){ ... }x.f(new Student(), 5, true); byte b = 3; x.f(new Student(), b, false); // Ykseltme x.f(null,(int) 3.14d, false); // evirme

www.javaturk.org

31

Dn Tipi (return type) I Dn deeri, basit tip olabilecei gibi referans tip de

olabilir. Dn tipi ile metot ismi arasna hibir ey giremez. Metot, dn deeri tipine uygun bir deer dndrmek zorundadr. Deer dndrlrken, ykseltme ya da evirme (cast)

yaplabilir.

Bir metot en fazla bir deer dndrebilir. Birden fazla deer dndrmek sz konusuysa, dizi gibi torba (collection) yaplar kullanlabilir.

www.javaturk.org

32

Dn Tipi II Metotun arld ortam, metotun dn deerini almak

istiyorsa, uygun bir atama yapmaldr. Dn deeri ile ilgilenilmedii durumlarda atamaya da gerek

yoktur. Buna bir metotu yan etkisi (side effect) iin armak denir.

Bir metot, bir deer dndrmek zorunda deildir. Bu durumda dn tipi, "void" olarak ifade edilir ve "return" hi kullanlmayabilir ya da "return;" ile yetinilir. Bu durumda metotun arld ortamda metottan herhangi bir atama yaplmaz.www.javaturk.org

33

Metot rnekleriboolean flag() { return true; } float naturalLogBase() {return 2.718f;}

void doNothing() { return; }void doNothingElse() {} int x = a.f(8); a.f(8.37); // Side effect

www.javaturk.org

34

Metotlar Ne indir? Metotlar temel olarak u drt amala yazlrlar: Nesnenin durumu hakknda bilgi vermek (accessor methods),

getXxx() eklindeki metotlar. setXxx() eklindeki metotlar. compute(), start(), fetchAccounts(), authenticateUser() vb. metotlar.

Nesnenin durumunu deitirmek (mutator methods),

Bir hesaplama, bir srecin adm vb. cinsinden bir i yapmak,

Baka bir nesneden, yukardaki durumdan birisi yoluyla

hizmet almak ya da ii ona atamak (delegation).

Metotlar, yukardaki drt eyden bir ya da bir kan yerine

getirirler.www.javaturk.org

35

Calculator.java

www.javaturk.org

36

Salkl Metotlar in lkeler Metotlar olutururken u ilkeleri uygulamak, snflarn

salkl olmas asndan nemlidir: Metotlar, sadece ve sadece iinde tanmland snfn

soyutlad kavramn sorumluluk alanna giren davranlar yerine getirmelidirler. Her bir metot, sadece ve sadece bir eyi yerine getirmelidir.

Bu yzden daha az satra sahip ve daha az argman alan metotlar tercih edilmelidir. Yazmaya baladnz metotun bymeye ve karmaklamaya baladn hissettiinizde, yeni metotlar oluturarak, metotunuzu en az karmaklkta tutmaya zen gsterin.

Metotlarnza, yaptklar ilere uygun emir kipinde isimler

verin.

Javada metot ismi uzunluunda bir snr yoktur.www.javaturk.org

37

Car.java, Person.java ve Test.java Car snf, CarAttributeOnlyCompositein metotlara sahip

halidir. Person snf da, PersonAttributeOnlyCompositein bir metota sahip halidir. Test snf da Testdir.

www.javaturk.org

38

Uygulama Circle (ya da Daire) isimli bir snf oluturup aadaki

deiken ve metotlara sahip olmasn salayn: double tipinde bir yarap, Alan ve evre hesaplayp double olarak dndren iki metot.

Daha sonra main metota sahip olan ve bu metotta iki tane

Circle/Daire nesnesi oluturup, bu nesnelerin alan ve evrelerini hesaplatan bir CircleTest/DaireTest snf oluturun ve altrn.

www.javaturk.org

39

mza ve Arayz Bir metotun, isim ve parametre listesinden oluan bilgisine

imza (signature) denir. Dn deeri imzaya dahil deildir.

Bir metotun, isim, parametre listesi ve dn deeri

tipinden oluan bilgisine arayz (interface) denir. Bir metot ancak arayz bilgisiyle arlabilir. Bir snfta imzas ya da arayz ayn olan iki tane metot

olamaz.www.javaturk.org

40

Overloading Bir isim, bir snftaki birden fazla metotta kullanlabilir. Bu duruma ok kullanm (overloading) denir. Overload edilen metotlarn parametre listesi, say ve/veya

tip bakmndan farkl olmaldr. Bir snfta imzas ayn olan iki tane metot olamaz.

Overloading, genelde, ayn ii farkl parametrelerle yapan

metotlar iin kullanlr. System.out.println() metotlar

www.javaturk.org

41

CalculatorOverloaded

www.javaturk.org

42

Bir Soru? mzas ayn olup ta dn tipleri farkl olan metotlarla

overload yaplamaz. Neden?boolean method(int i, long l) { return true; } int method(int i, long l) { return 5; }

www.javaturk.org

43

PrimitiveOverloading Biliyoruz ki bir basit tip gerektiinde otomatik olarak bir st

tipe ykseltilebilir. Peki alternatif olarak birden fazla st tip varsa hangisine ykseltilir? En az ykseltme gerektiren tipe mi yoksa standart bir tipe mi? Hi bir uygun st tip yoksa?byte b = 3; x.method(b); void method(short i) { System.out.println("short"); } void method(int i) { System.out.println("int"); }www.javaturk.org

44

PrimitiveOverloading.java

www.javaturk.org

45

Kurucular (Constructors)

www.javaturk.org

46

Nesne Durumuna lk Deer Atama u ana kadar, nesneyi oluturduktan sonra, nesnenin

alanlarna, referans zerinden "." ile ulap, onlara deerler atadk ve nesneyi anlaml bir duruma getirdik.Person person = new Person(); // Unmeaningfull state person.tckn = "1"; person.firstName = "Zeynep"; person.lastName = "Kaya";

Yukardaki gibi, nesnenin durumunun anlamsz olduu bir

an ortadan kaldrmak iin, nesneyi olutururken bir metot ars yapp, nesnenin alanlarna ilk deer atayabiliriz. Nesnenin durumu, referans dndnde, anlaml olur.www.javaturk.org

47

Kurucu I Nesne oluturulurken arlan zel metota

kurucu/yaplandrc (constructor) denir. Kurucu metotlar, baz alardan zel metotlardr ve sadece nesne oluturuken arlrlar. Kurucular, new anahtar kelimesiyle kullanlrlar. Javada kurucu ars yapmadan oluturulabilen sadece 2 tip

vardr: String ve dizi (array) Dier her trl nesne, ancak ve ancak kurucu ile oluturulur.

Kurucu metotlar ile nesnenin durumunun ilk halini almas

salanr. Bu amala kurucu metotlar parametre tanmlayabilir ve bu durumda onlara deer geilir.www.javaturk.org

48

Kurucu II Kurucunun ismi, iinde tanmland snfn ismiyle ayn

olmaldr. Kurucunun dn tipi, dolaysyla da dn deeri yoktur. Kurucular overload edilebilirler. Bu durum, farkl nesne oluturma ekillerine karlk gelir. Hibir argman almayan kurucuya varsaylan kurucu

(default constructor ya da no-arg constructor) denir. Argman alan kuruculara akll kurucu (smart constructor)

denir.www.javaturk.org

49

Varsaylan Kurucu I Bir snfta hi bir kurucu tanmlanmazsa, derleyici,

derlenmi .class kodunda bir tane varsaylan kurucu salar.public class TreeWithNoConstructor { private String type; private float height; public static void main(String[] args) { TreeWithNoConstructor tree = new TreeWithNoConstructor(); tree.type = "Oak"; tree.height = 8.74f; } }

www.javaturk.org

50

Varsaylan Kurucu II Varsaylan kurucuyu siz de salayabilirsiniz, ama dardan

argman almadndan, nesneleri yaratann, nesnelerin ilk durumlar ile ilgili bir inisiyatifi sz konusu olmayacaktr.public class TreeWithDefaultConstructor { private String type; private float height; public TreeWithDefaultConstructor(){ type = "Pine"; height = 1.0f; } public static void main(String[] args) { TreeWithDefaultConstructor tree = new TreeWithDefaultConstructor(); tree.printInfo(); } }www.javaturk.org

51

Argmanl Kurucu Kurucular, argman alabilirler. Bu durumda, kurucu, yaratlan nesnenin ilk halini belirleyecek ekilde dardan argman geilerek arlr. Farkl parametre seenekleriyle, overloaded kurucular

salanabilir. Bu durum, farkl nesne oluturma ekillerine karlk gelir. Zaten tasarm srasnda nesnelerin hangi kurucularla oluturulacana

karar vermek gereklidir.

Derleyici, hi bir kurucu olmadnda, varsaylan kurucuyu

otomatik olarak salamasna karn, bir kurucu olduunda bu iyiliine son verir. Argman alan bir kurucunun varlnda, derleyicinin, varsaylan kurucuyu salamamasnn sebebi ne olabilir?www.javaturk.org

52

TreeWithArgumentConstructor.java

www.javaturk.org

53

TreeWithOverloadedConstructors.java

www.javaturk.org

54

Uygulama Daha nce oluturduunuz Circle (ya da Daire) isimli snfa

iki tane kurucu koyun: Varsaylan kurucu yar ap 10 olan bir Circle nesnesi

olutursun. Argman alan kurucu ise geilen deeri yar apa atasn.

www.javaturk.org

55

Kurucularn Birbirlerini armalar Kurucular, bazen yapacaklar ii, dier kurucularn

yardmyla yapabilirler. Bu durumda kurucularn birbirlerini armalar gerekir. Bu ise "this" anahtar kelimesi ile yaplr.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.javaturk.org

56

TreeWithThis.java this ile, ayn metotlarda olduu gibi, imzas uyan kurucu

metot arlr. this ars, bir kurucuda ilk alan satr olmaldr. Neden?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); }www.javaturk.org

57

Uygulama Daha nce oluturduunuz Circle (ya da Daire) isimli

snftaki varsaylan kurucuya yapacaz deiiklikle, onun this(...) ars ile, argman alan kurucuyu ararak nesne oluturmasn salayn.

www.javaturk.org

58

TreesWithoutReferences.java Daha nce, nesne ve onlara olan referanslarn ayr eyler

olduunu ve bir nesneye birden fazla referans olabilecei gibi, bir referansn da farkl zamanlarda ayn tipten farkl nesneleri gsterebileceini belirtmitik.

www.javaturk.org

59

this Anahtar Kelimesi I Bir nesnenin durumunu oluturan alanlarnn deerlerinin,

nesnenin, heap ismi verilen, dinamik bellekte, kendisine ayrlm olan yerinde tutulduunu daha nce ifade etmitik. Peki, nesnelerin metotlar nerede tutulurlar? Metotlarn kodu, bellein "code" ksmnda tutulur ama her

metot ars iin bellein "stack" ksmnda bir pencere (frame) alr ve ilkel olsun, referans olsun, metotun yerel deikenleri burada oluturulur.

arlan bir metot, kendisi iin arld nesneyi bilmek

zorundadr. nk, nesnesinin deikenlerini kullanabilir.www.javaturk.org

60

this Anahtar Kelimesi II Bir nesne metotunda, o metotun kendisi iin arld

nesnenin referans, this ile ifade edilir. Bu durum, sanki, o metota, zerinde arld nesnenin gizli bir referansla geilmesi ile aklanabilir.A a1 = new A(); a1.f(5); A a2 = new A(); a2.f(11);

class A{ void f(int x){ ... } }

A a1 = new A(); A.f(a1, 5); A a2 = new A(); A.f(a2, 11);61

www.javaturk.org

this Anahtar Kelimesi III this, genel olarak u 2 yerde kullanlr:

Kurucu ya da bir nesne metotunda, ayn isimde bir yerel

deiken olduunda, nesne deikenine ulamak iin. Bu durum, genelde ayn isim, hem nesne hem de yerel

deikende kullanldnda sz konusu olur. Byle bir durum yoksa this kullanmaya da gerek yoktur.public class Tree{ String type; float height; public Tree(String type, float height){ this.type = type; this.height = height; } }www.javaturk.org

62

this Anahtar Kelimesi IV Herhangi bir sebeple, zerinde metotun zerinde arld

nesneye ulamak iin.

public class Tree{ String type; float height; public Tree grow(){ height++; return this; } }

www.javaturk.org

63

Tree.java ve Bank.java

www.javaturk.org

64

this Anahtar Kelimesi V Aadaki durumlarda this kullanmaya gerek yoktur:public class Tree{ String type; float height; public void printInfo(){ this.printType(); this.printHeight(); } public void printType(){ System.out.println("Type: " + this.type); } public void printHeight(){ System.out.println("Height: " + this.height); } }

www.javaturk.org

65

Uygulama Daha nce oluturduunuz Circle (ya da Daire) isimli

snftaki kuruculara geilen parametreleri, nesne deikenleriyle ayn isimde yapn ve kurucu iindeki atamlarda nesne deikenlerine ulamak iin "this" referansn kullann.

www.javaturk.org

66

Parametre Geme I Metot arlrken, arld yerde metota gerek

parametreler/argmanlar geilir ve bu argmanlar metot iinde formal parameterlerle temsil edilir. Geilen argmanlarla metot parametreleri arasndaki iliki nasldr?public class ParameterPassing{ public void f(int k){ k++; } public static void main(String[] args){ PrimitivePassing o = new PrimitivePassing(); int i = 5; o.f(i); System.out.println(i); } }www.javaturk.org

67

public class ParameterPassing{ public void f(A a){ a.j++; } public void f(int k){ k++; } public static void main(String[] args){ ParameterPassing o = new ParameterPassing();

int i = 5; o.f(i); System.out.println(i);A a = new A(); o.f(a); System.out.println(a.j); } } class A{ int j = 5;}www.javaturk.org

68

Parametre Geme II Javada basit tipler, deerleri kopyalanarak (pass-by-copy),

nesneler ise referanslar kopyalanarak (pass-by-reference) geilirler. Bu sebeple, bir metota geilen bir basit deikenin deeri metotta deise bile, deerinde bir deiiklik olmaz. nk deien formal paramateredir.

Fakat, bir metota geilen bir nesnenin referans, metotun

formal parametresine kopyalanr, dolaysyla ayn nesneye, biri ilk ortamndan birisi de metottaki formal parametreden olmak zere iki tane referans olur. Her iki referans da ayn nesneyi gsterdiinden, birbirlerinin

deiikliklerinden haberdar olurlar.www.javaturk.org

69

ObjectPassing.java

www.javaturk.org

70

Referans le Geme (Pass-by-Reference) Javada referans ile geme, aslnda referansn

kopyalanmasndan baka birey deildir. Yani formal parametre, nesnenin referansnn gsterdii

bellek adresini gsterecek ekilde oluturulur. Bu yzden metota geilirken oluturulan referansa, formal

parametreye, daha sonra baka bir nesne atanabilir.

www.javaturk.org

71

public static void main(String[] args) { ObjectPassing o = new ObjectPassing(); W w = new W(3, false); o.f(w); System.out.println("i of w is " + w.i + " b of w is " + w.b); }

and

public void f(W objectW) { objectW.i = 5; objectW.b = true; W ww = new W(8, true); objectW = ww; objectW.i = 12; objectW.b = false; System.out.println("i of objectW is " + objectW.i + " and b of objectW is " + objectW.b); }www.javaturk.org

72

final Anahtar Kelimesi final anahtar kelimesi ile daha nce bir basit deikenin

nasl bir sabite haline getirilebielceini grmtk. final kullanlarak tantlan basit deikenlerin deeri

deitirilemez.final int i = 5; i = 8; // Compile-time error.

www.javaturk.org

73

final Referans Nesneler final yaplamaz, ancak nesnelerin alanlar final

yaplabilir. Bu ekilde durumu deimeyen nesne elde edilir.

Referansn final olmasnn anlam, basit deikenlere gre

biraz farkldr. final referanslar, gsterdikleri nesneden baka bir nesneyi gsteremezler.final Car c = new Car(); c = new Car(); // Compile-time error.

www.javaturk.org

74

final Deikenler final olan deikenin, basit olsun referans olsun, tantld

yerde bir ilk deer almasnn zorunlu olduunu belirtmitik. Bu durumun tek istisnas kurucu metotta bir ilk deer

atamasdr. final olan deikenlere kurucuda bir ilk deer atarsanz,

tantld yerde atama zorunluluu kalkar.

www.javaturk.org

75

FinalCar.java

www.javaturk.org

76

final Parametreler Bir metota geilen parametrenin deerinin o metotta

deimesini nlemek istiyorsanz, parametrenizi metot arayznde tanmlarken final yapabilirsiniz.public void speedUp(final int newSpeed){ newSpeed = 75; // Compile-time error. speed = newSpeed; } public void setOwner(final String newOwner){ newOwner = "New Owner"; // Compile-time error. owner = newOwner; }

www.javaturk.org

77

static

www.javaturk.org

78

static Anahtar Kelimesi Her nesne bellekte, kendi durumunu ifade eden deiken

kmesine sahiptir ve bu kmede bulunan deikenlerin deerleri, dier nesnelerdekilerden bamsz olarak deitirilebilir. ye veriler (data members)

Bazen nesnelerin yle zellikleri olur ki deeri nesneden

nesneye deimez, btn nesneler iin ayndr. Bu durumda o bilgiyi, her nesnede ayr ayr saklanacak ekilde

nesne deikeni olarak tanmlamak uygun deildir.

Bu ekilde, ald deeri nesneye bal olmayan deikenler

"static" anahtar kelimesiyle nitelendirilirler.www.javaturk.org

79

static Deikenler Statik deikenler, nesneden bamsz olduklarndan

nesnelerin deil, nesnelerin snflarnn parasdrlar. Bu yzden, static olarak nitelendirilen deikenlere snf deikenleri (class variables) de denir. Statik deikenlerin sadece bir kopyas vardr, o da snftadr. Snf deikenlerine hem snf hem de nesneler zerinden

eriilebilinir. Uygun olan snf zerinden erimektir; nk nesne zerinden

eriildiinde, nesne deikeni izlenimi vermektedir.

www.javaturk.org

80

static Metotlar Snflar, deikenler gibi metotlara da sahip olabilirler, Bunlara da statik metotlar denir. Statik metotlar da static deikenler gibi snfn bir

parasndrlar, Hem snf hem de nesne zerinde arlabilirler.

Uygun olan snf zerinden erimektir.

www.javaturk.org

81

StaticDemo.java

www.javaturk.org

82

Ne Zaman static? I Statik zellikler, snfn bir paras olduklarndan,

arlmalar iin bir nesneye ihtiya yoktur. Dolaysyla eer bir bilgi bir snftan oluturulan nesnelerin

durumunun bir paras olup, deeri nesneden nesneye deimiyorsa, bir baka deile, deeri tm nesneler iin her zaman ayn olacaksa, bu deiken static yaplr. Benzer ekilde bir metot eer bir snfn statik olan

deikenlerini kullanyor, nesnelerin deikenlerini kullanmyor ise o metot da static yaplr.www.javaturk.org

83

Ne Zaman static? II Zaten statik metotlar dorudan ancak statik deikenlere

ulaabilir, nesne deikenlerine ulaamaz. nk statik metotlar bir nesneye ihtiya duymazlar ve bir

nesne zerinde arlsalar bile snf zerinde alrlar ve sadece snf deikenlerine ularlar. Statik metotlar iin this de yoktur.

www.javaturk.org

84

Ne Zaman static Deil? I Statik kullanm, tamamen marjinal ve sra d bir

durumdur. Aslolan daima nesnedir, yani nesne deikenleri ve

metotlardr.

nk nesneler, problemimizi modellemeye yararlar.

Statik deiken ve metotlar ise bu modelde ok zel

durumlarda ortaya karlar ve kullanmlar ancak bu zel durumlara has olmaldr. Nesne oluturmann gereksiz olduu durumlarn zm static deildir. Bu durumun zm gereksiz nesne oluturmamaktr.www.javaturk.org

85

Ne Zaman static Deil? II Bir snftaki tm deikenleri ve dolaysyla da metotlar

static yapmann sebebi olsa olsa o snftan nesne oluturmann teorik ve pratik olarak anlaml olmamasdr. java.lang.Math snfnda var olan E ve PI alanlar ile tm

metotlar statiktir, nk Math snfnn nesnelerinin olmas teorik adan muhaldir. Pratik adan da zaten snf, muhtemel tek nesne olarak grlebilir. Benzer ekilde java.lang.System snf da statik alan ve metotlara sahiptir.

alann modellemeye bir katks olmayan utility snflarnn

da ou zaman nesnelerinoluturulmayp, statik metotlarla, snf zerinden hizmet alnr.www.javaturk.org

86

Uygulama Bir snftan ka tane nesne oluturulduunu nasl

bulursunuz? Bir snf yapn ve bu snfn herhangi bir kurucusunu

ararak oluturulan tm nesneleri sayn. Bu sayy tutacak deikenin nesne mi yoksa snf deikeni

mi olmas gerekir?

www.javaturk.org

87

main Metot main metot, statik metota ok gzel bir rnektir. main metot, JVMe geilen snfta bulunmas gereklidir ve

bu metot bir nesneye ihtiya olmadan arlabilmelidir. Bu yzden main metot statiktir.

www.javaturk.org

88

static ve final Tanmlamalar Hem static hem de final olan tanmlamalar ile snflar

zerinden eriilen ve deeri deimeyen sabiteler oluturulabilir. Bu ekilde tanmlanan sabitelerin isminde byk harfler kullanlr ve kelimeler arasna "_" getirlir.static final int MAX_UNIT_COUNT = 100; static final double STANDARD_LOAD_RATIO = 0.8;

www.javaturk.org

89

Balatma (Initialization)

www.javaturk.org

90

lk Deer Atama Javada ye deikenler (member variables) iin ilk deer

verme aada belirtilen 5 yoldan herhangi birisiyle yaplabilir: Tantma cmleleri (definition statements) Kurucular (constrcutors)

Metot arlar Nesne (ilk deer atama) balatma bloklar (initialization

blocks) Statik (ilk deer atama) balatma bloklar (static initialization blocks)

www.javaturk.org

91

Tanmlama Cmleleri Statik olsun olmasn, ye deikenlere ilk deer atamas,

tantld yerde yaplabilir.int minAge = 18; static double percentage = 5.8;

Metot ars ile de ilk deer atamas yaplabilir. Bu durumda nesne deikeni iin nesne metotu, snf

deikeni iin ise snf metotu kullanlmaldr.boolean isOpen = getDoorStatus(); static double pi = getPi();

www.javaturk.org

92

leri Referans Problemi ye deikenleri tanmlarken ileri referans vermek bir

derleyici hatasdr:int i = j; // Compiler error. A a = new A(j); // Compiler error. int j = 8;

Fakat ye deikenleri tanmlarken metot ars yaplabilir. Bu durum baz tutarszlklara sebep verebilir:int i = getJ(); int j = 8; public int getJ(){ return j; }www.javaturk.org

93

InitializersDemo.java

www.javaturk.org

94

Balatma Bloklar lk deer atamalar balatma bloklar (initializer blocks)

iinde yaplabilir. Bu bloklar genel olarak snfn banda tanmlanr. Nesne ve snf deikenleri iin, statik olmayan ve olan olmak zere iki tr vardr.public class Car{ int speed; speed = 0; // Compiler error ... static int carCount; carCount = 1; // Compiler error ... }www.javaturk.org

95

Nesne Deikenleri Balatma Bloku I Nesne deikenleri tantldktan sonra nesne balatma

bloklarnda (instance initializer blocks) ilk deerleri atanabilir. Nesne deikenlerinin balatma bloklar, her nesne oluturulmasnda altrlr. Balatma bloklar ileriye referans veremez ve deer dndremez.int j; boolean b; { j = 8; b = true; }www.javaturk.org

96

Nesne Deikenleri Balatma Bloku II Balatma bloklar neden kullanlr? Karmak kod gerektiren ilk deer atamalar, byle bir bloku gerekli klar. Baz ilk deerler iin srad durum frlatabilen karmak hesaplamalar gerekli olabilir. Kurucu varken neden byle bir ilk deer atama

mekanizmasna ihtiya vardr? Birden fazla kurucu olduu durumda, ilk deer atama

kodunun her kurucuya ayr ayr konmas gerekir. Bu da bakm problemine sebep olur.

Karmak ilk deer kodunun bir yerde olup, hangi

kurucunun arldndan bamsz olarak, her nesne iin tekrar almasn salamann yolu, balatma blokudur.www.javaturk.org

97

Statik Balatma Bloklar I Statik balatma bloklar (static initializer blocks) ise static

deikenlerde kullanlr. Blok banda static kelimesi kullanlr. Statik bloklar, snfn yklenmesi srasnda bir defa altrlr, bir daha altrlmaz.static double k; static char c;

static{

//If static don't exists, it is not initialized as static k = 5.0; c = 'c';98

}www.javaturk.org

Statik Balatma Bloklar II Kurucular ve nesne balatma bloklar, nesne deikenlerine

ilk deer atamak iin ideal yerlerdir. Fakat statik deikenlerin ilk deer atamas kurucuya braklmamaldr, nk hi nesne oluturulmayabilir. Dolaysyla snf deikenlerinin, nispeten karmak olan ya da srad durum frlatabilecek olan ilk deer atamalar, statik balatma bloklarnda yaplmaldr.static int[] ints = new int[10]; static { System.out.println("Initializing the array"); for(int i = 0; i < ints.length; i++) ints[i] = i * 10; }www.javaturk.org

99

InitializersBlock.java

www.javaturk.org

100

Balama Sras I Bir snfta, pek ok snf ve nesne deikeni, ilk deer atama

bloklar ve kurucular olduunu gz nne alndnda, bu deikenlerin oluturulmalar ve kurucularn arlmas hangi srada olur? InitializationOrder.java

www.javaturk.org

101

Balama Sras II Bir snfa ilk defa ulaldnda nce o snfn .class dosyas

JVMe yklenir. Bir snfa ulamann yollar ise unlardr:

Statik bir deikenine ulamak Statik bir metotunu armak Nesnesini oluturmak iin kurucu ars yapmak

Daha sonra snfn statik deikenleri balatlr. Snfn bir nesnesi oluturulmasa bile snfa ulaldnda statik deikenleri balatlr. Deikenlerin balatlmasna, varsa statik balatma bloklar da dahildir.www.javaturk.org

102

Balama Sras III Sonra eer snfn bir nesnesi oluturuluyorsa, nesne

deikenleri de balatlr. Deikenlerin balatlmasna, varsa nesne balatma bloklar da

dahildir. Daha sonra kurucu ars yaplr.

Her yeni nesne iin deiken iin bu ilemler, yani nesne

deikenlerinin balatlmas ve kurucu ars tekrarlanr. Snf deikenleri, ne kadar nesne oluturulursa oluturulsun, sadece ve sadece bir defa balatlr. Fakat nesne oluturulurken, her halukarda, snf deikenleri nesne deikenlerinden nce balatlr.www.javaturk.org

103

Balama Sras IV Dolaysyla balama sras Snf deikenleri Nesne oluturuluyorsa

Nesne deikenleri Kurucu ars

eklindedir.

Birden fazla snf ve nesne deikeni olduu durumda

balatma sras, fiziksel srayla belirlenir, nce gelen nce balatlr.

www.javaturk.org

104

Uygulama Daha nce yaptnz University uygulamas zerinde

balama srasn tahmin edin. Kuruculara gerekeli print ifadelerini yazarak balama srasn

gzlemleyin.

www.javaturk.org

105

Bellek Ynetimi (Memory Management)

www.javaturk.org

106

Bellek ve Nesneler JVMde temelde iki tr bellek vardr: arlan metotlarn kulland yn (stack) Nesnelerin oluturulduu heap Ar sayda metot ars, zellikle kendini aran metotlar,

yn iin ayrlan bellein tamamen dolmasna sebep olur. Bu durumda JVM java.lang.StackOverflowError hatas frlatr.

Oluturulan nesne says arttka JVMin heap bellei dolar.

Ar sayda nesne oluturulduunda ise JVM java.lang.OutOfMemoryError hatas frlatr.www.javaturk.org

107

p Toplayc (Garbage Collector) Heapte, artk kendisine hibir referans kalmam nesneleri

silip, belleklerini heape geri kazandran yapnn ismi p Toplaycdr (Garbage Collector ya da GC). Bu durum otomatik bellek ynetimi (automatic memory

management) olarak adlandrlr. Bu erevede GC zaman zaman ayaa kalkp, referanssz

nesneleri bulur ve siler. Bylece kullanlmayan nesnelerden dolay heapin imesi

nlenmi olur.www.javaturk.org

108

Yn ve Heap Bellek Parametreleri JVMe, yn ve heap iin min ve max bellek snrlar

parametre olarak geilebilir. Yn iin XxsN, minimum yn deeri N verilebilir. Heap iin XmsN ve XmxN minimum ve maximum heap

deerleri N olarak verilebilir. N ise k ya da K veya m ya da M ksaltmalaryla, kilobytes veya

megabytes ifade eder.

www.javaturk.org

109

StackDemo.java

www.javaturk.org

110

HeapDemo.java Snf, farkl sayda nesne oluturarak altrn ve heapin

durumunu ve GCnin davrann gzlemleyin.

www.javaturk.org

111

SieveOfEratosthenes.java nce varsaylan sonra da Xmx seeneiyle daha byk bir

heap oluturarak snfn davrann gzlemleyin.

www.javaturk.org

112

null I null, bir anahtar kelimedir, sadece referans deikenlerine

atanabilir ve referansn hi bir nesneyi gstermediini ifade eder. nulln tipi yoktur, her referans tipe atanabilir ya da evrilebilir

(cast). Yani referans vardr ama bellekteki hi bir nesneye iaret etmiyordur.

Bu ekildeki referanslara "null pointer" denir. Bellekteki hi bir nesneyi gstermeyen refereranslar

zerinden herhangi bir eriim daima "NullPointerException"a sebep olur. nk eriilecek deikenlere ve metotlara sahip bir nesne

yoktur.www.javaturk.org

113

null II Bir referans, iki halde null olur: Referans sadece tanmlanp da herhangi bir nesne atamas yaplmadnda, Referansa zel olarak null atandnda. Neden bir referansa null atanr? Referans ile gsterdii nesne arasndaki iliki kesildiinde ve nihayetinde bir nesneyi gsteren hi bir referans kalmadnda, o nesne p Toplayc (Garbage Collector) tarafndan toplanp igal ettii alan da bellee geri kazandrlr.Car myCar; car.make = "Mercedes" myCar = new Car(); myCar = null; // // // // null reference NullPointerException Not a null reference anymore null reference114

www.javaturk.org

zet Bu blmde Javada snf ve nesne yaplarna giri yapld. Nesne ve snf deikenleriyle kurucularn ve metotlarn

nasl oluturulduunu ve kullanldn ele alnd. this ve static anahtar kelimelerini incelendi. Snflarn ve nesnelerin balatlmasn incelendi. JVMin bellek yapsndan bahsedildi.www.javaturk.org

115

www.javaturk.org

116

Uygulamalar I Bu blmde rnek olarak gsterilen University

uygulamasndaki snflara uygun kurucular ve sorumluluklarn yerine getiren metotlar yerletirin. Ayn uygulamaya Classroom isimli yeni bir snf ekleyin ve bu

snfn zelliklerini ve davranlarn belirleyin. Bu snf Course snfyla ilikilendirin.

Main metot iinde gerekli nesneleri oluturup aralarndaki

ilikileri kurgulayn.

www.javaturk.org

117

Uygulamalar II Bir kiinin kitap okumasn simule edecek ekilde Reader ve

Book snflarn, uygun zellikler, kurucular ve metotlar ile oluturun. Bookta olabilecek zellikler Author author String title int noOfPages String type

boolean ishardCover int currentPage Reader readerwww.javaturk.org

118

Uygulamalar III Readerta olabilecek zellikler String name int age char sex Book book

www.javaturk.org

119

Uygulamalar IV 2 boyutlu dzlemde bir noktay temsil etmek zere bir Point

snf oluturun. Bu snfa, koordinat bilgileri ile uygun kurucu(lar) koyun. Ayrca oluturulan nokta nesnesinin orijine uzakln ve geilen bir baka noktaya uzakln hesaplayan iki metot daha koyun. Ayn snfn zerine clone isimli bir metot koyun ve bu metotla ayn

koordinatlara sahip bir baka Point nesnesi oluturup dndrn. Ayn snfn zerine move isimli bir baka metot koyun ve bu metot ile nesneyi, "x" ya da "y" ynnde belirtilen miktar kadar hareket ettirip, ayn nesneyi geri dndrn.

Daha sonra Geometry isimli bir baka snf oluturun. Bu snfn

zerine, kendisine geilen 2 Point nesnesi arasndaki uzakl hesaplayp dndren bir metot koyun. Bu metotun static olup olamayacan tartn.www.javaturk.org

120