NESNE YÖNELİMLİ PROGRAMLAMA Nesne (object) nedir? Sınıf (class) nedir? Nesne ve sınıf kavramlarını bir benzetme üzerden açıklamaya çalışalım. Biraz hayal kuralım. Bir otomobil fabrikasında bir araba tasarımı üzerinde çalışmaktayız. Çalışmalarımız sonucunda yeni bir araba tasarımı elde ettik ve üretim aşamasına geçireceğiz. Yeni arabamızın hangi büyüklükte olacağı, hangi renkte olacağı ve motorunun içerisine kaç tane beygir koyacağımızı tararım aşamasında önceden belirlemiştik. Tüm hazırlıklarımız tamam olduğuna göre önceden oluşturduğumuz tasarım kalıbımıza- sınıfımıza uygun yeni araba nesneleri üretebiliriz. Yani tasarım süreçleri ile araba nesnelerimize ait sınıfı oluşturmuş olduk. Burada kaçırılmaması gereken nokta tasarımın bir defa yapılıp bu tasarımdan sınıftan binlerce ürünün elde edilmesidir. Buradan java’ya doğru bir dönüş yaparsak; tasarım kalıbımız java’daki sınıflarımızı, üretim aşamaları bu sınıf içerisindeki değişkenleri, metotları daha pek çok işlemi, ortaya çıkan ütün ise sınıfımızdaki işleler sonucunda elde edilen nesnemizdir. Bir sınıf tanımlaması ile aslında yeni bir veri tipi oluşturulmuş varsayabiliriz. Bu veri tipine ait değişkenlere de nesne adını verebiliriz. Nesne Yönelimli programlamada; Nesneler bir sınıf baz alınarak oluşturulur(tasarım araba). Sınıf soyut bir kavram iken nesne somut bir kavramdır. Tasarım soyut iken araba olduğunda somut olması gibi. Bir sınıftan nesne oluşturma işlemine örnekleme denir (örnek- istance). Bir sınıfın hafızada yer alması için örneklendirilmesi nesnesinin oluşturulması gerekir (araba yapmayacaksak tasarımla işimiz ne). Oluşturulan her nesne kendi içerisinde bağımsızdır. Nesnelerin diğer nesnelerle olan ilişkisi mesaj gönderme - alma işlemlerinden ibarettir. Yani her nesne kendi ile ilgili verileri kendi içerisinde saklar, bazılarını erişime açar, bazılarını ise özel tutar. Java Sınıfları (Classes), Java dilinde sınıf (class) kavramını doğada cins isimlere benzetebilir. Bir cins kendi başına belirli bir nesne değildir; ancak belirli türden nesnelerin ortak özelliklerini belirten soyut bir kavramdır. Örneğin, ağaç bir cins isimdir. Ama bahçedeki elma-ağacı ya da sokaktaki çınar ağacı belirli varlıklardır. Onlar, ağaç sınıfının birer nesnesidir(üyesidir). Cinsler alt cinslere ayrılabilir. Alt cinsler, üst-cinslerin özelikleri yanında kendilerine has başka özeller de taşırlar. Örneğin, memeli hayvanlar geniş bir sınıftır. Filler, kaplanlar, şempanzeler, balinalar, insanlar vb. memeliler sınıfının (üst sınıf) birer alt-sınıfıdır. Altsınıftakiler, üst-sınıfın özeliklerini taşımakla birlikte, birbirlerinden kesinlikle farklıdırlar. Her cinsin ve her alt-cinsin kendine özgü özellikleri (nitelikler ve davranışlar) vardır. Bu özellikler, onları diğer cinslerden ayırır. Java’da sınıfları doğadaki cinsler gibi düşünürsek, konuyu kavramamız kolaylaşacaktır. Java sınıfı, tıpkı bir cinste olduğu gibi, ortak özellikleri belirlenmiş topluluğun adıdır. Bir java sınıfının niteliklerinin değişkenlerle (öznitelik, attributes, fields), davranışlarını metotlarla (fonksiyon procedure) belirleriz. Başka bir deyişle, istediğimiz özelliklerini belirterek bir sınıf (cins isim) tanımlarız. Kısaca bir java sınıfı kendi öz niteliklerini belirleyen değişkenleri ve fonksiyonları içeren bir birimdir. Bu nedenle, Pascal ve Cgibi yapısal dillerdeki yapı ( record, struct) kavramının bir genellemesidir. Record ve struct yalnızca değişkenler içerebilir. Fonksiyonlar ve yordamlar (procedure) onların dışında kalır. Java sınıfı ise, değişkenler yanında fonksiyonları da içeren daha genel yapıya sahiptir. Bir sınıf içindeki fonksiyonlar o sınıfın değişkenlerine erişebildiği gibi, farklı sınıflar arasında da iletişim sağlanabilmektedir. Sınıf ve alt-sınıfların tanımı, bütünüyle programcının gereksemelerine göre yapılabilir. Alt sınıflardan başka alt-sınıflar üretilebilir. Böylece en üst sınıftan başlayarak en alt sınıfa ulaşan hiyerarşik bir yapıya sahip olurlar. En alttaki sınıf, kendisinin üstünde olan bütün sınıfların özniteliklerini taşır. Buna kalıtım (inheritance) özeliği diyoruz. Bu özelik, java’nın üstün özeliklerinden birisidir ve ilerideki konularda nasıl işe yaradığını göreceğiz. Java programları sınıf (class) lardan oluşur. Bütün sınıflar aynı yapıya sahiptirler. Aralarındaki farkı yaratan şey, içerdikleri değişkenler ve metotlardır. Bazıları hiç değişken ve/veya metot içermez, bazıları az, bazıları çok değişken ve metot içerebilir. Uyarı: Bir sınıftaki değişkenler o sınıfın özniteliklerini, metotlar ise o sınıfın davranışlarını belirler. Bu nedenle, Sun da dahil olmak üzere bazı kaynaklarda değişken terimi yerine öznetilk (attribute), fonksiyon ve procedure yerine de metot terimi kullanılır. Buz de bu derlerde genellikle bu geleneğe uyacağız. Ama, özellikle değişkeni ve fonksiyonu vurgulamak gerektiğinde bu gelenekten biraz sapabileceğiz.