You are on page 1of 13

Web Programc›l›¤›

<<
MySQL
Web sitenizde veritaban› olarak hala MySQL kullanm›yor
musunuz? Bir numaral› aç›k kaynak veritaban› sunucusuna geçifl
yapman›n zaman› geldi.Frame’lerin kullan›fll› bir türevi olan
iframe’lerle web sitenize kullan›fll› özellikler katabilirsiniz.

Websitemde MySQL kullanmak için ne yapmal›y›m?

V
eritaban›ndan faydalanacak web uygulamalar›n›z için seçe-
bilece¤iniz farkl› veritaban› programlar› olsa da en genifl Web sitenizde MySQL veritaban›ndan faydalanmak için hosting hiz-
kullan›ml› profesyonel program›n MySQL oldu¤u aflikar. meti veren sunucuya MySQL’in yüklü olmas› gerekir. Mesela bir hos-
Özellikle Windows sunucular›nda kullan›m› basit oldu¤u için ama- ting hizmetinden faydalanmay› düflünüyorsan›z alaca¤›n›z pakette
tör programc›lar taraf›ndan tercih edilen MS Access temelde bir ma- MySQL yer almal›d›r.
saüstü veritaban› program› olup ayn› anda ifllem yapma konusunda E¤er web aplikasyonlar›n›z› kendi makinenizde yaz›p test etmek
ciddi s›k›nt›lar› bulunmakta. Bu bak›mdan ticari ve profesyonel web istiyorsan›z bu durumda kendi makinenize de MySQL’i yüklemeniz
sitelerinizde MS Access yerine daha iyi performansa sahip daha gü- gerekir.
venilir bir veritaban› program›na ihtiyac›n›z olacakt›r. Sahip oldu¤u
performansa göre düflük lisans ücreti ve aç›k-kaynak olmas› MySQL’i makineme nas›l yüklerim?
MySQL’i bu alanda çoktan bir web standart› yapt› bile. MySQL’in kurulumu ve yönetimi, yaz›l›m›n versiyonuna ve çal›flt›¤›-
n›z iflletim sistemine göre de¤ifliklik gösterebilir. MySQL’in kullan›-
m› biraz kompleks olsa da performans› için buna de¤ecektir. Burada
3.23 sürümünün Windows’a kurulumunu örnek olarak verece¤iz.
» Veritaban› nedir? Dileyenler www.mysql.com/downloads/index.html adresinden

Web için veritaban›n›n önemi


Veritabanlar› (database’ler), benzer verilerin düzenli bir flekilde
saklanabilmesine olanak sa¤layan yaz›l›mlard›r. Veritabanlar›, yeni
veri ekleme, silme ya da arama yapma gibi saklanan verilerin yö-
netilebilmesine de olanak tan›rlar. Böylece verilerinizin orijinal ha-
lini tek bir kaynakta bulundurup, ihtiyac›n›z olacak tüm dökümleri
bu kaynaktan oluflturursunuz.
Veritaban› olarak kullanabilece¤iniz yaz›l›mlar bafll›ca iki k›sma
ayr›labilirler. Bunlardan birincisi bir önceki bölümde de uygulad›¤›-
m›z üzere verileri saklamak için metin tabanl› ASCII (flat-file data-
base) dosyalar›ndan faydalanmak. Bu tür metinsel dosyalarda ve-
rileri birbirinden ay›rmak amac›yla ay›raç (delimiter) ad› verilen
özel karakter ya da karakter gruplar›ndan faydalan›l›r. Bu tarz dos-
yalar küçük çapl› veritabanlar› oluflturmakta kullan›labilir ancak bu
dosyalarla kompleks veritabanlar› ifllemlerini yapmak mümkün
de¤ildir.
Di¤er veritaban› yaz›l›mlar› ise ‹liflkili Veritabanlar› (relational
databases) olarak adland›r›lan ve sadece veri saklama ve yönetme
amac›yla gelifltirilmifl profesyonel yaz›l›mlard›r. Piyasada birbirin-
den farkl› özelliklere, farkl› performanslara ve tabi ki farkl› fiyatlara
sahip bir çok veritaban› program› mevcuttur. Bunlardan en bili-
nenleri MS Access, MS SQL Server, MySQL ve Oracle olarak sayabili-
riz.
Veritabanlar›n›n web aç›s›ndan önemine de¤inecek olursak, di-
namik web içeriklerinin ve bu yönde en etkin uygulamalar›n teme-
lini veritabanlar›n›n oluflturdu¤unu rahatl›kla söyleyebiliriz. Web
uygulamalar› denince en önde gelen olgulardan biri ‹çerik Yöneti-
mi’dir (Content Management). Günümüzde en iyi haz›rlanm›fl web
uygulamas›n›n içerik yönetimini site yöneticisine en fazla b›rakabi-
len uygulama oldu¤unu söyleyebiliriz. Tek bir kaynak dosyada bu-
lunan veriye an›nda ulafl›labilmesi ve elde edilen bilginin farkl› or-
tamlarda kullan›labilmesini amaçlayan uygulamalar›n tümü
ancak ve ancak veritaban› kullanmakla mümkündür.

116• CHIP Workshop >>


>> Web Programc›l›¤›

içinde tamsay› cimsinden urunNo ad›yla ve metin cinsinden urun-


MySQL’in sistemlerine uygun di- Tanim ad›yla birer alan (sütun) oluflturaca¤›z.
ledikleri bir sürümünü indirebilir-
ler. C:\>cd mysql\bin
3 MySQL’in ZIP’li kurulum dosya- C:\mysql\bin>mysqladmin create katalog
s›n› bir ZUP program›yla aç›n ve
içeri¤ini bilgisayar›n›zda herhan- C:\mysql\bin>mysql
gi geçici bir klasöre yerlefltirin.
3 Bu klasörde oluflan Setup.exe fiu an MySQL prompt’u içindeyiz. Art›k MySQL sunucumuza di-
dosyas›n› çal›flt›r›n. MySQL’i kur- rekt komutlar gönderebiliriz.
mak istedi¤iniz klasörü seçin
(Mesela C:\mysql dizinine). mysql> show databases;
3 Kurulum sihirbaz› tercihleriniz do¤rultusunda MySQL’i bilgisaya- Sistemdeki veritabanlar›n› göster. Bunlardan mysql isimli olan›
r›n›za kuracakt›r.
3 C:\mysql\bin klasörü içindeki winmysqladmin.exe dosyas›n› ça-
l›flt›rd›¤›n›zda MySQL’in grafiksel arayüzlü yöneticisi aç›lacakt›r.
MySQL yöneticisi (WinMySQLadmin) bir kereye mahsus olmak üze-
re kullan›c› ad› ve flifre girmenizi isteyecek. Bundan sonra MySQL su-
nucunuz hem çal›flacak hem de sisteminize servis olarak eklenecek
ve ekran›n›z›n sa¤ alt köflesine trafik lambas› simgesi gelecek.
3 Bu simgenin üzerine sa¤ t›klan›p Show me seçildi¤inde WinMySQ-
Ladmin penceresi görünecektir.
3 Sa¤ alt köfledeki trafik lambas› yeflil yand›¤› sürece sisteminizdeki kurulum aflamas›nda oluflan program›m›z›n kendi veritaban› olup
MySQL veritaban› sunucusu hizmette demektir. E¤er de¤ilse simge- bu ismi kendi oluflturaca¤›m›z veritabanlar›nda kullanamay›z.
nin üzerine sa¤ t›klay›n, Win NT üzerine gelin ve Start Service’i seçin.
Art›k MySQL’i sisteminize kurmufl oldunuz demektir. Bundan mysql>use katalog
sonra MySQL ile baz› denemeler yapmaya bafllayabiliriz.
MySQLadmin’i veya MySQL-Front ya da phpMyAdmin gibi harici
yaz›l›mlar› kullanarak veritaban›n›zda temel ifllemleri gerçeklefltire-
bilirsiniz. Biz bu ay öncelikle direkt olarak komut konsolu yard›m›yla
veritaban› oluflturmay› görece¤iz. Komut sat›r›yla mesela (katalog
isimli) yeni bir veritaban› ve bu veritaban› içinde (urunler isimli) ye-
ni bir tablo oluflturmak için afla¤›daki kodlar› kullanabiliriz. Tablo

katalog isimli yeni bir veritaban› oluflturduk

Sistemdeki veritabanlar›ndan katalog isimli olan›n› kullan.

mysql>create table urunler(urunNo int, urunTanim text);


Query OK, 0 rows affected (0.12 sec)

Katalog içine urunler isimli bir tablo olufltur. Tablomuzun iki ala-
n› olsun: tamsay› veri cinsinden urunNo ve tekst veri cinsinden
urunTanim.

<< CHIP Workshop • 117


Web Programc›l›¤›
<<

Dilerseniz show tables ile var olan tablolar› görebilir, explain urunler ile
tablonuzun ayr›nt›lar›n› görüntüleyebilirsiniz

dizininde oluflacak katalog.sql isimli dosyaya kaydedilecektir. Sql


uzant›l› dosya sadece veritaban›n›zdaki verileri de¤il veritaban›n›n
yap›s›n› da kopyalar. Böylece ihtiyaç duyulan zamanlarda bu dosya
kullan›larak veritaban›m›z›n ayn›s› yeniden oluflturulabilir.
Biraz önce oluflturdu¤umuz veritaban›m›z›n kaynak dosyas›n›n
içeri¤i fluna benzer olacakt›r.

Katalog.sql
# MySQL dump 8.16
#
exit ile MySQL prompt’untdan ç›kabilirsiniz # Host: localhost Database: katalog
#--------------------------------------------------------
# Server version 3.23.43-nt

#
# Table structure for table 'urunler'
#

CREATE TABLE urunler (urunNo int(11) default NULL, p


urunTanim text) TYPE=MyISAM;

#
# Dumping data for table 'urunler'
MySQL’e direkt olarak komut göndermek için SQL (Structured #
Query Language) kullan›l›r. fiimdilik bu kadar MySQL denemesi ye-
terli. Web programc›lar› s›kl›kla veritaban› ifllemlerini ya bizzat Kaynak dosyadan veritaban› oluflturma
programlad›klar› ya da bu amaçla haz›rlanan sunucu tarafl› aplikas- Hiç umulmasa da sunucudaki veritaban›n›z›n bafl›na bir ifl gelirse,
yonlar› ile gerçeklefltirirler. phpMyAdmin bu tarz uygulamalardan ya da veritaban›n›z›n ayn›s›n› farkl› bir ortamda da oluflturmak is-
birisi olup web tabanl› grafiksel arayüzü ile MySQL veritaban› ifllem- terseniz yedeklenme s›ras›nda oluflan kaynak dosyas›n› kullanabilir-
lerini gerçeklefltirmede çok daha fazla kolayl›k sa¤lar. Önümüzdeki siniz. Bu durumda yapman›z gereken, önce yeni veritaban›m›z›
say›larda phpMyAdmin program›n› sistemimize nas›l kuraca¤›m›z› oluflturmak
görece¤iz. MySQL’e dönersek, MySQL’in kullan›m› ve kontrolü ile il-
gili daha detayl› bilgiyi MySQL’in dokümantasyonunda bulabilirsi- mysql> create database katalog2;
niz. MySQL ile ilgili bölümü kapamadan önce önemli bir uygulama-
dan da bahsetmeden geçmeyelim.

Veritaban› yedekleme
Oluflturmufl oldu¤unuz veritabanlar› sistemde kay›tl›d›r. Baz› du-
rumlarda bu kay›tlardan yedek al›nmas› gerekebilir. Bu durumda
MySQL’e, dilemifl oldu¤unuz veritaban›n›n kopyas›n› metin tabanl›
bir dosyaya almas›n› söyleyebilirsiniz.

C:\mysql\bin> mysqldump katalog > katalog.sql

Bu durumda katalog isimli veritaban›n›z›n içeri¤i C:\mysql\bin


118• CHIP Workshop >>


>> Web Programc›l›¤›

Daha sonra da kaynak dosyadan yedeklenmifl veritaban› içeri¤i- önemlisi ise güvenlik ile ilgili husustur. Aç›k kaynak yaz›l›mlar›n kod-
mizi yeni veritaban›m›za eklemek. lar› ortada oldu¤undan program›n çal›flt›¤› anda ne gibi ifllerle mefl-
gul oldu¤u da yaz›l›m gelifltiriciler için aflikard›r. Bu yüzden Alman
C:\mysql\bin> mysql katalog2 < katalog.sql Savunma Bakanl›¤› ‹nternet üzerinden görüflme yapt›¤› iflletim sis-
temini güvenli olmad›¤› gerekçesiyle Microsoft Windows’tan Unix’e
alm›flt› hat›rlarsan›z.
Apache web sunucusunun güvenlik aç›s›ndan bir baflka avantaj›
ise Microsoft sunucular›na göre daha az sald›r›ya maruz kalmas›
olarak gösterilebilir. Bir aralar hatta web Microsoft sunucular›n biz-
zat Microsoft için aç›k bir arka kap›s›n›n bulundu¤u, bu sunucular›n
daha fazla sald›r›ya maruz kalmas›ndan dolay› sigorta flirketlerinin
daha fazla prim istedi¤i gündeme gelmiflti. Öyle ya da böyle özellik-
le Unix üzerinde çal›flan Apache sunucular daha fazla tercih edil-
mekte oldu¤unu söyleyebiliriz. Ekim 2003’te yap›lan bir araflt›rma
‹nternet üzerindeki sunucular›n % 64’ünün Apache oldu¤unu ortaya
ç›kard›.

Dilerseniz yeni veritaban›m›z katalog2’nin ilk veritaban›m›z ka- Neden “Apache”?


talog’un ayn›s› oldu¤unu inceleyebilirsiniz. Bir aplikasyonun en Bafllang›çta Apache isminin “A patchy server” yani sabit bir kod üze-
önemli parças›n›n sahip oldu¤u bilgi oldu¤unu düflünürsek, san›r›m rine eklenen yamalardan oluflan bir sunucu oldu¤undan bu flekilde
veritaban› yedekleme ve yedeklenmifl dosyadan yeni veritaban› adland›r›ld›¤› söyleniyordu ama Apache.org, program›n dayan›kl›l›-
oluflturman›n ne derece hayati önem tafl›d›¤›n› tahmin edersiniz. ¤›n› öne ç›kararak Apache yerlileri kabilesine atfen bir sayg› ifadesi
olarak bu ismi tercih etti¤ini söylüyor. Ne diyelim? Bizim için sak›n-
cas› yok.

Bilgisayar›n›z› bir web sunucuya dönüfltürün


Apache web sunucunun kurulumu
Sadece HTML ve JavaScript, DHTML veya Flash gibi istemci tarafl›
uygulamalar› kulland›¤›n›z web sayfalar›n›z› kendi bilgisayar›n›zda
gelifltirip kontrol etmenizde, haz›r olduklar›nda ise sunucunuza
transfer etmenizde hiç bir zorluk yok. Fakat e¤er ASP, JSP veya PHP
gibi sunucu tarafl› programlama yap›yorsan›z bilgisayar›n›zda bir
sunucu ortam› oluflturmak gerekecektir. Böylelikle yazaca¤›n›z apli-
kasyonlar› transfer etmeden önce test edebilirsiniz. Bu say›m›zda
Apache web sunucusunu bilgisayar›m›za nas›l kurup ayarlar›n› nas›l
yapaca¤›m›z› görece¤iz.
Apache Web Server 3 Öncelikle yine program›n sisteminize uygun bir versiyonunu indir-
mekle ifle bafllamak gerekiyor. Apache web sunucunun dosyalar›na
http://httpd.apache.org/download.cgi adresinden ulaflabilirsiniz.

Bilgisayar›n›zdaki dosyalar› bir web sunucu ile paylafl›ma açmak için


1 numaral› web sunucusu ile çal›flmaya haz›r m›s›n›z?
1996’dan bu yana internetin en popüler web sunucusu olan
Apache ço¤umuzun kula¤›na yabanc› de¤il asl›nda. Farkl› platform-
larda, a¤›r ifllem trafi¤i alt›nda sorunsuzca çal›flabilmesi, 3.parti uy-
gulamalarla uygun hale getirilebilmesi gibi özellikler bir tarafa
Apache’nin en çok tercih edilen web sunucu olmas›nda flüphesiz be-
dava ve aç›k kaynak olmas›n›n çok büyük etkisi var. Gerçekte Apache
bir firman›n ürünü olmay›p farkl› ortamlardaki yaz›l›m gelifltiriciler
taraf›ndan canl› tutulan bir cemiyet projesi.

Bir yaz›l›m›n aç›k kaynak olmas› bir avantaj m›?


fiüphesiz evet. Aç›k kaynak yaz›l›mlar, kaynak kodlar› yani program›
oluflturan ve nas›l çal›flt›¤›n› gösteren kodlar›n herkesin paylafl›m›na
ve/veya kat›l›m›na sunulan yaz›l›mlard›r. Dilenirse yaz›l›m›n kendi- 3 Apache kurulum dosyas›na çift t›klayarak kuruluma bafllayabilirsi-
sine programc›lar ilaveler (patch - yama) katabilir. Bundan daha niz.

<< CHIP Workshop • 119


Web Programc›l›¤›
<<

3 Apache kurulum s›ras›nda program dosyalar›n› nereye açmak iste- Apache’nin ayarlar›
di¤ini soracak. Diledi¤iniz bir yeri belirleyebilirsiniz. (Mesela Apache belli bir grafiksel kullan›c› arayüzüne sahip olmad›¤›ndan
C:\Program Files\Apache ) ayarlar›n› yapmak son kullan›c› için biraz gri gelebilir. Apache ile ilgi-
li ayarlar [Kurulum dizini]..\Apache\conf klasöründe bulunan
httpd.conf dosyas›ndan yap›l›r.

3 Typical’› seçin ve ilerleyin


3 Kurulum sihirbaz› seçimlerinize uygun olarak Apache’yi bilgisaya-
r›n›za kuracakt›r.

3 httpd.conf dosyas›n› Notepad gibi bir metin editöründe aç›n

Dosyada bu bölümü bulun

120 • CHIP Workshop >>


>> Web Programc›l›¤›

Bu flekilde de¤ifltirin Bu durumda Apache sunucunuz bir pencere içinde çal›flmaya


bafllayacakt›r.

Bu pencere aç›k oldu¤u müddetçe sunucunuz çal›fl›yor demektir.


Bu pencereyi görmek istemiyorsan›z kapatmay›n, sadece küçültün.

Apache’de ilk sayfan›z


Apache sunucunuz çal›fl›r durumdayken bir taray›c› penceresi aç›n
ve adres çubu¤una

Art›k Apache web sunucunuz çal›flmaya haz›r. http://localhost

Apache Web Sunucu’nun çal›flt›r›lmas› yaz›n ve [Enter]’a bas›n. Afla¤›daki gibi bir görüntüyle karfl›lafl›-
Windows platformunda Apache web sunucunuzu diler service ola- yorsan›z Apache ile ilk sayfan›z› sunmufl oluyorsunuz demektir. (Lo-
rak dilerseniz manual olarak çal›flt›rabilirsiniz. calhost sisteminizde lokal olarak çal›flan sunucuya ulaflmak için kul-
Sunucunuzu service olarak çal›flt›rmak için, yani bilgisayar›n›z land›¤›m›z alan ad›d›r) fiimdi yapman›z gereken bu öntan›ml› (defa-
aç›ld›¤›nda sunucunuz da çal›flmaya bafllas›n istiyorsan›z: ult) sayfay› kendi sayfan›zla de¤ifltirmek.
Baflla menüsünden Apache menü seçimlerinden Install Apache as
a service’i seçin. Apache web sunucunun sayfalar› göstermek için kulland›¤› kla-
sör

[Kurulum klasörü] . . . \Apache\htdocs

mesela,

C:\Program Files\Apache\htdocs

klasörüdür. Bu klasörün içine konacak her dosya sunucunuz tara-


f›ndan ulafl›labilir olacakt›r. Öncelikle ifle bu klasörde bulunan önta-
n›ml› index.... sayfalar›n› silmekle ya da baflka bir yere kald›rmakla
bafllayabilirsiniz.
Bir web sayfas› oluflturun ve buna diledi¤iniz ismi vererek . . .
\Apache\htdocs klasörüne yerlefltirin. Web taray›c›n›zla http://lo-
calhost’a gitti¤inizde bu sefer klasörün içeri¤ini görebilirsiniz. Buna
kendi sayfan›z›n linki de dahil. Sayfan›z› görüntülemek için üzerine
t›klayabilirsiniz. Dilerseniz sunucu klasörü içine yeni klasörler de
Sunucunuzu manual yani kendi iste¤inize ba¤l› olarak çal›flt›r- oluflturup bunlar› sunucunuzla ulafl›labilir hale getirebilirsiniz.
mak istiyorsan›z: Localhost’a gidildi¤inde sayfan›z›n ba¤lant› olarak de¤il de önta-
Baflla menüsünden Apache menü seçimlerinden Start Apache’yi n›ml› olarak do¤rudan görünmesini istiyorsan›z sayfan›z›n ad›n› in-
seçin. dex.html olarak de¤ifltirin.

Apache web sunucunun kapat›lmas›


Apache web sunucusunu kapatmak için Apache’nin çal›flt›¤› siyah
pencereyi kapatmay›n. Bafllat menüsünden Apache menü seçimle-
rinden Stop Apache’yi seçin. Apache’nin çal›flt›¤› siyah pencere ken-
dili¤inden kapanacakt›r.
Sunucunuz hay›rl› olsun. Gelecek ay Apache web sunucumuza
PHP’yi kuraca¤›z.
Numan Pekgöz
numanp@chip.com.tr

<< CHIP Workshop • 121


Java Serisi
<<

JAVA ile Programlama Bölüm 5


Bu ayki Java yaz›m›zda nesne yönelimli programc›l›¤›n temel tafllar›ndan olan s›n›flar konusunu
etrafl›ca ele alacak ve örneklerle inceleyece¤iz.

erhabalar! Yeni Java dersimizde mekteyiz. Örne¤in "int a;" dedi¤imizde a lar› yazarak önce yeni bir nesne türü yarat›-

M tekrar birlikteyiz. Önceki dersimiz-


de hat›rlarsan›z Java'da metotla-
r›n nas›l kullan›ld›¤›n› ve yarat›ld›¤›n› ayr›n-
isimli de¤iflkeni içerisinde tamsay›lar tuta-
cak biçimde, "double b; " dedi¤imizde b
isimli de¤iflkeni içerisinde virgüllü say›lar
yor ve daha sonra da yaratm›fl oldu¤umuz
bu "nesne türü cinsinden" s›n›f de¤iflkenleri
yaratarak bu s›n›flar› kullanabiliyoruz. Ya
t›l› olarak inceleyerek, devam›nda da dizile- tutabilecek flekilde ya da "String c[]; " dedi- da bir baflkas›n›n yaratm›fl oldu¤u bir s›n›f
rin metotlara parametre olarak gönderil- ¤imizde c isimli de¤iflkeni içerisinde String türünden yeni bir de¤iflken yaratabiliyor ve
mesine iliflkin birtak›m örnekler üzerinde türünde de¤erler tutan bir dizi fleklinde ya- yine bu de¤iflkeni kullanabiliyoruz.
çal›flm›flt›k. Bu örneklere iliflkin haz›r prog- ratm›fl oluyoruz. Yani de¤iflkenleri bilinen Asl›nda bundan önceki derslerde, önce-
ram dosyalar›n› da http://cs.bil- nesne türlerinden bir tanesi cinsinden yara- den yarat›lm›fl baz› s›n›flar› baz› zaten kul-
gi.edu.tr/~erman/kodlar/ adresinde bula- t›yoruz. lanm›flt›k. Örne¤in "JOptionPane" isimli s›-
bilece¤inizi söylemifltim. ‹flte bugün ö¤renece¤imiz flekilde, s›n›f- n›fa ait "showMessageDialog" ya da "sho-
Bundan sonraki dersler için de yine ayn›
flekilde kodlar› bu adreste bulundurmaya
çal›flaca¤›m. Önceki derslerimizi iyice tekrar
etti¤inizi ve verilmifl örnekleri de teker te-
ker yazarak denedi¤inizi umuyorum. Bili-
nen örnekleri bile sab›rla yazmak inan›n
çok fley ö¤retecektir.
Bugünkü dersimizde art›k nesne yöne-
limli programc›l›¤›n en önemli kavram›
olan s›n›flar› inceleyece¤iz. Önümüzdeki
derlerin birço¤u art›k bu s›n›flar› kullanmak
ve gelifltirmek üzerine olacak. Bu yüzden
burada basitlefltirerek anlatmaya çal›flt›-
¤›m bu temel kavramlar› iyice anlamaya ve
irdelemeye çal›flman›z› öneririm.

S›n›f kavram›:
Biliyoruz ki genel anlamda program yaza-
bilmek için çeflitli de¤iflkenler yarat›p kulla-
n›yoruz. Yarat›lan her de¤iflkenin bir türü
oldu¤unu ve yarat›ld›ktan sonra bu de¤ifl-
kenlerin de art›k birer nesne oldu¤unu gör- DegiskenTutan.java dosyas›

29 • CHIP Workshop >>



>> Java Serisi

wInputDialog" gibi metotlar› kullan›rken


asl›nda bu s›n›f› kullanm›fl olduk.

S›n›f Nedir?
flimdi biraz daha genel olarak s›n›flar›n ne
oldu¤undan bahsetmekte fayda var. S›n›f
denilen fley asl›nda birden fazla metot ve
de¤iflkeni bir arada tutan bir yap›d›r. Ancak
bu de¤iflken ve metotlar›n da ayn› göreve
iliflkin olmas› beklenir. Örne¤in ICQ benzeri
bir uygulamada en kaba flekilde görsel k›-
s›m ve a¤ ba¤lant›lar› olmak üzere iki k›s›m
oldu¤unu kabul edelim. Bu uygulaman›n
pencere flekli, rengi, dü¤melerin yeri v.b. ifl-
Bir s›n›f› kullanmak için için önce o s›n›f türünden nesne yaratmak gerekir.
leri üstlenecek birçok metot ve de¤iflkeni
olsa da hepsinin amac› asl›nda görselli¤i
sa¤lamakt›r. Yine benzer flekilde arka plan- duk. flimdi yine örnek bir s›n›f yaratal›m. Bu olmas›d›r. Bu nedenle s›n›f içerisinde ta-
da ba¤lant›lar› ayarlayan, kontrol eden bir- s›n›f kendi içerisinde sadece bir de¤iflken n›ml› di¤er tüm metodlar bu de¤iflkene eri-
çok metot ve de¤iflken de a¤ ayarlar› için tutsun ve bu de¤iflkenin de¤erini elde ede- flebilir ve de¤iflkeni kullanabilirler.
kullan›l›r. bilecek ya da de¤ifltirebilecek baz› metodla-
Bu durumda ayn› projeye iliflkin ama ay- r› olsun: this Anahtar Sözcü¤ü
r› görevleri üstlenen tüm metot ve de¤ifl- DegiskenTutan.java dosyas›ndaki ör- S›n›f içerisinde yaz›lm›fl olan "getX" isimli
kenleri bu iki ana s›n›f alt›nda toplamak nekte, bahsetti¤imiz bu s›n›f› yine s›n›f ile metod, bu "x" de¤iflkeninin içerisindeki de-
hem organizasyonda hem de tasar›mda ko- ayn› isimde olan "DegiskenTutan.java" dos- ¤eri geri döndürmektedir. Yaln›z dikkat edi-
layl›k sa¤lar. Bu iki k›s›m birbirinden ba¤›m- yas› içerisinde yaratt›k ve kaydettik. Biz as- lirse 9. sat›rda gerçekleflen bu geri döndür-
s›z tasarlanarak bir araya getirilebilir. Bu da l›nda burada "DegiskenTutan" isimli yeni me ifllemi s›ras›nda sadece de¤iflkenin ad›
projeye esneklik sa¤lar. bir nesne türü yaratm›fl oluyoruz. de¤il, onun yerine "this.x" fleklinde bir kul-
DegiskenTutan s›n›f›n›n 2. sat›r›nda ya- lan›m görmekteyiz. "this" anahtar sözcü¤ü
S›n›flar›n Yarat›lmas› rat›lan "x" isimli bir global de¤iflkeni bulun- özel bir anahtar sözcük olup noktadan son-
Bundan önce yazd›¤›m›z örneklerde asl›nda maktad›r. Bu de¤iflkenin global olmas›n›n ra gelen de¤iflken isimlerinin s›n›fa ait ol-
biz hep bir s›n›f ve bu s›n›f›n içerisinde de nedeni yarat›ld›¤› yerin herhangi bir meto- du¤unu ifade etmektedir. Yani 9. sat›rda
birtak›m metod ve de¤iflkenler yarat›yor- dun içinde de¤il de en d›fl faliyet alan›nda yaz›lan

return this.x;

ile kastedilen fley, ilgili s›n›fa ait olan "x"


isimli de¤iflkeninin geri döndürülece¤idir.
Yine s›n›f içerisinde yaz›lm›fl olan "setX"
isimli metod da kendisine parametre olarak
gelen ve c de¤iflkeninde tutlan de¤eri
"this.x" de¤ikenine, yani s›n›fa ait olan "x"
de¤iflkenine atamaktad›r.
Gördü¤ümüz gibi yazm›fl oldu¤umuz bu
yeni s›n›f içerisinde baflka de¤iflken ya da
metod bulunmamaktad›r. Peki ya madem
art›k bu s›n›f yaz›ld› ve kullan›ma haz›r, s›n›-
f› nas›l kullanabiliriz? fiimdi bu sorunun ce-
vab›n› verelim:

Yaz›lm›fl S›n›flar›n Kullan›lmas›


Baz› özel durumlar›n d›fl›nda, en genel biçi-
miyle bir s›n›f nesnesi ya da bildi¤imiz flek-
liyle bir s›n›f türünden de¤iflken, flu flekilde
yarat›l›r:

SinifAdi degisken = new SinifAdi();


Mesela, az önce yazm›fl oldu¤umuz "De-
giskenTutan" isimli s›n›f türünden bir de-
GenelSinif.java dosyas› ¤iflken de:

<< CHIP Workshop • 30


Java Serisi
<<
DegiskenTutan a = new DegiskenTutan();

fieklinde yarat›lmaktad›r. Bu yaratma ifl-


lemini baflka bir s›n›f içerisinden yapabilir-
siniz. Burada vurgulanmas› gereken en
önemli nokta, yarat›lan her s›n›f de¤iflkeni-
nin asl›nda gerçek s›n›f›n bir kopyas› oldu-
¤udur. Yani biz yukar›daki gibi a isimli ve
DegiskenTutan türünde bir s›n›f nesnesi ve
yine ayn› flekilde

DegiskenTutan b = new DegiskenTutan();

b isimli baflka bir DegiskenTutan isimli


s›n›f nesnesi yaratt›¤›m›zda, bu iki nesne de
art›k kendilerine ait birer "setX" ve "getX"
metodlar› ile bir "x" de¤iflkeni bar›nd›rmak- GenelSinif2.java dosyas›
tad›r. A nesnesinin "x" de¤iflkeni ile b nes-
nesinin "x" de¤iflkeni art›k farkl›d›r. Ama iki- çal›flt›ral›m: nelSinif" olmas›, "DegiskenTutan" s›n›f›n›n
sinin de bir "x" de¤iflkeni vard›r. Yine ayn› ise sadece kullan›l›yor olmas›d›r. Çünkü
flekilde "a" nesnesi ile "b" nesnesinin "setX" java GenelSinif "GenelSinif" s›n›f› içerisinde "main" metodu
ve "getX" metodlar› vard›r ama her metod vard›r. Bununla ilgili ayr›nt›l› aç›klamay› ya-
kendi nesnesine ait olan "x" de¤iflkeni üze- Not: Burada görüyoruz ki "DegiskenTu- z›n›n ilerleyen k›s›mlar›nda zaten bulabile-
rinde ifllem yapabilir. tan.java" dosyas› sadece derleniyor ancak ceksiniz.
flimdi "DegiskenTutan.java" dosyas› ile GenelSinif.java gibi sonra da çal›flt›r›lm›yor. Örne¤imizde 7. ve 8. sat›rlarda Degis-
ayn› klasör içerisinde yer alan "GenelSinif" Bunun nedeni as›l çal›flan program›n "Ge- kenTutan s›n›f› türünden "a" ve "b" isimli 2
isimli yeni bir s›n›f daha yaratal›m ve bu ye-
ni s›n›f içerisinde de "DegiskenTutan" isimli
s›n›f› kullanal›m:
flimdi yazm›fl oldu¤umuz bu s›n›flar›
kaydettikten sonra çal›flt›rabilmek için flu
ifllemleri yapmam›z gerekmektedir.:

1) Öncelikle komut sat›r›nda bu s›n›f dos-


yalar›n› yazm›fl oldu¤unuz dizin içerisine cd
komutu yard›m›yla giriniz. Örne¤in bu di-
zin linux kullan›c›lar› için "/home/er-
man/kodlar" ya da windows kullan›c›lar›
için "C:\kodlar" ise, dizin içerisine girmek
için:

$cd /home/erman/kodlar

ya da

C:\> cd kodlar

yazman›z gerekmektedir.

2) flimdi s›ras›yla "DegiskenTutan.java"


dosyas›n› ve "GenelSinif.java" dosyas›n›
derleyelim:

javac DegiskenTutan.java
javac GenelSinif.java

3) Son olarak da GenelSinif.java dosyas›n› DegiskenTutan2.java dosyas›

31• CHIP Workshop >>


>> Java Serisi

vermek amac›yla yazar›z. Asl›nda tasarlad›-


¤›m›z bir s›n›fa bafllang›ç metodu yazmak
zorunda de¤iliz. Ancak bafllang›ç metodu
yazmam›flsak, nesne yarat›l›rken Java oto-
matik olarak bizim yerimize bofl bir hayali
bafllang›ç metodu yazar ve onu ça¤›r›r. E¤er
yazm›flsak bizim yazd›¤›m›z bafllang›ç me-
todunu ça¤›rmaktad›r.
flimdi tüm bu anlatt›klar›m›z› "Degis-
kenTutan" s›n›f›m›za bafllang›ç metodlar›
ekleyerek irdeleyelim. Ama bu sefer "Degis-
kenTutan" ve "GenelSinif" isimli s›n›flar›
MainParametreleri.java dosyas› "DegiskenTutan2" ve "GenelSinif2" olarak
de¤ifltirelim. Tabi ayn› de¤iflikli¤i dosya
de¤iflken ya da iki "DegiskenTutan" s›n›f› S›n›flar›n bafllang›ç metodlar› bizim bildi¤i- isimlerinde de yapmay› unutmayal›m:
nesnesi yarat›lmaktad›r. Daha sonra 9. sa- miz anlamda metodlardan biraz daha fark- Bu örnekte görüyoruz ki; "GenelSinif2"
t›rda a nesnesinin "setX" metodu "a" nesne- l›d›r. Bu metodlar›n en önemli özelli¤i, bir dosyas›n›n 7. sat›r›nda, "a" isimli "Degis-
sinin "x" de¤iflkeni de¤erini 10, "b" nesnesi- s›n›f nesnesi yarat›l›rken otomatik olarak kenTutan2" türünden s›n›f de¤iflkeni, "De-
nin "setX" metodu da "b" nesnesinin "x" de- ça¤r›lmalar›d›r. Mesela "DegiskenTutan" s›- giskenYutan2" s›n›f›n›n 5. sat›r›nda tan›m-
¤iflkeninin de¤erini 20 yapmaktad›r. n›f› türünden bir nesne yarat›l›rken asl›nda lanan bofl olan bafllang›ç metodu ile yarat›-
Dikkat ederseniz "a" ve "b" nesneleri de "new" anahtar sözcü¤ünden sonra bir me- l›yor ve bu metodun içerisinde de "a" nes-
"setX" ve "getX" metodlar›na sahiptir ve bu tod ça¤r›ld›¤›n› görmekteyiz: nesinin "x" de¤iflkenine 0 de¤eri veriliyor.
metodlar› kullanmak için nesne ad›ndan Ancak "GenelSinif2" çerisinde 8. sat›rda ya-
sonra "." iflareti ve sonra da metod ad›n› DegiskenTutan a = new DegiskenTutan(); rat›lan "b" isimli ve "DegiskenTutan2" tü-
yazmak gerekir. "a" ve "b" nesnelerinin t›p- ‹flte bu "DegiskenTutan()" isimli metod, ründeki nesne, "DegiskenTutan2" isimli s›-
k› "DegiskenTutan" s›n›f› gibi metodlara ve "DegiskenTutan" isimli s›n›f›n bafllang›ç n›f›n 9. sat›rda tan›mlanm›fl ve int para-
de¤iflkenlere sahip olmalar›n›n nedeni, bu metodudur. Peki o zaman bafllang›ç metod- metre alan bafllang›ç metoduyla yarat›ld›¤›
nesnelerin de yarat›l›rken "DegiskenTutan" lar›n›n normal metodlardan fark› nedir? için bu "b" nesnesine ait olan "x" de¤iflkeni
s›n›f› türünden yarat›lm›fl olmalar›d›r. nesne yarat›l›rken verilen 2 de¤erini al›yor.
12. ve 13. sat›rlarda haz›rlanan "messa- 1) Bafllang›ç metodlar› kesinlikle ve kesin- Bu örnekte, bir s›n›f türünden nesne yarat›-
ge" isimli String de¤iflkeni içerisine ekranda likle s›n›f ismiyle ayn› olmak zorundad›r. l›rken yap›lmas›n› istedi¤imiz birtak›m ilk
görülecek yaz› ve "getX" metodlar› yard›- E¤er bafllang›ç metodunun ismini verirken ifllemleri bafllang›ç metodlar› yard›m›yla
m›yla "a" ve "b" nesnelerinin "x" de¤iflkenle- s›n›f isminden farkl› bir isim kullan›rsan›z yapt›rabildi¤imizi görüyoruz.
rinin içerisindeki de¤erler haz›rlanmakta- bu metod art›k baflka bir metod olarak ka- NOT: Bafllang›ç metodlar› sadece nesne
d›r. En son olarak da "message" isimli de¤ifl- bul edilir. Örne¤in: yarat›l›rken ça¤r›l›r. Baflka bir zamanda bu
ken içerisinde haz›rlanan bu son görüntü metodlar›n ça¤r›lmas›na izin verilmez.
"JoptionPane" isimli s›n›f›n "showMessage- DegiskenTut -> Yanl›fl. S›n›f ismi Degis-
Dialog" isimli metodu yard›m›yla ekrana kenTutan o halde bafllang›ç metodunun is- main Metodu
gönderilmektedir. mi bu olamaz fiu ana kadar dikkat ederseniz "main" me-
Bu örnekten ç›karaca¤›m›z sonuç fludur; todu ile ilgili çok az ayr›nt›dan bahsettim.
Genel olarak yaz›lm›fl s›n›flar›n kullan›labil- Degiskentutan -> Yanl›fl. S›n›f isminde T Asl›nda bu metod da birtak›m özelliklere
mesi için öncelikle bu s›n›flar türünden de- harfi de büyük. ‹sim, büyük küçük harf ba- sahip özel bir metoddur. flimdi yukar›da
¤iflkenler yarat›larak bu s›n›flar›n birer kop- z›nda da ayn› olmak zorundad›r. yapm›fl oldu¤umuz örneklere bir göz atma-
yas› ya da nesnesi ç›kar›lmal› ve s›n›fa ait n›z› istiyorum. Bu örnekler de "GenelSinif"
de¤iflken ve metodlar bu nesneler arac›l›- 2) Bafllang›ç metodlar› geri dönüfl de¤erine isimli s›n›f içerisinde "main" metodu varken
¤›yla kullan›lmal›d›r. Ayr›ca gördü¤ümüz sahip de¤ildir. Yaln›z burada geri dönüfl de- "DegiskenTutan" isimli s›n›f›n içerisinde
gibi bir s›n›fa ait metodlar kullan›l›rken s›- ¤eri void demek istemiyorum. Bafllang›ç böyle bir metod yok. Ama her iki örnek de
n›f nesnesinden sonra "." iflareti ve daha metodlar›n›n geri dönüfl de¤eri gibi bir kav- düzgün bir flekilde çal›flabiliyor. Bunun ne-
sonra da metodun ad› yaz›lmaktad›r. ramlar› yoktur. void ile yok baflka anlamlara denini flöyle aç›klayal›m:
Bu örne¤imizde "a" ve "b" isimli s›n›f gelir. Bu ana kadar gördük ki bir s›n›f nesnesi
nesneleri yarat›ld›ktan sonra, sahip olduk- ilk önce yaz›lmakta ve daha sonra da kulla-
lar› "x" de¤iflkenlerine "setX" metodu ile de- 3) Bir s›n›f›n birden fazla bafllang›ç metodu n›lmaktad›r. Ancak kullan›lmadan önce
¤erler verilmektedir. Peki e¤er biz daha nes- olabilir. Bütün bafllang›ç metodlar› da s›n›f tüm nesneler öncelikle "javac" komutu ile
neyi yarat›rken hemen o anda "x" de¤iflke- ismiyle ayn› olmak zorundad›r ancak her bi- derlenmelidir. ‹flte bir java dosyas›n›n "ja-
nine de¤er vermek istersek ne olacak? Bu- rinin parametreleri birbirlerinden farkl› ol- vac" ile derlenmesi iflleminden sonra bir de
nun için "bafllang›ç metodu" kavram›n› bil- mak zorundad›r. "java" komutu ile çal›flt›r›labilmesi için, o ja-
memiz gerekir. Biz bafllang›ç metodlar›n› genelde bir s›- va dosyas› (ya da s›n›f›) içerisinde "main"
n›f türünden bir nesne yarat›rken, bu nes- metodu olmas› gerekir. Yani çal›flt›r›labilir
S›n›flar›n Bafllang›ç Metodlar›: nenin de¤iflkenlerine birtak›m ilk de¤erler s›n›flar›n main metodunu sahip olmalar›

<< CHIP Workshop • 32


Java Serisi
<<
gerekir. Aksi takdirde ve de¤iflkenler tutuyor ve daha sonra biz de
Bu flekilde s›n›f› çal›flt›rd›¤›n›zda ekran- bu s›n›f türünden nesneler yaratarak bu
java <Sinif_adi> da flöyle bir ç›k›fl göreceksiniz. metod de¤iflkenleri kullanabiliyoruz.
Bazen bir s›n›f içerisinde yaz›lan metod
komutundan sonra ekranda afla¤›daki 1. parametre:bir ya da de¤iflkenleri sadece s›n›f›n içerisinde
gibi "main" metodunun bulunamad›¤›na 2. parametre: iki kullanmak isteyebiliriz. Yani baflka bir yer-
dair bir mesaj ile karfl›lafl›rs›n›z: de bu s›n›f türünden yarat›lan bir de¤iflken
‹flte burada, java komutu ile "MainPara- ile kullanmayaca¤›m›z ancak s›n›f›n kendi
"java.lang.NoSuchMethodError: main" metreleri" s›nf›n› çal›flt›r›rken s›ras›yla ver- içinde kullan›lmas› gereken metod ve de-
di¤iniz "bir" ve "iki" isimli bu iki String de¤e- ¤iflkenler olabilir. Bunu anlamak için "De-
Ancak "DegiskenTutan" gibi sadece bafl- ri, main metodunun pototipinde tan›mlan- giskenTutan" s›n›f›na tekrar dönelim. Biz
ka bir s›n›f içerisinde kullan›lmak üzere ta- m›fl olan "arg" isimli String dizisine at›lm›fl- "DegiskenTutan" s›n›f› türünden bir "a"
sarlanm›fl s›n›flar do¤rudan çal›flt›r›lmaya- t›r. "main" metodunun paramtresi olan bu nesnesi yaratt›¤›m›zda "a" nesnesi kendisi-
ca¤› için, onlar›n içerisinde main metodu ol- "String arg[]" dizisi bu örnekte oldu¤u gibi ne ait olan "x" de¤iflkenini:
mas›na gerek yoktur. Bu tür s›n›flar›n yuka- bir s›n›f çal›flt›r›l›rken kullan›c›n›n vermek
r›daki örnekte de görüldü¤ü gibi sadece istedi¤i parametreleri al›r ve daha sonra a.x = 10;
derlenmesi, kullan›labilmeleri için yeterli program içerisinde kullan›labilmesi için
olacakt›r. saklar. fieklinde de¤ifltirebilir. Ancak biz bu fle-
Özetle; yazd›¤›m›z programlarda birbi- Örnek program›m›z›n 5. ve 6. sat›rlar›n- kilde bir müdaheleye izin vermek istemiyor
rinden farkl› görevleri üstlenmifl birçok s›n›- da "arg[0]" ve "arg[1]" ile bu girilen para- olabiliriz. E¤er "a" nesnesinin "x" de¤iflkeni
f› bar›nd›ran java dosyalar› ve hepsini en metreleri kullanabildi¤imzi görmekteyiz. de¤ifltirilecekse, böyle bir ifllemin "setX" gi-
son olarak tek çat› alt›nda toplayacak ve Buradaki kullanma fleklimiz bu parametre- bi bir metodla yap›lmas›n›, de¤iflkene "a.x"
as›l program›n çal›flmas›n› sa¤layacak ge- leri sadece ekrana yazmak gibi anlams›z bir diyerek do¤rudan eriflilememesini istiyor
nel bir s›n›f›m›z olacakt›r. Ve tüm bu s›n›flar ifllem gibi görünse de daha sonra ifle yarar olabiliriz. ‹flte bu durumlarda s›n›f içerisine
içerisinde sadece ana program› çal›flt›racak flekillerde kullanabilece¤imizi düflünebili- "x" de¤iflkeninin bafl›na bir "private" anah-
olan bu genel s›n›f içerisinde "main" meto- riz. tar sözcü¤ü eklememiz gerekir. Yani "De-
du olmal›d›r. Di¤er s›n›flar› kullanabilmeniz giskenTutan" s›n›f›nda "x" de¤iflkeninin bil-
için, genel s›n›f da dahil olmak üzere hepsi- 1. parametre: bir dirimi:
ni java ile derlemelisiniz. Ancak program› 2. parametre: iki
çal›flt›rmak için sadece genel s›n›f› java ko- class DegiskenTutan {
mutu ile çal›flt›rman›z yeterlidir. S›n›flar›n public ve private Metod ve De- private int x;
Sonuç olarak; bir s›n›f java ile çal›flt›r›ld›- ¤iflkenleri
public Degiskentutan() {
¤› zaman, otomatik olarak içerisindeki ma- fiu ana kadar belirli iflleri yapabilmek
in metodu ça¤r›lacakt›r. E¤er s›n›f içerisin- amac›yla metod ve de¤iflkenleri birarada
...
de main metodu yoksa, böyle bir s›n›f "ja- tutan nesneleri yaratmay› ve kullanmay›,
vac" ile derlenebilir ancak "java" ile çal›flt›r›- yani s›n›flar›n genel olarak kullan›m›n› gör-
lamaz! müfl olduk. Bir s›n›f içerisinde çeflitli metod fieklinde olursa, art›k "DegiskenTutan"

main Metodu parametreleri:


"main" metodunun flu ana kadar hiç de-
¤inmedi¤imiz bir özelli¤i de ald›¤› paramet-
relerdir. Bu metod yaz›l›rken görmekteyiz ki

public static void main(String arg[])

fieklinde bir String dizisini parametre


olarak almaktad›r. "‹yi de bu parametre ne
ifle yar›yor?" diye merak etti¤inizi tahmin
ediyorum. Art›k bunu ö¤renme zaman›m›z
geldi. Öncelikle afla¤›da verilen "MainPara-
metreleri.java" isimli s›n›f› yaz›p kaydedi-
niz:
flimdi afla¤›da gösterildi¤i gibi bu s›n›f›
önce javac komutu ile derleyip daha sonra
java komutunun bu özel kullan›m› ile çal›fl-
t›r›n›z:

javac MainParametreleri.java
java MainParametreleri bir iki StatikTest.java dosyas›

33 • CHIP Workshop >>


>> Java Serisi

türünden "a" gibi bir nesne yarat›lsa bile,


"a.x" gibi bir eriflim yasaklanm›fl olur. An-
cak s›n›f içerisindeki bir metod "x" de¤iflke-
nine yine de ulaflabilir.
E¤er genel olarak özetlemek gerekirse;
s›n›flar içerisinde bildirilen "private" türün-
deki de¤iflkenlere d›flar›dan eriflilemez, an-
cak s›n›f›n di¤er metodlar› ile eriflilebilir.
Bu durum s›n›f›n private metodlar› için
GenelSinif3.java dosyas›
de geçerlidir. E¤er s›n›f yaz›l›rken bir meto-
dun bafl›na "private" anahtar sözcü¤ü ekle-
nirse, bu metod da art›k d›flar›dan eriflile- bu "private" de¤iflken ya da metodlara eri- du do¤rudan ça¤r›larak ekrana gelmifltir.
mez, sadece s›n›f içerisindeki di¤er metod- flebilirler. Gördü¤ümüz gibi, bir s›n›f›n statik metodu-
lar taraf›ndan kullan›labilir bir hale gelir. Tüm bunlar›n bir sonucu olarak da, s›n›f- nu kullanmak için ilk önce o s›n›f türünden
Mesela "DegiskenTutan" isimli s›n›fa afla¤›- lar yaz›l›rken yarat›lan "public" metod ve bir nesne yaratmaya gerek yoktur. Çünkü
daki gibi bir "private" metod ekleyelim: de¤iflkenler, s›n›f nesneleri arac›l›¤›yla d›fla- statik metodlar s›n›f ismi ve sonra ". " iflare-
r›dan eriflilebilirler. ti yaz›ld›ktan sonra do¤rudan ça¤r›labilir-
class DegiskenTutan { ler. Ancak ikinci mesaj "StatikTest" s›n›f›n›n
private int x; Statik Metod ve De¤iflkenler "kayitliMesaj" isimli ve statik olmayan me-
... fiu ana kadar ö¤rendiklerimizi ele ald›¤›- todu sayesinde ekrana geldi¤inden, bu me-
private void resetX() {
m›zda neden JOptionPane s›n›f›n›n show- todu kullanabilmek için ilk önce "Statik-
this.x = 0;
Message isimli metodunu kullanmak için Test" s›n›f› türünden bir nesne yarat›lmas›
}
JOptionPane s›n›f› türünden bir nesne ya- ve metodun da bu nesne arac›l›¤›yla ça¤›r›l-
...
ratm›yoruz? diye sormam›z gerekir. mas› gerekir.
public setX(int c) { Baz› metodlar yaz›ld›klar› s›n›flar içeri- Uygulama Sorusu: ‹çerisinde tarih tutan
this.resetX(); sinde statik olarak yaz›l›rlar. Bu türden sta- ve tarihlerle ilgili ifllemler yapabilen metot-
this.x = c; tik olarak yaz›lm›fl metodlar› kullanmak için lar› bar›nd›ran bir s›n›f tasarlay›n›z. Yap›l-
} s›n›f nesnesi yaratmak gerekmez. Bu me- mas› gereken ifllemler iki tarihin birbiriyle
} todlar› kullanmak için yaz›ld›klar› s›n›f is- k›yaslanmas›, tarih üzerine belirli bir gün
minden sonra "." iflareti koyarak do¤rudan say›s› eklenebilmesi, tutulan tarihin göste-
Bu flekilde "private" olarak bildirilmifl metodu ça¤›rabilirsiniz. Ancak tahmin rilmesi, tutulan tarihin de¤ifltirilmesi flek-
"resetX" metodu art›k bu s›n›f türünden ya- edersiniz ki bir metod statik olarak yaz›l- linde olmal›d›r.
rat›lm›fl nesneler ile d›flar›dan kullan›lamaz. m›flsa genel amaçl› bir metod olmal›d›r. Bu ifllemlerin her biri için s›n›f içerisinde
Yani afla¤›daki gibi bir kullan›m geçersizdir: Mesela JOptionPane isimli s›n›f›n show- bir metot tasarlaman›z gerekmektedir.
MessageDialog ya da showInputDialog Böyle bir s›n›f›n günü, ay› ve y›l› tutan de-
class BaskaSinif { isimli metodlar› genel amaçl› olup her za- ¤iflkenleri olmal›d›r. S›n›f› tasarlad›ktan
public static void main(String arg[]) { man kullan›labilmektedir. Ekrana bir mesaj sonra, bu s›n›f› kullanan ve bu s›n›f türün-
DegiskenTutan a = new penceresi ç›karmak ya da kullan›c›dan bir den örnek nesneler yaratarak bunlar› kulla-
p
girifl de¤eri almak için bir nesne yaratmaya nan baflka bir genel s›n›f yaz›n›z ve tasar›-
DegiskenTutan(2);
gerek yoktur. m›n›z› bu nesneler üzerinde test ediniz. Uy-
a.resetX();
Siz de kendi tasarlad›¤›n›z s›n›flar içeri- gulaman›n cevab›n› bir sonraki dersimizde
/* YANLIfi! resetX private bir metoddur
Bu flekilde d›flar›dan kullan›lamaz.*/
sinde bu flekilde genel amaçl› metodlar yaz- bulabilirsiniz.
... mak isterseniz bunlar› statik olarak yarata- Nihayet bu dersimizin de sonuna gelmifl
} bilirsiniz. bulunuyoruz. Nesne yönelimli programla-
} Bir metodun statik olarak yarat›labilme- ma tekni¤inin özünü oluflturan s›n›flar› ve
si için, metodun prototipinin bafl›na "static" s›n›flar›n kullan›m›n› ö¤rendi¤imiz bu der-
En son örnekte gördü¤ünüz gibi "a.re- anahtar sözcü¤ü eklenir. Afla¤›daki iki örne- simizi iyice sindirmenizi ve örnekleri de tek-
setX()" gibi bir ça¤r›m geçerli de¤ildir. Çün- ¤i yaz›p kaydediniz: rar yazarak kendi bafl›n›za denemenizi ›s-
kü "DegiskenTutan" s›n›f›n›n "resetX" isimli Daha sonra da afla¤›daki s›ra ile derleyip rarla öneririm.
metodu "private" bir metoddur. Bu neden- program› çal›flt›r›n›z: Daha önce de söyledi¤im gibi derslerde
le, bu s›n›f türünden yarat›lm›fl olan "a" kulland›¤›m›z tüm örneklerin yaz›lm›fl dos-
nesnesi arac›l›¤›yla bu metoda d›flar›dan javac StatikTest.java yalar›n› http://cs.bilgi.edu.tr/~erman/ kod
eriflilemez. Ancak önceki örnekteki gibi "re- javac GenelSinif3.java lar adresinde bulabilirsiniz. Konuyla ilgili
setX" metodunu s›n›f›n di¤er bir metodu java GenelSinif3 soru, görüfl ve önerileriniz için postalar›n›z›
olan "setX" metodu kullanabilmektedir. bekliyorum. ‹yi çal›flmalar..
De¤iflken ya da metodlar›n "private" ya da Bu örne¤i çal›flt›rd›¤›n›zda ekrana iki ta- Sevgi ve sayg›lar›mla,
"public" olmas›, bu metod ya da de¤iflkenle- ne mesaj›n geldi¤ini göreceksiniz. Bu me- Erman Aykaç
rin sadece d›flar›dan kullan›m› etkileyen bir sajlardan ilki, "GenelSinif3" isimli s›n›f›n 5. ‹stanbul Bilgi Üniversitesi
durumdur. S›n›f içerisindeki di¤er metodlar sat›r›nda, "StatikTest" s›n›f›n›n statik meto- Bilgisayar Bilimleri Bölümü

<< CHIP Workshop • 34

You might also like