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.
Index 