Java Class Yapısında Constructor Ve Overloading

Yapıcılar(Constructors)

Yapıcının (constructor) ne yaptığını anlamak için sınıfın (class) ne olduğunu anımsamak gerekir. Sınıfın yalnızca bir tür-adı (cins-isim) olduğunu söylemiştik. Sınıf tanımı o türün niteliklerini (değişkenler)  ve davranışlarını (metotlar) belirler. Elimizde o türe ait somut bir öğe (türü temsil eden varlık) varsa, o öğe, sözkonusu türün niteliklerine ve davranışlarına işlevlik kazandırır. Dolayısıyla, bir sınıftan, o türe ait öğe(ler) yaratmanın yolları olmalıdır.

Bir sınıf tanımlandığında, bellekte henüz onu temsil edecek öğeler yoktur (static sınıflar hariç). Her sınıf için bu işi yapan özel bir metot vardır. Bu metoda yapıcı (constructor) diyoruz. Yapıcının görevi türe ait öğe(ler) yaratmaktır. Java dilinde bu öğelere nesne (object, instance of the class) denir. Yapıcı (constructor), yaratılan sınıfın doğal bir parçasıdır ve aksi istenmedikçe ön-tanımlı (default) olarak derleyici tarafından oluşturulur ve kendi işlevini yapar. Constructor, javadaki öteki metotlardan tamamen farklıdır. Bu metodun bir değer-bölgesi yoktur; yani hiçbir değer almaz. Bir tek işlevi vardır: sınıftan nesne(ler) yaratmak.

Bir sınıftan bir nesnenin türetilmesi (instantiate) demek  onun için ana bellekte bir yer ayrılması, sınıfın değişkenlerine başlangıç değerlerinin verilmesi ve varsa sınıfın fonksiyonlarının etkin duruma sokulması demektir. Bu iş yapılmadan, sınıf hiçbir işleve sahip değildir; sınıfın nitelikleri ve davranışları ancak bu nesnelerde görülebilir. Başka bir deyişle, bir sınıf içinde tanımlanan  değişkenler ve metotlar ancak bir nesne içinde hayat bulurlar.

Bir sınıftan istenildiği kadar nesne yaratılabilir. Yaratılan her nesne için ana bellekte o nesneye özgü ve öteki nesnelerinkinden farklı bir yer ayrılır. 

Bir sınıf içinde static belirtkesiyle damgalı olan değişkenlere sınıf değişkenleri (class variables) ve static belirtkesiyle damgalı olan metotlara sınıf metotları (class methods) denir.

Bir sınıf içinde static olmayan değişkenlere anlık değişkenler (instant variables) ve static olmayan metotlara anlık metotlar (instant methods) denir.

Nesne yaratılırken, derleyici tarafından otomatik olarak oluşturulan constructor’a ön-tanımlı (default) constructor demiştik. Ön-tanımlı constructor hiçbir parametresi olmayan ve sınıf ile aynı adı taşıyan bir metottur. Ancak, constructor bir metot olduğundan, istenirse aşkın yükleme (overload) yapılabilir, yani farklı parametrelerle farklı işlevlere sahip kılınabilir. Böyle bir constructor tanımlanınca, ön-tanımlı olan contructor kendiliğinden yok olur, onun işlevini tanımlanan constructor üstlenir. Derleyicinin yaratacağı ön-tanımlı constructor yerine, bir çok uygulamada aşkın constructor kurulması daha uygundur. 

Ornek: 

public class Sinifim {

    public int Deger1;
    public int Deger2;

    public Sinifim() {
        Deger1 = 0;
        Deger2 = 0;
    }

    public Sinifim(int d1, int d2) {
        Deger1 = d1;
        Deger2 = d2;
    }

    public void Yaz() {
        System.out.println("Deger1 :" + Deger1);
        System.out.println("Deger2 :" + Deger2);
    }
}
 

Örneğin sınıfı tanımlaması içinde, iki adet yapıcı (constructor) metod var. İlki Deger1 ve Deger2 isimli değişkenlerimize 0 değerlerini atıyan parametre almayan ve sınıflar için varsayılan olarak kabul edilen yapıcı metodumuz. Diğeri yapıcı metodumuz ise, bu değişkenlere aldığı parametre değerlerini atıyor. Birde Yaz isimli bir metodumuz var. Bu metod ise, sınıfımızın Deger1 ve Deger2 isimli integer değişkenlerini komut satırına yazdırıyor.

Ornek 2:


public class dikdörtgen {

    int en, boy;

    public dikdörtgen() {
        en = 0
          ,boy=0;
    }

    public dikdörtgen(int en, int boy) {
        this.en = en;
        this.boy = boy;
    }
}

 yukarıdaki örnek kodda dikdörtgen sınıfının oluşturucusu (constructor) iki kere yazılmıştır. Buna göre bir dikdörtgen oluşturulurken, bu sınıfı kullanacak olan sınıf aşağıdaki iki şekilde de oluşturabilir:

dikdörtgen d = new dikdörtgen();

dikdörtgen d = new dikdörtgen(10,15);

Yukarıdaki iki satırda bir dikdörtgen tanımlayarak bu sınıftan bir nesne oluşturmaya yaramaktadır. Sonuçta ilk satırdan sonra eni ve boyu 0 olan, ikinci satırda ise eni 10 boyu 15 olan bir dikdörtgen tanıtılmıştır.
Bu iki alternatif satır, aslında aynı objeyi iki farklı şekilde ( çok şekilli , polymorphism) olarak oluşturma imkanı sunmuştur. 

 

OVERLOADİNG

Function Overloading ve Operator Overloading özelliklerini destekler.
Function Overloading  aynı isimdeki fonksiyonların değişik tip ve sayıdaki parametreler alarak hangisinin
çağrılmasına derleyici tarafından karar verilmesini sağlayan mekanizmadır. Gerek fonksiyonlar için olsun gerekse operatörler için,Overloading  nesnel yönelimli dillerde genelde varolan bir yöntemdir.. Java aynı adlı metodların aynı sınıf içerisinda kullanılmasına izin verir. Aynı sınıfta(class) kullanılan metodların girdi değişkenlerinin değişken türlerinin veya değişken sayılarının farklı olması gerekir. Java aynı isimli ve ayni degişkentürlü iki metodu birbirinden ayıramaz.

Public double

Ametodu(double Adeğişkeni)

Ve

Public double Ametodu(double Bdeğişkeni)

Veya

Public int Ametodu(double Cdeğişkeni)

Java tarafindan ayırt edilemez

Fakat

Public double Ametodu(double Adeğişkeni)

Ve

Public double Ametodu(int Bdeğişkeni)

 

Ornek:

public class sınıf {

    void goster() {
        System.out.println("İsmim murat soyismim öz");
    }

    void goster(String no) {
        System.out.println("Numaram=" + no);
    }

    public static void main(String args[]) {
        String no = "21331";
        Sınıf yeni = new Sınıf();
        yeni.goster(no);
    }
}

Burada overlodaing islemi gerceklesir ve fonksiyon string olarak cagırıldıgından iki goster fonksiyonundan altaki çağrılır.

Ornek 2 

int topla(int a, int b, int c){
return a + b + c;
}

int topla(int a, int b){
return a + b;
}

String topla (String a, String b){
return a + b;

}

 yukarıdaki 3 fonksiyonda birbirinin üzerine yüklenmiş (overloaded) fonksiyonlardır. Bu fonksiyonlar nesne yönelimli programlama dillerinde kabul edilebilir yeniden yükleme örnekleridir. Buna göre çağrılan parametre sayısına veya tipine göre hangi fonksiyonu çağıracağını ayırt etmek mümkündür.

Ancak aşağıdaki gibi bir üzerine yükleme hatalıdır: 

int topla (int a , int b){

return a + b;

}

String topla ( int a, int b){

return "" + a + b;

}

 Yukarıdaki iki fonksiyonu birbirinden ayırt eden özellik döndüş tipleridir (return type) dolayısıyla bu iki fonksiyonu birbirinden ayırt etmek imkansız olabileceği için bu üzerine yükleme şekli kabul edilmemektedir.

 

Yorumunuzu Ekleyin
Java Class Yapısında Constructor Ve Overloading Yorumları +5 Yorum
  • Enes
    1
    Enes
    Süper anlatmışsınız. Teşekkür ederim.
    04 Nisan 2013 23:54:00, Perşembe
  • Emre
    1
    Emre
    Çok açıklayıcı ve tatmin edici anlatım tebrikler
    05 Nisan 2013 11:17:11, Cuma
  • Alparslan
    1
    Alparslan
    İngilizce kaynaklardan anlamakta zorluk çekiyordum teşekkür ederim çook güzel anlatmışınız :> siteyi takip edeceğim yer işaretlerine ekledim bile :>
    19 Aralık 2013 01:47:20, Perşembe
  • cihan
    1
    cihan
    10 numara : tesekkurler :
    25 Ekim 2014 20:23:12, Cumartesi
  • furkan
    1
    furkan
    Örnekler ile çok güzel açıklamışsınız. Elinize sağılık.
    24 Mart 2021 01:22:55, Çarşamba


Yükleniyor...
Yükleniyor...