You are on page 1of 67

Balang Durumuna Getirme ve Temizlik

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 3

Hatalarn sebepleri...

Nesnelerin yanl biimde balang durumlarna getirilmesi


Uygulamay yazan kii bilmedii ktphaneye ait nesneleri yanl ekilde balang durumuna getirmesi nedeniyle hatalarla karlaabilir.

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 3

Hatalarn sebepleri

Temizlik ileminin doru bir ekilde yaplmamas


Oluturulmu ve kullanlmayan nesnelerin, sistem kaynaklarnda gereksiz yere var olmas ile bellek problemleri ortaya kabilir.

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 3

Balang durumuna getirme ilemi ve yaplandrclar

Bir nesnenin balang durumuna getirilme ilemi (initialization), bir sanatnn sahneye kmadan evvelki yapt son hazrlk gibi dnlebilir.

Oluturulacak olan nesne kullanma sunulmadan evvel baz bilgilere ihtiya duyabilir veya baz ilemleri gerekletirmesi gerekebilir (JDBC, konfigurasyon dosyas yklenmesi gibi).

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 3

Yaplandrclar (Constructor)

Yaplandrclar ierisinde nesne oluturulmadan nceki son hazrlklar yaplr. Yaplandrclar normal yordamlardan (method) farkldrlar. Yaplandrclar, Java tarafndan otomatik olarak arlrlar. Karmza kan iki problem Java Yaplandrcnn ismini nasl bilecektir ? Yaplandrcnn ismi baka yordamlarn isimleriyle akmamaldr.

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 3

Problemin zm

Bu problemlere ilk zm C++ dilinde bulunmutur. Yaplandrcnn ismi ile snf ismi bire bir ayn olmaldr. Bylece Java, yaplandrcnn ismini nceden tahmin edebilecektir. sim karkl minimuma indirgenmi olur.

YapilandirciBasitOrnek.java
Altu B. Altnta 2003 Java ve Yazlm Tasarm - Blm 3 6

Yaplandrclar (Constructor) - 2

Yaplandrclara parametreler aktarlabilir. Yaplandrc ierisinden herhangi bir ekilde return ifadesi ile deer dndrlemez. (return 5, return true gibi) Yaplandrclardan kmak istiyorsak sadece return yazlmas yeterlidir...

YapilandirciBasitOrnekVersiyon2.java
Altu B. Altnta 2003 Java ve Yazlm Tasarm - Blm 3 7

Ada Yordamlar (Overloaded Methods)

yi bir uygulama yazmak her zaman iyi bir takm almas gerektirir. Uygulamalardaki yordam (method) isimlerinin, yordam ierisinde yaplan i ile uyum gstermesi nemlidir. Bu sayade bir baka kii sadece yordam ismine bakarak, ierisinde oluan olaylar anlayabilme ansna sahiptir.

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 3

rnek - 1

Elimizde bulunan muzik resim text formatndaki dosyalar amak iin yordamlar yazmak istersek, bu yordamlarn isimlerinin ne olmas gerekir ?

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 3

rnek - 1 (devam)

Yordam isimleri olarak muzik dosyas iin muzikDosyasiAc() resim dosyas iin resimDosyasAc() text dosyas iin textDosyasAc()

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 3

10

rnek - 1 (devam)

Sonuta ilem sadece dosya amaktr, dosyann tr sadece bir ayrntdr.

MetodOverloadingDemo1.java

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 3

11

Ada yordamlar nasl ayrt edilir ?

Java ayn isimde olan yordamlar (overloaded methods) nasl ayrt edebilmektedir ? Her yordamn kendisine zel/tek parametresi veya parametre listesi olmak zorundadr.

MetodOverloadingDemo2.java

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 3

12

Ada yordamlar dn deerlerine gre ayrt edilebilir mi ?

Akllara yle bir soru gelebilir : "Ada yordamlar dn tiplerine gre ayrt edilebilir mi ? " void toplamaYap(); double toplamaYap(); double y = toplamayap() ; toplamayap() ;
Altu B. Altnta 2003

// sorun var
Java ve Yazlm Tasarm - Blm 3 13

Varsaylan yaplandrclar (Default constructors)

Eer uygulamamza herhangi bir yaplandrc koymazsak Java bu ilemi kendi otomatik olarak yapmaktadr.

Varsaylan yaplandrclar (parametresiz yaplandrclar, default constructor veya "no-args" constructor) ii bo bir yordam olarak dnlebilir.

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 3

14

rnek - 2

class Kedi { int i; } public class VarsayilanYapilandirici { public static void main(String[] args) { //Varsaylan yaplandrc arld Kedi kd = new Kedi(); } }

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 3

15

rnek - 2 (devam)
class Kedi { int i; /* varsaylan yplandrc. Bu yaplandrcy eer biz koymasaydk Java bizim yerimize zaten koyard */ public Kedi() {} } public class VarsayilanYapilandirici { public static void main(String[] args) { // varsaylan yplandrc Kedi kd = new Kedi(); } }

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 3

16

Bynn Bozulmas

Eer kendimiz yaplandrc yazarsak, Java bizden varsylan yaplandrc desteini ekecektir. Kendimize ait zel yaplandrclar tanmlarsak Javaya "Ben ne yaptm biliyorum, ltfen karma" demi oluruz.

VarsayilanYapilandiriciVersiyon2.java

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 3

17

this anahtar kelimesi

this anahtar kelimesi, iinde bulunulan nesneye ait bir referans dner. Bu referans sayesinde nesnelere ait global alanlara erime frsat buluruz.

TarihHesaplama.java

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 3

18

Yordam carmlarnda this kullanm - 2

Yumurta.java

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 3

19

Bir yaplandrcdan dierini armak

Yaplandrc ierisinden dier bir yaplandrcy arrken this ifadesi her zaman ilk satrda yazlmaldr. Her zaman yaplandrclar ierisinden this ifadesi ile baka bir yaplandrc arlr. Yaplandrclar iersinde birden fazla this ifadesi ile baka yaplandrc arlamaz.

Tost.java
Altu B. Altnta 2003 Java ve Yazlm Tasarm - Blm 3 20

Ekran kts

Tost(int sayi ,String malzeme) Tost(int sayi) parametresiz yapilandirici Tost sayisi =5 malzeme =Sucuklu

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 3

21

Statik Alanlar (Snf Alanlar)

Sadece global olan alanlara statik zelliini verebiliriz. Yerel deikenlerin statik olma zellikleri yoktur. Statik alanlar, bir snfa ait olan tm nesneler iin ayn bellek alannda bulunurlar.

StatikDegisken.java
Altu B. Altnta 2003 Java ve Yazlm Tasarm - Blm 3 22

Ku bak grnt

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 3

23

Statik Yordamlar (methods) Statik yordamlar (snf yordamlar), nesnelerden bamsz yordamlardr. Statik bir yordam armak iin herhangi bir snfa ait nesne oluturma zorunluluu yoktur. Statik olmayan yordamlardan (nesneye ait yordamlar), statik yordamlar rahatlkla arlabilmesine karn statik yordamlardan nesne yordamlarn dorudan aramayz.

StatikTest.java
Altu B. Altnta 2003 Java ve Yazlm Tasarm - Blm 3 24

Bir yordamn statik mi yoksa nesne yordam m olacana neye gre karar vereceiz?

Nesnelerin durumlar (state), uygulamann gidiine gre deiebilir.

MutluAdam.java (*)

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 3

25

Statik yordamlar

Statik yordamlarlar atomik iler iin kullanlrlar. Uygulamalarnzda ok fazla statik yordam kullanyorsanz, tasarmnz batan bir kez daha gzden geirmeniz tavsiye olunur.

Toplama.java

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 3

26

Temizlik lemleri: finalize() ve p toplayc (Garbage Collector) Java dilinde, C++ dilinde olduu gibi oluturulan nesnelerimizi ileri bitince yok etme zgrl kodu yazan kiinin elinde deildir. deildir Bir nesnenin gerekten p olup olmadna karar veren mekanizma p toplaycsdr (garbage collector).

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 3

27

finalize() yordam Akllarda tutulmas gereken dier bir konu ise eer uygulamanz ok fazla sayda p nesnesi (kullanlmayan nesne) retmiyorsa, p toplaycs (garbage collector) devreye girmeyebilir. Bir baka nemli nokta; System.gc() ile p toplaycsn tetiklemezsek , p toplaycsnn ne zaman devreye girip p haline dnm olan nesneleri bellekten temizlenecei bilinemez.

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 3

28

System.gc()

Temizle.java Temizle2.java

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 3

29

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 3

30

p toplaycs (Garbage Collector) nasl alr?

p toplaycsnn temel grevi, kullanlmayan nesneleri bularak bunlar bellekten silmektir. Sun Microsystems tarafndan tantlan Java HotSpot VM (Virtual Machine) sayesinde heap blgesindeki nesneler nesillerine gre ayrlmaktadr. Eski Nesil Yeni Nesil

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 3

31

p toplaycs (Garbage Collector) nasl alr?

Nesnelerin bellekten silinmesi grevi kodu yazan kiiye ait deildir. Bu grev p toplaycsna aittir. Java 1.3.1 ve daha sonraki Java versiyonlar iki noktay garanti eder;
Kullanlmayan nesnelerin kesinlikle bellekten silinmesi. Nesne bellek alannn paralanmasn engellemek ve bellein sktrlmas.

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 3

32

p toplama teknikleri

Eski yntem
Referans Sayma Yntemi

Yeni Yntemler
Kopyalama yntemi (Copy) aretle ve spr yntemi (Mark and Sweep) Artan (sra) yntem (Incremental)

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 3

33

Heap Blgesine Bak

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 3

34

Heap blgesinin boyutlar nasl kontrol edilir.

Heap blgesine minimum veya maksimum deerleri vermek iin -Xms veya -Xmx parametlerini kullanrz.

java -Xms32mb Temizle

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 3

35

Kopyalama ynteminin gsterimi

Birazdan gsterilecek olan eklimizde, canl nesneler krmz renk ile ifade edilmitir.

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 3

36

Aama 1

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 3

37

Aama 2

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 3

38

Aama 3

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 3

39

aretle ve spr ynteminin gsterimi

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 3

40

Kopyala yntemin ve iaretle ve spr yntemi

HeapGosterim.java

java -verbosegc HeapGosterim

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 3

41

Uygulamann kts

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 3

42

Alanlara ilk deerleri atama

Java uygulamalarnda tr deiken eiti bulunur: Yerel (local) deikenler. Nesneye ait global alanlar. Snfa ait global alanlar (statik alanlar).

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 3

43

rnek - 3

DegiskenGosterim.java

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 3

44

Yerel Deikenler

public int hesapla () { // yerel deikenlere ilk deerleri her zaman


//verilmelidir.

int i ; i++; // ! Hata ! ilk deger verilmeden zerinde ilem yaplamaz return i ;
}

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 3

45

Nesneye ait global alanlar ilkel tipler

IlkelTipler.java

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 3

46

Nesneye ait global alanlar - snf tipleri

NesneTipleri.java

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 3

47

Snflara ait global deikenler - ilkel tipler

nemli Nokta: Statik olan alanlara sadece bir kere deer atanr.

IlkelTiplerStatik.java

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 3

48

Snflara ait global deikenler snf tipleri

StatikNesneTipleri.java

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 3

49

lk deerleri atarken yordam kullanm

KarisikTipler.java

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 3

50

lk deer verme sralamas

Nesneye ait global alanlara ilk deer hemen verilir, hatta yaplandrcdan bile nce... Alanlarn konumu hangi srada ise ilk deer verme sralamas da ayn srada olur.

Defter.java

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 3

51

Statik ve statik olmayan alanlarn deer alma sralamas

Statik alanlar snflara ait olan alanlardr ve statik olmayan (nesneye ait alanlar) alanlara gre ilk deerlerini daha nce alrlar.

Kahvalti.java

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 3

52

Statik alanlara toplu deer atama

Statik alanlarmza toplu olarak deer atama.

StatikTopluDegerAtama.java

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 3

53

Statik olmayan alanlara toplu deer atama

NonStatikTopluDegerAtama.java

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 3

54

Diziler (Arrays)

Diziler nesnedir. Dizi nesnesi, iinde belli sayda eleman bulundurur. Dizi ierisindeki ilk elemann konumu 0 'dan balar, son elemann yeri ise n-1 'dir.

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 3

55

Dizi tipindeki deikenler

double[] dd double dd[] float [] fd Object[] ao

; ; ; ;

// // // //

double tipindeki dizi double tipindeki dizi float tipindeki dizi Object tipindeki dizi

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 3

56

Dizileri oluturmak

double[] d double dd[] float [] fd Object[] ao String[] s

= new double[20] ; = new double[20]; = new float [14]; = new Object[17]; = new String[25] ;

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 3

57

Dizilerin tekrardan boyutlandrlmas

int liste[] = new int[5] ;


// yeni bir dizi nesnesine baland

liste = new int[15] ;

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 3

58

Dizi ierisindeki elemalara ulam

DiziElemanlariGosterimBir.java

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 3

59

Diziler ierisinde elemanlarn sralanmas

DiziSiralama.java

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 3

60

Dizilerin dizilere kopyalanmas

DizilerinKopyalanmasi.java

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 3

61

ok Boyutlu Diziler

Dizi ierisinde dizi tanmlanabilir.

int[][] t1 = { { 1, 2, 3, }, { 4, 5, 6, }, };

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 3

62

ok boyutlu dizileri oluturmann dier bir yolu

int [][] t1 = new int [3][4] ; int [][] t1 = new int [][4] ; //!Hata!

CokBoyutluDizilerOrnekBir.java

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 3

63

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 3

64

Deiik boyuta sahip diziler

CokBoyutluDiziler.java

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 3

65

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 3

66

Sorular ...

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 3

67

You might also like