Web Program Lama Rehberi-1

  • November 2019
  • PDF

This document was uploaded by user and they confirmed that they have the permission to share it. If you are author or own the copyright of this book, please report to us by using this DMCA report form. Report DMCA


Overview

Download & View Web Program Lama Rehberi-1 as PDF for free.

More details

  • Words: 7,032
  • Pages: 16
>>

‹çindekiler

CHIP Workshop Klasörü Kesin, biriktirin, kendi arflivinizi oluflturun CHIP WORKSHOP’da BU AY Web Programc›l›¤› Frame’ler hakk›nda merak ettikleriniz

Excel Serisi LISTBOX VE COMBOBOX NESNELER‹NE VER‹LER‹ ALMAK

CHIP Workshop Klasörü’nü ayraçlar›yla birlikte siparifl edebilir ve kendi arflivinizi oluflturabilirsiniz.

Java Serisi JAVA ile Programlama Bölüm 4

Fiyat: 9.000.000

TL

(KDV ve gönderim ücreti dahil)

Siparifl için: http://abone.vogel.com.tr

ÅCD yaz›c› testi Å205 Dolardan bafllayan DVD yaz›c›lar ÅCD Klonlama yöntemleri ÅCD Etiketi haz›rlama ÅAudio, MP3, Foto¤raf CD’si yazma ÅFilm kopyalama ÅYaz›labilir CD’lerin teknik ayr›nt›lar›...

ÅÇekim ÅRötufllama ÅBask› ÅTEST: 45 dijital foto¤raf makinesi ÅSat›n alma dan›flman› ÅBenzersiz Plug-in efektleri ÅTV’nizde foto¤raf gösterisi ÅProfesyonel çekim için foto¤raf kursu ÅPortre, Sualt›, Do¤a, Ürün çekim yöntemleri...

ÖZEL SAYI’lar Bayilerde, www.chip.com.tr, www.hepsiburada.com’da

<<

Web Programc›l›¤›

Frame’ler hakk›nda merak ettikleriniz Web tasar›m›n›n vazgeçilmezlerinden frame’leri yaln›zca kendi amaçlar›n›za hizmet etmeleri için s›k› kontrol alt›nda tutun.

F

rame’ler web sayfalar›nda faydaland›¤›m›z önemli ve bir o kadar da kullan›fll› unsurlardand›r. Baz› durumlarda olmazsa olmazd›rlar. Ayn› pencere içerisinde birden fazla web sayfas›n› gösterebilmenin en kolay yolu frameset kullanmaktan geçer. Ayr›ca çok kompleks kod yazmak gerektiren baz› ifllevleri frameset kullanarak basit bir flekilde çözebilmemiz mümkün olmaktad›r. Bu bak›mdan frame’ler baz› durumlarda web tasar›mc›lar›n s›kça baflvurduklar› yöntemlerdir. Ancak web ziyaretçileri aç›s›ndan durum her zaman öyle olmayabilir. Özellikle geçmifl y›llarda baz› kullan›c›lar›n frame kullan›lan sayfalardan hiç hofllanmad›klar› bilinmektedir. Ne var ki baz› durumlarda frame kullanmak kaç›n›lmaz oluyor. Bu bak›mdan olsa gerek taray›c› üretici firmalar›n ve web tasar›mc›lar›n frame’lerden vazgeçmeye hiç de niyetleri yok. Hatta üstüne üstlük bir de frame’lerin bir türevi olan IFRAME’lerin web standartlar›na ilave edildi¤ini hemen belirtelim. Bu ayki StudioWeb’de web sayfalar›m›zdaki frame’leri nas›l tam kontrolümüz alt›nda tutabilece¤imizi ve nas›l daha kullan›fll› hale getirebilece¤imizi ö¤renece¤iz.

Frame’leri kontrol



JavaScript’in html elementlerini kontrol edebilme meziyetinden frame’ler de nasibini ald›lar. Di¤er tüm HTML elementlerini oldu¤u gibi frame’leri de JavaScript ile kontrol edebiliriz. Böylece sadece HTML sayfalar›m›zdaki elementleri de¤il, bir frameset içerisinde tan›mlanm›fl frame’lerdeki sayfalar›n elementlerini de frameset’teki di¤er bir sayfadan kontrol edebilmemiz söz konusu oluyor. Bu bak›mdan zaten önemli bir ifllevi yerine getiren frame’lerimiz JavaScript sayesinde daha dinamik, etkileflimli ve de kullan›fll› bir hal alabilirler. Daha öncesinde frame’lerin yap›s› hakk›nda biraz bilgi sahibi olal›m isterseniz. Frame’ler ayn› taray›c› penceresi içerisinde birden fazla sayfay› göstermek amac›yla kullan›l›rlar. Pencerede, görünecek her bir sayfa için ayr›lan alana frame ad› verilir. Pencerenizde hangi frame’in hangi alanda hangi web sayfas›n› gösterece¤inin tan›m›n› ise frameset ad› verilen element ile yapar›z. Afla¤›da görülen sayfan›n kodlar›nda bir frameset yer almakta. Frameset’imiz dikey olarak ayr›lm›fl iki adet frame’e sahip. Frame’lerde

görünecek html sayfalar› ise farkl› arka plan rengine sahipler. Bu en temel frameset yap›s›n› oluflturmak için üç adet HTML sayfas› yazmam›z gerekir. Birincisi her iki sayfay› da ekranda gösterecek olan frameset’i kullanacak sayfa (frame.html), di¤er ikisi ise ekran›n solunda ve sa¤›nda iki ayr› frame olarak görünecek olan iki ayr› html sayfas› (sol.html ve sag.html). Bu üç sayfan›n kodlar› ise afla¤›daki gibidir.

sol.html sol

Soldaki sayfa





frame.html





sag.html

frame











sag

Sa¤daki sayfa



<noframes>









Fark ederseniz frameset’i içerisinde bar›nd›ran sayfam›z›n tak›lar› aras›nda hiç bir bilgi yok. Çünkü bu sayfan›n içeri¤i zaten iki farkl› HTML sayfas›n›n bir kombinasyonu

Basit bir frameset yap›s› 104• CHIP Workshop >>

>>

Web Programc›l›¤›

olacak. Frame’lerin sayfada nas›l görünece¤inin tan›m› ise frameset tak›lar›nda yap›l›yor.

Buradaki cols="130,*" ifadesi sayfan›n sütun olarak iki parçaya bölünmesi gerekti¤ini, sol parçan›n 130 piksellik bir geniflli¤e sahip olmas› gerekti¤ini, sayfan›n geri kalan›n› ise sa¤daki sayfan›n kaplamas› gerekti¤ini tan›ml›yor. Pencerenizi yatay olarak iki parçaya bölmek isterseniz

gibi bir frameset tan›m› iflinizi görürdü. tak›lar›n›zda kullanabilece¤iniz çeflitli öznitelikler de mevcuttur. Bunlar frame’ler aras›nda s›n›r koyup koymama gibi çeflitli özellikleri kontrol ederler. Bunlardan baz›lar› flunlard›r: border bordercolor cols frameborder framespacing id

Ayn› flekilde tak›s›n›n da alabilece¤i baz› öznitelikler flunlard›r. bordercolor

ript’in gözüyle görmeye çal›flal›m. E¤er taray›c›lar›n obje yap›s›n› gösteren DOM tablosuna bakacak olursak frame objesinin hiyerarflik olarak frame içinde gösterilen html sayfalar›ndan daha üst pozisyonda oldu¤unu görürüz. Bunun neden böyle oldu¤unu düflünürsek, bir frameset, alt›nda birden fazla html sayfas›n› bar›nd›rabilir gerçe¤iyle frame’lerin sayfalardan daha üst pozisyonda olmalar› mant›kl›. Bizim örne¤imiz de bir frameset ve bunun alt›nda bulunan iki adet sayfadan olufluyor. frame.html sayfas› içerisinde JavaScript’in gözünde canlanan fley afla¤›dakine benzer bir diyagram asl›nda. Dikkat edecek olursan›z JavaScript’in tan›d›¤› fley solda ve sa¤da görünen sayfalar›n html doküman isimleri de¤il frameset içerisinde tan›mland›klar› referans isimleridir. Yani ‘soldaki’ ve ‘sagdaki’ diye adland›r›lan isimleri. Bu diyagramdan anlafl›lmas› gereken ise flu: Frameset (ya da framesetin bulundu¤u sayfa) üst obje iken frame’lerde gösterilen sayfalar alt obje olarak kabul ediliyor. Bir üst obje parent,en üst obje top anahtar kelimeleri ile tan›mlan›rken alt objeler child ya da frameset içinde alm›fl olduklar› referans isimleri ile tan›n›yorlar. Yani frameset örne¤imizdeki üst obje iki adet alt objeye sahip, soldaki ve sagdaki. Bu yap› kullan›larak bir frameset içinde bulunan sayfalara ve ilgili sayfalar›n nesnelerine ulaflarak bu nesnelerin özelliklerini de¤ifltirmemiz mümkün olabilmektedir.

frameborder

Windows Frame

Self

document

ancher

Top

Parent

history

link

location

image

form

button checkbox radio textarea hidden password reset select submit Dom tablosu

text

}

Soldaki sayfa



framespacing id marginheight marginwidth name scrolling src

‹flin buraya kadar olan bölümü s›rf html’di. fiimdi bu frame yap›s›n› bir de JavaSc-

Frame’deki bir sayfadan di¤erini kontrol edin



fiimdi gelelim bir frame içinde bir sayfadan bir di¤erine nas›l ulaflabilece¤imizi ö¤renmeye. Bunun için üç sayfadan oluflan yukar›daki ilk frame’i kullanarak ilginç bir örnek yapaca¤›z. fiimdi sol.html sayfan›z›n kodunu aynen afla¤›da görüldü¤ü gibi güncelleyip kaydedin.



sol.html

Frameset top, parent (frame.html)

sol <script language="javascript"> fonrengi = new Array("red", "blue",

Frame soldaki (sol.html)

Frame sa¤daki (sag.html)

p

<< CHIP Workshop • 105

fiimdi frame.html sayfas›n› web taray›c›n›zda aç›n. Sol frame’deki dü¤meye t›klay›n. E¤er kodlarken bir hata yapmad›ysan›z sa¤ frame’deki sayfan›n arka plan renginin her bas›flta de¤iflti¤ini göreceksiniz. Bu, JavaScript kullanarak frame içindeki bir sayfadan bir di¤erinin arka plan rengini kontrol ediyorsunuz anlam›na geliyor! fiimdi kodumuzu biraz inceleyelim. frame.html sayfas›nda dikkat edilecek tek nokta frameset içerisinde kullan›lan sayfalar›n isimleri (soldaki ve sagdaki). As›l ifllem ise sol.html sayfas›ndaki kodda gerçeklefliyor.

"yellow", "green", "gray", "white", "black") fonrengi = new Array("red", "blue", function renklendir() { parent.sagdaki.document.bgColor= fonrengi[rastgelesayi]

p

"yellow", "green", "gray", "white", "black")

rastgelesayi = Math.floor(7*Math.random())

Frameset içindeki hiyerarflik yap›



p

sat›r› ile 7 adet eleman› olan bir dizi yarat›yoruz. Elemanlar ise standart html renk isimlerinden olufluyor (Tabii ki ‹ngilizce ol-

<<

Web Programc›l›¤›

mak zorundalar). Kullan›c› dü¤meye bast›¤› anda JavaScript renklendir() fonksiyonunu ça¤›r›yor. bu fonksiyonun içerdi¤i koda bir bakal›m flimdi. rastgelesayi = Math.floor(7*Math.random())

Sat›r›n›n yapt›¤› ifl 0 ile 6 aras›nda rasgele bir tamsay› üretip rastgelesayi de¤iflkenin de¤eri olarak kaydetmek. Yani bu de¤iflken alabilece¤i de¤erler sadece 0 ile 6 aras›nda bir tamsay›d›r. Bir sonraki ad›mda ise script’imizin as›l can al›c› noktas› gerçeklefliyor. Script’imiz bu bildiri sayesinde sa¤daki sayfan›n fon rengini de¤ifltiriyor. parent.sagdaki.document.bgColor=

p

fonrengi[rastgelesayi]

Bu bildirideki eflitli¤in sa¤ taraf› fonrengi dizisinin herhangi bir eleman›n› yani bir rengi ça¤›r›r. Diyelim ki rastgele say›m›z 0 olarak üretildi. O zaman eflitli¤in sa¤ taraf› fonrengi[0] de¤erini al›r ki bu da fonrengi dizimizin ilk eleman› olan "red", yani k›rm›z› de¤eri demektir. Konumuz olan frame’leri as›l ilgilendiren olay ise eflitli¤in sol taraf›nda gerçeklefliyor. De¤eri red , yani k›rm›z› olacak fleyi burada bildiriyoruz. ‹ste¤imiz frameset içindeki sagdaki isimli sayfan›n arka plan rengini de¤ifltirmek oldu¤u için, DOM tablosuna göre ilgili nesnenin yol adresini yazarak o nesneye ulafl›yoruz. Script’imiz frame objesinin iki alt objesinden biri oldu¤undan di¤er alt obje olan sagdaki sayfas›na ulaflmak için önce bir üst

objeye ç›kmam›z daha sonra da sagdaki isimli sayfaya ulaflmam›z gerekiyor. DOM modeline göre bir alt objeden (yani frame içindeki bir sayfadan) üst frame objesini parent ya da top anahtar kelimesi ile JavaScript’e ifade edebiliyoruz. Bu ifade bizi bir üst seviyeye ç›karacakt›r. Bundan sonraki ad›m ise bir afla¤› seviyeye yani ulaflmay› amaçlad›¤›m›z sagdaki sayfas›na olacak

Frameset top, parent (frame.html)

Frame soldaki (sol.html)

Frame sa¤daki (sag.html)

parent.sagdaki

Art›k framesetteki di¤er sayfaday›z. Amac›m›z bu sayfan›n arkaplan rengini de¤ifltirmekti. Bunu document objesinin bgColor property’sine de¤er vererek gerçeklefltirece¤iz. Yapaca¤›m›z son fley ise ilgili sayfa objesini ve property’sini adres listemizin devam›na yazmak olacak. parent.sagdaki.document.bgColor

Arka plan rengi yerine sayfan›n baflka bir özelli¤ini de¤ifltirmek isteyebilirsiniz. Bu durumda yapman›z gereken ilgili obje ve ilgili property ya da metodu seçip kullanmak olacak. Diyelim sag.html sayfam›zda form1 isminde bir formun button1 isimli dü¤mesinin üzerindeki yaz›y› de¤ifltirmek isteseydik yazmam›z gereken adres listesi afla¤›daki gibi olacakt›.

Bir frame’den bir di¤erine DOM kullanarak geçebilmek için önce üst (parent) objeye ulaflmak gerekir

‹ç içe iki frameset’te kontrol mekanizmas› ‹lk bölümdeki örne¤imiz en basit frame yap›s›n› kaps›yordu. Ama bazen iç içe frameset’lerden oluflan yap›lar da kullanmak zorunda kalabiliriz. fiimdiki örne¤imiz böyle yap›lar söz konusu oldu¤unda frame’deki sayfalar aras› kontrol mekanizmas›n›n nas›l iflledi¤ini görmemizi sa¤layacak. Bu sefer sa¤ taraftaki sayfam›z da içinde bir frameset yap›s› bar›nd›r›yor olacak. Yine öncelikle bu yap›y› oluflturacak html kodlar›n› görelim. anaframe.html

parent.sagdaki.document.form1.

p

button1.value="merhaba";

anaframe

fiimdi dilerseniz bir de iç içe iki frameset’ten oluflan bir örnekle devam edelim.


p

name="sagdaki"> <noframes> sol2.html sol

Soldaki sayfa



Sol frame’deki dü¤meye her bas›flta sa¤ frame’in arka plan rengi de¤iflmekte







106• CHIP Workshop >>

>>

Web Programc›l›¤›

rastgelesayi = Math.floor(8*Math.random()) parent.sagdaki.ustteki.document.

p

bgColor=fonrengi[rastgelesayi] }

Soldaki sayfa





‹ç içe iki framesetten oluflan bir sayfa

sagframe.html

alt.html











sag frame

Alttaki sayfa



<script language="javascript">

alt





fonrengi = new Array("red", "blue",



"green", "white", "black", "navy","teal", "silver")

p



ust.html

San›r›m buraya kadar her fley anlafl›l›r vaziyette. fiimdi yine JavaScript’in bu yap›y› nas›l gözünde canland›rd›¤›na bir bakal›m. Görüldü¤ü üzere anaframe’in alt objesi, sagframe’in de alt›nda iki adet alt obje var. ust ve alt. Sanki anaframe büyükbaba rolünde iken alt ve ust ise torun rolünde gibi. sagframe anaframe’in alt objesi iken alt ve ust isimli alt objelerinin ise üst objesi rolünde. fiimdi s›ra geldi bu yap›ya JavaScript ile biraz etkileflim katmaya. sol2.html ve alt.html sayfalar›n› afla¤›daki gibi güncelleyip kaydedin.



sol2.html

<noframes>

function renkust() { rastgelesayi = Math.floor(8*Math.random()) parent.ustteki.document.bgColor= } function renksol() { rastgelesayi = Math.floor(8*Math.random()) top.soldaki.document.bgColor = fonrengi[rastgelesayi] }



ust







Alttaki sayfa

sol

<script language="javascript">



Üstteki sayfa



fonrengi = new Array("red", "blue",

p

"green", "white", "black", "navy", "teal","silver")





function renkkendi() { rastgelesayi = Math.floor(8*Math.random())

alt.html

document.bgColor=fonrengi[rastgelesayi]



}





alt

<< CHIP Workshop • 107

function renkust() {

p

fonrengi[rastgelesayi]

p

<<

Web Programc›l›¤›

Frameset top, parent (frame.html)



fiimdi anaframe.html sayfas›n› taray›c›n›zda açarsan›z afla¤›daki gibi bir görüntü ile karfl›laflacaks›n›z. Görülen dü¤melere t›klayarak farkl› sayfalar›n fon rengini nas›l de¤ifltirebildi¤inizi bir gözlemleyin. Taktik tamamen bir önceki örne¤imizin ayn›s›. Sadece bu sefer ilgili sayfalara ulaflmak için biraz daha çaba sarf etmek gerekiyor. Zira bu sefer iç içe iki frameset yap›s› söz konusu. Önce sol2.html sayfas›ndaki script koduna bir göz atal›m. renkkendi() fonksiyonu sadece kendi bulundu¤u sayfan›n rengini de¤ifltiriyor. Çünkü adres listesinde baflka bir sayfaya ulafl›m söz konusu de¤il.

Frame sa¤daki (sag.html)

Frame soldaki (sol.html)

Frame soldaki (sol.html)

Frame soldaki (sol.html)

document.bgColor=fonrengi[rastgelesayi]

renkust() fonksiyonu önce bir üst obje frameset yap›s›na ç›k›yor (anaframe) daha sonra ise onun bir alt› olan objeye ki o da bir frameset (sa¤frame). Sagframe’in referans isminin sagdaki oldu¤una dikkat edin lütfen.

‹ç içe iki framesetten oluflan sayfam›z›n hiyerarflik obje yap›s›

set’teki bir sayfada tan›mlanm›fl JavaScript fonksiyonunu ça¤›r›p kullanacak.

parent.sagdaki



Ulafl›lmak istenen bir sonraki ad›m ise sagframe’in alt objesi olan sayfa (ust.html), referans ismi ise ustteki. parent.sagdaki.ustteki

frame3.html







frame3

son olarak ta bu sayfan›n ilgili objesi ve ona ait olan property’si ekleniyor. parent.sagdaki.ustteki.document.bgColor



fiimdi de alt.html sayfas›ndaki script kodumuzu inceleyelim. ust.html sayfas›na nas›l ulaflabilece¤imizi art›k biliyoruz. Çünkü burada durum tamamen ilk örne¤imizdekinin ayn›s›. parent.ustteki.document.bgColor=

<noframes>



sol3.html sol

<script language="javascript">

p

fonrengi[rastgelesayi]

Peki soldaki sayfaya nas›l ulaflaca¤›z? Siz de tahmin edersiniz ki önce en üst seviye olan anaframe’e kadar ç›k›p oradan soldaki sayfaya inmemiz gerekiyor. ‹flte burada bizi en üst seviyeye ç›karacak olan top anahtar kelimesini kullan›yoruz. Sonra da bir alt objenin referans ismi olan soldaki ismini. top.soldaki.document.bgColor =

p

fonrengi[rastgelesayi]

Frameler aras› JavaScript fonksiyonlar›n›n ortaklafla kullan›m› Bu noktada ö¤renece¤imiz özellik daha çok tecrübeli web programc›lar›n› ilgilendiren bir olay› gerçeklefltiriyor ve çok da önemli bir yöntem. Çünkü baz› durumlarda bir sayfa içinden bir baflka sayfada yaz›l› olan script kodundan faydalanmak ya da baflka bir sayfada tan›mlanm›fl bir fonksiyonu ça¤›r›p kullanmak isteyebiliriz. fiimdiki örne¤imiz frame-

‹ç içe iki framset’ten oluflan bir yap›da bir frame’den bir di¤erinin özelliklerini, mesela arka plan rengini de¤ifltirebilirsiniz 108 • CHIP Workshop >>

>>

Web Programc›l›¤›

onClick="parent.soldaki.p renklendir()">

sol frame’de tan›mlanm›fl bir JavaScript fonksiyonunu sa¤ frame içerisinden ça¤›rarak kullan›yoruz. fonrengi = new Array("red", "blue", p "yellow", "green", "gray", "white", "black")



onClick="parent.soldaki.renklendir()"

function renklendir() { rastgelesayi = Math.floor(7*Math.random()) parent.sagdaki.document.bgColor= fonrengi[rastgelesayi]

p

sag3.html

}

sag



Sa¤daki sayfa







Soldaki sayfa




p

Frameset top, parent (frame.html)

Frame soldaki (sol.html)

frame3.html sayfas›n› çal›flt›rd›¤›n›zda sa¤daki sayfadaki dü¤meye bast›kça yine ayn› sayfan›n arka plan renginin de¤iflti¤ini gözlemleyeceksiniz. ‹lk bak›flta çok önemli bir ifllem de¤ilmifl gibi düflünebilirsiniz. Bir sayfan›n fon rengini yine ayn› sayfadaki bir dü¤meye basarak de¤ifltirmek çok çok önemli bir ifl de¤il elbette, ama burada gerçekleflen as›l olay rengi de¤ifltiren scriptin soldaki sayfada oldu¤u ve sa¤daki sayfan›n bu script’e ait renklendir() fonksiyonunu ça¤›r›p kullanabilmesi! sag3.html sayfas›n›n koduna bakacak olursan›z JavaScript kodu olmad›¤›n› göreceksiniz! Ça¤›rma takti¤imiz afla¤› yukar› ayn› temele dayan›yor. DOM modelini kullanarak ilgili sayfaya oradan da ilgili fonksiyona ulaflmak burada da iflin temeli.

Frame sa¤daki (sag.html)

Burada kulland›¤›m›z teknik sayesinde sayfalar aras›nda dolafl›rken bilgileri toplama, bir baflka sayfaya tafl›ma ya da bir sayfadaki bilgiyi baflka sayfada kullanma imkan›na sahibiz. fiöyle ki bir frameset kullanarak 0 piksel boyutunda, ekranda görünmese bile asl›nda daimi olarak ekranda duran bir frame oluflturabilir ve önemli JavaScript kodlar›n›z› buraya yazabilirsiniz. Di¤er frame’e ise web sitenizi oluflturan içerik sayfalar›n›z› koyabilirsiniz. Bu durumda içerik sayfalar›nda gezdikçe kullan›c›n›n hareketlerinin bilgisini 0 piksellik frame’de bulunan JavaScript de¤iflkenlerinde saklayabilir, diledi¤iniz anda da bu frame’de bulunan de¤iflkenleri okuyarak bu bilgilere ulaflabilirsiniz. Numan Pekgöz [email protected]

» eCHIP StudioWeb+’da bu ay: ???????

Frame soldaki (sol.html)

Frame soldaki (sol.html)

Bir frame alt objesine ulaflabilmek için önce alt objenin parent üst objesine ulaflmam›z gerekir. << CHIP Workshop • 109

Bu ayki uygulamalar›m›z›n çal›flmaya haz›r birer kopyas›n› dergimizin CD’sindeki StudioWeb+ bölümünde bulabilirsiniz. StudioWeb+’›n bu ayki say›s›nda yine frame’lerle ilgili ilginç bir uygulama bulacaks›n›z. JavaScript yard›m›yla sayfalar›n›z› bedava servis veren sunucular›n banner ve reklamlar›n› içeren framelerinden kurtarabilirsiniz

<<

Excel Serisi

LISTBOX VE COMBOBOX NESNELER‹NE VER‹LER‹ ALMAK Excel’de kullan›labilecek birçok kestirme yol vard›r. Birilerinin bu yollara iflaret koymas› gerekir ki, “Excel yolu”ndan gelip geçenler, bu ara sokaklar› da ö¤renebilsin. Soru 1 Merhaba, yaz›lar›n›z› ve sitenizi ilgiyle takip ediyorum. Ben sorular›n cevaplar›n› kendim yapabiliyorum. Yaln›z daha farkl› yöntemlerin olup olmad›¤›n›, aralar›ndaki farklar› ö¤renmek istiyorum. Hangi yöntemi tercih etmeliyiz, bunu aç›klaman›z› istiyorum. Sorum flu: AddItem yöntemiyle UserForm üzerine çizdi¤imiz bir Listbox nesnesine veri ekleyebiliyoruz, bundan baflka daha kolay yöntem var m› varsa yukar›da belirtti¤im gibi aralar›ndaki fark nedir? Hangisini tercih etmeliyiz? (Cafer Aktun)

yöntem daha bulunmaktad›r. Bu da, ListBox’un RowSource özelli¤idir. ‹lk olarak AddItem metodunun nas›l kullan›ld›¤›n› çeflitli yöntemlerle inceleyelim. UserForm1 üzerine bir adet ListBox1 nesnesi ekleyin. (fiekil-1) UserForm1’in Initialize (bafllama) olay›na afla¤›daki kodu yaz›n. Private Sub UserForm_Initialize() ListBox1.AddItem "M. Temel Korkmaz" ListBox1.AddItem "Cemil Gökmen" ListBox1.AddItem "Cafer Ulusoy" ListBox1.AddItem "Hasan Akyüz"

Cevap 1: Öncelikle hemen belirteyim ki, ge-

ListBox1.AddItem "Nevzat Adagide"

nelde ListBox ve ComboBox nesneleri hemen hemen bir çok ifllemde ayn› görevi yüklenir ve ayn› özellikleri kullan›rlar. Benim burada size aktaraca¤›m örnekler sadece ListBox nesnesi için olacakt›r. E¤er uygun özellikleri siz ComboBox nesnesinde bulabilirseniz orada da kullanabilirsiniz. fiimdi sorular›n›za cevap bulmaya çal›flal›m. Sizin de anlad›¤›n›z gibi, asl›nda AddItem metodundan farkl›, s›k kullan›lan bir

ListBox1.AddItem "Mustafa Öztürk"



fiekil-1: UserForm1 nesnesi üzerindeki ListBox1 nesnesi.

ListBox1.AddItem "Mehmet Yetim" End Sub

Run dü¤mesine t›klay›p formu çal›flt›rd›¤›n›zda fiekil-2’deki görüntüyü elde edeceksiniz. Buraya kadar olan yöntemde hemen flunun fark›na vard›k ki, e¤er verilerimizi AddItem metodu ile kod sayfas›na yaz›p listeye ekleyeceksek, bütün verileri tek tek bir defaya mahsus girmemiz gerekecektir. Bu defa, verilerimizi Excel çal›flma sayfas›ndan yine AddItem metodu ile ListBox1 nesnesine ald›ral›m. Çal›flma sayfas›n›n gö-

fiekil-2: ListBox1 nesnesine AddItem metodu ile eklenen veriler.

rüntüsü fiekil-3’deki gibi olmal›. Yukar›da, Initialize olay›na yazd›¤›m›z kodlar› silin ve yerine afla¤›daki kodlar› ekleyin. Private Sub UserForm_Initialize() Dim i As Integer For i = 1 To 9 ListBox1.AddItem Cells(i, 1).Value Next i End Sub

Kodu çal›flt›rd›¤›n›zda fiekil-4’deki görüntü ile karfl›laflacaks›n›z. Bu da istedi¤imiz bir sonuçtur. Art›k ikinci metoda geçmenin zaman› geldi demektir. ListBox’un RowSource Özelli¤ini kullanaca¤›z. Biraz önce Form’a yazd›¤›n›z kodlar› tekrar silin ve bu defa Initialize olay›na afla¤›daki kodu yaz›n. Private Sub UserForm_Initialize() ListBox1.RowSource = "Sayfa1!A1:A9" End Sub

Kodu çal›flt›rd›¤›n›zda elde edece¤iniz görüntü fiekil-4’deki görüntüden farkl› olmayacakt›r. Ben yine de size son örnek olarak RowSource’yi kod kullanmadan nas›l gerçeklefltirebiliriz, bunu göstermek istiyorum. Bu defa yazd›¤›n›z bütün kodlar› silin. Yani UserForm1’in kod sayfas›ndaki Initialize olay› dahil, bütün kodlar› silin. 1) Tasar›m modunda iken, yani VBA penceresinde iken, UserForm1’i aç›n. 2) ListBox1 nesnesini fare ile t›klayarak seçin. 3) Sol tarafta bulunan Properties penceresinden RowSource özelli¤ini seçin. (Nesnelere ait özelliklerin kullan›m›n› detay› ile ö¤renebilmek için elinizde bulunan “Excel ‹le Programlama | Makrolar” adl› Kitab›m›z›n “UserForm” bölümüne bak›n›z.) 4) RowSource özelli¤inin hemen sa¤›ndaki bofl hücreye “Sayfa1!A1:A9” yaz›n. 5) Formu çal›flt›r›n. Formu çal›flt›rd›¤›n›zda hiç kod yazmad›¤›n›z halde A1:A9 hücreleri aras›ndaki verilerin ListBox1 nesnesine atand›¤›n› göreceksiniz. (fiekil-5) 61• CHIP Workshop >>

>>

Excel Serisi

ne geçin. Kategoriler listesinden Genel komutunu t›klay›n. Tamam dü¤mesine t›klay›n. C1 hücresinde 34 rakam›n› göreceksiniz. Bilgisayar›n›z› bir sonraki gün açt›¤›n›zda B1 hücresi 1 gün artacak dolay›s› ile C1 hücresi de bir say› artacakt›r.

PERSONAL.XLS DOSYASI DA NED‹R? Soru 3:Açt›¤›m her Excel çal›flma kitab› mak-

fiekil-3: Sayfa üzerindeki hücrelerde bulunan verileri ListBox’a aktaraca¤›z

Evet, geldik son soruya, hangisini neden tercih edece¤iz. E¤er verilerimiz, sizin de hemen fark edece¤iniz gibi, her biri ayr› ayr› yerlerde kullan›labilecek yöntemler. E¤er listeniz çok uzun ise bu listeyi kod sayfas›na yaz›p Listbox’a aktarmak çok zahmetli olacakt›r. Bu uzun listenizi, hücrelerden aktarmak isterseniz ve For Next döngüsünü kullan›rsan›z ilk etapta bellekten yer ay›rman›z gerekecektir do¤al olarak. Ancak bana göre en uygun yöntem en son gösterdi¤imiz Properties penceresini kullanma yöntemidir. ‹stisnai hallerde yada listenizin sürekli geniflleyece¤ini düflündü¤ünüz zamanlarda ise ListBox1.RowSource=”” özelli¤ini kullanman›z yerinde olur. Yok e¤er az bir veriye sahipseniz ve sayfaya ba¤l› kalmak istemiyorsan›z en uygun yöntem ilk gösterdi¤imiz AddItem yazma yöntemidir.

‹K‹ TAR‹H ARASINDAK‹ FARKI GÜN OLARAK GÖRMEK Soru 2: ‹fle bafllayan bir personelin ilk ifle girifl tarihini A1 hücresine yaz›yorum. Bugünün tarihini de, B1 hücresine yaz›yorum. C1 hücresinde görmek istedi¤im, bu personelin o güne kadar kaç gündür bizim ifl yerimizde çal›flt›¤›. Bunun için C1 hücresine =B1-A1 formülünü yaz›yorum. Hücrede ise istemedim bir sonuçla karfl›lafl›yorum. Bunu Excel mi yapam›yor ben mi? Bir türlü anlayamad›m. (Halil Düflen) Cevap 2: Genelde Excel’in çal›flma tablosu-

fiekil-4: Sayfadaki verileri For Next döngüsünü kullanarak AddItem Metodu ile Listbox’a aktard›k.

nu sadece tablo olarak kullanan arkadafllar›m›z Excel’i kendilerine göre özellefltirmeyi bilmediklerinde bu tür s›k›nt›lar yaflamaktad›rlar. Sizin sordu¤unuz bu gibi sorulara benzer bir çok soru ile karfl›lafl›yorum. Asl›nda yap›lmas› gereken çok basit. Ancak ben sizin sorunuza cevap verirken göz ard› etti¤iniz basit bir fonksiyon daha kullanarak bugünün tarihini B1 hücresine yazmaktan kurtarmaya çal›flaca¤›m. Afla¤›daki ad›mlar› tek tek izlerseniz sonuca ulaflaca¤›z demektir. 1) A1 hücresine ifle girifl tarihi olan 01. 01. 2002 tarihini yaz›n 2) B1 hücresine de =Bugün() formülünü girin. 3) C1 hücresine de =B1-A1 formülünü girin. Sonuç olarak 03.02.1900 de¤eri C1 hücresinde görüntülenecektir. Bu her ne kadar istenilen bir sonuç gibi görünmese de asl›nda istenilen sonucun ta kendisidir. Ancak üzerinde küçük bir operasyon yapaca¤›z. fiimdi C1 hücresini seçin ve B‹Ç‹M>HÜCRELER komutunu t›klay›n. Aç›lan Hücreleri Biçimlendir penceresinden Say› sayfa sekmesi-

ro ile aç›l›yor. Neden? Teflekkürler. (Mehmet Serin) Cevap 3:Nas›l desem bilemiyorum ki. ‹yi desem bir türlü, olmaz, kötü desem baflka türlü. Bu Personal.XLS dosyas›ndan çekti¤imiz nedir? Bu k›sa ve dertli giriflten siz de anlad›n›z ki, bu tür sorunlarla sadece siz karfl›laflm›yorsunuz. fiimdi, siz bir zamanlar bilgisayar›n›zda bir dosya haz›rlarken Makro kaydetmek istediniz. Bu ifllemi yaparken do¤al olarak Makro Kaydet komutunu kulland›n›z. Makronuzu kaydetmek için makro kaydet penceresi aç›lacakt›r. Bu pencerede Makronun Saklanaca¤› Yer kutusundan e¤er Kiflisel Makro Çal›flma Kitab› komutunu seçmifl ve böylelikle kayd›n›z› yapm›flsan›z, bu makro Personal.XLS ad›nda baflka bir çal›flma kitab›na kaydedilecektir. E¤er her defas›nda makro kaydederken Kiflisel Makro Çal›flma Kitab› komutu seçili olursa, makrolar› hep bu dosyaya kaydedecektir (fiekil-7-8). Buraya kadar olan k›s›mda hiçbir mahsur yokmufl gibi görünüyor. Ancak mahsur olan durumu flöyle izah edelim. fiimdi Personal.XLS dosyas› di¤er XLS dosyalar› gibi C:\Belgelerim ya da seçmifl oldu¤unuz baflka bir varsay›lan klasöre kopyalansa ve bu kadarla kalsa problem yoktu. Dosya otomatik olarak XLSTART klasörüne kaydediliyor. fiu an kulland›¤›m makinedeki iflletim sistemi Windows Me, ve XLSTART klasörünün yolu da

Kutu 1 FORMÜLÜ KEND‹S‹ YAZDI A ve B sütunundaki 10'ar hücreye rakamlar girin. C1 hücresine =A1+B1 formülünü yaz›n. Bunu C10'a kadar kopyalay›n. fiimdi A11 ve B11 hücrelerine rakamlar› yaz›n. Halbuki siz C11'e formül girmemifltiniz. De¤il mi? << CHIP Workshop • 62

fiekil-5: RowSource özelli¤ini Properties penceresinden kulland›¤›m›zda verilerin daha tasar›m modunda iken ListBox’a aktar›ld›¤›n› görüyoruz.

<<

Excel Serisi

Kutu 2 =TOPLA(…..) HAKKINDA GEREKL‹ B‹LG‹

bir problemle karfl›laflt›m, sizlerden yard›m bekliyorum. Bir Excel çal›flma sayfas›nda, A1 hücresine 2002, B1 hücresine 1 ve C1 hücresine =TAR‹H(A1;B1;1)

Bir sütunda bulunan bilgilerinizi toplamak istiyorsan›z en basit kullanaca¤›n›z yöntem. =Topla(A1:A100) formülüdür. Hemen akl›m›za gelen küçük bir sorun var. A17 veya A30 gibi hücrelerde say› de¤il de, metin var ise o zaman ne yapaca¤›z? Hiç önemli de¤il. =Topla(A1:A100) yazmaktan flaflmay›n. Bu formül Arada bulunan metin hücrelerini gözard› edecek ve toplam›n içerisine almayacakt›r. (fiekil-6) Oysa ayn› ifllemi A1+A2 gibi yöntemle deneseydiniz #DE⁄ER hatas›n› alacakt›n›z.

yazarak C1 hücresinin biçimini gggg yapt›m ve C1 hücresinde Sal› görüldü. D1 hücresine mesela; =E⁄ER(C1="Sal›";"nöbetçiyim";"nöbetim yok") formülünü girdi¤imde formül beklenen gibi olumlu yönde çal›flm›yor ve sonuç “nöbetim yok” yaz›yor. Ama C1 hücresine do¤rudan Sal› yazd›¤›mda formül olumlu çal›fl›yor ve sonuçta istedi¤im flekilde, “nöbetçiyim” yaz›yor. Bunun sebebi ve çözüm yolu nedir? (Tahsin Sönmez) Cevap 4: Bariz yap›lan bir yanl›fll›k var. Ancak her fley o kadar do¤ru görünüyor ki, ne kadar u¤rafl›rsan›z u¤rafl›n, yanl›fl› bulam›yorsunuz. fiimdi ifllemlerinizi ad›m ad›m hatay› da gösterene kadar birlikte yapal›m. Sorunuzda da bahsetti¤iniz gibi,



için teflekkür etmek istiyorum. Siteniz sayesinde Excel'in gücünü ve yapabileceklerimi keflfettim. ‹lgiyle sitenizi takip ediyorum. fiu an üzerinde çal›flt›¤›m bir programda, flöyle

B1 hücresine 1 C1 hücresine =METNEÇEV‹R

"nöbetçiyim";"nöbetim yok") p

yaz›n. Sonucun fiekil-11’deki gibi oldu¤unu göreceksiniz. C1 hücresindeki de¤er 01.01.2002 olunca do¤al olarak, D1 hücresinde de “nöbetim yok” yazmaktad›r. Takvime bakt›¤›m›zda, 01.01.2002 tarihinin “Sal›” gününe denk geldi¤ini görüyoruz. Dolay›s›yla istedi¤imiz olay, C1 hücresinde de tarih yerine “Sal›” görünmesini istiyoruz. Bunun için C1 hücresini seçip, Biçim / Hücreler komutunu vererek, Say› sayfa sekmesinden ‹ste¤e Uyarlanm›fl komutunu seçerek Tür kutusuna “gggg” yaz›yoruz ki, C1 hücresinde sadece gün k›sm› yaz› ile görünsün. (fiekil-12) ‹fllemleri yap›p Tamam dü¤mesine t›klad›¤›m›zda C1 hücresinde “Sal›” yazd›¤›n› görüyoruz. Buna ra¤men D1 hücresinde halen “nöbetim yok” yazmaktad›r. San›yorum bunun nedenini anlamak art›k daha kolay hale geldi. Yine de ben k›saca izah edeyim. Her ne kadar C1 hücresinde “Sal›” yazm›fl olsa da bunun sadece 01.01.2002 sonucunun bir görüntüsü oldu¤unu biliyoruz. Formüllerimizde as›l olan görüntü de¤il sonuç de¤erdir. D1 hücresinde eflitli¤in sa¤ taraf›ndaki ifade “Sal›”, ancak dikkat ederseniz bunun t›rnak içerisine al›nm›fl oldu¤unu göreceksiniz; yani bir metinsel ifade. Oysa sol taraf›ndaki de¤er C1 yani “Sal›” görüntüsünün as›l olan tarihsel de¤eri 01.01.2002. Do¤al olarak 01.01.2002 <>Sal›”. O halde formülümüzde baz› de¤ifliklikler

p

(TAR‹H(A1;B1;1);"gggg") D1 hücresine =E⁄ER(C1="Sal›";

"nöbetçiyim";"nöbetim yok")

E⁄ER FORMÜLÜ NEDEN ‹fiE YARAMIYOR? Soru 4: Merhaba, öncelikle sizlere siteniz

A1 hücresine 2002

B1 hücresine 1 D1 hücresine =E⁄ER(C1="Sal›";

flöyle (fiekil-9). C:\Windows\Application Data\Microsoft\Excel\Xlstart\Personal.XLS (Win 2000 ve XP sürümlerinde bu yollar farkl› ancak klasör isimleri ayn›d›r.) O an aç›k olan dosyan›z› kaydedip kapatmak istedi¤iniz ve bütün ifllemlerinizi gerçeklefltirdi¤inizde, en son olarak fiekil-10’daki uyar› mesaj›n› al›rs›n›z. Bu mesaj Pernonal.Xls ye ait bir mesajd›r. Evet dedi¤inizde, art›k Excel’iniz her aç›ld›¤›nda bu dosya da birlikte aç›lacakt›r. Buraya kadar anlatt›klar›mdan ç›kan k›sa sonuç flu: “Personal.xls” dosyas› kiflisel mesajlar›n›z› kaydederken oluflan ve XLSTART klasörüne kaydedilen bir dosyad›r. XLSTART klasörüne kaydedilen bütün dosyalar Excel’in çal›flmas› ile birlikte aktif hale gelirler. fiimdi as›l uyar›m›za geçelim.

yapmal›y›z. Ancak bunun için çal›flt›¤›m›z sayfa de¤il, baflka bir sayfaya geçelim. Çünkü çal›flt›¤›m›z sayfada C1 hücresinin biçimini de¤ifltirmifltik. fiimdi yeni sayfam›zda hücrelere afla¤›dakileri yazal›m.

A1 hücresine 2002 C1 hücresine =TAR‹H(A1;B1;1)

fiekil-6: Baz› hücrelerde metin oldu¤u halde hata vermedi¤ini görüyoruz.

fiekil-7: Kiflisel Makro Çal›flma Kitab›n› seçerseniz Personal.XLS dosyas› oluflur.

p

yazal›m. Formülü onaylad›¤›m›zda D1 hücresindeki sonucun “nöbetçiyim” oldu¤unu göreceksiniz. (fiekil-13) Art›k eflitli¤in her iki taraf› da metinsel de¤er içermekte olup, C1 hücresindeki “Sal›” bir görüntü de¤il sonuç ifadesidir. Dolay›s› ile D1

Kutu 3 KEND‹N‹ZE A‹T BAS‹T MENÜ OLUfiTURMAK Excel'de Kendinize ait bir menü oluflturabilirsiniz. Görünüm>Araç Çubuklar›>Özellefltir>Komutlar>Yeni Menü seçne¤ini istedi¤iniz yere tafl›man›z ile menü oluflur, sa¤ mouse ile isim verebilirsiniz. Baflka Excel komutlar›n› bu menünün alt›na sürükleyebilir, bu komutlar› kullanabilirsiniz. Dilerseniz sa¤ mouse ile kendi makronuzu bu menüye atayabilirsiniz. Tekrar Görünüm>Araç Çubuklar›>Özellefltir seçene¤ine geri çekti¤inizde menü kald›r›lm›fl olur.

fiekil-14: Özellefltir penceresini Araç Çubuklar› üzerinde farenin sa¤ tufluna t›klayarak da çal›flt›rabilirsiniz. 63• CHIP Workshop >>

>>

Excel Serisi

fiekil-8: Project penceresinde o an aç›k olan dosya haricinde bir de Personal.XLS dosyas›n›n aç›k oldu¤unu görüyoruz. fiekil-12: C1 hücresinde “Sal›” yazd›¤› halde D1 hücresinde yine arad›¤›m›z sonuç görünmüyor.

fiekil-10: Personal.xls dosyas› otomatik olarak Xlstart klasörüne kaydeder.

Cevap 5: Önizleme penceresi ile Userform ayn› anda aç›k oldu¤unda Excel kilitlenecektir. Bu nedenle Önizleme yapabilmek için önce formu kapatmal›, sonra da önizlemeyi açmal›s›n›z. Form üzerine yerlefltirdi¤iniz bir CommandButton'a afla¤›daki kodu yaz›n›z. Private Sub CommandButton1_Click() Unload UserForm1

kini bana sa¤lad›n›z. Soruma gelince; Bir firma için tamamen amatör duygularla Excel uygulamalar› kullanarak bir siparifl haz›rlama program› yapt›m. Ancak baz› nedenlerden dolay›, di¤er kiflilerin eline geçti¤i takdirde belirli bir süre sonra çal›flamaz hale gelmesini istiyorum. Henüz makro yazmada çok usta olmad›¤›mdan bunu baflaramad›m. Yard›mc› olursan›z sevinirim. E¤er gerekli olursa yapt›¤›m uygulamay› verece¤iniz bir adrese yollayabilirim. fiimdiden teflekkürler (M.Gürcan ‹LGEN)

ActiveWindow.SelectedSheets.PrintPreview

fiekil-9: Personal.xls dosyas› otomatik olarak Xlstart klasörüne kaydeder.

hücresindeki formül do¤rulanacak ve “nöbetçiyim” ifadesi sonuç olarak atanacakt›r.

End Sub

Bu kodda sizin de hemen anlayaca¤›n›z gibi, Önce UserForm kapat›l›yor, sonra da Önizleme penceresi aç›l›yor.

USERFORM VE ÖN‹ZLEME PENCERES‹ Soru 5: Excel’de haz›rlad›¤›m bir programda

SADECE EXCEL KULLANARAK YAPILAN EXCEL PROGRAMINA SÜRE SINIRI KOYMAK Soru 6: Merhabalar, Öncelikle bu siteyi ha-

kullan›c› tamamen UserForm’lar üzerinde çal›flacak. Bir UserForm çal›fl›rken Excel'in herhangi bir sayfas›n› önizleme yapt›rabilir miyim? (Ünal fianver)

z›rlamakta eme¤i geçen herkese teflekkür ederim. Uzun zamandan sonra tekrar beni bilgisayar bafl›na döndürdünüz ve 40 yafl›ndan sonra yeniden bir fleyler üretmenin zev-

Cevap 6: Dosyan›zda VeryHidden olarak gizlenmifl bir sayfa olsun. Bu sayfay› VBA kodu aç›lmad›¤› sürece kimse göremez. Sizin için haz›rlad›¤›m kodda bu sayfay› "Sayfa1" olarak de¤erlendirdim. fiimdi çal›flma kitab›n›z›n bir modülüne afla¤›daki kodu yaz›n. Sub Auto_open() If Worksheets("Sayfa1").Range("A1") =

p

"" Then Worksheets("Sayfa1").Range("A1") = Date Worksheets("Sayfa1").Range("B1") = Date Else Worksheets("Sayfa1").Range("B1") = Date If Worksheets("Sayfa1").Range("B1") - Worksheets("Sayfa1").Range("A1") >=

p p

30 Then MsgBox "Süreniz bitti" End If

fiekil-11: C1 hücresinde arad›¤›m›z tarih belirdi. 01.01.2002

End If End Sub

Benim MsgBox "Süreniz bitti" yazd›¤›m yere siz isterseniz dosyay› kapatan bir kod ya da biri haricinde di¤er sayfalar› silen bir kod yazabilirsiniz. M. Temel Korkmaz

fiekil-13: METNEÇEV‹R ifllevini kulland›¤›n›zda do¤ru sonuca ulaflacaks›n›z << CHIP Workshop • 64

[email protected]

<<

Java Serisi

JAVA ile Programlama Bölüm 4 Geçen dersimizde Java Programlama diline genel bir girifl yaparak bu dilin önemli özelliklerini ve bu dil ile program yazabilmek için gerekli olan ilk ayarlar›n nas›l yap›laca¤›n› görmüfltük. erkese yeniden merhaba! Üç say›d›r yay›mlanmakta olan Java derslerimizin dördüncüsünde tekrar birlikteyiz. Geçti¤imiz üç say› boyunca hep programlaman›n temelini teflkil eden kavramlara de¤indik. Bu kavramlar›n asl›nda sadece Java’da de¤il, tüm programlama dillerinde bulundu¤unu vurgulamak isterim. Bundan sonraki derslerimizde art›k bu genel kavramlar›n yan› s›ra daha özel programlama tekniklerini ö¤renece¤iz. Bu dersimizden itibaren iflleyifl ile ilgili bir de¤ifliklikten bahsetmek istiyorum. Bundan sonra uygulama amaçl› yazaca¤›m›z tüm kodlar› sadece yaz› içerisinde de¤il, online olarak da sizlere sunaca¤›m. Böylece ilk olarak çal›flan program dosyalar›n› indirebilecek ve uygulamalar› daha ayr›nt›l› inceleyebileceksiniz. Kodlar› bulabilece¤iniz adres: http://cs.bilgi.edu.tr/~erman/kodlar/ fleklindedir. Bu dersimizde yine genel kavramlar içerisinde yer alan metodlar› inceleyece¤iz. Baflka dillerde (C, C++ gibi) fonksiyon olarak da isimlendirilen metodlar›n nas›l yarat›ld›klar›n›, nas›l kullan›ld›klar›n› ve ne ifle yarad›klar›n› inceleyece¤iz. Bu dersi okumadan önce önceki üç dersimizi iyice çal›flm›fl, tüm örnekleri tek tek yazm›fl olman›z› ›srarla tavsiye ederim.



H

Geçen hafta verilen uygulaman›n çözümü Dersimize son dersimizde verdi¤imiz uygulaman›n çözümü ile bafllayaca¤›z. Uygulamam›z› tekrar hat›rlatal›m: Uygulama: Kendi bafl›n›za içerisinde isimler saklayan bir dizi yarat›n ve daha sonra bu dizide kullan›c›dan ald›¤›n›z bir ismi arat›n. E¤er isim dizinin içerisinde bulunursa bu ismin indeks numaras›n› ekrana yazd›r›n. Bulunamazsa ismin bulunamad›¤›na dair bir mesaj yazd›r›n. Çözüm:http://cs.bilgi.edu.tr/~erman/ kodlar/Ara.java

Metod kavram› ve Java’da metodlar Daha önce baz› noktalarda metodlara de¤inmifltik. Metod denilen kavram›n, program içerisinde yaz›lm›fl küçük program parçalar› oldu¤unu söyleyebiliriz. Metodlar asl›nda önceden tan›mlanm›fl birtak›m ifllem flekilleridir. Bu flekilde görevleri metodlar alt›nda oluflturarak gerekti¤inde ça¤›rabiliriz. Bunu flöyle bir örnekle hayalimizde canland›ral›m: Yazm›fl oldu¤umuz program›m›z› bir robota benzetelim. Bu robota çeflitli görevler yükleyelim. Bunlardan bir tanesi de “su getir” görevi olsun. Bu görev flu flekilde tan›mlans›n: Mutfaga git Bardaga su doldur

Su dolu bardagi sahibine getir

‹flte siz her su isteme ifllemi için bu üç komutu robota vermek yerine, sadece bir defa “su getir” görevini tan›mlayabilirsiniz. Daha sonra da su istedi¤inizde, sadece bu görevi robota vermeniz, bu üç komutun çal›flt›r›lmas› için yeterli olacakt›r. Sonuçta, Java’da da metodlar bu flekilde birden fazla komutu tek seferde ve istenildi¤i zaman çal›flt›rabilmek amac›yla tasarlan›r. Afla¤›daki örnekte (Metod.java), ekrana sadece Merhaba yazan bir metod gösterilmektedir: Not: Örne¤i http://cs.bilgi.edu.tr/~erman/ kodlar/Mesaj.java dosyas›nda bulabilirsiniz. “Mesaj.java“ örne¤inde de görüldü¤ü gibi “MesajGoster“isimli metod, main metodunun bitti¤i yerde yarat›lm›flt›r. Ancak bu

Mesaj.java örne¤i 15 • CHIP Workshop >>

>>

Java Serisi

metodun da t›pk› main metodu gibi s›n›f›n içerisinde yarat›ld›¤›na dikkat ediniz. Metodun yarat›lmas› s›ras›nda ilk sat›rda public static void MesajGoster() fleklinde metodun ad› ve daha sonra da { }

parantezleri içerisinde bu metodun gerçeklefltirece¤i komutlar yaz›lmaktad›r. Metodun ad›n› yazd›¤›m›z bu ilk sat›ra “metot bildirimi” denilir. Metot bildirimine iliflkin ayr›nt›lar› bilgilerimiz artt›kça tamamlayaca¤›z. Not: Metotlar› isimlendirirken boflluk b›rak›lmaz. (Mesaj Goster geçersiz ancak Mesaj_Goster gecerli bir metot ismidir) Not: Main metodu ve s›n›f kavramlar›na sonraki derslerimizde de¤inece¤iz.

Metotlar›n ça¤r›lmas› fiimdi bu Mesaj.java dosyas›n› çal›flt›rmaya kalkt›¤›m›zda, dosyan›n düzgün bir flekilde çal›flt›¤›n› ancak ekranda hiç bir mesaj yaz›lmad›¤›n› göreceksiniz. Sak›n flafl›rmay›n! Böyle olmas› çok normal. Bir metot yaz›ld›¤› zaman bu onun ayn› zamanda çal›flaca¤› anlam›na gelmez. Metodun çal›flmas› için sizin onu ça¤›rman›z gerekmektedir. Bunu robota “su getir” emrini vermenize benzetebiliriz. Siz bu emri daha önce tan›tm›fl olsan›z bile, emri vermeden robot size su getirmez. Ayn› flekilde yaz›lm›fl bir metodun çal›flmas› için de metodun “program ak›fl›n›n oldu¤u yerde” ça¤r›lm›fl olmas› gerekir. Bir metodu ça¤›rmak için metodun yarat›ld›¤› flekilde ad›n› ve ad›n yan›na da ( ) parantezlerini eklememiz gerekir: MesajGoster();

gibi... O halde örne¤imizde de metodun çal›flmas›n› görmek için main metodu içerisinde MesajGoster isimli metodumuzu ça¤›ral›m: Not: Örne¤i http://cs.bilgi.edu.tr/~erman/ kodlar/Mesaj2.java dosyas›nda bulabilirsiniz. fiimdi ekranda mesaj›n belirdi¤ini göreceksiniz. Bunun nedenini flu flekilde özetleyebiliriz: Program›m›z ilk çal›flt›r›ld›¤›nda her zaman main metodu “otomatik olarak ça¤r›l›r” Daha sonra main metodu içerisinde yaz›lan her sat›rdaki komutlar s›ras›yla çal›flt›r›l›r. Program ak›fl› MesajGoster(); fleklinde yaz›lm›fl olan metot ça¤›rma komutuna geldi¤inde MesajGoster metodunun yaz›ld›¤› yere atlar ve buradaki komutlar› s›ras›yla çal›flt›rarak tekrar main metodunda kald›¤› yerden << CHIP Workshop • 16

Mesaj2.java örne¤i

çal›flmaya devam eder. Tabii ki metot ismi “MesajGoster”den baflka bir isim de olabilir. Sadece buradaki örnekte bir metot yaz›lm›fl ve ad› öyle konulmufltur. Bu ak›fl prensibi her metot için geçerlidir. fiimdi ifllerimizi daha da genellefltirelim ve ekrana sadece Merhaba de¤il de, istedi¤imiz bir mesaj› gönderen bir metot olufltural›m. Asl›nda bu ifli zaten JOptionPane s›n›f›n›n showMessageDialog isimli metodu ile yapabiliyorduk. Ancak bu metodun ad› çok uzun olmakla beraber program içerisinde birden fazla yerde ça¤›rd›¤›m›zda çok fazla yer kaplad›¤›n› görmekteyiz. Bu yüzden ayn› ifli yapan ve ad› sadece “M” olan bir metot yazal›m. Ancak bu metoda her seferinde hangi mesaj› yazaca¤›n› da göndermemiz gerekecektir. Çünkü her seferinde ekrana baflka bir mesaj yaz›lmas›n› isteyebiliriz. ‹flte bu noktada karfl›m›za parametre kavram› ç›kar.

Metotlar›n Parametreler ile Kullan›m› Parametreler yard›m›yla metotlara birtak›m de¤iflkenler göndermemiz mümkündür. Önceki örneklerimizde MesajGoster isimli örnek metodumuzu parametresiz olarak kulland›k. Afla¤›daki örnekte M isimli metot, parametre ile çal›flan bir metot olup, ekrana, kendisine parametre olarak gönderilen mesaj› basmaktad›r. Not: Örne¤i http://cs.bilgi.edu.tr/~erman/kodlar/Mesaj3.java dosyas›nda bulabilirsiniz. Burada dikkat edilirse 6. sat›rda ça¤r›lan M metodu 10. sat›rda parametre ile bildirilmifltir. Metot bildiriminde parametreler me-

Mesaj3.java örne¤i.

todun ( ) parantezleri aras›nda önce tür ad› ve daha sonra da parametre ad› yaz›larak ve birden fazla parametre aras›nda da virgul kullan›larak tan›t›labilir. Yani: public static void Metod_Adi( p parmaetre1, parametre2) { }

fleklinde bildirimi genellemek mümkündür. Örne¤in: public static void M(String mesaj): Sadece String türünde bir parametre alan ve bu parametreyi metot içerisinde “mesaj” ile temsil eden bir metot bildirimi. public static void Metod2(int x, double y): Ad› x olan ve int türünde bir parametre ile ad› y olan ve double türünde bir parametre alan ve kendi ad› da Metod2 olan bir metodun bildirimi. Bu flekilde bildirimi yap›lan bir metodu ça¤›r›rken de metodun ad› ve daha sonra da ( ) parantezleri içerisine bildirimde verilen s›rada ve türlerde de¤erle göndermemiz gerekir. Mesela M isimli örnek metodumuza her seferinde String türünde farkl› mesajlar gönderebiliriz. Gönderilen her bir String de¤eri, metot bildiriminde “mesaj” isimli de¤iflkene kopyalan›r ve metodun içerisinde de bu de¤iflken arac›l›¤›yla ele al›n›r. Mesela bildirimi public static void Islem(int sayi, String mesaj)

fleklinde yap›lm›fl olan bir metodu flu flekillerde ça¤›rabiliriz: Islem(6, “Bugun hava guzel”); Islem(12, “Çok çal›flmak laz›m”); Islem(4, “Bilgi Üniversitesi Bilgisayar Bilimleri”);

Burada yap›lan fley asl›nda metodun ça¤r›lmas› neticesinde gönderilen de¤erler, metod bildirimi ile tan›mlanan de¤iflkenlere s›ras›yla kopyalan›r (ya da atan›r.) Öyle ki; Islem(6, “Bugun hava guzel”);

Metotlar ça¤r›ld›¤›nda program ak›fl› da metodun yaz›ld›¤› yere gider.

fleklinde metodu ça¤›rd›¤›m›zda 6 de¤eri sayi de¤ikenine ve “Bugun hava güzel” de¤eri de mesaj de¤iflkenine atan›r ve metod içinde bu flekilde kullan›l›r. Ancak Islem(“Selam”, 12); gibi bir ça¤r›m geçerli de¤ildir. Islem isimli metodun bildiriminde önce int türünde sonra da String türünde parametre yaz›lm›flt›r. Metodu ça¤›r›rken de ayn› s›raya uymam›z gerekti¤ini unutmayal›m.

<<

Java Serisi

ÖNEML‹ NOT: Özetle, metotlar› bildirirken metodun alaca¤› parametreleri tür ve parametre isimlerini yazarak, metotlar› ça¤›r›rken de parametreler yerine de¤er göndererek ifllem yapmaktay›z. Bu iki ifllemi birbirine kar›flt›rmamal›y›z.

Metotlarda Geri Dönüfl De¤eri Kavram› Yukar›da da anlatt›¤›m gibi, metotlara birtak›m parametreler göndererek baz› ifllemler yapmalar›n› sa¤lar›z. Bu ifllemler kendi içerisinde uygulan›p tamamlanan ifllemler olabilece¤i gibi, sonunda bir sonuç üretilen ifllemler de olabilir. ‹flte sonuçta elde edilen bu de¤erleri kullanabilmemiz için, metodun bu de¤erleri bize geriye göndermesi gerekir. Metotlar›n ifllemlerinin tamamlamas› neticesinde geriye gönderdikleri bu de¤ere “geri dönüfl de¤eri“ denilmektedir. Afla¤›daki örnekte parametre olarak bir çemberin yar›çap de¤erini alan “alanHesapla” isimli metot, çemberin alan›n› hesaplayarak geriye bu de¤eri bize gönderiyor: Not: Örne¤i http://cs.bilgi.edu.tr/~erman/ kodlar/Alan.java dosyas›nda bulabilirsiniz. Örnekte de görüldü¤ü gibi, 9. sat›rda kullan›c›dan istenen yar›çap de¤eri 10. sat›rda metoda parametre olarak gönderilmektedir. Ama asl›nda parametre olarak gönderilmeden hemen önce “Double.parseDouble()” metodu ile bu String türündeki yar›çap de¤eri double türüne dönüfltürülmekte ve dönüflüm sonucu gelen de¤er “alanHesapla” isimli metoda parametre olarak gönderilmektedir. Gönderilen bu parametre, metot bildiriminde belirtilen “yaricap” isimli de¤iflkene aktar›lmaktad›r. NOT: Bu aktar›m neticesinde, gelen parametre art›k metot içerisinde yaricap ismiyle kullan›lacakt›r. E¤er metot, 1'den fazla parametreli bir metot olsayd›, bu durumda gönderilen parametre de¤erleri ayn› s›ra ile, metot bildiriminde tan›mlanan parametre de¤iflkenlerine aktar›lacakt›. Daha sonra “alanHesapla“metodu kendisine gelen bu parametre'nin, “Math“s›n›f›n›n “power“metodu yard›m›yla karesini alarak 3.14 (pi say›s›) ile çarpmakta ve üretilen sonucu da 17. sat›rda oldu¤u gibi alan de¤iflkenine atamaktad›r. NOT: “Math.power“metodu 1. parametre ile kuvveti al›nacak say›y›, 2. parametre ile de bu say›n›n kaç›nc› kuvvetini alaca¤›n› belirler. Geri dönüfl de¤eri olarak da hesaplad›¤› sonucu gönderir.

Alan.java örne¤i.

metodun ça¤r›ld›¤› yere göndermektedir. Bu durumda hesaplanan alan de¤eri, return ifadesi ile metodun ça¤r›ld›¤› 9. sat›ra gönderilmektedir. Buraya geriye gönderilen de¤er de “sonuc“isimli de¤iflkene atanarak tutulmufl olur. E¤er 9. sat›rda sonuc = alanHesapla( Double.parseDouble p (yrcp) );

ifadesi yerine sadece alanHesapla( Double.parseDouble(yrcp) );

fleklinde metodu ça¤›rsayd›k, metot içerisinden alan de¤eri gönderilecek, ancak bu de¤eri tutacak “sonuc” gibi bir de¤iflken olmad›¤› için geriye gelen de¤er bofla gidecekti ve ele al›namayacakt›. Bu örnekte dikkat edilmesi gereken bir di¤er konu da; geri dönüfl de¤eri olan metotlar›n bildirimlerinde void yerine bir tür ad› yaz›lmas› gerekti¤idir. Örne¤imizde geriye gönderilen de¤erin türü “double”türünde bir de¤er oldu¤u için oldu¤u için, 16. sat›rda yap›lan metot bildiriminde metot isiminden hemen önce geri dönüfl de¤erinin türünün yaz›ld›¤›n› görmekteyiz. Fakat önceki örneklerimizde geri dönüfl de¤eri olmayan metotlarda bu k›sma “void”yazm›flt›k.

Dizilerin Metodlara Parametre Olarak Gönderilmesi Daha önce dizilerin ne amaçla yarat›ld›klar›n› ve nas›l kullan›ld›klar›n› görmüfltük. Yaz›m›z›n bu k›sm›nda hem metot kullan›m›n› biraz daha pekifltirmek, hem de diziler üzerinde pratik yapmak amac›yla dizilerin metotlara aktar›lmas›n› inceleyece¤iz. Afla¤›daki örnekte çeflitli isimlerden olu-

Dizilerin geri dönüfl de¤eri olarak kullan›lmas›

return Anahtar Sözcü¤ü Alan.java örne¤inde, 18. sat›rda kullan›lan “return“ifadesi, önündeki de¤iflken de¤erini

flan bir diziyi “alfabetikSirala“ isimli metoda gönderiyoruz. Bu metot kendisine parametre olarak kar›fl›k s›rada isimlerden oluflan bu diziyi alfabetik s›rada yeni bir dizi içerisinde oluflturarak geriye de bu yeni diziyi gönderiyor. Not: Örne¤i http://cs.bilgi.edu.tr/~erman/ kodlar/DiziSirala.java dosyas›nda bulabilirsiniz. Diziler metotlara parametre olarak aktar›l›rken sadece isimlerinin aktar›lmas› yeterlidir. Örne¤imizde 5. sat›rda yarat›lan “liste” isimli dizimiz, 6. sat›rda metot ça¤r›lmas› s›ras›nda, parantez içerisinde sadece ismi yaz›larak “alfabetikSirala“isimli metoda aktar›lmaktad›r. Diziyi parametre olarak alan metot bildiriminde ise, parametre k›sm›nda gelecek olan dizinin türü, [ ] sembolü ve bir parametre ad› yaz›lmas› gerekir. Örne¤imizde yaratt›¤›m›z “alfabetikSirala“ isimli metodun 12. sat›rdaki bildiriminde de, gelecek olan dizi parametresi “dizi“ isimli de¤iflkene aktar›lacakt›r. Ancak bu de¤iflkenin de bir “String“ dizisi de¤iflkeni olarak tan›mland›¤›na dikkat ediniz. “alfabetikSirala“ isimli metoda gelen bu dizi, parametre aktar›m›ndan dolay› art›k metot içerisinde “dizi“ ismiyle kullan›lacakt›r. “System“ s›n›f›n›n “arrayCopy“ isimli metodu, 1. parametre ile ald›¤› bir dizinin, 2. parametre ile ald›¤› indeksinden itibaren, 3. parametre ile ald›¤› dizinin, 4. parametre ile ald›¤› indeksine, 5. parametre ile ald›¤› say›da eleman› kopyalar. Bu metot yard›m›yla, 14. sat›rda oldu¤u gibi metot içerisinde “dizi“ ismiyle tutulan orijinal dizimizin tüm elemanlar›, “sirali_dizi“ ismiyle yaratt›¤›m›z diziye kopyalanmaktad›r. “Arrays“ isimli s›n›f›n “sort“ isimli metodu, kendisine parametre olarak verilen bir diziyi s›ralamaktad›r. Biz de örne¤imizde bu metodu kullanarak “sirali_dizi“ içerisinde bir kopyas›n› ald›¤›m›z dizi isimli dizimizi s›ralamaktay›z.

DiziSirala.java örne¤i.

Bir diziyi geri dönüfl de¤eri olarak gönderirken benzer flekilde “return“ anahtar sözcü¤ü önünde dizinin isminin yaz›lmas› yeterlidir. Ancak dikkat edilmesi gereken önemli nokta geriye gelen diziyi tutacak de¤iflkenin de bir dizi de¤iflkeni olmas› gerekti¤idir. Örne¤imizde 16. sat›rda yaz›lan “return“ ifadesi ile yeni s›ral› dizimizi 6 sat›rda metodu ça¤›rd›¤›m›z yere geri dönüfl de¤eri olarak göndermekteyiz. 6. sat›ra gelen bu yeni dizi “gelen17• CHIP Workshop >>

>>

Java Serisi

Dizi“ isimli dizi de¤iflkenine aktar›lmaktad›r. Örnekte 19. sat›rda yazm›fl oldu¤umuz “diziGörüntüle” isimli metod kendisine 1. parametre ile gönderilen bir dizinin 2. parametre ile gönderilen bafll›¤› kullanarak içeri¤ini görüntülemektedir. Bu metot yard›m›yla orijinal ve s›ralanm›fl dizilerimizin içeriklerini de görüntülemekteyiz. Bu örnekler sayesinde metot ve dizi kullan›m›na iliflkin teknikleri daha iyi anlayaca¤›n›z› umuyorum. Yaz› içerisinde verilen örnekleri mutlaka sat›r sat›r yazman›z› öneririm. Böylece hiç fark›nda olmadan Java'da birçok fleyin pratik hale geldi¤ini göreceksiniz. fiimdi dizilere iliflkin son bir örnekle metot ve dizilerin birlikte kullan›m›n› toparlayal›m. Not: Örne¤i http://cs.bilgi.edu.tr/~erman/ kodlar/HistogramSinifi.java dosyas›nda bulabilirsiniz. Örne¤imizde 5. sat›rda “JOptionPane“ isimli s›n›f›n “showInputDialog“ isimli metodu, geri dönüfl de¤eri olarak kullan›c›n›n girece¤i String bir de¤er göndermektedir ve bu de¤er de “Integer“ s›n›f›n›n “parseInt“ isimli metodu içerisine parametre olarak verilerek integer bir say›ya dönüfltürülür. Dönüfltürülen bu say› da “uzunluk“ isimli de¤iflkene atan›r. Daha sonra 7. sat›rda ”liste“ ismiyle yarat›lan dizimiz de, bu uzunluk de¤eri kadar olacakt›r. Ama dikkat ederseniz bu sefer dizi yaratma ifllemi bizim yazd›¤›m›z “diziYarat“ isimli metod içerisinde yap›lmaktad›r. 13. sat›rda tan›mlanan “diziYarat“ isimli metot kendisine parametre olarak verilen uzunlukta bir String dizisi yarat›r. Daha sonra 16. sat›rda yaz›lan for döngüsü ile bu dizinin elemanlar›n› kullan›c›dan alarak diziye yerlefltirir. Bu ifllemi 17. sat›rda oldu¤u gibi, for döngüsünün her i ad›m›nda, kullan›c›dan istedi¤i girifl de¤erini dizinin i. eleman›na atayarak yapmaktad›r. Daha sonra 19. sat›rda yarat›lan ve içerisine isimler yerlefltirilen dizimiz “Arrays“ isimli s›n›f›n “sort“ isimli

HistogramSinifi.java örne¤i. << CHIP Workshop • 18

Histogram örne¤i ekranlar›

metodu ile s›ralanmaktad›r. En son olarak da 20. sat›rda, yarat›lan bu dizi “return“ ifadesi ile metodun ça¤r›ld›¤› 7. sat›ra gönderilir. Bu gönderme neticesinde de yarat›lan ve s›ralan bu dizi, liste isimli dizi de¤iflkenine atanm›fl olur. 8. sat›rda, “Histogram“ isimli metot çal›flt›r›lmaktad›r. Bu metot kendisine parametre olarak verilen bir dizinin her eleman›n›n kendisini ve bu eleman›n karakter uzunlu¤u kadar * simgesini ekrana basar. Metot bu ifllemi yapmadan önce ilk olarak “JTextArea” denilen özel bir Java nesnesi yaratmaktad›r. Bu nesne 25. sat›rda yarat›lmaktad›r. Java nesneleri ve nesnelerin yarat›lmas› konusunu sonraki dersimizde ayr›nt›l› olarak görece¤iz. 26. sat›rda “cikis“ isimli String de¤iflkeni de en son ekranda belirecek mesaj› tutmak amac›yla oluflturulmaktad›r. Ancak bu de¤iflken ilk yarat›ld›¤›nda içi bofl bir flekilde oluflturulmaktad›r. 28. sat›rdaki for döngüsü ile dizinin her eleman› tek tek ele al›nacakt›r. 29. sat›rda, i. ad›mdaki eleman ve bir tab boflluk karakteri “cikis” de¤iflkenine yaz›l›r. 30. sat›rdaki for döngüsü, i. ad›mda ele al›nan dizi eleman›n›n her karakteri için ad›m ad›m * iflaretini yine cikis isimli de¤iflkene yazar. En son olarak da 33. sat›rda “cikis“ isimli de¤iflkenin sonuna “\n“ fleklide alt sat›ra geçme karakteri eklenerek 28. sat›rdaki döngünün bir sonraki ad›m›na geçer ve ayn› ifllemler di¤er dizi elemanlar› için de tekrarlan›r. Tüm dizi elemanlar› bu flekilde ele al›nd›ktan sonra, 35. sat›rda oldu¤u gibi “cikisEkrani“ isimli nesnenin içerisinde yer alacak yaz›, yine bu nesneye ait öntan›ml› “setText“ isimli metot yard›m›yla “cikis“ isimli de¤iflkenin içerisinde saklanan de¤ere

set edilir. (Java'da nesnelerin öntan›ml› metotlar›n› sonraki derslerimizde inceleyece¤iz.) En son olarak da metot 36. sat›rda oldu¤u flekilde bu nesneyi showMessageDialog isimli metoda vererek ekranda görünmesini sa¤lar. Dikkat ederseniz daha önceki örneklerimizde JOptionPane.showMessageDialog isimli metoda hep bir mesaj yaz›yorduk. Ama bu sefer metoda, “ ” içerisinde yaz›lm›fl bir String mesaj› yerine, bir nesne gönderdik ve tüm mesaj›m›z› da bu nesne içerisinde yazd›k. Bu derste en son yapt›¤›m›z örnek size biraz kar›fl›k gelse de sak›n ümitsizli¤e kap›lmay›n›z. Bu örnek,sadece bol bol metot ve dizi kullan›m›n›n irdelenmesi amac›yla verilmifltir. Genel yap›y› anlamaya çal›flman›z bile size bir çok fleyi ö¤retecektir. Bol bol örnek içeren bu dersimizi burada sonland›r›yoruz. Verilen örnekleri mutlaka kendi bafl›n›za yazmaya ve iyice anlayana kadar bir sonraki örne¤e geçmemeye özen gösteriniz. Ayr›ca örneklerin haz›r olarak yaz›l› bulundu¤u tüm dosyalar› http://cs.bilgi.edu.tr/~erman/kodlar/ adresinde bulabilece¤inizi tekrar hat›rlat›r›m. Önümüzdeki dersimizde art›k Java programlama dili içerisinde nesne kavram›n›n ne oldu¤una ve s›n›flar›n tasar›m›na ayr›nt›l› olarak de¤inece¤iz. Böylece daha profesyonel programlar yazabilmek ad›na bir ad›m daha ilerleyece¤iz. Tekrar görüflene dek sizlere baflar›lar diliyorum. Kodunuz aç›k olsun... Sevgi ve sayg›lar›mla, Erman Aykaç ‹stanbul Bilgi Üniversitesi Bilgisayar Bilimleri Bölümü

Related Documents