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.

V

eritaban›ndan faydalanacak web uygulamalar›n›z için seçebilece¤iniz farkl› veritaban› programlar› olsa da en genifl kullan›ml› profesyonel program›n MySQL oldu¤u aflikar. Özellikle Windows sunucular›nda kullan›m› basit oldu¤u için amatör programc›lar taraf›ndan tercih edilen MS Access temelde bir masaüstü veritaban› program› olup ayn› anda ifllem yapma konusunda ciddi s›k›nt›lar› bulunmakta. Bu bak›mdan ticari ve profesyonel web sitelerinizde MS Access yerine daha iyi performansa sahip daha gü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 bu alanda çoktan bir web standart› yapt› bile.

Websitemde MySQL kullanmak için ne yapmal›y›m?
Web sitenizde MySQL veritaban›ndan faydalanmak için hosting hizmeti veren sunucuya MySQL’in yüklü olmas› gerekir. Mesela bir hosting hizmetinden faydalanmay› düflünüyorsan›z alaca¤›n›z pakette MySQL yer almal›d›r. E¤er web aplikasyonlar›n›z› kendi makinenizde yaz›p test etmek istiyorsan›z bu durumda kendi makinenize de MySQL’i yüklemeniz gerekir.

MySQL’i makineme nas›l yüklerim?
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. Dileyenler www.mysql.com/downloads/index.html adresinden

» Veritaban› nedir?
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 halini 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 database) dosyalar›ndan faydalanmak. Bu tür metinsel dosyalarda verileri birbirinden ay›rmak amac›yla ay›raç (delimiter) ad› verilen özel karakter ya da karakter gruplar›ndan faydalan›l›r. Bu tarz dosyalar 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 birbirinden farkl› özelliklere, farkl› performanslara ve tabi ki farkl› fiyatlara sahip bir çok veritaban› program› mevcuttur. Bunlardan en bilinenleri MS Access, MS SQL Server, MySQL ve Oracle olarak sayabiliriz. Veritabanlar›n›n web aç›s›ndan önemine de¤inecek olursak, dinamik web içeriklerinin ve bu yönde en etkin uygulamalar›n temelini veritabanlar›n›n oluflturdu¤unu rahatl›kla söyleyebiliriz. Web uygulamalar› denince en önde gelen olgulardan biri ‹çerik Yönetimi’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›rakabilen uygulama oldu¤unu söyleyebiliriz. Tek bir kaynak dosyada bulunan veriye an›nda ulafl›labilmesi ve elde edilen bilginin farkl› ortamlarda kullan›labilmesini amaçlayan uygulamalar›n tümü ancak ve ancak veritaban› kullanmakla mümkündür.

116• CHIP Workshop > >

>>

Web Programc›l›¤›

MySQL’in sistemlerine uygun diledikleri bir sürümünü indirebilirler. 3 MySQL’in ZIP’li kurulum dosyas›n› bir ZUP program›yla aç›n ve içeri¤ini bilgisayar›n›zda herhangi geçici bir klasöre yerlefltirin. 3 Bu klasörde oluflan Setup.exe dosyas›n› çal›flt›r›n. MySQL’i kurmak istedi¤iniz klasörü seçin (Mesela C:\mysql dizinine). 3 Kurulum sihirbaz› tercihleriniz do¤rultusunda MySQL’i bilgisayar›n›za kuracakt›r. 3 C:\mysql\bin klasörü içindeki winmysqladmin.exe dosyas›n› çal›flt›rd›¤›n›zda MySQL’in grafiksel arayüzlü yöneticisi aç›lacakt›r. MySQL yöneticisi (WinMySQLadmin) bir kereye mahsus olmak üzere kullan›c› ad› ve flifre girmenizi isteyecek. Bundan sonra MySQL sunucunuz 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 WinMySQLadmin penceresi görünecektir. 3 Sa¤ alt köfledeki trafik lambas› yeflil yand›¤› sürece sisteminizdeki MySQL veritaban› sunucusu hizmette demektir. E¤er de¤ilse simgenin üzerine sa¤ t›klay›n, Win NT üzerine gelin ve Start Service’i seçin. Art›k MySQL’i sisteminize kurmufl oldunuz demektir. Bundan 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çeklefltirebilirsiniz. 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) yeni bir tablo oluflturmak için afla¤›daki kodlar› kullanabiliriz. Tablo
katalog isimli yeni bir veritaban› oluflturduk

içinde tamsay› cimsinden urunNo ad›yla ve metin cinsinden urunTanim ad›yla birer alan (sütun) oluflturaca¤›z.
C:\>cd mysql\bin C:\mysql\bin>mysqladmin create katalog C:\mysql\bin>mysql

fiu an MySQL prompt’u içindeyiz. Art›k MySQL sunucumuza direkt komutlar gönderebiliriz.
mysql> show databases;

Sistemdeki veritabanlar›n› göster. Bunlardan mysql isimli olan›

kurulum aflamas›nda oluflan program›m›z›n kendi veritaban› olup bu ismi kendi oluflturaca¤›m›z veritabanlar›nda kullanamay›z.
mysql>use katalog

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 alan› 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 # # Table structure for table 'urunler' # CREATE TABLE urunler (urunNo int(11) default NULL, p urunTanim text) TYPE=MyISAM; # # Dumping data for table 'urunler' 3.23.43-nt

MySQL’e direkt olarak komut göndermek için SQL (Structured Query Language) kullan›l›r. fiimdilik bu kadar MySQL denemesi yeterli. Web programc›lar› s›kl›kla veritaban› ifllemlerini ya bizzat programlad›klar› ya da bu amaçla haz›rlanan sunucu tarafl› aplikasyonlar› ile gerçeklefltirirler. phpMyAdmin bu tarz uygulamalardan birisi olup web tabanl› grafiksel arayüzü ile MySQL veritaban› ifllemlerini gerçeklefltirmede çok daha fazla kolayl›k sa¤lar. Önümüzdeki say›larda phpMyAdmin program›n› sistemimize nas›l kuraca¤›m›z› görece¤iz. MySQL’e dönersek, MySQL’in kullan›m› ve kontrolü ile ilgili daha detayl› bilgiyi MySQL’in dokümantasyonunda bulabilirsiniz. MySQL ile ilgili bölümü kapamadan önce önemli bir uygulamadan da bahsetmeden geçmeyelim.

#

Kaynak dosyadan veritaban› oluflturma
Hiç umulmasa da sunucudaki veritaban›n›z›n bafl›na bir ifl gelirse, ya da veritaban›n›z›n ayn›s›n› farkl› bir ortamda da oluflturmak isterseniz yedeklenme s›ras›nda oluflan kaynak dosyas›n› kullanabilirsiniz. Bu durumda yapman›z gereken, önce yeni veritaban›m›z› oluflturmak
mysql> create database katalog2;

Veritaban› yedekleme
Oluflturmufl oldu¤unuz veritabanlar› sistemde kay›tl›d›r. Baz› durumlarda 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¤imizi yeni veritaban›m›za eklemek.
C:\mysql\bin> mysql katalog2 < katalog.sql

önemlisi ise güvenlik ile ilgili husustur. Aç›k kaynak yaz›l›mlar›n kodlar› ortada oldu¤undan program›n çal›flt›¤› anda ne gibi ifllerle meflgul oldu¤u da yaz›l›m gelifltiriciler için aflikard›r. Bu yüzden Alman Savunma Bakanl›¤› ‹nternet üzerinden görüflme yapt›¤› iflletim sistemini 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 bizzat 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 özellikle Unix üzerinde çal›flan Apache sunucular daha fazla tercih edilmekte 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 katalog’un ayn›s› oldu¤unu inceleyebilirsiniz. Bir aplikasyonun en önemli parças›n›n sahip oldu¤u bilgi oldu¤unu düflünürsek, san›r›m veritaban› yedekleme ve yedeklenmifl dosyadan yeni veritaban› oluflturman›n ne derece hayati önem tafl›d›¤›n› tahmin edersiniz.

Neden “Apache”?
Bafllang›çta Apache isminin “A patchy server” yani sabit bir kod üzerine eklenen yamalardan oluflan bir sunucu oldu¤undan bu flekilde adland›r›ld›¤› söyleniyordu ama Apache.org, program›n dayan›kl›l›¤›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›ncas› 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 aplikasyonlar› 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. 3 Öncelikle yine program›n sisteminize uygun bir versiyonunu indirmekle ifle bafllamak gerekiyor. Apache web sunucunun dosyalar›na http://httpd.apache.org/download.cgi adresinden ulaflabilirsiniz.

Apache Web Server

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› platformlarda, a¤›r ifllem trafi¤i alt›nda sorunsuzca çal›flabilmesi, 3.parti uygulamalarla uygun hale getirilebilmesi gibi özellikler bir tarafa Apache’nin en çok tercih edilen web sunucu olmas›nda flüphesiz bedava 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 kendisine programc›lar ilaveler (patch - yama) katabilir. Bundan daha
< CHIP Workshop • 119 <

3 Apache kurulum dosyas›na çift t›klayarak kuruluma bafllayabilirsiniz.

Web Programc›l›¤›

<<

3 Apache kurulum s›ras›nda program dosyalar›n› nereye açmak istedi¤ini soracak. Diledi¤iniz bir yeri belirleyebilirsiniz. (Mesela C:\Program Files\Apache )

Apache’nin ayarlar›
Apache belli bir grafiksel kullan›c› arayüzüne sahip olmad›¤›ndan ayarlar›n› yapmak son kullan›c› için biraz gri gelebilir. Apache ile ilgili 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 bilgisayar›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 > >

>>
Bu flekilde de¤ifltirin

Web Programc›l›¤›

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›
Windows platformunda Apache web sunucunuzu diler service olarak dilerseniz manual olarak çal›flt›rabilirsiniz. Sunucunuzu service olarak çal›flt›rmak için, yani bilgisayar›n›z aç›ld›¤›nda sunucunuz da çal›flmaya bafllas›n istiyorsan›z: Baflla menüsünden Apache menü seçimlerinden Install Apache as a service’i seçin.

yaz›n ve [Enter]’a bas›n. Afla¤›daki gibi bir görüntüyle karfl›lafl›yorsan›z Apache ile ilk sayfan›z› sunmufl oluyorsunuz demektir. (Localhost sisteminizde lokal olarak çal›flan sunucuya ulaflmak için kulland›¤›m›z alan ad›d›r) fiimdi yapman›z gereken bu öntan›ml› (default) sayfay› kendi sayfan›zla de¤ifltirmek. Apache web sunucunun sayfalar› göstermek için kulland›¤› klasör
[Kurulum klasörü] . . . \Apache\htdocs

mesela,
C:\Program Files\Apache\htdocs

Sunucunuzu manual yani kendi iste¤inize ba¤l› olarak çal›flt›rmak istiyorsan›z: Baflla menüsünden Apache menü seçimlerinden Start Apache’yi seçin.

klasörüdür. Bu klasörün içine konacak her dosya sunucunuz taraf›ndan ulafl›labilir olacakt›r. Öncelikle ifle bu klasörde bulunan öntan›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://localhost’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 oluflturup bunlar› sunucunuzla ulafl›labilir hale getirebilirsiniz. Localhost’a gidildi¤inde sayfan›z›n ba¤lant› olarak de¤il de öntan›ml› olarak do¤rudan görünmesini istiyorsan›z sayfan›z›n ad›n› index.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çimlerinden Stop Apache’yi seçin. Apache’nin çal›flt›¤› siyah pencere kendili¤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.

M

erhabalar! Yeni Java dersimizde tekrar birlikteyiz. Önceki dersimizde hat›rlarsan›z Java'da metotlar›n nas›l kullan›ld›¤›n› ve yarat›ld›¤›n› ayr›nt›l› olarak inceleyerek, devam›nda da dizilerin metotlara parametre olarak gönderilmesine iliflkin birtak›m örnekler üzerinde çal›flm›flt›k. Bu örneklere iliflkin haz›r program dosyalar›n› da http://cs.bilgi.edu.tr/~erman/kodlar/ adresinde bulabilece¤inizi söylemifltim. 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 teker yazarak denedi¤inizi umuyorum. Bilinen örnekleri bile sab›rla yazmak inan›n çok fley ö¤retecektir. Bugünkü dersimizde art›k nesne yönelimli 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.

mekteyiz. Örne¤in "int a;" dedi¤imizde a isimli de¤iflkeni içerisinde tamsay›lar tutacak biçimde, "double b; " dedi¤imizde b isimli de¤iflkeni içerisinde virgüllü say›lar tutabilecek flekilde ya da "String c[]; " dedi¤imizde c isimli de¤iflkeni içerisinde String türünde de¤erler tutan bir dizi fleklinde yaratm›fl oluyoruz. Yani de¤iflkenleri bilinen nesne türlerinden bir tanesi cinsinden yarat›yoruz. ‹flte bugün ö¤renece¤imiz flekilde, s›n›f-

lar› yazarak önce yeni bir nesne türü yarat›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 da bir baflkas›n›n yaratm›fl oldu¤u bir s›n›f türünden yeni bir de¤iflken yaratabiliyor ve yine bu de¤iflkeni kullanabiliyoruz. Asl›nda bundan önceki derslerde, önceden yarat›lm›fl baz› s›n›flar› baz› zaten kullanm›flt›k. Örne¤in "JOptionPane" isimli s›n›fa ait "showMessageDialog" ya da "sho-

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

DegiskenTutan.java dosyas› 29 • CHIP Workshop > >

>>
S›n›f Nedir?

Java Serisi

wInputDialog" gibi metotlar› kullan›rken asl›nda bu s›n›f› kullanm›fl olduk.

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. iflleri üstlenecek birçok metot ve de¤iflkeni olsa da hepsinin amac› asl›nda görselli¤i sa¤lamakt›r. Yine benzer flekilde arka planda ba¤lant›lar› ayarlayan, kontrol eden birçok metot ve de¤iflken de a¤ ayarlar› için kullan›l›r. Bu durumda ayn› projeye iliflkin ama ayr› görevleri üstlenen tüm metot ve de¤iflkenleri bu iki ana s›n›f alt›nda toplamak hem organizasyonda hem de tasar›mda kolayl›k sa¤lar. Bu iki k›s›m birbirinden ba¤›ms›z tasarlanarak bir araya getirilebilir. Bu da projeye esneklik sa¤lar.

Bir s›n›f› kullanmak için için önce o s›n›f türünden nesne yaratmak gerekir.

S›n›flar›n Yarat›lmas›
Bundan önce yazd›¤›m›z örneklerde asl›nda biz hep bir s›n›f ve bu s›n›f›n içerisinde de birtak›m metod ve de¤iflkenler yarat›yor-

duk. flimdi yine örnek bir s›n›f yaratal›m. Bu s›n›f kendi içerisinde sadece bir de¤iflken tutsun ve bu de¤iflkenin de¤erini elde edebilecek ya da de¤ifltirebilecek baz› metodlar› olsun: DegiskenTutan.java dosyas›ndaki örnekte, bahsetti¤imiz bu s›n›f› yine s›n›f ile ayn› isimde olan "DegiskenTutan.java" dosyas› içerisinde yaratt›k ve kaydettik. Biz asl›nda burada "DegiskenTutan" isimli yeni bir nesne türü yaratm›fl oluyoruz. DegiskenTutan s›n›f›n›n 2. sat›r›nda yarat›lan "x" isimli bir global de¤iflkeni bulunmaktad›r. Bu de¤iflkenin global olmas›n›n nedeni yarat›ld›¤› yerin herhangi bir metodun içinde de¤il de en d›fl faliyet alan›nda

olmas›d›r. Bu nedenle s›n›f içerisinde tan›ml› di¤er tüm metodlar bu de¤iflkene eriflebilir ve de¤iflkeni kullanabilirler.

this Anahtar Sözcü¤ü
S›n›f içerisinde yaz›lm›fl olan "getX" isimli metod, bu "x" de¤iflkeninin içerisindeki de¤eri geri döndürmektedir. Yaln›z dikkat edilirse 9. sat›rda gerçekleflen bu geri döndürme ifllemi s›ras›nda sadece de¤iflkenin ad› de¤il, onun yerine "this.x" fleklinde bir kullan›m görmekteyiz. "this" anahtar sözcü¤ü özel bir anahtar sözcük olup noktadan sonra gelen de¤iflken isimlerinin s›n›fa ait oldu¤unu ifade etmektedir. Yani 9. sat›rda 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 cevab›n› verelim:

Yaz›lm›fl S›n›flar›n Kullan›lmas›
Baz› özel durumlar›n d›fl›nda, en genel biçimiyle bir s›n›f nesnesi ya da bildi¤imiz flekliyle bir s›n›f türünden de¤iflken, flu flekilde yarat›l›r:
SinifAdi degisken = new SinifAdi();

GenelSinif.java dosyas› < CHIP Workshop • 30 <

Mesela, az önce yazm›fl oldu¤umuz "DegiskenTutan" isimli s›n›f türünden bir de¤iflken de:

Java Serisi

<<

DegiskenTutan a = new DegiskenTutan();

fieklinde yarat›lmaktad›r. Bu yaratma ifllemini baflka bir s›n›f içerisinden yapabilirsiniz. Burada vurgulanmas› gereken en önemli nokta, yarat›lan her s›n›f de¤iflkeninin 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›rmaktad›r. A nesnesinin "x" de¤iflkeni ile b nesnesinin "x" de¤iflkeni art›k farkl›d›r. Ama ikisinin de bir "x" de¤iflkeni vard›r. Yine ayn› flekilde "a" nesnesi ile "b" nesnesinin "setX" ve "getX" metodlar› vard›r ama her metod kendi nesnesine ait olan "x" de¤iflkeni üzerinde ifllem yapabilir. flimdi "DegiskenTutan.java" dosyas› ile ayn› klasör içerisinde yer alan "GenelSinif" isimli yeni bir s›n›f daha yaratal›m ve bu yeni 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 dosyalar›n› yazm›fl oldu¤unuz dizin içerisine cd komutu yard›m›yla giriniz. Örne¤in bu dizin linux kullan›c›lar› için "/home/erman/kodlar" ya da windows kullan›c›lar› için "C:\kodlar" ise, dizin içerisine girmek için:
$cd /home/erman/kodlar

GenelSinif2.java dosyas›

çal›flt›ral›m:
java GenelSinif

Not: Burada görüyoruz ki "DegiskenTutan.java" dosyas› sadece derleniyor ancak GenelSinif.java gibi sonra da çal›flt›r›lm›yor. Bunun nedeni as›l çal›flan program›n "Ge-

nelSinif" olmas›, "DegiskenTutan" s›n›f›n›n ise sadece kullan›l›yor olmas›d›r. Çünkü "GenelSinif" s›n›f› içerisinde "main" metodu vard›r. Bununla ilgili ayr›nt›l› aç›klamay› yaz›n›n ilerleyen k›s›mlar›nda zaten bulabileceksiniz. Örne¤imizde 7. ve 8. sat›rlarda DegiskenTutan s›n›f› türünden "a" ve "b" isimli 2

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

MainParametreleri.java dosyas›

de¤iflken ya da iki "DegiskenTutan" s›n›f› nesnesi yarat›lmaktad›r. Daha sonra 9. sat›rda a nesnesinin "setX" metodu "a" nesnesinin "x" de¤iflkeni de¤erini 10, "b" nesnesinin "setX" metodu da "b" nesnesinin "x" de¤iflkeninin de¤erini 20 yapmaktad›r. Dikkat ederseniz "a" ve "b" nesneleri de "setX" ve "getX" metodlar›na sahiptir ve bu metodlar› kullanmak için nesne ad›ndan sonra "." iflareti ve sonra da metod ad›n› yazmak gerekir. "a" ve "b" nesnelerinin t›pk› "DegiskenTutan" s›n›f› gibi metodlara ve de¤iflkenlere sahip olmalar›n›n nedeni, bu nesnelerin de yarat›l›rken "DegiskenTutan" s›n›f› türünden yarat›lm›fl olmalar›d›r. 12. ve 13. sat›rlarda haz›rlanan "message" isimli String de¤iflkeni içerisine ekranda görülecek yaz› ve "getX" metodlar› yard›m›yla "a" ve "b" nesnelerinin "x" de¤iflkenlerinin içerisindeki de¤erler haz›rlanmaktad›r. En son olarak da "message" isimli de¤iflken içerisinde haz›rlanan bu son görüntü "JoptionPane" isimli s›n›f›n "showMessageDialog" isimli metodu yard›m›yla ekrana gönderilmektedir. Bu örnekten ç›karaca¤›m›z sonuç fludur; Genel olarak yaz›lm›fl s›n›flar›n kullan›labilmesi için öncelikle bu s›n›flar türünden de¤iflkenler yarat›larak bu s›n›flar›n birer kopyas› ya da nesnesi ç›kar›lmal› ve s›n›fa ait de¤iflken ve metodlar bu nesneler arac›l›¤›yla kullan›lmal›d›r. Ayr›ca gördü¤ümüz gibi bir s›n›fa ait metodlar kullan›l›rken s›n›f nesnesinden sonra "." iflareti ve daha sonra da metodun ad› yaz›lmaktad›r. Bu örne¤imizde "a" ve "b" isimli s›n›f nesneleri yarat›ld›ktan sonra, sahip olduklar› "x" de¤iflkenlerine "setX" metodu ile de¤erler verilmektedir. Peki e¤er biz daha nesneyi yarat›rken hemen o anda "x" de¤iflkenine de¤er vermek istersek ne olacak? Bunun için "bafllang›ç metodu" kavram›n› bilmemiz gerekir.

S›n›flar›n bafllang›ç metodlar› bizim bildi¤imiz anlamda metodlardan biraz daha farkl›d›r. Bu metodlar›n en önemli özelli¤i, bir s›n›f nesnesi yarat›l›rken otomatik olarak ça¤r›lmalar›d›r. Mesela "DegiskenTutan" s›n›f› türünden bir nesne yarat›l›rken asl›nda "new" anahtar sözcü¤ünden sonra bir metod ça¤r›ld›¤›n› görmekteyiz:
DegiskenTutan a = new DegiskenTutan();

‹flte bu "DegiskenTutan()" isimli metod, "DegiskenTutan" isimli s›n›f›n bafllang›ç metodudur. Peki o zaman bafllang›ç metodlar›n›n normal metodlardan fark› nedir? 1) Bafllang›ç metodlar› kesinlikle ve kesinlikle s›n›f ismiyle ayn› olmak zorundad›r. E¤er bafllang›ç metodunun ismini verirken s›n›f isminden farkl› bir isim kullan›rsan›z bu metod art›k baflka bir metod olarak kabul edilir. Örne¤in: DegiskenTut -> Yanl›fl. S›n›f ismi DegiskenTutan o halde bafllang›ç metodunun ismi bu olamaz Degiskentutan -> Yanl›fl. S›n›f isminde T harfi de büyük. ‹sim, büyük küçük harf baz›nda da ayn› olmak zorundad›r. 2) Bafllang›ç metodlar› geri dönüfl de¤erine sahip de¤ildir. Yaln›z burada geri dönüfl de¤eri void demek istemiyorum. Bafllang›ç metodlar›n›n geri dönüfl de¤eri gibi bir kavramlar› yoktur. void ile yok baflka anlamlara gelir. 3) Bir s›n›f›n birden fazla bafllang›ç metodu olabilir. Bütün bafllang›ç metodlar› da s›n›f ismiyle ayn› olmak zorundad›r ancak her birinin parametreleri birbirlerinden farkl› olmak zorundad›r. Biz bafllang›ç metodlar›n› genelde bir s›n›f türünden bir nesne yarat›rken, bu nesnenin de¤iflkenlerine birtak›m ilk de¤erler

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 otomatik olarak bizim yerimize bofl bir hayali bafllang›ç metodu yazar ve onu ça¤›r›r. E¤er yazm›flsak bizim yazd›¤›m›z bafllang›ç metodunu ça¤›rmaktad›r. flimdi tüm bu anlatt›klar›m›z› "DegiskenTutan" s›n›f›m›za bafllang›ç metodlar› ekleyerek irdeleyelim. Ama bu sefer "DegiskenTutan" ve "GenelSinif" isimli s›n›flar› "DegiskenTutan2" ve "GenelSinif2" olarak de¤ifltirelim. Tabi ayn› de¤iflikli¤i dosya isimlerinde de yapmay› unutmayal›m: Bu örnekte görüyoruz ki; "GenelSinif2" dosyas›n›n 7. sat›r›nda, "a" isimli "DegiskenTutan2" türünden s›n›f de¤iflkeni, "DegiskenYutan2" s›n›f›n›n 5. sat›r›nda tan›mlanan bofl olan bafllang›ç metodu ile yarat›l›yor ve bu metodun içerisinde de "a" nesnesinin "x" de¤iflkenine 0 de¤eri veriliyor. Ancak "GenelSinif2" çerisinde 8. sat›rda yarat›lan "b" isimli ve "DegiskenTutan2" türündeki nesne, "DegiskenTutan2" isimli s›n›f›n 9. sat›rda tan›mlanm›fl ve int parametre alan bafllang›ç metoduyla yarat›ld›¤› için bu "b" nesnesine ait olan "x" de¤iflkeni nesne yarat›l›rken verilen 2 de¤erini al›yor. Bu örnekte, bir s›n›f türünden nesne yarat›l›rken yap›lmas›n› istedi¤imiz birtak›m ilk ifllemleri bafllang›ç metodlar› yard›m›yla yapt›rabildi¤imizi görüyoruz. NOT: Bafllang›ç metodlar› sadece nesne yarat›l›rken ça¤r›l›r. Baflka bir zamanda bu metodlar›n ça¤r›lmas›na izin verilmez.

main Metodu
fiu ana kadar dikkat ederseniz "main" metodu ile ilgili çok az ayr›nt›dan bahsettim. Asl›nda bu metod da birtak›m özelliklere sahip özel bir metoddur. flimdi yukar›da yapm›fl oldu¤umuz örneklere bir göz atman›z› istiyorum. Bu örnekler de "GenelSinif" isimli s›n›f içerisinde "main" metodu varken "DegiskenTutan" isimli s›n›f›n içerisinde böyle bir metod yok. Ama her iki örnek de düzgün bir flekilde çal›flabiliyor. Bunun nedenini flöyle aç›klayal›m: Bu ana kadar gördük ki bir s›n›f nesnesi ilk önce yaz›lmakta ve daha sonra da kullan›lmaktad›r. Ancak kullan›lmadan önce tüm nesneler öncelikle "javac" komutu ile derlenmelidir. ‹flte bir java dosyas›n›n "javac" ile derlenmesi iflleminden sonra bir de "java" komutu ile çal›flt›r›labilmesi için, o java dosyas› (ya da s›n›f›) içerisinde "main" metodu olmas› gerekir. Yani çal›flt›r›labilir s›n›flar›n main metodunu sahip olmalar›

S›n›flar›n Bafllang›ç Metodlar›:
< CHIP Workshop • 32 <

Java Serisi

<<

gerekir. Aksi takdirde
java <Sinif_adi>

Bu flekilde s›n›f› çal›flt›rd›¤›n›zda ekranda flöyle bir ç›k›fl göreceksiniz.
1. parametre:bir 2. parametre: iki

komutundan sonra ekranda afla¤›daki gibi "main" metodunun bulunamad›¤›na dair bir mesaj ile karfl›lafl›rs›n›z:
"java.lang.NoSuchMethodError: main"

Ancak "DegiskenTutan" gibi sadece baflka bir s›n›f içerisinde kullan›lmak üzere tasarlanm›fl s›n›flar do¤rudan çal›flt›r›lmayaca¤› için, onlar›n içerisinde main metodu olmas›na gerek yoktur. Bu tür s›n›flar›n yukar›daki örnekte de görüldü¤ü gibi sadece derlenmesi, kullan›labilmeleri için yeterli olacakt›r. Özetle; yazd›¤›m›z programlarda birbirinden farkl› görevleri üstlenmifl birçok s›n›f› bar›nd›ran java dosyalar› ve hepsini en son olarak tek çat› alt›nda toplayacak ve as›l program›n çal›flmas›n› sa¤layacak genel bir s›n›f›m›z olacakt›r. Ve tüm bu s›n›flar içerisinde sadece ana program› çal›flt›racak olan bu genel s›n›f içerisinde "main" metodu olmal›d›r. Di¤er s›n›flar› kullanabilmeniz için, genel s›n›f da dahil olmak üzere hepsini java ile derlemelisiniz. Ancak program› çal›flt›rmak için sadece genel s›n›f› java komutu ile çal›flt›rman›z yeterlidir. Sonuç olarak; bir s›n›f java ile çal›flt›r›ld›¤› zaman, otomatik olarak içerisindeki main metodu ça¤r›lacakt›r. E¤er s›n›f içerisinde main metodu yoksa, böyle bir s›n›f "javac" ile derlenebilir ancak "java" ile çal›flt›r›lamaz!

‹flte burada, java komutu ile "MainParametreleri" s›nf›n› çal›flt›r›rken s›ras›yla verdi¤iniz "bir" ve "iki" isimli bu iki String de¤eri, main metodunun pototipinde tan›mlanm›fl olan "arg" isimli String dizisine at›lm›flt›r. "main" metodunun paramtresi olan bu "String arg[]" dizisi bu örnekte oldu¤u gibi bir s›n›f çal›flt›r›l›rken kullan›c›n›n vermek istedi¤i parametreleri al›r ve daha sonra program içerisinde kullan›labilmesi için saklar. Örnek program›m›z›n 5. ve 6. sat›rlar›nda "arg[0]" ve "arg[1]" ile bu girilen parametreleri kullanabildi¤imzi görmekteyiz. Buradaki kullanma fleklimiz bu parametreleri sadece ekrana yazmak gibi anlams›z bir ifllem gibi görünse de daha sonra ifle yarar flekillerde kullanabilece¤imizi düflünebiliriz.
1. parametre: bir 2. parametre: iki

ve de¤iflkenler tutuyor ve daha sonra biz de bu s›n›f türünden nesneler yaratarak bu metod de¤iflkenleri kullanabiliyoruz. Bazen bir s›n›f içerisinde yaz›lan metod ya da de¤iflkenleri sadece s›n›f›n içerisinde kullanmak isteyebiliriz. Yani baflka bir yerde bu s›n›f türünden yarat›lan bir de¤iflken ile kullanmayaca¤›m›z ancak s›n›f›n kendi içinde kullan›lmas› gereken metod ve de¤iflkenler olabilir. Bunu anlamak için "DegiskenTutan" s›n›f›na tekrar dönelim. Biz "DegiskenTutan" s›n›f› türünden bir "a" nesnesi yaratt›¤›m›zda "a" nesnesi kendisine ait olan "x" de¤iflkenini:
a.x = 10;

fieklinde de¤ifltirebilir. Ancak biz bu flekilde bir müdaheleye izin vermek istemiyor olabiliriz. E¤er "a" nesnesinin "x" de¤iflkeni de¤ifltirilecekse, böyle bir ifllemin "setX" gibi bir metodla yap›lmas›n›, de¤iflkene "a.x" diyerek do¤rudan eriflilememesini istiyor olabiliriz. ‹flte bu durumlarda s›n›f içerisine "x" de¤iflkeninin bafl›na bir "private" anahtar sözcü¤ü eklememiz gerekir. Yani "DegiskenTutan" s›n›f›nda "x" de¤iflkeninin bildirimi:
class DegiskenTutan { private int x; public Degiskentutan() { ...

S›n›flar›n public ve private Metod ve De¤iflkenleri fiu ana kadar belirli iflleri yapabilmek amac›yla metod ve de¤iflkenleri birarada tutan nesneleri yaratmay› ve kullanmay›, yani s›n›flar›n genel olarak kullan›m›n› görmü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›¤› parametrelerdir. 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 "MainParametreleri.java" isimli s›n›f› yaz›p kaydediniz: 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›flt›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. Ancak s›n›f içerisindeki bir metod "x" de¤iflkenine yine de ulaflabilir. E¤er genel olarak özetlemek gerekirse; s›n›flar içerisinde bildirilen "private" türündeki de¤iflkenlere d›flar›dan eriflilemez, ancak s›n›f›n di¤er metodlar› ile eriflilebilir. Bu durum s›n›f›n private metodlar› için de geçerlidir. E¤er s›n›f yaz›l›rken bir metodun bafl›na "private" anahtar sözcü¤ü eklenirse, bu metod da art›k d›flar›dan eriflilemez, sadece s›n›f içerisindeki di¤er metodlar taraf›ndan kullan›labilir bir hale gelir. Mesela "DegiskenTutan" isimli s›n›fa afla¤›daki gibi bir "private" metod ekleyelim:
class DegiskenTutan { private int x; ... private void resetX() { this.x = 0; } ... public setX(int c) { this.resetX(); this.x = c; } }

GenelSinif3.java dosyas›

bu "private" de¤iflken ya da metodlara eriflebilirler. Tüm bunlar›n bir sonucu olarak da, s›n›flar yaz›l›rken yarat›lan "public" metod ve de¤iflkenler, s›n›f nesneleri arac›l›¤›yla d›flar›dan eriflilebilirler.

Statik Metod ve De¤iflkenler
fiu ana kadar ö¤rendiklerimizi ele ald›¤›m›zda neden JOptionPane s›n›f›n›n showMessage isimli metodunu kullanmak için JOptionPane s›n›f› türünden bir nesne yaratm›yoruz? diye sormam›z gerekir. Baz› metodlar yaz›ld›klar› s›n›flar içerisinde statik olarak yaz›l›rlar. Bu türden statik olarak yaz›lm›fl metodlar› kullanmak için s›n›f nesnesi yaratmak gerekmez. Bu metodlar› kullanmak için yaz›ld›klar› s›n›f isminden sonra "." iflareti koyarak do¤rudan metodu ça¤›rabilirsiniz. Ancak tahmin edersiniz ki bir metod statik olarak yaz›lm›flsa genel amaçl› bir metod olmal›d›r. Mesela JOptionPane isimli s›n›f›n showMessageDialog ya da showInputDialog isimli metodlar› genel amaçl› olup her zaman kullan›labilmektedir. Ekrana bir mesaj penceresi ç›karmak ya da kullan›c›dan bir girifl de¤eri almak için bir nesne yaratmaya gerek yoktur. Siz de kendi tasarlad›¤›n›z s›n›flar içerisinde bu flekilde genel amaçl› metodlar yazmak isterseniz bunlar› statik olarak yaratabilirsiniz. Bir metodun statik olarak yarat›labilmesi için, metodun prototipinin bafl›na "static" anahtar sözcü¤ü eklenir. Afla¤›daki iki örne¤i yaz›p kaydediniz: Daha sonra da afla¤›daki s›ra ile derleyip program› çal›flt›r›n›z:
javac StatikTest.java javac GenelSinif3.java java GenelSinif3

Bu flekilde "private" olarak bildirilmifl "resetX" metodu art›k bu s›n›f türünden yarat›lm›fl nesneler ile d›flar›dan kullan›lamaz. Yani afla¤›daki gibi bir kullan›m geçersizdir:
class BaskaSinif { public static void main(String arg[]) { DegiskenTutan a = new p DegiskenTutan(2); a.resetX(); /* YANLIfi! resetX private bir metoddur Bu flekilde d›flar›dan kullan›lamaz.*/ ... } }

En son örnekte gördü¤ünüz gibi "a.resetX()" gibi bir ça¤r›m geçerli de¤ildir. Çünkü "DegiskenTutan" s›n›f›n›n "resetX" isimli metodu "private" bir metoddur. Bu nedenle, bu s›n›f türünden yarat›lm›fl olan "a" nesnesi arac›l›¤›yla bu metoda d›flar›dan eriflilemez. Ancak önceki örnekteki gibi "resetX" metodunu s›n›f›n di¤er bir metodu olan "setX" metodu kullanabilmektedir. De¤iflken ya da metodlar›n "private" ya da "public" olmas›, bu metod ya da de¤iflkenlerin sadece d›flar›dan kullan›m› etkileyen bir durumdur. S›n›f içerisindeki di¤er metodlar
< CHIP Workshop • 34 <

Bu örne¤i çal›flt›rd›¤›n›zda ekrana iki tane mesaj›n geldi¤ini göreceksiniz. Bu mesajlardan ilki, "GenelSinif3" isimli s›n›f›n 5. sat›r›nda, "StatikTest" s›n›f›n›n statik meto-

du do¤rudan ça¤r›larak ekrana gelmifltir. Gördü¤ümüz gibi, bir s›n›f›n statik metodunu kullanmak için ilk önce o s›n›f türünden bir nesne yaratmaya gerek yoktur. Çünkü statik metodlar s›n›f ismi ve sonra ". " iflareti yaz›ld›ktan sonra do¤rudan ça¤r›labilirler. Ancak ikinci mesaj "StatikTest" s›n›f›n›n "kayitliMesaj" isimli ve statik olmayan metodu sayesinde ekrana geldi¤inden, bu metodu kullanabilmek için ilk önce "StatikTest" s›n›f› türünden bir nesne yarat›lmas› ve metodun da bu nesne arac›l›¤›yla ça¤›r›lmas› gerekir. Uygulama Sorusu: ‹çerisinde tarih tutan ve tarihlerle ilgili ifllemler yapabilen metotlar› bar›nd›ran bir s›n›f tasarlay›n›z. Yap›lmas› gereken ifllemler iki tarihin birbiriyle k›yaslanmas›, tarih üzerine belirli bir gün say›s› eklenebilmesi, tutulan tarihin gösterilmesi, tutulan tarihin de¤ifltirilmesi fleklinde olmal›d›r. Bu ifllemlerin her biri için s›n›f içerisinde bir metot tasarlaman›z gerekmektedir. Böyle bir s›n›f›n günü, ay› ve y›l› tutan de¤iflkenleri olmal›d›r. S›n›f› tasarlad›ktan sonra, bu s›n›f› kullanan ve bu s›n›f türünden örnek nesneler yaratarak bunlar› kullanan baflka bir genel s›n›f yaz›n›z ve tasar›m›n›z› bu nesneler üzerinde test ediniz. Uygulaman›n cevab›n› bir sonraki dersimizde bulabilirsiniz. Nihayet bu dersimizin de sonuna gelmifl bulunuyoruz. Nesne yönelimli programlama tekni¤inin özünü oluflturan s›n›flar› ve s›n›flar›n kullan›m›n› ö¤rendi¤imiz bu dersimizi iyice sindirmenizi ve örnekleri de tekrar yazarak kendi bafl›n›za denemenizi ›srarla öneririm. Daha önce de söyledi¤im gibi derslerde kulland›¤›m›z tüm örneklerin yaz›lm›fl dosyalar›n› http://cs.bilgi.edu.tr/~erman/ kod lar adresinde bulabilirsiniz. Konuyla ilgili soru, görüfl ve önerileriniz için postalar›n›z› bekliyorum. ‹yi çal›flmalar.. Sevgi ve sayg›lar›mla,
Erman Aykaç ‹stanbul Bilgi Üniversitesi Bilgisayar Bilimleri Bölümü

Sign up to vote on this title
UsefulNot useful