Yazan : Şadi Evren ŞEKER

Nesne yönelimli programlamada kullanılan bir terimdir. Basitçe bir nesnenin (object) çalışabilmesi , yaşayabilmesi için bu nesnenin tanımlı olduğu bir sınıfa (class) ihtiyaç vardır. Ayrıca bu sınıftan (class) tanımlanan nesnenin programlama dili ve işletim sistemi marifetiyle hafızada bir alana ihtiyacı vardır.

Bilindiği üzere nesnelerin tanımlı oldukları sınıflar (class) içerisinde özellikleri (properties) ve metotları (methods) bulunur. Yani her nesnenin tanımında bir miktar değişken (variable) ve fonksiyon (function) bulunabilmektedir. Bu değişken (özellik, property) ve fonksiyonlara (metotlara, methods) erişmek için bu nesneye erişilmesi söz konusudur.

Ancak bazı durumlarda sabit metotlar (static methods) tanımlanabilir. Bu metotlar bir nesne ile var olmayan ancak sınıfın kendisinde tanımlı metotlardır. Yani bu metodun çalışması için o sınıftan bir nesne üretilmesi gerekmemektedir. Bu anlamda sabit metotlara, sınıf metotları (class methods) ismi de verilmektedir.

Örneğin çok meşhur sabit metotlardan birisi Thread sınıfında buluna sleep() metodudur. Bu metodu çalıştırmak için Thread.sleep(int) yazmak yeterlidir. Görüldüğü üzere metodun çalışması için önce Thread sınıfından bir nesne üretmeye sonra bu nesnenin sleep() fonksiyonunu çağırmaya gerek yoktur. Doğrudan sınıf ismi ile metoda erişmek mümkündür.

Bu yazı şadi evren şeker tarafından yazılmış ve bilgisayarkavramlari.com sitesinde yayınlanmaktadır.

Diğer meşhur bir sabit metot main fonksiyonudur. Bu metodun çalışması için nesne üretilmesine ihtiyaç yoktur. main metodunu içeren bir sınıf doğrudan çalıştırılabilir.

Benzer şekilde biz de kendi sabit metotlarımızı yazabiliriz. Bunu aşağıdaki JAVA kodu üzerinden görmeye çalışalım. Önce basit bir sınıf ve bu sınıftan bir nesne üreterek kullanan bir ana sınıf (main class) yazmaya çalışalım:

public class deneme{

public int kare(int x){

return x*x;

}

}

public class ana{

public static void main(String args[]){

deneme d = new deneme();

System.out.println(“5’in karesi : ” + d.kare(5));

}

}

Yukarıda iki sınıf verilmiştir. ana sınıfındaki main fonksiyonu içerisinde deneme sınıfından d isminde bir nesne oluşturulmuş ve bu nesnenin kare metoduna d.kare(5) şeklinde erişilmiştir. Yukarıdaki kodun çalışması sonucu ekran görüntüsü aşağıda verilmiştir:

Görüldüğü üzere 5’in karesi olarak 25 sonucu başarılı bir şekilde bulunmuştur. Ancak bu erişim sırasında bir nesne oluşturmaya ihtiyaç yoktur. Yani her kare alma işlemi sırasında hafızada (RAM) bir deneme sınıfından nesne oluşturmak ve bu nesneyi çağırmak gerekmez. Bunun yerine sabit metot (static method) kullanılabilirdi. Bu durumda kodumuz aşağıdaki şekilde olacaktır:

public class deneme{

public static int kare(int x){

return x*x;

}

}

public class ana{

public static void main(String args[]){

System.out.println(“5’in karesi : ” + deneme.kare(5));

}

}

Yukarıdaki yeni kodun çalışması ve ekran çıktısı bir önceki kod ile bire bir aynıdır:

Bu yeni kodda yapılan değişiklik kare metodunun static hale getirilmesi ve bu metodu çağıran ana sınıfındaki main metodunun doğrudan bu fonksiyona erişmesidir.

Sabit metotlar (static methods) nerelerde kullanılırlar?

Sabit metotlar yapı olarak nesnelerin oluşturulması ve çalışmasından bağımsız metotlardır. Bu yapıları itibariyle hafızanın verimli kullanılması ve dolayısıyla bir nesneye ihtiyaç duymadan bazı fonksiyonların çalıştırılması istendiğinde oldukça kullanışlıdırlar.

Yukarıdaki örnek incelenirse sabit metodun kullanıldığı ikinci örnekte bir nesne üretilmesi ve bu nesneye erişilmesi gerekmemiştir. Bu hafızadan verim sağlayacağı gibi çalışma süresini de belirli bir oranda kısaltmaktadır.

Performans kaygısının yanında sabit metotların sağladığı bir avantaj da tasarım aşamasındadır. Her metot yapı olarak bir nesneye bağlı olmayabilir. Örneğin insan sınıfını ve insan sınıfından türetilen nesneleri düşünelim. İnsan sınıfını yazarken bir insanın boyu, kilosu, yaşı gibi özelliklerinden ve yemek yemek, uyumak, yürümek veya konuşmak gibi metotlarından bahsedebiliriz. Buradaki örneklerin hepsi her insanda farklılık gösterecek özelliklerdir. Yani her insan farklı şekillerde uyuyabilir, yürüyebilir veya yemek yiyebilir. Diğer bir değişle her insanın yaptığı bu eylemler aslında tasarım itibariyle aynı mantığa dayanmakla birlikte her insanda farklı parametrik yapılara sahip ve her insanın taşıdığı boy, yaş, kilo gibi değerlerden etkilenmektedir.

Örneğin insan sınıfında herhangi bir özellikten etkilenmeyen çarpma fonksiyonu olduğunu düşünelim. Basitçe her insanın çarpma yapma özelliği olduğunu ve iki sayıyı çarpabileceğini düşünürsek bu fonksiyon herhangi bir özellikten etkilenmeyecektir. Yani kilosu farklı olan iki kişi ya da yaşı ya da boyu farklı olan iki kişinin sayıları çarptığında aynı değeri bulmasını bekleriz. Öyleyse bu fonksiyonu nesnelere değil doğrudan sınıfa koymamız isabetli olur çünkü bu sınıftan ne kadar nesne üretilirse üretilsin sonuçta çarpma işlemi farklılık göstermeyecektir.

Görüldüğü üzere sabit metotlar tasarım özelliği veya performans kaygıları gibi amaçlarla kullanılırlar.

Yorumlar

  1. elif

    hocam çok güzel ve faydalı bir yazı olmuş,hiç dolandırmadan gayet açık ve net anlatmışsınız,teşekkür edriz.

nez için bir cevap yazın Cevabı iptal et

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir