Четверг, 16.05.2024, 13:18

Azerbaycan HacKer birliyi

Приветствую Вас Гость

Поиск
Друзья сайта
Статистика

Онлайн всего: 1
Гостей: 1
Пользователей: 0
Меню сайта
Календарь новостей
«  Сентябрь 2008  »
ПнВтСрЧтПтСбВс
1234567
891011121314
15161718192021
22232425262728
2930
Наш опрос
HacKer olmaq isteyirmisiniz?
Всего ответов: 195
Мини-чат
500
Главная » 2008 » Сентябрь » 10 » Java script haqqda
Java script haqqda
23:44
Юimdi daha deрiюik bir durumu inceleyelim. Eрer dizi iзinde olmayan bir eleman ararsak binarySearch metodu nasэl bir sonuз dцndьrecektir. Bu amaзla aюaрэdaki kodu hazэrladэm. Цrnek iзinde, iki adet negatif ve iki adet pozitif tamsayэyэ dizi iзerisinde arattэm. Bu elemanlarэn hiзbirisin dizinin bir elemanэ deрil. Sonuзlara baktэрэmda dizide olmayan pozifit elemanlar iзin -12 deрerini, dizide olmayan negatif elemanlar iзin ise -1 deрerini elde ettim. Pozifit ve negatif elemanlar iзin binarySerach metodunun dцndьrdьрь deрerler farklэ olmasэna raрmen ikise negatiftir. Dolayэsэyla negait olmalarэ dizinin elemanэ olmadэklarэnэ gцstermektedir.

import java.util.*;

 

public class DiziBul

{

public static **** main(String[] args)

{

int[] dizi={8,6,3,56,12,3,1,0,23,-1,-5};

for(int i=0;i<dizi.length;++i)

{

[i]System.out.println((i+1)+". eleman="+dizi);

}

System.out.println("");

Arrays.sort(dizi);

int sonuc1=Arrays.binarySearch(dizi,156);

System.out.println("Arama sonucu "+sonuc1);

int sonuc2=Arrays.binarySearch(dizi,-8);

System.out.println("Arama sonucu "+sonuc2);

int sonuc3=Arrays.binarySearch(dizi,1000);

System.out.println("Arama sonucu "+sonuc3);

int sonuc4=Arrays.binarySearch(dizi,-4568);

System.out.println("Arama sonucu "+sonuc4);

}

 

 

Demekki binarySearch metodunu bir if koюulu ile kullanarak aranan elemanэn dizi iзerisinde olup olmadэрэnэ belirleyebiliriz.

import java.util.*;

 

public class DiziBul

{

public static **** main(String[] args)

{

int[] dizi={8,6,3,56,12,3,1,0,23,-1,-5};

for(int i=0;i<dizi.length;++i)

{

[i]System.out.println((i+1)+". eleman="+dizi);

}

System.out.println("");

Arrays.sort(dizi);

int sonuc1=Arrays.binarySearch(dizi,156);

if(sonuc1<0)

{

System.out.println("BULUNAMADI");

}

else

{

System.out.println("BULUNDU");

}

}

 

 

Arrays sэnэfэ ile ilgili daha pek зok metod vardэ ve bunlarэda incelemek istiyordum. Ama hava aydэnlanmaya ve iзmeyi unuttuрum kahvemde ice-cafe olmaya baюlamэюtэ. Sanэrэm ara vermek iзin en uygun zaman. Biraz dinlenmeyi hakkettik. Эlerleyen kahve molalarэnda kahvemi iзmeyi unutmayacaрэm.

 

Gцrьldьрь gibi yapэcэ metodlarэmэzda dikkat зeken ilk цzellik, sэnэf adэ ile aynэ olmalarэ. Ancak burada karюэlaюtэрэm ilginз bir durum oldu. Yapэcэ metodlarэn nasэl kullanэldэрэ ile uрraюэrken, varsayэlan yapэlandэrэcэyэ tanэmlamadэрэm aюaрэdaki цrneрi yazdэm.

public class OverloadDeneme

{

private int deger1;

private int deger2;

 

public OverloadDeneme(int d1,int d2)

{

deger1=d1;

deger2=d2;

}

public OverloadDeneme(int d1)

{

deger1=d1;

}

public **** Yaz()

{

System.out.println("Deger1:"+deger1+" Deger2:"+deger2);

}

} public class Prog

{

public static **** main(String[] args)

{

OverloadDeneme Nesne=new OverloadDeneme();

Nesne.Yaz();

}

}

Prog isimli sэnэfэmэ derlemeye зalэюtэрэmda aюaрэdaki hata mesajэ ile karюэlaюtэm.

 

 

Bir anda ne olmuюtuda, new yapэlandэrэcэsэ ile basit bir nesne yaratma iюlemi hata ile sonuзlanmэюtэ. Heyecanla ve birazda tedirgin bir havayla, kaynaklarэmэ hэzlэ hэzlэ karэюtэrmaya baюladэm. Sonrada Java’nэn зok gьzel inceliklerinden birini farkettim. Normalde Java, varsayэlan yapэcэ metodlarэ bir sэnэf iзin yazmassak bizim iзin bir tane hazэrlэyordu. Ancak цzelleюtirilmiю (parametreler alan) yapэcэ metodlar tanэmladэрэmэzda, bizim tam anlamэyla konunun hakimi olduрumuzu dьюьnerek bu varsayэlan yapэlandэrэcэyэ otomatik olarak tanэmlama desteрini bir anda зekiveriyordu. Tabir yerinde ise bizimle bu konuda muhatap bile olmuyordu. Dolayэsэyla varsayэlan yapэcэ metoduda bizim tanэmlamamэz gerekiyordu. Bu gьzel incelikten yola зэkarak uygulamayэ dьzelltim ve hata mesajэnэ ortadan kaldэrdэm.

C# dilini црrenmeye ilk baюladэрэm zamanlar ьniversite yэllarэnda црrettikleri C++ dilindeki bьyьk kьзьk harf ayrэmэnda her zamanki gibi ilk baюlarda зok unutkanlэklar yaюamэю ve hep hatalar yapmэюtэm. Ama юimdi Java’da gцrdьmkь, unutkanlэрa asla yer yok hatta tam anlamэyla dile hakim olmak esas.

Neyse yapэlandэrэcэlarэn bu цzellikleri ve iюlevlerinden sonra, acaba kendi sэnэfэmэz iзin цzel bir yapэlandэrэcэya gerek var mэ diye dьюьnmeye baюladэm. Bu sэnэfa ait nesneler, tablo satэrlarэnэ gцsterecek olduрundan, yapэlandэrэclara parametre atayэp, alan deрerleri ile oynamak son derece anlamsэz geldi. Bu nedenle bir yapэlandэrэcэ yazmaktan vazgeзtim. Ha bu durumda, hiз bir yapэlandэrэcэ yazmadэрэm iзin, bu iюin kontrolьnь Java’ya bэrakmэю oldum. O benim iзin varsayэlan bir yapэlandэrэcэ oluюturacak ve bцylece ben uygulamamda new anahtar kelimesi ile rahatзa nesneler yaratabileceрim. Diрer yandan, sэnэfэmэz iзine bazэ metodlarda eklenebilir. Цrneрin, tьm alan deрerlerini dьzenlediрimizi dьюьnelim. Bunun iзin bir metod yazabiliriz. Hatta aynэ isimli metodu her bir alan iзin ayrэ ayrэ uygula****** alanlarэn bireysel olarak dьzenlenmesinede imkan saрlayabiliriz diye dьюьnьrken bu iюler iзin metodlar(set ile baюlatan metodlar) yazdэрэmэ farkettim. Ancak toplu bir dьzenleme iзin gьzel bir metod yazэlabilirdi. Bцylece sэnэfa aюaрэdaki metodu eklemeye karar verdim. Bu metod sэnэf iзindeki alanlarэn deрerlerini deрiюtirecek.

public **** Degistir(String ad,String soyad,String telefon)

{

fAd=ad;

fSoyad=soyad;

fTelefon=telefon;

} Bu metodun tek yaptэрэ, parametre olarak aldэрэ String veri tьrьndeki deрerleri alarak, sэnэf iзindeki alan deрerlerine atamak. Sanэyorumki sэnэfэmэn yapэsэ temel olarak bu юekilde olucak. Artэk bu sэnэfэ ve bu sэnэfa ait nesneleri kullanacaрэm bir цrnek uygulamaya ihtiyacэm var. Bu uygulamada elbette bir sэnэf юeklinde tasarlanacak ve mutlaka main metodu olucak. Main metodu, bir sэnэf iзin baюlangэз noktasэ niteliрindedir. Ama tabiki tahmin edeceрiniz gibi uygulama iзerisinde sadece bir sэnэfэn main metodu olmalэdэr. Bu bilgiler эюэрэnda, aюaрэdaki цrnek sэnэfэ hazэrladэm.

public class Uygulama

{

public static **** main(String[] args)

{

SinifKisi k1=new SinifKisi();

k1.setAd("Burak Selim");

k1.setSoyad("SENYURT");

k1.setTelefon("0000000");

System.out.println(k1.getAd()+" "+k1.getSoyad()+" "+k1.getTelefon());

k1.Degistir("Burak S.","SENYURT","444 44 44");

System.out.println(k1.getAd()+" "+k1.getSoyad()+" "+k1.getTelefon());

}

} Bu kьзьk uygulamada, SinifKisi sэnэfэndan k1 isimli bir nesne tanэmlэyor ve alanlarэnэn deрerlerini deрiюtirebiliyoruz. Uygulamayэ зalэюtэrdэрэmэzda aюaрэdaki sonucu elde ederiz.

 

 

Bu noktada merak ettiрim, sэnэf iзindeki цzel alanlara eriюmek istediрimde nasэl bir sonuз alacaрэmdэ. O nedenle kodlara aюaрэdaki satэrlarэ ekledim. Burada aзэk bir юekilde цzel alanlara, tanэmlamэю olduрum nesne vasэtasэyla eriюmeye зalэюэyordum. Bakalэm derleyici ne yapacak.

System.out.println(k1.fAd+" "+k1.fSoyad+" "+k1.fTelefon); Sonuзta uygulamayэ derlediрimde aюaрэdaki hata mesajlarэ ile karюэlaюtэm. Kapsьlleme gerзekleюmiюti. Alanlarэ dэюarэdaki sэnэflardan soyutlamэюtэm. Onlara sadece benim tanэmladэрэm metodlar vasэtasэyla eriюilebilecekti.

 

 

 

Aslэnda sэnэflar ile ilgili daha pek зok kavram vardэ kaynaklarэmda. Цrneрin, static metodlar. Bu metodlar her nesne yцnelimli programlama dilinin цnemli bir parзasэ bence. Bir static metoda ne zaman ihtiyaз duyabilirdik?

Static metodlar, tanэmlandэklarэ sэnэfэn цrneklendirilmiю nesnesine ihtiyaз duymadan зalэюabilen metodlardэr. Dolayэsэyla bцyle bir metodu kullanabilmek iзin, bu metodun tanэmlandэрэ sэnэfa ait bir nesne yaratmak zorunda deрiliz. Doрrudan bu metodun tanэmlandэрэ sэnэfa ve pakete nokta notasyonlarэnэ uygula****** bu static metodu зalэюtэrabiliriz. Bцylece sistem kaynaklarэnэ цzellikle gereksiz nesnelerle doldurmamэю oluruz. Цrneрin matematiksel iюlemlerin yapэldэрэ metodlarэ gцz цnьne alalэm. Bir sayэ dizisindeki elemanlarэ sэralayan bir metod varsayalэm. Bu metod mutlaka ve illaki bir paket iзindeki sэnэf iзinde yer alacaktэr. Зьnkь nesneye dayalэ programlama dillerinde herюey nesne modeli ьzerine kuruludur ve tьm ьyeler sэnэflar iзerisinde, sэnэflarda belli paketler iзerisinde yer alэr. Paketler ile ilgilide pek зok kaynak buldum. Aзэkзasэ bir kahve molasэndada onlar ile ilgileneceрim. Java’daki paketlerin yerleюimi aslэnda kitaplardaki anlatэmlar tarzэyla biraz gцzьmь korkuttu diyebilirim. Ne demiюtik bir sayэ disizini sэralayan metodumuz olsun. Bu metodun tek yapacaрэ iю, parametre olarak aldэрэ dizinin elemanlarэna bir sэrlama algoritmasэ uygulamak ve sonucu bir dizi olarak dцndьrmektir. Bu iюi yapmasэ iзin bir nesneyi gцrevlendirmek sistem kaynaklarэnda sadece but sэralama metodu iзin yer aзmak anlamэna gelir. Oysaki metodumuzu static olarak tanэmlarsak, nesne yaratmaya gerek kalmayэz. Metodumuzu ise sэnэf.metod notasyonu ile rahatlэkla kullanabiliriz.

Bu dьюьnceler эюэрэnda acaba kьзьk uygulamama bu tip bir static metodu nasэl uygulayabilirim diye dьюьnmeye baюladэm. Aklэma bir metod geldi. Цrneрin SinifKisi isimli sэnэfa ait nesneleri ekrana dьzgьn bir юekilde yazdэracak bir metodum olsaydэ. Aslэnda bu metodu SinifKisi iзine yerleюtiripte зaрэrabilirim. Ama amaз static metodlarэ anlamak olduрu iзin baюka bir sэnэf iзine almaya karar verdim. Эюte o sэnэfэn kodlarэ.

public class Yazmaca

{

static **** KisiYaz(SinifKisi k)

{

System.out.println("Kiюi adэ "+k.getAd());

System.out.println("Kiюi soyadэ "+k.getSoyad());

System.out.println("Kiюi telefonu "+k.getTelefon());

}

} Bir static metod tanэmlama iзin yapэlacak tek iю metodun tanэmlanmasэna static anahtar kelimesini eklemek. Buradaki metod parametre olarak SinifKisi sэnэfэ tipinden bir nesne цrneрi alэyor. Юimdi Uygulama.java dosyamэn kodlarэnэ aюaрэdaki юekilde yeniledim.

public class Uygulama

{

public static **** main(String[] args)

{

SinifKisi k1=new SinifKisi();

k1.setAd("Burak Selim");

k1.setSoyad("SENYURT");

k1.setTelefon("444 44 44");

 

SinifKisi k2=new SinifKisi();

k2.setAd("Sefer");

k2.setSoyad("ALGAN");

k2.setTelefon("555 55 55");

 

SinifKisi k3=new SinifKisi();

k3.setAd("Ahmet Faruk");

k3.setSoyad("NACAROGLU");

k3.setTelefon("666 66 66");

 

SinifKisi[] kisiler=new SinifKisi[3];

kisiler[0]=k1;

kisiler[1]=k2;

kisiler[2]=k3;

 

foreach(SinifKisi kisi in kisiler)

{

Yazmac****isiYaz(kisi);

}

}

} Uygulamadaki kodlar bir anda gцzьme зok gьzel gцrьndь. Ьз tane SinifKisi nesnesi yaratэp alanlarэn deрerlerini deрiюtirmiю ve bцlyece, ьз farklэ SinifKisi nesnesine sahip olmuюtum. Diрer yandan bu nesneleri SinifKisi tipinden bir diziye aktarmэю ve bu dizi iзindeki her bir elemanэ bir foreach dцngьsьnde ele alarak, static KisiYaz metodunu зaрэrmэюtэm. Herюey зok gьzel olacak gibi gцrьnьyordu. Ama цyle olmadэ. Bam diye bir hata aldэm.

 

 

Uzunca bir sьre dьюьndьm. Acaba yanlэю bir yazэmmэ uyguladэm diye. Ama sonra dцkьmanlarэmda bu iюi araюtэrmaya baюladэm. Kimse c# taki gibi bir foreach dцngьsьnden bahsetmiyordu. Acaba bцyle bir dцngь ifadesi yokmuydu? Ta taaaa.. Hakkatten aradэm taradэm dцkьmanlarda bunu bulamadэm. Belki baюka bir юekli vardэ. Bu amaзla elimdeki e-book lardan O’Reilly basэmэ 6000 sayfalэk java dцkьmanэna baktэm. Buradada foreach gibi bir dцngьden bahsedilmiyordu. Sadece For dцngьlerini bulabildim. Arayэюэm bittikten sonra, madem цyle olmuyor bende normal bir for dцngьsь kullanэrэm dedim ve kodlarэ aюaрэdaki gibi deрiюtirdim.

public class Uygulama

{

public static **** main(String[] args)

{

SinifKisi k1=new SinifKisi();

k1.setAd("Burak Selim");

k1.setSoyad("SENYURT");

k1.setTelefon("444 44 44");

 

SinifKisi k2=new SinifKisi();

k2.setAd("Sefer");

k2.setSoyad("ALGAN");

k2.setTelefon("555 55 55");

 

SinifKisi k3=new SinifKisi();

k3.setAd("Ahmet Faruk");

k3.setSoyad("NACAROGLU");

k3.setTelefon("666 66 66");

 

SinifKisi[] kisiler=new SinifKisi[3];

kisiler[0]=k1;

kisiler[1]=k2;

kisiler[2]=k3;

 

for(int i=0;i<=2;++i)

{

Yazmac****isiYaz(kisiler[i]);

}

}

} Юimdi oldu iюte. Uygulamayэ зalэюtэrdэрэmda aюaрэdaki sonucu elde ettim. Static metodum olan KisiYaz’a doрrudan sэnэf ismi ьzerinden eriюmeyi baюarabilmiюtim.

 

 

 

Sэnэflar ile ilgili iюlenecek daha pek зok kavram vardэ aslэnda. Sэnэflar arasэ kalэtэm, зok biзimlilik gibi. Ama kahvemde tьkenmiюti. Bir sьre dinlenmeye ve kaynaklarэmэ okuyarak yeni bilgiler edinmeye karar verdim. Kim bilir bir sonraki kahve molamda, hangi rьzgarlara kapэlacak, hangi memleketlere liman aзэcaktэm. En azэndan artэk sэnэflarэn Java’da nasэl yazэldэklarэnэ biliyordum. Metodlarэn, цzel alanlarэn, static metodlarэn, yapэlandэrэcэlarэn...Ama katedilecek daha зok yol vardэ. Aslэnda gцnlьmden geзen, bu uygulamda gerзekten veritabanэna baрlanэp bir tablodan alanlarэ alabilmekti. Fakat yolum зok uzun ve sabretmek lazэm. Java’da veritabanlarэnэn iюlenmesini зok ama зok merak etmekle birlikte цnьmde bilmem gereken, Paket kavramэ, applet’ler, gui’ler gibi pek зok konu var. Hadi rast gele diyelim.[/quote]
 
Sagolsun turk qardaslarimiz!
Просмотров: 1041 | Добавил: Tenha_oglan | Рейтинг: 0.0/0 |
Всего комментариев: 0
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]