Java Class Yapısında Constructor Ve Overloading

advertisement
Java Class Yapısında Constructor Ve Overloading
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;
www.dijitalders.com
Java Class Yapısında Constructor Ve
Overloading
1
Java Class Yapısında Constructor Ve Overloading
public int Deger2;
public Sinifim() {
Deger1 = ;
Deger2 = ;
}
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 =
,boy=;
}
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
www.dijitalders.com
Java Class Yapısında Constructor Ve
Overloading
2
Java Class Yapısında Constructor Ve Overloading
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
www.dijitalders.com
Java Class Yapısında Constructor Ve
Overloading
3
Java Class Yapısında Constructor Ve Overloading
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.
www.dijitalders.com
Java Class Yapısında Constructor Ve
Overloading
4
Download