• 3.03.2014 00:00:00
  • Admin Admin

Overload Metodlar, aynı isimli birden fazla metodun olmasıyla oluşur. Türkçede metodların aşırı yüklenmesi olarak adlandırılan Overload metodların ortak özellikleri isimleridir, aralarında farklılıklarsa parametrelerinden kaynaklanır. Overload metodların dönüş tipleri aynı olmak zorundadır. Dönüş tipleri aynı olmayan metodlarda hata çıkar.

Overload Metodlar, aynı isimli birden fazla metodun olmasıyla oluşur. Türkçede metodların aşırı yüklenmesi olarak adlandırılan Overload metodların ortak özellikleri isimleridir, aralarında farklılıklarsa parametrelerinden kaynaklanır. Overload metodların dönüş tipleri aynı olmak zorundadır. Dönüş tipleri aynı olmayan metodlarda hata çıkar.

Overload, aşırı yükleme anlamına gelmektedir. Java, bize aynı isimde ancak farklı işlevde kullanılabilecek metotlar tanımlamaya izin verir. Aynı isimde metotlar tanımlamak için her birinin :

  • Parametre tür veya sayıları
  • Geri dönüş tipleri 

farklı olmalıdır.

Bizden farklı formatlardaki dosyaları açan bir program yazmamızı isteselerdi, her bir dosya için ayrı ayrı dosyayı açan metodlar mı tanımlardık, yoksa DosyaAc diye bir metod tanımlayıp, ilgili formattaki dosyaları bu metoda mı yollardık. Aşağıda Overload Metod kullanımına örnek bir class görüyorsunuz.

public class OverloadMethod {

public void dosyaAc(WordDosyasi md){
System.out.println(“Dosya Türü : ” + md.w_tur);

}

public void dosyaAc(ResimDosyasi rd){
System.out.println(“Dosya Türü : ” + rd.r_tur);

}

public void dosyaAc(VideoDosyasi td){
System.out.println(“Dosya Türü : ” + td.v_tur);

}

}

Gördüğünüz gibi metod ismi aynı ancak aldığı parametreleri farklı olan overload metodlar tanımladık.

Peki  biz metodları neden aşırı yüklüyoruz?

Overloading işlemi nesne yönelimli programlamanın (OOP) en güzel yanlarından biri. Java da bu güzelliği heba etmiyor. Karşılaştırma yaparak bu işlemin nasıl bir fayda sağlayacağını görelim:

C programlama dili, fonksiyonel bir dildir. Yani her şeyin metodlar yazılarak yapıldığı bir dil. Fakat C dilinde aşırı yükleme özelliği bulunmuyor. Bu dilde eğer mutlak değer işlemi yapacaksanız, kullanmanız gereken üç ayrı metod var:

– abs(); (int için)

– labs(); (long için)

– fabs(); (float, double için)

Tek bir işlem için üç farklı isimde metod kullanmanız gerektiğinden gereksiz bir karışıklık yaşanıyor. Tabii bu örnek için herhangi bir karışıklık görünmüyor olabilir fakat devasa bir Java projesini düşündüğümüz zaman benzer işlemleri gerçekleştirmek için farklı farklı metotlar yazmanın nasıl bir karışıklığa yol açacağını tahmin etmek zor değil.

Oysa overloading işlemi sayesinde metodumuzu aşırı yükleyerek tek bir isimle mutlak değer işlemini gerçekleştirmemiz mümkün. Sadece metodumuz 3 farklı parametre ile 3 defa aşırı yüklenecek.

Kurucu Metodlar – Constructor

Java’da her nesne oluşturulduğunda aslında otomatikman bir kurucu metod çağırılır. Yani biz constructar tanımlamasak bile java bunu yapar. Kurucu metodlar “new” anahtar kelimesiyle çağırılırlar.

Kurucu metodlar klasik metodlara benzesede iki noktada ayrılırlar.

1-Kurucu metodlar sınıf adıyla aynı ismi taşırlar.

2-Geri dönüş değerleri yoktur. (void,int String vb. gibi)

Kurucu metodların bu iki temel özelliğinden başka iki tane daha ayrıntı vardır.

1-Bir sınıfın kurucu metodu yazılmamışsa default sayılır ve parametresizdir.

2-Eğer bir sınıfın parametresiz constructor’ı varsa default constructor’ı iptal olur.

Yapılandırıcı metotlar nesne oluşturduğumuz anda çalıştırılan metotlardır. Herhangi bir geri dönüş tipi yoktur. Evet, ilginç ama void tipinde dahi bir geri dönüşü yoktur. Bir yapılandırıcının yaptığı iş, bir nesneyi ilk kullanıma hazırlamaktır. İlk kullanıma hazırlamak derken, Class içinde tanımladığımız değişkenler,  biz class tan bir nesne oluşturduğumuzda varsayılan değerleri ile birlikte oluşturulur. Fakat biz constructor larımızı parametre alacak şekilde oluşturursak, o classtan bir nesne oluşturduğumuz zaman, constructor lara verdiğimiz parametrelerin değerleri ile birlikte nesne oluşturulur.

Yapılandırıcı metotları şu şekilde özetleyebiliriz:

· Yapılandırıcıların erişim belirteci mutlaka ama mutlaka public olmalıdır.

· Yapılandırıcıların adı sınıfın adıyla aynı olmalıdır.

· Yapılandırıcı metot çağrılırken new anahtar sözcüğü kullanılır.

· Yapılandırıcılar bellekte nesneye bir yer ayrılmasını sağlarlar.

· Yapılandırıcılar her çağrılışlarında yeni bir nesne oluştururlar.

Constructor lar için en iyi örneklerden biri aşağıdaki örnektir diye düşünüyorum. Bir txt dosyası içindeki yazılanları okuyabilmek için öncelikle o dosyanın nerede ve hangi isimde olduğunu bilmek, okurken içindeki yazılanları hafızaya almak, ve okuma yapacak bir class a ihtiyacımız vardır, tıpkı aşağıdaki gibi.

  File file =newFile("C:\a.txt");
        BufferedReader reader =null;
        reader =newBufferedReader(new FileReader(file));
        String satir = reader.readLine();
            while(satir!=null) {
                System.out.println(satir);
                satir = reader.readLine();
            }
        }}
Yukarıdaki örnekte, C sürücüsü içindeki a.txt dosyasındaki yazılanları okumak için önce yolu File classı sayesinde öğreniliyor. sonra BufferedReader nesnesi oluşturulurken constructor ına new denilerek okuma yapacak FileReader nesnesi gönderiliyor, FileReader nesneside constructor ında File tipinde bir değişken alıyor.