Java Metodlari

Java Metodlari

                                                      Java Metodlari

Problemleri cozmek icin kullanilan bilgisayar programlari cok buyuk boyutlardadir. Buyuk programlari yonetmenin ve gelistirmenin en uygun yolu ise programlari daha kucuk parcalara  bolmektir. Bu parcalara modul denir.

Java 'da Program Modulleri
Java dilinde 2 modul bulunmaktadir.Bunlar sinif lar ve metod lardir. Java programlari java sinif  kutuphanelerinde hazir olarak bulunan metodlar ve siniflar kullanilarak, onlardan yeni siniflar tureterek ve yeni sinif ve metodlar olusturularak bunlarin birlestirilmesiyle yazilir. Java API,  Java sinif kut uphanelerinin olusturdugu bir arayuzdur.Bu arayüz ( sinif kutuphaneleri ) ,programcinin isini genel matematiksel hesaplamalar, string islemleri, karakter islemleri, giris cikis ve hata kontrolleri gibi bircok islemlerde kullanilmak uzere cok sayida sinif ve metod
icererek kolaylastirir. Java diline ait hazir sinif kutuphaneleri JDK( Java Developer's Kit )'in bir parcasidir.


Programci programda kullanilmak uzere ozel isler icin tasarlanmis metodlar yazabilir. Bir metodun kullanilabilmesi için çagrilmasi(method call) gerekir. Bu çagirma islemi sirasinda  gerekli parametreler(arguments) de belirtilir.

 

Math Sinifi Metodlari
Math sinifi metodlari genel matematik islemlerinde kullanilir. Metodlar isimleri va parantez icindeki parametreleri ile birlikte cagrilir. Butun math sinifi  metodlari Math sinif ismi, "." ve metod ismi ile birlikte kullanilir. Metotlar genelde asagidaki sekilde çagrilirlar :


[Class_name] Method_name ([Arg_1],[Arg_2..]); [Class_name] : bu kisim çagrilacak olan  metotun ait oldugu sinifi belirtir. Her zaman gerekmez. Ancak Math sinifinin bir metodu  çagrilacaksa "Math." Ifadesi mutlaka metot isminde önce bulunmalidir.
Metod parametreleri sabitler, degiskenler veya ifadeler( expressions ) olabilir.

 

                                               

Metodlar
Metodlar programcinin programi moduler hale getirmesini saglar. Metod icinde tanimlanmis  butun degiskenler yerel degiskenler ( local variables ) dir. Sadece icinde tanimlandigi metod
icerisinde taninirlar. Metodlarin bir cogu parametrelere sahiptir. Bu parametreler metodlar  arasindaki iletisimi saglamak icin kullanilir. Genellikle yerel degiskenlerdir  Programi metodlar ile modularize etmenin bir kac yolu vardir. Divide-conquer yaklasimi  program gelistirirken programa daha cok hakim olunmasini saglar. Diger bir yol ise software  reusability' dir ( Var olan metodlar yeni bir program uretmek icin bloklar halinde olusturulur).Iyi  bir yontem ile isimlendirme ve tanimlamalar yapilir, ayrica ozel bir program kodu yazmak yerine  program standart metodlardan olusturulur. Ucuncu bir nokta ise tekrar eden program kodundan  sakinmaktir. Paketlenmis kod(modularize edilmis, kucuk parcalara ayrilmis) programin degisik  yerlerinden cagrilir ve boylece tekrar yazilmasindan kurturulur.

 

Metod Tanimlamalari
Su ana kadar sinif kutuphanelerinde var olan metodlar ve siniflar kullanildi. Simdi yeni  bir metodun nasil tasarlandigini gorecegiz.  Bir applet tasarlayalim ve square metodunu kullanarak 1' den 10'a kadar olan sayilarin  karesini bulsun ve paint metodunu kullanarak yazdirsin.

 

                                             

 

Square metodu paint icerisindeki 12. satirdaki call ( square(x)) deyimi ile cagrilir. Square metodu parametre olarak x'i alir ve y'ye x' in degerini kopyalar. Metod y*y' yi hesaplar ve sonuc
geri doner ve ekrana yazdirilir. Bu islem on kez tekrarlanir. 17. satirdaki metod tanimlamasi metodun paramatre olarak integer bir sayi kabul ettigini  gosterir. Metod isminden onceki Int kelimesi ile metodun integer bir sonuc dondurecegi anlasilir.Javadaki butun metodlarin tanimlamasi bir sinif taniminin icerisinde yapilmalidir.  Metod tanimlamasinin formati asagidaki gibidir.

Dondurulecek-degerin-tipi metod-ismi( parametre -listesi )
{
Tanimlamalar ve ifadeler
}

Metod ismi herhangi gecerli bir ifade olabilir. Dondurulecek degerin tipi void ise bu ifade  Metodun birsey döndürmeyecegini gösterir.Parametre listesinde birden fazla parametre var ise "," ile birbirinden ayrilirlar. Parametere listesindeki parametreler metod cagrildigi zaman kabul  edilir.Parametrelerin tanimlamalari acik bir sekilde yapilmalidir. "{" ve "}" arasinda yazilan  hersey metodun govdesini olusturur.Blok olarakta isimlendirilir.Degiskenler blok icerisinde  tanimlanmalidir. Bir metod baska bir metod icinde tanimlanamaz. Metodun cagrildigi yere  donmesi uc sekilde olur. Eger metod bir deger dondurmuyor ise geri donus metodun sonuna  gelinmesiyle "}" veya asagidaki satirin uygulanmasi ile olur ; return eger bir deger geri  donduruyorsa return expression ifadesi kullanilir. Ikinci ornegimizde programci tarafindan  tanimlanmis, uc tane sayidan en buyugu bulan maximum isimli metod kullanilmistir. Sayilar  metin kutularindan giris olarak alinir, enter ile birlikte maximum metodu cagrilir, en buyuk olan  sayi bulunup return ile geri donulur ve diger metin kutusuna en buyuk sayi yazdirilir.

                                                                   

Rastgele Sayi Türetme
Bu bolumde birden fazla metod iceren bir oyun programi olusturacagiz. Programda daha  once gosterilen yapilar kullanilacaktir.  double randomValue = Math.random( );  Random metodu 0.0 ile 1.0 arasinda rastgele double bir sayi uretir.Bu aradaki sayilarin her biri  esit sansa sahiptir.  Random metodunu gostermek icin bir program yazacagiz. Bu programda 20 kere zar atisini
simule edecegiz ve uretilen sayilari satirlara sirasi ile yazdiracagiz. Program 1 ile 6 arasinda  rastgele sayi uretir. Programi asagida gorebilirsiniz.  Random ile birlikte " * " operatoru kullanilir.

0 ile 5 arasinda rastgele sayi uretmek icin yukaridaki ifade kullanilir. Buna scalling denir. 6 scalling faktorudur.Program icerisinde her uretilen sayiya 1 eklenmistir.

 

                                                                           

Otomatik Degiskenler
Su ana kadar degisken isimleri için tanimlayicilar kullanilmistir.(identifiers) degiskenlerin bir  çok özellkileri vardir : ad, tip, boyut, deger, süre(duration), menzil (scope). Bunlardan ilk dördü açiktir. Süre ise degiskene ilk referans verilip bellekte yer açilmasindan, bellekten silinineye  kadar geçen süredir. Bu süre her degisken için farklidir. Bazilari çok kisa, bazilari ise tüm
program boyunca hayatta kalirlar. Menzil ise program içinden degiskene referans edilebilen  yerlerdir. Bazilarinin menzili modül seviyesinde kalirken bazilari da tüm programdan referans edilebilir. Metotlarin yerel degiskenleri ve parametrelerde yaratilan degiskenleri "otomatik süreli degiskenler" olarak adlandirilir. Bu degiskenler islenme sirasi kendilerine geldiginde yaratilirlar
ve metottan çikana kadar var olurlar. Metottan çikinca da gene otomatik olarak imha edilirler. Otomatik süreli degiskenler kisaca "Otomatik Degiskenler" diye adlandirilir. Java ayrica static
süreli degiskenlere de izin vermektedir. Bu tür degiskenler bellege yüklendikten programin bitmesine kadar yasarlar. Statik süreli metotlarin adlari ise ilk bellege yüklendigi andan program
bitimine kadar varolur. Ancak bu her zaman kullanilabilecekleri anlamina gelmez, çünkü menzil ve süre (duration) kisitlamalari hala geçerlidir.

 

Scope Kurallari

Bir degiskene ait scope o degiskene program icerisinden ulasilabildigimiz sahalardir. Mesela bir yerel degiskene tanimlandigi blok disindan ulasilamaz. O degiskene sadece
tanimlandigi blok icerisinden referans edilebilir. Bir degisken icin class scope ve block scope' una bakilir.  Metodlar ve ornek degiskenler icin class scope soz konusudur. Class scope sinifa ait ' { '  ile baslar ve ' } ' ile son bulur. Class scope sinif icerisindeki metodlar icerisinden diger metod ve  ornek degiskenlere ulasilabilmesini saglar.  Blok icerisindeki degiskenler block scope 'a sahiptir. Block scope tanimlanmasi ile baslar ve blok sonu olan ' } ' ile biter.

 

Recursion ( tekrarlama )
Daha once uzerinde durdugumuz programlar genel olarak metodlardan olusuyor ve birbirlerini bir duzen icerisinde hiyerarsik olarak cagiriyorlardi. Bir recursive metod ise kendi icerisinden
kendisini cagiran metod olarak tanimlanabilir. Basit ornekleri mevcuttur. Asagidaki programimiz ( FactorialTest.java ) recursion bir programdir. 0' dan 10' a kadar olan sayilarin faktoriyellerini hesaplar ve yazdirir. Recursive bir metod olan factorial once sayinin 1' e esit veya 1' den kucuk olup olmadigini kontrol eder, eger bu sart gerceklesirse factorial 1 degerini dondurur. Eger bu sart dogru degil ise bu satir islenir ;
return number*factorial ( number - 1 ); yani factorial metodu icerisinden yine factorial metodu (number-1) parametresi yollanarak cagrilir

 

                                                      

Recursion ve Iterasyon
Bu bolumde recursion ve iteration metodlari karsilastirilacak ve programcinin hangi sebeple hangi metodu nerede sececegi uzerinde durulacaktir.. Ikiside kontrol yapisina dayanir. Iteration tekrarlamali yapilari kullanir(for veya do/while). Recursion secmeli bir yapi kullanir( if, if /else veya switch gibi ) Hepsi tekrarlamayi icerir. Ikiside yok etmek icin bir test icerir. Iteration dongu sarti gerceklestiginde recursion ise temel sart gerceklestiginde yok olur. Eger iteration testinde dongu sarti gerceklesmezse sonsuz dongu  meydana gelir.  Recursion' un eksileri coktur.Surekli olarak mekanizmayi calistirir ve siksik overhead  ( ustune yazma ) yapar. Bu da onun islemci zamani ve bellek acisindan pahali olmasi anlamina gelir. Iteration normal olarak metod icinde meydana gelir overhead ve extra bellek ayrimi ihmal edilir.
Recursive olarak cozulebilecek her problem iterative olarakta cozulebilir. Recursive iteration ' a gore daha cok hatalari kontrol eder ve anlasilmasi ve yonetilmesi daha kolaydir.

 

Method Overloading
Java metodlarin isimlendirilmesi sirasinda ayni isimlerin kullanilmasina izin verir. Metodlar  isimleri aynioldugu halde parametreleri farkli olabilir. Bu method overloading olarak tanimlanir.
Bir method overloading meydana geldigi zaman java compiler'i metodlari sirasi ile test eder  parametrelerin tiplerini, sayilarini ve sirasini karsilastirir ve uygun olan metod cagrilir. Method overloading ayni isi yapan fakat farkli veri tiplerini kullanan metodlar icin tercih edilir.  Overloading methodlar programlari daha anlasilir ve okunur hale getirir.  Asagida gordugunuz program ( MethodOverload.java ) overloaded metodlar olan square'lari  kullanir. Metodlardan biri parametre olarak integer bir sayi alirken digeri double sayi almaktadir.

 

                                                     

Program icerisindeki square metodlari;

int square ( int x ) &n bsp;
double square ( double y )

 

Applet Siniflarinin Metodlari
Su ana kadar bircok applet yazildi ama bir apletin uygulanmasi sirasinda otomatic olarak  cagrilan applet sinifi uzerinde durulmadi. Asagidaki figurde applet sinifina ait metodlar, ne
zaman cagrildiklari ve amaclari listelenmistir.

                                              

Henüz Yorum Yapılmamış, İlk Yorumu Siz Yapın

Yorum Yollayın