You are on page 1of 13

Web Programcl

<<

MySQL
Web sitenizde veritaban olarak hala MySQL kullanmyor musunuz? Bir numaral ak kaynak veritaban sunucusuna gei yapmann zaman geldi.Framelerin kullanl bir trevi olan iframelerle web sitenize kullanl zellikler katabilirsiniz.

eritabanndan faydalanacak web uygulamalarnz iin seebileceiniz farkl veritaban programlar olsa da en geni kullanml profesyonel programn MySQL olduu aikar. zellikle Windows sunucularnda kullanm basit olduu iin amatr programclar tarafndan tercih edilen MS Access temelde bir masast veritaban program olup ayn anda ilem yapma konusunda ciddi skntlar bulunmakta. Bu bakmdan ticari ve profesyonel web sitelerinizde MS Access yerine daha iyi performansa sahip daha gvenilir bir veritaban programna ihtiyacnz olacaktr. Sahip olduu performansa gre dk lisans creti ve ak-kaynak olmas MySQLi bu alanda oktan bir web standart yapt bile.

Websitemde MySQL kullanmak iin ne yapmalym?


Web sitenizde MySQL veritabanndan faydalanmak iin hosting hizmeti veren sunucuya MySQLin ykl olmas gerekir. Mesela bir hosting hizmetinden faydalanmay dnyorsanz alacanz pakette MySQL yer almaldr. Eer web aplikasyonlarnz kendi makinenizde yazp test etmek istiyorsanz bu durumda kendi makinenize de MySQLi yklemeniz gerekir.

MySQLi makineme nasl yklerim?


MySQLin kurulumu ve ynetimi, yazlmn versiyonuna ve altnz iletim sistemine gre deiiklik gsterebilir. MySQLin kullanm biraz kompleks olsa da performans iin buna deecektir. Burada 3.23 srmnn Windowsa kurulumunu rnek olarak vereceiz. Dileyenler www.mysql.com/downloads/index.html adresinden

Veritaban nedir?
Web iin veritabannn nemi
Veritabanlar (databaseler), benzer verilerin dzenli bir ekilde saklanabilmesine olanak salayan yazlmlardr. Veritabanlar, yeni veri ekleme, silme ya da arama yapma gibi saklanan verilerin ynetilebilmesine de olanak tanrlar. Bylece verilerinizin orijinal halini tek bir kaynakta bulundurup, ihtiyacnz olacak tm dkmleri bu kaynaktan oluturursunuz. Veritaban olarak kullanabileceiniz yazlmlar balca iki ksma ayrlabilirler. Bunlardan birincisi bir nceki blmde de uyguladmz zere verileri saklamak iin metin tabanl ASCII (flat-file database) dosyalarndan faydalanmak. Bu tr metinsel dosyalarda verileri birbirinden ayrmak amacyla ayra (delimiter) ad verilen zel karakter ya da karakter gruplarndan faydalanlr. Bu tarz dosyalar kk apl veritabanlar oluturmakta kullanlabilir ancak bu dosyalarla kompleks veritabanlar ilemlerini yapmak mmkn deildir. Dier veritaban yazlmlar ise likili Veritabanlar (relational databases) olarak adlandrlan ve sadece veri saklama ve ynetme amacyla gelitirilmi profesyonel yazlmlardr. 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. Veritabanlarnn web asndan nemine deinecek olursak, dinamik web ieriklerinin ve bu ynde en etkin uygulamalarn temelini veritabanlarnn oluturduunu rahatlkla syleyebiliriz. Web uygulamalar denince en nde gelen olgulardan biri erik Ynetimidir (Content Management). Gnmzde en iyi hazrlanm web uygulamasnn ierik ynetimini site yneticisine en fazla brakabilen uygulama olduunu syleyebiliriz. Tek bir kaynak dosyada bulunan veriye annda ulalabilmesi ve elde edilen bilginin farkl ortamlarda kullanlabilmesini amalayan uygulamalarn tm ancak ve ancak veritaban kullanmakla mmkndr.

116 CHIP Workshop > >

>>

Web Programcl

MySQLin sistemlerine uygun diledikleri bir srmn indirebilirler. 3 MySQLin ZIPli kurulum dosyasn bir ZUP programyla an ve ieriini bilgisayarnzda herhangi geici bir klasre yerletirin. 3 Bu klasrde oluan Setup.exe dosyasn altrn. MySQLi kurmak istediiniz klasr sein (Mesela C:\mysql dizinine). 3 Kurulum sihirbaz tercihleriniz dorultusunda MySQLi bilgisayarnza kuracaktr. 3 C:\mysql\bin klasr iindeki winmysqladmin.exe dosyasn altrdnzda MySQLin grafiksel arayzl yneticisi alacaktr. MySQL yneticisi (WinMySQLadmin) bir kereye mahsus olmak zere kullanc ad ve ifre girmenizi isteyecek. Bundan sonra MySQL sunucunuz hem alacak hem de sisteminize servis olarak eklenecek ve ekrannzn sa alt kesine trafik lambas simgesi gelecek. 3 Bu simgenin zerine sa tklanp Show me seildiinde WinMySQLadmin penceresi grnecektir. 3 Sa alt kedeki trafik lambas yeil yand srece sisteminizdeki MySQL veritaban sunucusu hizmette demektir. Eer deilse simgenin zerine sa tklayn, Win NT zerine gelin ve Start Servicei sein. Artk MySQLi sisteminize kurmu oldunuz demektir. Bundan sonra MySQL ile baz denemeler yapmaya balayabiliriz. MySQLadmini veya MySQL-Front ya da phpMyAdmin gibi harici yazlmlar kullanarak veritabannzda temel ilemleri gerekletirebilirsiniz. Biz bu ay ncelikle direkt olarak komut konsolu yardmyla veritaban oluturmay greceiz. Komut satryla mesela (katalog isimli) yeni bir veritaban ve bu veritaban iinde (urunler isimli) yeni bir tablo oluturmak iin aadaki kodlar kullanabiliriz. Tablo
katalog isimli yeni bir veritaban oluturduk

iinde tamsay cimsinden urunNo adyla ve metin cinsinden urunTanim adyla birer alan (stun) oluturacaz.
C:\>cd mysql\bin C:\mysql\bin>mysqladmin create katalog C:\mysql\bin>mysql

u an MySQL promptu iindeyiz. Artk MySQL sunucumuza direkt komutlar gnderebiliriz.


mysql> show databases;

Sistemdeki veritabanlarn gster. Bunlardan mysql isimli olan

kurulum aamasnda oluan programmzn kendi veritaban olup bu ismi kendi oluturacamz veritabanlarnda kullanamayz.
mysql>use katalog

Sistemdeki veritabanlarndan katalog isimli olann kullan.


mysql>create table urunler(urunNo int, urunTanim text); Query OK, 0 rows affected (0.12 sec)

Katalog iine urunler isimli bir tablo olutur. Tablomuzun iki alan olsun: tamsay veri cinsinden urunNo ve tekst veri cinsinden urunTanim.
< CHIP Workshop 117 <

Web Programcl

<<

Dilerseniz show tables ile var olan tablolar grebilir, explain urunler ile tablonuzun ayrntlarn grntleyebilirsiniz

dizininde oluacak katalog.sql isimli dosyaya kaydedilecektir. Sql uzantl dosya sadece veritabannzdaki verileri deil veritabannn yapsn da kopyalar. Bylece ihtiya duyulan zamanlarda bu dosya kullanlarak veritabanmzn ayns yeniden oluturulabilir. Biraz nce oluturduumuz veritabanmzn kaynak dosyasnn ierii una benzer olacaktr. Katalog.sql
# MySQL dump 8.16 #

exit ile MySQL promptuntdan 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

MySQLe direkt olarak komut gndermek iin SQL (Structured Query Language) kullanlr. imdilik bu kadar MySQL denemesi yeterli. Web programclar sklkla veritaban ilemlerini ya bizzat programladklar ya da bu amala hazrlanan sunucu tarafl aplikasyonlar ile gerekletirirler. phpMyAdmin bu tarz uygulamalardan birisi olup web tabanl grafiksel arayz ile MySQL veritaban ilemlerini gerekletirmede ok daha fazla kolaylk salar. nmzdeki saylarda phpMyAdmin programn sistemimize nasl kuracamz greceiz. MySQLe dnersek, MySQLin kullanm ve kontrol ile ilgili daha detayl bilgiyi MySQLin dokmantasyonunda bulabilirsiniz. MySQL ile ilgili blm kapamadan nce nemli bir uygulamadan da bahsetmeden gemeyelim.

Kaynak dosyadan veritaban oluturma


Hi umulmasa da sunucudaki veritabannzn bana bir i gelirse, ya da veritabannzn aynsn farkl bir ortamda da oluturmak isterseniz yedeklenme srasnda oluan kaynak dosyasn kullanabilirsiniz. Bu durumda yapmanz gereken, nce yeni veritabanmz oluturmak
mysql> create database katalog2;

Veritaban yedekleme
Oluturmu olduunuz veritabanlar sistemde kaytldr. Baz durumlarda bu kaytlardan yedek alnmas gerekebilir. Bu durumda MySQLe, dilemi olduunuz veritabannn kopyasn metin tabanl bir dosyaya almasn syleyebilirsiniz.
C:\mysql\bin> mysqldump katalog > katalog.sql

Bu durumda katalog isimli veritabannzn ierii C:\mysql\bin

118 CHIP Workshop > >

>>

Web Programcl

Daha sonra da kaynak dosyadan yedeklenmi veritaban ieriimizi yeni veritabanmza eklemek.
C:\mysql\bin> mysql katalog2 < katalog.sql

nemlisi ise gvenlik ile ilgili husustur. Ak kaynak yazlmlarn kodlar ortada olduundan programn alt anda ne gibi ilerle megul olduu da yazlm gelitiriciler iin aikardr. Bu yzden Alman Savunma Bakanl nternet zerinden grme yapt iletim sistemini gvenli olmad gerekesiyle Microsoft Windowstan Unixe almt hatrlarsanz. Apache web sunucusunun gvenlik asndan bir baka avantaj ise Microsoft sunucularna gre daha az saldrya maruz kalmas olarak gsterilebilir. Bir aralar hatta web Microsoft sunucularn bizzat Microsoft iin ak bir arka kapsnn bulunduu, bu sunucularn daha fazla saldrya maruz kalmasndan dolay sigorta irketlerinin daha fazla prim istedii gndeme gelmiti. yle ya da byle zellikle Unix zerinde alan Apache sunucular daha fazla tercih edilmekte olduunu syleyebiliriz. Ekim 2003te yaplan bir aratrma nternet zerindeki sunucularn % 64nn Apache olduunu ortaya kard.

Dilerseniz yeni veritabanmz katalog2nin ilk veritabanmz katalogun ayns olduunu inceleyebilirsiniz. Bir aplikasyonun en nemli parasnn sahip olduu bilgi olduunu dnrsek, sanrm veritaban yedekleme ve yedeklenmi dosyadan yeni veritaban oluturmann ne derece hayati nem tadn tahmin edersiniz.

Neden Apache?
Balangta Apache isminin A patchy server yani sabit bir kod zerine eklenen yamalardan oluan bir sunucu olduundan bu ekilde adlandrld syleniyordu ama Apache.org, programn dayanklln ne kararak Apache yerlileri kabilesine atfen bir sayg ifadesi olarak bu ismi tercih ettiini sylyor. Ne diyelim? Bizim iin sakncas yok.

Bilgisayarnz bir web sunucuya dntrn


Apache web sunucunun kurulumu Sadece HTML ve JavaScript, DHTML veya Flash gibi istemci tarafl uygulamalar kullandnz web sayfalarnz kendi bilgisayarnzda gelitirip kontrol etmenizde, hazr olduklarnda ise sunucunuza transfer etmenizde hi bir zorluk yok. Fakat eer ASP, JSP veya PHP gibi sunucu tarafl programlama yapyorsanz bilgisayarnzda bir sunucu ortam oluturmak gerekecektir. Bylelikle yazacanz aplikasyonlar transfer etmeden nce test edebilirsiniz. Bu saymzda Apache web sunucusunu bilgisayarmza nasl kurup ayarlarn nasl yapacamz greceiz. 3 ncelikle yine programn sisteminize uygun bir versiyonunu indirmekle ie balamak gerekiyor. Apache web sunucunun dosyalarna http://httpd.apache.org/download.cgi adresinden ulaabilirsiniz.

Apache Web Server

Bilgisayarnzdaki dosyalar bir web sunucu ile paylama amak iin 1 numaral web sunucusu ile almaya hazr msnz? 1996dan bu yana internetin en popler web sunucusu olan Apache oumuzun kulana yabanc deil aslnda. Farkl platformlarda, ar ilem trafii altnda sorunsuzca alabilmesi, 3.parti uygulamalarla uygun hale getirilebilmesi gibi zellikler bir tarafa Apachenin en ok tercih edilen web sunucu olmasnda phesiz bedava ve ak kaynak olmasnn ok byk etkisi var. Gerekte Apache bir firmann rn olmayp farkl ortamlardaki yazlm gelitiriciler tarafndan canl tutulan bir cemiyet projesi.

Bir yazlmn ak kaynak olmas bir avantaj m?


phesiz evet. Ak kaynak yazlmlar, kaynak kodlar yani program oluturan ve nasl altn gsteren kodlarn herkesin paylamna ve/veya katlmna sunulan yazlmlardr. Dilenirse yazlmn kendisine programclar ilaveler (patch - yama) katabilir. Bundan daha
< CHIP Workshop 119 <

3 Apache kurulum dosyasna ift tklayarak kuruluma balayabilirsiniz.

Web Programcl

<<

3 Apache kurulum srasnda program dosyalarn nereye amak istediini soracak. Dilediiniz bir yeri belirleyebilirsiniz. (Mesela C:\Program Files\Apache )

Apachenin ayarlar
Apache belli bir grafiksel kullanc arayzne sahip olmadndan ayarlarn yapmak son kullanc iin biraz gri gelebilir. Apache ile ilgili ayarlar [Kurulum dizini]..\Apache\conf klasrnde bulunan httpd.conf dosyasndan yaplr.

3 Typical sein ve ilerleyin 3 Kurulum sihirbaz seimlerinize uygun olarak Apacheyi bilgisayarnza kuracaktr. 3 httpd.conf dosyasn Notepad gibi bir metin editrnde an
Dosyada bu blm bulun

120 CHIP Workshop > >

>>
Bu ekilde deitirin

Web Programcl

Bu durumda Apache sunucunuz bir pencere iinde almaya balayacaktr.

Bu pencere ak olduu mddete sunucunuz alyor demektir. Bu pencereyi grmek istemiyorsanz kapatmayn, sadece kltn.

Apachede ilk sayfanz


Apache sunucunuz alr durumdayken bir tarayc penceresi an ve adres ubuuna Artk Apache web sunucunuz almaya hazr.
http://localhost

Apache Web Sunucunun altrlmas


Windows platformunda Apache web sunucunuzu diler service olarak dilerseniz manual olarak altrabilirsiniz. Sunucunuzu service olarak altrmak iin, yani bilgisayarnz aldnda sunucunuz da almaya balasn istiyorsanz: Bala mensnden Apache men seimlerinden Install Apache as a servicei sein.

yazn ve [Enter]a basn. Aadaki gibi bir grntyle karlayorsanz Apache ile ilk sayfanz sunmu oluyorsunuz demektir. (Localhost sisteminizde lokal olarak alan sunucuya ulamak iin kullandmz alan addr) imdi yapmanz gereken bu ntanml (default) sayfay kendi sayfanzla deitirmek. Apache web sunucunun sayfalar gstermek iin kulland klasr
[Kurulum klasr] . . . \Apache\htdocs

mesela,
C:\Program Files\Apache\htdocs

Sunucunuzu manual yani kendi isteinize bal olarak altrmak istiyorsanz: Bala mensnden Apache men seimlerinden Start Apacheyi sein.

klasrdr. Bu klasrn iine konacak her dosya sunucunuz tarafndan ulalabilir olacaktr. ncelikle ie bu klasrde bulunan ntanml index.... sayfalarn silmekle ya da baka bir yere kaldrmakla balayabilirsiniz. Bir web sayfas oluturun ve buna dilediiniz ismi vererek . . . \Apache\htdocs klasrne yerletirin. Web taraycnzla http://localhosta gittiinizde bu sefer klasrn ieriini grebilirsiniz. Buna kendi sayfanzn linki de dahil. Sayfanz grntlemek iin zerine tklayabilirsiniz. Dilerseniz sunucu klasr iine yeni klasrler de oluturup bunlar sunucunuzla ulalabilir hale getirebilirsiniz. Localhosta gidildiinde sayfanzn balant olarak deil de ntanml olarak dorudan grnmesini istiyorsanz sayfanzn adn index.html olarak deitirin.

Apache web sunucunun kapatlmas


Apache web sunucusunu kapatmak iin Apachenin alt siyah pencereyi kapatmayn. Balat mensnden Apache men seimlerinden Stop Apacheyi sein. Apachenin alt siyah pencere kendiliinden kapanacaktr. Sunucunuz hayrl olsun. Gelecek ay Apache web sunucumuza PHPyi kuracaz. Numan Pekgz numanp@chip.com.tr

< CHIP Workshop 121 <

Java Serisi

<<

JAVA ile Programlama Blm 5


Bu ayki Java yazmzda nesne ynelimli programcln temel talarndan olan snflar konusunu etraflca ele alacak ve rneklerle inceleyeceiz.

erhabalar! Yeni Java dersimizde tekrar birlikteyiz. nceki dersimizde hatrlarsanz Java'da metotlarn nasl kullanldn ve yaratldn ayrntl olarak inceleyerek, devamnda da dizilerin metotlara parametre olarak gnderilmesine ilikin birtakm rnekler zerinde almtk. Bu rneklere ilikin hazr program dosyalarn da http://cs.bilgi.edu.tr/~erman/kodlar/ adresinde bulabileceinizi sylemitim. Bundan sonraki dersler iin de yine ayn ekilde kodlar bu adreste bulundurmaya alacam. nceki derslerimizi iyice tekrar ettiinizi ve verilmi rnekleri de teker teker yazarak denediinizi umuyorum. Bilinen rnekleri bile sabrla yazmak inann ok ey retecektir. Bugnk dersimizde artk nesne ynelimli programcln en nemli kavram olan snflar inceleyeceiz. nmzdeki derlerin birou artk bu snflar kullanmak ve gelitirmek zerine olacak. Bu yzden burada basitletirerek anlatmaya altm bu temel kavramlar iyice anlamaya ve irdelemeye almanz neririm.

mekteyiz. rnein "int a;" dediimizde a isimli deikeni ierisinde tamsaylar tutacak biimde, "double b; " dediimizde b isimli deikeni ierisinde virgll saylar tutabilecek ekilde ya da "String c[]; " dediimizde c isimli deikeni ierisinde String trnde deerler tutan bir dizi eklinde yaratm oluyoruz. Yani deikenleri bilinen nesne trlerinden bir tanesi cinsinden yaratyoruz. te bugn reneceimiz ekilde, snf-

lar yazarak nce yeni bir nesne tr yaratyor ve daha sonra da yaratm olduumuz bu "nesne tr cinsinden" snf deikenleri yaratarak bu snflar kullanabiliyoruz. Ya da bir bakasnn yaratm olduu bir snf trnden yeni bir deiken yaratabiliyor ve yine bu deikeni kullanabiliyoruz. Aslnda bundan nceki derslerde, nceden yaratlm baz snflar baz zaten kullanmtk. rnein "JOptionPane" isimli snfa ait "showMessageDialog" ya da "sho-

Snf kavram:
Biliyoruz ki genel anlamda program yazabilmek iin eitli deikenler yaratp kullanyoruz. Yaratlan her deikenin bir tr olduunu ve yaratldktan sonra bu deikenlerin de artk birer nesne olduunu gr-

DegiskenTutan.java dosyas 29 CHIP Workshop > >

>>
Snf Nedir?

Java Serisi

wInputDialog" gibi metotlar kullanrken aslnda bu snf kullanm olduk.

imdi biraz daha genel olarak snflarn ne olduundan bahsetmekte fayda var. Snf denilen ey aslnda birden fazla metot ve deikeni bir arada tutan bir yapdr. Ancak bu deiken ve metotlarn da ayn greve ilikin olmas beklenir. rnein ICQ benzeri bir uygulamada en kaba ekilde grsel ksm ve a balantlar olmak zere iki ksm olduunu kabul edelim. Bu uygulamann pencere ekli, rengi, dmelerin yeri v.b. ileri stlenecek birok metot ve deikeni olsa da hepsinin amac aslnda grsellii salamaktr. Yine benzer ekilde arka planda balantlar ayarlayan, kontrol eden birok metot ve deiken de a ayarlar iin kullanlr. Bu durumda ayn projeye ilikin ama ayr grevleri stlenen tm metot ve deikenleri bu iki ana snf altnda toplamak hem organizasyonda hem de tasarmda kolaylk salar. Bu iki ksm birbirinden bamsz tasarlanarak bir araya getirilebilir. Bu da projeye esneklik salar.

Bir snf kullanmak iin iin nce o snf trnden nesne yaratmak gerekir.

Snflarn Yaratlmas
Bundan nce yazdmz rneklerde aslnda biz hep bir snf ve bu snfn ierisinde de birtakm metod ve deikenler yaratyor-

duk. imdi yine rnek bir snf yaratalm. Bu snf kendi ierisinde sadece bir deiken tutsun ve bu deikenin deerini elde edebilecek ya da deitirebilecek baz metodlar olsun: DegiskenTutan.java dosyasndaki rnekte, bahsettiimiz bu snf yine snf ile ayn isimde olan "DegiskenTutan.java" dosyas ierisinde yarattk ve kaydettik. Biz aslnda burada "DegiskenTutan" isimli yeni bir nesne tr yaratm oluyoruz. DegiskenTutan snfnn 2. satrnda yaratlan "x" isimli bir global deikeni bulunmaktadr. Bu deikenin global olmasnn nedeni yaratld yerin herhangi bir metodun iinde deil de en d faliyet alannda

olmasdr. Bu nedenle snf ierisinde tanml dier tm metodlar bu deikene eriebilir ve deikeni kullanabilirler.

this Anahtar Szc


Snf ierisinde yazlm olan "getX" isimli metod, bu "x" deikeninin ierisindeki deeri geri dndrmektedir. Yalnz dikkat edilirse 9. satrda gerekleen bu geri dndrme ilemi srasnda sadece deikenin ad deil, onun yerine "this.x" eklinde bir kullanm grmekteyiz. "this" anahtar szc zel bir anahtar szck olup noktadan sonra gelen deiken isimlerinin snfa ait olduunu ifade etmektedir. Yani 9. satrda yazlan
return this.x;

ile kastedilen ey, ilgili snfa ait olan "x" isimli deikeninin geri dndrleceidir. Yine snf ierisinde yazlm olan "setX" isimli metod da kendisine parametre olarak gelen ve c deikeninde tutlan deeri "this.x" deikenine, yani snfa ait olan "x" deikenine atamaktadr. Grdmz gibi yazm olduumuz bu yeni snf ierisinde baka deiken ya da metod bulunmamaktadr. Peki ya madem artk bu snf yazld ve kullanma hazr, snf nasl kullanabiliriz? imdi bu sorunun cevabn verelim:

Yazlm Snflarn Kullanlmas


Baz zel durumlarn dnda, en genel biimiyle bir snf nesnesi ya da bildiimiz ekliyle bir snf trnden deiken, u ekilde yaratlr:
SinifAdi degisken = new SinifAdi();

GenelSinif.java dosyas < CHIP Workshop 30 <

Mesela, az nce yazm olduumuz "DegiskenTutan" isimli snf trnden bir deiken de:

Java Serisi

<<

DegiskenTutan a = new DegiskenTutan();

eklinde yaratlmaktadr. Bu yaratma ilemini baka bir snf ierisinden yapabilirsiniz. Burada vurgulanmas gereken en nemli nokta, yaratlan her snf deikeninin aslnda gerek snfn bir kopyas olduudur. Yani biz yukardaki gibi a isimli ve DegiskenTutan trnde bir snf nesnesi ve yine ayn ekilde
DegiskenTutan b = new DegiskenTutan();

b isimli baka bir DegiskenTutan isimli snf nesnesi yarattmzda, bu iki nesne de artk kendilerine ait birer "setX" ve "getX" metodlar ile bir "x" deikeni barndrmaktadr. A nesnesinin "x" deikeni ile b nesnesinin "x" deikeni artk farkldr. Ama ikisinin de bir "x" deikeni vardr. Yine ayn ekilde "a" nesnesi ile "b" nesnesinin "setX" ve "getX" metodlar vardr ama her metod kendi nesnesine ait olan "x" deikeni zerinde ilem yapabilir. imdi "DegiskenTutan.java" dosyas ile ayn klasr ierisinde yer alan "GenelSinif" isimli yeni bir snf daha yaratalm ve bu yeni snf ierisinde de "DegiskenTutan" isimli snf kullanalm: imdi yazm olduumuz bu snflar kaydettikten sonra altrabilmek iin u ilemleri yapmamz gerekmektedir.: 1) ncelikle komut satrnda bu snf dosyalarn yazm olduunuz dizin ierisine cd komutu yardmyla giriniz. rnein bu dizin linux kullanclar iin "/home/erman/kodlar" ya da windows kullanclar iin "C:\kodlar" ise, dizin ierisine girmek iin:
$cd /home/erman/kodlar

GenelSinif2.java dosyas

altralm:
java GenelSinif

Not: Burada gryoruz ki "DegiskenTutan.java" dosyas sadece derleniyor ancak GenelSinif.java gibi sonra da altrlmyor. Bunun nedeni asl alan programn "Ge-

nelSinif" olmas, "DegiskenTutan" snfnn ise sadece kullanlyor olmasdr. nk "GenelSinif" snf ierisinde "main" metodu vardr. Bununla ilgili ayrntl aklamay yaznn ilerleyen ksmlarnda zaten bulabileceksiniz. rneimizde 7. ve 8. satrlarda DegiskenTutan snf trnden "a" ve "b" isimli 2

ya da
C:\> cd kodlar

yazmanz gerekmektedir.

2) imdi srasyla "DegiskenTutan.java" dosyasn ve "GenelSinif.java" dosyasn derleyelim:


javac DegiskenTutan.java javac GenelSinif.java

3) Son olarak da GenelSinif.java dosyasn

DegiskenTutan2.java dosyas 31 CHIP Workshop > >

>>

Java Serisi

MainParametreleri.java dosyas

deiken ya da iki "DegiskenTutan" snf nesnesi yaratlmaktadr. Daha sonra 9. satrda a nesnesinin "setX" metodu "a" nesnesinin "x" deikeni deerini 10, "b" nesnesinin "setX" metodu da "b" nesnesinin "x" deikeninin deerini 20 yapmaktadr. Dikkat ederseniz "a" ve "b" nesneleri de "setX" ve "getX" metodlarna sahiptir ve bu metodlar kullanmak iin nesne adndan sonra "." iareti ve sonra da metod adn yazmak gerekir. "a" ve "b" nesnelerinin tpk "DegiskenTutan" snf gibi metodlara ve deikenlere sahip olmalarnn nedeni, bu nesnelerin de yaratlrken "DegiskenTutan" snf trnden yaratlm olmalardr. 12. ve 13. satrlarda hazrlanan "message" isimli String deikeni ierisine ekranda grlecek yaz ve "getX" metodlar yardmyla "a" ve "b" nesnelerinin "x" deikenlerinin ierisindeki deerler hazrlanmaktadr. En son olarak da "message" isimli deiken ierisinde hazrlanan bu son grnt "JoptionPane" isimli snfn "showMessageDialog" isimli metodu yardmyla ekrana gnderilmektedir. Bu rnekten karacamz sonu udur; Genel olarak yazlm snflarn kullanlabilmesi iin ncelikle bu snflar trnden deikenler yaratlarak bu snflarn birer kopyas ya da nesnesi karlmal ve snfa ait deiken ve metodlar bu nesneler araclyla kullanlmaldr. Ayrca grdmz gibi bir snfa ait metodlar kullanlrken snf nesnesinden sonra "." iareti ve daha sonra da metodun ad yazlmaktadr. Bu rneimizde "a" ve "b" isimli snf nesneleri yaratldktan sonra, sahip olduklar "x" deikenlerine "setX" metodu ile deerler verilmektedir. Peki eer biz daha nesneyi yaratrken hemen o anda "x" deikenine deer vermek istersek ne olacak? Bunun iin "balang metodu" kavramn bilmemiz gerekir.

Snflarn balang metodlar bizim bildiimiz anlamda metodlardan biraz daha farkldr. Bu metodlarn en nemli zellii, bir snf nesnesi yaratlrken otomatik olarak arlmalardr. Mesela "DegiskenTutan" snf trnden bir nesne yaratlrken aslnda "new" anahtar szcnden sonra bir metod arldn grmekteyiz:
DegiskenTutan a = new DegiskenTutan();

te bu "DegiskenTutan()" isimli metod, "DegiskenTutan" isimli snfn balang metodudur. Peki o zaman balang metodlarnn normal metodlardan fark nedir? 1) Balang metodlar kesinlikle ve kesinlikle snf ismiyle ayn olmak zorundadr. Eer balang metodunun ismini verirken snf isminden farkl bir isim kullanrsanz bu metod artk baka bir metod olarak kabul edilir. rnein: DegiskenTut -> Yanl. Snf ismi DegiskenTutan o halde balang metodunun ismi bu olamaz Degiskentutan -> Yanl. Snf isminde T harfi de byk. sim, byk kk harf baznda da ayn olmak zorundadr. 2) Balang metodlar geri dn deerine sahip deildir. Yalnz burada geri dn deeri void demek istemiyorum. Balang metodlarnn geri dn deeri gibi bir kavramlar yoktur. void ile yok baka anlamlara gelir. 3) Bir snfn birden fazla balang metodu olabilir. Btn balang metodlar da snf ismiyle ayn olmak zorundadr ancak her birinin parametreleri birbirlerinden farkl olmak zorundadr. Biz balang metodlarn genelde bir snf trnden bir nesne yaratrken, bu nesnenin deikenlerine birtakm ilk deerler

vermek amacyla yazarz. Aslnda tasarladmz bir snfa balang metodu yazmak zorunda deiliz. Ancak balang metodu yazmamsak, nesne yaratlrken Java otomatik olarak bizim yerimize bo bir hayali balang metodu yazar ve onu arr. Eer yazmsak bizim yazdmz balang metodunu armaktadr. imdi tm bu anlattklarmz "DegiskenTutan" snfmza balang metodlar ekleyerek irdeleyelim. Ama bu sefer "DegiskenTutan" ve "GenelSinif" isimli snflar "DegiskenTutan2" ve "GenelSinif2" olarak deitirelim. Tabi ayn deiiklii dosya isimlerinde de yapmay unutmayalm: Bu rnekte gryoruz ki; "GenelSinif2" dosyasnn 7. satrnda, "a" isimli "DegiskenTutan2" trnden snf deikeni, "DegiskenYutan2" snfnn 5. satrnda tanmlanan bo olan balang metodu ile yaratlyor ve bu metodun ierisinde de "a" nesnesinin "x" deikenine 0 deeri veriliyor. Ancak "GenelSinif2" erisinde 8. satrda yaratlan "b" isimli ve "DegiskenTutan2" trndeki nesne, "DegiskenTutan2" isimli snfn 9. satrda tanmlanm ve int parametre alan balang metoduyla yaratld iin bu "b" nesnesine ait olan "x" deikeni nesne yaratlrken verilen 2 deerini alyor. Bu rnekte, bir snf trnden nesne yaratlrken yaplmasn istediimiz birtakm ilk ilemleri balang metodlar yardmyla yaptrabildiimizi gryoruz. NOT: Balang metodlar sadece nesne yaratlrken arlr. Baka bir zamanda bu metodlarn arlmasna izin verilmez.

main Metodu
u ana kadar dikkat ederseniz "main" metodu ile ilgili ok az ayrntdan bahsettim. Aslnda bu metod da birtakm zelliklere sahip zel bir metoddur. imdi yukarda yapm olduumuz rneklere bir gz atmanz istiyorum. Bu rnekler de "GenelSinif" isimli snf ierisinde "main" metodu varken "DegiskenTutan" isimli snfn ierisinde byle bir metod yok. Ama her iki rnek de dzgn bir ekilde alabiliyor. Bunun nedenini yle aklayalm: Bu ana kadar grdk ki bir snf nesnesi ilk nce yazlmakta ve daha sonra da kullanlmaktadr. Ancak kullanlmadan nce tm nesneler ncelikle "javac" komutu ile derlenmelidir. te bir java dosyasnn "javac" ile derlenmesi ileminden sonra bir de "java" komutu ile altrlabilmesi iin, o java dosyas (ya da snf) ierisinde "main" metodu olmas gerekir. Yani altrlabilir snflarn main metodunu sahip olmalar

Snflarn Balang Metodlar:


< CHIP Workshop 32 <

Java Serisi

<<

gerekir. Aksi takdirde


java <Sinif_adi>

Bu ekilde snf altrdnzda ekranda yle bir k greceksiniz.


1. parametre:bir 2. parametre: iki

komutundan sonra ekranda aadaki gibi "main" metodunun bulunamadna dair bir mesaj ile karlarsnz:
"java.lang.NoSuchMethodError: main"

Ancak "DegiskenTutan" gibi sadece baka bir snf ierisinde kullanlmak zere tasarlanm snflar dorudan altrlmayaca iin, onlarn ierisinde main metodu olmasna gerek yoktur. Bu tr snflarn yukardaki rnekte de grld gibi sadece derlenmesi, kullanlabilmeleri iin yeterli olacaktr. zetle; yazdmz programlarda birbirinden farkl grevleri stlenmi birok snf barndran java dosyalar ve hepsini en son olarak tek at altnda toplayacak ve asl programn almasn salayacak genel bir snfmz olacaktr. Ve tm bu snflar ierisinde sadece ana program altracak olan bu genel snf ierisinde "main" metodu olmaldr. Dier snflar kullanabilmeniz iin, genel snf da dahil olmak zere hepsini java ile derlemelisiniz. Ancak program altrmak iin sadece genel snf java komutu ile altrmanz yeterlidir. Sonu olarak; bir snf java ile altrld zaman, otomatik olarak ierisindeki main metodu arlacaktr. Eer snf ierisinde main metodu yoksa, byle bir snf "javac" ile derlenebilir ancak "java" ile altrlamaz!

te burada, java komutu ile "MainParametreleri" snfn altrrken srasyla verdiiniz "bir" ve "iki" isimli bu iki String deeri, main metodunun pototipinde tanmlanm olan "arg" isimli String dizisine atlmtr. "main" metodunun paramtresi olan bu "String arg[]" dizisi bu rnekte olduu gibi bir snf altrlrken kullancnn vermek istedii parametreleri alr ve daha sonra program ierisinde kullanlabilmesi iin saklar. rnek programmzn 5. ve 6. satrlarnda "arg[0]" ve "arg[1]" ile bu girilen parametreleri kullanabildiimzi grmekteyiz. Buradaki kullanma eklimiz bu parametreleri sadece ekrana yazmak gibi anlamsz bir ilem gibi grnse de daha sonra ie yarar ekillerde kullanabileceimizi dnebiliriz.
1. parametre: bir 2. parametre: iki

ve deikenler tutuyor ve daha sonra biz de bu snf trnden nesneler yaratarak bu metod deikenleri kullanabiliyoruz. Bazen bir snf ierisinde yazlan metod ya da deikenleri sadece snfn ierisinde kullanmak isteyebiliriz. Yani baka bir yerde bu snf trnden yaratlan bir deiken ile kullanmayacamz ancak snfn kendi iinde kullanlmas gereken metod ve deikenler olabilir. Bunu anlamak iin "DegiskenTutan" snfna tekrar dnelim. Biz "DegiskenTutan" snf trnden bir "a" nesnesi yarattmzda "a" nesnesi kendisine ait olan "x" deikenini:
a.x = 10;

eklinde deitirebilir. Ancak biz bu ekilde bir mdaheleye izin vermek istemiyor olabiliriz. Eer "a" nesnesinin "x" deikeni deitirilecekse, byle bir ilemin "setX" gibi bir metodla yaplmasn, deikene "a.x" diyerek dorudan eriilememesini istiyor olabiliriz. te bu durumlarda snf ierisine "x" deikeninin bana bir "private" anahtar szc eklememiz gerekir. Yani "DegiskenTutan" snfnda "x" deikeninin bildirimi:
class DegiskenTutan { private int x; public Degiskentutan() { ...

Snflarn public ve private Metod ve Deikenleri u ana kadar belirli ileri yapabilmek amacyla metod ve deikenleri birarada tutan nesneleri yaratmay ve kullanmay, yani snflarn genel olarak kullanmn grm olduk. Bir snf ierisinde eitli metod

eklinde olursa, artk "DegiskenTutan"

main Metodu parametreleri:


"main" metodunun u ana kadar hi deinmediimiz bir zellii de ald parametrelerdir. Bu metod yazlrken grmekteyiz ki
public static void main(String arg[])

eklinde bir String dizisini parametre olarak almaktadr. "yi de bu parametre ne ie yaryor?" diye merak ettiinizi tahmin ediyorum. Artk bunu renme zamanmz geldi. ncelikle aada verilen "MainParametreleri.java" isimli snf yazp kaydediniz: imdi aada gsterildii gibi bu snf nce javac komutu ile derleyip daha sonra java komutunun bu zel kullanm ile altrnz:
javac MainParametreleri.java java MainParametreleri bir iki

StatikTest.java dosyas 33 CHIP Workshop > >

>>

Java Serisi

trnden "a" gibi bir nesne yaratlsa bile, "a.x" gibi bir eriim yasaklanm olur. Ancak snf ierisindeki bir metod "x" deikenine yine de ulaabilir. Eer genel olarak zetlemek gerekirse; snflar ierisinde bildirilen "private" trndeki deikenlere dardan eriilemez, ancak snfn dier metodlar ile eriilebilir. Bu durum snfn private metodlar iin de geerlidir. Eer snf yazlrken bir metodun bana "private" anahtar szc eklenirse, bu metod da artk dardan eriilemez, sadece snf ierisindeki dier metodlar tarafndan kullanlabilir bir hale gelir. Mesela "DegiskenTutan" isimli snfa aadaki 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" deiken ya da metodlara eriebilirler. Tm bunlarn bir sonucu olarak da, snflar yazlrken yaratlan "public" metod ve deikenler, snf nesneleri araclyla dardan eriilebilirler.

Statik Metod ve Deikenler


u ana kadar rendiklerimizi ele aldmzda neden JOptionPane snfnn showMessage isimli metodunu kullanmak iin JOptionPane snf trnden bir nesne yaratmyoruz? diye sormamz gerekir. Baz metodlar yazldklar snflar ierisinde statik olarak yazlrlar. Bu trden statik olarak yazlm metodlar kullanmak iin snf nesnesi yaratmak gerekmez. Bu metodlar kullanmak iin yazldklar snf isminden sonra "." iareti koyarak dorudan metodu arabilirsiniz. Ancak tahmin edersiniz ki bir metod statik olarak yazlmsa genel amal bir metod olmaldr. Mesela JOptionPane isimli snfn showMessageDialog ya da showInputDialog isimli metodlar genel amal olup her zaman kullanlabilmektedir. Ekrana bir mesaj penceresi karmak ya da kullancdan bir giri deeri almak iin bir nesne yaratmaya gerek yoktur. Siz de kendi tasarladnz snflar ierisinde bu ekilde genel amal metodlar yazmak isterseniz bunlar statik olarak yaratabilirsiniz. Bir metodun statik olarak yaratlabilmesi iin, metodun prototipinin bana "static" anahtar szc eklenir. Aadaki iki rnei yazp kaydediniz: Daha sonra da aadaki sra ile derleyip program altrnz:
javac StatikTest.java javac GenelSinif3.java java GenelSinif3

Bu ekilde "private" olarak bildirilmi "resetX" metodu artk bu snf trnden yaratlm nesneler ile dardan kullanlamaz. Yani aadaki gibi bir kullanm geersizdir:
class BaskaSinif { public static void main(String arg[]) { DegiskenTutan a = new p DegiskenTutan(2); a.resetX(); /* YANLI! resetX private bir metoddur Bu ekilde dardan kullanlamaz.*/ ... } }

En son rnekte grdnz gibi "a.resetX()" gibi bir arm geerli deildir. nk "DegiskenTutan" snfnn "resetX" isimli metodu "private" bir metoddur. Bu nedenle, bu snf trnden yaratlm olan "a" nesnesi araclyla bu metoda dardan eriilemez. Ancak nceki rnekteki gibi "resetX" metodunu snfn dier bir metodu olan "setX" metodu kullanabilmektedir. Deiken ya da metodlarn "private" ya da "public" olmas, bu metod ya da deikenlerin sadece dardan kullanm etkileyen bir durumdur. Snf ierisindeki dier metodlar
< CHIP Workshop 34 <

Bu rnei altrdnzda ekrana iki tane mesajn geldiini greceksiniz. Bu mesajlardan ilki, "GenelSinif3" isimli snfn 5. satrnda, "StatikTest" snfnn statik meto-

du dorudan arlarak ekrana gelmitir. Grdmz gibi, bir snfn statik metodunu kullanmak iin ilk nce o snf trnden bir nesne yaratmaya gerek yoktur. nk statik metodlar snf ismi ve sonra ". " iareti yazldktan sonra dorudan arlabilirler. Ancak ikinci mesaj "StatikTest" snfnn "kayitliMesaj" isimli ve statik olmayan metodu sayesinde ekrana geldiinden, bu metodu kullanabilmek iin ilk nce "StatikTest" snf trnden bir nesne yaratlmas ve metodun da bu nesne araclyla arlmas gerekir. Uygulama Sorusu: erisinde tarih tutan ve tarihlerle ilgili ilemler yapabilen metotlar barndran bir snf tasarlaynz. Yaplmas gereken ilemler iki tarihin birbiriyle kyaslanmas, tarih zerine belirli bir gn says eklenebilmesi, tutulan tarihin gsterilmesi, tutulan tarihin deitirilmesi eklinde olmaldr. Bu ilemlerin her biri iin snf ierisinde bir metot tasarlamanz gerekmektedir. Byle bir snfn gn, ay ve yl tutan deikenleri olmaldr. Snf tasarladktan sonra, bu snf kullanan ve bu snf trnden rnek nesneler yaratarak bunlar kullanan baka bir genel snf yaznz ve tasarmnz bu nesneler zerinde test ediniz. Uygulamann cevabn bir sonraki dersimizde bulabilirsiniz. Nihayet bu dersimizin de sonuna gelmi bulunuyoruz. Nesne ynelimli programlama tekniinin zn oluturan snflar ve snflarn kullanmn rendiimiz bu dersimizi iyice sindirmenizi ve rnekleri de tekrar yazarak kendi banza denemenizi srarla neririm. Daha nce de sylediim gibi derslerde kullandmz tm rneklerin yazlm dosyalarn http://cs.bilgi.edu.tr/~erman/ kod lar adresinde bulabilirsiniz. Konuyla ilgili soru, gr ve nerileriniz iin postalarnz bekliyorum. yi almalar.. Sevgi ve sayglarmla,
Erman Ayka stanbul Bilgi niversitesi Bilgisayar Bilimleri Blm

You might also like