1) GIRIS :

Java programlama dilinin en guclu yanlarindan biri nesneye yonelik (object-oriented bir programlama dili olmasidir. Javadaki butun nesneler object ana nesnesinden turer. Yani java c++ gibi hem prosedurel, hem de nesnel programlama degil, %100 nesneye yonelik programlama dilidir.

Bu chapter'da ilk olarak genel olarak nesne kavrami ve bunun java dilindeki uygulamalari , class kavrami , nesneye yonelik programlamanin temelleri olan kalitim ve polymorphism kavramlari anlatilacak, anlatilan her bir kavram orneklerle pekistirilecektir.


Nesne Kavrami :

Gercek hayattaki nesne kavrami elle tutulabilen, gozle gorulebilen herseydir. Ornegin masa, sandalye, elma hepsi birer nesnedir. Bu nesnelerin hepsinin ortak ozelligi belirli durumlari(nitelikleri), birtakim hareketleri ve bazi olaylari olmalaridir. Ornegin masa nesnesini ele alirsak boyu, yuksekligi nitelikleri, bir yerden bir yere hareket etmesi hareketi , uzerine birinin oturmasi ise bu nesnenin olayi olarak kabul edilebilir. Diger tum nesnelerin de buna benzer nitelik, hareket ve olaylari vardir.

Gercek hayat nesnelerinde dikkat edilecek bir diger nokta tum nesnelerin baska bir takim nesnelerden meydana gelmis olmasidir. Yine masa ornegini ele alirsak masa nesnesi sunta, civi,vb.. gibi bir takim nesnelerden meydana gelmistir, yani bir kalitim durumu vardir. Yine ayni sekilde her bir nesnenin ait oldugu bir tip vardir. Masa dedigimiz zaman genel bir kavramdir, oysa belirli bir masayi gosterdigimiz zaman belli bir nesnedir. Bu yuzden genel masa kavrami o nesnenin ait oldugu sinifi belli eder. Ayni sinifa ait nesneler benzer ozellikler gosterir.


Nesneye Yonelik Programlama Kavrami :

Nesneye yonelik programlama gercek hayat nesnelerinin yazilim kullanarak bilgisayar ortaminda modellenmesidir. Burada, gercek hayat nesnelerindeki durum degisken veya nitelik, hareketler ise metod adi verilen kod yordamlariyla temsil edilirler.

OOP(Object Oriented Programming) dili olmayan C, Pascal gibi dillerde veriler ve bunlar uzerine etki edecek program parcalari (fonksiyon, procedureler ) ayri ayri ele alinir. Onemli olan fonksiyonlardir, veriler ikinci plana atilmistir. Oysa bu yaklasim gercek hayat problemlerini cozmekte yetersiz kalmaktadir. Bu noktada ortaya cikan nesneye yonelik diller verileri ve onlarin uzerine etki edecek metodlari biraraya getirmis ve encapsulation dedigimiz olayi gerceklestirmislerdir.

Nesneye yonelik programlamanin asil gucu uzun ve karmasik programlarin yazilmasinda ortaya cikmaktadir. Yazilim gelistirme calismalari gostermistir ki, programcilar cogu kez program icindeki ufak detaylarla ugrasmaktan asil sorunu gozden kacirmaktadirlar. Nesneye yonelik programlama bu noktada devreye girer ve sagladigi cesitli tekniklerle agaclarin arasindan ormanin gorulmesini saglar. Bu islem soyutlama (abstraction) olarak adlandirilir.

Nesneye yonelik programlamadaki iki temel kavram kalitim (inheritance ) ve polymorphism'dir. Kalitmi yeni classlarin var olan classlardan ozelliklerinin aktarilmasi ve yeni ozellikler eklenmesi yoluyla yaratilmasi yontemidir. Kalitim program gelistirmede buyuk onemi olan yazilimin yeniden kullanilmasi olayinda buyuk onemi vardir. OOP'deki diger onemli kavram coksekillilik yani polymorphism'dir. Polymorphism bize ayri bir switch mantigina gerek duymadan programlarimizi genel bir mantik icinde yazmamizi ve var olan ve eklenecek classlari kullanabilmemizi saglar. Bu iki kavram bu chapterin ilerki bolumlerinde ayrintili bir bicimde ele alinacaktir.


Java ve Nesneye Yonelik Programlama :

Java tam bir nesneye yonelik dil oldugu icin yukarda sayilan kavramlari destekler. Java programcisi bir class(sinif) yazarken sinifa ait tumuyle yeni nitelik ve metodlar yazmak yerine var olan bir classi miras almak (inherit) yoluyla ona ait metod ve nitelikleri kullanabilir. Bu durumda miras alinan sinifa superclass, alan sinifa ise subclass adi verilir. Her bir subclass ilerde bir superclass olma adayidir.


Hierarside subclass bir ustunde yer alan class direct superclass, onun ustunde yer alanlar ise indirect superclass olarak adlandirilir.


Java dili C++'in yaptigi gibi coklu kalitimi desteklemez, tekli kalitimi destekler. Yani bir subclass'in ancak bir tane direct superclass'i olabilir. Bunun sebebi coklu kalitimin beraberinde birtakim sorunlari da getirmesidir. Oysa Java'nin sagladigi coklu arayuz(multiple interface) kullanimi coklu kalitimin sagladigi bircok ozelligi sunarken sorunlarin bir coguna yol acmaz.

Her bir nesne belli bir siniftan turer. Siniflar nesneleri ortaya cikaran sablonlar olarak dusunulebilir, aynen bir kek kalibi gibi ilk ortaya cikista birebir ayni olan nesneler gitgide farklilasirlar. Nesneler siniflarin ornekleri (instance) olarak adlandirilirlar. Java dilinde her bir subclassa ait nesne ayni zamanda superclassa ait bir nesne olarak da islem gorur. Bu ozellik farkli siniflardan olusturulmus nesnelerin tek bir nesne referansi uzerinden erisilebilmesini saglar ki bu ozellik nesneye yonelik programlamanin temel taslarindan biridir.

Java dili ayni zamanda metodlari farklilastirmaya(overriding) de izin verir ki bu ozellik miras alinan metodlarin farkli islemler yapabilmesini saglar.



                                                               Geri    Index     Ileri