Konular

EBooklar

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


Yorumlar

  1. Enes
    Süper anlatmışsınız. Teşekkür ederim.
    04 Nisan 2013 23:54:00, Perşembe
  2. Emre
    Çok açıklayıcı ve tatmin edici anlatım tebrikler
    05 Nisan 2013 11:17:11, Cuma
  3. 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
  4. cihan
    10 numara : tesekkurler :
    25 Ekim 2014 20:23:12, Cumartesi



  • Java Diziler
  • Java Diziler ~ 48,292

    Javada diziler nesnedirler, cdeki gibi hafızada yer kaplayan pointer değillerdir. Javada diziler, cye göre daha güvenilirdir. Dizilerin elemanlarına gelişigüzel değerler atayamazsınız. Java, dizi elemanlarını sırasıyla kontrol eder. Dolayısıyla arada değer atanmamış bir elemana rastlanırsa hata oluşur. Bu da cde çıkan hafıza bozulmalarını önler. Javada dizi kullanmak için ilk önce dizinin tipi verilir. Tip verilirken dizinin büyüklüğü belirtilmez






  • Java Da Operatörler
  • Java Da Operatörler ~ 33,476

    Aritmetik operatorler 4 işlem ve mod, arttırma operatorleri, ilişkisel operatorler, mantıksal operatorler, kısa devre mantıksal operatorler





  • Stringleri Karşılaştırma
  • Stringleri Karşılaştırma ~ 31,329

    Stringler bilinen = operatörleri ile karşılaştırılmazlar, ayrıca == ve != operatörleride stringler içindeki karakterleri karşılaştırmazlar






  • Java Terimleri
  • Java Terimleri ~ 26,417

    Java, birbirinden farklı aygıtlarda çalışabilen, bu aygıtlar arasında iletişimi kolay hale getiren programlama dili ve platformudur. Java diliyle yazılmış programlar, Windows, UNIX, Mac işletim sistemi yüklü bilgisayarlarda hiç bir değişiklik yapmayı gerektirmeden çalışabilmektedirler




  • Javada Diziler
  • Javada Diziler ~ 24,508

    Java da diziler nesnedir; içerisinde belirli sayıda eleman bulunur. Eğer bu sayı sıfır ise, dizi boş demektir. Dizinin içerisindeki elemanlara eksi olmayan bir tam sayı ile ifade edilen dizi erişim indisi ile erişilir. Bir dizide n tane eleman varsa dizinin uzunluğu da n kadardır; ilk elemanın indisi/konumu 0’dan başlar, son elemanı ise n-1’dir.






  • Java Operatörleri ~ 21,558

    Mod Operatörü, Aritmetik Atama Operatörü, Arttırma Azaltma Operatörleri, Iliskisel Operatorler ve Kısa Devre Iliskisel Operatörler, Kısa devre iliskisel operatorler, ? Operatoru


  • Java 3D
  • Java 3D ~ 21,371

    Son yıllarda çoklu ortamda ilerleme kaydeden Java, Java3D ile yüksek performans isteyen üç boyutlu grafiklerde de 'Ben varım!' diyor.


  • Javada İlk Kod ~ 20,629

    Java classpath tanımlamaları, consolda ilk program yazılması, derlenmesi, çalıştırılması aynı uygulamanın netbeansta yapılışı ve class, java ve jar dosyalarının gösterilmesi