If you can't read please download the document
Upload
hakhue
View
243
Download
2
Embed Size (px)
Citation preview
Java ile
Nesneye Ynelik
Programlama
Ouz Aslantrk
1 Nesneye Ynelik Programlamaya Giri............................................ 9
1.1 Modelleme ............................................................................. 9
1.2 Bilgisayar Programlar ve Modelleme ....................................... 10
1.3 Nesneye Ynelik Modelleme ................................................... 11
1.3.1 Snf ve Nesne Kavramlar .............................................. 11
1.4 Nesneye Ynelik Programlama ............................................... 13
1.5 Nesneye Ynelik zmleme ve Tasarm ................................. 15
1.6 Nesneye Ynelik Programlama Dilleri ...................................... 15
1.7 zet .................................................................................... 16
2 Java Platformu .......................................................................... 18
2.1 Platformdan Bamszlk ........................................................ 19
2.2 Java Sanal Makinesi (Java Virtual Machine - JVM) ..................... 22
2.3 Java Uygulama Programlama Arayz (Java Application
Programming Interface - API) ........................................................ 25
2.4 zet .................................................................................... 28
3 Java Dili le lgili Temel Bilgiler ................................................... 30
3.1 Szdizim Kurallar (Syntax Rules) ........................................... 30
3.1.1 Derleyiciler ................................................................... 30
3.1.2 Whitespace karakterleri ................................................. 30
3.2 Aklama Satrlar (Comment Lines) ........................................ 31
3.2.1 ile yaplan aklamalar ................................................... 32
3.2.2 * ... */ ile yaplan aklamalar ..................................... 32
3.2.3 ** ... */ ile yaplan aklamalar ................................... 33
3.3 Temel Trler (Primitive Types) ............................................... 35
3.4 Deiken Tanmlama ve lk Deer Atama (Variable Declaration and
Initialization) ............................................................................... 36
3.4.1 Deikenin Tanm Alan (Scope) ...................................... 37
3.5 leler (Operators)............................................................... 38
3.5.1 Aritmetik ileler: .......................................................... 38
3.5.2 Birleik Aritmetik leler: .............................................. 38
3.5.3 Arttrma ve Azaltma leleri: ......................................... 38
3.5.4 likisel (relational) ileler: ........................................... 40
3.5.5 Mantksal leler: ......................................................... 40
3.5.6 lelerin ncelikleri: ..................................................... 41
3.6 Denetim Deyimleri (Control Statements) ................................. 42
3.6.1 if else deyimi ......................................................... 42
3.6.2 if else if deyimi .................................................... 45
3.6.3 switch deyimi ............................................................. 46
3.7 Dngler (Loops) .................................................................. 48
3.7.1 while dngs ............................................................. 48
3.7.2 do - while dngs ..................................................... 49
3.7.3 for dngs ................................................................ 50
3.8 zet .................................................................................... 52
4 Uygulama Gelitirme Ortam ....................................................... 53
4.1 JDK ve JRE .......................................................................... 53
4.2 Java ile ilk program............................................................... 55
4.2.1 lk program .................................................................. 56
4.2.2 Derleme ....................................................................... 56
4.2.3 altrma ve main yntemi ............................................ 57
4.3 Eclipse Platformu .................................................................. 59
5 Java ile Nesneye Ynelik Programlama ......................................... 61
5.1 Snf Tanmlar ...................................................................... 61
5.2 Nesne Oluturma .................................................................. 66
5.2.1 new ileci ..................................................................... 66
5.2.2 Referans Tr ................................................................ 67
5.2.3 Yn (Heap), Yt (Stack) ve p Toplayc (Garbage
Collector) ................................................................................. 67
5.2.4 Kurucular (Constructors) ................................................ 70
5.2.5 this anahtar szc .................................................... 73
5.2.6 Kurucu Ar Ykleme (Constructor Overloading) ............... 74
5.2.7 Kurucularn Birbirini armas ........................................ 77
5.2.8 Yntem Ar Ykleme (Method Overloading) .................... 79
5.2.9 Diziler .......................................................................... 81
5.3 Sarmalama (Encapsulation) lkesi ve Eriim Dzenleyiciler (Access
Modifiers) .................................................................................... 86
5.3.1 Sarmalama lkesi .......................................................... 86
5.3.2 Paket Kavram .............................................................. 91
5.3.3 Eriim Dzenleyiciler ..................................................... 95
5.3.4 get/set Yntemleri ........................................................ 96
5.4 Snf/Nesne Deikenleri ve Yntemleri .................................. 101
5.4.1 static anahtar szc .............................................. 103
5.4.2 main yntemi ............................................................. 110
5.4.3 static kod bloklar ..................................................... 111
5.4.4 final anahtar szc ve sabit tanmlama .................... 114
5.5 Kaltm (Inheritance) ........................................................... 115
5.5.1 Nesneye Ynelik Bir Modelde Snflar Aras likiler .......... 115
5.5.2 Javada Kaltm ........................................................... 118
5.5.3 Kaltmla Gelen Nitelik ve Yntemlere Eriim ................... 125
5.5.4 protected Eriim Dzenleyici ....................................... 127
5.5.5 Kurucu Zinciri ve super Anahtar Szc ....................... 129
5.5.6 Yntemlerin Geersiz Klnmas (Method Overriding) ........ 135
5.5.7 Yntemlerde Geersiz Klmann final ile Engellenmesi .... 139
5.5.8 Object snf ............................................................... 139
5.6 okbiimlilik (Polymorphism) ............................................... 142
5.6.1 Ata Snf Referansndan Alt Snf Nesnesine Ulama ......... 142
5.6.2 Ge Balama (Late Binding) ......................................... 143
5.6.3 okbiimlilik Nasl Gerekleir? ..................................... 144
5.6.4 okbiimlilik Ne e Yarar? ........................................... 149
5.6.5 Soyut Snflar (Abstract Classes) ................................... 150
5.6.6 Arayzler (Interfaces).................................................. 164
5.7 Aykr Durumlar (Exceptions) ............................................... 175
5.7.1 try catch blou ..................................................... 178
5.7.2 finally deyimi .......................................................... 183
5.7.3 Javada Aykr Durumlar ............................................... 185
5.7.4 Programcnn Kodlad Aykr Durumlar ......................... 188
5.7.5 Aykr Durumlarn Ynetilmesi ....................................... 191
5.8 Girdi/kt (Input/Output I/O) lemleri ............................... 197
5.8.1 JavaBean Kavram ....................................................... 198
5.8.2 JavaBean Yazma Kurallar ............................................ 200
5.8.3 Seriletirme (Serialization) ........................................... 200
5.8.4 java.io.Serializable Arayz .................................. 202
5.8.5 GUI Editor Property Editor . Error! Bookmark not defined.
5.8.6 JavaBean rnei ................. Error! Bookmark not defined.
6 Eksik konular: ................................. Error! Bookmark not defined.
nsz
Bu kitap en azndan Yapsal Programlama bilen okuyucular iin
hazrlanmtr. Temel programlama bilgileri anlatlmayacak, okuyucunun
algoritma kavramn bildii ve algoritma gelitirebildii varsaylacaktr.
Amacmz Java programlama dilini ya da Java platformunu anlatmak deil,
Nesneye Ynelik Programlama yaklamn aklamak ve bu yaklam ile
uygulama gelitirmeyi retmektir. Programlama konularn renmenin
en iyi yolunun programlar yazmak olduunu dndmz iin, nesneye
ynelik programlar yazmak durumundayz ve bunun iin bir dil
kullanlmas gerekiyor. Bu kitap iin programlama dili Java olarak
seilmitir ancak benzer ierik rnein C++ dili ile de verilebilir.
Kitap ierisinde kullanlacak terimler iin genelde Trkiye Biliim Dernei
szl esas alnacak, kullanlan Trke terimlerin ngilizce karlklar da
parantez iinde verilmeye allacaktr. Karl henz oturmam ya da
kullanld balamda istenen anlam veremedii dnlen terimler iin
ise, yaygn kullanlmakta olan terimler tercih edilecek, Trke terimler ile
karlanamayan baz szckler/teknolojiler iin ngilizce terimler italik
yazlacaktr.
Giri
1 Nesneye Ynelik Programlamaya Giri
Programlar, gerek hayatta karlalan bir takm problemlerin zlmesi
iin bilgisayarlarn hzl ve doru ilem yapabilme yeteneklerinden
faydalanmak zere yazlrlar. Bilgisayarlarn hz ve kapasiteleri arttka
gelitirilen programlar da bu hz ve kapasiteden faydalanabilecek ekilde
gelierek deimektedir. Bu karlkl gelime ve deime, zaman
ierisinde program gelitirme yntemlerinde de deiikliklere neden olmu,
bylece eitli program gelitirme yaklamlar ortaya kmtr.
Nesneye Ynelik Yazlm Gelitirme (Object Oriented Software
Development), bir yazlm gelitirme yaklamdr. Nesneye ynelik
yaklam dnda eitli yaklamlar da bulunmakla birlikte (Yapsal
Programlama (Structured Programming), Bileen Tabanl Yazlm
Gelitirme (Component Based Software Development), Bakml
Programlama (Aspect Oriented Programming)... ) kendisinden nceki
yaklamlarn baz aklarn kapatan, kendisinden sonraki yaklamlarn
(ounun) da alt yapsn oluturan bir yaklam olarak olduka geni
kullanm alan bulmutur.
1.1 Modelleme
Gerek hayattaki problemleri bilgisayarn sanal ortamnda zebilmek iin,
hereyden nce problemin uygun ekilde bilgisayar ortamna aktarlmas
gerekmektedir. Bu ilem soyutlama (abstraction) ya da modelleme
(modeling) olarak anlr.
Modelleme, insann problem zmek zere eskiden beri kulland bir
yntemdir. Byke bir problemin tamamn zihinde canlandrp zmeye
almak yerine, oluturulacak model ya da modeller zerinde hedef
sistemin grn, davran ya da baz durumlarda verdii tepkiler
gzlemlenebilir.
Model, var olan ya da gerekletirilmesi planlanan bir sistemi anlamak ya
da anlatmak zere oluturulabilir ve birok farkl alanda etkili bir ekilde
kullanlmaktadr. rnein, bir toplu konut inaatn mterilerine tantmak
isteyen bir inaat firmas, binalarn yerleimlerini, renk ve greli
byklklerini grsel olarak ifade eden maket ya da maketler hazrlar. Bu
maketi inceleyen bir kimse, almak istedii konutun nerede olduunu, okul
binasna yaknln ya da anayola ulamn nasl olduunu grerek
deerlendirebilir. Burada model makettir ve hedef sistemi anlatmak
amacn yerine getirmektedir.
Modelin mutlaka elle tutulur olmas da gerekmez. Bilgisayar benzetimi ile
de eitli modeller oluturulabilir. rnein bir uan havadaki hareketini
incelemek zere gelitirilmi bir bilgisayar benzetimi ile uak
modellenebilir. Kanat uzunluu ya da gvde eimi gibi parametrelerle
oynanarak uan farkl hava koullarnda nasl davranaca anlalmaya
allabilir. Burada, sistemin davrann anlamak amacyla, sanal ortamda
oluturulmu bir model sz konusudur.
Bir sistemle ilgili birden ok model oluturulabilir. Tek bir model ile
sistemin tamamn grmeye almak yerine, zerinde allan sistemin
farkl ynlerini ne karan modeller hazrlanabilir. rnein inaat firmas
toplu konutu mterilere anlatmak zere estetik tasarm n plana kan
bir maket hazrlarken, bu toplu konut projesindeki binalarn elektrik
tesisat iin farkl, su tesisat iin farkl, genel daire grnm iin farkl
projeler hazrlar. Bylece ayn sistemin farkl ynleriyle ilgilenen kimseler,
yalnzca kendilerini ilgilendiren yn ne karan model zerinde alma
olana bulurlar.
1.2 Bilgisayar Programlar ve Modelleme
Bilgisayar programlar, makina ortamna aktarlacak problemin zmn
oluturmak zere gelitirilir. Bilgisayar program yazmak iin ncelikle,
doal dil ile ifade edilen problemin makina ortamnda yeniden
oluturulmas gerekir. ou zaman gelitirilecek program gerek sistemin
tamam ile ilgilenmez. Bu durumda, zerinde allan problem, sistemin
belirli bir adan grnm olarak deerlendirilebilir. Bilgisayar ortamna
bu grnm aktarabilmek iin bir model oluturulmas gerekir.
Oluturulan model gerek hayattakine ne kadar benzer ya da yaknsa,
programlamann o kadar kolaylaaca dnlr. nk programc da bir
insandr ve her ne kadar programlama yaklamlarna hakim ve bu
dorultuda dnmeyi renmi olsa da iinde yaad dnyay olduu
gibi alglamak, zerinde alt problemi baka insanlarn grd gibi
grmek onun iin de en doal olandr.
1.3 Nesneye Ynelik Modelleme
Nesneye ynelik programlama yaklam, gerek hayattan alnm
problemi zmek zere oluturulacak modelin, gene gerek hayatta var
olan nesneler ve bu nesneler arasndaki ilikilerden faydalanlarak
oluturulmasn ilke edinmitir. Problem aynen gerek hayatta grld
ekli ile sanal ortama aktarlabilirse, gnlk yaamnda nesneler ve
nesneler aras ilikiler ile etkileimde olan programc, nesneye ynelik
model sayesinde, zerinde alt problemi aynen gerek hayatta olduu
ekliyle grebilecektir.
Peki nesneye ynelik model nasl oluturulur? Problem gerek hayattakine
benzer ekilde nasl modellenebilir? Bu sorulara birlikte yant arayalm.
1.3.1 Snf ve Nesne Kavramlar
Bir otomobil dnelim. Otomobilin marka ve modeli ne olursa olsun, gaza
basnca hzlandn, frene basnca yavaladn, direksiyonu herhangi bir
tarafa evirince otomobilin o tarafa dndn hepimiz biliyoruz. Bunlar
otomobillerin genel davranlardr ve btn otomobiller bu davranlar
sergiler.
Ayrca, her otomobilin bir motoru, lastikleri, farlar, direksiyonu, dikiz
aynas vardr. Marka ve modeli ne olursa olsun, gene btn otomobillerde
bunlar ve daha birok baka aksam bulunmaktadr. Baka bir deyile,
btn otomobiller bu zellikleri tamaktadr.
Bu rnekte otomobil bir snftr. Otomobil denilince aklmza gelen temel
davranlar ve zellikler, btn otomobillerde vardr. Her otomobil gaza
basldnda ayn srede 100 km hza ulaamyor olsa da, gaza
basldnda btn otomobiller hzlanr. Ya da btn otomobillerin lastikleri
ayn byklkte olmasa da, btn otomobillerin lastikleri vardr. Snf, ayn
zellik ve davranlar sergileyen varlklarn ortak kmesini belirleyen
tanmdr. Hi otomobil grmemi birisine otomobilin ne olduunu
anlatmaya kalksak, kapmzn nnde duran belirli bir otomobili deil, o
kiinin bir otomobil grdnde tanmasn salayacak, btn otomobiller
iin ortak olan bilgiyi aktarmaya alrz.
Baka bir rnek verelim; kalem. Kalem dediimizde hepimizin aklna
bireyler gelir. Yaz yazmak zere kullanyoruz, eitli renk, boy, tip, u
kalnl ve fiyatlarda olabilir.. vs. Kalem deyince, hepimizin tand,
bildii bireyden bahsetiimiz iin hepimiz kafamzda bireyler
canlandryoruz. Ancak ok byk olaslkla herkesin aklnda canlanan
resim birbirinden farkl; kimimiz kurun kalem, kimimiz dolmakalem,
kimimiz tahta kalemi dnyoruz ve belki kurun kalemlerin ounun tipi
birbirinden farkl. Ama sonuta btn kalemlerin yaz yazma davran ve
renk ya da u kalnl zellii var ve bunlar kalem snfn belirleyen
noktalar.
zetle snf, o snftan olan btn varlklarn ortak zellik ve davranlarn
anlatan bir tanmdr.
Nesne ise ait olduu snftan gelen zelliklerin deerlerinin belli olduu,
snf iin tanml olan davranlar nasl sergilediinin bilindii, somut
olarak var olan, biricik bir kimlii olan varlktr. rnein, otomobil snfna
ait olan 06-XYZ-1234 plakal bir otomobil nesnesinden bahsediyorsak, sz
konusu nesnenin kimlii plaka numarasdr ve genel olarak otomobillerden
deil, markas, modeli, rengi belli olan, gaza basldnda 100 km/saat hza
ka saniyede ulat bilinen, elle gsterilebilen tek bir varlktan sz
ediyoruz demektir.
Ayn snfa ait birok nesne olabilir, u an Ankarada binlerce otomobil
bulunduu gibi. Ayn snfa ait olan nesnelerin hepsinde, o snftan gelen
zellik ve davranlar bulunmaktadr. Ancak herbir nesne iin bu
zelliklerin deerleri farkl, davranlarn gerekletirilii de bu zelliklere
bal olarak farkl olabilir. rnein, 06-ZBC-9876 plakal krmz spor
otomobil 100 km/saat hza 6 saniyede ularken, 06-XYZ-1234 plakal
mavi otomobil 100 km/saat hza 12 saniyede ulayor olabilir. Ya da spor
otomobilimiz 100 kmlik yolda 10 lt benzin tketirken, dier otomobilimiz
ayn mesafede 6,5 lt benzin tketiyor olabilir. Burada nemli olan, her iki
otomobilin de otomobil snfndan gelen zellik ve davranlar kendilerine
zg bir biimde sergiliyor olmalardr.
1.4 Nesneye Ynelik Programlama
Nesneye ynelik programlama, nesnelerin birbirlerine ileti gndermeleri
ilkesine dayanr. Bir nesne, baka bir nesneye bir ileti (message)
gndererek, o nesneden bir davran (behaviour) sergilemesini ister.
letiyi alan nesne, bu iletiye gre davrann gerekletirir ve kendi
durum (state) bilgisini deitirir.
Bunu bir rnekle aklamaya alalm:
Bir otomobil, otomobilin srcs ve otomobilin dndaki bir yaya
dnelim. Burada tane nesnemiz var; OTOMOBL, SRC ve YAYA
nesneleri. Otomobilin gazaBasld davran ile hz ve motorHacmi
zellikleri var. Ayrca, otomobilin hznYaz davran da, bu davran
sergilendii anda hz zelliinin deerini ekrana yazyor. Src ve yaya
nesnelerinin zellik ve davranlar ile ise u anda ilgilenmiyoruz.
ekil 2.1de, bu nesneler grlyor.
ekil 1-1. Nesneye Ynelik Programlama
lk olarak SRC nesnesi, OTOMOBL nesnesine bir ileti gndererek
gazaBasildi davrannda bulunmasn istiyor. Bunun zerine, OTOMOBL
nesnesi, hz zelliinin deerini motorHacmi zelliinin deerine bal
olarak deitiriyor (hzlanyor). Yani OTOMOBL, davran
gerekletirerek durumunu deitiriyor. Bu ilem bittikten sonra,
YAYA nesnesi, OTOMOBL nesnesine yeni bir ileti gndererek hznYaz
davrannda bulunmasn istiyor. hznYaz davran, OTOMOBL
nesnesinin yeni hzn (hz zelliinin deerini) ekrana yazyor.
Eer bu nesneleri, zellikleri ve davranlar daha ayrntl bir ekilde ele
alrsak; rnein OTOMOBL nesnesinin hznYaz davrann ekrana yaz
olarak deil de srekli yenilenen bir resim olarak getirmeyi baarabilirsek;
bir otomobil yar oyunu programlayabiliriz.
1.5 Nesneye Ynelik zmleme ve Tasarm
zmleme, hedef sistemin ne yapmas gerektiinin belirlendii
aamadr. Bu aamada alan insann bilgisayar programlama bilgisinin
olmas gerekmez. nemli olan, zerinde alt sistemi tanyabilmek, dile
getirilen gereksinimleri iyi anlayp bu gereksinimlerin arkasnda kalan ve
dile getiril(e)meyen gereksinimleri de bulup kartmak, iin kurallarn ve
ileyiini irdeyebilmektir.
Nesneye ynelik zmleme, zmlemeyi yaparken snflar ve
nesnelerden faydalanr. Sistemdeki snflarn, bu snflarn zellik ve
davranlarnn ne olmas gerektiinin belirlenmesi ile urar.
Tasarm ise hedef sistemin nasl gerekletirilecei sorusuna yant arar.
Tasarm aamas modelin ortaya kt aamadr. Model tasarma bal
kalnarak oluturulur ve zmleme aamasnda belirlenen gereksinimlerin
karlanp karlanmad model zerinde snanabilir.
Nesneye ynelik tasarm, modeli oluturmak zere snflar ve nesnelerden
faydalanr. Snflar aras ilikiler ayrntl olarak incelenir, gereksinimleri
karlamak zere ilikiler, zellikler ve davranlar ekillendirilir. Tasarm
sona erdiinde, ortaya nesneye ynelik bir model kar. Nesneye ynelik
modelin ifade edilmesi iin bir takm grsel diller kullanlmaktadr.
Bunlardan en bilineni ve artk bir standart haline gelmi olan dil, Unified
Modelling Language (UML) ad ile bilinir. Tasarm aamas genelde hedef
sistemin eitli alardan grnlerini ifade eden UML belgeleri ile son
bulur.
1.6 Nesneye Ynelik Programlama Dilleri
Nesneye ynelik model ortaya ktktan sonra, bu modelden nesneye
ynelik programa gemek modeli oluturmaktan daha kolaydr. nk
programlama aamas, modelin bir programlama dili ile ifade edilmesi
aamasdr ve modeldeki hereyin programlama dilinde neye karlk
geldii bellidir. Seilen herhangi bir nesneye ynelik programlama dili ile o
model (modeldeki baz alt dzey ayrntlar dnda) kodlanabilir.
Eer UML gibi bir dil kullanlmsa, oluturulan model bir UML arac ile
izilebilir. ou zaman bu tr aralar, seilen programlama diline gre kod
retebilme (code generation), hatta verilen koddan modele geri dnebilme
(reverse-engineering) yeteneklerine sahiptir.
Demek ki nemli olan hedef sistemin hangi programlama dili ile
gelitirilecei deil, hedef sistem iin gerekli olan modelin
oluturulabilmesidir. Sonraki aamada programalama dili seimi
programlama ekibinin bilgi birikimine, kurumun daha nceki yatrm ve
deneyimlerine ya da sistemin gelitirilmesini isteyen mterinin zel
gereksinimlerine gre yaplabilir.
1.7 zet
Bu blmde, Nesneye Ynelik Programlama ile ilgili eitli kavramlara
ksaca deindik.
Model, hedef sistemin tamamn bir kerede anlamaya almak yerine
ilgilenilen ksmn daha kolay anlayabilmek/anlatabilmek iin ok uzun
zamandr kullanlmaktadr. Modelleme ise modeli oluturma ilemidir.
Bilgisayar programlar, gerek hayattaki problemlerin bilgisayarn doru ve
hzl ilem yapma yeneteinden faydalanlarak zlmesi amacyla
gelitirilirler ve bunun iin ncelikle bilgisayar ortamnda problemin ifade
edilebilmesi gerekir. Bu srete modeller kullanlr.
Nesneye ynelik modelleme, modelleme ileminin nesneler ve nesneler
aras ilikilerin incelenmesi yolu ile yaplmas ilkesine dayanr.
Nesneye ynelik programlama, nesnelerin birbirlerine ileti gndermeleri,
iletiyi alan nesnenin bir davran yerine getirmesi ve davrann yerine
getirilmesi sonucunda durumunun deimesi ile gerekletirilir.
Nesneye ynelik zmleme, sistemde ne yaplmas gerektiinin ve hangi
snf, nesne, zellik ve davranlarn bulunduunun belirlendii aamadr.
Nesneye ynelik tasarm ise snflar aras ilikilerin belirlendii, zellik ve
davranlarn yeniden incelenip son eklini ald, sonucunda nesneye
ynelik modelin ortaya kt aamadr.
Nesneye ynelik programlar, nesneye ynelik modelin herhangi bir
nesneye ynelik programlama dili ile ifade edilmesi sonucunda ortaya
kar. Bir model birok farkl dille ifade edilebilir.
2 Java Platformu
Java yalnzca bir programlama dili deildir. Java Platformunu oluturan
eitli alt geler bulunmaktadr:
Bir programlama dili,
Bu programlama dili ile yazlm programlarn zerinde alaca
altyap,
Farkl alanlarda (masast, cep telefonu, saat, web tabanl...)
uygulama gelitirmek iin kullanlan yardmc ara ve ktphaneler,
Bu ktphanelerin belirtimleri (specification),
Btn bunlarn en iyi baarm elde etmek zere nasl kullanlmalar
gerektiini anlatan en iyi uygulama (best practice) belgelerinin
tamam
Java Platformu, birbirlerinden tamamen bamsz olmayan alt
platform/teknoloji iermektedir;
Java Standart Edition (JSE): Temel Java uygulamalarnn gelitirilmesi iin
gerekli ekirdektir.
Java Enterprise Edition (JEE): Byk lekli, datlm kurumsal
uygulamalarn gelitirilebilmesi iin kullanlr.
Java Micro Edition (JME): Cep telefonu, saat, el bilgisayar gibi kk
lekli ortamlara uygulama gelitirmek iin kullanlr.
Herbir teknoloji kendi iinde birok ktphane, uygulama ats
(framework) ve belge iermektedir. Ancak ncelikle JSE
platform/teknolojisinin renilmesi zorunludur. nk Java
platformlarndan herhangi birisi ile uygulama gelitirebilmek iin ncelikle
Core (ekirdek) Java ad verilen ksm bilinmelidir.
Bu kitabn ilgi alan JEE ya da JME platformlar deildir. Kitap ierisinde
Java Platformu denildiinde, aksi belirtilmedike, JSEden
bahsedilmektedir.
Platform, bir programn alt donanm ya da yazlm ortamdr.
Java platformu, Java programlarnn almas iin gerekli olan iki
bileenden oluur:
1- Java Sanal Makinesi (Java Virtual Machine)
2- Java Uygulama Programlama Arayz (Application Programming
Interface-API)
Platformdan Bamszlk balamnda kullanlacak olan platform szc
ise, donanm ve o donanm zerinde alacak olan iletim sistemini ifade
etmektedir. rnein Windows32 platformu, 32 ikillik Windows iletim
sisteminin alt bir ortam ifade etmektedir.
Platform szcnn kullanld balama gre deerlendirilmesi gereklidir.
2.1 Platformdan Bamszlk
Java ile ilgili konuulurken genelde ilk sylenen Javann platformdan
bamsz bir dil olduudur. Peki platformdan bamszlk ne demektir?
Platformdan bamszln ne olduunu anlatabilmek iin, ncelikle
platforma bamlln ne olduunu aklamaya alalm. zerinde
Windows98 iletim sisteminin almakta olduu bir kiisel bilgisayar
zerinde, Visual Studio 6.0 tmleik gelitirme ortamn (Integrated
Development Environment - IDE) kullanarak C dili ile bir program
gelitirdiimizi dnelim. Program derlendii zaman, altrlabilir
(zerine ift tkladmzda ya da konsolda adn yazdmzda almaya
balayan: executable), .exe uzantl bir dosya (file) oluur. Bu program,
Windows98 iletim sistemi zerinde altrlabilir bir dosya (executable
file) olarak saklanmaktadr.
Bu altrlabilir dosyay, zerinde Linux iletim sistemi alan baka bir
makineye kopyaladmzda programn almadn grrz. nk o
altrlabilir dosya, ancak Windows ortamnda alabilecek ekilde
oluturulmutur. Baka bir deyile, hangi platformda alaca bellidir.
Bunun nedeni, belli bir platform (iletim sistemi + donanm) zerinde
almak zere oluturulmu altrlabilir dosya iinde saklanan bilgilerin
o platforma zel olarak retilmi olmasdr.
Bir C programnn geirdii aamalar ekil 4-1de grlmektedir.
ekil 2-1. C Programlarnn Geirdii Aamalar
C programlar platforma zel olduklarndan, ayn C programnn baka bir
platformda altrlabilmesi, C programnn o platform iin yeniden
derlenmesini ve altrlabilir dosyaya dntrlmesini gerektirir.
Java platformunda ise yaklam farkldr. Programn zerinde alaca
platforma zel kodlar retilerek altrlabilir dosya oluturulmas yerine,
herhangi bir platform zerinde baka bir ara uygulama tarafndan
yorumlanabilecek kodlar retilir. Bu ara uygulama ise Java Sanal
Makinesi (Java Virtual Machine JVM) ad ile bilinir.
Java kaynak kodlar yazlp .java uzants ile kaydedildikten sonra, bir
Java derleyicisi ile derlenir. Derleme sonucunda oluan .class uzantl
dosyaya snf dosyas (class file) ad verilir. Bir snf dosyas, herhangi bir
platforma zel olmayan, herhangi bir JVM tarafndan yorumlanabilecek,
byte-code olarak adlandrlan ikil (binary) bilgiler ierir. rnein
WindowsXP ortamnda yazdmz Java programn Linux ortamna tamak
istediimizde, bu derlenmi snf dosyalarn (.class uzantl dosyalarn)
Linux ortamna kopyalamamz yeterlidir. Linux ortam iin gelitirilmi olan
JVM, zerinde hibir deiiklik yapmadan Linux ortamna aktardmz
dosyalar yorumlayarak altracaktr.
Baka bir deyile, Java dilinin platformdan bamsz olmas, btn yaygn
platformlar iin (Windows, Linux, Unix ya da Apple ortamlar iin) birer
JVMnin gelitirilmi olmas ile salanmtr. JVM, bir belirtime
(specification) uymaktadr ve bu sayede o belirtime uygun olarak
gelitirilmi btn Java programlarn farkl platformlarda ayn ekilde
altrabilmektedir. Ksaca, Java kaynak kodu ile platforma zel makine
kodu arasna bir katman daha eklenmi, derlenmi Java dosyalarnn bu
katmandan alnan hizmet ile altrlmas salanmtr. Bylece
programclarn ii kolaylamakta, gelitirdikleri uygulamalar hi deiiklie
uramadan farkl platformlarda alabilmektedir.
ekil 4-2de bir Java programnn platformdan bamszlnn
salanmasnda JVMnin nasl rol oynad grlmektedir.
ekil 2-2. Java Programlarnn Platformdan Bamszlnda JVMnin Rol
Javann platformdan bamszlnn bu ekilde salanmas, yani java
kaynak dosyalarndan retilen kodlarn (byte-code) JVM gibi bir ara
katman tarafndan iletilmesi, Java programlarnn, hedef platforma zel
retilen zgn kodlarn (native codes) iletilmesi mantna dayanan C gibi
dillerle gelitirilen programlara oranla az da olsa daha yava olmasna
neden olmaktadr. Bu, platformdan bamszlk iin denen bir bedel
olarak grlebilir. Bununla birlikte derleyici ve JVM teknolojilerindeki
ilerlemeler Java programlarnn baarmn platformdan bamszlk
prensibinden dn vermeden zgn kodlarn baarmna yaklatrmaktadr.
Java programlarnn platformdan bamszln vurgulayan slogan:
Write once, run anywhere: Bir kez yaz, heryerde altr
2.2 Java Sanal Makinesi (Java Virtual Machine - JVM)
Java Sanal Makinesinin, Java programlarnn paltformdan bamszln
nasl saladn bir nceki blmde aklamaya altk. Bu blmde ise
JVMnin Java programlarn nasl ilettiini kabaca anlatmaya alacaz.
Hereyden nce unu sylemekte yarar var: birden fazla JVM olabilir ve
bunlarn birbirlerine gre daha iyi ya da daha kt baarmlar
(performance) olabilir. Bunun nedeni basittir. JVM iin bir belirtim
(specification) bulunmaktadr. Bu belirtim, JVM ad verilen yazlmlarn
uymalar gereken kurallar, salamalar gereken kstlar, ksaca bir
yazlmn JVM olarak adlandrlabilmesi iin gerekli hereyi tanmlamaktadr.
Belirtim, ne olmas gerektiini belirleyen ancak nasl olmas gerektii
konusunda bir kst getirmeyen bir belgedir. Dolaysyla, ayn belirtimi
gerekletiren farkl yazlm ekipleri, kendi gerekletirimlerinde
(implementation) kullandklar veri yaplar ya da algoritmalar sayesinde
dierlerinden daha yksek baarml JVMler gelitirebilirler.
http://java.sun.com/docs/books/jvms/second_edition/html/VMSpecTOC.d
oc.html adresinde JVM belirtimi bulunabilir.
http://java.sun.com/docs/books/jvms/second_edition/html/VMSpecTOC.doc.htmlhttp://java.sun.com/docs/books/jvms/second_edition/html/VMSpecTOC.doc.html
Java Sanal Makinesi, Java programlarn altrmak zere bir takm
grevler iermektedir. Bu grevlerin bazlarna ksaca bakalm:
Snf Ykleyici (Class Loader): Java programlar birbirleriyle etkileimde
bulunan snflardan oluur. Bir snfn nesnesinin oluturulabilmesi iin nce
snfn bellee yklenmesi gerekir. Snf Ykleyici grevi, .class uzantl
dosya iinde bulunan Java snfn bellee ykler.
Byte-kod Dorulayc (Byte-code Verifier): Bellee yklenen byte-
kodlar inceleyerek trlere dair bilgileri oluturur ve btn parametrelerin
trlerini dorular. Ayrca bir takm gvenlik kstlarn denetler.
Yorumlayc (Interpreter): Bellee yklenmi ve dorulanm byte-
kodlar JVMnin zerinde almakta olduu platforma zel kodlara
dntrerek iletir.
ekil 4-3te bu grevlerin almas grlmektedir.
ekil 2-3. JVM indeki Baz Grevler
Java programlarnn altrlmasnda rol alan 3 temel greve baktktan
sonra, biraz da JVMnin yapsna bakalm. Daha sonra anlatacamz
kesimlerde bu yapya gndermeler yapacaz.
Java Sanal Makinesinin, sanal donanm kesimi 4 temel blmden oluur:
yazmalar (registers), yt (stack), yn (heap) ve yntem alan
(method-area). Bu blmler, oluturduklar sanal makine gibi sanal (ya da
soyut) blmlerdir ancak her JVM gerekletiriminde bir ekilde bulunmak
zorundadrlar.
32 ikillik JVM iinde bir bellek adresi 32 ikil (bit binary digit) ile ifade
edilir. Baka bir deyile 32 ikillik JVM, herbiri 1 byte veri ieren 232 adet
bellek yerleimini, yani 4GBlik bellei adresleyebilir.
Adresleme hesaplarnn nasl yapldn merak eden okuyucularmz iin
hesaplamay biraz daha aalm:
Adreslemede
kullanlan
ikil says
Bu ikiller ile ifade
edilebilecek farkl deer
says
Bu saynn
ifadesinde
kullanlan
ksaltma
Bu kadar Byte
anlamnda
kullanlan
ksaltma
10 ikil 210 = 1024 Kilo KB
20 ikil 220 = 210 x 210 = Kilo x 1024 Mega MB
30 ikil 230 = 220 x 210 = Mega x 1024 Giga GB
32 ikil 232 = 4 x 230 = 4 x Giga 4 Giga 4GB
Tablo 2-1. Adresleme Hesaplar
32 ikillik JVMnin iindeki her yazma 32-ikil uzunluunda bir adres tutar.
Yt, yn ve yntem alanlar da bu 32-ikil ile ifade edilebilen 4GB
byklndeki bellein bir yerlerinde olmak zorundadr. Ancak neyin
nerede saklanaca, kullanlan JVMye zeldir.
Burada anlatlanlar kabaca u anlama gelmektedir. Kiisel bilgisayarnzda
bir Java program iletmek iin bilgisayarnza kuracanz JVM (sonraki
kesimlerde JVMnin nasl kurulduuna bakacaz), bilgisayarnzn belleinin
en fazla 4 GBlk bir ksmn kullanabilir. Gnmzde satlmakta olan kiisel
bilgisayarlarn genelde 2GB - 4GB bellekleri olduunu dnrsek, bu snrn
ou zaman yeterli olaca sonucunu karabiliriz.
2.3 Java Uygulama Programlama Arayz
(Java Application Programming Interface - API)
Uygulama Programlama Arayz, eitli yetenekler sunan hazr yazlm
bileenlerinden oluan bir derlemdir.
Java API, eitli amalarla kullanlmak zere tasarlanm ok zengin bir
bileen ktphanesi sunar. Java ile uygulama gelitirilirken bu
bileenlerden faydalanlr. rnein, eer dosya ilemleri yapan bir program
yazmak istiyorsak, Java APIde bulunan ve dosyalarla ilgili her trl ilemi
yapmakta kullanlan snf ve arayzleri bilmemiz gerekir. Ya da kolay
kullanml ve zengin bir grafik kullanc arayz (Graphical User Interface -
GUI) olan bir uygulama iin Java Swing APIyi kullanabiliriz.
ekil 3-4te JVM ve Java API birlikte grlmektedir.
ekil 2-4. Java Sanal Makinas, Java API ve Java Program
Java platformunu tandktan ve Java ile nesneye ynelik uygulama
gelitirme yaklamn rendikten sonra, kendisini gelitirmek isteyen bir
kimsenin yapmas gereken i Java APIyi renmek olacaktr. Bileenlerin
tamamnn renilmesi ok olas olmasa da, neler bulunduuna dair fikir
sahibi olmak nemlidir. Bylece herhangi bir programlama gereksinimini
karlamak zere nelerin kulllanlabilecei bilinmi olur ve zme ulamak
kolaylar.
Java APIde neler olduuna dair fikir edinmek iin en kolay yntem
herhalde Java API Documentation ad ile bilinen ve bu kitabn
yazlmakta olduu zamanda http://java.sun.com/javase/6/docs/api/
adresinden eriilebilen HTML belgelerine bir gzatmaktr.
Java API Documentation, www.java.sun.com adresinden indirilebilir. Java ile
uygulama gelitirirken en sk bavurulacak belge olduundan, bu belgeyi
bilgisayarnza indirmenizde fayda vardr.
ekil 3-5te Java API Documentation belgelerinden rnek bir grnm
bulunmaktadr. Grld gibi sayfa 3 ereveden olumaktadr. Sol st
taraftaki erevede APIde bulunan paketler (packages), sol alt erevede
http://java.sun.com/javase/6/docs/api/http://www.java.sun.com/
seilen pakette bulunan snf ve arayzler, sa taraftaki byk erevede
ise sol alt ereveden seilen snf ya da arayz ile ilgili aklamalar ve o
snf ya da arayzn yntemleri ile bunlara ait ayrntl bilgiler
bulunmaktadr.
ekil 2-5. Java API Documentation Belgelerinden rnek Bir Grnm
Belgenin kullanln bir rnekle aklamaya alalm. Diyelim ki dosya
ilemlerine gereksinim duyduumuz bir uygulama gelitiriyoruz. Diskteki
bir dosyay ap iindeki veriler zerinde ilem yapmamz gerekiyor.
Bununla ilgili olarak ne kullanabileceimiz hakknda az da olsa fikrimiz var
ancak neyi nasl kullanacamz tam olarak bilmiyoruz.
Bu durumda, Java API Documentation belgelerine bavuruyoruz. Sol st
ereveden java.io paketini seiyoruz. Bu paket, Javada giri/k
(input/output) ilemlerinin yaplabilmesi iin kullanlabilecek snf ve
arayzleri iermektedir. Sol alt ereveye, paketin iindeki snf ve
arayzlerin listesi gelir. File snfnn zerine tkladmzda, sadaki
erevede File snfna ait bilgiler gelir. Snfla ilgili genel aklamalar
okuduktan sonra, alt tarafta bu snfn iinde bulunan yntemlerin listesini
inceleyebilir ve rnein program ierisinden bir dosyann adn deitirmek
iin renameTo adl bir yntemin kullanlacan grebiliriz.
ekil 4-6da bu admlar grlmektedir.
ekil 2-6. Dosya lemleri in File Snfnn ncelenmesi
2.4 zet
Java yalnzca bir programlama dili deil, bu dil ile yazlm programlarn
zerinde altrld bir platformdur.
Java programlarnn platformdan bamszlklar, farkl platformlar iin
gelitirilmi olan Java Sanal Makineleri ile salanmaktadr.
Java Sanal Makinesi, belli bir belirtime uygun olarak gerekletirilmi bir
yazlmdr. Sanal bir donanm ynetir ve (32 ikillik) sanal donanm en
fazla 4GB bellek kullanabilmektedir.
Java platformu, Java Sanal Makinesi ile Java Uygulama Programlama
Arayznden oluur. Uygulama Programlama Arayz, hazr yazlm
bileenlerinin bir derlemidir.
Java Uygulama Programlama Arayz, Java uygulamalarnda
kullanlabilecek snf ve arayz tanmlarn ierir. Bunlarla ilgili bilgi, Java
API Belgelerinden edinilebilir.
3 Java Dili le lgili Temel Bilgiler
Bu blmde, Java dili ile ilgili temel bilgilere yer verilecektir. Okuyucunun
temel programlama bilgisi olduu kabul edilecek ve deiken nedir?,
dng nedir?... gibi konular anlatlmayacak, yalnzca bu tip temel
yaplarn Javada nasl ifade edildiklerine hzlca baklacaktr.
Java dili szdizimsel olarak C, C++, C# dillerine ok benzer. leler,
ilelerin ncelikleri, deiken tanmlama ve ilk deer atama, denetim ve
dng yaplar byk oranda ayndr. Eer bu dillerden herhangi birisini
biliyorsanz, bu kesime ksaca bir gzatp hzlca geebilirsiniz.
3.1 Szdizim Kurallar (Syntax Rules)
Her programlama dilinde olduu gibi Javada da bir takm szdizim
kurallar vardr. Szdizim kurallarna uygunluu derleyici denetler ve
kurallara uymayan durumlar raporlar. Dolaysyla szdizim kurallarn tek
tek aklamaya almak yerinde bir aba olmayacaktr.
C, C++ ya da C# bilen okuyucular iin Javadaki szdizim kurallarnn bu
dillerdekilerle hemen hemen ayn olduunu syleyebiliriz.
3.1.1 Derleyiciler
Derleyiciler, kaynak kodu inceleyerek bu kodun programlama dilinin
szdizim kurallarna uygun olarak yazlp yazlmadn denetleyen, eer
dilin kurallarna uygun olmayan durumlar belirlenirse bunlar raporlayarak
programcya kodu dzeltmesi iin ipular veren programlardr.
3.1.2 Whitespace karakterleri
Kod yazlrken kullanlan baz karakterler whitespace karakterleri olarak
adlandrlr ve derleyici tarafndan dikkate alnmaz:
end-of-line karakteri: \n ile ifade edilir; kod yazlrken Enter tuuna her
baslta, imlecin bulunduu yere bir end-of-line karakteri koyulur ve
kullanlan metin dzenleyici bu karakteri yorumlayarak imleci bir satr
aaya indirip satr bana gtrr.
form-feed karakteri: \f ile ifade edilir ve imleci sonraki sayfann bana
gtrr.
boluk karakteri: boluk ubuuna (space-bar) basld zaman oluan
karakter, metin dzenleyici tarafndan imlecin bir karakterlik bo yer
braklarak ilerlemesini salar
tab karakteri: \t ile ifade edilir, allan metin dzenleyicide genellikle 4
ya da 8 boluk karakterine karlk gelecek ekilde ayarlanabilir
whitespace karakterlerinin derleyici tarafndan dikkate alnmamas u
anlama gelmektedir: programc kodlama yaparken deyimler ya da
deikenler arasnda istedii kadar boluk brakabilir, satr atlayabilir ya da
tab tuu ile ilerleyebilir, ancak szdizim kurallarna aykr bir i yapm
olmaz. Bununla birlikte, whitespace karakterleri kodun daha okunur
grnmesini salamak amacyla kullanlr.
3.2 Aklama Satrlar (Comment Lines)
Aklama satrlar, kod ii belgeleme amacyla kullanlan ve derleyici
tarafndan dikkate alnmayan kod kesimleridir. Bir programcnn aklama
satr yazmak iin temel iki amac olabilir:
Yazd kodun kritik kesimlerini aklayarak, o koda daha sonra bakan
kimselerin (byk olaslkla kendisinin) iini kolaylatrmak: Aslnda bu
ekilde aklama gerektiren kod, baarl bir kod deildir. nk zaten
yazlan kodun hibir aklamaya ihtiya duyulmadan kendisini
aklayabilmesi gerekir.
Yazd kod ile ilgili belge oluturmak: Yazlmlarn belgelenmesi bir
gerekliliktir. Bu belgeleme gereksinimi bazen srf mteri istiyor diye
yerine getiriliyor olsa da, ou zaman ortaya kan rnn yaatlabilmesi
ve hatta gelitirilebilmesi iin gerekletirilmektedir. Belgeler, gereksinim
belirleme ve tasarm srelerinde raporlar eklinde oluturulurken,
kodlama srecinde kod ii belgeleme olarak ortaya kar.
Javada aklama satrlar 3 farkl ekilde yazlr:
3.2.1 // ile yaplan aklamalar
Tek satrlk bir aklama yaplacaksa o satrn bana // iareti yazlr. Bir
sonraki satra geilene kadar bu satra yazlan herey aklama olarak
deerlendirilir ve derleyici tarafndan dikkate alnmaz. Daha doru bir
ifade ile; // iaretinden sonra satr sonuna kadar herey aklamadr.
Anlalaca zere bu iaretin satrn en banda olmas zorunlu deildir.
Ancak kodlama alkanl bakmndan satr banda kullanlmas daha
uygundur.
rnek:
// bu bir aklama satrdr
int sayi = 5; // sayi deikenine 5 deeri atand.
Kod 3-1. Tek satra yazlan aklamalar
3.2.2 /* ... */ ile yaplan aklamalar
Eer birden fazla satrda yazlan bir aklama varsa, her satrn bana //
iareti koymak programcya zor gelebilir. Bunun yerine, aklama olarak
deerlendirilmesi istenen satrlar /* ve */ iaretleri arasna alnr. Bu iki
iaret arasnda kalan kesimler derleyici tarafndan aklama satr olarak
kabul edilir.
rnek:
/* Bu birden fazla satrdan oluan bir aklamadr. Ancak bir aklamann
bu yolla ifade edilmesi iin birden fazla satrdan olumas zorunluluu
yoktur. */
int sayi = 5; /* sayi deikenine 5 deeri atand. */
Kod 3-2. Birden fazla satra yazlan aklamalar
3.2.3 /** ... */ ile yaplan aklamalar
Bir uygulama gelitirilirken kod ii belgeleme yapmak gzel bir
programlama alkanldr. nk hem yapmakta olduunuz ii en gzel o
ii yaparken aklayabilirsiniz, hem de aklayabildiiniz kodu anlamsnz
demektir ve o kodu aklayarak yazdnz iin hata yapma olaslnz
der.
te yandan, ou zaman uygulamalarn raporlarnn oluturulmas gerekir.
Kod yazldktan sonra kodun iine yazlan aklamalardan bir belge
oluturarak bu belgeyi raporun sonuna eklemek programcnn ykn
hafifletecektir. te imdi bahsedeceimiz nc yntem bu amala
kullanlr. /** ve */ iaretleri arasna yazlan aklamalar bir takm zel
etiketler ierebilir. Kod ii belgeleme, bu etiketleri tanyan ve etiketlerden
faydalanarak belge reten bir aracn yardm ile belgeye
dntrlebilmektedir.
Bu tarzda yazlan aklama satrlarna Javadoc ad verilmektedir. Javadoc
iin kullanlabilecek baz imler ve ne iin kullanlabilecekleri aada
listelenmitir:
Etiket Aklama
@author Kodu yazan kiinin kim olduunu belirtir
@deprecated Yntemin artk kullanmda olmadn belirtir. Baz
uygulama gelitirme ortamlar, bu ekilde iaretlenmi
yntemler kullanldnda programcy uyarr.
@exception Bir yntemin frlatt aykr durumu belirtir
@param Yntemin ald parametreleri aklamakta kullanlr
@return Yntemden dnen deeri aklamakta kullanlr
@see Baka bir yntem ya da snf ile balant kurar
@since Bir yntemin ne zamandan beri var olduunu belirtir
@throws Bir yntemin frlatt aykr durumu belirtir.
@version Bir snf ya da yntem iin srm numaras belirtir.
Tablo 3-1. javadoc iin kullanlan imlerden bazlar ve aklamalar
javadoc.exe arac, JDKnn kurulduu klasrde bin klasrnn altndadr.
Bu ara, Java kaynak kodlarnn zerinden geerek /** .. */ iaretleri
arasna yazlan aklama satrlarndan belge retir. Belge, Java API
Belgeleri ile ilgili kesimde anlatld gibi HTML dili ile oluturulmaktadr.
Aslnda Java API Belgesinin kendisi de bu yolla oluturulmu bir belgedir
ve belki de Java APIsini kullanmak ve renmek zere kullanlabilecek en
iyi ve kolay kullanml belgedir.
rnek:
package ornek;
/**
* @author Ouz Aslantrk - 06.Mar.2007
*
*/
public class AciklamaSatiriOrnegi {
/**
* Verilen saynn karekkn bularak dndrr.
* Saynn sfrdan kk olmadn varsayar.
*
* @param sayi Karekk alnacak say
* @return Saynn karekk
*/
public double karekok(double sayi) {
double kkok = 0;
// burada karekk bulma algoritmasnn altn kabul edelim
return kkok;
}
}
Kod 3-3. javadoc ile yaplan aklamalar
Konsolda AciklamaSatiriOrnegi.java dosyasnn bulunduu klasre
gidip aadaki satr yazarsak, Docs adl bir klasr oluturulacak ve ad
verilen .java dosyas iin HTML belgeleri oluturulacaktr.
javadoc d Docs AciklamaSatiriOrnegi.java
Kod 3-4. Javadoc ile belge oluturma
Aada bu belgeye ait bir grnm bulunmaktadr:
Kod 3-5. Aklama satrlarndan oluturulan javadoc belgesi
3.3 Temel Trler (Primitive Types)
Javada temel trler tabloda grld kadardr. Herbir temel trn
uzunluunun ve alabilecei en byk ve en kk deerlerin belli olmas
programclarn iini kolaylatrmaktadr.
Tr kil
says
En kk deer En byk deer Varsaylan
deer
byte 8 -27 27-1 0
short 16 -215 215-1 0
int 32 -231 231-1 0
long 64 -263 263-1 0
float 32 -3.4 x 1038, 7 hane 3.4 x 1038, 7 hane 0.0
double 64 -1.7 x 10308, 15 hane 1.7 x 10308, 15 hane 0.0
char 16 - - Boluk
krakteri
boolean 0 false true false
Nesne
referans
32 - - null
Tablo 3-2. Javada Temel Trler
Temel trlerin varsaylan deerleri grld gibi belirlidir. Yine de
deikenler tanmlanrken ilk deer olarak bu deerlerin atanmas kodun
okunurluunu arttran ve olas hatalarn nne geen iyi bir programlama
alkanldr.
3.4 Deiken Tanmlama ve lk Deer Atama (Variable
Declaration and Initialization)
Deiken, veri saklamak iin kullanlan bellek alanlarna verilen addr. Her
deikenin ad, adresi, tr ve deeri vardr. Deiken tanm aadaki
ekilde yaplr:
deikenin_tr deikenin_ad;
Ayn trden birden fazla deiken tanmlanacaksa, bunlar , iareti ile
ayrlarak yazlabilirler.
deikenin_tr deikenin_ad_1, deikenin_ad_2;
Aada baz deiken tanmlar grlmektedir:
short sayi;
int sayi1, sayi2;
double gercelSayi1,
gercelSayi2;
Kod 3-6. Deiken tanmlama
Bir deikene ilk deer atamak iin, deiken tanmnn hemen yannda
atama ileci kullanlabilir:
byte byteTipindeDegisken = -8;
char birinciKarakter = a, ikinciKarakter = z;
float gercelSayi = 4.35;
Kod 3-7. Deikene ilk deer verme
Javada bir takm isimlendirme kurallar/gelenekleri (Naming Conventions)
bulunmaktadr. Bu kurallara gre deiken adlar kk harfle balar, birden
fazla szckten oluuyorsa, birinci szckten sonraki szcklerin yalnzca ilk
harfleri byk dierleri kk yazlr: byteTipindeDegisken, birinciKarakter
deikenlerinde olduu gibi.
Bir deiken tanmlarken, deiken adnn zenle seilmesi ve deikenin
yapaca ii belirtmesi gzel bir programlama alkanldr.
3.4.1 Deikenin Tanm Alan (Scope)
ki kme parantezi ({ ve }) arasnda kalan kod kesimine blok denir.
{ iareti bir kod blou balatr ve } iareti balatlan kod blounu bitirir.
Herhangi bir deiken, tanmland kod blou iinde fiziksel olarak vardr
ve o kod blou iine yazlan kod kesimlerinden eriilebilirdir. Bu alana
deikenin tanm alan denir.
Bir blok iinde ayn deiken ad birden fazla kez kullanlamaz.
rnek:
int n = 5;
System.out.println("n: " + n); // n: 5
{
int k = 3;
System.out.println("k: " + k); // k: 3
n = 8;
} // k buraya kadar tanml, buradan sonra eriilemez
System.out.println("n: " + n); // n: 8
Kod 3-8. Kod blou ve tanm alan rnei
3.5 leler (Operators)
3.5.1 Aritmetik ileler:
le Ad Gsterimi rnek
Atama (assignment) = a = 5;
Toplama + a = a + b;
karma - a = a b;
arpma * a = a * b;
Blme / a = a / b;
Mod Alma % a = a % 3;
Tablo 3-3. Aritmetik ileler
3.5.2 Birleik Aritmetik leler:
le Ad Gsterimi rnek
Toplama ve atama += a += b; // a = a + b;
karma ve atama -= a -= b; // a = a - b;
arpma ve atama *= a *= b; // a = a * b;
Blme ve atama /= a /= b; // a = a / b;
Mod alma ve atama %= a %= b; // a = a % b;
Tablo 3-4. Birleik Aritmetik leler
3.5.3 Arttrma ve Azaltma leleri:
le Gsterimi rnek
Arttrma (increment) ++ a++; // post-increment
++a; // pre-increment
Azaltma (decrement) -- a--; // post-decrement
--a; // pre-decrement
Tablo 3-5. Arttrma ve Azaltma leleri
Arttrma ve azaltma ileleri deikenin nne veya sonuna yazlabilir.
Nereye yazldklarna bal olarak ilelerin nasl iletilecei deiir:
Deikenin sonuna yazlrsa:
int a = 3, b = 5, c;
c = a++ + b;
System.out.println(a: + a); // a: 4
System.out.println(b: + b); // b: 5
System.out.println(c: + c); // c: 8
Kod 3-9 Arttrma ilecinin deikenin sonuna yazlmas rnei
Deikenin nne yazlrsa:
int a = 3, b = 5, c;
c = ++a + b;
System.out.println(a: + a); // a: 4
System.out.println(b: + b); // b: 5
System.out.println(c: + c); // c: 9
Kod 3-10 Arttrma ilecinin deikenin nne yazlmas rnei
rneklerde de grld gibi, her iki kod kesiminde de ann deeri
arttrma ileci ile 1 artmaktadr. Ancak ilk rnekte, ann deeri
arttrlmadan nce (ann deeri 3 iken) aktarma ilecinin sa tarafndaki
ilem gerekletirilmekte ve buna bal olarak cnin deeri 8 olmakta;
ikinci rnekte ise ann deeri 1 arttrldktan sonra sa taraftaki ilem
gerekletirilmekte ve buna bal olarak cnin deeri 9 olmaktadr. Baka
bir deyile, her durumda ann deeri arttrma ileci ile 1 arttrlacaktr
ancak bunun nce mi sonra m olacana gre cnin deeri deimektedir.
Eer bu iletim kafanz kartrdysa, ++a ya da a++ yerine bir nceki ya da
bir sonraki satra a += 1 yazarak kodun nasl altndan emin
olabilirsiniz. Programlama dilindeki her ayrnty kullanmanz gerekmez,
nemli olan doru, etkin ve okunur kod yazmaktr.
3.5.4 likisel (relational) ileler:
le Ad Gsterimi rnek
Eittir == a == b
Eit deildir != a != b
Byktr > a > b
Kktr < a < b
Byk ya da eittir >= a >= b
Kk ya da eittir 10
deil (not) ! !(a > 0)
Tablo 3-7. Mantksal leler
3.5.6 lelerin ncelikleri:
Verdiimiz ilelerle ilgili ncelik kurallarn basit ifadelerle aklayalm.
Tekil ilelerin ikili ilelere gre ncelii vardr.
Aritmetik ilelerde arpma ve blme ilelerinin toplama ve karma
ilelerine gre ncelii vardr. Ayn ncelikli ileler soldan saa
srayla iletilir.
Aritmetik ileler ilikisel ilelere gre nceliklidir.
likisel ileler soldan saa srayla iletilir.
likisel ileler mantksal ilelere gre nceliklidir.
En dk ncelikli ile atama ilecidir.
Yukardaki kurallara gre aadaki kod kesimini iletelim:
int a = 3, b = 5, c;
c = a * ++b / 5 - 12 * a + b;
System.out.println("c: " + c); // c: -27
boolean bool = a + b < a * c && a + b >= b + a;
System.out.println("bool: " + bool); // bool: false
Kod 3-11. le ncelikleri rnei
ncelikler parantez kullanlarak deitirilebilir. Bir ifade, baz ksmlar
parantezler arasna alnarak dzenlendiinde nce parantezlerin ii iletilir.
Kod 3-10da grlen kod kesimini, ncelikleri parantezlerle belirleyecek
ekilde yeniden yazp iletelim:
int a = 3, b = 5, c;
c = (a * ++b) / (5 - 12) * (a + b);
System.out.println("c: " + c); // c: -18
boolean bool = (a + b) < (a * c) && (a + b) >= (b + a);
System.out.println("bool: " + bool); // bool: false
Kod 3-12. Parantezler ile ncelik belirleme rnei
Grld gibi c deikeninin deerinin hesapland satrda ncelikleri
deitirerek farkl bir deer bulunmasn saladk.
bool deikeninin deerinin belirlendii satrda ise ncelikleri
deitirmedik. Ancak kodun daha kolay okunabilir olmasn saladk.
ncelik kurallar bilinse de karmak bir deyimin okunabilirlii ou zaman
olduka dktr. Parantez, ncelikleri deitirmek zere kullanlabildii
gibi, bazen srf kodun okunabilirliini arttrmak iin kullanlr.
Kodun okunurluunu arttrmak iin parantezleri kullanmak gzel bir
programlama alkanldr.
Bu blmde listelenen ileler, Java dilindeki btn ileler deildir. Ancak
vereceimiz temel bilgiler asndan bu ileler yeterlidir. lelerle ilgili
daha ayrntl bilgi iin Java referans belgelerine bavurabilirsiniz.
3.6 Denetim Deyimleri (Control Statements)
Denetim deyimleri, bir takm koullara gre programn aknn
belirlenmesini salayan programlama geleridir. Bir denetim deyimi,
iletilecek bir sonraki koulun hangisi olacan belirlemek zere bir koulu
denetler.
3.6.1 if else deyimi
u ekilde yazlr:
if (koul ifadesi) {
koulun doru olmas durumunda iletilecek kod kesimi
}
else {
koulun doru olmamas durumunda iletilecek kod kesimi
}
if ve else deyimleri ayrlm szcklerdir. if deyiminin denetlemesi
istenen koul ifadesi parantez iinde yazlmak zorundadr. Koul ifadesini
izleyen kme parantezi ( { ), if blounun balangcdr. Bu parantez
kapatlana ( } ) kadarki kod kesimi, koulun doru olmas durumunda
iletilecek kesimdir. if blou kapatldktan hemen sonra else deyimi gelir
ve else blou balar. else blou, koulun doru olmamas durumunda
iletilir. Ksaca, koula bal olarak ya if blou ya da else blou
iletilecektir. if ve else bloklarnn arasna herhangi bir deyim giremez.
rnek:
int a = 3, b = 5;
System.out.println("Denetimden nceki kod kesimi");
if (a > b) {
System.out.println("a, b'den byktr.");
}
else {
System.out.println("a, b'den byk deildir.");
}
System.out.println("Denetimden sonraki kod kesimi");
Kod 3-13. if deyimi rnei - 1
kt:
Denetimden nceki kod kesimi
a, b'den byk deildir.
Denetimden sonraki kod kesimi
else blounun yazlmas zorunlu deildir, ancak if blou olmadan else
blou yazlamaz. Baka bir deyile, elsesiz if olabilir ancak tersi doru
deildir. Bazen yalnzca koulun doru olmas durumunda iletmek
istediimiz bir kod kesimi vardr ancak yanl olmas durumunda iletilecek
zel bir kod yoktur. Bu durumda yalnzca if blounu yazmak yeterlidir.
rnek:
int a = 3, b = 5;
System.out.println("Denetimden nceki kod kesimi");
if (a > b) {
System.out.println("a, b'den byktr.");
}
System.out.println("Denetimden sonraki kod kesimi");
Kod 3-14. if blou rnei - 2
kt:
Denetimden nceki kod kesimi
Denetimden sonraki kod kesimi
Eer if ya da else bloklarndan herhangi birisi tek satrdan oluuyorsa,
{ } arasna alnmayabilir. if deyiminden hemen sonra gelen ilk satr if
deyimine, else deyiminden sonra gelen ilk satr da ayn ekilde else
deyimine bal olarak iletilir.
rnek:
int a = 3, b = 5;
System.out.println("Denetimden nceki kod kesimi");
if (a > b)
System.out.println("a, b'den byktr.");
else
System.out.println("a, b'den byk deildir.");
System.out.println("Denetimden sonraki kod kesimi");
Kod 3-15. if blou rnei - 3
Gerek kodun okunurluunun kaybolmamas, gerekse dalgnlkla yaplabilecek
hatalarn nne geilebilmesi asndan, if ya da else bloklarn tek
satrdan olusalar bile { } arasna almak iyi bir programlama alkanldr.
Bir if blounun iine baka if deyimi ya da deyimleri de gelebilir. Burada
herhangi bir snr yoktur. Algoritmaya gre, iie if deyimleri yazlabilir.
rnek:
int a = 7, b = 3, c = 1;
if (a > b) {
System.out.println("a, b'den byktr.");
if (a > c) {
System.out.println("a, c'den de byktr.");
}
else {
System.out.println("a, c'den byk deildir.");
}
}
Kod 3-16. ie if deyimleri
kt:
a, b'den byktr.
a, c'den de byktr.
3.6.2 if else if deyimi
u ekilde yazlr:
if (1. koul ifadesi) {
1. koulun doru olmas durumunda iletilecek kod kesimi
}
else if (2. koul ifadesi) {
2. koulun doru olmamas durumunda iletilecek kod kesimi
}
... // istenildii kadar else if blou
else {
hibir koulun doru olmamas durumunda iletilecek kod kesimi
}
if - else if deyimleri, bir koulun salanmad durumda dier koul
ya da koullarn denetlenmesini salayan bir yapdadr. Denetlenen
koullardan herhangi birisinin sonucu mantksal doru olursa, o kod blou
iletilir ve programn ak en sonraki else blounun bitimine sapar. Hi
bir koul doru deilse, o zaman else blou iletilir.
else blounun yazlmas zorunlu deildir.
rnek:
int a = -1;
System.out.println("Denetimden nceki kod kesimi");
if (a > 0) {
System.out.println("a, 0'dan byktr.");
}
else if (a < 0) {
System.out.println("a, 0'dan kktr.");
}
else {
System.out.println("a'nn deeri 0'dr.");
}
System.out.println("Denetimden sonraki kod kesimi");
Kod 3-17. if else if deyimi rnei
kt:
Denetimden nceki kod kesimi
a, 0'dan kktr.
Denetimden sonraki kod kesimi
ktda grld gibi, kod bloklarndan yalnzca birisi iletilmitir.
3.6.3 switch deyimi
switch deyimi, if-else-if deyimleri ile yazlabilecek bir kod kesimini
daha basite yazmay salayan, bir ifadenin deerine gre dallanmay
salayabilen bir deyimdir.
Aadaki gibi yazlr:
switch (ifade) {
case deger1:
ifadeler;
break;
case deger2:
ifadeler;
break;
....
case degerN:
ifadeler;
break;
default:
ifadeler;
}
switch deyiminden sonra parantez ierisine bir ifade yazlr. Bu ifade, tek
bana bir deiken olabilecei gibi, herhangi bir matematiksel ilem ya da
ilev ars da olabilir. case satrlar, ifadenin deerini denetler. Herhangi
bir case satrnda eitlik yakalanabilirse, o case satr iletilir. break
deyimi, denetim yapsndan kmaya yarayan deyimdir ve bir case satr
iletildikten sonra dierlerinin iletilmemesini salar. Ancak yazlmas
zorunlu deildir. default ise, hibir case satrnda ifadenin deerinin
yakalanamamas durumunda iletilmek istenen kod kesiminin kodlanaca
yerdir, yazlmas zorunlu deildir.
int ay = 5;
System.out.println("switch'ten nceki kod kesimi");
switch (ay) {
case 1: System.out.println("Ocak"); break;
case 2: System.out.println("ubat"); break;
case 3: System.out.println("Mart"); break;
case 4: System.out.println("Nisan"); break;
case 5: System.out.println("Mays"); break;
case 6: System.out.println("Haziran"); break;
case 7: System.out.println("Temmuz"); break;
case 8: System.out.println("Austos"); break;
case 9: System.out.println("Eyll"); break;
case 10: System.out.println("Ekim"); break;
case 11: System.out.println("Kasm"); break;
case 12: System.out.println("Aralk"); break;
default: System.out.println("Ay 1 - 12 aralnda deil");
}
System.out.println("switch'ten sonraki kod kesimi");
Kod 3-18. switch deyimi rnei
kt:
switch'ten nceki kod kesimi
Mays
switch'ten sonraki kod kesimi
switch deyimi kullanlrken break deyimlerinin dikkatli kullanlmas gerekir.
break deyiminin unutulmas ya da yazlmamas durumunda, case satr
iletildikten sonra switch deyiminin sonuna saplmayacak, ileyi bir
sonraki case satrndan devam edecektir. if-else if kod bloklar, switch
bloklarna oranla hata yapmanza daha az yatkndr.
rnek:
int ay = 5;
switch (ay) {
case 12:
case 1:
case 2: System.out.println("K"); break;
case 3:
case 4:
case 5: System.out.println("lkbahar"); break;
case 6:
case 7:
case 8: System.out.println("Yaz"); break;
case 9:
case 10:
case 11: System.out.println("Sonbahar"); break;
default: System.out.println("Ay 1 - 12 aralnda deil");
}
Kod 3-19. break kullanlmayan switch deyimi rnei
kt:
lkbahar
3.7 Dngler (Loops)
Dngler, belirli bir koul saland srece tekrarlanmas gereken iler
iin kullanlan programlama geleridir. Javada for, while ve do-while
olmak zere 3 adet dng deyimi bulunmaktadr.
Herhangi bir algoritmada hangi dngnn kullanlmas gerektii ile ilgili
kesin kurallar yoktur. Dngler uygun deiiklikler ile ayn ii yapacak
ekilde kodlanabilirler. Ancak genel eilim, ka kere dnecei belli
olmayan, koulun bir girdiye (rnein bir dosyadan okunan ya da
kullancnn girdii deerlere) gre denetlendii durumlarda while ya da
do-while dngsn, diziler gibi, tekrar saysnn belli olduu durumlarda
for dngsn kullanmak ynndedir.
3.7.1 while dngs
u ekilde yazlr:
while (koul ifadesi) {
deyimler;
}
while szc ile koulun iine yazld parantezler zorunludur. Koul
saland srece while blounun iindeki kod kesimi iletilecektir.
rnek:
int i = 1;
while (i
do-while dngsnde, dng blou iindeki kod kesimi en az bir kez
mutlaka iletilecektir. nk nce dng blou iletilip sonra koul
denetlenmektedir. while dngsnde ise nce koula baklp sonra dng
blou iletildii iin, dngye hi girilmemesi olasdr.
3.7.3 for dngs
u ekilde yazlr:
for (ilk_deger_atama; koul; her_dnte) {
deyimler;
}
Bu yazlta for szc, ilk_deger_atama, koul ve her_dnte
alanlarnn iine yazld parantezler ve ; (noktal virgl) iaretlerinin
yazlmas zorunludur.
ilk_deger_atama: Dngye ilk defa girilirken iletilecek kod kesimidir.
Yalnzca bir kez iletilir. Bo braklabilir ya da birden fazla deyimden
oluabilir. Birden fazla deyimden oluuyorsa, deyimler , (virgl) iareti
ile birbirlerinden ayrlr. Genellikle dng deikeninin ilk deerinin
verilmesi iin kullanlr ve tek deyim ierir.
koul: Dng blou iletilmeden nce denetlenecek koul ifadesini ierir.
while dngsnde olduu gibi, nce koul denetlenir, koulun mantksal
doru olmas durumunda dng blou iletilir.
her_dnte: Dng blou iletildikten sonra, koul yeniden
denetlenmeden hemen nce iletilecek kod kesimidir. Dng blounun her
iletilmesinden sonra bir kez iletilir. Bo braklabilir ya birden fazla
deyimden oluabilir. Birden fazla deyimden oluuyorsa, deyimler ,
(virgl) iareti ile birbirlerinden ayrlr. Genellikle dng deikeninin
deerinin gncellenmesi iin kullanlr ve tek deyim ierir.
rnek:
int i;
for (i = 1; i
}
Kod 3-22. for dngs rnei - 1
kt:
1. kez iletildi..
2. kez iletildi..
3. kez iletildi..
4. kez iletildi..
5. kez iletildi..
Ayn dng u ekilde de yazlabilir:
for (int i = 1; i
System.out.println("i: " + i + ", j: " + j);
}
Kod 3-25. for dngs rnei - 4
kt:
i: 1, j: 10
i: 2, j: 9
i: 3, j: 8
i: 4, j: 7
i: 5, j: 6
Ayn dng u ekilde de yazlabilir:
int j = 10;
for (int i = 1; i
4 Uygulama Gelitirme Ortam
Java ile uygulama gelitirmek iin eitli Tmleik Uygulama Gelitirme
Ortam (Integrated Development Environment - IDE) yazlmlar
kullanlmaktadr. Ancak bu ortamlarn birok ayrnty kullancdan
gizleyerek alyor olmalar, platformu ve dili yeni renen kiilerin
gerekte neler olup bittiini bilmeden kod yazabilmeleri sonucunu
dourmaktadr. Tamamen yabanc bir ortamda fazla birey bilmeden
alr programlar oluturabilmek balangta cazip gelse de, renme
eylemi asndan grnd kadar faydal deildir. Ama renmek
olduuna gre nce byle bir ara olmadan ilerin nasl yaplacan
grmek daha doru olacaktr. Sonraki aamada ise daha hzl ve kolay
alabilmek iin elbette uygulama gelitirme ortamlarndan faydalanmak
gerekir.
4.1 JDK ve JRE
JDK, Java Development Kit szcklerinin ba harflerinden oluturulmu bir
ksaltmadr. Java programlarnn gelitirilip altrlabilmesi iin gerekli
ara ve ktphaneleri ieren paket JDK ad ile sunulmaktadr.
JRE ise Java Runtime Environment szcklerinin ba harflerinden oluur.
Java programlarn altrmak (gelitirmek iin deil!) iin gerekli
bileenleri ierir.
Eer bilgisayarnzda Java ile program gelitirmeyecek, yalnzca Java
programlarn altracaksanz, bilgisayarnzda JRE bulunmas yeterlidir.
Ancak eer kod gelitirecekseniz, JDKya gereksinim duyarsnz.
JDK kurulum paketinin iinde JRE de gelmektedir. Yani ikisini ayr ayr
indirip kurmanza gerek yoktur.
http://java.sun.com/javase/downloads/index.jsp adresinden JDKy
indirmek iin gerekli balantya tklayn. Bu balant sizi farkl platformlara
ait JDKlar indirebileceiniz sayfaya gtrecektir. rneklerimizi
WindowsXP zerinde yazacamz iin biz jdk-6-windows-i586.exe
http://java.sun.com/javase/downloads/index.jsp
(kitabn yazlma zamannda JDKnn bu srm var) dosyasn indirdik.
Ancak siz kendi kodlarnz hangi platformda yazacaksnz, ona uygun
JDKy seebilirsiniz.
JDK kurulum dosyasna ift tkladnzda iki ayr kurulum balatlacaktr.
Bunlardan ilki JDKnn kurulumudur. Varsaylan kurulumu gerekletirebilir
ya da kendinize gre zelletirme yaparak hedef klasr deitirebilir,
demolar ve kaynak kodlar kurmamay seebilirsiniz.
kinci kurulum ise Public JRE adl bir programa aittir. Bu kurulumu
varsaylan haliyle gerekletiriniz. Public JRE, makinanzda JVM ortamn
oluturur ve JVM gereksinimi olan dier programlarnza da bu ortamdan
faydalanma olana salar.
JDKy makinanza kurduktan sonra, ncelikle evre deikenlerini
gncellemeniz gerekir:
PATH deikeni: Gncellenmesi gereken evre deikenlerinden ilki PATH
deikenidir. JDKy kurduunuz klasrn altndaki bin klasrn PATH
deikenine tanmlamalsnz. Bunu WindowsXPde u ekilde
yapabilirsiniz:
Balat (Start) -> Ayarlar (Settings) -> Denetim Masas (Control
Panel) -> Sistem (System) penceresini an.
Gelimi (Advanced) sekmesine gelin.
evre Deikenleri (Environment Variables) tuuna tklayn.
Alttaki Sistem Deikenleri (System variables) penceresinde PATH
adl deikeni bulup Dzenle (Edit) tuuna tklayn.
Bu deikenin iinde tanml deerler varsa bunlar deitirmeyin, en
sona gidip ; yazdktan sonra JDKy kurduunuz klasrn adn
buraya ekleyin.
PATH deikenine bir klasr eklendii zaman, eklenen klasrn altndaki
dosyalar bilgisayarn herhangi bir klasrnden eriilebilir hale gelir.
Bylece bir alma klasrnde alrken JDKnn bin klasrnn altnda
bulunan aralar rahata kullanabilirsiniz. Bu aralardan bazlarna hzlca
bakalm:
javac.exe: Java programlarn derlemek iin kullanlr.
java.exe: Derlenmi Java programlarn altrmak iin kullanlr.
javadoc.exe: Java kaynak kodlarndaki kod ii belgelemeyi
kullanarak belge oluturmak iin kullanlr.
appletviewer.exe: Applet kodlarn altrmak iin kullanlr.
javap.exe: Derlenmi bir snf dosyasnn iinde neler olduunu
grmek iin kullanlr.
jar.exe: Java programlarn oluturan dosyalar sktrarak
paketlemek ya da bu paketleri amak iin kullanlr. zip biiminde
(format) dosyalar retebilir.
CLASSPATH deikeni: Gncellenmesi gereken bir dier evre deikeni
ise CLASSPATH deikenidir. Eer evre deikenleri arasnda CLASSPATH
deikeni tanmlysa bunu ya silin ya da ieriini yalnzca . olacak ekilde
gncelleyin.
Baz programlar PATH deikenine kendi kurulumlar ile birlikte gelen JDK
veya JREyi eklerler. Bu durumda PATH deikeninin iinde farkl JDK
srmlerine ait olan ve ; iaretiyle ayrlm birden ok tanmlama
bulunabilir. Bu ise Java programlarn derleyememenize ya da
altramamanza neden olabilir. Eer PATH deikeninde yle tanmlar
varsa silin.
4.2 Java ile ilk program
Bu ksmda yazlan programlarda henz anlatmadm baz deyimler ve
anahtar szckler kullanacam. Bunlar kullanmamn nedeni zorunlu
olmam. nk Java ile programlama yaparken uymamz gereken baz
kurallar var. Ancak henz bu kurallardan bahsetmediim iin, yazdm
programlarn bu ksmlarn aklamayacak, imdilik bunlar birer
programlama kalb olarak renmenizi isteyeceim. Daha sonra ilgili
konular aklanrken bu konulara geri dnecek ve gerekli aklamalar
yapacam.
Bir programlama dili renirken, ncelikle kendinize bir alma alan
oluturmakta fayda olabilir. rnein C:\calisma gibi bir klasr oluturup
yazdnz btn programlar bunun altnda aacanz alt klasrlerde
saklayabilirsiniz. Ben de buradaki rneklerde C:\calisma adl klasr
kullanacam.
4.2.1 lk program
Aada ekrana lk Java programmz yazdran basit bir programn
kaynak kodunu grebilirsiniz.
public class IlkProgram {
public static void main(String[] args) {
System.out.println("lk Java programmz..");
}
}
Kod 4-1. lk Java program
Bu kaynak kodu herhangi bir metin dzenleyici ile (rnein Notepad ile)
yazp IlkProgram.java adl bir dosyaya kaydediniz. Dikkat ederseniz,
kaynak kodu iine yazdm dosya ile kodun bandaki snf ad
(IlkProgram) ayn ve byk-kk harf duyarl (case-sensitive). Yani
dosyann adn rnein ilkprogram.java yapmamalsnz.
Kural: Java snfnn ad ile bu snfn kaydedildii dosyann ad byk-kk
harf duyarl olacak ekilde AYNI olmaldr!
4.2.2 Derleme
IlkProgram.java dosyasn C:\calisma altna kaydettik. imdi bu
program derlemek iin konsolu ayoruz.
Konsolu amak iin Balat (Start) -> altr (Run) mensn seip buraya
cmd yazp Enter tuuna basabilir ya da Balat (Start) -> Donatlar
(Accessories) -> Komut stemi (Command Propmt) mensn seebilirsiniz.
Konsolda C:\calisma klasrne gidiyoruz: cd c:\calisma
imdi programmz derliyoruz: javac IlkProgram.java
ekil 4-1. IlkProgram.java dosyasnn derlenmesi
ekilde grld gibi program derlendikten sonra IlkProgram.class adl,
byte-kod ieren Snf Dosyas (Class file) olutu. Eer herhangi bir
szdizim hatas olsayd derleme ilemi baarsz olacak ve snf dosyas
olumayacakt. rnein, eer kaynak kodu ieren dosyay
ilkprogram.java ad ile (snf ad ile dosya ad ayn olmayacak ekilde)
kaydetseydik bir derleme hatas alacaktk ve snf dosyas olumayacakt:
ekil 4-2. ilkprogram.java dosyasnn derlenmesi
4.2.3 altrma ve main yntemi
Program baar ile derlediimize gre artk altrabiliriz. Ancak
altrmadan nce programn nasl alacana bir bakalm.
Derlenmi bir snf dosyas, eer iinde
public static void main(String[] args) {
....
}
eklinde yazlm bir yntem varsa altrlabilir bir dosyadr. Bu dosyay
altrdmz zaman (az sonra nasl altracamz greceiz), program
main ynteminin ilk satrndan almaya balar.
rneimizde, main ynteminin iinde yalnzca bir satr kod bulunuyor:
System.out.println(lk Java programmz..)
System.out.println() yntemi, iaretleri arasnda verilen dizgiyi
ekrana yazdran bir yntemdir. Dolaysyla programmz altrdmzda
ekranda
lk java programmz..
yazmasn bekliyoruz.
Bir snf dosyasn altrmak iin konsolda
java IlkProgram
yazp Enter tuuna basmamz gerekiyor. Dikkat ederseniz,
java IlkProgram.class
yazmyoruz! java IlkProgram ifadesi ile JVMye hangi snf altrmak
istediimizi belirtiyoruz. JVM, adn verdiimiz IlkProgram adl snf Snf
Ykleyici grevi ile bellee ykleyip, bu snfn iindeki main yntemini
iletmeye balyor. Burada, main ynteminin zel bir yntem olduunu,
altrlmak istenen bir snf dosyasnda JVM tarafndan aranan bir yntem
olduunu ve bulunabilmesi iin de aynen burada yazld ekilde yazlmas
gerektiini syleyelim. Baka bir deyile, eer yazdmz snf altrmak
istiyorsak, o snfn iinde
public static void main(String[] args)
adl bir yntem olmas gerekiyor.
main yntemi yazlrken, args yerine baka herhangi birey yazlabilir.
Ancak genellikle args szc kullanlr ve bu szck arguments
szcnn ksaltmasdr. arguments ile ifade edilen, snf altrlrken
JVM tarafndan bu snfa verilen argmanlardr. Bunula ilgili daha ayrntl
bilgiyi daha sonra vereceiz.
Aada programn altrln grebilirsiniz:
ekil 4-3. IlkProgram snfnn altrlmas
Eer java IlkProgram.class yazarsak ne olacana da bakalm:
ekil 4-4. IlkProgram snfnn hatal altrlmas
Grld gibi bir hata olutu ve programmz altrlamad. imdilik
programn almadn grmekle yetinelim ve hatann ne olduu ile ilgili
ayrntl bilgiyi sonraya brakalm.
4.3 Eclipse Platformu
Java programlarnn gelitirilmesi ve altrlmas iin JDKnn nasl
kullanlabileceini grdk. JDK, temelde Java programlarnn
gerekletirilmesi iin yeterli olsa da byk uygulamalarn daha hzl ve
kolay gelitirilebilmesi iin birok tmleik uygulama gelitirme ortam
bulunmaktadr. Bu ortamlar hem kolay kullanlmalar sayesinde, hem de
sunduklar birok ara yardm ile programcnn iini kolaylatrr ve
azaltrlar.
Bu ksmda, birok cretli rnn arasndan syrlmay baarm, ak
kaynak kodlu ve cretsiz bir uygulama gelitirme platformu olan Eclipse
Platformuna hzl bir bak atlacaktr.
Bir teknoloji, programlama dili.. vb renirken, nce hibir ara kullanmadan
ilerin nasl yaplabildiini renin. Sonra arac kullanarak bu ileri kolay
yapmann rahatln grn. Bylece hem kullandnz aracn size ne
getirdiini daha kolay farkedersiniz, hem de herhangi bir baka arala
alabilecek bilgi birikimine sahip olursunuz. Sonuta btn aralar, o
aralar kullanlmadan da yaplabilecek olan ileri daha kolay yapmann
yollarn sunarlar. Siz neler olup bittiini bilirseniz hangi arala altnzn
bir balaycl ve nemi kalmaz.
5 Java ile Nesneye Ynelik Programlama
Bu blmde NYP kavramlar zerinde duracak, bu kavramlarn Javada
nasl gerekletirildiine bakacaz.
5.1 Snf Tanmlar
Snf ve nesne kavramlarndan daha nce bahsetmitik. Snf, bir grup
nesnenin ortak zellik ve davranlarn ieren tanm, nesne ise bu tanma
gre oluturulmu fiziksel bir varlkt. NYP ise bir nesnenin baka bir
nesneye ileti gndermesi, iletiyi alan nesnenin bu iletiye uygun davran
sergileyerek kendi durumunda bir deiiklik yapmas eklinde
gerekletiriliyordu (Bkz: Nesneye Ynelik Programlama).
Grld gibi, nesnelerimizi oluturabilmek iin nce o nesnelerin ait
olduklar snflar tanmlamamz gerekiyor. Snf tanmlarnn iine zellikler
ve davranlar yazacaz.
rnek olarak Zaman adl bir snf tanm yapalm. Zaman snfmzn saat,
dakika ve saniye adl zellikleri ile ilerle() adl bir davran olsun. saat,
dakika ve saniye zelliklerini, Zaman snfna ait bir nesnenin durumunu
oluturacak tamsay deerler, ilerle() davrann ise bu nesneye ilerle
iletisi gnderildiinde, o nesneyi bir saniye sonrasna gtren bir davran
olarak dnelim.
Snf tanm yaplrken, zellikler snfn iine deikenler olarak,
davranlar ise ilevler olarak kodlanr.
zellik (property) NYP balamnda, nesnenin durumunu oluturan, nesnenin
ait olduu snfn iine kodlanm herbir deikene verilen isimdir. zellik,
Java balamnda nitelik (attribute) olarak adlandrlr.
Davran (behaviour) NYP balamnda, nesnenin durumunda deiiklik
yapabilen, nesnenin ait olduu snfn iine kodlanm herbir ileve verilen
isimdir. Davran, Java balamnda yntem (method) olarak adlandrlr.
Javada Yntemler
Javada yntemler aynen Cdeki ilevler gibi yazlr. Ksaca hatrlayalm:
Yntemlerin belirli bir biime uygun yazlmalar gerekir. Bu biim u
ekildedir:
tr yntemAdi(parametreListesi) {
}
tr: Yntemin dndrecei deerin trdr. rnein verilen gerel saynn
karekkn bulup dndren bir yntem yazacaksak, yntemden geriye
dnecek deerin tr gerel say tipinde olacaktr. O zaman bu alana gerel
say trn ifade eden double yazarz. Eer yntemin geriye herhangi bir
deer dndrmesi beklenmiyorsa, bu alana deer dnmeyeceini belirtmek
zere void yazlr.
yntemAdi: Ynteme verilen addr. Yntem ad, yntemin ne i yaptn
ifade edecek ekilde zenle seilmelidir. Bylece hem kodun okunurluu
salanabilir hem de daha sonra hangi yntemin kullanlacana kolaylkla
karar verilebilir. rnein karekk bulan yntem iin karekokBul ad
kullanlabilir.
parametreListesi: Bir yntem, kendisine verilen deerler zerinde
alabilir. Karekk bulan yntemin karekkn bulaca deer o yntemin
parametresidir. Parametre listesi, sfr ya da daha ok parametreden oluur.
Her parametrenin nce tr sonra ad yazlr ve parametrelerin arasna ,
(virgl) koyulur.
Bu bilgiler nda, verilen iki tamsaynn ortak blenlerinin en byn
bulan ilevi u ekilde tanmlayabiliriz:
int obeb(int sayi1, int sayi1) {
// buraya obeb bulma algoritmas kodlanacak
}
Benzer ekilde, nesnenin durumunu ekrana yazdran, geriye herhangi bir
deer dndrmeyen yntemi de u ekilde tanmlayabiliriz:
void yaz() {
// buraya nesnenin durumunu ekrana yazan kodlar yazlacak
}
Aada Zaman snfna ait Java kodu grlmektedir:
class Zaman {
int saat;
int dakika;
int saniye;
/**
* Her arldnda nesneyi bir saniye sonrasna gtren yntem.
* saniye 59, dakika 59, saat ise 23'ten byk olamaz.
*/
void ilerle() {
saniye++;
if (saniye == 60) {
saniye = 0;
dakika++;
if (dakika == 60) {
dakika = 0;
saat++;
if (saat == 24) {
saat = 0;
}
}
}
}
}
Kod 5-1. Zaman snf
Grld gibi zellikleri snfn iinde birer deiken olarak, davran ise
yine snfn iinde bir ilev olarak kodladk. Zaman snfnn bir snf
olduunu belirten anahtar szck ise class szc. Bu kodu Zaman.java
adl bir dosyaya kaydettikten sonra derleyebiliriz.
u anda szdizim kurallar asndan doru ve geerli bir snf yazm
durumdayz ancak henz bu snf mantksal adan kullanlabilir deil.
nk bu snfa ait bir nesne oluturduumuzda nesnemizin durumunu
birer saniye ilerleterek deitirebileceiz fakat herhangi bir anda nesnenin
durumunu renebileceimiz bir davran tanmlam deiliz. Baka bir
deyile zaman ilerletebilir ama deerini renemeyiz; saat ka? diye
soramayz. Zaman snfndan bir nesneye bunu sorabilmemiz iin, nce
snfn iine bu soruyu yantlayabilecek davran tanmlamamz gerekiyor:
/**
* arld zaman nesnenin o anki durumunu ekrana yazar.
*/
void zamaniYaz() {
System.out.println("Zaman: " + saat + ":" + dakika + ":" + saniye);
}
Kod 5-2. Zaman nesnesinin durumunu soran yntem
zamaniYaz() yntemini, Zaman snfna ait herhangi bir nesnenin
durumunu ekrana yazdran bir yntem olarak kodladk. imdi Zaman
snfna ait bir nesne oluturup bu nesneyi kullanan alabilir bir program
elde edebilmek iin main yntemini yazalm.
main yntemini Zaman snfnn iine yazabiliriz. Ancak Zaman snf kendi
bana dnldnde, altrlabilir bir snf olmak zorunda deildir. Bu
snf, yalnzca zaman bilgisini ifade edebilen nesneler oluturulabilmesi iin
yazlm bir tanmdr. Baka bir deyile, Zaman snfna ait kodlarn iinde
bulmay beklediimiz yntemler yalnzca bu snfa ait davranlar olmaldr.
yleyse srf rneimizi altrabilmek iin Zaman snfnn iine, aslnda
kendi davranlar ile ilgisi olmayan main yntemini yazmak gzel bir
yaklam olmayacaktr. main yntemi altrlabilir bir program elde etmek
zere yazlan bir yntem olduundan ve Javada btn kodlarn mutlaka
bir snfn iine yazlmas zorunlu olduundan, bu yntemi Program adl bir
snfn iine yazmak daha iyidir.
rneklerde main yntemini her zaman Program adl bir snfn iine, dier
btn snflar ise btnlklerini koruyacak, yalnzca kendi zellik ve
davranlarn ierecek ekilde kodlayacam.
Aada Program snfnn kodu grnyor:
class Program {
public static void main(String[] args) {
Zaman zamanNesnesi = new Zaman();
zamanNesnesi.ilerle();
zamanNesnesi.zamaniYaz();
}
}
Kod 5-3. Zaman snfn kullanan Program snf
Program adl snf altrdmzda ekranda aadaki kt oluacaktr:
u anki zaman: 0:0:1
imdi bu ktnn nasl olutuuna bakalm:
Daha nce de belirttiimiz gibi main yntemi programn balang
noktasdr. JVM, adn verdiimiz snfn iinde main yntemini bulur ve
main ynteminin ilk satrndan balayarak program iletir. main
ynteminin ilk satrnda, zamanNesnesi ad ile Zaman snfndan bir nesne
oluturulmaktadr (nesne oluturma ile ilgili ayrntl bilgi daha sonra
verilecektir). Daha sonra bu nesneye ilerle() iletisi gnderilerek Zaman
snfna tanmlanm olan ilerle() davrannn gerekletirilmesi
istenmektedir. ilerle() davrannn gerekletirilmesi ilerle()
ynteminin iletilmesiyle olur ve bu yntem nesnenin saniye niteliinin
deerini 1 arttrmaktadr. Nesne ilk oluturulduunda, niteliklerinin
deerlerinin herbirinin deeri 0 (sfr)dr (Zaman snfnn btn nitelikleri
int temel trndedir ve int temel trnn varsaylan deeri 0 (sfr)dr).
ilerle() yntemi bir kez altnda, saniye niteliinin deeri 1 olur.
main ynteminin bir sonraki satrnda ise zamanNesnesinin zamaniYaz()
yntemi arlmaktadr ve bu yntem, niteliklerin o anki deerlerinden
oluturduu dizgiyi ekrana yazmaktadr.
5.2 Nesne Oluturma
Snfn bir tanm, nesnenin ise o tanma gre oluturulmu fiziksel bir
varlk olduunu tekrar hatrlayalm. Bu ifade zerinde biraz durursak u
sonuca varabiliriz: Nesne oluturulmad srece bellekte fiziksel olarak
oluturulmu bir varlk yoktur; snfn nitelikleri iin bellekten yer
ayrlmamtr. rnein, Zaman snfna ait bir nesne oluturulmad srece
saat, dakika ve saniye nitelikleri yalnzca kat zerinde birer tanmdr.
Nesne oluturulduu andan itibaren ise bu niteliklerin her birisi iin
bellekten 32er ikil uzunluunda (int tr 32 ikil uzunlukta), toplam 32 x
3 = 96 ikil uzunlukta yer ayrlacaktr.
5.2.1 new ileci
Herhangi bir snfa ait bir nesne oluturulabilmesi iin new ileci kullanlr.
new, belirtilen snfa ait bir nesne oluturup bu nesnenin bellekteki adresini
(referansn) dndrr.
Kod 5-3e tekrar bakarsak, main ynteminin ilk satrnda
Zaman zamanNesnesi = new Zaman();
Kod 5-4. Zaman snfna ait zamanNesnesi adl nesnenin oluturulmas - 1
yazmaktadr. Bu satr iki farkl satr halinde tekrar yazalm:
Zaman zamanNesnesi;
zamanNesnesi = new Zaman();
Kod 5-5. Zaman snfna ait zamanNesnesi adl nesnenin oluturulmas - 2
imdi de Javada deiken tanmlama ve ilk deer atama ilemlerinin nasl
yapldn hatrlayalm. rnein bir tamsay deiken tanmlamak ve o
deikene 5 deerini atamak iin;
int sayi;
sayi = 5;
yazabileceimiz gibi, tanm yaptmz satrda atama ilemini yaparak
ksaca
int sayi = 5;
de yazabiliriz.
Bu bilgiyi hatrladktan sonra Kod 5-5e geri dnelim:
lk satrda, Zaman snfna ait bir deiken tanm yaplyor; deikenin tr
Zaman, ad ise zamanNesnesi olarak seilmi. kinci satrda ise
zamanNesnesi adl deikene bir deer atanyor. Atanan deer, new
Zaman() deyiminden dnen deer (zamanNesnesi = new Zaman()). Bu
sonu ise Zaman snfna ait, new ileci ile bellekte oluturulan nesnenin
adresi. Yani bu satr iletildikten sonra zamanNesnesi adl deikenin
iinde, bellekteki bir nesnenin (bu nesne Zaman snfna ait) adresi
bulunuyor.
Kod 5-4te ise, ayn ilem tek satrda yazlm. Ayn satrda hem Zaman
snfna ait nesnenin adresini tutabilecek bir deiken tanm yaplm, hem
de Zaman snfndan bir nesne oluturulup, nesnenin adresi tanmlanan bu
deikenin iine atanm.
5.2.2 Referans Tr
new ileci ile bir nesne oluturulduunu ve bu nesnenin bellekteki adresinin
dndrldn syledik. Dndrlen adres, oluturulan nesneye daha
sonra erimek amacyla referans olarak kullanlacaktr. Bu referans
saklayabilmek iin de bir deikene gereksinim vardr. erisinde referans
(nesne adresi) saklayabilen trden deikenlere referans trden deiken
ya da Nesne Tutama (Object Handle) ad verilir ve varsaylan deer
olarak null deerini alrlar. null, bir nesne tutamann iinde o anda
herhangi bir nesnenin adresi olmadn belirten deerdir.
5.2.3 Yn (Heap), Yt (Stack) ve p Toplayc (Garbage
Collector)
JVMden bahsederken sanal donanmn 4 kesimden olutuunu ve bu
kesimlerden birinin yn (heap), birinin de yt (stack) olduunu
sylemitik. imdi yn ve ytn ne olduunu biraz daha aalm:
JVM, oluturulan deiken ve nesneleri ynetmek zere bilgisayarn
belleini kullanr (32-ikillik JVMnin en fazla 4GB bellek kullanabileceini
belirtmitik). Ancak deikenleri ve nesneleri ynetirken farkl bellek
alanlar ve algoritmalardan faydalanr.
Bir yntem arld zaman, o ynteme ait yerel deikenler ile yntemin
parametreleri, yntemin dn adresi ve dn deeri ile birlikte yt ad
verilen bellek alannda oluturulur. Yntemin almas sona erdii zaman
bu bilgiler yttan atlr (bu bilgilere tekrar eriile